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