Changes in kernel/genarch/src/drivers/i8042/i8042.c [1adbf90:137691a] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/genarch/src/drivers/i8042/i8042.c
r1adbf90 r137691a 44 44 #include <mm/slab.h> 45 45 #include <ddi/device.h> 46 #include <time/delay.h>47 46 48 47 #define i8042_SET_COMMAND 0x60 … … 52 51 #define i8042_BUFFER_FULL_MASK 0x01 53 52 #define i8042_WAIT_MASK 0x02 54 55 #define i8042_TIMEOUT 6553656 53 57 54 static irq_ownership_t i8042_claim(irq_t *irq) … … 80 77 static void i8042_clear_buffer(i8042_t *dev) 81 78 { 82 for (uint32_t i = 0; i < i8042_TIMEOUT; i++) { 83 if ((pio_read_8(&dev->status) & i8042_BUFFER_FULL_MASK) == 0) 84 break; 85 79 while (pio_read_8(&dev->status) & i8042_BUFFER_FULL_MASK) 86 80 (void) pio_read_8(&dev->data); 87 delay(50); /* 50 us think time */88 }89 }90 91 static void i8042_send_command(i8042_t *dev, uint8_t cmd)92 {93 for (uint32_t i = 0; i < i8042_TIMEOUT; i++) {94 if ((pio_read_8(&dev->status) & i8042_WAIT_MASK) == 0)95 break;96 97 delay(50); /* 50 us think time */98 }99 100 pio_write_8(&dev->status, cmd);101 delay(10000); /* 10 ms think time */102 81 } 103 82 … … 105 84 i8042_instance_t *i8042_init(i8042_t *dev, inr_t inr) 106 85 { 107 i8042_instance_t *instance =108 malloc(sizeof(i8042_instance_t), FRAME_ATOMIC);86 i8042_instance_t *instance 87 = malloc(sizeof(i8042_instance_t), FRAME_ATOMIC); 109 88 if (instance) { 110 89 instance->i8042 = dev; … … 117 96 instance->irq.handler = i8042_irq_handler; 118 97 instance->irq.instance = instance; 98 119 99 } 120 100 … … 127 107 ASSERT(kbrdin); 128 108 129 i8042_clear_buffer(instance->i8042);130 131 109 instance->kbrdin = kbrdin; 132 110 irq_register(&instance->irq); 111 i8042_clear_buffer(instance->i8042); 133 112 } 134 113 … … 137 116 { 138 117 interrupts_disable(); 118 139 119 i8042_clear_buffer(dev); 140 i8042_send_command(dev, i8042_CPU_RESET); 120 121 /* Reset CPU */ 122 pio_write_8(&dev->status, i8042_CPU_RESET); 141 123 } 142 124
Note:
See TracChangeset
for help on using the changeset viewer.