Changes in uspace/drv/uhci-hcd/iface.c [1ae51ae:a7e2f0d] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci-hcd/iface.c
r1ae51ae ra7e2f0d 43 43 #include "utils/device_keeper.h" 44 44 45 /** Reserve default address interface function 46 * 47 * @param[in] fun DDF function that was called. 48 * @param[in] speed Speed to associate with the new default address. 49 * @return Error code. 50 */ 45 51 /*----------------------------------------------------------------------------*/ 46 52 static int reserve_default_address(ddf_fun_t *fun, usb_speed_t speed) … … 54 60 } 55 61 /*----------------------------------------------------------------------------*/ 62 /** Release default address interface function 63 * 64 * @param[in] fun DDF function that was called. 65 * @return Error code. 66 */ 56 67 static int release_default_address(ddf_fun_t *fun) 57 68 { … … 64 75 } 65 76 /*----------------------------------------------------------------------------*/ 77 /** Request address interface function 78 * 79 * @param[in] fun DDF function that was called. 80 * @param[in] speed Speed to associate with the new default address. 81 * @param[out] address Place to write a new address. 82 * @return Error code. 83 */ 66 84 static int request_address(ddf_fun_t *fun, usb_speed_t speed, 67 85 usb_address_t *address) … … 80 98 } 81 99 /*----------------------------------------------------------------------------*/ 100 /** Bind address interface function 101 * 102 * @param[in] fun DDF function that was called. 103 * @param[in] address Address of the device 104 * @param[in] handle Devman handle of the device driver. 105 * @return Error code. 106 */ 82 107 static int bind_address( 83 108 ddf_fun_t *fun, usb_address_t address, devman_handle_t handle) … … 91 116 } 92 117 /*----------------------------------------------------------------------------*/ 118 /** Release address interface function 119 * 120 * @param[in] fun DDF function that was called. 121 * @param[in] address USB address to be released. 122 * @return Error code. 123 */ 93 124 static int release_address(ddf_fun_t *fun, usb_address_t address) 94 125 { … … 101 132 } 102 133 /*----------------------------------------------------------------------------*/ 134 /** Interrupt out transaction interface function 135 * 136 * @param[in] fun DDF function that was called. 137 * @param[in] target USB device to write to. 138 * @param[in] max_packet_size maximum size of data packet the device accepts 139 * @param[in] data Source of data. 140 * @param[in] size Size of data source. 141 * @param[in] callback Function to call on transaction completion 142 * @param[in] arg Additional for callback function. 143 * @return Error code. 144 */ 103 145 static int interrupt_out(ddf_fun_t *fun, usb_target_t target, 104 146 size_t max_packet_size, void *data, size_t size, … … 114 156 115 157 batch_t *batch = batch_get(fun, target, USB_TRANSFER_INTERRUPT, 116 max_packet_size, speed, data, size, NULL, 0, NULL, callback, arg); 158 max_packet_size, speed, data, size, NULL, 0, NULL, callback, arg, 159 &hc->device_manager); 117 160 if (!batch) 118 161 return ENOMEM; … … 121 164 } 122 165 /*----------------------------------------------------------------------------*/ 166 /** Interrupt in transaction interface function 167 * 168 * @param[in] fun DDF function that was called. 169 * @param[in] target USB device to write to. 170 * @param[in] max_packet_size maximum size of data packet the device accepts 171 * @param[out] data Data destination. 172 * @param[in] size Size of data source. 173 * @param[in] callback Function to call on transaction completion 174 * @param[in] arg Additional for callback function. 175 * @return Error code. 176 */ 123 177 static int interrupt_in(ddf_fun_t *fun, usb_target_t target, 124 178 size_t max_packet_size, void *data, size_t size, … … 133 187 134 188 batch_t *batch = batch_get(fun, target, USB_TRANSFER_INTERRUPT, 135 max_packet_size, speed, data, size, NULL, 0, callback, NULL, arg); 189 max_packet_size, speed, data, size, NULL, 0, callback, NULL, arg, 190 &hc->device_manager); 136 191 if (!batch) 137 192 return ENOMEM; … … 140 195 } 141 196 /*----------------------------------------------------------------------------*/ 197 /** Bulk out transaction interface function 198 * 199 * @param[in] fun DDF function that was called. 200 * @param[in] target USB device to write to. 201 * @param[in] max_packet_size maximum size of data packet the device accepts 202 * @param[in] data Source of data. 203 * @param[in] size Size of data source. 204 * @param[in] callback Function to call on transaction completion 205 * @param[in] arg Additional for callback function. 206 * @return Error code. 207 */ 208 static int bulk_out(ddf_fun_t *fun, usb_target_t target, 209 size_t max_packet_size, void *data, size_t size, 210 usbhc_iface_transfer_out_callback_t callback, void *arg) 211 { 212 assert(fun); 213 uhci_t *hc = fun_to_uhci(fun); 214 assert(hc); 215 usb_speed_t speed = device_keeper_speed(&hc->device_manager, target.address); 216 217 usb_log_debug("Bulk OUT %d:%d %zu(%zu).\n", 218 target.address, target.endpoint, size, max_packet_size); 219 220 batch_t *batch = batch_get(fun, target, USB_TRANSFER_BULK, 221 max_packet_size, speed, data, size, NULL, 0, NULL, callback, arg, 222 &hc->device_manager); 223 if (!batch) 224 return ENOMEM; 225 batch_bulk_out(batch); 226 return EOK; 227 } 228 /*----------------------------------------------------------------------------*/ 229 /** Bulk in transaction interface function 230 * 231 * @param[in] fun DDF function that was called. 232 * @param[in] target USB device to write to. 233 * @param[in] max_packet_size maximum size of data packet the device accepts 234 * @param[out] data Data destination. 235 * @param[in] size Size of data source. 236 * @param[in] callback Function to call on transaction completion 237 * @param[in] arg Additional for callback function. 238 * @return Error code. 239 */ 240 static int bulk_in(ddf_fun_t *fun, usb_target_t target, 241 size_t max_packet_size, void *data, size_t size, 242 usbhc_iface_transfer_in_callback_t callback, void *arg) 243 { 244 assert(fun); 245 uhci_t *hc = fun_to_uhci(fun); 246 assert(hc); 247 usb_speed_t speed = device_keeper_speed(&hc->device_manager, target.address); 248 usb_log_debug("Bulk IN %d:%d %zu(%zu).\n", 249 target.address, target.endpoint, size, max_packet_size); 250 251 batch_t *batch = batch_get(fun, target, USB_TRANSFER_BULK, 252 max_packet_size, speed, data, size, NULL, 0, callback, NULL, arg, 253 &hc->device_manager); 254 if (!batch) 255 return ENOMEM; 256 batch_bulk_in(batch); 257 return EOK; 258 } 259 /*----------------------------------------------------------------------------*/ 260 /** Control write transaction interface function 261 * 262 * @param[in] fun DDF function that was called. 263 * @param[in] target USB device to write to. 264 * @param[in] max_packet_size maximum size of data packet the device accepts. 265 * @param[in] setup_data Data to send with SETUP packet. 266 * @param[in] setup_size Size of data to send with SETUP packet (should be 8B). 267 * @param[in] data Source of data. 268 * @param[in] size Size of data source. 269 * @param[in] callback Function to call on transaction completion. 270 * @param[in] arg Additional for callback function. 271 * @return Error code. 272 */ 142 273 static int control_write(ddf_fun_t *fun, usb_target_t target, 143 274 size_t max_packet_size, … … 152 283 target.address, target.endpoint, size, max_packet_size); 153 284 285 if (setup_size != 8) 286 return EINVAL; 287 154 288 batch_t *batch = batch_get(fun, target, USB_TRANSFER_CONTROL, 155 289 max_packet_size, speed, data, size, setup_data, setup_size, 156 NULL, callback, arg); 157 if (!batch) 158 return ENOMEM; 290 NULL, callback, arg, &hc->device_manager); 291 if (!batch) 292 return ENOMEM; 293 device_keeper_reset_if_need(&hc->device_manager, target, setup_data); 159 294 batch_control_write(batch); 160 295 return EOK; 161 296 } 162 297 /*----------------------------------------------------------------------------*/ 298 /** Control read transaction interface function 299 * 300 * @param[in] fun DDF function that was called. 301 * @param[in] target USB device to write to. 302 * @param[in] max_packet_size maximum size of data packet the device accepts. 303 * @param[in] setup_data Data to send with SETUP packet. 304 * @param[in] setup_size Size of data to send with SETUP packet (should be 8B). 305 * @param[out] data Source of data. 306 * @param[in] size Size of data source. 307 * @param[in] callback Function to call on transaction completion. 308 * @param[in] arg Additional for callback function. 309 * @return Error code. 310 */ 163 311 static int control_read(ddf_fun_t *fun, usb_target_t target, 164 312 size_t max_packet_size, … … 175 323 batch_t *batch = batch_get(fun, target, USB_TRANSFER_CONTROL, 176 324 max_packet_size, speed, data, size, setup_data, setup_size, callback, 177 NULL, arg );325 NULL, arg, &hc->device_manager); 178 326 if (!batch) 179 327 return ENOMEM; … … 181 329 return EOK; 182 330 } 183 184 185 331 /*----------------------------------------------------------------------------*/ 186 332 usbhc_iface_t uhci_iface = { … … 194 340 .interrupt_in = interrupt_in, 195 341 342 .bulk_in = bulk_in, 343 .bulk_out = bulk_out, 344 196 345 .control_read = control_read, 197 346 .control_write = control_write,
Note:
See TracChangeset
for help on using the changeset viewer.