Changes in uspace/srv/hw/char/i8042/i8042.c [d9fae235:385a3d6] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hw/char/i8042/i8042.c
rd9fae235 r385a3d6 68 68 #define i8042_KBD_TRANSLATE 0x40 69 69 70 /* Mouse constants */ 71 #define MOUSE_OUT_INIT 0xf4 72 #define MOUSE_ACK 0xfa 70 73 71 74 enum { … … 164 167 static int i8042_init(void) 165 168 { 166 if (sysinfo_get_value("i8042.address.physical", &i8042_physical) != EOK)167 return -1;168 169 if (sysinfo_get_value("i8042.address.kernel", &i8042_kernel) != EOK)170 return -1;171 172 169 void *vaddr; 170 171 i8042_physical = sysinfo_value("i8042.address.physical"); 172 i8042_kernel = sysinfo_value("i8042.address.kernel"); 173 173 if (pio_enable((void *) i8042_physical, sizeof(i8042_t), &vaddr) != 0) 174 174 return -1; 175 176 175 i8042 = vaddr; 177 178 sysarg_t inr_a; 179 sysarg_t inr_b; 180 181 if (sysinfo_get_value("i8042.inr_a", &inr_a) != EOK) 182 return -1; 183 184 if (sysinfo_get_value("i8042.inr_b", &inr_b) != EOK) 185 return -1; 186 176 187 177 async_set_interrupt_received(i8042_irq_handler); 188 189 /* Disable kbd and aux */ 190 wait_ready(); 178 179 /* Disable kbd, enable mouse */ 191 180 pio_write_8(&i8042->status, i8042_CMD_WRITE_CMDB); 192 181 wait_ready(); 193 pio_write_8(&i8042->data, i8042_KBD_DISABLE | i8042_AUX_DISABLE); 182 pio_write_8(&i8042->status, i8042_CMD_WRITE_CMDB); 183 wait_ready(); 184 pio_write_8(&i8042->data, i8042_KBD_DISABLE); 185 wait_ready(); 194 186 195 187 /* Flush all current IO */ … … 197 189 (void) pio_read_8(&i8042->data); 198 190 191 i8042_port_write(DEVID_AUX, MOUSE_OUT_INIT); 192 199 193 i8042_kbd.cmds[0].addr = (void *) &((i8042_t *) i8042_kernel)->status; 200 194 i8042_kbd.cmds[3].addr = (void *) &((i8042_t *) i8042_kernel)->data; 201 ipc_register_irq(inr_a, device_assign_devno(), 0, &i8042_kbd); 202 ipc_register_irq(inr_b, device_assign_devno(), 0, &i8042_kbd); 203 printf("%s: registered for interrupts %d and %d\n", NAME, inr_a, inr_b); 204 205 wait_ready(); 195 ipc_register_irq(sysinfo_value("i8042.inr_a"), device_assign_devno(), 0, &i8042_kbd); 196 ipc_register_irq(sysinfo_value("i8042.inr_b"), device_assign_devno(), 0, &i8042_kbd); 197 206 198 pio_write_8(&i8042->status, i8042_CMD_WRITE_CMDB); 207 199 wait_ready(); 208 200 pio_write_8(&i8042->data, i8042_KBD_IE | i8042_KBD_TRANSLATE | 209 201 i8042_AUX_IE); 202 wait_ready(); 210 203 211 204 return 0; … … 278 271 { 279 272 if (devid == DEVID_AUX) { 273 pio_write_8(&i8042->status, i8042_CMD_WRITE_AUX); 280 274 wait_ready(); 281 pio_write_8(&i8042->status, i8042_CMD_WRITE_AUX); 282 } 283 wait_ready(); 275 } 284 276 pio_write_8(&i8042->data, data); 277 wait_ready(); 285 278 } 286 279
Note:
See TracChangeset
for help on using the changeset viewer.