Changes in uspace/lib/usbhost/include/usb/host/hcd.h [77ad86c:8b54fe6] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbhost/include/usb/host/hcd.h
r77ad86c r8b54fe6 33 33 * 34 34 */ 35 36 35 #ifndef LIBUSBHOST_HOST_HCD_H 37 36 #define LIBUSBHOST_HOST_HCD_H 38 37 39 38 #include <assert.h> 40 #include <usbhc_iface.h>41 42 39 #include <usb/host/usb_device_manager.h> 43 40 #include <usb/host/usb_endpoint_manager.h> 44 41 #include <usb/host/usb_transfer_batch.h> 42 #include <usbhc_iface.h> 45 43 46 44 typedef struct hcd hcd_t; 47 45 48 /** Generic host controller driver structure. */49 46 struct hcd { 50 /** Device manager storing handles and addresses. */51 47 usb_device_manager_t dev_manager; 52 /** Endpoint manager. */53 48 usb_endpoint_manager_t ep_manager; 49 void *private_data; 54 50 55 /** Device specific driver data. */56 void *private_data;57 /** Transfer scheduling, implement in device driver. */58 51 int (*schedule)(hcd_t *, usb_transfer_batch_t *); 59 /** Hook called upon registering new endpoint. */60 52 int (*ep_add_hook)(hcd_t *, endpoint_t *); 61 /** Hook called upon removing of an endpoint. */62 void (*ep_remove_hook)(hcd_t *, endpoint_t *);63 53 }; 64 65 /** Initialize hcd_t structure. 66 * Initializes device and endpoint managers. Sets data and hook pointer to NULL. 67 * @param hcd hcd_t structure to initialize, non-null. 68 * @param bandwidth Available bandwidth, passed to endpoint manager. 69 * @param bw_count Bandwidth compute function, passed to endpoint manager. 70 */ 71 static inline void hcd_init(hcd_t *hcd, usb_speed_t max_speed, size_t bandwidth, 54 /*----------------------------------------------------------------------------*/ 55 static inline int hcd_init(hcd_t *hcd, size_t bandwidth, 72 56 size_t (*bw_count)(usb_speed_t, usb_transfer_type_t, size_t, size_t)) 73 57 { 74 58 assert(hcd); 75 usb_device_manager_init(&hcd->dev_manager, max_speed); 76 usb_endpoint_manager_init(&hcd->ep_manager, bandwidth, bw_count); 77 hcd->private_data = NULL; 78 hcd->schedule = NULL; 79 hcd->ep_add_hook = NULL; 80 hcd->ep_remove_hook = NULL; 59 usb_device_manager_init(&hcd->dev_manager); 60 return usb_endpoint_manager_init(&hcd->ep_manager, bandwidth, bw_count); 81 61 } 82 83 /** Check registered endpoints and reset toggle bit if necessary. 84 * @param hcd hcd_t structure, non-null. 85 * @param target Control communication target. 86 * @param setup_data Setup packet of the control communication. 87 88 static inline void reset_ep_if_need( hcd_t *hcd, usb_target_t target,89 const char setup_data[8])62 /*----------------------------------------------------------------------------*/ 63 static inline void hcd_destroy(hcd_t *hcd) 64 { 65 usb_endpoint_manager_destroy(&hcd->ep_manager); 66 } 67 /*----------------------------------------------------------------------------*/ 68 static inline void reset_ep_if_need( 69 hcd_t *hcd, usb_target_t target, const char* setup_data) 90 70 { 91 71 assert(hcd); 92 usb_endpoint_manager_reset_ eps_if_need(72 usb_endpoint_manager_reset_if_need( 93 73 &hcd->ep_manager, target, (const uint8_t *)setup_data); 94 74 } 95 96 /** Data retrieve wrapper. 97 * @param fun ddf function, non-null. 98 * @return pointer cast to hcd_t*. 99 */ 100 static inline hcd_t * fun_to_hcd(const ddf_fun_t *fun) 75 /*----------------------------------------------------------------------------*/ 76 static inline hcd_t * fun_to_hcd(ddf_fun_t *fun) 101 77 { 102 78 assert(fun); 103 79 return fun->driver_data; 104 80 } 105 81 /*----------------------------------------------------------------------------*/ 106 82 extern usbhc_iface_t hcd_iface; 107 83 108 84 #endif 109 110 85 /** 111 86 * @}
Note:
See TracChangeset
for help on using the changeset viewer.