Changeset c2417bc in mainline for kernel/genarch/src/drivers/i8042/i8042.c
- Timestamp:
- 2009-04-21T12:46:26Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f2d2c7ba
- Parents:
- 44b7783
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/genarch/src/drivers/i8042/i8042.c
r44b7783 rc2417bc 45 45 #include <ddi/device.h> 46 46 47 static indev_operations_t kbrdin_ops = {48 .poll = NULL49 };50 51 47 #define i8042_SET_COMMAND 0x60 52 48 #define i8042_COMMAND 0x69 … … 75 71 if (((status = pio_read_8(&dev->status)) & i8042_BUFFER_FULL_MASK)) { 76 72 uint8_t data = pio_read_8(&dev->data); 77 indev_push_character( &instance->kbrdin, data);73 indev_push_character(instance->kbrdin, data); 78 74 } 79 75 } 80 76 77 /**< Clear input buffer. */ 78 static void i8042_clear_buffer(i8042_t *dev) 79 { 80 while (pio_read_8(&dev->status) & i8042_BUFFER_FULL_MASK) 81 (void) pio_read_8(&dev->data); 82 } 83 81 84 /** Initialize i8042. */ 82 i ndev_t *i8042_init(i8042_t *dev, inr_t inr)85 i8042_instance_t *i8042_init(i8042_t *dev, inr_t inr) 83 86 { 84 87 i8042_instance_t *instance 85 88 = malloc(sizeof(i8042_instance_t), FRAME_ATOMIC); 86 if (!instance) 87 return NULL; 89 if (instance) { 90 instance->i8042 = dev; 91 instance->kbrdin = NULL; 92 93 irq_initialize(&instance->irq); 94 instance->irq.devno = device_assign_devno(); 95 instance->irq.inr = inr; 96 instance->irq.claim = i8042_claim; 97 instance->irq.handler = i8042_irq_handler; 98 instance->irq.instance = instance; 99 100 } 88 101 89 indev_initialize("i8042", &instance->kbrdin, &kbrdin_ops); 102 return instance; 103 } 104 105 void i8042_wire(i8042_instance_t *instance, indev_t *kbrdin) 106 { 107 ASSERT(instance); 108 ASSERT(kbrdin); 90 109 91 instance->i8042 = dev; 92 93 irq_initialize(&instance->irq); 94 instance->irq.devno = device_assign_devno(); 95 instance->irq.inr = inr; 96 instance->irq.claim = i8042_claim; 97 instance->irq.handler = i8042_irq_handler; 98 instance->irq.instance = instance; 110 instance->kbrdin = kbrdin; 99 111 irq_register(&instance->irq); 100 101 /* Clear input buffer */ 102 while (pio_read_8(&dev->status) & i8042_BUFFER_FULL_MASK) 103 (void) pio_read_8(&dev->data); 104 105 return &instance->kbrdin; 112 i8042_clear_buffer(instance->i8042); 106 113 } 107 114 … … 111 118 interrupts_disable(); 112 119 113 /* Clear input buffer */ 114 while (pio_read_8(&dev->status) & i8042_BUFFER_FULL_MASK) 115 (void) pio_read_8(&dev->data); 120 i8042_clear_buffer(dev); 116 121 117 122 /* Reset CPU */
Note:
See TracChangeset
for help on using the changeset viewer.