Changes in uspace/drv/bus/usb/ohci/ohci.c [8b54fe6:1dc4a5e] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/ohci/ohci.c
r8b54fe6 r1dc4a5e 42 42 43 43 #include "ohci.h" 44 #include "iface.h" 44 45 #include "pci.h" 45 46 #include "hc.h" 47 #include "root_hub.h" 46 48 47 49 typedef struct ohci { … … 50 52 51 53 hc_t hc; 54 rh_t rh; 52 55 } ohci_t; 53 56 … … 86 89 { 87 90 assert(fun); 88 usb_device_manager_t *manager = 89 &dev_to_ohci(fun->dev)->hc.generic.dev_manager; 90 91 const usb_address_t addr = usb_device_manager_find(manager, handle); 91 usb_device_keeper_t *manager = &dev_to_ohci(fun->dev)->hc.manager; 92 93 usb_address_t addr = usb_device_keeper_find(manager, handle); 92 94 if (addr < 0) { 93 95 return addr; … … 127 129 /** Standard USB HC options (HC interface) */ 128 130 static ddf_dev_ops_t hc_ops = { 129 .interfaces[USBHC_DEV_IFACE] = &hc d_iface,131 .interfaces[USBHC_DEV_IFACE] = &hc_iface, /* see iface.h/c */ 130 132 }; 131 133 /*----------------------------------------------------------------------------*/ … … 148 150 int device_setup_ohci(ddf_dev_t *device) 149 151 { 150 assert(device);151 152 152 ohci_t *instance = malloc(sizeof(ohci_t)); 153 153 if (instance == NULL) { … … 155 155 return ENOMEM; 156 156 } 157 instance->rh_fun = NULL;158 instance->hc_fun = NULL;159 157 160 158 #define CHECK_RET_DEST_FREE_RETURN(ret, message...) \ 161 159 if (ret != EOK) { \ 162 160 if (instance->hc_fun) { \ 161 instance->hc_fun->ops = NULL; \ 162 instance->hc_fun->driver_data = NULL; \ 163 163 ddf_fun_destroy(instance->hc_fun); \ 164 164 } \ 165 165 if (instance->rh_fun) { \ 166 instance->rh_fun->ops = NULL; \ 167 instance->rh_fun->driver_data = NULL; \ 166 168 ddf_fun_destroy(instance->rh_fun); \ 167 169 } \ 168 170 free(instance); \ 171 device->driver_data = NULL; \ 169 172 usb_log_error(message); \ 170 173 return ret; \ 171 174 } else (void)0 172 175 176 instance->rh_fun = NULL; 173 177 instance->hc_fun = ddf_fun_create(device, fun_exposed, "ohci_hc"); 174 178 int ret = instance->hc_fun ? EOK : ENOMEM; … … 190 194 ret = pci_get_my_registers(device, ®_base, ®_size, &irq); 191 195 CHECK_RET_DEST_FREE_RETURN(ret, 192 "Failed to get registermemory addresses for %" PRIun ": %s.\n",196 "Failed to get memory addresses for %" PRIun ": %s.\n", 193 197 device->handle, str_error(ret)); 194 198 usb_log_debug("Memory mapped regs at %p (size %zu), IRQ %d.\n", … … 197 201 const size_t cmd_count = hc_irq_cmd_count(); 198 202 irq_cmd_t irq_cmds[cmd_count]; 199 irq_code_t irq_code = { .cmdcount = cmd_count, .cmds = irq_cmds };200 201 203 ret = 202 204 hc_get_irq_commands(irq_cmds, sizeof(irq_cmds), reg_base, reg_size); … … 204 206 "Failed to generate IRQ commands: %s.\n", str_error(ret)); 205 207 208 irq_code_t irq_code = { .cmdcount = cmd_count, .cmds = irq_cmds }; 206 209 207 210 /* Register handler to avoid interrupt lockup */ … … 231 234 #define CHECK_RET_FINI_RETURN(ret, message...) \ 232 235 if (ret != EOK) { \ 236 unregister_interrupt_handler(device, irq); \ 233 237 hc_fini(&instance->hc); \ 234 unregister_interrupt_handler(device, irq); \235 238 CHECK_RET_DEST_FREE_RETURN(ret, message); \ 236 239 } else (void)0 … … 245 248 "Failed to add OHCI to HC class: %s.\n", str_error(ret)); 246 249 247 ret = hc_register_hub(&instance->hc, instance->rh_fun); 248 CHECK_RET_FINI_RETURN(ret, 249 "Failed to register OHCI root hub: %s.\n", str_error(ret)); 250 return ret; 251 250 hc_register_hub(&instance->hc, instance->rh_fun); 251 return EOK; 252 253 #undef CHECK_RET_DEST_FUN_RETURN 252 254 #undef CHECK_RET_FINI_RETURN 253 255 }
Note:
See TracChangeset
for help on using the changeset viewer.