12 #if (__WORDSIZE == 64)
14 APTR
usbGetBuffer(APTR data
, ULONG len
, UWORD dir
);
15 void usbReleaseBuffer(APTR buffer
, APTR data
, ULONG len
, UWORD dir
);
19 /* On 32-bit systems we don't need mirroring */
21 #define usbGetBuffer(data, len, dir) ({ (void)(len); (void)(dir); (data);})
22 #define usbReleaseBuffer(buffer, data, len, dir) do { (void)(buffer); (void)(data); (void)(len); (void)(dir); } while (0)
26 struct Unit
*Open_Unit(struct IOUsbHWReq
*ioreq
, LONG unitnr
, struct PCIDevice
*base
);
27 void Close_Unit(struct PCIDevice
*base
, struct PCIUnit
*unit
, struct IOUsbHWReq
*ioreq
);
29 void SureCause(struct PCIDevice
*base
, struct Interrupt
*interrupt
);
30 BOOL
uhwOpenTimer(struct PCIUnit
*unit
, struct PCIDevice
*base
);
31 void uhwDelayMS(ULONG milli
, struct PCIUnit
*unit
);
32 void uhwCheckSpecialCtrlTransfers(struct PCIController
*hc
, struct IOUsbHWReq
*ioreq
);
33 void uhwCheckRootHubChanges(struct PCIUnit
*unit
);
35 WORD
cmdReset(struct IOUsbHWReq
*ioreq
, struct PCIUnit
*unit
, struct PCIDevice
*base
);
36 WORD
cmdUsbReset(struct IOUsbHWReq
*ioreq
, struct PCIUnit
*unit
, struct PCIDevice
*base
);
37 WORD
cmdUsbResume(struct IOUsbHWReq
*ioreq
, struct PCIUnit
*unit
, struct PCIDevice
*base
);
38 WORD
cmdUsbSuspend(struct IOUsbHWReq
*ioreq
, struct PCIUnit
*unit
, struct PCIDevice
*base
);
39 WORD
cmdUsbOper(struct IOUsbHWReq
*ioreq
, struct PCIUnit
*unit
, struct PCIDevice
*base
);
41 WORD
cmdQueryDevice(struct IOUsbHWReq
*ioreq
, struct PCIUnit
*unit
, struct PCIDevice
*base
);
43 WORD
cmdControlXFer(struct IOUsbHWReq
*ioreq
, struct PCIUnit
*unit
, struct PCIDevice
*base
);
44 WORD
cmdBulkXFer(struct IOUsbHWReq
*ioreq
, struct PCIUnit
*unit
, struct PCIDevice
*base
);
45 WORD
cmdIntXFer(struct IOUsbHWReq
*ioreq
, struct PCIUnit
*unit
, struct PCIDevice
*base
);
46 WORD
cmdIsoXFer(struct IOUsbHWReq
*ioreq
, struct PCIUnit
*unit
, struct PCIDevice
*base
);
48 WORD
cmdFlush(struct IOUsbHWReq
*ioreq
, struct PCIUnit
*unit
, struct PCIDevice
*base
);
50 WORD
cmdNSDeviceQuery(struct IOStdReq
*ioreq
, struct PCIUnit
*unit
, struct PCIDevice
*base
);
52 BOOL
cmdAbortIO(struct IOUsbHWReq
*ioreq
, struct PCIDevice
*base
);
54 void TermIO(struct IOUsbHWReq
*ioreq
, struct PCIDevice
*base
);
56 AROS_INTP(uhwNakTimeoutInt
);
58 BOOL
pciInit(struct PCIDevice
*hd
);
59 void pciExpunge(struct PCIDevice
*hd
);
60 BOOL
pciAllocUnit(struct PCIUnit
*hu
);
61 void pciFreeUnit(struct PCIUnit
*hu
);
62 APTR
pciGetPhysical(struct PCIController
*hc
, APTR virtaddr
);
64 /* uhcichip.c, in order of appearance */
65 void uhciFreeQContext(struct PCIController
*hc
, struct UhciQH
*uqh
);
66 void uhciUpdateIntTree(struct PCIController
*hc
);
67 void uhciCheckPortStatusChange(struct PCIController
*hc
);
68 void uhciHandleFinishedTDs(struct PCIController
*hc
);
69 void uhciScheduleCtrlTDs(struct PCIController
*hc
);
70 void uhciScheduleIntTDs(struct PCIController
*hc
);
71 void uhciScheduleBulkTDs(struct PCIController
*hc
);
72 void uhciUpdateFrameCounter(struct PCIController
*hc
);
73 BOOL
uhciInit(struct PCIController
*hc
, struct PCIUnit
*hu
);
74 void uhciFree(struct PCIController
*hc
, struct PCIUnit
*hu
);
76 static inline struct UhciQH
* uhciAllocQH(struct PCIController
*hc
);
77 static inline void uhciFreeQH(struct PCIController
*hc
, struct UhciQH
*uqh
);
78 static inline struct UhciTD
* uhciAllocTD(struct PCIController
*hc
);
79 static inline void uhciFreeTD(struct PCIController
*hc
, struct UhciTD
*utd
);
81 /* ehcichip.c, in order of appearance */
82 void ehciFreeAsyncContext(struct PCIController
*hc
, struct IOUsbHWReq
*ioreq
);
83 void ehciFreePeriodicContext(struct PCIController
*hc
, struct IOUsbHWReq
*ioreq
);
84 void ehciFreeQHandTDs(struct PCIController
*hc
, struct EhciQH
*eqh
);
85 void ehciUpdateIntTree(struct PCIController
*hc
);
86 void ehciHandleFinishedTDs(struct PCIController
*hc
);
87 void ehciScheduleCtrlTDs(struct PCIController
*hc
);
88 void ehciScheduleIntTDs(struct PCIController
*hc
);
89 void ehciScheduleBulkTDs(struct PCIController
*hc
);
90 void ehciUpdateFrameCounter(struct PCIController
*hc
);
91 BOOL
ehciInit(struct PCIController
*hc
, struct PCIUnit
*hu
);
92 void ehciFree(struct PCIController
*hc
, struct PCIUnit
*hu
);
94 static inline struct EhciQH
* ehciAllocQH(struct PCIController
*hc
);
95 static inline void ehciFreeQH(struct PCIController
*hc
, struct EhciQH
*eqh
);
96 static inline struct EhciTD
* ehciAllocTD(struct PCIController
*hc
);
97 static inline void ehciFreeTD(struct PCIController
*hc
, struct EhciTD
*etd
);
99 UBYTE
PCIXReadConfigByte(struct PCIController
*hc
, UBYTE offset
);
100 UWORD
PCIXReadConfigWord(struct PCIController
*hc
, UBYTE offset
);
101 ULONG
PCIXReadConfigLong(struct PCIController
*hc
, UBYTE offset
);
102 void PCIXWriteConfigByte(struct PCIController
*hc
, ULONG offset
, UBYTE value
);
103 void PCIXWriteConfigWord(struct PCIController
*hc
, ULONG offset
, UWORD value
);
104 void PCIXWriteConfigLong(struct PCIController
*hc
, ULONG offset
, ULONG value
);
105 BOOL
PCIXAddInterrupt(struct PCIController
*hc
, struct Interrupt
*interrupt
);
107 struct my_NSDeviceQueryResult
109 ULONG DevQueryFormat
; /* this is type 0 */
110 ULONG SizeAvailable
; /* bytes available */
111 UWORD DeviceType
; /* what the device does */
112 UWORD DeviceSubType
; /* depends on the main type */
113 const UWORD
*SupportedCommands
; /* 0 terminated list of cmd's */
116 /* /// "uhciAllocQH()" */
117 static inline struct UhciQH
* uhciAllocQH(struct PCIController
*hc
)
119 struct UhciQH
*uqh
= hc
->hc_UhciQHPool
;
124 KPRINTF(20, ("Out of QHs!\n"));
128 hc
->hc_UhciQHPool
= (struct UhciQH
*) uqh
->uqh_Succ
;
130 uqh
->uqh_SetupBuffer
= NULL
;
131 uqh
->uqh_DataBuffer
= NULL
;
136 /* /// "uhciFreeQH()" */
137 static inline void uhciFreeQH(struct PCIController
*hc
, struct UhciQH
*uqh
)
139 uqh
->uqh_Succ
= (struct UhciXX
*) hc
->hc_UhciQHPool
;
140 hc
->hc_UhciQHPool
= uqh
;
144 /* /// "uhciAllocTD()" */
145 static inline struct UhciTD
* uhciAllocTD(struct PCIController
*hc
)
147 struct UhciTD
*utd
= hc
->hc_UhciTDPool
;
152 KPRINTF(20, ("Out of TDs!\n"));
156 hc
->hc_UhciTDPool
= (struct UhciTD
*) utd
->utd_Succ
;
161 /* /// "uhciFreeTD()" */
162 static inline void uhciFreeTD(struct PCIController
*hc
, struct UhciTD
*utd
)
164 utd
->utd_Succ
= (struct UhciXX
*) hc
->hc_UhciTDPool
;
165 hc
->hc_UhciTDPool
= utd
;
169 /* /// "ehciAllocQH()" */
170 static inline struct EhciQH
* ehciAllocQH(struct PCIController
*hc
)
172 struct EhciQH
*eqh
= hc
->hc_EhciQHPool
;
177 KPRINTF(20, ("Out of QHs!\n"));
181 hc
->hc_EhciQHPool
= (struct EhciQH
*) eqh
->eqh_Succ
;
186 /* /// "ehciFreeQH()" */
187 static inline void ehciFreeQH(struct PCIController
*hc
, struct EhciQH
*eqh
)
189 eqh
->eqh_Succ
= hc
->hc_EhciQHPool
;
190 hc
->hc_EhciQHPool
= eqh
;
194 /* /// "ehciAllocTD()" */
195 static inline struct EhciTD
* ehciAllocTD(struct PCIController
*hc
)
197 struct EhciTD
*etd
= hc
->hc_EhciTDPool
;
202 KPRINTF(20, ("Out of TDs!\n"));
206 hc
->hc_EhciTDPool
= (struct EhciTD
*) etd
->etd_Succ
;
211 /* /// "ehciFreeTD()" */
212 static inline void ehciFreeTD(struct PCIController
*hc
, struct EhciTD
*etd
)
214 etd
->etd_Succ
= hc
->hc_EhciTDPool
;
215 hc
->hc_EhciTDPool
= etd
;
219 #endif /* UHWCMD_H */