inline void i8042_toggle_port(int port, int enabled) { if (enabled) i8042_write_command(port ? I8042_CMD_ENABLE_PORT_2 : I8042_CMD_ENABLE_PORT_1); else i8042_write_command(port ? I8042_CMD_DISABLE_PORT_2 : I8042_CMD_DISABLE_PORT_1); }
u8int i8042_disable_devices() { //1 if ( DEBUG_KBD ) { printf ( "disabling devices..." ); } i8042_write_command ( 0xAD ); i8042_write_command ( 0xA7 ); return 0; }
u8int i8042_enable_devices() { //7 if ( DEBUG_KBD ) { printf ( "enabling devices..." ); } i8042_write_command ( 0xAE ); i8042_write_command ( 0x20 ); u8int stat = i8042_read_data(); stat |= 1 << 0; stat |= 1 << 1; i8042_write_command ( 0x60 ); i8042_write_data ( stat ); return 0; }
u8int i8042_set_controller_config_byte() { //3 if ( DEBUG_KBD ) { printf ( "setting controller config byte" ); } i8042_write_command ( 0x20 ); status = i8042_read_data(); status |= 1 << 0; status |= 1 << 1; status |= 1 << 6; i8042_write_command ( 0x60 ); i8042_write_data ( status ); if ( DEBUG_KBD && ! ( status & ( 1 << 5 ) ) ) { printf ( "DUAL PS/2 = YES\n" ); //TODO check if this is right } return 0; }
int i8042_self_test() { int n, r; for (n = 0; n < 5; n++) { i8042_write_command(I8042_CMD_TEST_CONTROLLER); r = i8042_read_data(); if (r == 0x55) return 0; } return -1; }
u8int i8042_controller_self_test() { //4 if ( DEBUG_KBD ) { printf ( "controller self test" ); } i8042_write_command ( 0xAA ); u8int resp = i8042_read_data(); resp = i8042_read_data(); if ( DEBUG_KBD ) { if ( resp == 0x55 ) { printf ( "PASS\n" ); } if ( resp == 0xFC ) { printf ( "FAIL\n" ); } } return 0; }
void i8042_write(int port, uint8_t data) { if (port) i8042_write_command(I8042_CMD_WRITE_PORT_2); i8042_write_data(data); }
inline uint8_t i8042_read_ram(uint8_t addr) { i8042_write_command(I8042_CMD_READ_RAM(addr)); return i8042_read_data(); }
inline void i8042_write_ram(uint8_t addr, uint8_t data) { i8042_write_command(I8042_CMD_WRITE_RAM(addr)); i8042_write_data(data); }