Changeset bd87ae0 in mainline for uspace/drv/char/i8042


Ignore:
Timestamp:
2012-01-04T00:50:07Z (14 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
41c9a22
Parents:
2f79a38
Message:

i8042, xtkbd: Switch keyboard away from DDF provided interface.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/char/i8042/i8042.c

    r2f79a38 rbd87ae0  
    4747#include <ddf/log.h>
    4848#include <ddf/interrupt.h>
    49 #include <ops/char_dev.h>
    5049
    5150#include "i8042.h"
     
    5352#define NAME       "i8042"
    5453
    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 
    6454void default_handler(ddf_fun_t *, ipc_callid_t, ipc_call_t *);
    6555
    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. */
    7357static ddf_dev_ops_t ops = {
    7458        .default_handler = default_handler,
     
    189173        }
    190174
    191         dev->kbd_fun->ops = &kbd_ops;
     175        dev->kbd_fun->ops = &ops;
    192176        dev->aux_fun->ops = &ops;
    193177        dev->kbd_fun->driver_data = dev;
     
    283267}
    284268
    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
    326270enum {
    327271        IPC_CHAR_READ = DEV_FIRST_CUSTOM_METHOD,
     
    372316}
    373317
     318/** Handle data requests.
     319 * @param fun ddf_fun_t function.
     320 * @param id callid
     321 * @param call IPC request.
     322 */
    374323void default_handler(ddf_fun_t *fun, ipc_callid_t id, ipc_call_t *call)
    375324{
Note: See TracChangeset for help on using the changeset viewer.