Ignore:
File:
1 edited

Legend:

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

    r267f235 rca4730a5  
    3636
    3737#include <libarch/inttypes.h>
     38#include <libarch/config.h>
    3839#include <ddf/driver.h>
    3940#include <device/hw_res_parsed.h>
     
    4243#include <ddf/log.h>
    4344#include <stdio.h>
     45#include <async.h>
    4446#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)
    5347
    5448/** Get address of I/O registers.
     
    110104static int i8042_dev_add(ddf_dev_t *device)
    111105{
    112         if (!device)
    113                 return EINVAL;
    114        
    115106        uintptr_t io_regs = 0;
    116107        size_t io_size = 0;
    117108        int kbd = 0;
    118109        int mouse = 0;
     110        int rc;
    119111       
    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));
     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       
    123122        ddf_msg(LVL_DEBUG, "I/O regs at %p (size %zuB), IRQ kbd %d, IRQ mouse %d.",
    124123            (void *) io_regs, io_size, kbd, mouse);
    125124       
    126125        i8042_t *i8042 = ddf_dev_data_alloc(device, sizeof(i8042_t));
    127         ret = (i8042 == NULL) ? ENOMEM : EOK;
    128         CHECK_RET_RETURN(ret, "Failed to allocate i8042 driver instance.");
     126        if (i8042 == NULL) {
     127                ddf_msg(LVL_ERROR, "Out of memory.");
     128                return ENOMEM;
     129        }
    129130       
    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));
     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        }
    133137       
    134138        ddf_msg(LVL_NOTE, "Controlling '%s' (%" PRIun ").",
     
    152156        printf("%s: HelenOS PS/2 driver.\n", NAME);
    153157        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
    154165        return ddf_driver_main(&i8042_driver);
    155166}
Note: See TracChangeset for help on using the changeset viewer.