Changeset bd87ae0 in mainline for uspace/drv/char/i8042
- Timestamp:
- 2012-01-04T00:50:07Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 41c9a22
- Parents:
- 2f79a38
- File:
-
- 1 edited
-
uspace/drv/char/i8042/i8042.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/char/i8042/i8042.c
r2f79a38 rbd87ae0 47 47 #include <ddf/log.h> 48 48 #include <ddf/interrupt.h> 49 #include <ops/char_dev.h>50 49 51 50 #include "i8042.h" … … 53 52 #define NAME "i8042" 54 53 55 static int i8042_write_kbd(ddf_fun_t *, char *, size_t);56 static int i8042_read_kbd(ddf_fun_t *, char *, size_t);57 58 /** Primary port interface structure. */59 static char_dev_ops_t kbd_iface = {60 .read = i8042_read_kbd,61 .write = i8042_write_kbd,62 };63 64 54 void default_handler(ddf_fun_t *, ipc_callid_t, ipc_call_t *); 65 55 66 /** Primary port function operations. */ 67 static ddf_dev_ops_t kbd_ops = { 68 .interfaces[CHAR_DEV_IFACE] = &kbd_iface, 69 .default_handler = default_handler, 70 }; 71 72 /** Auxiliary port function operations. */ 56 /** Port function operations. */ 73 57 static ddf_dev_ops_t ops = { 74 58 .default_handler = default_handler, … … 189 173 } 190 174 191 dev->kbd_fun->ops = & kbd_ops;175 dev->kbd_fun->ops = &ops; 192 176 dev->aux_fun->ops = &ops; 193 177 dev->kbd_fun->driver_data = dev; … … 283 267 } 284 268 285 /** Write data to i8042 primary port. 286 * @param fun DDF function. 287 * @param buffer Data source. 288 * @param size Data size. 289 * @return Bytes written. 290 */ 291 static int i8042_write_kbd(ddf_fun_t *fun, char *buffer, size_t size) 292 { 293 assert(fun); 294 assert(fun->driver_data); 295 i8042_t *controller = fun->driver_data; 296 fibril_mutex_lock(&controller->write_guard); 297 for (size_t i = 0; i < size; ++i) { 298 wait_ready(controller); 299 pio_write_8(&controller->regs->data, buffer[i]); 300 } 301 fibril_mutex_unlock(&controller->write_guard); 302 return size; 303 } 304 305 /** Read data from i8042 primary port. 306 * @param fun DDF function. 307 * @param buffer Data place. 308 * @param size Data place size. 309 * @return Bytes read. 310 */ 311 static int i8042_read_kbd(ddf_fun_t *fun, char *buffer, size_t size) 312 { 313 assert(fun); 314 assert(fun->driver_data); 315 bzero(buffer, size); 316 317 i8042_t *controller = fun->driver_data; 318 319 for (size_t i = 0; i < size; ++i) { 320 *buffer++ = buffer_read(&controller->kbd_buffer); 321 } 322 return size; 323 } 324 325 // TODO use shared instead of own copy 269 // TODO use shared instead this 326 270 enum { 327 271 IPC_CHAR_READ = DEV_FIRST_CUSTOM_METHOD, … … 372 316 } 373 317 318 /** Handle data requests. 319 * @param fun ddf_fun_t function. 320 * @param id callid 321 * @param call IPC request. 322 */ 374 323 void default_handler(ddf_fun_t *fun, ipc_callid_t id, ipc_call_t *call) 375 324 {
Note:
See TracChangeset
for help on using the changeset viewer.
