Changes in uspace/drv/bus/usb/ehci/main.c [7de1988c:920d0fc] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/ehci/main.c
r7de1988c r920d0fc 33 33 * Main routines of EHCI driver. 34 34 */ 35 36 35 #include <ddf/driver.h> 37 36 #include <ddf/interrupt.h> 38 37 #include <device/hw_res.h> 39 38 #include <errno.h> 40 #include <stdbool.h>41 39 #include <str_error.h> 42 40 … … 72 70 static int ehci_dev_add(ddf_dev_t *device) 73 71 { 74 ddf_fun_t *hc_fun = NULL; 75 bool fun_bound = false; 72 assert(device); 73 #define CHECK_RET_RETURN(ret, message...) \ 74 if (ret != EOK) { \ 75 usb_log_error(message); \ 76 return ret; \ 77 } 76 78 77 assert(device); 78 79 addr_range_t reg_range; 79 uintptr_t reg_base = 0; 80 size_t reg_size = 0; 80 81 int irq = 0; 81 82 82 int r c = get_my_registers(device, ®_range, &irq);83 if (rc != EOK) {84 usb_log_error("Failed to get memory addresses for %" PRIun85 ": %s.\n", ddf_dev_get_handle(device), str_error(rc));86 goto error;87 }83 int ret = get_my_registers(device, ®_base, ®_size, &irq); 84 CHECK_RET_RETURN(ret, 85 "Failed to get memory addresses for %" PRIun ": %s.\n", 86 ddf_dev_get_handle(device), str_error(ret)); 87 usb_log_info("Memory mapped regs at 0x%" PRIxn " (size %zu), IRQ %d.\n", 88 reg_base, reg_size, irq); 88 89 89 usb_log_info("Memory mapped regs at %p (size %zu), IRQ %d.\n", 90 RNGABSPTR(reg_range), RNGSZ(reg_range), irq); 90 ret = disable_legacy(device, reg_base, reg_size); 91 CHECK_RET_RETURN(ret, 92 "Failed to disable legacy USB: %s.\n", str_error(ret)); 91 93 92 rc = disable_legacy(device, ®_range); 93 if (rc != EOK) { 94 usb_log_error("Failed to disable legacy USB: %s.\n", 95 str_error(rc)); 96 goto error; 97 } 98 99 hc_fun = ddf_fun_create(device, fun_exposed, "ehci_hc"); 94 ddf_fun_t *hc_fun = ddf_fun_create(device, fun_exposed, "ehci_hc"); 100 95 if (hc_fun == NULL) { 101 96 usb_log_error("Failed to create EHCI function.\n"); 102 rc = ENOMEM; 103 goto error; 97 return ENOMEM; 104 98 } 105 106 99 hcd_t *ehci_hc = ddf_fun_data_alloc(hc_fun, sizeof(hcd_t)); 107 100 if (ehci_hc == NULL) { 108 101 usb_log_error("Failed to alloc generic HC driver.\n"); 109 rc = ENOMEM; 110 goto error; 102 return ENOMEM; 111 103 } 112 113 104 /* High Speed, no bandwidth */ 114 105 hcd_init(ehci_hc, USB_SPEED_HIGH, 0, NULL); 115 106 ddf_fun_set_ops(hc_fun, &hc_ops); 116 107 117 rc = ddf_fun_bind(hc_fun); 118 if (rc != EOK) { 119 usb_log_error("Failed to bind EHCI function: %s.\n", 120 str_error(rc)); 121 goto error; 122 } 123 124 fun_bound = true; 125 126 rc = ddf_fun_add_to_category(hc_fun, USB_HC_CATEGORY); 127 if (rc != EOK) { 128 usb_log_error("Failed to add EHCI to HC class: %s.\n", 129 str_error(rc)); 130 goto error; 131 } 108 ret = ddf_fun_bind(hc_fun); 109 CHECK_RET_RETURN(ret, 110 "Failed to bind EHCI function: %s.\n", 111 str_error(ret)); 112 ret = ddf_fun_add_to_category(hc_fun, USB_HC_CATEGORY); 113 CHECK_RET_RETURN(ret, 114 "Failed to add EHCI to HC class: %s.\n", 115 str_error(ret)); 132 116 133 117 usb_log_info("Controlling new EHCI device `%s' (handle %" PRIun ").\n", … … 135 119 136 120 return EOK; 137 error: 138 if (fun_bound) 139 ddf_fun_unbind(hc_fun); 140 if (hc_fun != NULL) 141 ddf_fun_destroy(hc_fun); 142 return rc; 121 #undef CHECK_RET_RETURN 143 122 } 144 123
Note:
See TracChangeset
for help on using the changeset viewer.