Changes in uspace/drv/bus/usb/uhci/main.c [a25d893:920d0fc] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/uhci/main.c
ra25d893 r920d0fc 26 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 27 */ 28 /** @addtogroup drvusbuhci 28 /** @addtogroup drvusbuhcihc 29 29 * @{ 30 30 */ … … 32 32 * @brief UHCI driver initialization 33 33 */ 34 #include <ddf/driver.h> 35 #include <errno.h> 36 #include <str_error.h> 34 37 35 #include <assert.h> 36 #include <ddf/driver.h> 37 #include <devman.h> 38 #include <errno.h> 39 #include <io/log.h> 40 #include <pci_dev_iface.h> 41 #include <stdio.h> 42 #include <str_error.h> 38 #include <usb/ddfiface.h> 43 39 #include <usb/debug.h> 44 #include <usb/host/ddf_helpers.h>45 40 46 #include " hc.h"41 #include "uhci.h" 47 42 48 43 #define NAME "uhci" 49 44 50 static int uhci_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *res, bool irq)51 {52 assert(hcd);53 assert(hcd->driver.data == NULL);54 55 hc_t *instance = malloc(sizeof(hc_t));56 if (!instance)57 return ENOMEM;58 59 const int ret = hc_init(instance, res, irq);60 if (ret == EOK)61 hcd_set_implementation(hcd, instance, uhci_hc_schedule, NULL,62 NULL, uhci_hc_interrupt, uhci_hc_status);63 return ret;64 }65 66 static void uhci_driver_fini(hcd_t *hcd)67 {68 assert(hcd);69 if (hcd->driver.data)70 hc_fini(hcd->driver.data);71 72 free(hcd->driver.data);73 hcd_set_implementation(hcd, NULL, NULL, NULL, NULL, NULL, NULL);74 }75 76 45 static int uhci_dev_add(ddf_dev_t *device); 77 46 78 static constdriver_ops_t uhci_driver_ops = {47 static driver_ops_t uhci_driver_ops = { 79 48 .dev_add = uhci_dev_add, 80 49 }; 81 50 82 static constdriver_t uhci_driver = {51 static driver_t uhci_driver = { 83 52 .name = NAME, 84 53 .driver_ops = &uhci_driver_ops 85 54 }; 86 87 /** Call the PCI driver with a request to clear legacy support register88 *89 * @param[in] device Device asking to disable interrupts90 * @return Error code.91 */92 static int disable_legacy(ddf_dev_t *device)93 {94 assert(device);95 96 async_sess_t *parent_sess = devman_parent_device_connect(97 EXCHANGE_SERIALIZE, ddf_dev_get_handle(device), IPC_FLAG_BLOCKING);98 if (!parent_sess)99 return ENOMEM;100 101 /* See UHCI design guide page 45 for these values.102 * Write all WC bits in USB legacy register */103 const int rc = pci_config_space_write_16(parent_sess, 0xc0, 0xaf00);104 105 async_hangup(parent_sess);106 return rc;107 }108 55 109 56 /** Initialize a new ddf driver instance for uhci hc and hub. … … 117 64 assert(device); 118 65 119 int ret = disable_legacy(device); 120 if (ret != EOK) { 121 usb_log_error("Failed to disable legacy USB: %s.\n", 122 str_error(ret)); 123 return ret; 124 } 125 126 127 ret = ddf_hcd_device_setup_all(device, USB_SPEED_FULL, 128 BANDWIDTH_AVAILABLE_USB11, bandwidth_count_usb11, 129 ddf_hcd_gen_irq_handler, uhci_hc_gen_irq_code, 130 uhci_driver_init, uhci_driver_fini); 66 const int ret = device_setup_uhci(device); 131 67 if (ret != EOK) { 132 68 usb_log_error("Failed to initialize UHCI driver: %s.\n",
Note:
See TracChangeset
for help on using the changeset viewer.