Changes in uspace/srv/hw/char/i8042/i8042.c [385a3d6:7e752b2] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hw/char/i8042/i8042.c
r385a3d6 r7e752b2 46 46 #include <stdio.h> 47 47 #include <errno.h> 48 #include <inttypes.h> 48 49 49 50 #include "i8042.h" … … 68 69 #define i8042_KBD_TRANSLATE 0x40 69 70 70 /* Mouse constants */71 #define MOUSE_OUT_INIT 0xf472 #define MOUSE_ACK 0xfa73 71 74 72 enum { … … 148 146 149 147 snprintf(name, 16, "%s/ps2%c", NAMESPACE, dchar[i]); 150 rc = devmap_device_register(name, &i8042_port[i].dev _handle);148 rc = devmap_device_register(name, &i8042_port[i].devmap_handle); 151 149 if (rc != EOK) { 152 150 devmap_hangup_phone(DEVMAP_DRIVER); … … 167 165 static int i8042_init(void) 168 166 { 167 if (sysinfo_get_value("i8042.address.physical", &i8042_physical) != EOK) 168 return -1; 169 170 if (sysinfo_get_value("i8042.address.kernel", &i8042_kernel) != EOK) 171 return -1; 172 169 173 void *vaddr; 170 171 i8042_physical = sysinfo_value("i8042.address.physical");172 i8042_kernel = sysinfo_value("i8042.address.kernel");173 174 if (pio_enable((void *) i8042_physical, sizeof(i8042_t), &vaddr) != 0) 174 175 return -1; 176 175 177 i8042 = vaddr; 176 178 179 sysarg_t inr_a; 180 sysarg_t inr_b; 181 182 if (sysinfo_get_value("i8042.inr_a", &inr_a) != EOK) 183 return -1; 184 185 if (sysinfo_get_value("i8042.inr_b", &inr_b) != EOK) 186 return -1; 187 177 188 async_set_interrupt_received(i8042_irq_handler); 178 179 /* Disable kbd, enable mouse */ 189 190 /* Disable kbd and aux */ 191 wait_ready(); 180 192 pio_write_8(&i8042->status, i8042_CMD_WRITE_CMDB); 181 193 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(); 194 pio_write_8(&i8042->data, i8042_KBD_DISABLE | i8042_AUX_DISABLE); 186 195 187 196 /* Flush all current IO */ … … 189 198 (void) pio_read_8(&i8042->data); 190 199 191 i8042_port_write(DEVID_AUX, MOUSE_OUT_INIT);192 193 200 i8042_kbd.cmds[0].addr = (void *) &((i8042_t *) i8042_kernel)->status; 194 201 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 202 ipc_register_irq(inr_a, device_assign_devno(), 0, &i8042_kbd); 203 ipc_register_irq(inr_b, device_assign_devno(), 0, &i8042_kbd); 204 printf("%s: registered for interrupts %" PRIun " and %" PRIun "\n", 205 NAME, inr_a, inr_b); 206 207 wait_ready(); 198 208 pio_write_8(&i8042->status, i8042_CMD_WRITE_CMDB); 199 209 wait_ready(); 200 210 pio_write_8(&i8042->data, i8042_KBD_IE | i8042_KBD_TRANSLATE | 201 211 i8042_AUX_IE); 202 wait_ready();203 212 204 213 return 0; … … 211 220 ipc_call_t call; 212 221 ipcarg_t method; 213 dev _handle_t dh;222 devmap_handle_t dh; 214 223 int retval; 215 224 int dev_id, i; … … 223 232 dev_id = -1; 224 233 for (i = 0; i < MAX_DEVS; i++) { 225 if (i8042_port[i].dev _handle == dh)234 if (i8042_port[i].devmap_handle == dh) 226 235 dev_id = i; 227 236 } … … 255 264 break; 256 265 case IPC_FIRST_USER_METHOD: 257 printf(NAME ": write % dto devid %d\n",266 printf(NAME ": write %" PRIun " to devid %d\n", 258 267 IPC_GET_ARG1(call), dev_id); 259 268 i8042_port_write(dev_id, IPC_GET_ARG1(call)); … … 271 280 { 272 281 if (devid == DEVID_AUX) { 282 wait_ready(); 273 283 pio_write_8(&i8042->status, i8042_CMD_WRITE_AUX); 274 wait_ready();275 }284 } 285 wait_ready(); 276 286 pio_write_8(&i8042->data, data); 277 wait_ready();278 287 } 279 288
Note:
See TracChangeset
for help on using the changeset viewer.