Changes in uspace/drv/char/i8042/main.c [8820544:267f235] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/char/i8042/main.c
r8820544 r267f235 36 36 37 37 #include <libarch/inttypes.h> 38 #include <libarch/config.h>39 38 #include <ddf/driver.h> 40 39 #include <device/hw_res_parsed.h> … … 43 42 #include <ddf/log.h> 44 43 #include <stdio.h> 45 #include <async.h>46 44 #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) 47 53 48 54 /** Get address of I/O registers. 49 55 * 50 56 * @param[in] dev Device asking for the addresses. 51 * @param[out] p_io_reg Pointer to register range. 57 * @param[out] io_reg_address Base address of the memory range. 58 * @param[out] io_reg_size Size of the memory range. 52 59 * @param[out] kbd_irq Primary port IRQ. 53 60 * @param[out] mouse_irq Auxiliary port IRQ. … … 56 63 * 57 64 */ 58 static int get_my_registers(ddf_dev_t *dev, addr_range_t *p_io_reg,59 int *kbd_irq, int *mouse_irq)65 static int get_my_registers(ddf_dev_t *dev, uintptr_t *io_reg_address, 66 size_t *io_reg_size, int *kbd_irq, int *mouse_irq) 60 67 { 61 68 assert(dev); … … 78 85 } 79 86 80 if (p_io_reg) 81 *p_io_reg = hw_resources.io_ranges.ranges[0]; 87 if (io_reg_address) 88 *io_reg_address = hw_resources.io_ranges.ranges[0].address; 89 90 if (io_reg_size) 91 *io_reg_size = hw_resources.io_ranges.ranges[0].size; 82 92 83 93 if (kbd_irq) … … 100 110 static int i8042_dev_add(ddf_dev_t *device) 101 111 { 102 addr_range_t io_regs;103 int kbd = 0;104 int mouse = 0;105 int rc;106 107 112 if (!device) 108 113 return EINVAL; 109 114 110 rc = get_my_registers(device, &io_regs, &kbd, &mouse); 111 if (rc != EOK) { 112 ddf_msg(LVL_ERROR, "Failed to get registers: %s.", 113 str_error(rc)); 114 return rc; 115 } 115 uintptr_t io_regs = 0; 116 size_t io_size = 0; 117 int kbd = 0; 118 int mouse = 0; 116 119 117 ddf_msg(LVL_DEBUG, 118 "I/O regs at %p (size %zuB), IRQ kbd %d, IRQ mouse %d.", 119 RNGABSPTR(io_regs), RNGSZ(io_regs), kbd, mouse); 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)); 123 ddf_msg(LVL_DEBUG, "I/O regs at %p (size %zuB), IRQ kbd %d, IRQ mouse %d.", 124 (void *) io_regs, io_size, kbd, mouse); 120 125 121 126 i8042_t *i8042 = ddf_dev_data_alloc(device, sizeof(i8042_t)); 122 if (i8042 == NULL) { 123 ddf_msg(LVL_ERROR, "Out of memory."); 124 return ENOMEM; 125 } 127 ret = (i8042 == NULL) ? ENOMEM : EOK; 128 CHECK_RET_RETURN(ret, "Failed to allocate i8042 driver instance."); 126 129 127 rc = i8042_init(i8042, &io_regs, kbd, mouse, device); 128 if (rc != EOK) { 129 ddf_msg(LVL_ERROR, "Failed to initialize i8042 driver: %s.", 130 str_error(rc)); 131 return rc; 132 } 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)); 133 133 134 134 ddf_msg(LVL_NOTE, "Controlling '%s' (%" PRIun ").", … … 152 152 printf("%s: HelenOS PS/2 driver.\n", NAME); 153 153 ddf_log_init(NAME); 154 155 /*156 * Alleviate the virtual memory / page table pressure caused by157 * interrupt storms when the default large stacks are used.158 */159 async_set_notification_handler_stack_size(PAGE_SIZE);160 161 154 return ddf_driver_main(&i8042_driver); 162 155 }
Note:
See TracChangeset
for help on using the changeset viewer.