Changes in uspace/drv/bus/usb/ehci/main.c [d930980:dcffe95] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/ehci/main.c
rd930980 rdcffe95 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 … … 51 49 52 50 static int ehci_dev_add(ddf_dev_t *device); 53 51 /*----------------------------------------------------------------------------*/ 54 52 static driver_ops_t ehci_driver_ops = { 55 53 .dev_add = ehci_dev_add, 56 54 }; 57 55 /*----------------------------------------------------------------------------*/ 58 56 static driver_t ehci_driver = { 59 57 .name = NAME, … … 64 62 }; 65 63 66 64 /*----------------------------------------------------------------------------*/ 67 65 /** Initializes a new ddf driver instance of EHCI hcd. 68 66 * … … 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;76 77 72 assert(device); 73 #define CHECK_RET_RETURN(ret, message...) \ 74 if (ret != EOK) { \ 75 usb_log_error(message); \ 76 return ret; \ 77 } 78 78 79 79 uintptr_t reg_base = 0; … … 81 81 int irq = 0; 82 82 83 int rc = get_my_registers(device, ®_base, ®_size, &irq); 84 if (rc != EOK) { 85 usb_log_error("Failed to get memory addresses for %" PRIun 86 ": %s.\n", ddf_dev_get_handle(device), str_error(rc)); 87 goto error; 88 } 89 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 device->handle, str_error(ret)); 90 87 usb_log_info("Memory mapped regs at 0x%" PRIxn " (size %zu), IRQ %d.\n", 91 88 reg_base, reg_size, irq); 92 89 93 rc = disable_legacy(device, reg_base, reg_size); 94 if (rc != EOK) { 95 usb_log_error("Failed to disable legacy USB: %s.\n", 96 str_error(rc)); 97 goto error; 98 } 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)); 99 93 100 hc_fun = ddf_fun_create(device, fun_exposed, "ehci_hc");94 ddf_fun_t *hc_fun = ddf_fun_create(device, fun_exposed, "ehci_hc"); 101 95 if (hc_fun == NULL) { 102 96 usb_log_error("Failed to create EHCI function.\n"); 103 rc = ENOMEM; 104 goto error; 97 return ENOMEM; 105 98 } 106 107 99 hcd_t *ehci_hc = ddf_fun_data_alloc(hc_fun, sizeof(hcd_t)); 108 100 if (ehci_hc == NULL) { 109 101 usb_log_error("Failed to alloc generic HC driver.\n"); 110 rc = ENOMEM; 111 goto error; 102 return ENOMEM; 112 103 } 113 114 104 /* High Speed, no bandwidth */ 115 105 hcd_init(ehci_hc, USB_SPEED_HIGH, 0, NULL); 116 ddf_fun_set_ops(hc_fun, &hc_ops);106 hc_fun->ops = &hc_ops; 117 107 118 rc = ddf_fun_bind(hc_fun); 119 if (rc != EOK) { 120 usb_log_error("Failed to bind EHCI function: %s.\n", 121 str_error(rc)); 122 goto error; 123 } 124 125 fun_bound = true; 126 127 rc = ddf_fun_add_to_category(hc_fun, USB_HC_CATEGORY); 128 if (rc != EOK) { 129 usb_log_error("Failed to add EHCI to HC class: %s.\n", 130 str_error(rc)); 131 goto error; 132 } 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)); 133 116 134 117 usb_log_info("Controlling new EHCI device `%s' (handle %" PRIun ").\n", 135 d df_dev_get_name(device), ddf_dev_get_handle(device));118 device->name, device->handle); 136 119 137 120 return EOK; 138 error: 139 if (fun_bound) 140 ddf_fun_unbind(hc_fun); 141 if (hc_fun != NULL) 142 ddf_fun_destroy(hc_fun); 143 return rc; 121 #undef CHECK_RET_RETURN 144 122 } 145 123 /*----------------------------------------------------------------------------*/ 146 124 /** Initializes global driver structures (NONE). 147 125 * … … 154 132 int main(int argc, char *argv[]) 155 133 { 156 log_init(NAME);134 usb_log_enable(USB_LOG_LEVEL_DEFAULT, NAME); 157 135 return ddf_driver_main(&ehci_driver); 158 136 }
Note:
See TracChangeset
for help on using the changeset viewer.