#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "console.h"
#include "cpu.h"
#include "devices.h"
#include "machine.h"
#include "memory.h"
#include "misc.h"
#include "thirdparty/kbdreg.h"
Go to the source code of this file.
Classes | |
struct | pckbc_data |
Macros | |
#define | MAX_8042_QUEUELEN 32768 |
#define | PC_DATA 0 |
#define | PC_CMD 0 |
#define | PC_STATUS 1 |
#define | PS2_TXBUF 0 |
#define | PS2_RXBUF 1 |
#define | PS2_CONTROL 2 |
#define | PS2_CONTROL_TXINTEN (1 << 2) |
#define | PS2_CONTROL_RXINTEN (1 << 3) |
#define | PS2_STATUS 3 |
#define | PS2_STATUS_TXEMPTY (1 << 3) |
#define | PS2_STATUS_RXFULL (1 << 4) |
#define | PS2 100 |
#define | PCKBC_TICKSHIFT 15 |
#define | STATE_NORMAL 0 |
#define | STATE_LDCMDBYTE 1 |
#define | STATE_RDCMDBYTE 2 |
#define | STATE_WAITING_FOR_TRANSLTABLE 3 |
#define | STATE_WAITING_FOR_RATE 4 |
#define | STATE_WAITING_FOR_ONEKEY_MB 5 |
#define | STATE_WAITING_FOR_AUX 6 |
#define | STATE_WAITING_FOR_AUX_OUT 7 |
#define | STATE_LDOUTPUT 8 |
#define | STATE_RDOUTPUT 9 |
Functions | |
void | pckbc_add_code (struct pckbc_data *d, int code, int port) |
int | pckbc_get_code (struct pckbc_data *d, int port) |
void | pckbc_reassert_interrupts (struct pckbc_data *d) |
DEVICE_TICK (pckbc) | |
DEVICE_ACCESS (pckbc) | |
int | dev_pckbc_init (struct machine *machine, struct memory *mem, uint64_t baseaddr, int type, char *keyboard_irqpath, char *mouse_irqpath, int in_use, int pc_style_flag) |
#define MAX_8042_QUEUELEN 32768 |
Definition at line 62 of file dev_pckbc.cc.
#define PC_CMD 0 |
Definition at line 65 of file dev_pckbc.cc.
#define PC_DATA 0 |
Definition at line 64 of file dev_pckbc.cc.
#define PC_STATUS 1 |
Definition at line 66 of file dev_pckbc.cc.
#define PCKBC_TICKSHIFT 15 |
Definition at line 79 of file dev_pckbc.cc.
#define PS2 100 |
Definition at line 77 of file dev_pckbc.cc.
#define PS2_CONTROL 2 |
Definition at line 70 of file dev_pckbc.cc.
#define PS2_CONTROL_RXINTEN (1 << 3) |
Definition at line 72 of file dev_pckbc.cc.
#define PS2_CONTROL_TXINTEN (1 << 2) |
Definition at line 71 of file dev_pckbc.cc.
#define PS2_RXBUF 1 |
Definition at line 69 of file dev_pckbc.cc.
#define PS2_STATUS 3 |
Definition at line 73 of file dev_pckbc.cc.
#define PS2_STATUS_RXFULL (1 << 4) |
Definition at line 75 of file dev_pckbc.cc.
#define PS2_STATUS_TXEMPTY (1 << 3) |
Definition at line 74 of file dev_pckbc.cc.
#define PS2_TXBUF 0 |
Definition at line 68 of file dev_pckbc.cc.
#define STATE_LDCMDBYTE 1 |
Definition at line 115 of file dev_pckbc.cc.
#define STATE_LDOUTPUT 8 |
Definition at line 122 of file dev_pckbc.cc.
#define STATE_NORMAL 0 |
Definition at line 114 of file dev_pckbc.cc.
#define STATE_RDCMDBYTE 2 |
Definition at line 116 of file dev_pckbc.cc.
#define STATE_RDOUTPUT 9 |
Definition at line 123 of file dev_pckbc.cc.
#define STATE_WAITING_FOR_AUX 6 |
Definition at line 120 of file dev_pckbc.cc.
#define STATE_WAITING_FOR_AUX_OUT 7 |
Definition at line 121 of file dev_pckbc.cc.
#define STATE_WAITING_FOR_ONEKEY_MB 5 |
Definition at line 119 of file dev_pckbc.cc.
#define STATE_WAITING_FOR_RATE 4 |
Definition at line 118 of file dev_pckbc.cc.
#define STATE_WAITING_FOR_TRANSLTABLE 3 |
Definition at line 117 of file dev_pckbc.cc.
int dev_pckbc_init | ( | struct machine * | machine, |
struct memory * | mem, | ||
uint64_t | baseaddr, | ||
int | type, | ||
char * | keyboard_irqpath, | ||
char * | mouse_irqpath, | ||
int | in_use, | ||
int | pc_style_flag | ||
) |
Definition at line 1157 of file dev_pckbc.cc.
References CHECK_ALLOCATION, pckbc_data::console_handle, console_start_slave_inputonly(), dev_pckbc_access(), DEV_PCKBC_LENGTH, DM_DEFAULT, pckbc_data::in_use, INTERRUPT_CONNECT, pckbc_data::irq_keyboard, pckbc_data::irq_mouse, machine_add_tickfunction(), memory_device_register(), pckbc_data::output_byte, pckbc_data::pc_style_flag, PCKBC_8042, PCKBC_8242, PCKBC_JAZZ, PCKBC_TICKSHIFT, pckbc_data::rx_int_enable, pckbc_data::scanning_enabled, pckbc_data::translation_table, and pckbc_data::type.
Referenced by bus_isa_init(), and MACHINE_SETUP().
DEVICE_ACCESS | ( | pckbc | ) |
Definition at line 864 of file dev_pckbc.cc.
References pckbc_data::cmdbyte, data, fatal(), pckbc_data::head, KC8_KENABLE, KC8_MENABLE, pckbc_data::last_scancode, MEM_READ, MEM_WRITE, memory_readmax64(), memory_writemax64(), pckbc_data::output_byte, pckbc_data::pc_style_flag, PCKBC_8242, pckbc_get_code(), PS2, pckbc_data::reg, pckbc_data::rx_int_enable, pckbc_data::state, STATE_LDCMDBYTE, STATE_LDOUTPUT, STATE_NORMAL, STATE_RDCMDBYTE, STATE_RDOUTPUT, pckbc_data::tail, and pckbc_data::type.
DEVICE_TICK | ( | pckbc | ) |
Definition at line 611 of file dev_pckbc.cc.
References console_charavail(), pckbc_data::console_handle, console_readchar(), pckbc_data::in_use, and pckbc_data::translation_table.
void pckbc_add_code | ( | struct pckbc_data * | d, |
int | code, | ||
int | port | ||
) |
Definition at line 131 of file dev_pckbc.cc.
References fatal(), pckbc_data::head, pckbc_data::key_queue, MAX_8042_QUEUELEN, and pckbc_data::tail.
int pckbc_get_code | ( | struct pckbc_data * | d, |
int | port | ||
) |
Definition at line 147 of file dev_pckbc.cc.
References fatal(), pckbc_data::head, pckbc_data::key_queue, MAX_8042_QUEUELEN, and pckbc_data::tail.
Referenced by DEVICE_ACCESS().
void pckbc_reassert_interrupts | ( | struct pckbc_data * | d | ) |
Definition at line 574 of file dev_pckbc.cc.
References pckbc_data::currently_asserted, pckbc_data::head, INTERRUPT_ASSERT, INTERRUPT_DEASSERT, pckbc_data::irq_keyboard, pckbc_data::irq_mouse, pckbc_data::rx_int_enable, and pckbc_data::tail.