Changeset 32fb6bce in mainline for uspace/drv/bus/usb/uhci/main.c
- Timestamp:
- 2017-12-18T22:50:21Z (6 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 7f70d1c
- Parents:
- 1ea0bbf
- git-author:
- Ondřej Hlavatý <aearsis@…> (2017-12-18 22:04:50)
- git-committer:
- Ondřej Hlavatý <aearsis@…> (2017-12-18 22:50:21)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/uhci/main.c
r1ea0bbf r32fb6bce 49 49 #define NAME "uhci" 50 50 51 static int uhci_driver_init(hcd_t *, const hw_res_list_parsed_t *, ddf_dev_t *); 52 static int uhci_driver_start(hcd_t *, bool); 53 static void uhci_driver_fini(hcd_t *); 54 static int disable_legacy(hcd_t *, ddf_dev_t *); 51 static int disable_legacy(hc_device_t *); 55 52 56 static const ddf_hc_driver_t uhci_hc_driver = { 57 .claim = disable_legacy, 58 .irq_code_gen = uhci_hc_gen_irq_code, 59 .init = uhci_driver_init, 60 .start = uhci_driver_start, 53 static const hc_driver_t uhci_driver = { 54 .name = NAME, 55 .hc_device_size = sizeof(hc_t), 56 .claim = disable_legacy, 57 .irq_code_gen = hc_gen_irq_code, 58 .hc_add = hc_add, 59 .start = hc_start, 61 60 .setup_root_hub = hcd_setup_virtual_root_hub, 62 .fini = uhci_driver_fini, 63 .name = "UHCI", 64 .ops = { 65 .schedule = uhci_hc_schedule, 66 .irq_hook = uhci_hc_interrupt, 67 .status_hook = uhci_hc_status, 68 }, 61 .hc_gone = hc_gone, 69 62 }; 70 71 static int uhci_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *res, ddf_dev_t *device)72 {73 int err;74 75 assert(hcd);76 assert(hcd_get_driver_data(hcd) == NULL);77 78 hc_t *instance = malloc(sizeof(hc_t));79 if (!instance)80 return ENOMEM;81 82 if ((err = hc_init(instance, hcd, res)) != EOK)83 goto err;84 85 hcd_set_implementation(hcd, instance, &uhci_hc_driver.ops, &instance->bus.base);86 87 return EOK;88 89 err:90 free(instance);91 return err;92 }93 94 static int uhci_driver_start(hcd_t *hcd, bool interrupts)95 {96 assert(hcd);97 hc_t *hc = hcd_get_driver_data(hcd);98 99 hc->hw_interrupts = interrupts;100 hc_start(hc);101 return EOK;102 }103 104 static void uhci_driver_fini(hcd_t *hcd)105 {106 assert(hcd);107 hc_t *hc = hcd_get_driver_data(hcd);108 if (hc)109 hc_fini(hc);110 111 hcd_set_implementation(hcd, NULL, NULL, NULL);112 free(hc);113 }114 63 115 64 /** Call the PCI driver with a request to clear legacy support register … … 118 67 * @return Error code. 119 68 */ 120 static int disable_legacy(hc d_t *hcd, ddf_dev_t *device)69 static int disable_legacy(hc_device_t *hcd) 121 70 { 122 assert( device);71 assert(hcd); 123 72 124 async_sess_t *parent_sess = ddf_dev_parent_sess_get( device);73 async_sess_t *parent_sess = ddf_dev_parent_sess_get(hcd->ddf_dev); 125 74 if (parent_sess == NULL) 126 75 return ENOMEM; … … 130 79 return pci_config_space_write_16(parent_sess, 0xc0, 0xaf00); 131 80 } 132 133 /** Initialize a new ddf driver instance for uhci hc and hub.134 *135 * @param[in] device DDF instance of the device to initialize.136 * @return Error code.137 */138 static int uhci_dev_add(ddf_dev_t *device)139 {140 usb_log_debug2("uhci_dev_add() called\n");141 assert(device);142 return hcd_ddf_add_hc(device, &uhci_hc_driver);143 }144 145 static int uhci_fun_online(ddf_fun_t *fun)146 {147 return hcd_ddf_device_online(fun);148 }149 150 static int uhci_fun_offline(ddf_fun_t *fun)151 {152 return hcd_ddf_device_offline(fun);153 }154 155 static const driver_ops_t uhci_driver_ops = {156 .dev_add = uhci_dev_add,157 .fun_online = uhci_fun_online,158 .fun_offline = uhci_fun_offline159 };160 161 static const driver_t uhci_driver = {162 .name = NAME,163 .driver_ops = &uhci_driver_ops164 };165 166 81 167 82 /** Initialize global driver structures (NONE). … … 178 93 log_init(NAME); 179 94 logctl_set_log_level(NAME, LVL_DEBUG2); 180 return ddf_driver_main(&uhci_driver);95 return hc_driver_main(&uhci_driver); 181 96 } 182 97 /**
Note:
See TracChangeset
for help on using the changeset viewer.