Changeset c47e1a8 in mainline for uspace/srv/hw/char/i8042/i8042.c
- Timestamp:
- 2010-05-21T07:50:04Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- d51ee2b
- Parents:
- cf8cc36 (diff), 15b592b (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hw/char/i8042/i8042.c
rcf8cc36 rc47e1a8 68 68 #define i8042_KBD_TRANSLATE 0x40 69 69 70 /* Mouse constants */71 #define MOUSE_OUT_INIT 0xf472 #define MOUSE_ACK 0xfa73 70 74 71 enum { … … 167 164 static int i8042_init(void) 168 165 { 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 169 172 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 175 176 i8042 = vaddr; 176 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 177 187 async_set_interrupt_received(i8042_irq_handler); 178 179 /* Disable kbd, enable mouse */ 188 189 /* Disable kbd and aux */ 190 wait_ready(); 180 191 pio_write_8(&i8042->status, i8042_CMD_WRITE_CMDB); 181 192 wait_ready(); 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(); 193 pio_write_8(&i8042->data, i8042_KBD_DISABLE | i8042_AUX_DISABLE); 186 194 187 195 /* Flush all current IO */ … … 189 197 (void) pio_read_8(&i8042->data); 190 198 191 i8042_port_write(DEVID_AUX, MOUSE_OUT_INIT);192 193 199 i8042_kbd.cmds[0].addr = (void *) &((i8042_t *) i8042_kernel)->status; 194 200 i8042_kbd.cmds[3].addr = (void *) &((i8042_t *) i8042_kernel)->data; 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 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(); 198 206 pio_write_8(&i8042->status, i8042_CMD_WRITE_CMDB); 199 207 wait_ready(); 200 208 pio_write_8(&i8042->data, i8042_KBD_IE | i8042_KBD_TRANSLATE | 201 209 i8042_AUX_IE); 202 wait_ready();203 210 204 211 return 0; … … 271 278 { 272 279 if (devid == DEVID_AUX) { 280 wait_ready(); 273 281 pio_write_8(&i8042->status, i8042_CMD_WRITE_AUX); 274 wait_ready();275 }282 } 283 wait_ready(); 276 284 pio_write_8(&i8042->data, data); 277 wait_ready();278 285 } 279 286
Note:
See TracChangeset
for help on using the changeset viewer.