Changeset 1f43c8f in mainline
- Timestamp:
- 2010-11-28T22:14:41Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 78f01ff9, 7972b51
- Parents:
- ba7f671
- Location:
- uspace/lib/usb
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usb/include/usb/hcdhubd.h
rba7f671 r1f43c8f 37 37 38 38 #include <adt/list.h> 39 #include <bool.h> 39 40 #include <driver.h> 40 41 #include <usb/usb.h> … … 175 176 int usb_hc_async_wait_for(usb_handle_t); 176 177 177 int usb_hc_add_child_device(device_t *, const char *, const char * );178 int usb_hc_add_child_device(device_t *, const char *, const char *, bool); 178 179 179 180 #endif -
uspace/lib/usb/src/hcdhubd.c
rba7f671 r1f43c8f 113 113 } 114 114 115 rc = usb_hc_add_child_device(dev->generic, USB_HUB_DEVICE_NAME, id );115 rc = usb_hc_add_child_device(dev->generic, USB_HUB_DEVICE_NAME, id, true); 116 116 if (rc != EOK) { 117 117 free(id); … … 153 153 add_match_id(&child->match_ids, match_id); 154 154 155 printf("%s: adding child device `%s' with match \"%s\"\n", 156 hc_driver->name, child->name, match_id->id); 155 157 rc = child_device_register(child, child_info->parent); 156 printf("%s: adding child device with match \"%s\" (%s)\n", 157 hc_driver->name, match_id->id, str_error(rc)); 158 printf("%s: child device `%s' registration: %s\n", 159 hc_driver->name, child->name, str_error(rc)); 160 158 161 if (rc != EOK) { 159 162 goto failure; … … 175 178 leave: 176 179 free(arg); 177 return rc;180 return EOK; 178 181 } 179 182 … … 182 185 * driven by the same task, the child adding is done in separate fibril. 183 186 * Not optimal, but it works. 187 * Update: not under all circumstances the new fibril is successful either. 188 * Thus the last parameter to let the caller choose. 184 189 * 185 190 * @param parent Parent device. 186 191 * @param name Device name. 187 192 * @param match_id Match id. 193 * @param create_fibril Whether to run the addition in new fibril. 188 194 * @return Error code. 189 195 */ 190 196 int usb_hc_add_child_device(device_t *parent, const char *name, 191 const char *match_id) 192 { 197 const char *match_id, bool create_fibril) 198 { 199 printf("%s: about to add child device `%s' (%s)\n", hc_driver->name, 200 name, match_id); 201 193 202 struct child_device_info *child_info 194 203 = malloc(sizeof(struct child_device_info)); … … 198 207 child_info->match_id = match_id; 199 208 200 fid_t fibril = fibril_create(fibril_add_child_device, child_info); 201 if (!fibril) { 202 return ENOMEM; 203 } 204 fibril_add_ready(fibril); 209 if (create_fibril) { 210 fid_t fibril = fibril_create(fibril_add_child_device, child_info); 211 if (!fibril) { 212 return ENOMEM; 213 } 214 fibril_add_ready(fibril); 215 } else { 216 fibril_add_child_device(child_info); 217 } 205 218 206 219 return EOK; -
uspace/lib/usb/src/hcdrv.c
rba7f671 r1f43c8f 54 54 }; 55 55 56 int usb_add_hc_device(device_t *dev) 57 { 56 static usb_hc_device_t *usb_hc_device_create(device_t *dev) { 58 57 usb_hc_device_t *hc_dev = malloc(sizeof (usb_hc_device_t)); 58 59 59 list_initialize(&hc_dev->link); 60 list_initialize(&hc_dev->hubs); 61 list_initialize(&hc_dev->attached_devices); 60 62 hc_dev->transfer_ops = NULL; 61 63 … … 63 65 dev->ops = &usb_device_ops; 64 66 hc_dev->generic->driver_data = hc_dev; 67 68 return hc_dev; 69 } 70 71 int usb_add_hc_device(device_t *dev) 72 { 73 usb_hc_device_t *hc_dev = usb_hc_device_create(dev); 65 74 66 75 int rc = hc_driver->add_hc(hc_dev); … … 85 94 */ 86 95 printf("%s: trying to add USB HID child device...\n", hc_driver->name); 87 rc = usb_hc_add_child_device(dev, USB_KBD_DEVICE_NAME, "usb&hid" );96 rc = usb_hc_add_child_device(dev, USB_KBD_DEVICE_NAME, "usb&hid", false); 88 97 if (rc != EOK) { 89 98 printf("%s: adding USB HID child failed...\n", hc_driver->name);
Note:
See TracChangeset
for help on using the changeset viewer.