Subversion Repositories Kolibri OS

Rev

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

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