Rev 1161 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1159 | hidnplayr | 1 | |
2 | { |
||
3 | .fd dd ? |
||
4 | .bk dd ? |
||
5 | .dev dd ? ; pointer to associated device |
||
6 | .pipe dd ? ; pipe information |
||
7 | .status dd ? ; non-ISO status |
||
8 | .transfer_flags dd ? ; URB_SHORT_NOT_OK | ... |
||
9 | .transfer_buffer dd ? ; associated data buffer |
||
10 | .transfer_dma dd ? ; dma addr for transfer_buffer |
||
11 | .transfer_buffer_length dd ? ; data buffer length |
||
12 | .actual_length dd ? ; actual transfer length |
||
13 | .setup_packet dd ? ; setup packet (control only) |
||
14 | .setup_dma dd ? ; dma addr for setup_packet |
||
15 | .start_frame dd ? ; start frame (ISO) |
||
16 | .number_of_packets dd ? ; number of ISO packets |
||
17 | .interval dd ? ; transfer interval |
||
18 | |||
19 | |||
20 | .context dd ? ; context for completion |
||
21 | .complete dd ? ; (in) completion routine |
||
22 | .iso_frame_desc: |
||
23 | } |
||
24 | |||
25 | |||
26 | URB URB |
||
27 | end virtual |
||
28 | |||
29 | |||
30 | |||
31 | { |
||
32 | .request_type db ? |
||
33 | .request db ? |
||
34 | .value dw ? |
||
35 | .index dw ? |
||
36 | .length dw ? |
||
37 | } |
||
38 | |||
39 | |||
40 | REQ REQ |
||
41 | end virtual |
||
42 | |||
43 | |||
44 | proc usb_control_msg stdcall, dev:dword, pipe:dword, request:dword,\ |
||
45 | requesttype:dword, value:dword, index:dword,\ |
||
46 | data:dword, size:dword, timeout:dword |
||
47 | |||
48 | |||
49 | req REQ |
||
50 | endl |
||
51 | |||
52 | |||
53 | mov ecx, [request] |
||
54 | mov ebx, [requesttupe] |
||
55 | mov edx, [value] |
||
56 | mov esi, [index] |
||
57 | mov edi, [size] |
||
58 | |||
59 | |||
60 | mov [eax+REQ.request], cl |
||
61 | mov [eax+REQ.value], dx |
||
62 | mov [eax+REQ.index], si |
||
63 | mov [eax+REQ.length], di |
||
64 | |||
65 | |||
66 | eax, [data], [size], [timeout] |
||
67 | |||
68 | |||
69 | endp |
||
70 | |||
71 | |||
72 | |||
73 | static int usb_internal_control_msg(struct usb_device *usb_dev, |
||
74 | unsigned int pipe, |
||
75 | struct usb_ctrlrequest *cmd, |
||
76 | void *data, int len, int timeout) |
||
77 | { |
||
78 | struct urb *urb; |
||
79 | int retv; |
||
80 | int length; |
||
81 | |||
82 | |||
83 | if (!urb) |
||
84 | return -ENOMEM; |
||
85 | usb_fill_control_urb(urb, usb_dev, pipe, (unsigned char *)cmd, data, |
||
86 | len, usb_api_blocking_completion, NULL); |
||
87 | |||
88 | |||
89 | if (retv < 0) |
||
90 | return retv; |
||
91 | else |
||
92 | return length; |
||
93 | } |
||
94 | |||
95 | |||
96 | |||
97 | struct usb_device *dev, |
||
98 | unsigned int pipe, |
||
99 | unsigned char *setup_packet, |
||
100 | void *transfer_buffer, |
||
101 | int buffer_length, |
||
102 | usb_complete_t complete_fn, |
||
103 | void *context) |
||
104 | { |
||
105 | |||
106 | |||
107 | urb->pipe = pipe; |
||
108 | urb->setup_packet = setup_packet; |
||
109 | urb->transfer_buffer = transfer_buffer; |
||
110 | urb->transfer_buffer_length = buffer_length; |
||
111 | urb->complete = complete_fn; |
||
112 | urb->context = context; |
||
113 | }> |
||
114 |