Changeset 20eaa82 in mainline for uspace/lib/usbhost/src/bus.c
- Timestamp:
- 2017-10-15T13:44:39Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2770b66
- Parents:
- 867b375
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbhost/src/bus.c
r867b375 r20eaa82 36 36 #include <usb/host/bus.h> 37 37 #include <usb/host/endpoint.h> 38 #include <ddf/driver.h> 38 39 39 40 #include <mem.h> 40 41 #include <errno.h> 42 #include <stdio.h> 41 43 42 44 /** 43 45 * Initializes the bus structure. 44 46 */ 45 void bus_init(bus_t *bus) 46 { 47 void bus_init(bus_t *bus, size_t device_size) 48 { 49 assert(bus); 50 assert(device_size >= sizeof(device_t)); 47 51 memset(bus, 0, sizeof(bus_t)); 48 52 49 53 fibril_mutex_initialize(&bus->guard); 54 bus->device_size = device_size; 55 } 56 57 int device_init(device_t *dev) 58 { 59 memset(dev, 0, sizeof(*dev)); 60 61 link_initialize(&dev->link); 62 list_initialize(&dev->devices); 63 fibril_mutex_initialize(&dev->guard); 64 65 return EOK; 66 } 67 68 int bus_add_ep(bus_t *bus, device_t *device, usb_endpoint_t endpoint, 69 usb_direction_t dir, usb_transfer_type_t type, size_t max_packet_size, 70 unsigned packets, size_t size) 71 { 72 assert(bus); 73 assert(device); 74 75 /* Temporary reference */ 76 endpoint_t *ep = bus_create_endpoint(bus); 77 if (!ep) 78 return ENOMEM; 79 80 ep->target = (usb_target_t) { 81 .address = device->address, 82 .endpoint = endpoint, 83 }; 84 85 ep->device = device; 86 ep->direction = dir; 87 ep->transfer_type = type; 88 ep->max_packet_size = max_packet_size; 89 ep->packets = packets; 90 91 ep->bandwidth = bus_count_bw(ep, size); 92 93 const int err = bus_register_endpoint(bus, ep); 94 95 /* drop Temporary reference */ 96 endpoint_del_ref(ep); 97 98 return err; 99 } 100 101 int bus_remove_ep(bus_t *bus, usb_target_t target, usb_direction_t dir) 102 { 103 assert(bus); 104 endpoint_t *ep = bus_find_endpoint(bus, target, dir); 105 if (!ep) 106 return ENOENT; 107 108 return bus_release_endpoint(bus, ep); 109 } 110 111 int device_set_default_name(device_t *dev) 112 { 113 assert(dev); 114 assert(dev->fun); 115 116 char buf[10] = { 0 }; /* usbxyz-ss */ 117 snprintf(buf, sizeof(buf) - 1, "usb%u-%cs", 118 dev->address, usb_str_speed(dev->speed)[0]); 119 120 return ddf_fun_set_name(dev->fun, buf); 121 } 122 123 int bus_enumerate_device(bus_t *bus, hcd_t *hcd, device_t *dev) 124 { 125 assert(bus); 126 assert(hcd); 127 assert(dev); 128 129 if (!bus->ops.enumerate_device) 130 return ENOTSUP; 131 132 fibril_mutex_lock(&bus->guard); 133 const int r = bus->ops.enumerate_device(bus, hcd, dev); 134 fibril_mutex_unlock(&bus->guard); 135 return r; 136 } 137 138 int bus_remove_device(bus_t *bus, hcd_t *hcd, device_t *dev) 139 { 140 assert(bus); 141 assert(dev); 142 143 if (!bus->ops.remove_device) 144 return ENOTSUP; 145 146 fibril_mutex_lock(&bus->guard); 147 const int r = bus->ops.remove_device(bus, hcd, dev); 148 fibril_mutex_unlock(&bus->guard); 149 return r; 50 150 } 51 151 … … 141 241 } 142 242 143 int bus_get_speed(bus_t *bus, usb_address_t address, usb_speed_t *speed)144 {145 assert(bus);146 assert(speed);147 148 if (!bus->ops.get_speed)149 return ENOTSUP;150 151 fibril_mutex_lock(&bus->guard);152 const int r = bus->ops.get_speed(bus, address, speed);153 fibril_mutex_unlock(&bus->guard);154 return r;155 }156 157 243 int bus_reset_toggle(bus_t *bus, usb_target_t target, bool all) 158 244 {
Note:
See TracChangeset
for help on using the changeset viewer.