Rev 1616 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1029 | serge | 1 | |
2 | |||
1616 | serge | 3 | #include |
1600 | serge | 4 | #include |
5 | #include |
||
1616 | serge | 6 | #include |
1875 | serge | 7 | #include "usb.h" |
1600 | serge | 8 | |
1029 | serge | 9 | int __stdcall srv_usb(ioctl_t *io); |
10 | |||
11 | bool init_hc(hc_t *hc); |
||
12 | |||
1600 | serge | 13 | static slab_t qh_slab; |
1029 | serge | 14 | |
15 | LIST_HEAD( hc_list ); |
||
16 | |||
1600 | serge | 17 | LIST_HEAD( rq_list ); |
18 | |||
19 | u32_t drvEntry(int action, char *cmdline) |
||
1029 | serge | 20 | |
1600 | serge | 21 | u32_t retval; |
1029 | serge | 22 | hc_t *hc; |
23 | udev_t *dev; |
||
24 | |||
25 | int i; |
||
26 | |||
27 | if(action != 1) |
||
28 | |||
29 | |||
30 | if(!dbg_open("/rd/1/drivers/usb.log")) |
||
31 | |||
32 | printf("Can't open /rd/1/drivers/usb.log\nExit\n"); |
||
33 | return 0; |
||
34 | } |
||
35 | |||
36 | if( !FindUSBControllers() ) { |
||
37 | |||
1600 | serge | 38 | return 0; |
1029 | serge | 39 | }; |
40 | |||
41 | hcd_buffer_create(); |
||
42 | |||
1875 | serge | 43 | qh_slab.available = 256; |
1029 | serge | 44 | |
1875 | serge | 45 | qh_slab.nextavail = (addr_t)qh_slab.start; |
46 | qh_slab.dma = GetPgAddr(qh_slab.start); |
||
47 | |||
48 | qh_t *p; |
||
1029 | serge | 49 | |
1875 | serge | 50 | |
51 | for (i = 0, p = (qh_t*)qh_slab.start, dma = qh_slab.dma; |
||
1029 | serge | 52 | |
1875 | serge | 53 | { |
54 | p->qlink = (addr_t)(p+1); |
||
55 | p->qelem = 1; |
||
56 | p->dma = dma; |
||
57 | p->r1 = 0; |
||
58 | }; |
||
59 | |||
60 | hc = (hc_t*)hc_list.next; |
||
61 | |||
1029 | serge | 62 | while( &hc->list != &hc_list) |
63 | |||
1600 | serge | 64 | hc_t *tmp = hc; |
1029 | serge | 65 | hc = (hc_t*)hc->list.next; |
1616 | serge | 66 | |
1600 | serge | 67 | if( !init_hc(tmp)) |
1029 | serge | 68 | |
1616 | serge | 69 | }; |
70 | |||
71 | dbgprintf("\n"); |
||
72 | |||
1029 | serge | 73 | dev = (udev_t*)newdev_list.next; |
74 | |||
75 | { |
||
1600 | serge | 76 | udev_t *tmp = dev; |
1029 | serge | 77 | dev = (udev_t*)dev->list.next; |
78 | |||
1600 | serge | 79 | if(tmp->id != 0) |
1029 | serge | 80 | |
81 | } |
||
82 | |||
83 | while(1) |
||
84 | |||
85 | udev_t *dev; |
||
86 | request_t *rq; |
||
87 | kevent_t event; |
||
88 | u32_t handle; |
||
1613 | serge | 89 | |
90 | event.code = 0; |
||
1029 | serge | 91 | |
1613 | serge | 92 | |
93 | handle = GetEvent(&event); |
||
1029 | serge | 94 | |
1613 | serge | 95 | // dbgprintf("event handle 0x%0x code 0x%0x\n", |
1029 | serge | 96 | |
1613 | serge | 97 | |
98 | if(event.code != 0xFF000001) |
||
1029 | serge | 99 | |
1613 | serge | 100 | |
101 | rq = (request_t*)event.data[0]; |
||
1605 | serge | 102 | |
1613 | serge | 103 | // dbgprintf("rq = 0x%0x\n", rq); |
1029 | serge | 104 | |
1613 | serge | 105 | rq->handler(rq->dev, rq); |
1029 | serge | 106 | |
1613 | serge | 107 | |
1029 | serge | 108 | retval = RegService("USB", srv_usb); |
109 | |||
110 | |||
111 | return retval; |
||
112 | |||
113 | |||
114 | |||
115 | |||
116 | |||
117 | #define SRV_GETVERSION 0 |
||
118 | |||
119 | |||
120 | |||
121 | |||
122 | u32_t *inp; |
||
123 | u32_t *outp; |
||
124 | |||
125 | inp = io->input; |
||
126 | |||
127 | |||
128 | switch(io->io_code) |
||
129 | |||
130 | case SRV_GETVERSION: |
||
131 | if(io->out_size==4) |
||
132 | { |
||
133 | *outp = API_VERSION; |
||
134 | return 0; |
||
135 | } |
||
136 | break; |
||
137 | |||
138 | |||
139 | |||
140 | |||
141 | }; |
||
142 | return ERR_PARAM; |
||
143 | } |
||
144 | |||
145 | |||
146 | |||
147 | |||
148 | if( qh_slab.available ) |
||
149 | { |
||
150 | qh_t *qh; |
||
151 | |||
152 | qh_slab.available--; |
||
153 | |||
154 | qh_slab.nextavail = qh->qlink; |
||
155 | return qh; |
||
156 | } |
||
157 | return NULL; |
||
158 | }; |
||
159 | |||
160 | static void free_qh(qh_t *qh) |
||
161 | |||
162 | qh->qlink = qh_slab.nextavail; |
||
163 | qh_slab.nextavail = (addr_t)qh; |
||
164 | qh_slab.available++; |
||
165 | }; |
||
166 | |||
167 | |||
168 | |||
169 | |||
170 | #include "hcd.inc" |
||
171 | #include "hid.inc"> |
||
172 |