Ignore:
File:
1 edited

Legend:

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

    rc170438 rca4730a5  
    4343#include <ddf/log.h>
    4444#include <stdio.h>
     45#include <async.h>
    4546#include "i8042.h"
    4647
     
    4849 *
    4950 * @param[in]  dev            Device asking for the addresses.
    50  * @param[out] p_io_reg       Pointer to register range.
     51 * @param[out] io_reg_address Base address of the memory range.
     52 * @param[out] io_reg_size    Size of the memory range.
    5153 * @param[out] kbd_irq        Primary port IRQ.
    5254 * @param[out] mouse_irq      Auxiliary port IRQ.
     
    5557 *
    5658 */
    57 static int get_my_registers(ddf_dev_t *dev, addr_range_t *p_io_reg,
    58     int *kbd_irq, int *mouse_irq)
     59static int get_my_registers(ddf_dev_t *dev, uintptr_t *io_reg_address,
     60    size_t *io_reg_size, int *kbd_irq, int *mouse_irq)
    5961{
    6062        assert(dev);
    6163       
    62         async_sess_t *parent_sess = ddf_dev_parent_sess_create(dev);
     64        async_sess_t *parent_sess = ddf_dev_parent_sess_create(
     65            dev, EXCHANGE_SERIALIZE);
    6366        if (parent_sess == NULL)
    6467                return ENOMEM;
     
    7679        }
    7780       
    78         if (p_io_reg)
    79                 *p_io_reg = hw_resources.io_ranges.ranges[0];
     81        if (io_reg_address)
     82                *io_reg_address = hw_resources.io_ranges.ranges[0].address;
     83       
     84        if (io_reg_size)
     85                *io_reg_size = hw_resources.io_ranges.ranges[0].size;
    8086       
    8187        if (kbd_irq)
     
    98104static int i8042_dev_add(ddf_dev_t *device)
    99105{
    100         addr_range_t io_regs;
     106        uintptr_t io_regs = 0;
     107        size_t io_size = 0;
    101108        int kbd = 0;
    102109        int mouse = 0;
     
    106113                return EINVAL;
    107114       
    108         rc = get_my_registers(device, &io_regs, &kbd, &mouse);
     115        rc = get_my_registers(device, &io_regs, &io_size, &kbd, &mouse);
    109116        if (rc != EOK) {
    110117                ddf_msg(LVL_ERROR, "Failed to get registers: %s.",
     
    113120        }
    114121       
    115         ddf_msg(LVL_DEBUG,
    116             "I/O regs at %p (size %zuB), IRQ kbd %d, IRQ mouse %d.",
    117             RNGABSPTR(io_regs), RNGSZ(io_regs), kbd, mouse);
     122        ddf_msg(LVL_DEBUG, "I/O regs at %p (size %zuB), IRQ kbd %d, IRQ mouse %d.",
     123            (void *) io_regs, io_size, kbd, mouse);
    118124       
    119125        i8042_t *i8042 = ddf_dev_data_alloc(device, sizeof(i8042_t));
     
    123129        }
    124130       
    125         rc = i8042_init(i8042, &io_regs, kbd, mouse, device);
     131        rc = i8042_init(i8042, (void *) io_regs, io_size, kbd, mouse, device);
    126132        if (rc != EOK) {
    127133                ddf_msg(LVL_ERROR, "Failed to initialize i8042 driver: %s.",
     
    151157        ddf_log_init(NAME);
    152158       
     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
    153165        return ddf_driver_main(&i8042_driver);
    154166}
Note: See TracChangeset for help on using the changeset viewer.