Added the ALi M5123 keyboard controller.
This commit is contained in:
@@ -89,6 +89,7 @@
|
|||||||
#define KBC_VEN_OLIVETTI 0x24
|
#define KBC_VEN_OLIVETTI 0x24
|
||||||
#define KBC_VEN_NCR 0x28
|
#define KBC_VEN_NCR 0x28
|
||||||
#define KBC_VEN_SAMSUNG 0x2c
|
#define KBC_VEN_SAMSUNG 0x2c
|
||||||
|
#define KBC_VEN_ALI 0x30
|
||||||
#define KBC_VEN_MASK 0x3c
|
#define KBC_VEN_MASK 0x3c
|
||||||
|
|
||||||
|
|
||||||
@@ -1093,6 +1094,8 @@ write_output(atkbd_t *dev, uint8_t val)
|
|||||||
softresetx86(); /*Pulse reset!*/
|
softresetx86(); /*Pulse reset!*/
|
||||||
cpu_set_edx();
|
cpu_set_edx();
|
||||||
flushmmucache();
|
flushmmucache();
|
||||||
|
if (kbc_ven == KBC_VEN_ALI)
|
||||||
|
smbase = 0x00030000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1353,6 +1356,7 @@ static uint8_t
|
|||||||
write64_ami(void *priv, uint8_t val)
|
write64_ami(void *priv, uint8_t val)
|
||||||
{
|
{
|
||||||
atkbd_t *dev = (atkbd_t *)priv;
|
atkbd_t *dev = (atkbd_t *)priv;
|
||||||
|
uint8_t kbc_ven = dev->flags & KBC_VEN_MASK;
|
||||||
|
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case 0x00: case 0x01: case 0x02: case 0x03:
|
case 0x00: case 0x01: case 0x02: case 0x03:
|
||||||
@@ -1386,7 +1390,15 @@ write64_ami(void *priv, uint8_t val)
|
|||||||
|
|
||||||
case 0xa1: /* get controller version */
|
case 0xa1: /* get controller version */
|
||||||
kbd_log("ATkbc: AMI - get controller version\n");
|
kbd_log("ATkbc: AMI - get controller version\n");
|
||||||
add_data(dev, 'H');
|
if ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF) {
|
||||||
|
if (kbc_ven == KBC_VEN_ALI)
|
||||||
|
add_data(dev, 'F');
|
||||||
|
else if ((dev->flags & KBC_VEN_MASK) == KBC_VEN_INTEL_AMI)
|
||||||
|
add_data(dev, '5');
|
||||||
|
else
|
||||||
|
add_data(dev, 'H');
|
||||||
|
} else
|
||||||
|
add_data(dev, 'F');
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case 0xa2: /* clear keyboard controller lines P22/P23 */
|
case 0xa2: /* clear keyboard controller lines P22/P23 */
|
||||||
@@ -1456,9 +1468,14 @@ write64_ami(void *priv, uint8_t val)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xaf: /* set extended controller RAM */
|
case 0xaf: /* set extended controller RAM */
|
||||||
kbd_log("ATkbc: set extended controller RAM\n");
|
if (kbc_ven == KBC_VEN_ALI) {
|
||||||
dev->want60 = 1;
|
kbd_log("ATkbc: Award/ALi/VIA keyboard controller revision\n");
|
||||||
dev->secr_phase = 1;
|
add_to_kbc_queue_front(dev, 0x43, 0, 0x00);
|
||||||
|
} else {
|
||||||
|
kbd_log("ATkbc: set extended controller RAM\n");
|
||||||
|
dev->want60 = 1;
|
||||||
|
dev->secr_phase = 1;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case 0xb0: case 0xb1: case 0xb2: case 0xb3:
|
case 0xb0: case 0xb1: case 0xb2: case 0xb3:
|
||||||
@@ -1754,8 +1771,7 @@ kbd_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
{
|
{
|
||||||
atkbd_t *dev = (atkbd_t *)priv;
|
atkbd_t *dev = (atkbd_t *)priv;
|
||||||
int i = 0, bad = 1;
|
int i = 0, bad = 1;
|
||||||
uint8_t mask, kbc_ven = 0x0;
|
uint8_t mask, kbc_ven = dev->flags & KBC_VEN_MASK;
|
||||||
kbc_ven = dev->flags & KBC_VEN_MASK;
|
|
||||||
|
|
||||||
switch (port) {
|
switch (port) {
|
||||||
case 0x60:
|
case 0x60:
|
||||||
@@ -2315,6 +2331,7 @@ kbd_init(const device_t *info)
|
|||||||
case KBC_VEN_AMI:
|
case KBC_VEN_AMI:
|
||||||
case KBC_VEN_INTEL_AMI:
|
case KBC_VEN_INTEL_AMI:
|
||||||
case KBC_VEN_SAMSUNG:
|
case KBC_VEN_SAMSUNG:
|
||||||
|
case KBC_VEN_ALI:
|
||||||
dev->write60_ven = write60_ami;
|
dev->write60_ven = write60_ami;
|
||||||
dev->write64_ven = write64_ami;
|
dev->write64_ven = write64_ami;
|
||||||
break;
|
break;
|
||||||
@@ -2508,6 +2525,20 @@ const device_t keyboard_ps2_ami_device = {
|
|||||||
.config = NULL
|
.config = NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const device_t keyboard_ps2_ali_device = {
|
||||||
|
.name = "PS/2 Keyboard (ALi M5123/M1543C)",
|
||||||
|
.internal_name = "keyboard_ps2_ali",
|
||||||
|
.flags = 0,
|
||||||
|
.local = KBC_TYPE_PS2_NOREF | KBC_VEN_ALI,
|
||||||
|
.init = kbd_init,
|
||||||
|
.close = kbd_close,
|
||||||
|
.reset = kbd_reset,
|
||||||
|
{ .available = NULL },
|
||||||
|
.speed_changed = NULL,
|
||||||
|
.force_redraw = NULL,
|
||||||
|
.config = NULL
|
||||||
|
};
|
||||||
|
|
||||||
const device_t keyboard_ps2_olivetti_device = {
|
const device_t keyboard_ps2_olivetti_device = {
|
||||||
.name = "PS/2 Keyboard (Olivetti)",
|
.name = "PS/2 Keyboard (Olivetti)",
|
||||||
.internal_name = "keyboard_ps2_olivetti",
|
.internal_name = "keyboard_ps2_olivetti",
|
||||||
|
Reference in New Issue
Block a user