Changeset ae3a941 in mainline
- Timestamp:
- 2018-02-26T16:51:40Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- e773f58
- Parents:
- 3692678
- Location:
- uspace
- Files:
-
- 68 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/block/usbmast/scsi_ms.c
r3692678 rae3a941 88 88 rc = usb_massstor_cmd(mfun, 0xDEADBEEF, &cmd); 89 89 90 90 if (rc != EOK) { 91 91 usb_log_error("Test Unit Ready failed on device %s: %s.", 92 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc));92 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 93 93 return rc; 94 94 } … … 98 98 if (cmd.status != CMDS_GOOD) 99 99 usb_log_warning("Test Unit Ready command failed on device %s.", 100 usb_device_get_name(mfun->mdev->usb_dev));100 usb_device_get_name(mfun->mdev->usb_dev)); 101 101 102 102 return EOK; … … 118 118 if (rc != EOK) { 119 119 usb_log_error("Inquiry transport failed, device %s: %s.", 120 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc));120 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 121 121 return rc; 122 122 } … … 125 125 if (rc != EOK) { 126 126 usb_log_error("Inquiry transport failed, device %s: %s.", 127 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc));127 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 128 128 return rc; 129 129 } … … 184 184 if (rc != EOK) { 185 185 usb_log_error("Inquiry transport failed, device %s: %s.", 186 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc));186 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 187 187 return rc; 188 188 } … … 190 190 if (cmd.status != CMDS_GOOD) { 191 191 usb_log_error("Inquiry command failed, device %s.", 192 usb_device_get_name(mfun->mdev->usb_dev));192 usb_device_get_name(mfun->mdev->usb_dev)); 193 193 return EIO; 194 194 } … … 196 196 if (cmd.rcvd_size < SCSI_STD_INQUIRY_DATA_MIN_SIZE) { 197 197 usb_log_error("SCSI Inquiry response too short (%zu).", 198 cmd.rcvd_size);198 cmd.rcvd_size); 199 199 return EIO; 200 200 } … … 250 250 rc = usb_massstor_cmd(mfun, 0xDEADBEEF, &cmd); 251 251 252 252 if (rc != EOK || cmd.status != CMDS_GOOD) { 253 253 usb_log_error("Request Sense failed, device %s: %s.", 254 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc));254 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 255 255 return rc; 256 256 } … … 294 294 if (rc != EOK) { 295 295 usb_log_error("Read Capacity (10) transport failed, device %s: %s.", 296 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc));296 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 297 297 return rc; 298 298 } … … 300 300 if (cmd.status != CMDS_GOOD) { 301 301 usb_log_error("Read Capacity (10) command failed, device %s.", 302 usb_device_get_name(mfun->mdev->usb_dev));302 usb_device_get_name(mfun->mdev->usb_dev)); 303 303 return EIO; 304 304 } … … 306 306 if (cmd.rcvd_size < sizeof(data)) { 307 307 usb_log_error("SCSI Read Capacity response too short (%zu).", 308 cmd.rcvd_size);308 cmd.rcvd_size); 309 309 return EIO; 310 310 } … … 351 351 if (rc != EOK) { 352 352 usb_log_error("Read (10) transport failed, device %s: %s.", 353 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc));353 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 354 354 return rc; 355 355 } … … 357 357 if (cmd.status != CMDS_GOOD) { 358 358 usb_log_error("Read (10) command failed, device %s.", 359 usb_device_get_name(mfun->mdev->usb_dev));359 usb_device_get_name(mfun->mdev->usb_dev)); 360 360 return EIO; 361 361 } … … 405 405 rc = usbmast_run_cmd(mfun, &cmd); 406 406 407 407 if (rc != EOK) { 408 408 usb_log_error("Write (10) transport failed, device %s: %s.", 409 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc));409 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 410 410 return rc; 411 411 } … … 413 413 if (cmd.status != CMDS_GOOD) { 414 414 usb_log_error("Write (10) command failed, device %s.", 415 usb_device_get_name(mfun->mdev->usb_dev));415 usb_device_get_name(mfun->mdev->usb_dev)); 416 416 return EIO; 417 417 } … … 452 452 if (rc != EOK) { 453 453 usb_log_error("Synchronize Cache (10) transport failed, device %s: %s.", 454 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc));454 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 455 455 return rc; 456 456 } … … 458 458 if (cmd.status != CMDS_GOOD) { 459 459 usb_log_error("Synchronize Cache (10) command failed, device %s.", 460 usb_device_get_name(mfun->mdev->usb_dev));460 usb_device_get_name(mfun->mdev->usb_dev)); 461 461 return EIO; 462 462 } -
uspace/drv/bus/usb/ehci/ehci_batch.h
r3692678 rae3a941 63 63 } ehci_transfer_batch_t; 64 64 65 ehci_transfer_batch_t * 65 ehci_transfer_batch_t *ehci_transfer_batch_create(endpoint_t *ep); 66 66 int ehci_transfer_batch_prepare(ehci_transfer_batch_t *batch); 67 67 void ehci_transfer_batch_commit(const ehci_transfer_batch_t *batch); … … 69 69 void ehci_transfer_batch_destroy(ehci_transfer_batch_t *batch); 70 70 71 static inline ehci_transfer_batch_t * ehci_transfer_batch_get(usb_transfer_batch_t *usb_batch) 71 static inline ehci_transfer_batch_t *ehci_transfer_batch_get( 72 usb_transfer_batch_t *usb_batch) 72 73 { 73 74 assert(usb_batch); -
uspace/drv/bus/usb/ehci/ehci_bus.c
r3692678 rae3a941 54 54 ehci_endpoint_t *instance = ehci_endpoint_get(ep); 55 55 if (qh_toggle_from_td(instance->qh)) 56 usb_log_warning("EP(%p): Resetting toggle bit for transfer directed EP", instance); 56 usb_log_warning("EP(%p): Resetting toggle bit for transfer " 57 "directed EP", instance); 57 58 qh_toggle_set(instance->qh, 0); 58 59 } … … 72 73 /** Creates new hcd endpoint representation. 73 74 */ 74 static endpoint_t *ehci_endpoint_create(device_t *dev, const usb_endpoint_descriptors_t *desc) 75 static endpoint_t *ehci_endpoint_create(device_t *dev, 76 const usb_endpoint_descriptors_t *desc) 75 77 { 76 78 assert(dev); -
uspace/drv/bus/usb/ehci/ehci_bus.h
r3692678 rae3a941 78 78 * @return Pointer to assigned ehci endpoint structure 79 79 */ 80 static inline ehci_endpoint_t * 80 static inline ehci_endpoint_t *ehci_endpoint_get(const endpoint_t *ep) 81 81 { 82 82 assert(ep); … … 84 84 } 85 85 86 static inline ehci_endpoint_t * 86 static inline ehci_endpoint_t *ehci_endpoint_list_instance(link_t *l) 87 87 { 88 88 return list_get_instance(l, ehci_endpoint_t, eplist_link); -
uspace/drv/bus/usb/ehci/ehci_rh.h
r3692678 rae3a941 80 80 } ehci_rh_t; 81 81 82 errno_t ehci_rh_init(ehci_rh_t *instance, ehci_caps_regs_t *caps, ehci_regs_t *regs,83 fibril_mutex_t *guard, const char *name);82 errno_t ehci_rh_init(ehci_rh_t *instance, ehci_caps_regs_t *caps, 83 ehci_regs_t *regs, fibril_mutex_t *guard, const char *name); 84 84 errno_t ehci_rh_schedule(ehci_rh_t *instance, usb_transfer_batch_t *batch); 85 85 errno_t ehci_rh_interrupt(ehci_rh_t *instance); -
uspace/drv/bus/usb/ehci/hc.h
r3692678 rae3a941 104 104 extern errno_t hc_start(hc_device_t *); 105 105 extern errno_t hc_setup_roothub(hc_device_t *); 106 extern errno_t hc_gen_irq_code(irq_code_t *, hc_device_t *, const hw_res_list_parsed_t *, int *); 106 extern errno_t hc_gen_irq_code(irq_code_t *, hc_device_t *, 107 const hw_res_list_parsed_t *, int *); 107 108 extern errno_t hc_gone(hc_device_t *); 108 109 -
uspace/drv/bus/usb/ehci/hw_struct/iso_transfer_descriptor.h
r3692678 rae3a941 72 72 /* 64 bit struct only */ 73 73 volatile uint32_t extended_bp[7]; 74 } __attribute__((packed, aligned(32))) itd_t;74 } __attribute__((packed, aligned(32))) itd_t; 75 75 #endif 76 76 /** -
uspace/drv/bus/usb/ehci/hw_struct/queue_head.c
r3692678 rae3a941 70 70 QH_EP_CHAR_EP_SET(ep->endpoint) | 71 71 speed[ep->device->speed] | 72 QH_EP_CHAR_MAX_LENGTH_SET(ep->max_packet_size) 73 ); 72 QH_EP_CHAR_MAX_LENGTH_SET(ep->max_packet_size)); 74 73 if (ep->transfer_type == USB_TRANSFER_CONTROL) { 75 74 if (ep->device->speed != USB_SPEED_HIGH) … … 80 79 } 81 80 uint32_t ep_cap = QH_EP_CAP_C_MASK_SET(3 << 2) | 82 81 QH_EP_CAP_MULTI_SET(ep->packets_per_uframe); 83 82 if (usb_speed_is_11(ep->device->speed)) { 84 83 assert(ep->device->tt.dev != NULL); -
uspace/drv/bus/usb/ehci/hw_struct/queue_head.h
r3692678 rae3a941 143 143 /* 64 bit struct only */ 144 144 volatile uint32_t extended_bp[5]; 145 } __attribute__((packed, aligned(32))) qh_t;145 } __attribute__((packed, aligned(32))) qh_t; 146 146 147 147 static inline void qh_append_qh(qh_t *qh, const qh_t *next) -
uspace/drv/bus/usb/ehci/hw_struct/split_iso_transfer_descriptor.h
r3692678 rae3a941 89 89 /* 64 bit struct only */ 90 90 volatile uint32_t extended_bp[2]; 91 } __attribute__((packed, aligned(32))) sitd_t;91 } __attribute__((packed, aligned(32))) sitd_t; 92 92 #endif 93 93 /** -
uspace/drv/bus/usb/ohci/hc.h
r3692678 rae3a941 84 84 } hc_t; 85 85 86 static inline hc_t * 86 static inline hc_t *hcd_to_hc(hc_device_t *hcd) 87 87 { 88 88 assert(hcd); … … 91 91 92 92 extern errno_t hc_add(hc_device_t *, const hw_res_list_parsed_t *); 93 extern errno_t hc_gen_irq_code(irq_code_t *, hc_device_t *, const hw_res_list_parsed_t *, int *); 93 extern errno_t hc_gen_irq_code(irq_code_t *, hc_device_t *, 94 const hw_res_list_parsed_t *, int *); 94 95 extern errno_t hc_gain_control(hc_device_t *); 95 96 extern errno_t hc_start(hc_device_t *); -
uspace/drv/bus/usb/ohci/hw_struct/endpoint_descriptor.c
r3692678 rae3a941 84 84 | ((ep->endpoint & ED_STATUS_EN_MASK) << ED_STATUS_EN_SHIFT) 85 85 | ((dir[ep->direction] & ED_STATUS_D_MASK) << ED_STATUS_D_SHIFT) 86 | ((ep->max_packet_size & ED_STATUS_MPS_MASK) 87 << ED_STATUS_MPS_SHIFT)); 86 | ((ep->max_packet_size & ED_STATUS_MPS_MASK) << ED_STATUS_MPS_SHIFT)); 88 87 89 88 /* Low speed flag */ -
uspace/drv/bus/usb/ohci/hw_struct/endpoint_descriptor.h
r3692678 rae3a941 107 107 #define ED_NEXT_PTR_MASK (0xfffffff0) 108 108 #define ED_NEXT_PTR_SHIFT (0) 109 } __attribute__((packed, aligned(32))) ed_t;109 } __attribute__((packed, aligned(32))) ed_t; 110 110 111 111 void ed_init(ed_t *instance, const endpoint_t *ep, const td_t *td); … … 204 204 { 205 205 assert(instance); 206 return (OHCI_MEM32_RD(instance->td_head) & ED_TDHEAD_TOGGLE_CARRY) ? 1 : 0;206 return !!(OHCI_MEM32_RD(instance->td_head) & ED_TDHEAD_TOGGLE_CARRY); 207 207 } 208 208 -
uspace/drv/bus/usb/ohci/hw_struct/iso_transfer_descriptor.h
r3692678 rae3a941 69 69 #define ITD_OFFSET_CC_SHIFT (12) 70 70 71 } __attribute__((packed, aligned(32))) itd_t;71 } __attribute__((packed, aligned(32))) itd_t; 72 72 73 73 #endif -
uspace/drv/bus/usb/ohci/hw_struct/transfer_descriptor.h
r3692678 rae3a941 90 90 */ 91 91 volatile uint32_t be; 92 } __attribute__((packed, aligned(32))) td_t;92 } __attribute__((packed, aligned(32))) td_t; 93 93 94 94 void td_init(td_t *, const td_t *, usb_direction_t, const void *, size_t, int); … … 103 103 { 104 104 assert(instance); 105 const int cc = (OHCI_MEM32_RD(instance->status)106 >> TD_STATUS_CC_SHIFT)& TD_STATUS_CC_MASK;105 const int cc = (OHCI_MEM32_RD(instance->status) >> TD_STATUS_CC_SHIFT) 106 & TD_STATUS_CC_MASK; 107 107 /* This value is changed on transfer completion, 108 108 * either to CC_NOERROR or and error code. -
uspace/drv/bus/usb/ohci/ohci_batch.h
r3692678 rae3a941 65 65 } ohci_transfer_batch_t; 66 66 67 ohci_transfer_batch_t * 67 ohci_transfer_batch_t *ohci_transfer_batch_create(endpoint_t *batch); 68 68 int ohci_transfer_batch_prepare(ohci_transfer_batch_t *ohci_batch); 69 69 void ohci_transfer_batch_commit(const ohci_transfer_batch_t *batch); … … 71 71 void ohci_transfer_batch_destroy(ohci_transfer_batch_t *ohci_batch); 72 72 73 static inline ohci_transfer_batch_t * ohci_transfer_batch_get(usb_transfer_batch_t *usb_batch) 73 static inline ohci_transfer_batch_t *ohci_transfer_batch_get( 74 usb_transfer_batch_t *usb_batch) 74 75 { 75 76 assert(usb_batch); -
uspace/drv/bus/usb/ohci/ohci_bus.c
r3692678 rae3a941 72 72 /** Creates new hcd endpoint representation. 73 73 */ 74 static endpoint_t *ohci_endpoint_create(device_t *dev, const usb_endpoint_descriptors_t *desc) 74 static endpoint_t *ohci_endpoint_create(device_t *dev, 75 const usb_endpoint_descriptors_t *desc) 75 76 { 76 77 assert(dev); … … 82 83 endpoint_init(&ohci_ep->base, dev, desc); 83 84 84 const errno_t err = dma_buffer_alloc(&ohci_ep->dma_buffer, sizeof(ed_t) + 2 * sizeof(td_t)); 85 const errno_t err = dma_buffer_alloc(&ohci_ep->dma_buffer, 86 sizeof(ed_t) + 2 * sizeof(td_t)); 85 87 if (err) { 86 88 free(ohci_ep); -
uspace/drv/bus/usb/uhci/hw_struct/queue_head.h
r3692678 rae3a941 48 48 /** Pointer to the next entity (another QH or TD */ 49 49 volatile link_pointer_t next; 50 /** Pointer to the contained entities (execution controlled by vertical flag*/ 50 /** 51 * Pointer to the contained entities 52 * (execution controlled by vertical flag) 53 */ 51 54 volatile link_pointer_t element; 52 } __attribute__((packed, aligned(16))) qh_t;55 } __attribute__((packed, aligned(16))) qh_t; 53 56 54 57 /** Initialize queue head structure -
uspace/drv/bus/usb/uhci/hw_struct/transfer_descriptor.h
r3692678 rae3a941 95 95 * memory just needs to be aligned. We don't use it anyway. 96 96 */ 97 } __attribute__((packed, aligned(16))) td_t;97 } __attribute__((packed, aligned(16))) td_t; 98 98 99 99 -
uspace/drv/bus/usb/uhci/uhci_batch.h
r3692678 rae3a941 70 70 } uhci_transfer_batch_t; 71 71 72 uhci_transfer_batch_t * 72 uhci_transfer_batch_t *uhci_transfer_batch_create(endpoint_t *); 73 73 int uhci_transfer_batch_prepare(uhci_transfer_batch_t *); 74 74 bool uhci_transfer_batch_check_completed(uhci_transfer_batch_t *); … … 79 79 * @return Pointer to the setup buffer. 80 80 */ 81 static inline void * 81 static inline void *uhci_transfer_batch_setup_buffer( 82 82 const uhci_transfer_batch_t *uhci_batch) 83 83 { … … 91 91 * @return Pointer to the data buffer. 92 92 */ 93 static inline void * 93 static inline void *uhci_transfer_batch_data_buffer( 94 94 const uhci_transfer_batch_t *uhci_batch) 95 95 { … … 108 108 } 109 109 110 static inline uhci_transfer_batch_t *uhci_transfer_batch_get(usb_transfer_batch_t *b) 110 static inline uhci_transfer_batch_t *uhci_transfer_batch_get( 111 usb_transfer_batch_t *b) 111 112 { 112 113 assert(b); -
uspace/drv/bus/usb/usbdiag/device.h
r3692678 rae3a941 77 77 } usbdiag_dev_t; 78 78 79 errno_t usbdiag_dev_create(usb_device_t *, usbdiag_dev_t **, const usb_endpoint_description_t **); 79 errno_t usbdiag_dev_create(usb_device_t *, usbdiag_dev_t **, 80 const usb_endpoint_description_t **); 80 81 void usbdiag_dev_destroy(usbdiag_dev_t *); 81 82 82 static inline usbdiag_dev_t * 83 static inline usbdiag_dev_t *usb_device_to_usbdiag_dev(usb_device_t *usb_dev) 83 84 { 84 85 assert(usb_dev); … … 86 87 } 87 88 88 static inline usbdiag_dev_t * 89 static inline usbdiag_dev_t *ddf_dev_to_usbdiag_dev(ddf_dev_t *ddf_dev) 89 90 { 90 91 assert(ddf_dev); … … 92 93 } 93 94 94 static inline usbdiag_dev_t * 95 static inline usbdiag_dev_t *ddf_fun_to_usbdiag_dev(ddf_fun_t *ddf_fun) 95 96 { 96 97 assert(ddf_fun); -
uspace/drv/bus/usb/usbdiag/tests.h
r3692678 rae3a941 39 39 #include <ddf/driver.h> 40 40 41 errno_t usbdiag_dev_test_in(ddf_fun_t *, const usbdiag_test_params_t *, usbdiag_test_results_t *); 42 errno_t usbdiag_dev_test_out(ddf_fun_t *, const usbdiag_test_params_t *, usbdiag_test_results_t *); 41 errno_t usbdiag_dev_test_in(ddf_fun_t *, const usbdiag_test_params_t *, 42 usbdiag_test_results_t *); 43 errno_t usbdiag_dev_test_out(ddf_fun_t *, const usbdiag_test_params_t *, 44 usbdiag_test_results_t *); 43 45 44 46 #endif /* USBDIAG_TESTS_H_ */ -
uspace/drv/bus/usb/usbhub/port.c
r3692678 rae3a941 49 49 #include "status.h" 50 50 51 #define port_log(lvl, port, fmt, ...) do { usb_log_##lvl("(%p-%u): " fmt, (port->hub), (port->port_number), ##__VA_ARGS__); } while (0) 51 #define port_log(lvl, port, fmt, ...) do { \ 52 usb_log_##lvl("(%p-%u): " fmt, \ 53 (port->hub), (port->port_number), ##__VA_ARGS__); \ 54 } while (0) 52 55 53 56 /** Initialize hub port information. … … 55 58 * @param port Port to be initialized. 56 59 */ 57 void usb_hub_port_init(usb_hub_port_t *port, usb_hub_dev_t *hub, unsigned int port_number) 60 void usb_hub_port_init(usb_hub_port_t *port, usb_hub_dev_t *hub, 61 unsigned int port_number) 58 62 { 59 63 assert(port); … … 79 83 async_exch_t *exch = usb_device_bus_exchange_begin(port->hub->usb_device); 80 84 if (!exch) { 81 port_log(error, port, "Cannot remove the device, failed creating exchange."); 85 port_log(error, port, "Cannot remove the device, " 86 "failed creating exchange."); 82 87 return; 83 88 } … … 85 90 const errno_t err = usbhc_device_remove(exch, port->port_number); 86 91 if (err) 87 port_log(error, port, "Failed to remove device: %s", str_error(err)); 92 port_log(error, port, "Failed to remove device: %s", 93 str_error(err)); 88 94 89 95 usb_device_bus_exchange_end(exch); … … 109 115 err = usb_hub_reserve_default_address(port->hub, exch, &port->base); 110 116 if (err != EOK) { 111 port_log(error, port, "Failed to reserve default address: %s", str_error(err)); 117 port_log(error, port, "Failed to reserve default address: %s", 118 str_error(err)); 112 119 return err; 113 120 } … … 118 125 119 126 port_log(debug, port, "Resetting port."); 120 if ((err = usb_hub_set_port_feature(port->hub, port->port_number, USB_HUB_FEATURE_PORT_RESET))) { 121 port_log(warning, port, "Port reset request failed: %s", str_error(err)); 127 if ((err = usb_hub_set_port_feature(port->hub, port->port_number, 128 USB_HUB_FEATURE_PORT_RESET))) { 129 port_log(warning, port, "Port reset request failed: %s", 130 str_error(err)); 122 131 goto out_address; 123 132 } 124 133 125 134 if ((err = usb_port_wait_for_enabled(&port->base))) { 126 port_log(error, port, "Failed to reset port: %s", str_error(err)); 135 port_log(error, port, "Failed to reset port: %s", 136 str_error(err)); 127 137 goto out_address; 128 138 } 129 139 130 140 port_log(debug, port, "Enumerating device."); 131 if ((err = usbhc_device_enumerate(exch, port->port_number, port->speed))) { 132 port_log(error, port, "Failed to enumerate device: %s", str_error(err)); 141 if ((err = usbhc_device_enumerate(exch, port->port_number, 142 port->speed))) { 143 port_log(error, port, "Failed to enumerate device: %s", 144 str_error(err)); 133 145 /* Disable the port */ 134 usb_hub_clear_port_feature(port->hub, port->port_number, USB2_HUB_FEATURE_PORT_ENABLE); 146 usb_hub_clear_port_feature(port->hub, port->port_number, 147 USB2_HUB_FEATURE_PORT_ENABLE); 135 148 goto out_address; 136 149 } … … 151 164 152 165 port_log(debug, port, "Issuing a warm reset."); 153 if ((err = usb_hub_set_port_feature(port->hub, port->port_number, USB3_HUB_FEATURE_BH_PORT_RESET))) { 154 port_log(warning, port, "Port reset request failed: %s", str_error(err)); 166 if ((err = usb_hub_set_port_feature(port->hub, port->port_number, 167 USB3_HUB_FEATURE_BH_PORT_RESET))) { 168 port_log(warning, port, "Port reset request failed: %s", 169 str_error(err)); 155 170 return err; 156 171 } 157 172 158 173 if ((err = usb_port_wait_for_enabled(&port->base))) { 159 port_log(error, port, "Failed to reset port: %s", str_error(err)); 174 port_log(error, port, "Failed to reset port: %s", 175 str_error(err)); 160 176 return err; 161 177 } 162 178 163 179 port_log(debug, port, "Enumerating device."); 164 if ((err = usbhc_device_enumerate(exch, port->port_number, port->speed))) { 165 port_log(error, port, "Failed to enumerate device: %s", str_error(err)); 180 if ((err = usbhc_device_enumerate(exch, port->port_number, 181 port->speed))) { 182 port_log(error, port, "Failed to enumerate device: %s", 183 str_error(err)); 166 184 return err; 167 185 } … … 193 211 { 194 212 const bool connected = !!(status & USB_HUB_PORT_STATUS_CONNECTION); 195 port_log(debug, port, "Connection change: device %s.", connected ? "attached" : "removed"); 213 port_log(debug, port, "Connection change: device %s.", connected 214 ? "attached" : "removed"); 196 215 197 216 if (connected) { … … 212 231 } 213 232 214 static void port_changed_overcurrent(usb_hub_port_t *port, usb_port_status_t status) 233 static void port_changed_overcurrent(usb_hub_port_t *port, 234 usb_port_status_t status) 215 235 { 216 236 const bool overcurrent = !!(status & USB_HUB_PORT_STATUS_OC); … … 225 245 226 246 if (!overcurrent) { 227 const errno_t err = usb_hub_set_port_feature(port->hub, port->port_number, USB_HUB_FEATURE_PORT_POWER); 247 const errno_t err = usb_hub_set_port_feature(port->hub, 248 port->port_number, USB_HUB_FEATURE_PORT_POWER); 228 249 if (err) 229 port_log(error, port, "Failed to set port power after OC: %s.", str_error(err)); 250 port_log(error, port, "Failed to set port power " 251 "after OC: %s.", str_error(err)); 230 252 } 231 253 } … … 245 267 246 268 static void check_port_change(usb_hub_port_t *port, usb_port_status_t *status, 247 change_handler_t handler, usb_port_status_t mask, usb_hub_class_feature_t feature) 269 change_handler_t handler, usb_port_status_t mask, 270 usb_hub_class_feature_t feature) 248 271 { 249 272 if ((*status & mask) == 0) … … 273 296 274 297 usb_port_status_t status = 0; 275 const errno_t err = usb_hub_get_port_status(port->hub, port->port_number, &status); 298 const errno_t err = usb_hub_get_port_status(port->hub, 299 port->port_number, &status); 276 300 if (err != EOK) { 277 port_log(error, port, "Failed to get port status: %s.", str_error(err)); 301 port_log(error, port, "Failed to get port status: %s.", 302 str_error(err)); 278 303 return; 279 304 } 280 305 281 306 check_port_change(port, &status, &port_changed_connection, 282 USB_HUB_PORT_STATUS_C_CONNECTION, USB_HUB_FEATURE_C_PORT_CONNECTION); 307 USB_HUB_PORT_STATUS_C_CONNECTION, 308 USB_HUB_FEATURE_C_PORT_CONNECTION); 283 309 284 310 check_port_change(port, &status, &port_changed_overcurrent, … … 290 316 if (port->hub->speed <= USB_SPEED_HIGH) { 291 317 check_port_change(port, &status, &port_changed_enabled, 292 USB2_HUB_PORT_STATUS_C_ENABLE, USB2_HUB_FEATURE_C_PORT_ENABLE); 318 USB2_HUB_PORT_STATUS_C_ENABLE, 319 USB2_HUB_FEATURE_C_PORT_ENABLE); 293 320 } else { 294 321 check_port_change(port, &status, &port_changed_reset, 295 USB3_HUB_PORT_STATUS_C_BH_RESET, USB3_HUB_FEATURE_C_BH_PORT_RESET); 322 USB3_HUB_PORT_STATUS_C_BH_RESET, 323 USB3_HUB_FEATURE_C_BH_PORT_RESET); 296 324 297 325 check_port_change(port, &status, NULL, 298 USB3_HUB_PORT_STATUS_C_LINK_STATE, USB3_HUB_FEATURE_C_PORT_LINK_STATE); 326 USB3_HUB_PORT_STATUS_C_LINK_STATE, 327 USB3_HUB_FEATURE_C_PORT_LINK_STATE); 299 328 } 300 329 301 330 /* Check for changes we ignored */ 302 331 if (status & 0xffff0000) { 303 port_log(debug, port, "Port status change igored. Status: %#08" PRIx32, status); 332 port_log(debug, port, "Port status change igored. " 333 "Status: %#08" PRIx32, status); 304 334 } 305 335 } -
uspace/drv/bus/usb/usbhub/status.h
r3692678 rae3a941 59 59 if (hub_speed == USB_SPEED_SUPER) 60 60 return USB_SPEED_SUPER; 61 if (hub_speed == USB_SPEED_HIGH && (status & USB2_HUB_PORT_STATUS_HIGH_SPEED)) 61 if (hub_speed == USB_SPEED_HIGH 62 && (status & USB2_HUB_PORT_STATUS_HIGH_SPEED)) 62 63 return USB_SPEED_HIGH; 63 64 if ((status & USB2_HUB_PORT_STATUS_LOW_SPEED) != 0) -
uspace/drv/bus/usb/usbhub/usbhub.h
r3692678 rae3a941 84 84 85 85 errno_t usb_hub_set_depth(const usb_hub_dev_t *); 86 errno_t usb_hub_get_port_status(const usb_hub_dev_t *, size_t, usb_port_status_t *); 87 errno_t usb_hub_set_port_feature(const usb_hub_dev_t *, size_t, usb_hub_class_feature_t); 88 errno_t usb_hub_clear_port_feature(const usb_hub_dev_t *, size_t, usb_hub_class_feature_t); 86 errno_t usb_hub_get_port_status(const usb_hub_dev_t *, size_t, 87 usb_port_status_t *); 88 errno_t usb_hub_set_port_feature(const usb_hub_dev_t *, size_t, 89 usb_hub_class_feature_t); 90 errno_t usb_hub_clear_port_feature(const usb_hub_dev_t *, size_t, 91 usb_hub_class_feature_t); 89 92 90 93 bool hub_port_changes_callback(usb_device_t *, uint8_t *, size_t, void *); 91 94 92 errno_t usb_hub_reserve_default_address(usb_hub_dev_t *, async_exch_t *, usb_port_t *); 95 errno_t usb_hub_reserve_default_address(usb_hub_dev_t *, async_exch_t *, 96 usb_port_t *); 93 97 errno_t usb_hub_release_default_address(usb_hub_dev_t *, async_exch_t *); 94 98 -
uspace/drv/bus/usb/usbmid/dump.c
r3692678 rae3a941 54 54 const int type = data[1]; 55 55 if (type == USB_DESCTYPE_INTERFACE) { 56 usb_standard_interface_descriptor_t *descriptor 57 =(usb_standard_interface_descriptor_t *) data;56 usb_standard_interface_descriptor_t *descriptor = 57 (usb_standard_interface_descriptor_t *) data; 58 58 usb_log_info("Found interface: %s (0x%02x/0x%02x/0x%02x).", 59 59 usb_str_class(descriptor->interface_class), -
uspace/drv/bus/usb/vhc/hub/hub.c
r3692678 rae3a941 68 68 69 69 /** Convert hub port state to a char. */ 70 char hub_port_state_to_char(hub_port_state_t state) { 70 char hub_port_state_to_char(hub_port_state_t state) 71 { 71 72 switch (state) { 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 73 case HUB_PORT_STATE_NOT_CONFIGURED: 74 return '-'; 75 case HUB_PORT_STATE_POWERED_OFF: 76 return 'O'; 77 case HUB_PORT_STATE_DISCONNECTED: 78 return 'X'; 79 case HUB_PORT_STATE_DISABLED: 80 return 'D'; 81 case HUB_PORT_STATE_RESETTING: 82 return 'R'; 83 case HUB_PORT_STATE_ENABLED: 84 return 'E'; 85 case HUB_PORT_STATE_SUSPENDED: 86 return 'S'; 87 case HUB_PORT_STATE_RESUMING: 88 return 'F'; 89 default: 90 return '?'; 90 91 } 91 92 } … … 234 235 235 236 switch (state) { 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 237 case HUB_PORT_STATE_POWERED_OFF: 238 clear_port_status_change(port, HUB_STATUS_C_PORT_CONNECTION); 239 clear_port_status_change(port, HUB_STATUS_C_PORT_ENABLE); 240 clear_port_status_change(port, HUB_STATUS_C_PORT_RESET); 241 break; 242 case HUB_PORT_STATE_RESUMING: 243 port->state = state; 244 set_port_state_delayed(hub, port_index, 245 10, state, HUB_PORT_STATE_ENABLED); 246 break; 247 case HUB_PORT_STATE_RESETTING: 248 port->state = state; 249 set_port_state_delayed(hub, port_index, 250 10, state, HUB_PORT_STATE_ENABLED); 251 break; 252 case HUB_PORT_STATE_ENABLED: 253 if (port->state == HUB_PORT_STATE_RESETTING) { 254 set_port_status_change(port, HUB_STATUS_C_PORT_RESET); 255 } 256 break; 257 default: 258 break; 258 259 } 259 260 … … 336 337 } 337 338 338 uint32_t status; 339 status = MAKE_BYTE( 339 uint32_t status = MAKE_BYTE( 340 340 /* Current connect status. */ 341 341 port->connected_device == NULL ? 0 : 1, … … 344 344 /* Suspend. */ 345 345 (port->state == HUB_PORT_STATE_SUSPENDED) 346 346 || (port->state == HUB_PORT_STATE_RESUMING) ? 1 : 0, 347 347 /* Over-current. */ 348 348 0, … … 350 350 port->state == HUB_PORT_STATE_RESETTING ? 1 : 0, 351 351 /* Reserved. */ 352 0, 0, 0) 353 354 | (MAKE_BYTE(352 0, 0, 0); 353 354 status |= MAKE_BYTE( 355 355 /* Port power. */ 356 356 port->state == HUB_PORT_STATE_POWERED_OFF ? 0 : 1, … … 359 359 /* Reserved. */ 360 360 0, 0, 0, 0, 0, 0 361 ) )<< 8;361 ) << 8; 362 362 363 363 status |= (port->status_change << 16); … … 463 463 static errno_t set_port_state_delayed_fibril(void *arg) 464 464 { 465 struct delay_port_state_change *change 466 =(struct delay_port_state_change *) arg;465 struct delay_port_state_change *change = 466 (struct delay_port_state_change *) arg; 467 467 468 468 async_usleep(change->delay); … … 500 500 hub_port_state_t old_state, hub_port_state_t new_state) 501 501 { 502 struct delay_port_state_change *change 503 =malloc(sizeof(struct delay_port_state_change));502 struct delay_port_state_change *change = 503 malloc(sizeof(struct delay_port_state_change)); 504 504 505 505 change->hub = hub; -
uspace/drv/bus/usb/vhc/transfer.c
r3692678 rae3a941 50 50 return false; 51 51 } 52 const usb_device_request_setup_packet_t *setup 53 =&transfer->batch.setup.packet;52 const usb_device_request_setup_packet_t *setup = 53 &transfer->batch.setup.packet; 54 54 if (setup->request_type != 0) { 55 55 return false; … … 139 139 assert(!list_empty(&dev->transfer_queue)); 140 140 141 vhc_transfer_t *transfer = list_get_instance( 142 list_first(&dev->transfer_queue), vhc_transfer_t, link); 141 vhc_transfer_t *transfer = 142 list_get_instance(list_first(&dev->transfer_queue), 143 vhc_transfer_t, link); 143 144 list_remove(&transfer->link); 144 145 … … 258 259 dev->dev_local, &data_transfer_size); 259 260 } else { 260 usb_log_warning("Device has no remote phone nor local node."); 261 usb_log_warning("Device has no remote phone " 262 "nor local node."); 261 263 rc = ESTALL; 262 264 } … … 269 271 if (is_set_address_transfer(transfer)) { 270 272 usb_device_request_setup_packet_t *setup = 271 (void *) transfer->batch.setup.buffer;273 (void *) transfer->batch.setup.buffer; 272 274 dev->address = setup->value; 273 275 usb_log_debug2("Address changed to %d", -
uspace/drv/bus/usb/vhc/vhcd.h
r3692678 rae3a941 93 93 errno_t vhc_virtdev_plug(vhc_data_t *, async_sess_t *, uintptr_t *); 94 94 errno_t vhc_virtdev_plug_local(vhc_data_t *, usbvirt_device_t *, uintptr_t *); 95 errno_t vhc_virtdev_plug_hub(vhc_data_t *, usbvirt_device_t *, uintptr_t *, usb_address_t address); 95 errno_t vhc_virtdev_plug_hub(vhc_data_t *, usbvirt_device_t *, uintptr_t *, 96 usb_address_t address); 96 97 void vhc_virtdev_unplug(vhc_data_t *, uintptr_t); 97 98 -
uspace/drv/bus/usb/xhci/bus.h
r3692678 rae3a941 45 45 /** Endpoint management structure */ 46 46 typedef struct xhci_bus { 47 bus_t base; /**< Inheritance. Keep this first. */ 48 49 xhci_hc_t *hc; /**< Pointer to managing HC (to issue commands) */ 50 51 xhci_device_t **devices_by_slot; /**< Devices by Slot ID */ 47 bus_t base; /**< Inheritance. Keep this first. */ 48 xhci_hc_t *hc; /**< Pointer to managing HC (to issue commands) */ 49 xhci_device_t **devices_by_slot; /**< Devices by Slot ID */ 52 50 } xhci_bus_t; 53 51 -
uspace/drv/bus/usb/xhci/commands.c
r3692678 rae3a941 150 150 151 151 while (cmd_link != NULL) { 152 xhci_cmd_t *cmd = list_get_instance(cmd_link, xhci_cmd_t, _header.link); 152 xhci_cmd_t *cmd = list_get_instance(cmd_link, xhci_cmd_t, 153 _header.link); 153 154 154 155 if (cmd->_header.trb_phys == phys) … … 158 159 } 159 160 160 return cmd_link ? list_get_instance(cmd_link, xhci_cmd_t, _header.link) 161 : NULL; 161 return cmd_link 162 ? list_get_instance(cmd_link, xhci_cmd_t, _header.link) 163 : NULL; 162 164 } 163 165 … … 167 169 168 170 cr->state = state; 169 if (state == XHCI_CR_STATE_OPEN 170 || state == XHCI_CR_STATE_CLOSED) 171 if (state == XHCI_CR_STATE_OPEN || state == XHCI_CR_STATE_CLOSED) 171 172 fibril_condvar_broadcast(&cr->state_cv); 172 173 } … … 206 207 } 207 208 208 usb_log_debug("Sending command %s", xhci_trb_str_type(TRB_TYPE(cmd->_header.trb))); 209 usb_log_debug("Sending command %s", 210 xhci_trb_str_type(TRB_TYPE(cmd->_header.trb))); 209 211 210 212 list_append(&cmd->_header.link, &cr->cmd_list); … … 337 339 usb_log_error("Command resulted in error: %s.", trb_codes[code]); 338 340 else 339 usb_log_error("Command resulted in reserved or vendor specific error."); 341 usb_log_error("Command resulted in reserved or " 342 "vendor specific error."); 340 343 } 341 344 … … 657 660 } 658 661 659 usb_log_error("Timeout while waiting for command: aborting current command."); 662 usb_log_error("Timeout while waiting for command: " 663 "aborting current command."); 660 664 661 665 cr_set_state(cr, XHCI_CR_STATE_CHANGING); … … 663 667 abort_command_ring(hc); 664 668 665 fibril_condvar_wait_timeout(&cr->stopped_cv, &cr->guard, XHCI_CR_ABORT_TIMEOUT); 669 fibril_condvar_wait_timeout(&cr->stopped_cv, &cr->guard, 670 XHCI_CR_ABORT_TIMEOUT); 666 671 667 672 if (XHCI_REG_RD(hc->op_regs, XHCI_OP_CRR)) { -
uspace/drv/bus/usb/xhci/commands.h
r3692678 rae3a941 70 70 71 71 typedef enum { 72 XHCI_CR_STATE_CLOSED, 73 XHCI_CR_STATE_OPEN, 74 XHCI_CR_STATE_CHANGING, 75 XHCI_CR_STATE_FULL, 72 XHCI_CR_STATE_CLOSED, /**< Commands are rejected with ENAK. */ 73 XHCI_CR_STATE_OPEN, /**< Commands are enqueued normally. */ 74 XHCI_CR_STATE_CHANGING, /**< Commands wait until state changes. */ 75 XHCI_CR_STATE_FULL, /**< Commands wait until something completes. */ 76 76 } xhci_cr_state_t; 77 77 -
uspace/drv/bus/usb/xhci/debug.h
r3692678 rae3a941 63 63 extern void xhci_dump_slot_ctx(const struct xhci_slot_ctx *); 64 64 extern void xhci_dump_endpoint_ctx(const struct xhci_endpoint_ctx *); 65 extern void xhci_dump_input_ctx(const struct xhci_hc *, const struct xhci_input_ctx *); 65 extern void xhci_dump_input_ctx(const struct xhci_hc *, 66 const struct xhci_input_ctx *); 66 67 67 68 #endif -
uspace/drv/bus/usb/xhci/device.h
r3692678 rae3a941 62 62 63 63 #define XHCI_DEV_FMT "(%s, slot %d)" 64 #define XHCI_DEV_ARGS(dev) 64 #define XHCI_DEV_ARGS(dev) ddf_fun_get_name((dev).base.fun), (dev).slot_id 65 65 66 66 /* Bus callbacks */ … … 72 72 void xhci_setup_slot_context(xhci_device_t *, xhci_slot_ctx_t *); 73 73 74 static inline xhci_device_t * 74 static inline xhci_device_t *xhci_device_get(device_t *dev) 75 75 { 76 76 assert(dev); -
uspace/drv/bus/usb/xhci/endpoint.h
r3692678 rae3a941 76 76 xhci_trb_ring_t ring; 77 77 78 /** Primary stream context data array (or NULL if endpoint doesn't use streams). */ 78 /** 79 * Primary stream context data array 80 * (or NULL if endpoint doesn't use streams). 81 */ 79 82 xhci_stream_data_t *primary_stream_data_array; 80 83 … … 83 86 dma_buffer_t primary_stream_ctx_dma; 84 87 85 /** Size of the allocated primary stream data a rray (and context array). */88 /** Size of the allocated primary stream data and context array. */ 86 89 uint16_t primary_stream_data_size; 87 90 … … 89 92 uint32_t max_streams; 90 93 91 /** Maximum number of consecutive USB transactions (0-15) that should be executed per scheduling opportunity */ 94 /** 95 * Maximum number of consecutive USB transactions (0-15) that 96 * should be executed per scheduling opportunity 97 */ 92 98 uint8_t max_burst; 93 99 94 /** Maximum number of bursts within an interval that this endpoint supports */ 100 /** 101 * Maximum number of bursts within an interval that 102 * this endpoint supports 103 */ 95 104 uint8_t mult; 96 105 97 /** Scheduling interval for periodic endpoints, as a number of 125us units. (0 - 2^16) */ 106 /** 107 * Scheduling interval for periodic endpoints, 108 * as a number of 125us units. (0 - 2^16) 109 */ 98 110 uint32_t interval; 99 111 100 /** This field is a valid pointer for (and only for) isochronous transfers. */ 112 /** 113 * This field is a valid pointer for (and only for) isochronous 114 * endpoints. 115 */ 101 116 xhci_isoch_t isoch [0]; 102 117 } xhci_endpoint_t; … … 111 126 extern int xhci_endpoint_type(xhci_endpoint_t *ep); 112 127 113 extern endpoint_t *xhci_endpoint_create(device_t *, const usb_endpoint_descriptors_t *); 128 extern endpoint_t *xhci_endpoint_create(device_t *, 129 const usb_endpoint_descriptors_t *); 114 130 extern errno_t xhci_endpoint_register(endpoint_t *); 115 131 extern void xhci_endpoint_unregister(endpoint_t *); … … 122 138 extern errno_t xhci_endpoint_clear_halt(xhci_endpoint_t *, unsigned); 123 139 124 static inline xhci_endpoint_t * 140 static inline xhci_endpoint_t *xhci_endpoint_get(endpoint_t *ep) 125 141 { 126 142 assert(ep); … … 128 144 } 129 145 130 static inline xhci_device_t * 146 static inline xhci_device_t *xhci_ep_to_dev(xhci_endpoint_t *ep) 131 147 { 132 148 assert(ep); -
uspace/drv/bus/usb/xhci/hc.h
r3692678 rae3a941 95 95 bool ac64; 96 96 bool csz; 97 uint64_t wrap_time; /**The last time when mfindex wrap happened */98 uint64_t wrap_count; /** Amount of mfindex wraps HC has done */99 unsigned ist; 97 uint64_t wrap_time; /**< The last time when mfindex wrap happened */ 98 uint64_t wrap_count; /**< Amount of mfindex wraps HC has done */ 99 unsigned ist; /**< IST in microframes */ 100 100 101 101 /** Port speed mapping */ -
uspace/drv/bus/usb/xhci/hw_struct/context.h
r3692678 rae3a941 179 179 #define XHCI_CTX_SIZE_SMALL 32 180 180 #define XHCI_ONE_CTX_SIZE(hc) (XHCI_CTX_SIZE_SMALL << hc->csz) 181 #define XHCI_GET_CTX_FIELD(type, ctx, hc, ci) (xhci_##type##_ctx_to_charptr(ctx) + (ci) * XHCI_ONE_CTX_SIZE(hc)) 181 #define XHCI_GET_CTX_FIELD(type, ctx, hc, ci) \ 182 (xhci_##type##_ctx_to_charptr(ctx) + (ci) * XHCI_ONE_CTX_SIZE(hc)) 182 183 183 184 /** … … 185 186 */ 186 187 #define XHCI_DEVICE_CTX_SIZE(hc) ((1 + XHCI_EP_COUNT) * XHCI_ONE_CTX_SIZE(hc)) 187 #define XHCI_GET_EP_CTX(dev_ctx, hc, dci) ((xhci_ep_ctx_t *) XHCI_GET_CTX_FIELD(device, (dev_ctx), (hc), (dci))) 188 #define XHCI_GET_SLOT_CTX(dev_ctx, hc) ((xhci_slot_ctx_t *) XHCI_GET_CTX_FIELD(device, (dev_ctx), (hc), 0)) 188 #define XHCI_GET_EP_CTX(dev_ctx, hc, dci) \ 189 ((xhci_ep_ctx_t *) XHCI_GET_CTX_FIELD(device, (dev_ctx), (hc), (dci))) 190 #define XHCI_GET_SLOT_CTX(dev_ctx, hc) \ 191 ((xhci_slot_ctx_t *) XHCI_GET_CTX_FIELD(device, (dev_ctx), (hc), 0)) 189 192 190 193 /** … … 210 213 typedef struct xhci_stream_ctx { 211 214 uint64_t data [2]; 212 #define XHCI_STREAM_DCS(ctx) 213 #define XHCI_STREAM_SCT(ctx) 214 #define XHCI_STREAM_DEQ_PTR(ctx) 215 #define XHCI_STREAM_EDTLA(ctx) 215 #define XHCI_STREAM_DCS(ctx) XHCI_QWORD_EXTRACT((ctx).data[0], 0, 0) 216 #define XHCI_STREAM_SCT(ctx) XHCI_QWORD_EXTRACT((ctx).data[0], 3, 1) 217 #define XHCI_STREAM_DEQ_PTR(ctx) (XHCI_QWORD_EXTRACT((ctx).data[0], 63, 4) << 4) 218 #define XHCI_STREAM_EDTLA(ctx) XHCI_QWORD_EXTRACT((ctx).data[1], 24, 0) 216 219 217 220 #define XHCI_STREAM_SCT_SET(ctx, val) \ … … 232 235 uint32_t data [8]; 233 236 #define XHCI_INPUT_CTRL_CTX_DROP(ctx, idx) \ 234 237 XHCI_DWORD_EXTRACT((ctx).data[0], (idx), (idx)) 235 238 236 239 #define XHCI_INPUT_CTRL_CTX_DROP_SET(ctx, idx) (ctx).data[0] |= (1 << (idx)) … … 238 241 239 242 #define XHCI_INPUT_CTRL_CTX_ADD(ctx, idx) \ 240 243 XHCI_DWORD_EXTRACT((ctx).data[1], (idx), (idx)) 241 244 242 245 #define XHCI_INPUT_CTRL_CTX_ADD_SET(ctx, idx) (ctx).data[1] |= (1 << (idx)) 243 246 #define XHCI_INPUT_CTRL_CTX_ADD_CLEAR(ctx, idx) (ctx).data[1] &= ~(1 << (idx)) 244 247 245 #define XHCI_INPUT_CTRL_CTX_CONFIG_VALUE(ctx) XHCI_DWORD_EXTRACT((ctx).data[7], 7, 0) 246 #define XHCI_INPUT_CTRL_CTX_IFACE_NUMBER(ctx) XHCI_DWORD_EXTRACT((ctx).data[7], 15, 8) 247 #define XHCI_INPUT_CTRL_CTX_ALTER_SETTING(ctx) XHCI_DWORD_EXTRACT((ctx).data[7], 23, 16) 248 #define XHCI_INPUT_CTRL_CTX_CONFIG_VALUE(ctx) \ 249 XHCI_DWORD_EXTRACT((ctx).data[7], 7, 0) 250 #define XHCI_INPUT_CTRL_CTX_IFACE_NUMBER(ctx) \ 251 XHCI_DWORD_EXTRACT((ctx).data[7], 15, 8) 252 #define XHCI_INPUT_CTRL_CTX_ALTER_SETTING(ctx) \ 253 XHCI_DWORD_EXTRACT((ctx).data[7], 23, 16) 248 254 } __attribute__((packed)) xhci_input_ctrl_ctx_t; 249 255 … … 252 258 */ 253 259 #define XHCI_INPUT_CTX_SIZE(hc) (XHCI_ONE_CTX_SIZE(hc) + XHCI_DEVICE_CTX_SIZE(hc)) 254 #define XHCI_GET_CTRL_CTX(ictx, hc) ((xhci_input_ctrl_ctx_t *) XHCI_GET_CTX_FIELD(input, (ictx), (hc), 0)) 255 #define XHCI_GET_DEVICE_CTX(dev_ctx, hc) ((xhci_device_ctx_t *) XHCI_GET_CTX_FIELD(input, (ictx), (hc), 1)) 260 #define XHCI_GET_CTRL_CTX(ictx, hc) \ 261 ((xhci_input_ctrl_ctx_t *) XHCI_GET_CTX_FIELD(input, (ictx), (hc), 0)) 262 #define XHCI_GET_DEVICE_CTX(dev_ctx, hc) \ 263 ((xhci_device_ctx_t *) XHCI_GET_CTX_FIELD(input, (ictx), (hc), 1)) 256 264 257 265 typedef struct xhci_input_ctx { -
uspace/drv/bus/usb/xhci/hw_struct/trb.h
r3692678 rae3a941 160 160 * The Chain bit is valid only in specific TRB types. 161 161 */ 162 static inline bool xhci_trb_is_chained(xhci_trb_t *trb) { 162 static inline bool xhci_trb_is_chained(xhci_trb_t *trb) 163 { 163 164 const int type = TRB_TYPE(*trb); 164 165 const bool chain_bit = XHCI_DWORD_EXTRACT(trb->control, 4, 4); -
uspace/drv/bus/usb/xhci/isoch.h
r3692678 rae3a941 84 84 fibril_timer_t *reset_timer; 85 85 86 /** The maximum size of an isochronous transfer and therefore the size of buffers */ 86 /** 87 * The maximum size of an isochronous transfer 88 * and therefore the size of buffers 89 */ 87 90 size_t max_size; 88 91 … … 123 126 extern errno_t isoch_schedule_out(xhci_transfer_t *); 124 127 extern errno_t isoch_schedule_in(xhci_transfer_t *); 125 extern void isoch_handle_transfer_event(xhci_hc_t *, xhci_endpoint_t *, xhci_trb_t *); 128 extern void isoch_handle_transfer_event(xhci_hc_t *, xhci_endpoint_t *, 129 xhci_trb_t *); 126 130 127 131 #endif -
uspace/drv/bus/usb/xhci/main.c
r3692678 rae3a941 68 68 } 69 69 70 static errno_t hcd_irq_code_gen(irq_code_t *code, hc_device_t *hcd, const hw_res_list_parsed_t *hw_res, int *irq) 70 static errno_t hcd_irq_code_gen(irq_code_t *code, hc_device_t *hcd, 71 const hw_res_list_parsed_t *hw_res, int *irq) 71 72 { 72 73 xhci_hc_t *hc = hcd_to_hc(hcd); -
uspace/drv/bus/usb/xhci/streams.h
r3692678 rae3a941 48 48 xhci_trb_ring_t ring; 49 49 50 /** Pointer to the array of secondary stream context data for primary data. */ 50 /** 51 * Pointer to the array of secondary stream context data for primary 52 * data. 53 */ 51 54 xhci_stream_data_t *secondary_data; 52 55 … … 61 64 } xhci_stream_data_t; 62 65 63 extern xhci_stream_data_t *xhci_get_stream_ctx_data(xhci_endpoint_t * ep, uint32_t stream_id);64 extern void xhci_stream_free_ds(xhci_endpoint_t * xhci_ep);66 extern xhci_stream_data_t *xhci_get_stream_ctx_data(xhci_endpoint_t *, uint32_t); 67 extern void xhci_stream_free_ds(xhci_endpoint_t *); 65 68 66 extern errno_t xhci_endpoint_remove_streams(xhci_hc_t *hc, xhci_device_t *dev, xhci_endpoint_t *xhci_ep); 67 extern errno_t xhci_endpoint_request_primary_streams(xhci_hc_t *hc, xhci_device_t *dev, 68 xhci_endpoint_t *xhci_ep, unsigned count); 69 extern errno_t xhci_endpoint_request_secondary_streams(xhci_hc_t *hc, xhci_device_t *dev, 70 xhci_endpoint_t *xhci_ep, unsigned *sizes, unsigned count); 69 extern errno_t xhci_endpoint_remove_streams(xhci_hc_t *, xhci_device_t *, 70 xhci_endpoint_t *); 71 extern errno_t xhci_endpoint_request_primary_streams(xhci_hc_t *, 72 xhci_device_t *, xhci_endpoint_t *, unsigned); 73 extern errno_t xhci_endpoint_request_secondary_streams(xhci_hc_t *, 74 xhci_device_t *, xhci_endpoint_t *, unsigned *, unsigned); 71 75 72 76 #endif -
uspace/drv/bus/usb/xhci/transfers.h
r3692678 rae3a941 59 59 extern void xhci_transfer_destroy(usb_transfer_batch_t *); 60 60 61 static inline xhci_transfer_t *xhci_transfer_from_batch(usb_transfer_batch_t *batch) 61 static inline xhci_transfer_t *xhci_transfer_from_batch( 62 usb_transfer_batch_t *batch) 62 63 { 63 64 assert(batch); -
uspace/drv/bus/usb/xhci/trb_ring.h
r3692678 rae3a941 57 57 */ 58 58 typedef struct xhci_trb_ring { 59 list_t segments; /* List of assigned segments */60 int segment_count; /* Number of segments assigned */59 list_t segments; /**< List of assigned segments */ 60 int segment_count; /**< Number of segments assigned */ 61 61 62 /* 63 * As the link TRBs connect physical addresses, we need to keep track of64 * active segment in virtual memory. The enqueue ptr should always belong65 * to the enqueue segment.62 /** 63 * As the link TRBs connect physical addresses, we need to keep track 64 * of active segment in virtual memory. The enqueue ptr should always 65 * belong to the enqueue segment. 66 66 */ 67 67 trb_segment_t *enqueue_segment; 68 68 xhci_trb_t *enqueue_trb; 69 69 70 uintptr_t dequeue; /*Last reported position of the dequeue pointer */71 bool pcs; /*Producer Cycle State: section 4.9.2 */70 uintptr_t dequeue; /**< Last reported position of the dequeue pointer */ 71 bool pcs; /**< Producer Cycle State: section 4.9.2 */ 72 72 73 73 fibril_mutex_t guard; … … 76 76 extern errno_t xhci_trb_ring_init(xhci_trb_ring_t *, size_t); 77 77 extern void xhci_trb_ring_fini(xhci_trb_ring_t *); 78 extern errno_t xhci_trb_ring_enqueue(xhci_trb_ring_t *, xhci_trb_t *, uintptr_t *); 79 extern errno_t xhci_trb_ring_enqueue_multiple(xhci_trb_ring_t *, xhci_trb_t *, size_t, uintptr_t *); 78 extern errno_t xhci_trb_ring_enqueue(xhci_trb_ring_t *, xhci_trb_t *, 79 uintptr_t *); 80 extern errno_t xhci_trb_ring_enqueue_multiple(xhci_trb_ring_t *, xhci_trb_t *, 81 size_t, uintptr_t *); 80 82 extern size_t xhci_trb_ring_size(xhci_trb_ring_t *); 81 83 82 extern void xhci_trb_ring_reset_dequeue_state(xhci_trb_ring_t * ring, uintptr_t *addr);84 extern void xhci_trb_ring_reset_dequeue_state(xhci_trb_ring_t *, uintptr_t *); 83 85 84 86 /** … … 86 88 * pointer inside the ring. Otherwise, the ring will soon show up as full. 87 89 */ 88 static inline void xhci_trb_ring_update_dequeue(xhci_trb_ring_t *ring, uintptr_t phys) 90 static inline void xhci_trb_ring_update_dequeue(xhci_trb_ring_t *ring, 91 uintptr_t phys) 89 92 { 90 93 ring->dequeue = phys; … … 95 98 */ 96 99 typedef struct xhci_event_ring { 97 list_t segments; /* List of assigned segments */98 int segment_count; /* Number of segments assigned */100 list_t segments; /**< List of assigned segments */ 101 int segment_count; /**< Number of segments assigned */ 99 102 100 trb_segment_t *dequeue_segment; /* Current segment of the dequeue ptr*/101 xhci_trb_t *dequeue_trb; /* Next TRB to be processed */102 uintptr_t dequeue_ptr; /* Physical address of theERDP to be reported to the HC */103 trb_segment_t *dequeue_segment; /**< Current segment */ 104 xhci_trb_t *dequeue_trb; /**< Next TRB to be processed */ 105 uintptr_t dequeue_ptr; /**< Physical ERDP to be reported to the HC */ 103 106 104 dma_buffer_t erst; /*ERST given to the HC */107 dma_buffer_t erst; /**< ERST given to the HC */ 105 108 106 bool ccs; /*Consumer Cycle State: section 4.9.2 */109 bool ccs; /**< Consumer Cycle State: section 4.9.2 */ 107 110 108 111 fibril_mutex_t guard; -
uspace/lib/drv/generic/remote_usb.c
r3692678 rae3a941 52 52 usb_dev_session_t *usb_dev_connect_to_self(ddf_dev_t *dev) 53 53 { 54 return devman_parent_device_connect(ddf_dev_get_handle(dev), IPC_FLAG_BLOCKING); 54 return devman_parent_device_connect(ddf_dev_get_handle(dev), 55 IPC_FLAG_BLOCKING); 55 56 } 56 57 … … 90 91 } 91 92 92 static void remote_usb_get_my_description(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *); 93 static void remote_usb_get_my_description(ddf_fun_t *, void *, 94 ipc_callid_t, ipc_call_t *); 93 95 94 96 /** Remote USB interface operations. */ -
uspace/lib/drv/generic/remote_usbdiag.c
r3692678 rae3a941 58 58 } 59 59 60 errno_t usbdiag_test_in(async_exch_t *exch, const usbdiag_test_params_t *params, usbdiag_test_results_t *results) 60 errno_t usbdiag_test_in(async_exch_t *exch, 61 const usbdiag_test_params_t *params, usbdiag_test_results_t *results) 61 62 { 62 63 if (!exch) … … 64 65 65 66 ipc_call_t answer; 66 aid_t req = async_send_1(exch, DEV_IFACE_ID(USBDIAG_DEV_IFACE), IPC_M_USBDIAG_TEST_IN, &answer); 67 68 errno_t rc = async_data_write_start(exch, params, sizeof(usbdiag_test_params_t)); 69 if (rc != EOK) { 70 async_exchange_end(exch); 71 async_forget(req); 72 return rc; 73 } 74 75 rc = async_data_read_start(exch, results, sizeof(usbdiag_test_results_t)); 67 aid_t req = async_send_1(exch, DEV_IFACE_ID(USBDIAG_DEV_IFACE), 68 IPC_M_USBDIAG_TEST_IN, &answer); 69 70 errno_t rc = async_data_write_start(exch, params, 71 sizeof(usbdiag_test_params_t)); 72 if (rc != EOK) { 73 async_exchange_end(exch); 74 async_forget(req); 75 return rc; 76 } 77 78 rc = async_data_read_start(exch, results, 79 sizeof(usbdiag_test_results_t)); 76 80 if (rc != EOK) { 77 81 async_exchange_end(exch); … … 88 92 } 89 93 90 errno_t usbdiag_test_out(async_exch_t *exch, const usbdiag_test_params_t *params, usbdiag_test_results_t *results) 94 errno_t usbdiag_test_out(async_exch_t *exch, 95 const usbdiag_test_params_t *params, usbdiag_test_results_t *results) 91 96 { 92 97 if (!exch) … … 94 99 95 100 ipc_call_t answer; 96 aid_t req = async_send_1(exch, DEV_IFACE_ID(USBDIAG_DEV_IFACE), IPC_M_USBDIAG_TEST_OUT, &answer); 97 98 errno_t rc = async_data_write_start(exch, params, sizeof(usbdiag_test_params_t)); 99 if (rc != EOK) { 100 async_exchange_end(exch); 101 async_forget(req); 102 return rc; 103 } 104 105 rc = async_data_read_start(exch, results, sizeof(usbdiag_test_results_t)); 101 aid_t req = async_send_1(exch, DEV_IFACE_ID(USBDIAG_DEV_IFACE), 102 IPC_M_USBDIAG_TEST_OUT, &answer); 103 104 errno_t rc = async_data_write_start(exch, params, 105 sizeof(usbdiag_test_params_t)); 106 if (rc != EOK) { 107 async_exchange_end(exch); 108 async_forget(req); 109 return rc; 110 } 111 112 rc = async_data_read_start(exch, results, 113 sizeof(usbdiag_test_results_t)); 106 114 if (rc != EOK) { 107 115 async_exchange_end(exch); … … 118 126 } 119 127 120 static void remote_usbdiag_test_in(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *); 121 static void remote_usbdiag_test_out(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *); 128 static void remote_usbdiag_test_in(ddf_fun_t *, void *, 129 ipc_callid_t, ipc_call_t *); 130 static void remote_usbdiag_test_out(ddf_fun_t *, void *, 131 ipc_callid_t, ipc_call_t *); 122 132 123 133 /** Remote USB diagnostic interface operations. */ … … 133 143 }; 134 144 135 void remote_usbdiag_test_in(ddf_fun_t *fun, void *iface, ipc_callid_t callid, ipc_call_t *call) 145 void remote_usbdiag_test_in(ddf_fun_t *fun, void *iface, 146 ipc_callid_t callid, ipc_call_t *call) 136 147 { 137 148 const usbdiag_iface_t *diag_iface = (usbdiag_iface_t *) iface; … … 158 169 159 170 usbdiag_test_results_t results; 160 const errno_t ret = !diag_iface->test_in ? ENOTSUP : diag_iface->test_in(fun, ¶ms, &results); 171 const errno_t ret = !diag_iface->test_in ? ENOTSUP 172 : diag_iface->test_in(fun, ¶ms, &results); 161 173 162 174 if (ret != EOK) { … … 185 197 } 186 198 187 void remote_usbdiag_test_out(ddf_fun_t *fun, void *iface, ipc_callid_t callid, ipc_call_t *call) 199 void remote_usbdiag_test_out(ddf_fun_t *fun, void *iface, 200 ipc_callid_t callid, ipc_call_t *call) 188 201 { 189 202 const usbdiag_iface_t *diag_iface = (usbdiag_iface_t *) iface; … … 210 223 211 224 usbdiag_test_results_t results; 212 const errno_t ret = !diag_iface->test_out ? ENOTSUP : diag_iface->test_out(fun, ¶ms, &results); 225 const errno_t ret = !diag_iface->test_out ? ENOTSUP 226 : diag_iface->test_out(fun, ¶ms, &results); 213 227 214 228 if (ret != EOK) { -
uspace/lib/drv/include/usb_iface.h
r3692678 rae3a941 46 46 47 47 typedef struct { 48 usb_address_t address; /** Current USB address */ 49 uint8_t depth; /** Depth in the hub hiearchy */ 50 usb_speed_t speed; /** Speed of the device */ 51 devman_handle_t handle; /** Handle to DDF function of the HC driver */ 52 int iface; /** Interface set by multi interface driver, -1 if none */ 48 usb_address_t address; /**< Current USB address */ 49 uint8_t depth; /**< Depth in the hub hiearchy */ 50 usb_speed_t speed; /**< Speed of the device */ 51 devman_handle_t handle; /**< Handle to DDF function of the HC driver */ 52 /** Interface set by multi interface driver, -1 if none */ 53 int iface; 53 54 } usb_device_desc_t; 54 55 -
uspace/lib/drv/include/usbdiag_iface.h
r3692678 rae3a941 63 63 64 64 async_sess_t *usbdiag_connect(devman_handle_t); 65 void usbdiag_disconnect(async_sess_t *);65 void usbdiag_disconnect(async_sess_t *); 66 66 67 errno_t usbdiag_test_in(async_exch_t*, const usbdiag_test_params_t *, usbdiag_test_results_t *); 68 errno_t usbdiag_test_out(async_exch_t*, const usbdiag_test_params_t *, usbdiag_test_results_t *); 67 errno_t usbdiag_test_in(async_exch_t *, 68 const usbdiag_test_params_t *, usbdiag_test_results_t *); 69 errno_t usbdiag_test_out(async_exch_t*, 70 const usbdiag_test_params_t *, usbdiag_test_results_t *); 69 71 70 72 /** USB diagnostic device communication interface. */ 71 73 typedef struct { 72 errno_t (*test_in)(ddf_fun_t*, const usbdiag_test_params_t *, usbdiag_test_results_t *); 73 errno_t (*test_out)(ddf_fun_t*, const usbdiag_test_params_t *, usbdiag_test_results_t *); 74 errno_t (*test_in)(ddf_fun_t *, 75 const usbdiag_test_params_t *, usbdiag_test_results_t *); 76 errno_t (*test_out)(ddf_fun_t*, 77 const usbdiag_test_params_t *, usbdiag_test_results_t *); 74 78 } usbdiag_iface_t; 75 79 -
uspace/lib/usb/include/usb/classes/hub.h
r3692678 rae3a941 178 178 */ 179 179 uint8_t max_current; 180 } __attribute__ 180 } __attribute__((packed)) usb_hub_descriptor_header_t; 181 181 182 182 /** One bit for the device and one bit for every port */ … … 187 187 */ 188 188 typedef enum { 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 189 /** This request resets a value reported in the hub status. */ 190 USB_HUB_REQ_TYPE_CLEAR_HUB_FEATURE = 0x20, 191 /** This request resets a value reported in the port status. */ 192 USB_HUB_REQ_TYPE_CLEAR_PORT_FEATURE = 0x23, 193 /** 194 * This is an optional per-port diagnostic request that returns the bus 195 * state value, as sampled at the last EOF2 point. 196 */ 197 USB_HUB_REQ_TYPE_GET_STATE = 0xA3, 198 /** This request returns the hub descriptor. */ 199 USB_HUB_REQ_TYPE_GET_DESCRIPTOR = 0xA0, 200 /** 201 * This request returns the current hub status and the states that have 202 * changed since the previous acknowledgment. 203 */ 204 USB_HUB_REQ_TYPE_GET_HUB_STATUS = 0xA0, 205 /** 206 * This request returns the current port status and the current value of the 207 * port status change bits. 208 */ 209 USB_HUB_REQ_TYPE_GET_PORT_STATUS = 0xA3, 210 /** This request overwrites the hub descriptor. */ 211 USB_HUB_REQ_TYPE_SET_DESCRIPTOR = 0x20, 212 /** This request sets a value reported in the hub status. */ 213 USB_HUB_REQ_TYPE_SET_HUB_FEATURE = 0x20, 214 /** 215 * This request sets the value that the hub uses to determine the index 216 * into the Route String Index for the hub. 217 */ 218 USB_HUB_REQ_TYPE_SET_HUB_DEPTH = 0x20, 219 /** This request sets a value reported in the port status. */ 220 USB_HUB_REQ_TYPE_SET_PORT_FEATURE = 0x23, 221 221 } usb_hub_bm_request_type_t; 222 222 223 /** @brief hub class request codes*/ 224 /// \TODO these are duplicit to standart descriptors 223 /** 224 * @brief hub class request codes 225 */ 225 226 typedef enum { 226 /** */ 227 USB_HUB_REQUEST_GET_STATUS = 0, 228 /** */ 229 USB_HUB_REQUEST_CLEAR_FEATURE = 1, 230 /** USB 1.0 only */ 231 USB_HUB_REQUEST_GET_STATE = 2, 232 /** */ 233 USB_HUB_REQUEST_SET_FEATURE = 3, 234 /** */ 235 USB_HUB_REQUEST_GET_DESCRIPTOR = 6, 236 /** */ 237 USB_HUB_REQUEST_SET_DESCRIPTOR = 7, 238 /** */ 239 USB_HUB_REQUEST_CLEAR_TT_BUFFER = 8, 240 /** */ 241 USB_HUB_REQUEST_RESET_TT = 9, 242 /** */ 243 USB_HUB_GET_TT_STATE = 10, 244 /** */ 245 USB_HUB_STOP_TT = 11, 246 /** USB 3+ only */ 247 USB_HUB_REQUEST_SET_HUB_DEPTH = 12, 227 USB_HUB_REQUEST_GET_STATUS = 0, 228 USB_HUB_REQUEST_CLEAR_FEATURE = 1, 229 /** USB 1.0 only */ 230 USB_HUB_REQUEST_GET_STATE = 2, 231 USB_HUB_REQUEST_SET_FEATURE = 3, 232 USB_HUB_REQUEST_GET_DESCRIPTOR = 6, 233 USB_HUB_REQUEST_SET_DESCRIPTOR = 7, 234 USB_HUB_REQUEST_CLEAR_TT_BUFFER = 8, 235 USB_HUB_REQUEST_RESET_TT = 9, 236 USB_HUB_GET_TT_STATE = 10, 237 USB_HUB_STOP_TT = 11, 238 /** USB 3+ only */ 239 USB_HUB_REQUEST_SET_HUB_DEPTH = 12, 248 240 } usb_hub_request_t; 249 241 -
uspace/lib/usb/include/usb/descriptor.h
r3692678 rae3a941 101 101 /** Number of possible configurations. */ 102 102 uint8_t configuration_count; 103 } __attribute__ 103 } __attribute__((packed)) usb_standard_device_descriptor_t; 104 104 105 105 /** USB device qualifier decriptor is basically a cut down version of the device … … 129 129 uint8_t configuration_count; 130 130 uint8_t reserved; 131 } __attribute__ 131 } __attribute__((packed)) usb_standard_device_qualifier_descriptor_t; 132 132 133 133 /** Standard USB configuration descriptor. … … 156 156 */ 157 157 uint8_t max_power; 158 } __attribute__ 158 } __attribute__((packed)) usb_standard_configuration_descriptor_t; 159 159 160 160 /** USB Other Speed Configuration descriptor shows values that would change … … 191 191 /** String descriptor describing this interface. */ 192 192 uint8_t str_interface; 193 } __attribute__ 193 } __attribute__((packed)) usb_standard_interface_descriptor_t; 194 194 195 195 /** Standard USB endpoint descriptor. … … 223 223 */ 224 224 uint8_t poll_interval; 225 } __attribute__ 225 } __attribute__((packed)) usb_standard_endpoint_descriptor_t; 226 226 227 227 /** Superspeed USB endpoint companion descriptor. … … 254 254 */ 255 255 uint16_t bytes_per_interval; 256 } __attribute__ 256 } __attribute__((packed)) usb_superspeed_endpoint_companion_descriptor_t; 257 257 258 258 /** Part of standard USB HID descriptor specifying one class descriptor. … … 265 265 /** Length of class-specific descriptor in bytes. */ 266 266 uint16_t length; 267 } __attribute__ 267 } __attribute__((packed)) usb_standard_hid_class_descriptor_info_t; 268 268 269 269 /** Standard USB HID descriptor. … … 296 296 /** First mandatory class descriptor (Report) info. */ 297 297 usb_standard_hid_class_descriptor_info_t report_desc_info; 298 } __attribute__ 298 } __attribute__((packed)) usb_standard_hid_descriptor_t; 299 299 300 300 #endif -
uspace/lib/usb/include/usb/port.h
r3692678 rae3a941 90 90 91 91 /* And these are to be called from the connected handler. */ 92 int usb_port_condvar_wait_timeout(usb_port_t *port, fibril_condvar_t *, suseconds_t); 92 int usb_port_condvar_wait_timeout(usb_port_t *port, 93 fibril_condvar_t *, suseconds_t); 93 94 94 95 /** -
uspace/lib/usb/include/usb/usb.h
r3692678 rae3a941 54 54 #define uint32_usb2host(n) uint32_t_le2host((n)) 55 55 56 const char * usb_str_transfer_type(usb_transfer_type_tt);57 const char * usb_str_transfer_type_short(usb_transfer_type_tt);56 const char *usb_str_transfer_type(usb_transfer_type_t); 57 const char *usb_str_transfer_type_short(usb_transfer_type_t); 58 58 59 59 const char *usb_str_direction(usb_direction_t); … … 149 149 static inline bool usb_target_same(usb_target_t a, usb_target_t b) 150 150 { 151 return (a.address == b.address) 152 && (a.endpoint == b.endpoint); 151 return (a.address == b.address) && (a.endpoint == b.endpoint); 153 152 } 154 153 … … 167 166 USB_PID_SETUP = _MAKE_PID(3, 1), 168 167 169 USB_PID_DATA0 = _MAKE_PID(0 ,3),170 USB_PID_DATA1 = _MAKE_PID(2 ,3),168 USB_PID_DATA0 = _MAKE_PID(0, 3), 169 USB_PID_DATA1 = _MAKE_PID(2, 3), 171 170 172 USB_PID_ACK = _MAKE_PID(0 ,2),173 USB_PID_NAK = _MAKE_PID(2 ,2),174 USB_PID_STALL = _MAKE_PID(3 ,2),171 USB_PID_ACK = _MAKE_PID(0, 2), 172 USB_PID_NAK = _MAKE_PID(2, 2), 173 USB_PID_STALL = _MAKE_PID(3, 2), 175 174 176 USB_PID_PRE = _MAKE_PID(3 ,0),175 USB_PID_PRE = _MAKE_PID(3, 0), 177 176 /* USB_PID_ = _MAKE_PID( ,), */ 178 177 #undef _MAKE_PID -
uspace/lib/usbdev/include/usb/dev/device.h
r3692678 rae3a941 59 59 60 60 /* DDF parts */ 61 errno_t usb_device_create_ddf(ddf_dev_t *, const usb_endpoint_description_t **, const char **); 61 errno_t usb_device_create_ddf(ddf_dev_t *, 62 const usb_endpoint_description_t **, const char **); 62 63 void usb_device_destroy_ddf(ddf_dev_t *); 63 64 … … 68 69 } 69 70 70 usb_device_t * 71 usb_device_t *usb_device_create(devman_handle_t); 71 72 void usb_device_destroy(usb_device_t *); 72 73 73 const char * 74 const char *usb_device_get_name(usb_device_t *); 74 75 ddf_fun_t *usb_device_ddf_fun_create(usb_device_t *, fun_type_t, const char *); 75 76 76 async_exch_t * 77 async_exch_t *usb_device_bus_exchange_begin(usb_device_t *); 77 78 void usb_device_bus_exchange_end(async_exch_t *); 78 79 … … 95 96 devman_handle_t usb_device_get_devman_handle(const usb_device_t *); 96 97 97 const usb_device_descriptors_t * 98 const usb_device_descriptors_t *usb_device_descriptors(usb_device_t *); 98 99 99 const usb_alternate_interfaces_t * 100 const usb_alternate_interfaces_t *usb_device_get_alternative_ifaces( 100 101 usb_device_t *); 101 102 102 void * 103 void * 103 void *usb_device_data_alloc(usb_device_t *, size_t); 104 void *usb_device_data_get(usb_device_t *); 104 105 105 106 #endif -
uspace/lib/usbdev/include/usb/dev/pipes.h
r3692678 rae3a941 92 92 const usb_standard_endpoint_descriptor_t *descriptor; 93 93 /** Relevant superspeed companion descriptor. */ 94 const usb_superspeed_endpoint_companion_descriptor_t *companion_descriptor; 94 const usb_superspeed_endpoint_companion_descriptor_t 95 *companion_descriptor; 95 96 /** Interface descriptor the endpoint belongs to. */ 96 97 const usb_standard_interface_descriptor_t *interface; … … 105 106 size_t, const uint8_t *, size_t, usb_dev_session_t *); 106 107 107 errno_t usb_pipe_register(usb_pipe_t *, const usb_standard_endpoint_descriptor_t *, const usb_superspeed_endpoint_companion_descriptor_t *); 108 errno_t usb_pipe_register(usb_pipe_t *, 109 const usb_standard_endpoint_descriptor_t *, 110 const usb_superspeed_endpoint_companion_descriptor_t *); 108 111 errno_t usb_pipe_unregister(usb_pipe_t *); 109 112 -
uspace/lib/usbdev/include/usb/dev/poll.h
r3692678 rae3a941 60 60 size_t request_size; 61 61 62 /** Data buffer of at least `request_size`. User is responsible for its allocation. */ 62 /** 63 * Data buffer of at least `request_size`. User is responsible for its 64 * allocation. 65 */ 63 66 uint8_t *buffer; 64 67 … … 75 78 76 79 77 /** Optional parameters - user can customize them, but they are defaulted to 78 * some reasonable values. 80 /** 81 * Optional parameters - user can customize them, but they are 82 * defaulted to some reasonable values. 79 83 */ 80 84 … … 86 90 int debug; 87 91 88 /** Maximum number of consecutive errors before polling termination (default 3). */ 92 /** 93 * Maximum number of consecutive errors before polling termination 94 * (default 3). 95 */ 89 96 size_t max_failures; 90 97 … … 121 128 122 129 123 /** Internal parameters - user is not expected to set them. Messing with them 124 * can result in unexpected behavior if you do not know what you are doing. 130 /** 131 * Internal parameters - user is not expected to set them. Messing with 132 * them can result in unexpected behavior if you do not know what you 133 * are doing. 125 134 */ 126 135 -
uspace/lib/usbdev/src/dp.c
r3692678 rae3a941 127 127 * @retval -1 Invalid input. 128 128 */ 129 static int get_descriptor_type(const usb_dp_parser_data_t *data, const uint8_t *start) 129 static int get_descriptor_type(const usb_dp_parser_data_t *data, 130 const uint8_t *start) 130 131 { 131 132 if (start == NULL) { … … 258 259 int parent_type = get_descriptor_type(data, parent); 259 260 int possible_sibling_type = get_descriptor_type(data, possible_sibling); 260 if (is_nested_descriptor_type(parser, possible_sibling_type, parent_type)) { 261 if (is_nested_descriptor_type(parser, 262 possible_sibling_type, parent_type)) { 261 263 return possible_sibling; 262 264 } else { -
uspace/lib/usbdev/src/pipes.c
r3692678 rae3a941 338 338 * @return Error code. 339 339 */ 340 errno_t usb_pipe_write_dma(usb_pipe_t *pipe, void *base, void * ptr,size_t size)340 errno_t usb_pipe_write_dma(usb_pipe_t *pipe, void *base, void *ptr, size_t size) 341 341 { 342 342 assert(pipe); … … 377 377 /** Initialize USB default control pipe. 378 378 * 379 * This one is special because it must not be registered, it is registered automatically. 379 * This one is special because it must not be registered, it is registered 380 * automatically. 380 381 * 381 382 * @param pipe Endpoint pipe to be initialized. … … 383 384 * @return Error code. 384 385 */ 385 errno_t usb_pipe_initialize_default_control(usb_pipe_t *pipe, usb_dev_session_t *bus_session) 386 errno_t usb_pipe_initialize_default_control(usb_pipe_t *pipe, 387 usb_dev_session_t *bus_session) 386 388 { 387 389 const errno_t ret = usb_pipe_initialize(pipe, bus_session); … … 402 404 * @return Error code. 403 405 */ 404 errno_t usb_pipe_register(usb_pipe_t *pipe, const usb_standard_endpoint_descriptor_t *ep_desc, const usb_superspeed_endpoint_companion_descriptor_t *comp_desc) 406 errno_t usb_pipe_register(usb_pipe_t *pipe, 407 const usb_standard_endpoint_descriptor_t *ep_desc, 408 const usb_superspeed_endpoint_companion_descriptor_t *comp_desc) 405 409 { 406 410 assert(pipe); … … 429 433 #undef COPY 430 434 431 const errno_t ret = usbhc_register_endpoint(exch, &pipe->desc, &descriptors); 435 const errno_t ret = usbhc_register_endpoint(exch, 436 &pipe->desc, &descriptors); 432 437 async_exchange_end(exch); 433 438 return ret; -
uspace/lib/usbhid/src/hidparser.c
r3692678 rae3a941 52 52 int usb_hid_translate_data(usb_hid_report_field_t *item, const uint8_t *data); 53 53 54 uint32_t usb_hid_translate_data_reverse(usb_hid_report_field_t *item, 55 54 uint32_t usb_hid_translate_data_reverse(usb_hid_report_field_t *item, 55 int32_t value); 56 56 57 57 … … 76 76 * 77 77 * @param parser Opaque report parser structure 78 * @param report_id 78 * @param report_id 79 79 * @param type 80 80 * @return Number of items in specified report 81 81 */ 82 size_t usb_hid_report_size(usb_hid_report_t *report, uint8_t report_id, 82 size_t usb_hid_report_size(usb_hid_report_t *report, uint8_t report_id, 83 83 usb_hid_report_type_t type) 84 84 { … … 100 100 * 101 101 * @param parser Opaque report parser structure 102 * @param report_id 102 * @param report_id 103 103 * @param type 104 104 * @return Number of items in specified report 105 105 */ 106 size_t usb_hid_report_byte_size(usb_hid_report_t *report, uint8_t report_id, 106 size_t usb_hid_report_byte_size(usb_hid_report_t *report, uint8_t report_id, 107 107 usb_hid_report_type_t type) 108 108 { … … 117 117 return 0; 118 118 } else { 119 return ((report_des->bit_length + 7) / 8) 119 return ((report_des->bit_length + 7) / 8); 120 120 } 121 121 } … … 129 129 * @param data Data for the report. 130 130 * @return Error code. 131 */ 132 errno_t usb_hid_parse_report(const usb_hid_report_t *report, const uint8_t *data, 131 */ 132 errno_t usb_hid_parse_report(const usb_hid_report_t *report, const uint8_t *data, 133 133 size_t size, uint8_t *report_id) 134 134 { 135 135 usb_hid_report_description_t *report_des; 136 136 usb_hid_report_type_t type = USB_HID_REPORT_TYPE_INPUT; 137 137 138 138 if (report == NULL) { 139 139 return EINVAL; … … 146 146 } 147 147 148 report_des = usb_hid_report_find_description(report, *report_id, 148 report_des = usb_hid_report_find_description(report, *report_id, 149 149 type); 150 150 … … 158 158 159 159 if (USB_HID_ITEM_FLAG_CONSTANT(item->item_flags) == 0) { 160 160 161 161 if (USB_HID_ITEM_FLAG_VARIABLE(item->item_flags) == 0) { 162 162 /* array */ 163 item->value = 164 165 163 item->value = 164 usb_hid_translate_data(item, data); 165 166 166 item->usage = USB_HID_EXTENDED_USAGE( 167 167 item->usages[item->value - 168 168 item->physical_minimum]); 169 169 170 item->usage_page = 170 item->usage_page = 171 171 USB_HID_EXTENDED_USAGE_PAGE( 172 172 item->usages[item->value - … … 174 174 175 175 usb_hid_report_set_last_item( 176 item->collection_path, 177 USB_HID_TAG_CLASS_GLOBAL, 176 item->collection_path, 177 USB_HID_TAG_CLASS_GLOBAL, 178 178 item->usage_page); 179 179 180 180 usb_hid_report_set_last_item( 181 item->collection_path, 181 item->collection_path, 182 182 USB_HID_TAG_CLASS_LOCAL, item->usage); 183 183 } else { 184 184 /* variable item */ 185 item->value = usb_hid_translate_data(item, 185 item->value = usb_hid_translate_data(item, 186 186 data); 187 187 } 188 188 } 189 189 } 190 190 191 191 return EOK; 192 192 } … … 214 214 int resolution; 215 215 if (item->physical_maximum == item->physical_minimum) { 216 217 } else { 218 219 ((item->physical_maximum - item->physical_minimum) *220 (usb_pow(10, (item->unit_exponent))));216 resolution = 1; 217 } else { 218 resolution = (item->logical_maximum - item->logical_minimum) / 219 ((item->physical_maximum - item->physical_minimum) * 220 (usb_pow(10, (item->unit_exponent)))); 221 221 } 222 222 … … 255 255 } 256 256 257 return (int) (((value - item->logical_minimum) / resolution) + 257 return (int) (((value - item->logical_minimum) / resolution) + 258 258 item->physical_minimum); 259 259 } … … 262 262 /* OUTPUT API */ 263 263 264 /** 264 /** 265 265 * Allocates output report buffer for output report 266 266 * … … 270 270 * @return Returns allocated output buffer for specified output 271 271 */ 272 uint8_t *usb_hid_report_output(usb_hid_report_t *report, size_t *size, 272 uint8_t *usb_hid_report_output(usb_hid_report_t *report, size_t *size, 273 273 uint8_t report_id) 274 274 { … … 322 322 * @return Error code 323 323 */ 324 errno_t usb_hid_report_output_translate(usb_hid_report_t *report, 324 errno_t usb_hid_report_output_translate(usb_hid_report_t *report, 325 325 uint8_t report_id, uint8_t *buffer, size_t size) 326 326 { … … 329 329 int length; 330 330 int32_t tmp_value; 331 331 332 332 if (report == NULL) { 333 333 return EINVAL; … … 339 339 340 340 usb_hid_report_description_t *report_des; 341 report_des = usb_hid_report_find_description(report, report_id, 341 report_des = usb_hid_report_find_description(report, report_id, 342 342 USB_HID_REPORT_TYPE_OUTPUT); 343 343 344 344 if (report_des == NULL) { 345 345 return EINVAL; … … 348 348 list_foreach(report_des->report_items, ritems_link, 349 349 usb_hid_report_field_t, report_item) { 350 value = usb_hid_translate_data_reverse(report_item, 350 value = usb_hid_translate_data_reverse(report_item, 351 351 report_item->value); 352 352 353 353 offset = report_des->bit_length - report_item->offset - 1; 354 354 length = report_item->size; 355 355 356 356 usb_log_debug("\ttranslated value: %x", value); 357 357 358 358 if ((offset / 8) == ((offset + length - 1) / 8)) { 359 if (((size_t) (offset / 8) >= size) || 359 if (((size_t) (offset / 8) >= size) || 360 360 ((size_t) (offset + length - 1) / 8) >= size) { 361 361 break; // TODO ErrorCode … … 364 364 value = value << shift; 365 365 value = value & (((1 << length) - 1) << shift); 366 366 367 367 uint8_t mask = 0; 368 368 mask = 0xff - (((1 << length) - 1) << shift); … … 376 376 if (i == (offset / 8)) { 377 377 tmp_value = value; 378 tmp_value = tmp_value & 378 tmp_value = tmp_value & 379 379 ((1 << (8 - (offset % 8))) - 1); 380 380 381 381 tmp_value = tmp_value << (offset % 8); 382 382 383 383 mask = ~(((1 << (8 - (offset % 8))) - 1) 384 384 << (offset % 8)); 385 385 386 buffer[i] = (buffer[i] & mask) | 386 buffer[i] = (buffer[i] & mask) | 387 387 tmp_value; 388 388 } else if (i == ((offset + length - 1) / 8)) { 389 390 value = value >> (length - 389 390 value = value >> (length - 391 391 ((offset + length) % 8)); 392 392 393 value = value & ((1 << (length - 393 value = value & ((1 << (length - 394 394 ((offset + length) % 8))) - 1); 395 396 mask = (1 << (length - 395 396 mask = (1 << (length - 397 397 ((offset + length) % 8))) - 1; 398 398 … … 407 407 report_item->value = 0; 408 408 } 409 409 410 410 return EOK; 411 411 } … … 418 418 * @return ranslated value 419 419 */ 420 uint32_t usb_hid_translate_data_reverse(usb_hid_report_field_t *item, 420 uint32_t usb_hid_translate_data_reverse(usb_hid_report_field_t *item, 421 421 int value) 422 422 { … … 430 430 if ((item->physical_minimum == 0) && (item->physical_maximum == 0)) { 431 431 item->physical_minimum = item->logical_minimum; 432 item->physical_maximum = item->logical_maximum; 433 } 434 432 item->physical_maximum = item->logical_maximum; 433 } 434 435 435 /* variable item */ 436 436 if (item->physical_maximum == item->physical_minimum) { 437 438 } else { 439 440 ((item->physical_maximum - item->physical_minimum) *441 (usb_pow(10, (item->unit_exponent))));442 } 443 444 ret = ((value - item->physical_minimum) * resolution) + 437 resolution = 1; 438 } else { 439 resolution = (item->logical_maximum - item->logical_minimum) / 440 ((item->physical_maximum - item->physical_minimum) * 441 (usb_pow(10, (item->unit_exponent)))); 442 } 443 444 ret = ((value - item->physical_minimum) * resolution) + 445 445 item->logical_minimum; 446 446 447 447 usb_log_debug("\tvalue(%x), resolution(%x), phymin(%x) logmin(%x), " 448 "ret(%x)\n", value, resolution, item->physical_minimum, 448 "ret(%x)\n", value, resolution, item->physical_minimum, 449 449 item->logical_minimum, ret); 450 450 451 451 if ((item->logical_minimum < 0) || (item->logical_maximum < 0)) { 452 452 return USB_HID_INT32_TO_UINT32(ret, item->size); … … 467 467 { 468 468 usb_hid_report_item_t *new_report_item; 469 469 470 470 if (!(new_report_item = malloc(sizeof(usb_hid_report_item_t)))) { 471 471 return NULL; 472 } 472 } 473 473 memcpy(new_report_item,item, sizeof(usb_hid_report_item_t)); 474 474 link_initialize(&(new_report_item->link)); … … 485 485 * @param field Current field. If NULL is given, the first one in the report 486 486 * is returned. Otherwise the next one i nthe list is returned. 487 * @param path Usage path specifying which fields wa are interested in. 487 * @param path Usage path specifying which fields wa are interested in. 488 488 * @param flags Flags defining mode of usage paths comparison 489 489 * @param type Type of report we search. … … 491 491 * @retval Pointer to the founded report structure when founded 492 492 */ 493 usb_hid_report_field_t *usb_hid_report_get_sibling(usb_hid_report_t *report, 494 usb_hid_report_field_t *field, usb_hid_report_path_t *path, int flags, 493 usb_hid_report_field_t *usb_hid_report_get_sibling(usb_hid_report_t *report, 494 usb_hid_report_field_t *field, usb_hid_report_path_t *path, int flags, 495 495 usb_hid_report_type_t type) 496 496 { 497 usb_hid_report_description_t *report_des = 497 usb_hid_report_description_t *report_des = 498 498 usb_hid_report_find_description(report, path->report_id, type); 499 499 500 500 link_t *field_it; 501 501 502 502 if (report_des == NULL) { 503 503 return NULL; … … 511 511 512 512 while (field_it != &report_des->report_items.head) { 513 field = list_get_instance(field_it, usb_hid_report_field_t, 513 field = list_get_instance(field_it, usb_hid_report_field_t, 514 514 ritems_link); 515 515 … … 553 553 usb_hid_report_description_t *report_des; 554 554 link_t *report_it; 555 555 556 556 if (report_id > 0) { 557 report_des = usb_hid_report_find_description(report, report_id, 557 report_des = usb_hid_report_find_description(report, report_id, 558 558 type); 559 559 if (report_des == NULL) { … … 561 561 } else { 562 562 report_it = report_des->reports_link.next; 563 } 563 } 564 564 } else { 565 565 report_it = report->reports.head.next; … … 567 567 568 568 while (report_it != &report->reports.head) { 569 report_des = list_get_instance(report_it, 569 report_des = list_get_instance(report_it, 570 570 usb_hid_report_description_t, reports_link); 571 571 … … 594 594 return; 595 595 } 596 596 597 597 report_item->usages_count = 0; 598 598 memset(report_item->usages, 0, USB_HID_MAX_USAGES); 599 599 600 600 report_item->extended_usage_page = 0; 601 601 report_item->usage_minimum = 0; -
uspace/lib/usbhid/src/hidpath.c
r3692678 rae3a941 73 73 * @return Error code 74 74 */ 75 errno_t usb_hid_report_path_append_item(usb_hid_report_path_t *usage_path, 76 77 { 78 usb_hid_report_usage_path_t *item 79 =malloc(sizeof(usb_hid_report_usage_path_t));75 errno_t usb_hid_report_path_append_item(usb_hid_report_path_t *usage_path, 76 int32_t usage_page, int32_t usage) 77 { 78 usb_hid_report_usage_path_t *item = 79 malloc(sizeof(usb_hid_report_usage_path_t)); 80 80 81 81 if (item == NULL) { … … 87 87 item->usage_page = usage_page; 88 88 item->flags = 0; 89 89 90 90 list_append (&item->rpath_items_link, &usage_path->items); 91 91 usage_path->depth++; … … 96 96 /** 97 97 * Removes last item from the usage path structure 98 * @param usage_path 98 * @param usage_path 99 99 * @return void 100 100 */ … … 103 103 link_t *item_link; 104 104 usb_hid_report_usage_path_t *item; 105 106 if (!list_empty(&usage_path->items)){105 106 if (!list_empty(&usage_path->items)) { 107 107 item_link = list_last(&usage_path->items); 108 108 item = list_get_instance(item_link, … … 124 124 { 125 125 usb_hid_report_usage_path_t *item; 126 127 if (!list_empty(&usage_path->items)){126 127 if (!list_empty(&usage_path->items)) { 128 128 item = list_get_instance(list_last(&usage_path->items), 129 129 usb_hid_report_usage_path_t, rpath_items_link); 130 130 131 131 memset(item, 0, sizeof(usb_hid_report_usage_path_t)); … … 143 143 * @return void 144 144 */ 145 void usb_hid_report_set_last_item(usb_hid_report_path_t *usage_path, 146 145 void usb_hid_report_set_last_item(usb_hid_report_path_t *usage_path, 146 int32_t tag, int32_t data) 147 147 { 148 148 usb_hid_report_usage_path_t *item; 149 150 if (!list_empty(&usage_path->items)){149 150 if (!list_empty(&usage_path->items)) { 151 151 item = list_get_instance(list_last(&usage_path->items), 152 152 usb_hid_report_usage_path_t, rpath_items_link); 153 153 154 switch(tag) { 155 case USB_HID_TAG_CLASS_GLOBAL: 156 item->usage_page = data; 157 break; 158 case USB_HID_TAG_CLASS_LOCAL: 159 item->usage = data; 160 break; 161 } 162 } 163 164 } 165 166 167 /** 168 * 169 * 170 * 171 * 172 */ 154 switch (tag) { 155 case USB_HID_TAG_CLASS_GLOBAL: 156 item->usage_page = data; 157 break; 158 case USB_HID_TAG_CLASS_LOCAL: 159 item->usage = data; 160 break; 161 } 162 } 163 } 164 173 165 void usb_hid_print_usage_path(usb_hid_report_path_t *path) 174 166 { … … 199 191 usb_hid_report_usage_path_t *report_item; 200 192 usb_hid_report_usage_path_t *path_item; 201 193 202 194 link_t *report_link; 203 195 link_t *path_link; 204 196 205 197 int only_page; 206 198 207 199 if (report_path->report_id != path->report_id) { 208 200 if (path->report_id != 0) { … … 210 202 } 211 203 } 212 204 213 205 // Empty path match all others 214 206 if (path->depth == 0) { 215 207 return 0; 216 208 } 217 209 218 210 if ((only_page = flags & USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY) != 0) { 219 211 flags -= USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY; 220 212 } 221 213 222 214 switch (flags) { 223 215 /* Path is somewhere in report_path */ … … 226 218 return 1; 227 219 } 228 220 229 221 path_link = list_first(&path->items); 230 222 path_item = list_get_instance(path_link, 231 223 usb_hid_report_usage_path_t, rpath_items_link); 232 224 233 225 list_foreach(report_path->items, rpath_items_link, 234 226 usb_hid_report_usage_path_t, report_item) { 235 227 if (USB_HID_SAME_USAGE_PAGE(report_item->usage_page, 236 228 path_item->usage_page)) { 237 229 238 230 if (only_page == 0) { 239 231 if (USB_HID_SAME_USAGE(report_item->usage, … … 245 237 } 246 238 } 247 239 248 240 return 1; 249 241 break; 250 242 251 243 /* The paths must be identical */ 252 244 case USB_HID_PATH_COMPARE_STRICT: … … 255 247 } 256 248 /* Fallthrough */ 257 249 258 250 /* Path is prefix of the report_path */ 259 251 case USB_HID_PATH_COMPARE_BEGIN: 260 252 report_link = report_path->items.head.next; 261 253 path_link = path->items.head.next; 262 254 263 255 while ((report_link != &report_path->items.head) && 264 256 (path_link != &path->items.head)) { 265 257 266 258 report_item = list_get_instance(report_link, 267 259 usb_hid_report_usage_path_t, rpath_items_link); 268 260 269 261 path_item = list_get_instance(path_link, 270 262 usb_hid_report_usage_path_t, rpath_items_link); 271 263 272 264 if (!USB_HID_SAME_USAGE_PAGE(report_item->usage_page, 273 265 path_item->usage_page) || ((only_page == 0) && … … 280 272 } 281 273 } 282 274 283 275 if ((((flags & USB_HID_PATH_COMPARE_BEGIN) != 0) && 284 276 (path_link == &path->items.head)) || … … 290 282 } 291 283 break; 292 284 293 285 /* Path is suffix of report_path */ 294 286 case USB_HID_PATH_COMPARE_END: 295 287 report_link = report_path->items.head.prev; 296 288 path_link = path->items.head.prev; 297 289 298 290 if (list_empty(&path->items)) { 299 291 return 0; 300 292 } 301 293 302 294 while ((report_link != &report_path->items.head) && 303 295 (path_link != &path->items.head)) { 304 296 report_item = list_get_instance(report_link, 305 297 usb_hid_report_usage_path_t, rpath_items_link); 306 298 307 299 path_item = list_get_instance(path_link, 308 300 usb_hid_report_usage_path_t, rpath_items_link); 309 301 310 302 if (!USB_HID_SAME_USAGE_PAGE(report_item->usage_page, 311 303 path_item->usage_page) || ((only_page == 0) && … … 318 310 } 319 311 } 320 312 321 313 if (path_link == &path->items.head) { 322 314 return 0; … … 325 317 } 326 318 break; 327 319 328 320 default: 329 321 return -1; … … 340 332 usb_hid_report_path_t *path; 341 333 path = malloc(sizeof(usb_hid_report_path_t)); 342 if (path == NULL){334 if (path == NULL) { 343 335 return NULL; 344 336 } … … 363 355 if (path == NULL) 364 356 return; 365 while (!list_empty(&path->items)){357 while (!list_empty(&path->items)) { 366 358 usb_hid_report_remove_last_item(path); 367 359 } … … 379 371 */ 380 372 usb_hid_report_path_t *usb_hid_report_path_clone( 381 373 usb_hid_report_path_t *usage_path) 382 374 { 383 375 usb_hid_report_usage_path_t *new_path_item; 384 376 usb_hid_report_path_t *new_usage_path = usb_hid_report_path (); 385 377 386 if (new_usage_path == NULL){378 if (new_usage_path == NULL) { 387 379 return NULL; 388 380 } 389 381 390 382 new_usage_path->report_id = usage_path->report_id; 391 392 if (list_empty(&usage_path->items)){383 384 if (list_empty(&usage_path->items)) { 393 385 return new_usage_path; 394 386 } … … 398 390 399 391 new_path_item = malloc(sizeof(usb_hid_report_usage_path_t)); 400 if (new_path_item == NULL) {392 if (new_path_item == NULL) { 401 393 return NULL; 402 394 } 403 395 404 396 link_initialize(&new_path_item->rpath_items_link); 405 397 new_path_item->usage_page = path_item->usage_page; 406 new_path_item->usage = path_item->usage; 407 new_path_item->flags = path_item->flags; 408 398 new_path_item->usage = path_item->usage; 399 new_path_item->flags = path_item->flags; 400 409 401 list_append(&new_path_item->rpath_items_link, 410 402 &new_usage_path->items); … … 423 415 * @return Error code 424 416 */ 425 errno_t usb_hid_report_path_set_report_id(usb_hid_report_path_t *path, 426 427 { 428 if (path == NULL){417 errno_t usb_hid_report_path_set_report_id(usb_hid_report_path_t *path, 418 uint8_t report_id) 419 { 420 if (path == NULL) { 429 421 return EINVAL; 430 422 } -
uspace/lib/usbhid/src/hidreport.c
r3692678 rae3a941 71 71 const uint8_t *d = 72 72 usb_dp_get_nested_descriptor(&parser, &parser_data, 73 73 usb_device_descriptors(dev)->full_config); 74 74 75 75 /* … … 163 163 164 164 165 errno_t usb_hid_process_report_descriptor(usb_device_t *dev, 165 errno_t usb_hid_process_report_descriptor(usb_device_t *dev, 166 166 usb_hid_report_t *report, uint8_t **report_desc, size_t *report_size) 167 167 { -
uspace/lib/usbhid/src/hidreq.c
r3692678 rae3a941 65 65 return EINVAL; 66 66 } 67 68 if (iface_no < 0) { 69 usb_log_warning("usbhid_req_set_report(): no interface given." 70 "\n"); 71 return EINVAL; 72 } 73 74 /* 75 * No need for checking other parameters, as they are checked in 76 * the called function (usb_control_request_set()). 77 */ 78 79 errno_t rc; 80 67 68 if (iface_no < 0) { 69 usb_log_warning("usbhid_req_set_report(): no interface given." 70 "\n"); 71 return EINVAL; 72 } 73 74 /* 75 * No need for checking other parameters, as they are checked in 76 * the called function (usb_control_request_set()). 77 */ 78 79 errno_t rc; 80 81 81 uint16_t value = 0; 82 82 value |= (type << 8); 83 83 84 84 usb_log_debug("Sending Set Report request to the device."); 85 85 86 86 rc = usb_control_request_set(ctrl_pipe, 87 87 USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE, … … 93 93 return rc; 94 94 } 95 95 96 96 return EOK; 97 97 } … … 115 115 return EINVAL; 116 116 } 117 118 if (iface_no < 0) { 119 usb_log_warning("usbhid_req_set_report(): no interface given." 120 "\n"); 121 return EINVAL; 122 } 123 124 /* 125 * No need for checking other parameters, as they are checked in 126 * the called function (usb_control_request_set()). 127 */ 128 117 118 if (iface_no < 0) { 119 usb_log_warning("usbhid_req_set_report(): no interface given." 120 "\n"); 121 return EINVAL; 122 } 123 124 /* 125 * No need for checking other parameters, as they are checked in 126 * the called function (usb_control_request_set()). 127 */ 128 129 129 errno_t rc; 130 130 131 131 usb_log_debug("Sending Set Protocol request to the device (" 132 132 "protocol: %d, iface: %d).\n", protocol, iface_no); 133 134 rc = usb_control_request_set(ctrl_pipe, 135 USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE, 133 134 rc = usb_control_request_set(ctrl_pipe, 135 USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE, 136 136 USB_HIDREQ_SET_PROTOCOL, protocol, iface_no, NULL, 0); 137 137 … … 141 141 return rc; 142 142 } 143 143 144 144 return EOK; 145 145 } … … 163 163 return EINVAL; 164 164 } 165 166 if (iface_no < 0) { 167 usb_log_warning("usbhid_req_set_report(): no interface given." 168 "\n"); 169 return EINVAL; 170 } 171 172 /* 173 * No need for checking other parameters, as they are checked in 174 * the called function (usb_control_request_set()). 175 */ 176 165 166 if (iface_no < 0) { 167 usb_log_warning("usbhid_req_set_report(): no interface given." 168 "\n"); 169 return EINVAL; 170 } 171 172 /* 173 * No need for checking other parameters, as they are checked in 174 * the called function (usb_control_request_set()). 175 */ 176 177 177 errno_t rc; 178 178 179 179 usb_log_debug("Sending Set Idle request to the device (" 180 180 "duration: %u, iface: %d).\n", duration, iface_no); 181 181 182 182 uint16_t value = duration << 8; 183 183 184 184 rc = usb_control_request_set(ctrl_pipe, 185 185 USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE, … … 191 191 return rc; 192 192 } 193 193 194 194 return EOK; 195 195 } … … 203 203 * @param[in][out] buffer Buffer for the report data. 204 204 * @param[in] buf_size Size of the buffer (in bytes). 205 * @param[out] actual_size Actual size of report received from the device 205 * @param[out] actual_size Actual size of report received from the device 206 206 * (in bytes). 207 207 * … … 210 210 * @return Other value inherited from function usb_control_request_set(). 211 211 */ 212 errno_t usbhid_req_get_report(usb_pipe_t *ctrl_pipe, int iface_no, 213 usb_hid_report_type_t type, uint8_t *buffer, size_t buf_size, 212 errno_t usbhid_req_get_report(usb_pipe_t *ctrl_pipe, int iface_no, 213 usb_hid_report_type_t type, uint8_t *buffer, size_t buf_size, 214 214 size_t *actual_size) 215 215 { … … 218 218 return EINVAL; 219 219 } 220 221 if (iface_no < 0) { 222 usb_log_warning("usbhid_req_set_report(): no interface given." 223 "\n"); 224 return EINVAL; 225 } 226 227 /* 228 * No need for checking other parameters, as they are checked in 229 * the called function (usb_control_request_set()). 230 */ 231 220 221 if (iface_no < 0) { 222 usb_log_warning("usbhid_req_set_report(): no interface given." 223 "\n"); 224 return EINVAL; 225 } 226 227 /* 228 * No need for checking other parameters, as they are checked in 229 * the called function (usb_control_request_set()). 230 */ 231 232 232 errno_t rc; 233 233 234 234 uint16_t value = 0; 235 235 value |= (type << 8); 236 236 237 237 usb_log_debug("Sending Get Report request to the device."); 238 239 rc = usb_control_request_get(ctrl_pipe, 240 USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE, 238 239 rc = usb_control_request_get(ctrl_pipe, 240 USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE, 241 241 USB_HIDREQ_GET_REPORT, value, iface_no, buffer, buf_size, 242 242 actual_size); … … 247 247 return rc; 248 248 } 249 249 250 250 return EOK; 251 251 } … … 262 262 * @return Other value inherited from function usb_control_request_set(). 263 263 */ 264 errno_t usbhid_req_get_protocol(usb_pipe_t *ctrl_pipe, int iface_no, 264 errno_t usbhid_req_get_protocol(usb_pipe_t *ctrl_pipe, int iface_no, 265 265 usb_hid_protocol_t *protocol) 266 266 { … … 269 269 return EINVAL; 270 270 } 271 272 if (iface_no < 0) { 273 usb_log_warning("usbhid_req_set_report(): no interface given." 274 "\n"); 275 return EINVAL; 276 } 277 278 /* 279 * No need for checking other parameters, as they are checked in 280 * the called function (usb_control_request_set()). 281 */ 282 283 errno_t rc; 271 272 if (iface_no < 0) { 273 usb_log_warning("usbhid_req_set_report(): no interface given." 274 "\n"); 275 return EINVAL; 276 } 277 278 /* 279 * No need for checking other parameters, as they are checked in 280 * the called function (usb_control_request_set()). 281 */ 282 283 errno_t rc; 284 284 285 285 usb_log_debug("Sending Get Protocol request to the device (" 286 286 "iface: %d).\n", iface_no); 287 287 288 288 uint8_t buffer[1]; 289 289 size_t actual_size = 0; 290 291 rc = usb_control_request_get(ctrl_pipe, 292 USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE, 290 291 rc = usb_control_request_get(ctrl_pipe, 292 USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE, 293 293 USB_HIDREQ_GET_PROTOCOL, 0, iface_no, buffer, 1, &actual_size); 294 294 … … 298 298 return rc; 299 299 } 300 300 301 301 if (actual_size != 1) { 302 302 usb_log_warning("Wrong data size: %zu, expected: 1.", 303 303 actual_size); 304 304 return ELIMIT; 305 305 } 306 306 307 307 *protocol = buffer[0]; 308 308 309 309 return EOK; 310 310 } … … 320 320 * @retval EOK if successful. 321 321 * @retval EINVAL if no HID device is given. 322 * @return Other value inherited from one of functions 322 * @return Other value inherited from one of functions 323 323 * usb_pipe_start_session(), usb_pipe_end_session(), 324 324 * usb_control_request_set(). 325 325 */ 326 errno_t usbhid_req_get_idle(usb_pipe_t *ctrl_pipe, int iface_no, uint8_t *duration) 327 { 328 if (ctrl_pipe == NULL) { 329 usb_log_warning("usbhid_req_set_report(): no pipe given."); 330 return EINVAL; 331 } 332 333 if (iface_no < 0) { 334 usb_log_warning("usbhid_req_set_report(): no interface given." 335 "\n"); 336 return EINVAL; 337 } 338 339 /* 340 * No need for checking other parameters, as they are checked in 341 * the called function (usb_control_request_set()). 342 */ 343 326 errno_t usbhid_req_get_idle(usb_pipe_t *ctrl_pipe, int iface_no, 327 uint8_t *duration) 328 { 329 if (ctrl_pipe == NULL) { 330 usb_log_warning("usbhid_req_set_report(): no pipe given."); 331 return EINVAL; 332 } 333 334 if (iface_no < 0) { 335 usb_log_warning("usbhid_req_set_report(): no interface given." 336 "\n"); 337 return EINVAL; 338 } 339 340 /* 341 * No need for checking other parameters, as they are checked in 342 * the called function (usb_control_request_set()). 343 */ 344 344 345 errno_t rc; 345 346 346 347 usb_log_debug("Sending Get Idle request to the device (" 347 348 "iface: %d).\n", iface_no); 348 349 349 350 uint16_t value = 0; 350 351 uint8_t buffer[1]; 351 352 size_t actual_size = 0; 352 353 rc = usb_control_request_get(ctrl_pipe, 354 USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE, 355 USB_HIDREQ_GET_IDLE, value, iface_no, buffer, 1, 353 354 rc = usb_control_request_get(ctrl_pipe, 355 USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE, 356 USB_HIDREQ_GET_IDLE, value, iface_no, buffer, 1, 356 357 &actual_size); 357 358 … … 361 362 return rc; 362 363 } 363 364 364 365 if (actual_size != 1) { 365 366 usb_log_warning("Wrong data size: %zu, expected: 1.", 366 367 actual_size); 367 368 return ELIMIT; 368 369 } 369 370 370 371 *duration = buffer[0]; 371 372 372 373 return EOK; 373 374 } -
uspace/lib/usbhost/include/usb/host/bus.h
r3692678 rae3a941 111 111 int (*device_online)(device_t *); /**< Optional */ 112 112 void (*device_offline)(device_t *); /**< Optional */ 113 endpoint_t *(*endpoint_create)(device_t *, const usb_endpoint_descriptors_t *); 113 endpoint_t *(*endpoint_create)(device_t *, 114 const usb_endpoint_descriptors_t *); 114 115 115 116 /* Operations on endpoint */ -
uspace/lib/usbhost/include/usb/host/endpoint.h
r3692678 rae3a941 102 102 103 103 /* Policies for transfer buffers */ 104 dma_policy_t transfer_buffer_policy; /**< A hint for optimal performance. */ 105 dma_policy_t required_transfer_buffer_policy; /**< Enforced by the library. */ 104 /** A hint for optimal performance. */ 105 dma_policy_t transfer_buffer_policy; 106 /** Enforced by the library. */ 107 dma_policy_t required_transfer_buffer_policy; 106 108 107 109 /** … … 114 116 } endpoint_t; 115 117 116 extern void endpoint_init(endpoint_t *, device_t *, const usb_endpoint_descriptors_t *); 118 extern void endpoint_init(endpoint_t *, device_t *, 119 const usb_endpoint_descriptors_t *); 117 120 118 121 extern void endpoint_add_ref(endpoint_t *); -
uspace/lib/usbhost/include/usb/host/hcd.h
r3692678 rae3a941 78 78 79 79 /** Generate IRQ code to handle interrupts. */ 80 int (*irq_code_gen)(irq_code_t *, hc_device_t *, const hw_res_list_parsed_t *, int *); 80 int (*irq_code_gen)(irq_code_t *, hc_device_t *, 81 const hw_res_list_parsed_t *, int *); 81 82 82 83 /** Claim device from BIOS. */ … … 100 101 101 102 /* Drivers should call this before leaving hc_add */ 102 static inline void hc_device_setup(hc_device_t *hcd, bus_t *bus) { 103 static inline void hc_device_setup(hc_device_t *hcd, bus_t *bus) 104 { 103 105 hcd->bus = bus; 104 106 } -
uspace/lib/usbhost/include/usb/host/usb2_bus.h
r3692678 rae3a941 61 61 } usb2_bus_helper_t; 62 62 63 extern void usb2_bus_helper_init(usb2_bus_helper_t *, const bandwidth_accounting_t *); 63 extern void usb2_bus_helper_init(usb2_bus_helper_t *, 64 const bandwidth_accounting_t *); 64 65 65 66 extern int usb2_bus_device_enumerate(usb2_bus_helper_t *, device_t *); -
uspace/lib/usbhost/src/bandwidth.c
r3692678 rae3a941 73 73 * transaction, but I did not find text in USB spec to confirm this */ 74 74 /* NOTE: All data packets will be considered to be max_packet_size */ 75 switch (ep->device->speed) 76 { 75 switch (ep->device->speed) { 77 76 case USB_SPEED_LOW: 78 77 assert(type == USB_TRANSFER_INTERRUPT); … … 143 142 case USB_SPEED_LOW: 144 143 if (ep->direction == USB_DIRECTION_IN) 145 return 64060 + (2 * hub_ls_setup) + (677 * base_time) + host_delay; 144 return 64060 + (2 * hub_ls_setup) + 145 (677 * base_time) + host_delay; 146 146 else 147 return 64107 + (2 * hub_ls_setup) + (667 * base_time) + host_delay; 147 return 64107 + (2 * hub_ls_setup) + 148 (667 * base_time) + host_delay; 148 149 149 150 case USB_SPEED_FULL: -
uspace/lib/usbhost/src/hcd.c
r3692678 rae3a941 155 155 * @return Negative error code. 156 156 */ 157 static errno_t hcd_ddf_setup_interrupts(hc_device_t *hcd, const hw_res_list_parsed_t *hw_res) 157 static errno_t hcd_ddf_setup_interrupts(hc_device_t *hcd, 158 const hw_res_list_parsed_t *hw_res) 158 159 { 159 160 assert(hcd); 160 irq_code_t irq_code = { 0};161 irq_code_t irq_code = { 0 }; 161 162 162 163 if (!hc_driver->irq_code_gen) … … 174 175 /* Register handler to avoid interrupt lockup */ 175 176 int irq_cap; 176 ret = register_interrupt_handler(hcd->ddf_dev, irq, irq_handler, &irq_code, &irq_cap); 177 ret = register_interrupt_handler(hcd->ddf_dev, irq, irq_handler, 178 &irq_code, &irq_cap); 177 179 irq_code_clean(&irq_code); 178 180 if (ret != EOK) { … … 212 214 213 215 if (!hc_driver->hc_add) { 214 usb_log_error("Driver '%s' does not support adding devices.", hc_driver->name); 216 usb_log_error("Driver '%s' does not support adding devices.", 217 hc_driver->name); 215 218 return ENOTSUP; 216 219 } … … 292 295 293 296 usb_log_info("Controlling new `%s' device `%s'.", 294 hc_driver->name, ddf_dev_get_name(device));297 hc_driver->name, ddf_dev_get_name(device)); 295 298 return EOK; 296 299 -
uspace/lib/usbvirt/src/ipc_hc.c
r3692678 rae3a941 77 77 } 78 78 79 errno_t rc = async_data_write_start(exch, setup_buffer, setup_buffer_size); 79 errno_t rc = async_data_write_start(exch, setup_buffer, 80 setup_buffer_size); 80 81 if (rc != EOK) { 81 82 async_exchange_end(exch); … … 85 86 86 87 ipc_call_t data_request_call; 87 aid_t data_request = async_data_read(exch, data_buffer, data_buffer_size,88 &data_request_call);88 aid_t data_request = async_data_read(exch, data_buffer, 89 data_buffer_size, &data_request_call); 89 90 90 91 async_exchange_end(exch); … … 150 151 } 151 152 152 errno_t rc = async_data_write_start(exch, setup_buffer, setup_buffer_size); 153 errno_t rc = async_data_write_start(exch, setup_buffer, 154 setup_buffer_size); 153 155 if (rc != EOK) { 154 156 async_exchange_end(exch); … … 158 160 159 161 if (data_buffer_size > 0) { 160 rc = async_data_write_start(exch, data_buffer, data_buffer_size); 162 rc = async_data_write_start(exch, data_buffer, 163 data_buffer_size); 161 164 if (rc != EOK) { 162 165 async_exchange_end(exch); -
uspace/lib/usbvirt/src/transfer.c
r3692678 rae3a941 119 119 * @return Error code. 120 120 */ 121 errno_t usbvirt_control_read(usbvirt_device_t *dev, const void *setup, size_t setup_size, 121 errno_t usbvirt_control_read(usbvirt_device_t *dev, 122 const void *setup, size_t setup_size, 122 123 void *data, size_t data_size, size_t *data_size_sent) 123 124 {
Note:
See TracChangeset
for help on using the changeset viewer.