Preparations for splitting keyboard_at.c into multiple files.

This commit is contained in:
OBattler
2023-04-10 18:59:38 +02:00
parent d3bd8fb1ae
commit e33ae8a2af

View File

@@ -120,52 +120,74 @@ enum {
};
typedef struct {
uint8_t command, status, ib, out,
old_out, secr_phase, mem_addr, input_port,
output_port, old_output_port, key_command, output_locked,
ami_stat, want60, key_wantdata, ami_flags,
key_wantcmd, key_dat, mouse_wantcmd, mouse_dat,
kbc_state, kbd_state, mouse_state, pci;
/* Controller. */
uint8_t pci, kbc_state, command, want60,
status, ib, out, old_out,
secr_phase, mem_addr, input_port, output_port,
old_output_port, output_locked, ami_stat, ami_flags,
key_ctrl_queue_start, key_ctrl_queue_end;
uint16_t irq_levels, pad;
/* Keyboard. */
uint8_t kbd_state, key_command, key_wantdata, key_wantcmd,
key_dat, kbd_last_scan_code, sc_or,
key_cmd_queue_start, key_cmd_queue_end, key_queue_start, key_queue_end;
/* Mouse. */
uint8_t mouse_state, mouse_wantcmd, mouse_dat, mouse_cmd_queue_start, mouse_cmd_queue_end,
mouse_queue_start, mouse_queue_end;
/* Controller. */
uint8_t mem[0x100];
int out_new, out_new_mouse,
reset_delay, mouse_reset_delay;
/* Controller - internal FIFO for the purpose of commands with multi-byte output. */
uint8_t key_ctrl_queue[64];
/* Keyboard - command response FIFO. */
uint8_t key_cmd_queue[16];
/* Keyboard - scan FIFO. */
uint8_t key_queue[16];
/* Mouse - command response FIFO. */
uint8_t mouse_cmd_queue[16];
/* Mouse - scan FIFO. */
uint8_t mouse_queue[16];
/* Controller. */
uint16_t irq_levels, pad1;
/* Keyboard. */
int out_new, reset_delay;
/* Mouse. */
int out_new_mouse, mouse_reset_delay;
/* Controller. */
uint32_t flags;
/* Controller (main timer). */
pc_timer_t send_delay_timer;
/* Controller (P2 pulse callback timer). */
pc_timer_t pulse_cb;
uint8_t (*write60_ven)(void *p, uint8_t val);
uint8_t (*write64_ven)(void *p, uint8_t val);
pc_timer_t send_delay_timer;
} atkbd_t;
/* bit 0 = repeat, bit 1 = makes break code? */
/* Global keyboard flags for scan code set 3:
bit 0 = repeat, bit 1 = makes break code? */
uint8_t keyboard_set3_flags[512];
uint8_t keyboard_set3_all_repeat;
uint8_t keyboard_set3_all_break;
/* Bits 0 - 1 = scan code set, bit 6 = translate or not. */
uint8_t keyboard_mode = 0x42;
/* Global keyboard mode:
Bits 0 - 1 = scan code set, bit 6 = translate or not. */
uint8_t keyboard_mode = 0x42;
static uint8_t key_ctrl_queue[64];
static int key_ctrl_queue_start = 0, key_ctrl_queue_end = 0;
static uint8_t key_queue[16];
static int key_queue_start = 0, key_queue_end = 0;
static uint8_t key_cmd_queue[16];
static int key_cmd_queue_start = 0, key_cmd_queue_end = 0;
uint8_t mouse_queue[16];
int mouse_queue_start = 0, mouse_queue_end = 0;
uint8_t mouse_cmd_queue[16];
int mouse_cmd_queue_start = 0, mouse_cmd_queue_end = 0;
static uint8_t kbd_last_scan_code;
static void (*mouse_write)(uint8_t val, void *priv) = NULL;
static void *mouse_p = NULL;
static uint8_t sc_or = 0;
static atkbd_t *SavedKbd = NULL; // FIXME: remove!!! --FvK
/* Non-translated to translated scan codes. */
@@ -655,29 +677,31 @@ set_scancode_map(atkbd_t *dev)
static void
kbc_queue_reset(uint8_t channel)
{
atkbd_t *dev = SavedKbd;
switch (channel) {
case 1:
key_queue_start = key_queue_end = 0;
memset(key_queue, 0x00, sizeof(key_queue));
dev->key_queue_start = dev->key_queue_end = 0;
memset(dev->key_queue, 0x00, sizeof(dev->key_queue));
/* FALLTHROUGH */
case 4:
key_cmd_queue_start = key_cmd_queue_end = 0;
memset(key_cmd_queue, 0x00, sizeof(key_cmd_queue));
dev->key_cmd_queue_start = dev->key_cmd_queue_end = 0;
memset(dev->key_cmd_queue, 0x00, sizeof(dev->key_cmd_queue));
break;
case 2:
mouse_queue_start = mouse_queue_end = 0;
memset(mouse_queue, 0x00, sizeof(mouse_queue));
dev->mouse_queue_start = dev->mouse_queue_end = 0;
memset(dev->mouse_queue, 0x00, sizeof(dev->mouse_queue));
/* FALLTHROUGH */
case 3:
mouse_cmd_queue_start = mouse_cmd_queue_end = 0;
memset(mouse_cmd_queue, 0x00, sizeof(mouse_cmd_queue));
dev->mouse_cmd_queue_start = dev->mouse_cmd_queue_end = 0;
memset(dev->mouse_cmd_queue, 0x00, sizeof(dev->mouse_cmd_queue));
break;
case 0:
default:
key_ctrl_queue_start = key_ctrl_queue_end = 0;
memset(key_ctrl_queue, 0x00, sizeof(key_ctrl_queue));
dev->key_ctrl_queue_start = dev->key_ctrl_queue_end = 0;
memset(dev->key_ctrl_queue, 0x00, sizeof(dev->key_ctrl_queue));
}
}
@@ -686,30 +710,30 @@ kbc_queue_add(atkbd_t *dev, uint8_t val, uint8_t channel)
{
switch (channel) {
case 4:
kbd_log("ATkbc: key_cmd_queue[%02X] = %02X;\n", key_cmd_queue_end, val);
key_cmd_queue[key_cmd_queue_end] = val;
key_cmd_queue_end = (key_cmd_queue_end + 1) & 0xf;
kbd_log("ATkbc: dev->key_cmd_queue[%02X] = %02X;\n", dev->key_cmd_queue_end, val);
dev->key_cmd_queue[dev->key_cmd_queue_end] = val;
dev->key_cmd_queue_end = (dev->key_cmd_queue_end + 1) & 0xf;
break;
case 3:
kbd_log("ATkbc: mouse_cmd_queue[%02X] = %02X;\n", mouse_cmd_queue_end, val);
mouse_cmd_queue[mouse_cmd_queue_end] = val;
mouse_cmd_queue_end = (mouse_cmd_queue_end + 1) & 0xf;
kbd_log("ATkbc: dev->mouse_cmd_queue[%02X] = %02X;\n", dev->mouse_cmd_queue_end, val);
dev->mouse_cmd_queue[dev->mouse_cmd_queue_end] = val;
dev->mouse_cmd_queue_end = (dev->mouse_cmd_queue_end + 1) & 0xf;
break;
case 2:
kbd_log("ATkbc: mouse_queue[%02X] = %02X;\n", mouse_queue_end, val);
mouse_queue[mouse_queue_end] = val;
mouse_queue_end = (mouse_queue_end + 1) & 0xf;
kbd_log("ATkbc: dev->mouse_queue[%02X] = %02X;\n", dev->mouse_queue_end, val);
dev->mouse_queue[dev->mouse_queue_end] = val;
dev->mouse_queue_end = (dev->mouse_queue_end + 1) & 0xf;
break;
case 1:
kbd_log("ATkbc: key_queue[%02X] = %02X;\n", key_queue_end, val);
key_queue[key_queue_end] = val;
key_queue_end = (key_queue_end + 1) & 0xf;
kbd_log("ATkbc: dev->key_queue[%02X] = %02X;\n", dev->key_queue_end, val);
dev->key_queue[dev->key_queue_end] = val;
dev->key_queue_end = (dev->key_queue_end + 1) & 0xf;
break;
case 0:
default:
kbd_log("ATkbc: key_ctrl_queue[%02X] = %02X;\n", key_ctrl_queue_end, val);
key_ctrl_queue[key_ctrl_queue_end] = val;
key_ctrl_queue_end = (key_ctrl_queue_end + 1) & 0x3f;
kbd_log("ATkbc: dev->key_ctrl_queue[%02X] = %02X;\n", dev->key_ctrl_queue_end, val);
dev->key_ctrl_queue[dev->key_ctrl_queue_end] = val;
dev->key_ctrl_queue_end = (dev->key_ctrl_queue_end + 1) & 0x3f;
break;
}
}
@@ -739,14 +763,14 @@ kbc_translate(uint8_t val)
/* Allow for scan code translation. */
if (translate && (val == 0xf0)) {
kbd_log("ATkbd: translate is on, F0 prefix detected\n");
sc_or = 0x80;
dev->sc_or = 0x80;
return ret;
}
/* Skip break code if translated make code has bit 7 set. */
if (translate && (sc_or == 0x80) && (nont_to_t[val] & 0x80)) {
if (translate && (dev->sc_or == 0x80) && (nont_to_t[val] & 0x80)) {
kbd_log("ATkbd: translate is on, skipping scan code: %02X (original: F0 %02X)\n", nont_to_t[val], val);
sc_or = 0;
dev->sc_or = 0;
return ret;
}
@@ -804,18 +828,18 @@ kbc_translate(uint8_t val)
#ifdef ENABLE_KEYBOARD_AT_LOG
kbd_log("scan code: ");
if (translate) {
kbd_log("%02X (original: ", (nont_to_t[val] | sc_or));
if (sc_or == 0x80)
kbd_log("%02X (original: ", (nont_to_t[val] | dev->sc_or));
if (dev->sc_or == 0x80)
kbd_log("F0 ");
kbd_log("%02X)\n", val);
} else
kbd_log("%02X\n", val);
#endif
ret = translate ? (nont_to_t[val] | sc_or) : val;
ret = translate ? (nont_to_t[val] | dev->sc_or) : val;
if (sc_or == 0x80)
sc_or = 0;
if (dev->sc_or == 0x80)
dev->sc_or = 0;
return ret;
}
@@ -861,25 +885,25 @@ add_to_kbc_queue_front(atkbd_t *dev, uint8_t val, uint8_t channel, uint8_t stat_
static void
add_data_kbd_cmd_queue(atkbd_t *dev, uint8_t val)
{
if ((dev->reset_delay > 0) || (key_cmd_queue_end >= 16)) {
kbd_log("ATkbc: Unable to add to queue, conditions: %i, %i\n", (dev->reset_delay > 0), (key_cmd_queue_end >= 16));
if ((dev->reset_delay > 0) || (dev->key_cmd_queue_end >= 16)) {
kbd_log("ATkbc: Unable to add to queue, conditions: %i, %i\n", (dev->reset_delay > 0), (dev->key_cmd_queue_end >= 16));
return;
}
kbd_log("ATkbc: key_cmd_queue[%02X] = %02X;\n", key_cmd_queue_end, val);
kbd_log("ATkbc: dev->key_cmd_queue[%02X] = %02X;\n", dev->key_cmd_queue_end, val);
kbc_queue_add(dev, val, 4);
kbd_last_scan_code = val;
dev->kbd_last_scan_code = val;
}
static void
add_data_kbd_queue(atkbd_t *dev, uint8_t val)
{
if (!keyboard_scan || (dev->reset_delay > 0) || (key_queue_end >= 16)) {
kbd_log("ATkbc: Unable to add to queue, conditions: %i, %i, %i\n", !keyboard_scan, (dev->reset_delay > 0), (key_queue_end >= 16));
if (!keyboard_scan || (dev->reset_delay > 0) || (dev->key_queue_end >= 16)) {
kbd_log("ATkbc: Unable to add to queue, conditions: %i, %i, %i\n", !keyboard_scan, (dev->reset_delay > 0), (dev->key_queue_end >= 16));
return;
}
kbd_log("ATkbc: key_queue[%02X] = %02X;\n", key_queue_end, val);
kbd_log("ATkbc: key_queue[%02X] = %02X;\n", dev->key_queue_end, val);
kbc_queue_add(dev, val, 1);
kbd_last_scan_code = val;
dev->kbd_last_scan_code = val;
}
static void
@@ -1006,10 +1030,10 @@ kbc_poll_at(atkbd_t *dev)
}
/* Do not continue dumping until OBF is clear. */
if (!(dev->status & STAT_OFULL)) {
kbd_log("ATkbc: %02X coming from channel 0\n", key_ctrl_queue[key_ctrl_queue_start]);
add_to_kbc_queue_front(dev, key_ctrl_queue[key_ctrl_queue_start], 0, 0x00);
key_ctrl_queue_start = (key_ctrl_queue_start + 1) & 0x3f;
if (key_ctrl_queue_start == key_ctrl_queue_end)
kbd_log("ATkbc: %02X coming from channel 0\n", dev->key_ctrl_queue[dev-.key_ctrl_queue_start]);
add_to_kbc_queue_front(dev, dev->key_ctrl_queue[dev->key_ctrl_queue_start], 0, 0x00);
dev->key_ctrl_queue_start = (dev->key_ctrl_queue_start + 1) & 0x3f;
if (dev->key_ctrl_queue_start == dev->key_ctrl_queue_end)
dev->kbc_state = KBC_STATE_MAIN_IBF;
}
break;
@@ -1141,9 +1165,9 @@ kbc_poll_ps2(atkbd_t *dev)
/* Do not continue dumping until OBF is clear. */
if (!(dev->status & STAT_OFULL)) {
kbd_log("ATkbc: %02X coming from channel 0\n", dev->out_new & 0xff);
add_to_kbc_queue_front(dev, key_ctrl_queue[key_ctrl_queue_start], 0, 0x00);
key_ctrl_queue_start = (key_ctrl_queue_start + 1) & 0x3f;
if (key_ctrl_queue_start == key_ctrl_queue_end)
add_to_kbc_queue_front(dev, dev->key_ctrl_queue[dev->key_ctrl_queue_start], 0, 0x00);
dev->key_ctrl_queue_start = (dev->key_ctrl_queue_start + 1) & 0x3f;
if (dev->key_ctrl_queue_start == dev->key_ctrl_queue_end)
dev->kbc_state = KBC_STATE_MAIN_IBF;
}
break;
@@ -1206,33 +1230,33 @@ kbc_poll_kbd(atkbd_t *dev)
break;
case DEV_STATE_MAIN_2:
/* Output from scan queue if needed and then return to main loop #1. */
if (keyboard_scan && (dev->out_new == -1) && (key_queue_start != key_queue_end)) {
kbd_log("ATkbc: %02X (DATA) on channel 1\n", key_queue[key_queue_start]);
dev->out_new = key_queue[key_queue_start];
key_queue_start = (key_queue_start + 1) & 0xf;
if (keyboard_scan && (dev->out_new == -1) && (dev->key_queue_start != dev->key_queue_end)) {
kbd_log("ATkbc: %02X (DATA) on channel 1\n", dev->key_queue[key_queue_start]);
dev->out_new = dev->key_queue[dev->key_queue_start];
dev->key_queue_start = (dev->key_queue_start + 1) & 0xf;
}
if (!keyboard_scan || (key_cmd_queue_start == key_cmd_queue_end))
if (!keyboard_scan || (dev->key_queue_start == dev->key_queue_end))
dev->kbd_state = DEV_STATE_MAIN_1;
break;
case DEV_STATE_MAIN_OUT:
case DEV_STATE_RESET_OUT:
/* Output command response and then return to main loop #2. */
if ((dev->out_new == -1) && (key_cmd_queue_start != key_cmd_queue_end)) {
if ((dev->out_new == -1) && (dev->key_cmd_queue_start != dev->key_cmd_queue_end)) {
kbd_log("ATkbc: %02X (CMD ) on channel 1\n", key_cmd_queue[key_cmd_queue_start]);
dev->out_new = key_cmd_queue[key_cmd_queue_start];
key_cmd_queue_start = (key_cmd_queue_start + 1) & 0xf;
dev->out_new = dev->key_cmd_queue[dev->key_cmd_queue_start];
dev->key_cmd_queue_start = (dev->key_cmd_queue_start + 1) & 0xf;
}
if (key_cmd_queue_start == key_cmd_queue_end)
if (dev->key_cmd_queue_start == dev->key_cmd_queue_end)
dev->kbd_state = (dev->kbd_state == DEV_STATE_RESET_OUT) ? DEV_STATE_MAIN_1 : DEV_STATE_MAIN_2;
break;
case DEV_STATE_MAIN_WANT_IN:
/* Output command response and then wait for host data. */
if ((dev->out_new == -1) && (key_cmd_queue_start != key_cmd_queue_end)) {
kbd_log("ATkbc: %02X (CMD ) on channel 1\n", key_cmd_queue[key_cmd_queue_start]);
dev->out_new = key_cmd_queue[key_cmd_queue_start];
key_cmd_queue_start = (key_cmd_queue_start + 1) & 0xf;
if ((dev->out_new == -1) && (dev->key_cmd_queue_start != dev->key_cmd_queue_end)) {
kbd_log("ATkbc: %02X (CMD ) on channel 1\n", dev->key_cmd_queue[dev->key_cmd_queue_start]);
dev->out_new = dev->key_cmd_queue[dev->key_cmd_queue_start];
dev->key_cmd_queue_start = (dev->key_cmd_queue_start + 1) & 0xf;
}
if (key_cmd_queue_start == key_cmd_queue_end)
if (dev->key_cmd_queue_start == dev->key_cmd_queue_end)
dev->kbd_state = DEV_STATE_MAIN_IN;
break;
case DEV_STATE_MAIN_IN:
@@ -1247,12 +1271,12 @@ kbc_poll_kbd(atkbd_t *dev)
break;
case DEV_STATE_MAIN_WANT_RESET:
/* Output command response and then go to the reset state. */
if ((dev->out_new == -1) && (key_cmd_queue_start != key_cmd_queue_end)) {
kbd_log("ATkbc: %02X (CMD ) on channel 1\n", key_cmd_queue[key_cmd_queue_start]);
dev->out_new = key_cmd_queue[key_cmd_queue_start];
key_cmd_queue_start = (key_cmd_queue_start + 1) & 0xf;
if ((dev->out_new == -1) && (dev->key_cmd_queue_start != dev->key_cmd_queue_end)) {
kbd_log("ATkbc: %02X (CMD ) on channel 1\n", dev->key_cmd_queue[dev->key_cmd_queue_start]);
dev->out_new = dev->key_cmd_queue[dev->key_cmd_queue_start];
dev->key_cmd_queue_start = (dev->key_cmd_queue_start + 1) & 0xf;
}
if (key_cmd_queue_start == key_cmd_queue_end)
if (dev->key_cmd_queue_start == dev->key_cmd_queue_end)
dev->kbd_state = DEV_STATE_RESET;
break;
}
@@ -1292,33 +1316,33 @@ kbc_poll_aux(atkbd_t *dev)
break;
case DEV_STATE_MAIN_2:
/* Output from scan queue if needed and then return to main loop #1. */
if (mouse_scan && (dev->out_new_mouse == -1) && (mouse_queue_start != mouse_queue_end)) {
kbd_log("ATkbc: %02X (DATA) on channel 2\n", mouse_queue[mouse_queue_start]);
dev->out_new_mouse = mouse_queue[mouse_queue_start];
mouse_queue_start = (mouse_queue_start + 1) & 0xf;
if (mouse_scan && (dev->out_new_mouse == -1) && (dev->mouse_queue_start != dev->mouse_queue_end)) {
kbd_log("ATkbc: %02X (DATA) on channel 2\n", dev->mouse_queue[dev->mouse_queue_start]);
dev->out_new_mouse = dev->mouse_queue[dev->mouse_queue_start];
dev->mouse_queue_start = (dev->mouse_queue_start + 1) & 0xf;
}
if (!mouse_scan || (mouse_cmd_queue_start == mouse_cmd_queue_end))
if (!mouse_scan || (dev->mouse_queue_start == dev->mouse_queue_end))
dev->mouse_state = DEV_STATE_MAIN_1;
break;
case DEV_STATE_MAIN_OUT:
case DEV_STATE_RESET_OUT:
/* Output command response and then return to main loop #2. */
if ((dev->out_new_mouse == -1) && (mouse_cmd_queue_start != mouse_cmd_queue_end)) {
kbd_log("ATkbc: %02X (CMD ) on channel 2\n", mouse_cmd_queue[mouse_cmd_queue_start]);
dev->out_new_mouse = mouse_cmd_queue[mouse_cmd_queue_start];
mouse_cmd_queue_start = (mouse_cmd_queue_start + 1) & 0xf;
if ((dev->out_new_mouse == -1) && (dev->mouse_cmd_queue_start != dev->mouse_cmd_queue_end)) {
kbd_log("ATkbc: %02X (CMD ) on channel 2\n", dev->mouse_cmd_queue[dev->mouse_cmd_queue_start]);
dev->out_new_mouse = dev->mouse_cmd_queue[dev->mouse_cmd_queue_start];
dev->mouse_cmd_queue_start = (dev->mouse_cmd_queue_start + 1) & 0xf;
}
if (mouse_cmd_queue_start == mouse_cmd_queue_end)
if (dev->mouse_cmd_queue_start == dev->mouse_cmd_queue_end)
dev->mouse_state = (dev->mouse_state == DEV_STATE_RESET_OUT) ? DEV_STATE_MAIN_1 : DEV_STATE_MAIN_2;
break;
case DEV_STATE_MAIN_WANT_IN:
/* Output command response and then wait for host data. */
if ((dev->out_new_mouse == -1) && (mouse_cmd_queue_start != mouse_cmd_queue_end)) {
kbd_log("ATkbc: %02X (CMD ) on channel 2\n", mouse_cmd_queue[mouse_cmd_queue_start]);
dev->out_new_mouse = mouse_cmd_queue[mouse_cmd_queue_start];
mouse_cmd_queue_start = (mouse_cmd_queue_start + 1) & 0xf;
if ((dev->out_new_mouse == -1) && (dev->mouse_cmd_queue_start != dev->mouse_cmd_queue_end)) {
kbd_log("ATkbc: %02X (CMD ) on channel 2\n", dev->mouse_cmd_queue[dev->mouse_cmd_queue_start]);
dev->out_new_mouse = dev->mouse_cmd_queue[dev->mouse_cmd_queue_start];
dev->mouse_cmd_queue_start = (dev->mouse_cmd_queue_start + 1) & 0xf;
}
if (mouse_cmd_queue_start == mouse_cmd_queue_end)
if (dev->mouse_cmd_queue_start == dev->mouse_cmd_queue_end)
dev->mouse_state = DEV_STATE_MAIN_IN;
break;
case DEV_STATE_MAIN_IN:
@@ -1334,12 +1358,12 @@ kbc_poll_aux(atkbd_t *dev)
break;
case DEV_STATE_MAIN_WANT_RESET:
/* Output command response and then go to the reset state. */
if ((dev->out_new_mouse == -1) && (mouse_cmd_queue_start != mouse_cmd_queue_end)) {
kbd_log("ATkbc: %02X (CMD ) on channel 2\n", mouse_cmd_queue[mouse_cmd_queue_start]);
dev->out_new_mouse = mouse_cmd_queue[mouse_cmd_queue_start];
mouse_cmd_queue_start = (mouse_cmd_queue_start + 1) & 0xf;
if ((dev->out_new_mouse == -1) && (dev->mouse_cmd_queue_start != dev->mouse_cmd_queue_end)) {
kbd_log("ATkbc: %02X (CMD ) on channel 2\n", dev->mouse_cmd_queue[dev->mouse_cmd_queue_start]);
dev->out_new_mouse = dev->mouse_cmd_queue[dev->mouse_cmd_queue_start];
dev->mouse_cmd_queue_start = (dev->mouse_cmd_queue_start + 1) & 0xf;
}
if (mouse_cmd_queue_start == mouse_cmd_queue_end)
if (dev->mouse_cmd_queue_start == dev->mouse_cmd_queue_end)
dev->mouse_state = DEV_STATE_RESET;
break;
}
@@ -2239,7 +2263,7 @@ kbd_key_reset(atkbd_t *dev, int do_fa)
dev->out_new = -1;
kbc_queue_reset(1);
kbd_last_scan_code = 0x00;
dev->kbd_last_scan_code = 0x00;
/* Set scan code set to 2. */
keyboard_mode = (keyboard_mode & 0xfc) | 0x02;
@@ -2247,6 +2271,8 @@ kbd_key_reset(atkbd_t *dev, int do_fa)
keyboard_scan = 1;
dev->sc_or = 0;
if (do_fa)
add_data_kbd_front(dev, 0xfa);
@@ -2432,8 +2458,8 @@ kbd_process_cmd(void *priv)
break;
case 0xfe: /* resend last scan code */
kbd_log("ATkbd: reset last scan code\n");
add_data_kbd_front(dev, kbd_last_scan_code);
kbd_log("ATkbd: resend last scan code\n");
add_data_kbd_front(dev, dev->kbd_last_scan_code);
break;
case 0xff: /* reset */
@@ -2824,9 +2850,9 @@ kbd_reset(void *priv)
dev->out_new = dev->out_new_mouse = -1;
for (i = 0; i < 3; i++)
kbc_queue_reset(i);
kbd_last_scan_code = 0;
dev->kbd_last_scan_code = 0;
sc_or = 0;
dev->sc_or = 0;
memset(keyboard_set3_flags, 0, 512);
@@ -3277,8 +3303,8 @@ keyboard_at_adddata_mouse(uint8_t val)
{
atkbd_t *dev = SavedKbd;
if (!mouse_scan || (dev->mouse_reset_delay > 0) || (mouse_queue_end >= 16)) {
kbd_log("ATkbc: Unable to add to queue, conditions: %i, %i, %i\n", !mouse_scan, (dev->mouse_reset_delay > 0), (mouse_queue_end >= 16));
if (!mouse_scan || (dev->mouse_reset_delay > 0) || (dev->mouse_queue_end >= 16)) {
kbd_log("ATkbc: Unable to add to queue, conditions: %i, %i, %i\n", !mouse_scan, (dev->mouse_reset_delay > 0), (dev->mouse_queue_end >= 16));
return;
}
kbc_queue_add(dev, val, 2);
@@ -3289,8 +3315,8 @@ keyboard_at_adddata_mouse_cmd(uint8_t val)
{
atkbd_t *dev = SavedKbd;
if ((dev->mouse_reset_delay > 0) || (mouse_cmd_queue_end >= 16)) {
kbd_log("ATkbc: Unable to add to queue, conditions: %i, %i\n", (dev->mouse_reset_delay > 0), (mouse_cmd_queue_end >= 16));
if ((dev->mouse_reset_delay > 0) || (dev->mouse_cmd_queue_end >= 16)) {
kbd_log("ATkbc: Unable to add to queue, conditions: %i, %i\n", (dev->mouse_reset_delay > 0), (dev->mouse_cmd_queue_end >= 16));
return;
}
kbc_queue_add(dev, val, 3);
@@ -3299,7 +3325,9 @@ keyboard_at_adddata_mouse_cmd(uint8_t val)
uint8_t
keyboard_at_mouse_pos(void)
{
return ((mouse_queue_end - mouse_queue_start) & 0xf);
atkbd_t *dev = SavedKbd;
return ((dev->mouse_queue_end - dev->mouse_queue_start) & 0xf);
}
void