File: /usr/src/linux/drivers/usb/uhci.h

1     #ifndef __LINUX_UHCI_H
2     #define __LINUX_UHCI_H
3     
4     #include <linux/list.h>
5     #include <linux/usb.h>
6     
7     /*
8      * Universal Host Controller Interface data structures and defines
9      */
10     
11     /* Command register */
12     #define USBCMD		0
13     #define   USBCMD_RS		0x0001	/* Run/Stop */
14     #define   USBCMD_HCRESET	0x0002	/* Host reset */
15     #define   USBCMD_GRESET		0x0004	/* Global reset */
16     #define   USBCMD_EGSM		0x0008	/* Global Suspend Mode */
17     #define   USBCMD_FGR		0x0010	/* Force Global Resume */
18     #define   USBCMD_SWDBG		0x0020	/* SW Debug mode */
19     #define   USBCMD_CF		0x0040	/* Config Flag (sw only) */
20     #define   USBCMD_MAXP		0x0080	/* Max Packet (0 = 32, 1 = 64) */
21     
22     /* Status register */
23     #define USBSTS		2
24     #define   USBSTS_USBINT		0x0001	/* Interrupt due to IOC */
25     #define   USBSTS_ERROR		0x0002	/* Interrupt due to error */
26     #define   USBSTS_RD		0x0004	/* Resume Detect */
27     #define   USBSTS_HSE		0x0008	/* Host System Error - basically PCI problems */
28     #define   USBSTS_HCPE		0x0010	/* Host Controller Process Error - the scripts were buggy */
29     #define   USBSTS_HCH		0x0020	/* HC Halted */
30     
31     /* Interrupt enable register */
32     #define USBINTR		4
33     #define   USBINTR_TIMEOUT	0x0001	/* Timeout/CRC error enable */
34     #define   USBINTR_RESUME	0x0002	/* Resume interrupt enable */
35     #define   USBINTR_IOC		0x0004	/* Interrupt On Complete enable */
36     #define   USBINTR_SP		0x0008	/* Short packet interrupt enable */
37     
38     #define USBFRNUM	6
39     #define USBFLBASEADD	8
40     #define USBSOF		12
41     
42     /* USB port status and control registers */
43     #define USBPORTSC1	16
44     #define USBPORTSC2	18
45     #define   USBPORTSC_CCS		0x0001	/* Current Connect Status ("device present") */
46     #define   USBPORTSC_CSC		0x0002	/* Connect Status Change */
47     #define   USBPORTSC_PE		0x0004	/* Port Enable */
48     #define   USBPORTSC_PEC		0x0008	/* Port Enable Change */
49     #define   USBPORTSC_LS		0x0030	/* Line Status */
50     #define   USBPORTSC_RD		0x0040	/* Resume Detect */
51     #define   USBPORTSC_LSDA	0x0100	/* Low Speed Device Attached */
52     #define   USBPORTSC_PR		0x0200	/* Port Reset */
53     #define   USBPORTSC_SUSP	0x1000	/* Suspend */
54     
55     /* Legacy support register */
56     #define USBLEGSUP 0xc0
57     #define USBLEGSUP_DEFAULT	0x2000	/* only PIRQ enable set */
58     
59     #define UHCI_NULL_DATA_SIZE	0x7FF	/* for UHCI controller TD */
60     
61     #define UHCI_PTR_BITS		0x000F
62     #define UHCI_PTR_TERM		0x0001
63     #define UHCI_PTR_QH		0x0002
64     #define UHCI_PTR_DEPTH		0x0004
65     
66     #define UHCI_NUMFRAMES		1024	/* in the frame list [array] */
67     #define UHCI_MAX_SOF_NUMBER	2047	/* in an SOF packet */
68     #define CAN_SCHEDULE_FRAMES	1000	/* how far future frames can be scheduled */
69     
70     struct uhci_frame_list {
71     	__u32 frame[UHCI_NUMFRAMES];
72     
73     	void *frame_cpu[UHCI_NUMFRAMES];
74     
75     	dma_addr_t dma_handle;
76     };
77     
78     struct urb_priv;
79     
80     struct uhci_qh {
81     	/* Hardware fields */
82     	__u32 link;			/* Next queue */
83     	__u32 element;			/* Queue element pointer */
84     
85     	/* Software fields */
86     	dma_addr_t dma_handle;
87     
88     	struct usb_device *dev;
89     	struct urb_priv *urbp;
90     
91     	struct list_head list;		/* P: uhci->frame_list_lock */
92     	struct list_head remove_list;	/* P: uhci->remove_list_lock */
93     } __attribute__((aligned(16)));
94     
95     /*
96      * for TD <status>:
97      */
98     #define TD_CTRL_SPD		(1 << 29)	/* Short Packet Detect */
99     #define TD_CTRL_C_ERR_MASK	(3 << 27)	/* Error Counter bits */
100     #define TD_CTRL_C_ERR_SHIFT	27
101     #define TD_CTRL_LS		(1 << 26)	/* Low Speed Device */
102     #define TD_CTRL_IOS		(1 << 25)	/* Isochronous Select */
103     #define TD_CTRL_IOC		(1 << 24)	/* Interrupt on Complete */
104     #define TD_CTRL_ACTIVE		(1 << 23)	/* TD Active */
105     #define TD_CTRL_STALLED		(1 << 22)	/* TD Stalled */
106     #define TD_CTRL_DBUFERR		(1 << 21)	/* Data Buffer Error */
107     #define TD_CTRL_BABBLE		(1 << 20)	/* Babble Detected */
108     #define TD_CTRL_NAK		(1 << 19)	/* NAK Received */
109     #define TD_CTRL_CRCTIMEO	(1 << 18)	/* CRC/Time Out Error */
110     #define TD_CTRL_BITSTUFF	(1 << 17)	/* Bit Stuff Error */
111     #define TD_CTRL_ACTLEN_MASK	0x7FF		/* actual length, encoded as n - 1 */
112     
113     #define TD_CTRL_ANY_ERROR	(TD_CTRL_STALLED | TD_CTRL_DBUFERR | \
114     				 TD_CTRL_BABBLE | TD_CTRL_CRCTIME | TD_CTRL_BITSTUFF)
115     
116     #define uhci_status_bits(ctrl_sts)	(ctrl_sts & 0xFE0000)
117     #define uhci_actual_length(ctrl_sts)	((ctrl_sts + 1) & TD_CTRL_ACTLEN_MASK) /* 1-based */
118     
119     /*
120      * for TD <info>: (a.k.a. Token)
121      */
122     #define TD_TOKEN_TOGGLE		19
123     #define TD_PID			0xFF
124     
125     #define uhci_maxlen(token)	((token) >> 21)
126     #define uhci_expected_length(info) (((info >> 21) + 1) & TD_CTRL_ACTLEN_MASK) /* 1-based */
127     #define uhci_toggle(token)	(((token) >> TD_TOKEN_TOGGLE) & 1)
128     #define uhci_endpoint(token)	(((token) >> 15) & 0xf)
129     #define uhci_devaddr(token)	(((token) >> 8) & 0x7f)
130     #define uhci_devep(token)	(((token) >> 8) & 0x7ff)
131     #define uhci_packetid(token)	((token) & 0xff)
132     #define uhci_packetout(token)	(uhci_packetid(token) != USB_PID_IN)
133     #define uhci_packetin(token)	(uhci_packetid(token) == USB_PID_IN)
134     
135     /*
136      * The documentation says "4 words for hardware, 4 words for software".
137      *
138      * That's silly, the hardware doesn't care. The hardware only cares that
139      * the hardware words are 16-byte aligned, and we can have any amount of
140      * sw space after the TD entry as far as I can tell.
141      *
142      * But let's just go with the documentation, at least for 32-bit machines.
143      * On 64-bit machines we probably want to take advantage of the fact that
144      * hw doesn't really care about the size of the sw-only area.
145      *
146      * Alas, not anymore, we have more than 4 words for software, woops.
147      * Everything still works tho, surprise! -jerdfelt
148      */
149     struct uhci_td {
150     	/* Hardware fields */
151     	__u32 link;
152     	__u32 status;
153     	__u32 info;
154     	__u32 buffer;
155     
156     	/* Software fields */
157     	dma_addr_t dma_handle;
158     
159     	struct usb_device *dev;
160     	struct urb *urb;
161     
162     	struct list_head list;		/* P: urb->lock */
163     
164     	int frame;
165     	struct list_head fl_list;	/* P: frame_list_lock */
166     } __attribute__((aligned(16)));
167     
168     /*
169      * There are various standard queues. We set up several different
170      * queues for each of the three basic queue types: interrupt,
171      * control, and bulk.
172      *
173      *  - There are various different interrupt latencies: ranging from
174      *    every other USB frame (2 ms apart) to every 256 USB frames (ie
175      *    256 ms apart). Make your choice according to how obnoxious you
176      *    want to be on the wire, vs how critical latency is for you.
177      *  - The control list is done every frame.
178      *  - There are 4 bulk lists, so that up to four devices can have a
179      *    bulk list of their own and when run concurrently all four lists
180      *    will be be serviced.
181      *
182      * This is a bit misleading, there are various interrupt latencies, but they
183      * vary a bit, interrupt2 isn't exactly 2ms, it can vary up to 4ms since the
184      * other queues can "override" it. interrupt4 can vary up to 8ms, etc. Minor
185      * problem
186      *
187      * In the case of the root hub, these QH's are just head's of qh's. Don't
188      * be scared, it kinda makes sense. Look at this wonderful picture care of
189      * Linus:
190      *
191      *  generic-  ->  dev1-  ->  generic-  ->  dev1-  ->  control-  ->  bulk- -> ...
192      *   iso-QH      iso-QH       irq-QH      irq-QH        QH           QH
193      *      |           |            |           |           |            |
194      *     End     dev1-iso-TD1     End     dev1-irq-TD1    ...          ... 
195      *                  |
196      *             dev1-iso-TD2
197      *                  |
198      *                ....
199      *
200      * This may vary a bit (the UHCI docs don't explicitly say you can put iso
201      * transfers in QH's and all of their pictures don't have that either) but
202      * other than that, that is what we're doing now
203      *
204      * And now we don't put Iso transfers in QH's, so we don't waste one on it
205      * --jerdfelt
206      *
207      * To keep with Linus' nomenclature, this is called the QH skeleton. These
208      * labels (below) are only signficant to the root hub's QH's
209      */
210     
211     #define UHCI_NUM_SKELTD		10
212     #define skel_int1_td		skeltd[0]
213     #define skel_int2_td		skeltd[1]
214     #define skel_int4_td		skeltd[2]
215     #define skel_int8_td		skeltd[3]
216     #define skel_int16_td		skeltd[4]
217     #define skel_int32_td		skeltd[5]
218     #define skel_int64_td		skeltd[6]
219     #define skel_int128_td		skeltd[7]
220     #define skel_int256_td		skeltd[8]
221     #define skel_term_td		skeltd[9]	/* To work around PIIX UHCI bug */
222     
223     #define UHCI_NUM_SKELQH		4
224     #define skel_ls_control_qh	skelqh[0]
225     #define skel_hs_control_qh	skelqh[1]
226     #define skel_bulk_qh		skelqh[2]
227     #define skel_term_qh		skelqh[3]
228     
229     /*
230      * Search tree for determining where <interval> fits in the
231      * skelqh[] skeleton.
232      *
233      * An interrupt request should be placed into the slowest skelqh[]
234      * which meets the interval/period/frequency requirement.
235      * An interrupt request is allowed to be faster than <interval> but not slower.
236      *
237      * For a given <interval>, this function returns the appropriate/matching
238      * skelqh[] index value.
239      *
240      * NOTE: For UHCI, we don't really need int256_qh since the maximum interval
241      * is 255 ms.  However, we do need an int1_qh since 1 is a valid interval
242      * and we should meet that frequency when requested to do so.
243      * This will require some change(s) to the UHCI skeleton.
244      */
245     static inline int __interval_to_skel(int interval)
246     {
247     	if (interval < 16) {
248     		if (interval < 4) {
249     			if (interval < 2)
250     				return 0;	/* int1 for 0-1 ms */
251     			return 1;		/* int2 for 2-3 ms */
252     		}
253     		if (interval < 8)
254     			return 2;		/* int4 for 4-7 ms */
255     		return 3;			/* int8 for 8-15 ms */
256     	}
257     	if (interval < 64) {
258     		if (interval < 32)
259     			return 4;		/* int16 for 16-31 ms */
260     		return 5;			/* int32 for 32-63 ms */
261     	}
262     	if (interval < 128)
263     		return 6;			/* int64 for 64-127 ms */
264     	return 7;				/* int128 for 128-255 ms (Max.) */
265     }
266     
267     struct virt_root_hub {
268     	struct usb_device *dev;
269     	int devnum;		/* Address of Root Hub endpoint */
270     	struct urb *urb;
271     	void *int_addr;
272     	int send;
273     	int interval;
274     	int numports;
275     	int c_p_r[8];
276     	struct timer_list rh_int_timer;
277     };
278     
279     /*
280      * This describes the full uhci information.
281      *
282      * Note how the "proper" USB information is just
283      * a subset of what the full implementation needs.
284      */
285     struct uhci {
286     	struct pci_dev *dev;
287     
288     	/* procfs */
289     	int num;
290     	struct proc_dir_entry *proc_entry;
291     
292     	/* Grabbed from PCI */
293     	int irq;
294     	unsigned int io_addr;
295     	unsigned int io_size;
296     
297     	struct list_head uhci_list;
298     
299     	struct pci_pool *qh_pool;
300     	struct pci_pool *td_pool;
301     
302     	struct usb_bus *bus;
303     
304     	struct uhci_td *skeltd[UHCI_NUM_SKELTD];	/* Skeleton TD's */
305     	struct uhci_qh *skelqh[UHCI_NUM_SKELQH];	/* Skeleton QH's */
306     
307     	spinlock_t frame_list_lock;
308     	struct uhci_frame_list *fl;		/* Frame list */
309     	int fsbr;				/* Full speed bandwidth reclamation */
310     	int is_suspended;
311     
312     	spinlock_t qh_remove_list_lock;
313     	struct list_head qh_remove_list;
314     
315     	spinlock_t urb_remove_list_lock;
316     	struct list_head urb_remove_list;
317     
318     	spinlock_t urb_list_lock;
319     	struct list_head urb_list;
320     
321     	spinlock_t complete_list_lock;
322     	struct list_head complete_list;
323     
324     	struct virt_root_hub rh;	/* private data of the virtual root hub */
325     };
326     
327     struct urb_priv {
328     	struct urb *urb;
329     	struct usb_device *dev;
330     
331     	dma_addr_t setup_packet_dma_handle;
332     	dma_addr_t transfer_buffer_dma_handle;
333     
334     	struct uhci_qh *qh;		/* QH for this URB */
335     	struct list_head td_list;
336     
337     	int fsbr : 1;			/* URB turned on FSBR */
338     	int fsbr_timeout : 1;		/* URB timed out on FSBR */
339     	int queued : 1;			/* QH was queued (not linked in) */
340     	int short_control_packet : 1;	/* If we get a short packet during */
341     					/*  a control transfer, retrigger */
342     					/*  the status phase */
343     
344     	int status;			/* Final status */
345     
346     	unsigned long inserttime;	/* In jiffies */
347     
348     	struct list_head queue_list;
349     	struct list_head complete_list;
350     };
351     
352     /* -------------------------------------------------------------------------
353        Virtual Root HUB
354        ------------------------------------------------------------------------- */
355     /* destination of request */
356     #define RH_DEVICE		0x00
357     #define RH_INTERFACE		0x01
358     #define RH_ENDPOINT		0x02
359     #define RH_OTHER		0x03
360     
361     #define RH_CLASS		0x20
362     #define RH_VENDOR		0x40
363     
364     /* Requests: bRequest << 8 | bmRequestType */
365     #define RH_GET_STATUS		0x0080
366     #define RH_CLEAR_FEATURE	0x0100
367     #define RH_SET_FEATURE		0x0300
368     #define RH_SET_ADDRESS		0x0500
369     #define RH_GET_DESCRIPTOR	0x0680
370     #define RH_SET_DESCRIPTOR	0x0700
371     #define RH_GET_CONFIGURATION	0x0880
372     #define RH_SET_CONFIGURATION	0x0900
373     #define RH_GET_STATE		0x0280
374     #define RH_GET_INTERFACE	0x0A80
375     #define RH_SET_INTERFACE	0x0B00
376     #define RH_SYNC_FRAME		0x0C80
377     /* Our Vendor Specific Request */
378     #define RH_SET_EP		0x2000
379     
380     /* Hub port features */
381     #define RH_PORT_CONNECTION	0x00
382     #define RH_PORT_ENABLE		0x01
383     #define RH_PORT_SUSPEND		0x02
384     #define RH_PORT_OVER_CURRENT	0x03
385     #define RH_PORT_RESET		0x04
386     #define RH_PORT_POWER		0x08
387     #define RH_PORT_LOW_SPEED	0x09
388     #define RH_C_PORT_CONNECTION	0x10
389     #define RH_C_PORT_ENABLE	0x11
390     #define RH_C_PORT_SUSPEND	0x12
391     #define RH_C_PORT_OVER_CURRENT	0x13
392     #define RH_C_PORT_RESET		0x14
393     
394     /* Hub features */
395     #define RH_C_HUB_LOCAL_POWER	0x00
396     #define RH_C_HUB_OVER_CURRENT	0x01
397     #define RH_DEVICE_REMOTE_WAKEUP	0x00
398     #define RH_ENDPOINT_STALL	0x01
399     
400     /* Our Vendor Specific feature */
401     #define RH_REMOVE_EP		0x00
402     
403     #define RH_ACK			0x01
404     #define RH_REQ_ERR		-1
405     #define RH_NACK			0x00
406     
407     #endif
408     
409