static int __i8042_command(int command, u8 *param) { int receive = (command >> 8) & 0xf; int send = (command >> 12) & 0xf; // Send the command. int ret = i8042_wait_write(); if (ret) return ret; outb(command, PORT_PS2_STATUS); // Send parameters (if any). int i; for (i = 0; i < send; i++) { ret = i8042_wait_write(); if (ret) return ret; outb(param[i], PORT_PS2_DATA); } // Receive parameters (if any). for (i = 0; i < receive; i++) { ret = i8042_wait_read(); if (ret) return ret; param[i] = inb(PORT_PS2_DATA); dprintf(7, "i8042 param=%x\n", param[i]); } return 0; }
inline uint8_t i8042_read_data() { i8042_wait_read(); return i386_inb(I8042_DATA_PORT); }