Changeset 336f03b in mainline for uspace/drv/char/i8042/i8042.c
- Timestamp:
- 2011-12-27T10:53:46Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- a84ddf0
- Parents:
- 9ff60d1
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/char/i8042/i8042.c
r9ff60d1 r336f03b 57 57 static int i8042_write_aux(ddf_fun_t *, char *, size_t); 58 58 static int i8042_read_aux(ddf_fun_t *, char *, size_t); 59 59 /*----------------------------------------------------------------------------*/ 60 /** Primary port interface structure. */ 60 61 static char_dev_ops_t kbd_iface = { 61 62 .read = i8042_read_kbd, 62 63 .write = i8042_write_kbd, 63 64 }; 64 65 /*----------------------------------------------------------------------------*/ 66 /** Auxiliary port interface structure. */ 65 67 static char_dev_ops_t aux_iface = { 66 68 .read = i8042_read_aux, 67 69 .write = i8042_write_aux, 68 70 }; 69 71 /*----------------------------------------------------------------------------*/ 72 /** Primary port function operations. */ 70 73 static ddf_dev_ops_t kbd_ops = { 71 74 .interfaces[CHAR_DEV_IFACE] = &kbd_iface 72 75 }; 73 76 /*----------------------------------------------------------------------------*/ 77 /** Auxiliary port function operations. */ 74 78 static ddf_dev_ops_t aux_ops = { 75 79 .interfaces[CHAR_DEV_IFACE] = &aux_iface … … 92 96 #define i8042_KBD_TRANSLATE 0x40 /* Use this to switch to XT scancodes */ 93 97 98 /** i8042 Interrupt pseudo-code. */ 94 99 static const irq_cmd_t i8042_cmds[] = { 95 100 { … … 119 124 }; 120 125 /*----------------------------------------------------------------------------*/ 126 /** Wait until it is safe to write to the device. */ 121 127 static void wait_ready(i8042_t *dev) 122 128 { … … 125 131 } 126 132 /*----------------------------------------------------------------------------*/ 127 static void wait_ready_write(i8042_t *dev) 128 { 129 assert(dev); 130 while (pio_read_8(&dev->regs->status) & i8042_OUTPUT_FULL); 131 } 132 /*----------------------------------------------------------------------------*/133 /** Interrupt handler routine. 134 * Writes new data to the corresponding buffer. 135 * @param dev Device that caued the interrupt. 136 * @param iid Call id. 137 * @param call pointerr to call data. 138 */ 133 139 static void i8042_irq_handler( 134 140 ddf_dev_t *dev, ipc_callid_t iid, ipc_call_t *call) … … 145 151 } 146 152 /*----------------------------------------------------------------------------*/ 153 /** Initialize i8042 driver structure. 154 * @param dev Driver structure to initialize. 155 * @param regs I/O address of registers. 156 * @param reg_size size of the reserved I/O address space. 157 * @param irq_kbd IRQ for primary port. 158 * @param irq_mouse IRQ for aux port. 159 * @param ddf_dev DDF device structure of the device. 160 * @return Error code. 161 */ 147 162 int i8042_init(i8042_t *dev, void *regs, size_t reg_size, int irq_kbd, 148 163 int irq_mouse, ddf_dev_t *ddf_dev) … … 273 288 } 274 289 /*----------------------------------------------------------------------------*/ 290 /** Write data to i8042 primary port. 291 * @param fun DDF function. 292 * @param buffer Data source. 293 * @param size Data size. 294 * @return Bytes written. 295 */ 275 296 static int i8042_write_kbd(ddf_fun_t *fun, char *buffer, size_t size) 276 297 { … … 280 301 fibril_mutex_lock(&controller->write_guard); 281 302 for (size_t i = 0; i < size; ++i) { 282 wait_ready _write(controller);303 wait_ready(controller); 283 304 pio_write_8(&controller->regs->data, buffer[i]); 284 305 } … … 287 308 } 288 309 /*----------------------------------------------------------------------------*/ 310 /** Read data from i8042 primary port. 311 * @param fun DDF function. 312 * @param buffer Data place. 313 * @param size Data place size. 314 * @return Bytes read. 315 */ 289 316 static int i8042_read_kbd(ddf_fun_t *fun, char *buffer, size_t size) 290 317 { … … 301 328 } 302 329 /*----------------------------------------------------------------------------*/ 330 /** Write data to i8042 auxiliary port. 331 * @param fun DDF function. 332 * @param buffer Data source. 333 * @param size Data size. 334 * @return Bytes written. 335 */ 303 336 static int i8042_write_aux(ddf_fun_t *fun, char *buffer, size_t size) 304 337 { … … 308 341 fibril_mutex_lock(&controller->write_guard); 309 342 for (size_t i = 0; i < size; ++i) { 310 wait_ready _write(controller);343 wait_ready(controller); 311 344 pio_write_8(&controller->regs->status, i8042_CMD_WRITE_AUX); 312 345 pio_write_8(&controller->regs->data, buffer[i]); … … 316 349 } 317 350 /*----------------------------------------------------------------------------*/ 351 /** Read data from i8042 auxiliary port. 352 * @param fun DDF function. 353 * @param buffer Data place. 354 * @param size Data place size. 355 * @return Bytes read. 356 */ 318 357 static int i8042_read_aux(ddf_fun_t *fun, char *buffer, size_t size) 319 358 {
Note:
See TracChangeset
for help on using the changeset viewer.