Changes in uspace/drv/char/i8042/main.c [267f235:8820544] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/char/i8042/main.c
r267f235 r8820544 36 36 37 37 #include <libarch/inttypes.h> 38 #include <libarch/config.h> 38 39 #include <ddf/driver.h> 39 40 #include <device/hw_res_parsed.h> … … 42 43 #include <ddf/log.h> 43 44 #include <stdio.h> 45 #include <async.h> 44 46 #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)53 47 54 48 /** Get address of I/O registers. 55 49 * 56 50 * @param[in] dev Device asking for the addresses. 57 * @param[out] io_reg_address Base address of the memory range. 58 * @param[out] io_reg_size Size of the memory range. 51 * @param[out] p_io_reg Pointer to register range. 59 52 * @param[out] kbd_irq Primary port IRQ. 60 53 * @param[out] mouse_irq Auxiliary port IRQ. … … 63 56 * 64 57 */ 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)58 static int get_my_registers(ddf_dev_t *dev, addr_range_t *p_io_reg, 59 int *kbd_irq, int *mouse_irq) 67 60 { 68 61 assert(dev); … … 85 78 } 86 79 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; 80 if (p_io_reg) 81 *p_io_reg = hw_resources.io_ranges.ranges[0]; 92 82 93 83 if (kbd_irq) … … 110 100 static int i8042_dev_add(ddf_dev_t *device) 111 101 { 102 addr_range_t io_regs; 103 int kbd = 0; 104 int mouse = 0; 105 int rc; 106 112 107 if (!device) 113 108 return EINVAL; 114 109 115 uintptr_t io_regs = 0; 116 size_t io_size = 0; 117 int kbd = 0; 118 int mouse = 0; 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 } 119 116 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); 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); 125 120 126 121 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."); 122 if (i8042 == NULL) { 123 ddf_msg(LVL_ERROR, "Out of memory."); 124 return ENOMEM; 125 } 129 126 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)); 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 } 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 by 157 * interrupt storms when the default large stacks are used. 158 */ 159 async_set_notification_handler_stack_size(PAGE_SIZE); 160 154 161 return ddf_driver_main(&i8042_driver); 155 162 }
Note:
See TracChangeset
for help on using the changeset viewer.