Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hw/char/i8042/i8042.c

    rd9fae235 r385a3d6  
    6868#define i8042_KBD_TRANSLATE     0x40
    6969
     70/* Mouse constants */
     71#define MOUSE_OUT_INIT  0xf4
     72#define MOUSE_ACK       0xfa
    7073
    7174enum {
     
    164167static int i8042_init(void)
    165168{
    166         if (sysinfo_get_value("i8042.address.physical", &i8042_physical) != EOK)
    167                 return -1;
    168        
    169         if (sysinfo_get_value("i8042.address.kernel", &i8042_kernel) != EOK)
    170                 return -1;
    171        
    172169        void *vaddr;
     170
     171        i8042_physical = sysinfo_value("i8042.address.physical");
     172        i8042_kernel = sysinfo_value("i8042.address.kernel");
    173173        if (pio_enable((void *) i8042_physical, sizeof(i8042_t), &vaddr) != 0)
    174174                return -1;
    175        
    176175        i8042 = vaddr;
    177        
    178         sysarg_t inr_a;
    179         sysarg_t inr_b;
    180        
    181         if (sysinfo_get_value("i8042.inr_a", &inr_a) != EOK)
    182                 return -1;
    183        
    184         if (sysinfo_get_value("i8042.inr_b", &inr_b) != EOK)
    185                 return -1;
    186        
     176
    187177        async_set_interrupt_received(i8042_irq_handler);
    188        
    189         /* Disable kbd and aux */
    190         wait_ready();
     178
     179        /* Disable kbd, enable mouse */
    191180        pio_write_8(&i8042->status, i8042_CMD_WRITE_CMDB);
    192181        wait_ready();
    193         pio_write_8(&i8042->data, i8042_KBD_DISABLE | i8042_AUX_DISABLE);
     182        pio_write_8(&i8042->status, i8042_CMD_WRITE_CMDB);
     183        wait_ready();
     184        pio_write_8(&i8042->data, i8042_KBD_DISABLE);
     185        wait_ready();
    194186
    195187        /* Flush all current IO */
     
    197189                (void) pio_read_8(&i8042->data);
    198190
     191        i8042_port_write(DEVID_AUX, MOUSE_OUT_INIT);
     192
    199193        i8042_kbd.cmds[0].addr = (void *) &((i8042_t *) i8042_kernel)->status;
    200194        i8042_kbd.cmds[3].addr = (void *) &((i8042_t *) i8042_kernel)->data;
    201         ipc_register_irq(inr_a, device_assign_devno(), 0, &i8042_kbd);
    202         ipc_register_irq(inr_b, device_assign_devno(), 0, &i8042_kbd);
    203         printf("%s: registered for interrupts %d and %d\n", NAME, inr_a, inr_b);
    204 
    205         wait_ready();
     195        ipc_register_irq(sysinfo_value("i8042.inr_a"), device_assign_devno(), 0, &i8042_kbd);
     196        ipc_register_irq(sysinfo_value("i8042.inr_b"), device_assign_devno(), 0, &i8042_kbd);
     197
    206198        pio_write_8(&i8042->status, i8042_CMD_WRITE_CMDB);
    207199        wait_ready();
    208200        pio_write_8(&i8042->data, i8042_KBD_IE | i8042_KBD_TRANSLATE |
    209201            i8042_AUX_IE);
     202        wait_ready();
    210203
    211204        return 0;
     
    278271{
    279272        if (devid == DEVID_AUX) {
     273                pio_write_8(&i8042->status, i8042_CMD_WRITE_AUX);
    280274                wait_ready();
    281                 pio_write_8(&i8042->status, i8042_CMD_WRITE_AUX);
    282         }
    283         wait_ready();
     275        }
    284276        pio_write_8(&i8042->data, data);
     277        wait_ready();
    285278}
    286279
Note: See TracChangeset for help on using the changeset viewer.