123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- /* override default macros from ../port/usb.h */
- #undef dprint
- #undef ddprint
- #undef deprint
- #undef ddeprint
- #define dprint if(ehcidebug)print
- #define ddprint if(ehcidebug>1)print
- #define deprint if(ehcidebug || ep->debug)print
- #define ddeprint if(ehcidebug>1 || ep->debug>1)print
- typedef struct Ctlr Ctlr;
- typedef struct Eopio Eopio;
- typedef struct Isoio Isoio;
- typedef struct Poll Poll;
- typedef struct Qh Qh;
- typedef struct Qtree Qtree;
- #pragma incomplete Ctlr;
- #pragma incomplete Eopio;
- #pragma incomplete Isoio;
- #pragma incomplete Poll;
- #pragma incomplete Qh;
- #pragma incomplete Qtree;
- struct Poll
- {
- Lock;
- Rendez;
- int must;
- int does;
- };
- struct Ctlr
- {
- Rendez; /* for waiting to async advance doorbell */
- Lock; /* for ilock. qh lists and basic ctlr I/O */
- QLock portlck; /* for port resets/enable... (and doorbell) */
- int active; /* in use or not */
- Ecapio* capio; /* Capability i/o regs */
- Eopio* opio; /* Operational i/o regs */
- int nframes; /* 1024, 512, or 256 frames in the list */
- ulong* frames; /* periodic frame list (hw) */
- Qh* qhs; /* async Qh circular list for bulk/ctl */
- Qtree* tree; /* tree of Qhs for the periodic list */
- int ntree; /* number of dummy qhs in tree */
- Qh* intrqhs; /* list of (not dummy) qhs in tree */
- Isoio* iso; /* list of active Iso I/O */
- ulong load;
- ulong isoload;
- int nintr; /* number of interrupts attended */
- int ntdintr; /* number of intrs. with something to do */
- int nqhintr; /* number of async td intrs. */
- int nisointr; /* number of periodic td intrs. */
- int nreqs;
- Poll poll;
- };
- /*
- * Operational registers (hw)
- */
- struct Eopio
- {
- ulong cmd; /* 00 command */
- ulong sts; /* 04 status */
- ulong intr; /* 08 interrupt enable */
- ulong frno; /* 0c frame index */
- ulong seg; /* 10 bits 63:32 of EHCI datastructs (unused) */
- ulong frbase; /* 14 frame list base addr, 4096-byte boundary */
- ulong link; /* 18 link for async list */
- uchar d2c[0x40-0x1c]; /* 1c dummy */
- ulong config; /* 40 1: all ports default-routed to this HC */
- ulong portsc[3]; /* 44 Port status and control, one per port */
- /* defined for omap35 ehci at least */
- uchar _pad0[0x80 - 0x50];
- ulong insn[6]; /* implementation-specific */
- };
- typedef struct Uhh Uhh;
- struct Uhh {
- ulong revision; /* ro */
- uchar _pad0[0x10-0x4];
- ulong sysconfig;
- ulong sysstatus; /* ro */
- uchar _pad1[0x40-0x18];
- ulong hostconfig;
- ulong debug_csr;
- };
- enum {
- /* hostconfig bits */
- P1ulpi_bypass = 1<<0, /* utmi if set; else ulpi */
- };
- extern Ecapio *ehcidebugcapio;
- extern int ehcidebugport;
- extern int ehcidebug;
- void ehcilinkage(Hci *hp);
- void ehcimeminit(Ctlr *ctlr);
- void ehcirun(Ctlr *ctlr, int on);
|