Ignore:
File:
1 edited

Legend:

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

    rca4730a5 r267f235  
    3636
    3737#include <libarch/inttypes.h>
    38 #include <libarch/config.h>
    3938#include <ddf/driver.h>
    4039#include <device/hw_res_parsed.h>
     
    4342#include <ddf/log.h>
    4443#include <stdio.h>
    45 #include <async.h>
    4644#include "i8042.h"
     45
     46#define CHECK_RET_RETURN(ret, message...) \
     47        do { \
     48                if (ret != EOK) { \
     49                        ddf_msg(LVL_ERROR, message); \
     50                        return ret; \
     51                } \
     52        } while (0)
    4753
    4854/** Get address of I/O registers.
     
    104110static int i8042_dev_add(ddf_dev_t *device)
    105111{
     112        if (!device)
     113                return EINVAL;
     114       
    106115        uintptr_t io_regs = 0;
    107116        size_t io_size = 0;
    108117        int kbd = 0;
    109118        int mouse = 0;
    110         int rc;
    111119       
    112         if (!device)
    113                 return EINVAL;
    114        
    115         rc = get_my_registers(device, &io_regs, &io_size, &kbd, &mouse);
    116         if (rc != EOK) {
    117                 ddf_msg(LVL_ERROR, "Failed to get registers: %s.",
    118                     str_error(rc));
    119                 return rc;
    120         }
    121        
     120        int ret = get_my_registers(device, &io_regs, &io_size, &kbd, &mouse);
     121        CHECK_RET_RETURN(ret, "Failed to get registers: %s.",
     122            str_error(ret));
    122123        ddf_msg(LVL_DEBUG, "I/O regs at %p (size %zuB), IRQ kbd %d, IRQ mouse %d.",
    123124            (void *) io_regs, io_size, kbd, mouse);
    124125       
    125126        i8042_t *i8042 = ddf_dev_data_alloc(device, sizeof(i8042_t));
    126         if (i8042 == NULL) {
    127                 ddf_msg(LVL_ERROR, "Out of memory.");
    128                 return ENOMEM;
    129         }
     127        ret = (i8042 == NULL) ? ENOMEM : EOK;
     128        CHECK_RET_RETURN(ret, "Failed to allocate i8042 driver instance.");
    130129       
    131         rc = i8042_init(i8042, (void *) io_regs, io_size, kbd, mouse, device);
    132         if (rc != EOK) {
    133                 ddf_msg(LVL_ERROR, "Failed to initialize i8042 driver: %s.",
    134                     str_error(rc));
    135                 return rc;
    136         }
     130        ret = i8042_init(i8042, (void *) io_regs, io_size, kbd, mouse, device);
     131        CHECK_RET_RETURN(ret, "Failed to initialize i8042 driver: %s.",
     132            str_error(ret));
    137133       
    138134        ddf_msg(LVL_NOTE, "Controlling '%s' (%" PRIun ").",
     
    156152        printf("%s: HelenOS PS/2 driver.\n", NAME);
    157153        ddf_log_init(NAME);
    158        
    159         /*
    160          * Alleviate the virtual memory / page table pressure caused by
    161          * interrupt storms when the default large stacks are used.
    162          */
    163         async_set_interrupt_handler_stack_size(PAGE_SIZE);
    164 
    165154        return ddf_driver_main(&i8042_driver);
    166155}
Note: See TracChangeset for help on using the changeset viewer.