Subversion Repositories Kolibri OS

Rev

Rev 1635 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
572 serge 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
 
2434 Serge 53
        mov     ecx, [request]
54
        mov     ebx, [requesttupe]
55
        mov     edx, [value]
56
        mov     esi, [index]
57
        mov     edi, [size]
58
572 serge 59
 
2434 Serge 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
572 serge 65
 
2434 Serge 66
                eax, [data], [size], [timeout]
67
572 serge 68
 
2434 Serge 69
endp
572 serge 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;
2434 Serge 80
        int     length;
81
572 serge 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
 
2434 Serge 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
;   urb->dev = dev;
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
;
115