kontron/ktqm77: Clean up int15 handler

Worked out the purpose of more int15 calls and let them return
appropriate values. Also remove handlers for copy-pasted calls never
observed on this board.

Change-Id: I3d8c4ec5542bd19baca1dca83badc9b568779e1b
Signed-off-by: Nico Huber <nico.huber@secunet.com>
Reviewed-on: http://review.coreboot.org/6249
Tested-by: build bot (Jenkins)
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
This commit is contained in:
Patrick Georgi 2014-06-27 12:17:17 +02:00 committed by Patrick Georgi
parent 40f9ce93fa
commit 7fc2da9107
1 changed files with 56 additions and 28 deletions

View File

@ -97,40 +97,68 @@ static int int15_handler(void)
X86_ECX |= 0x0000; /* TODO: Make this configurable in NVRAM? */ X86_ECX |= 0x0000; /* TODO: Make this configurable in NVRAM? */
res = 1; res = 1;
break; break;
case 0x5f70: case 0x5f40:
switch ((X86_ECX >> 8) & 0xff) { /*
case 0: * Boot Panel Type Hook:
/* Get Mux */ * BL(in): 00h = LFP, 01h = LFP2
* CL(out): panel type id in table: 1..16
*/
if (0 == (X86_EBX & 0xff)) {
X86_EAX &= 0xffff0000; X86_EAX &= 0xffff0000;
X86_EAX |= 0x005f; X86_EAX |= 0x015f;
X86_ECX &= 0xffff0000;
X86_ECX |= 0x0000;
res = 1; res = 1;
break; } else if (1 == (X86_EBX & 0xff)) {
case 1:
/* Set Mux */
X86_EAX &= 0xffff0000; X86_EAX &= 0xffff0000;
X86_EAX |= 0x005f; X86_EAX |= 0x015f;
X86_ECX &= 0xffff0000;
X86_ECX |= 0x0000;
res = 1; res = 1;
break; } else {
case 2: printk(BIOS_DEBUG,
/* Get SG/Non-SG mode */ "Unknown panel index %u "
X86_EAX &= 0xffff0000; "in INT15 function %04x!\n",
X86_EAX |= 0x005f; X86_EBX & 0xff, X86_EAX & 0xffff);
X86_ECX &= 0xffff0000;
X86_ECX |= 0x0000;
res = 1;
break;
default:
/* Interrupt was not handled */
printk(BIOS_DEBUG, "Unknown INT15 5f70 function: 0x%02x\n",
((X86_ECX >> 8) & 0xff));
return 1;
} }
break; break;
case 0x5f52:
/*
* Panel Color Depth:
* 00h = 18 bit
* 01h = 24 bit
*/
X86_EAX &= 0xffff0000;
X86_EAX |= 0x005f;
X86_ECX &= 0xffff0000;
X86_ECX |= 0x0001;
res = 1;
break;
case 0x5f14:
if ((X86_EBX & 0xffff) == 0x78f) {
/*
* Get Miscellaneous Status Hook:
* bit 2: AC power active?
* bit 1: lid closed?
* bit 0: docked?
*/
X86_EAX &= 0xffff0000;
X86_EAX |= 0x015f;
res = 1;
} else {
printk(BIOS_DEBUG,
"Unknown BX 0x%04x in INT15 function %04x!\n",
X86_EBX & 0xffff, X86_EAX & 0xffff);
}
break;
case 0x5f49:
/*
* Get Inverter Type and Polarity:
* EBX: backlight control brightness: 0..255
* ECX:
* 0 = Enable PWM inverted, 2 = Enable PWM
* 1 = Enable I2C inverted, 3 = Enable I2C
*/
X86_EAX &= 0xffff0000;
X86_EAX |= 0x015f;
res = 1;
break;
default: default:
printk(BIOS_DEBUG, "Unknown INT15 function %04x!\n", printk(BIOS_DEBUG, "Unknown INT15 function %04x!\n",
X86_EAX & 0xffff); X86_EAX & 0xffff);