Changeset 434ef65 in mainline
- Timestamp:
- 2011-03-21T16:54:36Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 41ef5b9, ce794342
- Parents:
- 5287502 (diff), 625f1ba (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- uspace
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhub/main.c
r5287502 r434ef65 42 42 #include "usbhub_private.h" 43 43 44 45 usb_endpoint_description_t hub_status_change_endpoint_description = { 44 /** Hub status-change endpoint description. 45 * 46 * For more information see section 11.15.1 of USB 1.1 specification. 47 */ 48 static usb_endpoint_description_t hub_status_change_endpoint_description = { 46 49 .transfer_type = USB_TRANSFER_INTERRUPT, 47 50 .direction = USB_DIRECTION_IN, … … 57 60 }; 58 61 62 static usb_endpoint_description_t *usb_hub_endpoints[] = { 63 &hub_status_change_endpoint_description, 64 NULL 65 }; 66 59 67 static usb_driver_t usb_hub_driver = { 60 .name = "usbhub", 61 .ops = &usb_hub_driver_ops 68 .name = NAME, 69 .ops = &usb_hub_driver_ops, 70 .endpoints = usb_hub_endpoints 62 71 }; 63 72 … … 65 74 int main(int argc, char *argv[]) 66 75 { 76 printf(NAME ": HelenOS USB hub driver.\n"); 77 67 78 usb_log_enable(USB_LOG_LEVEL_DEBUG, NAME); 68 usb_log_info("starting hub driver\n");69 70 79 71 usb_hub_driver.endpoints = (usb_endpoint_description_t**)72 malloc(2 * sizeof(usb_endpoint_description_t*));73 usb_hub_driver.endpoints[0] = &hub_status_change_endpoint_description;74 usb_hub_driver.endpoints[1] = NULL;75 76 80 return usb_driver_main(&usb_hub_driver); 77 81 } -
uspace/drv/usbhub/usbhub.c
r5287502 r434ef65 157 157 static int usb_hub_set_configuration(usb_hub_info_t * hub_info){ 158 158 //device descriptor 159 usb_standard_device_descriptor_t std_descriptor; 160 int opResult = usb_request_get_device_descriptor( 161 &hub_info->usb_device->ctrl_pipe, 162 &std_descriptor); 163 if(opResult!=EOK){ 164 usb_log_error("could not get device descriptor, %d\n",opResult); 165 return opResult; 166 } 159 usb_standard_device_descriptor_t *std_descriptor 160 = &hub_info->usb_device->descriptors.device; 167 161 usb_log_info("hub has %d configurations\n", 168 std_descriptor.configuration_count);169 if(std_descriptor .configuration_count<1){162 std_descriptor->configuration_count); 163 if(std_descriptor->configuration_count<1){ 170 164 usb_log_error("THERE ARE NO CONFIGURATIONS AVAILABLE\n"); 171 165 //shouldn`t I return? 172 } 173 174 /* Retrieve full configuration descriptor. */ 175 uint8_t *descriptors = NULL; 176 size_t descriptors_size = 0; 177 opResult = usb_request_get_full_configuration_descriptor_alloc( 178 &hub_info->usb_device->ctrl_pipe, 0, 179 (void **) &descriptors, &descriptors_size); 180 if (opResult != EOK) { 181 usb_log_error("Could not get configuration descriptor: %s.\n", 182 str_error(opResult)); 183 return opResult; 184 } 166 //definitely 167 return EINVAL; 168 } 169 185 170 usb_standard_configuration_descriptor_t *config_descriptor 186 = (usb_standard_configuration_descriptor_t *) descriptors; 171 = (usb_standard_configuration_descriptor_t *) 172 hub_info->usb_device->descriptors.configuration; 187 173 188 174 /* Set configuration. */ 189 opResult = usb_request_set_configuration(&hub_info->usb_device->ctrl_pipe, 175 int opResult = usb_request_set_configuration( 176 &hub_info->usb_device->ctrl_pipe, 190 177 config_descriptor->configuration_number); 191 178 … … 197 184 usb_log_debug("\tused configuration %d\n", 198 185 config_descriptor->configuration_number); 199 free(descriptors); 186 200 187 return EOK; 201 188 } … … 243 230 244 231 /// \TODO what is this? 245 usb_log_debug(" adding to ddf");232 usb_log_debug("Creating `hub' function.\n"); 246 233 ddf_fun_t *hub_fun = ddf_fun_create(hub_info->usb_device->ddf_dev, 247 234 fun_exposed, "hub"); … … 257 244 fid_t fid = fibril_create(usb_hub_control_loop, hub_info); 258 245 if (fid == 0) { 259 usb_log_error("failed to start monitoring fibril for new hub ");246 usb_log_error("failed to start monitoring fibril for new hub.\n"); 260 247 return ENOMEM; 261 248 } 262 249 fibril_add_ready(fid); 263 usb_log_debug("hub fibril created"); 264 usb_log_debug("has %d ports ",hub_info->port_count); 250 usb_log_debug("Hub fibril created.\n"); 251 252 usb_log_info("Controlling hub `%s' (%d ports).\n", 253 hub_info->usb_device->ddf_dev->name, hub_info->port_count); 265 254 return EOK; 266 255 } … … 533 522 //port reset 534 523 if (usb_port_reset_completed(&status)) { 535 usb_log_info("port reset complete ");524 usb_log_info("port reset complete\n"); 536 525 if (usb_port_enabled(&status)) { 537 526 usb_hub_finalize_add_device(hub, port, usb_port_speed(&status)); -
uspace/drv/usbhub/usbhub.h
r5287502 r434ef65 46 46 #include <usb/pipes.h> 47 47 #include <usb/devdrv.h> 48 49 50 /** Hub status-change endpoint description51 *52 * For more see usb hub specification in 11.15.1 of53 */54 extern usb_endpoint_description_t hub_status_change_endpoint_description;55 56 57 58 /* Hub endpoints. */59 /*typedef struct {60 usb_pipe_t control;61 usb_pipe_t status_change;62 } usb_hub_endpoints_t;63 */64 48 65 49 -
uspace/lib/usb/include/usb/devdrv.h
r5287502 r434ef65 38 38 #include <usb/pipes.h> 39 39 40 /** Descriptors for USB device. */ 41 typedef struct { 42 /** Standard device descriptor. */ 43 usb_standard_device_descriptor_t device; 44 /** Full configuration descriptor of current configuration. */ 45 uint8_t *configuration; 46 size_t configuration_size; 47 } usb_device_descriptors_t; 48 40 49 /** USB device structure. */ 41 50 typedef struct { … … 52 61 */ 53 62 int interface_no; 63 64 /** Some useful descriptors. */ 65 usb_device_descriptors_t descriptors; 66 54 67 /** Generic DDF device backing this one. */ 55 68 ddf_dev_t *ddf_dev; -
uspace/lib/usb/include/usb/usb.h
r5287502 r434ef65 61 61 62 62 const char * usb_str_transfer_type(usb_transfer_type_t t); 63 const char * usb_str_transfer_type_short(usb_transfer_type_t t); 63 64 64 65 /** USB data transfer direction. */ … … 78 79 USB_SPEED_HIGH 79 80 } usb_speed_t; 81 82 const char *usb_str_speed(usb_speed_t); 83 80 84 81 85 /** USB request type target. */ -
uspace/lib/usb/src/devdrv.c
r5287502 r434ef65 137 137 } 138 138 139 void *config_descriptor; 140 size_t config_descriptor_size; 141 rc = usb_request_get_full_configuration_descriptor_alloc( 142 &dev->ctrl_pipe, 0, &config_descriptor, &config_descriptor_size); 143 if (rc != EOK) { 144 usb_log_error("Failed retrieving configuration of `%s': %s.\n", 145 dev->ddf_dev->name, str_error(rc)); 146 goto rollback; 147 } 148 149 rc = usb_pipe_initialize_from_configuration(dev->pipes, 150 pipe_count, config_descriptor, config_descriptor_size, &dev->wire); 139 rc = usb_pipe_initialize_from_configuration(dev->pipes, pipe_count, 140 dev->descriptors.configuration, dev->descriptors.configuration_size, 141 &dev->wire); 151 142 if (rc != EOK) { 152 143 usb_log_error("Failed initializing USB endpoints: %s.\n", … … 237 228 238 229 /* 239 * Initialization of other pipes requires open session on 240 * default control pipe. 230 * For further actions, we need open session on default control pipe. 241 231 */ 242 232 rc = usb_pipe_start_session(&dev->ctrl_pipe); … … 247 237 } 248 238 239 /* Get the device descriptor. */ 240 rc = usb_request_get_device_descriptor(&dev->ctrl_pipe, 241 &dev->descriptors.device); 242 if (rc != EOK) { 243 usb_log_error("Failed to retrieve device descriptor: %s.\n", 244 str_error(rc)); 245 return rc; 246 } 247 248 /* Get the full configuration descriptor. */ 249 rc = usb_request_get_full_configuration_descriptor_alloc( 250 &dev->ctrl_pipe, 0, (void **) &dev->descriptors.configuration, 251 &dev->descriptors.configuration_size); 252 if (rc != EOK) { 253 usb_log_error("Failed retrieving configuration descriptor: %s.\n", 254 dev->ddf_dev->name, str_error(rc)); 255 return rc; 256 } 257 249 258 if (driver->endpoints != NULL) { 250 259 rc = initialize_other_pipes(driver, dev); … … 253 262 /* No checking here. */ 254 263 usb_pipe_end_session(&dev->ctrl_pipe); 264 265 /* Rollback actions. */ 266 if (rc != EOK) { 267 if (dev->descriptors.configuration != NULL) { 268 free(dev->descriptors.configuration); 269 } 270 } 255 271 256 272 return rc; … … 283 299 dev->ddf_dev->driver_data = dev; 284 300 dev->driver_data = NULL; 301 dev->descriptors.configuration = NULL; 285 302 286 303 rc = initialize_pipes(dev); -
uspace/lib/usb/src/host/batch.c
r5287502 r434ef65 107 107 instance->buffer_size); 108 108 109 int err = instance->error; 110 usb_log_debug("Batch(%p) callback IN(type:%d): %s(%d), %zu.\n", 111 instance, instance->transfer_type, str_error(err), err, 112 instance->transfered_size); 109 usb_log_debug("Batch %p done (T%d.%d, %s %s in, %zuB): %s (%d).\n", 110 instance, 111 instance->target.address, instance->target.endpoint, 112 usb_str_speed(instance->speed), 113 usb_str_transfer_type_short(instance->transfer_type), 114 instance->transfered_size, 115 str_error(instance->error), instance->error); 113 116 114 instance->callback_in( 115 instance-> fun, err, instance->transfered_size, instance->arg);117 instance->callback_in(instance->fun, instance->error, 118 instance->transfered_size, instance->arg); 116 119 } 117 120 /*----------------------------------------------------------------------------*/ … … 125 128 assert(instance->callback_out); 126 129 127 int err = instance->error; 128 usb_log_debug("Batch(%p) callback OUT(type:%d): %s(%d).\n", 129 instance, instance->transfer_type, str_error(err), err); 130 usb_log_debug("Batch %p done (T%d.%d, %s %s out): %s (%d).\n", 131 instance, 132 instance->target.address, instance->target.endpoint, 133 usb_str_speed(instance->speed), 134 usb_str_transfer_type_short(instance->transfer_type), 135 str_error(instance->error), instance->error); 136 130 137 instance->callback_out(instance->fun, 131 err, instance->arg);138 instance->error, instance->arg); 132 139 } 133 140 /** -
uspace/lib/usb/src/usb.c
r5287502 r434ef65 36 36 #include <errno.h> 37 37 38 #define ARR_SIZE(arr) (sizeof(arr)/sizeof(arr[0])) 39 40 static const char *str_speed[] = { 41 "low", 42 "full", 43 "high" 44 }; 45 46 static const char *str_transfer_type[] = { 47 "control", 48 "isochronous", 49 "bulk", 50 "interrupt" 51 }; 52 53 static const char *str_transfer_type_short[] = { 54 "ctrl", 55 "iso", 56 "bulk", 57 "intr" 58 }; 38 59 39 60 /** String representation for USB transfer type. … … 42 63 * @return Transfer type as a string (in English). 43 64 */ 44 const char * 65 const char *usb_str_transfer_type(usb_transfer_type_t t) 45 66 { 46 switch (t) { 47 case USB_TRANSFER_ISOCHRONOUS: 48 return "isochronous"; 49 case USB_TRANSFER_INTERRUPT: 50 return "interrupt"; 51 case USB_TRANSFER_CONTROL: 52 return "control"; 53 case USB_TRANSFER_BULK: 54 return "bulk"; 55 default: 56 return "unknown"; 67 if (t >= ARR_SIZE(str_transfer_type)) { 68 return "invalid"; 57 69 } 70 return str_transfer_type[t]; 71 } 72 73 /** String representation for USB transfer type (short version). 74 * 75 * @param t Transfer type. 76 * @return Transfer type as a short string for debugging messages. 77 */ 78 const char *usb_str_transfer_type_short(usb_transfer_type_t t) 79 { 80 if (t >= ARR_SIZE(str_transfer_type_short)) { 81 return "invl"; 82 } 83 return str_transfer_type_short[t]; 84 } 85 86 /** String representation of USB speed. 87 * 88 * @param s The speed. 89 * @return USB speed as a string (in English). 90 */ 91 const char *usb_str_speed(usb_speed_t s) 92 { 93 if (s >= ARR_SIZE(str_speed)) { 94 return "invalid"; 95 } 96 return str_speed[s]; 58 97 } 59 98
Note:
See TracChangeset
for help on using the changeset viewer.