Revision 007fd62f
b/hw/bt-hid.c | ||
---|---|---|
323 | 323 |
break; |
324 | 324 |
} |
325 | 325 |
s->proto = parameter; |
326 |
s->usbdev->info->handle_control(s->usbdev, SET_PROTOCOL, s->proto, 0, 0, |
|
326 |
s->usbdev->info->handle_control(s->usbdev, NULL, SET_PROTOCOL, s->proto, 0, 0,
|
|
327 | 327 |
NULL); |
328 | 328 |
ret = BT_HS_SUCCESSFUL; |
329 | 329 |
break; |
... | ... | |
333 | 333 |
ret = BT_HS_ERR_INVALID_PARAMETER; |
334 | 334 |
break; |
335 | 335 |
} |
336 |
s->usbdev->info->handle_control(s->usbdev, GET_IDLE, 0, 0, 1, |
|
336 |
s->usbdev->info->handle_control(s->usbdev, NULL, GET_IDLE, 0, 0, 1,
|
|
337 | 337 |
s->control->sdu_out(s->control, 1)); |
338 | 338 |
s->control->sdu_submit(s->control); |
339 | 339 |
break; |
... | ... | |
346 | 346 |
|
347 | 347 |
/* We don't need to know about the Idle Rate here really, |
348 | 348 |
* so just pass it on to the device. */ |
349 |
ret = s->usbdev->info->handle_control(s->usbdev, |
|
349 |
ret = s->usbdev->info->handle_control(s->usbdev, NULL,
|
|
350 | 350 |
SET_IDLE, data[1], 0, 0, NULL) ? |
351 | 351 |
BT_HS_SUCCESSFUL : BT_HS_ERR_INVALID_PARAMETER; |
352 | 352 |
/* XXX: Does this generate a handshake? */ |
b/hw/usb-bt.c | ||
---|---|---|
372 | 372 |
s->altsetting = 0; |
373 | 373 |
} |
374 | 374 |
|
375 |
static int usb_bt_handle_control(USBDevice *dev, int request, int value,
|
|
376 |
int index, int length, uint8_t *data) |
|
375 |
static int usb_bt_handle_control(USBDevice *dev, USBPacket *p,
|
|
376 |
int request, int value, int index, int length, uint8_t *data)
|
|
377 | 377 |
{ |
378 | 378 |
struct USBBtState *s = (struct USBBtState *) dev->opaque; |
379 | 379 |
int ret; |
380 | 380 |
|
381 |
ret = usb_desc_handle_control(dev, request, value, index, length, data); |
|
381 |
ret = usb_desc_handle_control(dev, p, request, value, index, length, data);
|
|
382 | 382 |
if (ret >= 0) { |
383 | 383 |
switch (request) { |
384 | 384 |
case DeviceRequest | USB_REQ_GET_CONFIGURATION: |
b/hw/usb-ccid.c | ||
---|---|---|
602 | 602 |
ccid_reset(s); |
603 | 603 |
} |
604 | 604 |
|
605 |
static int ccid_handle_control(USBDevice *dev, int request, int value,
|
|
606 |
int index, int length, uint8_t *data)
|
|
605 |
static int ccid_handle_control(USBDevice *dev, USBPacket *p, int request,
|
|
606 |
int value, int index, int length, uint8_t *data)
|
|
607 | 607 |
{ |
608 | 608 |
USBCCIDState *s = DO_UPCAST(USBCCIDState, dev, dev); |
609 | 609 |
int ret = 0; |
b/hw/usb-desc.c | ||
---|---|---|
390 | 390 |
return ret; |
391 | 391 |
} |
392 | 392 |
|
393 |
int usb_desc_handle_control(USBDevice *dev, int request, int value,
|
|
394 |
int index, int length, uint8_t *data)
|
|
393 |
int usb_desc_handle_control(USBDevice *dev, USBPacket *p,
|
|
394 |
int request, int value, int index, int length, uint8_t *data)
|
|
395 | 395 |
{ |
396 | 396 |
const USBDesc *desc = dev->info->usb_desc; |
397 | 397 |
int i, ret = -1; |
b/hw/usb-desc.h | ||
---|---|---|
106 | 106 |
const char *usb_desc_get_string(USBDevice *dev, uint8_t index); |
107 | 107 |
int usb_desc_string(USBDevice *dev, int index, uint8_t *dest, size_t len); |
108 | 108 |
int usb_desc_get_descriptor(USBDevice *dev, int value, uint8_t *dest, size_t len); |
109 |
int usb_desc_handle_control(USBDevice *dev, int request, int value,
|
|
110 |
int index, int length, uint8_t *data);
|
|
109 |
int usb_desc_handle_control(USBDevice *dev, USBPacket *p,
|
|
110 |
int request, int value, int index, int length, uint8_t *data);
|
|
111 | 111 |
|
112 | 112 |
#endif /* QEMU_HW_USB_DESC_H */ |
b/hw/usb-hid.c | ||
---|---|---|
727 | 727 |
s->next_idle_clock = curtime + (get_ticks_per_sec() * s->idle * 4) / 1000; |
728 | 728 |
} |
729 | 729 |
|
730 |
static int usb_hid_handle_control(USBDevice *dev, int request, int value,
|
|
731 |
int index, int length, uint8_t *data)
|
|
730 |
static int usb_hid_handle_control(USBDevice *dev, USBPacket *p,
|
|
731 |
int request, int value, int index, int length, uint8_t *data)
|
|
732 | 732 |
{ |
733 | 733 |
USBHIDState *s = (USBHIDState *)dev; |
734 | 734 |
int ret; |
735 | 735 |
|
736 |
ret = usb_desc_handle_control(dev, request, value, index, length, data); |
|
736 |
ret = usb_desc_handle_control(dev, p, request, value, index, length, data);
|
|
737 | 737 |
if (ret >= 0) { |
738 | 738 |
return ret; |
739 | 739 |
} |
b/hw/usb-hub.c | ||
---|---|---|
285 | 285 |
/* XXX: do it */ |
286 | 286 |
} |
287 | 287 |
|
288 |
static int usb_hub_handle_control(USBDevice *dev, int request, int value,
|
|
289 |
int index, int length, uint8_t *data)
|
|
288 |
static int usb_hub_handle_control(USBDevice *dev, USBPacket *p,
|
|
289 |
int request, int value, int index, int length, uint8_t *data)
|
|
290 | 290 |
{ |
291 | 291 |
USBHubState *s = (USBHubState *)dev; |
292 | 292 |
int ret; |
293 | 293 |
|
294 |
ret = usb_desc_handle_control(dev, request, value, index, length, data); |
|
294 |
ret = usb_desc_handle_control(dev, p, request, value, index, length, data);
|
|
295 | 295 |
if (ret >= 0) { |
296 | 296 |
return ret; |
297 | 297 |
} |
b/hw/usb-msd.c | ||
---|---|---|
272 | 272 |
s->mode = USB_MSDM_CBW; |
273 | 273 |
} |
274 | 274 |
|
275 |
static int usb_msd_handle_control(USBDevice *dev, int request, int value,
|
|
276 |
int index, int length, uint8_t *data)
|
|
275 |
static int usb_msd_handle_control(USBDevice *dev, USBPacket *p,
|
|
276 |
int request, int value, int index, int length, uint8_t *data)
|
|
277 | 277 |
{ |
278 | 278 |
MSDState *s = (MSDState *)dev; |
279 | 279 |
int ret; |
280 | 280 |
|
281 |
ret = usb_desc_handle_control(dev, request, value, index, length, data); |
|
281 |
ret = usb_desc_handle_control(dev, p, request, value, index, length, data);
|
|
282 | 282 |
if (ret >= 0) { |
283 | 283 |
return ret; |
284 | 284 |
} |
b/hw/usb-net.c | ||
---|---|---|
1042 | 1042 |
{ |
1043 | 1043 |
} |
1044 | 1044 |
|
1045 |
static int usb_net_handle_control(USBDevice *dev, int request, int value,
|
|
1046 |
int index, int length, uint8_t *data) |
|
1045 |
static int usb_net_handle_control(USBDevice *dev, USBPacket *p,
|
|
1046 |
int request, int value, int index, int length, uint8_t *data)
|
|
1047 | 1047 |
{ |
1048 | 1048 |
USBNetState *s = (USBNetState *) dev; |
1049 | 1049 |
int ret; |
1050 | 1050 |
|
1051 |
ret = usb_desc_handle_control(dev, request, value, index, length, data); |
|
1051 |
ret = usb_desc_handle_control(dev, p, request, value, index, length, data);
|
|
1052 | 1052 |
if (ret >= 0) { |
1053 | 1053 |
return ret; |
1054 | 1054 |
} |
b/hw/usb-serial.c | ||
---|---|---|
219 | 219 |
return ret; |
220 | 220 |
} |
221 | 221 |
|
222 |
static int usb_serial_handle_control(USBDevice *dev, int request, int value,
|
|
223 |
int index, int length, uint8_t *data)
|
|
222 |
static int usb_serial_handle_control(USBDevice *dev, USBPacket *p,
|
|
223 |
int request, int value, int index, int length, uint8_t *data)
|
|
224 | 224 |
{ |
225 | 225 |
USBSerialState *s = (USBSerialState *)dev; |
226 | 226 |
int ret; |
227 | 227 |
|
228 | 228 |
DPRINTF("got control %x, value %x\n",request, value); |
229 |
ret = usb_desc_handle_control(dev, request, value, index, length, data); |
|
229 |
ret = usb_desc_handle_control(dev, p, request, value, index, length, data);
|
|
230 | 230 |
if (ret >= 0) { |
231 | 231 |
return ret; |
232 | 232 |
} |
b/hw/usb-wacom.c | ||
---|---|---|
250 | 250 |
s->mode = WACOM_MODE_HID; |
251 | 251 |
} |
252 | 252 |
|
253 |
static int usb_wacom_handle_control(USBDevice *dev, int request, int value,
|
|
254 |
int index, int length, uint8_t *data)
|
|
253 |
static int usb_wacom_handle_control(USBDevice *dev, USBPacket *p,
|
|
254 |
int request, int value, int index, int length, uint8_t *data)
|
|
255 | 255 |
{ |
256 | 256 |
USBWacomState *s = (USBWacomState *) dev; |
257 | 257 |
int ret; |
258 | 258 |
|
259 |
ret = usb_desc_handle_control(dev, request, value, index, length, data); |
|
259 |
ret = usb_desc_handle_control(dev, p, request, value, index, length, data);
|
|
260 | 260 |
if (ret >= 0) { |
261 | 261 |
return ret; |
262 | 262 |
} |
b/hw/usb.c | ||
---|---|---|
82 | 82 |
request = (s->setup_buf[0] << 8) | s->setup_buf[1]; |
83 | 83 |
value = (s->setup_buf[3] << 8) | s->setup_buf[2]; |
84 | 84 |
index = (s->setup_buf[5] << 8) | s->setup_buf[4]; |
85 |
|
|
85 |
|
|
86 | 86 |
if (s->setup_buf[0] & USB_DIR_IN) { |
87 |
ret = s->info->handle_control(s, request, value, index,
|
|
87 |
ret = s->info->handle_control(s, p, request, value, index,
|
|
88 | 88 |
s->setup_len, s->data_buf); |
89 | 89 |
if (ret < 0) |
90 | 90 |
return ret; |
... | ... | |
123 | 123 |
switch(s->setup_state) { |
124 | 124 |
case SETUP_STATE_ACK: |
125 | 125 |
if (!(s->setup_buf[0] & USB_DIR_IN)) { |
126 |
s->setup_state = SETUP_STATE_IDLE; |
|
127 |
ret = s->info->handle_control(s, request, value, index, |
|
126 |
ret = s->info->handle_control(s, p, request, value, index, |
|
128 | 127 |
s->setup_len, s->data_buf); |
128 |
if (ret == USB_RET_ASYNC) { |
|
129 |
return USB_RET_ASYNC; |
|
130 |
} |
|
131 |
s->setup_state = SETUP_STATE_IDLE; |
|
129 | 132 |
if (ret > 0) |
130 | 133 |
return 0; |
131 | 134 |
return ret; |
b/hw/usb.h | ||
---|---|---|
214 | 214 |
* |
215 | 215 |
* Returns length or one of the USB_RET_ codes. |
216 | 216 |
*/ |
217 |
int (*handle_control)(USBDevice *dev, int request, int value, |
|
217 |
int (*handle_control)(USBDevice *dev, USBPacket *p, int request, int value,
|
|
218 | 218 |
int index, int length, uint8_t *data); |
219 | 219 |
|
220 | 220 |
/* |
b/usb-bsd.c | ||
---|---|---|
126 | 126 |
* and return appropriate response |
127 | 127 |
*/ |
128 | 128 |
static int usb_host_handle_control(USBDevice *dev, |
129 |
USBPacket *p, |
|
129 | 130 |
int request, |
130 | 131 |
int value, |
131 | 132 |
int index, |
Also available in: Unified diff