xref: /plan9/sys/src/9/kw/usbehci.h (revision 5bdeb9a20ca533546de47a1bc407975caf1023f5)
1*84860c5dSDavid du Colombier /* override default macros from ../port/usb.h */
2*84860c5dSDavid du Colombier #undef	dprint
3*84860c5dSDavid du Colombier #undef	ddprint
4*84860c5dSDavid du Colombier #undef	deprint
5*84860c5dSDavid du Colombier #undef	ddeprint
6*84860c5dSDavid du Colombier #define dprint		if(ehcidebug)print
7*84860c5dSDavid du Colombier #define ddprint		if(ehcidebug>1)print
8*84860c5dSDavid du Colombier #define deprint		if(ehcidebug || ep->debug)print
9*84860c5dSDavid du Colombier #define ddeprint	if(ehcidebug>1 || ep->debug>1)print
10*84860c5dSDavid du Colombier 
11*84860c5dSDavid du Colombier typedef struct Ctlr Ctlr;
12154abd99SDavid du Colombier typedef struct Eopio Eopio;
13*84860c5dSDavid du Colombier typedef struct Isoio Isoio;
14*84860c5dSDavid du Colombier typedef struct Poll Poll;
15*84860c5dSDavid du Colombier typedef struct Qh Qh;
16*84860c5dSDavid du Colombier typedef struct Qtree Qtree;
17*84860c5dSDavid du Colombier 
18*84860c5dSDavid du Colombier #pragma incomplete Ctlr;
19*84860c5dSDavid du Colombier #pragma incomplete Ecapio;
20*84860c5dSDavid du Colombier #pragma incomplete Eopio;
21*84860c5dSDavid du Colombier #pragma incomplete Edbgio;
22*84860c5dSDavid du Colombier #pragma incomplete Isoio;
23*84860c5dSDavid du Colombier #pragma incomplete Poll;
24*84860c5dSDavid du Colombier #pragma incomplete Qh;
25*84860c5dSDavid du Colombier #pragma incomplete Qtree;
26154abd99SDavid du Colombier 
27*84860c5dSDavid du Colombier struct Poll
28*84860c5dSDavid du Colombier {
29*84860c5dSDavid du Colombier 	Lock;
30*84860c5dSDavid du Colombier 	Rendez;
31*84860c5dSDavid du Colombier 	int	must;
32*84860c5dSDavid du Colombier 	int	does;
33*84860c5dSDavid du Colombier };
34*84860c5dSDavid du Colombier 
35*84860c5dSDavid du Colombier struct Ctlr
36*84860c5dSDavid du Colombier {
37*84860c5dSDavid du Colombier 	Rendez;			/* for waiting to async advance doorbell */
38*84860c5dSDavid du Colombier 	Lock;			/* for ilock. qh lists and basic ctlr I/O */
39*84860c5dSDavid du Colombier 	QLock	portlck;	/* for port resets/enable... (and doorbell) */
40*84860c5dSDavid du Colombier 	int	active;		/* in use or not */
41*84860c5dSDavid du Colombier 	Ecapio*	capio;		/* Capability i/o regs */
42*84860c5dSDavid du Colombier 	Eopio*	opio;		/* Operational i/o regs */
43*84860c5dSDavid du Colombier 
44*84860c5dSDavid du Colombier 	int	nframes;	/* 1024, 512, or 256 frames in the list */
45*84860c5dSDavid du Colombier 	ulong*	frames;		/* periodic frame list (hw) */
46*84860c5dSDavid du Colombier 	Qh*	qhs;		/* async Qh circular list for bulk/ctl */
47*84860c5dSDavid du Colombier 	Qtree*	tree;		/* tree of Qhs for the periodic list */
48*84860c5dSDavid du Colombier 	int	ntree;		/* number of dummy qhs in tree */
49*84860c5dSDavid du Colombier 	Qh*	intrqhs;		/* list of (not dummy) qhs in tree  */
50*84860c5dSDavid du Colombier 	Isoio*	iso;		/* list of active Iso I/O */
51*84860c5dSDavid du Colombier 	ulong	load;
52*84860c5dSDavid du Colombier 	ulong	isoload;
53*84860c5dSDavid du Colombier 	int	nintr;		/* number of interrupts attended */
54*84860c5dSDavid du Colombier 	int	ntdintr;	/* number of intrs. with something to do */
55*84860c5dSDavid du Colombier 	int	nqhintr;	/* number of async td intrs. */
56*84860c5dSDavid du Colombier 	int	nisointr;	/* number of periodic td intrs. */
57*84860c5dSDavid du Colombier 	int	nreqs;
58*84860c5dSDavid du Colombier 	Poll	poll;
59*84860c5dSDavid du Colombier };
60*84860c5dSDavid du Colombier 
61*84860c5dSDavid du Colombier /*
62154abd99SDavid du Colombier  * Operational registers (hw)
63154abd99SDavid du Colombier  */
64154abd99SDavid du Colombier struct Eopio
65154abd99SDavid du Colombier {
66154abd99SDavid du Colombier 	ulong	cmd;		/* 00 command */
67154abd99SDavid du Colombier 	ulong	sts;		/* 04 status */
68154abd99SDavid du Colombier 	ulong	intr;		/* 08 interrupt enable */
69154abd99SDavid du Colombier 	ulong	frno;		/* 0c frame index */
70154abd99SDavid du Colombier 	ulong	seg;		/* 10 bits 63:32 of EHCI datastructs (unused) */
71154abd99SDavid du Colombier 	ulong	frbase;		/* 14 frame list base addr, 4096-byte boundary */
72154abd99SDavid du Colombier 	ulong	link;		/* 18 link for async list */
73154abd99SDavid du Colombier 	uchar	d2c[0x40-0x1c];	/* 1c dummy */
74154abd99SDavid du Colombier 	ulong	config;		/* 40 1: all ports default-routed to this HC */
75154abd99SDavid du Colombier 	ulong	portsc[1];	/* 44 Port status and control, one per port */
7656713243SDavid du Colombier 
7756713243SDavid du Colombier 	/*
7856713243SDavid du Colombier 	 * these are present on the Kirkwood USB controller.
7956713243SDavid du Colombier 	 * are they standard now?  Marvell doesn't document them publically.
8056713243SDavid du Colombier 	 */
8156713243SDavid du Colombier 	uchar	_pad0[0x64-0x48];
8256713243SDavid du Colombier 	ulong	otgsc;
8356713243SDavid du Colombier 	ulong	usbmode;
8456713243SDavid du Colombier 	ulong	epsetupsts;
8556713243SDavid du Colombier 	ulong	epprime;
8656713243SDavid du Colombier 	ulong	epflush;
8756713243SDavid du Colombier 	ulong	epsts;
8856713243SDavid du Colombier 	ulong	epcompl;
89ab6ce076SDavid du Colombier 	ulong	epctl[6];
90ab6ce076SDavid du Colombier 
91ab6ce076SDavid du Colombier 	/* freescale registers */
92ab6ce076SDavid du Colombier 	uchar	_pad1[0x2c0-0x98];
93ab6ce076SDavid du Colombier 	ulong	snoop1;
94ab6ce076SDavid du Colombier 	ulong	snoop2;
95ab6ce076SDavid du Colombier 	ulong	agecntthresh;
96ab6ce076SDavid du Colombier 	ulong	prictl;		/* priority control */
97ab6ce076SDavid du Colombier 	ulong	sictl;		/* system interface control */
98ab6ce076SDavid du Colombier 
99ab6ce076SDavid du Colombier 	uchar	_pad2[0x3c0-0x2d4];
100ab6ce076SDavid du Colombier 	ulong	ctl;
101154abd99SDavid du Colombier };
102154abd99SDavid du Colombier 
103*84860c5dSDavid du Colombier extern int ehcidebug;
104154abd99SDavid du Colombier 
105*84860c5dSDavid du Colombier void	ehcilinkage(Hci *hp);
106*84860c5dSDavid du Colombier void	ehcimeminit(Ctlr *ctlr);
107*84860c5dSDavid du Colombier void	ehcirun(Ctlr *ctlr, int on);
108