Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

863 lines
21 KiB

  1. /*++
  2. Copyright (c) 1999 Microsoft Corporation
  3. Module Name:
  4. usbohci.h
  5. Abstract:
  6. Environment:
  7. Kernel & user mode
  8. Revision History:
  9. 5-10-96 : created
  10. --*/
  11. #ifndef __OHCI_H__
  12. #define __OHCI_H__
  13. #define OHCI_COMMON_BUFFER_SIZE (sizeof(HCCA_BLOCK)+\
  14. NO_ED_LISTS*sizeof(HW_ENDPOINT_DESCRIPTOR) +\
  15. (17*2)*sizeof(HCD_ENDPOINT_DESCRIPTOR))
  16. /*
  17. Registry Keys
  18. */
  19. // Software Branch PDO Keys
  20. #define SOF_MODIFY_KEY L"recommendedClocksPerFrame"
  21. // Hardware Branch PDO Keys
  22. /*
  23. define resource consumption for endpoints types
  24. */
  25. #define T_256K 0x40000
  26. #define T_128K 0x20000
  27. #define T_64K 0x10000
  28. #define T_4K 0x1000
  29. // Control:
  30. // largest possible transfer for control is 64k
  31. // therefore we support up to 2 transfers of this
  32. // size in HW. Most control transfers are much
  33. // smaller than this.
  34. // NOTE: we MUST support at least one 64k transfer in
  35. // HW since a single control transfer cannot be
  36. // broken up.
  37. #define MAX_CONTROL_TRANSFER_SIZE T_64K
  38. // worst case 64k control transfer 17 + status and
  39. // setup TD = 19 (*2 transfers)
  40. #define TDS_PER_CONTROL_ENDPOINT 38
  41. // Bulk:
  42. // The most data we can move in a ms is 1200 bytes.
  43. // we support two 64k transfers queued to HW at a
  44. // a time -- we should be able to keep the bus busy
  45. // with this.
  46. // NOTE: in a memory constrained system we can shrink
  47. // this value, our max transfer size should always be
  48. // at half the # of TDs available
  49. #define MAX_BULK_TRANSFER_SIZE T_256K
  50. // enough for 4 64 xfers, 2 128k or 1 256k
  51. #define TDS_PER_BULK_ENDPOINT 68
  52. // Iso:
  53. #define MAX_ISO_TRANSFER_SIZE T_64K
  54. #define TDS_PER_ISO_ENDPOINT 64
  55. // Interrupt:
  56. #define MAX_INTERRUPT_TRANSFER_SIZE T_4K
  57. #define TDS_PER_INTERRUPT_ENDPOINT 4
  58. #undef PDEVICE_DATA
  59. // Values for DeviceData.Flags
  60. #define HMP_FLAG_SOF_MODIFY_VALUE 0x00000001
  61. #define HMP_FLAG_SUSPENDED 0x00000002
  62. //** flags for ED HC_STATIC_ED_DATA & HCD_ENDPOINT_DESCRIPTOR
  63. //* these define the type of ED
  64. #define EDFLAG_CONTROL 0x00000001
  65. #define EDFLAG_BULK 0x00000002
  66. #define EDFLAG_INTERRUPT 0x00000004
  67. //*
  68. // these define ed charateristics and state
  69. #define EDFLAG_NOHALT 0x00000008
  70. #define EDFLAG_REMOVED 0x00000010
  71. #define EDFLAG_REGISTER 0x00000020
  72. typedef struct _HC_STATIC_ED_DATA {
  73. // virtual address of static ED
  74. PHW_ENDPOINT_DESCRIPTOR HwED;
  75. // physical address of next ED
  76. HW_32BIT_PHYSICAL_ADDRESS HwEDPhys;
  77. // index in the static ED list for the
  78. // next ED in the interrupt tree
  79. CHAR NextIdx;
  80. // list of 'real EDs' associated
  81. // with this static ED
  82. LIST_ENTRY TransferEdList;
  83. // Use EDFLAG_
  84. ULONG EdFlags;
  85. // this is either an HC register or the address of the entry
  86. // in the HCCA area corresponding to the 'physical address'
  87. // of the first ed in the list
  88. //
  89. // in the case of control and bulk the physical head will be 0
  90. // or point to timing delay 'dummy EDs'
  91. //
  92. // in the case of interrupt the physical head will be a static
  93. // ED in the onterrupt 'tree'
  94. PULONG PhysicalHead;
  95. ULONG AllocatedBandwidth;
  96. ULONG HccaOffset;
  97. } HC_STATIC_ED_DATA, *PHC_STATIC_ED_DATA;
  98. //
  99. // These values index in to the static ED list
  100. //
  101. #define ED_INTERRUPT_1ms 0
  102. #define ED_INTERRUPT_2ms 1
  103. #define ED_INTERRUPT_4ms 3
  104. #define ED_INTERRUPT_8ms 7
  105. #define ED_INTERRUPT_16ms 15
  106. #define ED_INTERRUPT_32ms 31
  107. #define ED_CONTROL 63
  108. #define ED_BULK 64
  109. #define ED_ISOCHRONOUS 0 // same as 1ms interrupt queue
  110. #define NO_ED_LISTS 65
  111. #define ED_EOF 0xff
  112. //
  113. #define SIG_HCD_DUMMY_ED 'deYD'
  114. #define SIG_HCD_ED 'deYH'
  115. #define SIG_HCD_TD 'dtYH'
  116. #define SIG_EP_DATA 'peYH'
  117. #define SIG_OHCI_TRANSFER 'rtYH'
  118. #define SIG_OHCI_DD 'icho'
  119. typedef struct _DEVICE_DATA {
  120. ULONG Sig;
  121. ULONG Flags;
  122. PHC_OPERATIONAL_REGISTER HC;
  123. HC_FM_INTERVAL BIOS_Interval;
  124. ULONG SofModifyValue;
  125. ULONG FrameHighPart;
  126. ULONG NumberOfPorts;
  127. PHCCA_BLOCK HcHCCA;
  128. HW_32BIT_PHYSICAL_ADDRESS HcHCCAPhys;
  129. PUCHAR StaticEDs;
  130. HW_32BIT_PHYSICAL_ADDRESS StaticEDsPhys;
  131. USB_CONTROLLER_FLAVOR ControllerFlavor;
  132. ULONG LastDeadmanFrame;
  133. struct _HCD_ENDPOINT_DESCRIPTOR *HydraLsHsHackEd;
  134. HC_STATIC_ED_DATA StaticEDList[NO_ED_LISTS];
  135. } DEVICE_DATA, *PDEVICE_DATA;
  136. #define TC_FLAGS_SHORT_XFER_OK 0x00000001
  137. #define TC_FLAGS_SHORT_XFER_DONE 0x00000002
  138. typedef struct _TRANSFER_CONTEXT {
  139. ULONG Sig;
  140. ULONG BytesTransferred;
  141. PTRANSFER_PARAMETERS TransferParameters;
  142. ULONG PendingTds;
  143. ULONG TcFlags;
  144. USBD_STATUS UsbdStatus;
  145. // first TD of the next transfer in the chain
  146. struct _HCD_TRANSFER_DESCRIPTOR *NextXferTd;
  147. struct _HCD_TRANSFER_DESCRIPTOR *StatusTd;
  148. struct _ENDPOINT_DATA *EndpointData;
  149. PMINIPORT_ISO_TRANSFER IsoTransfer;
  150. } TRANSFER_CONTEXT, *PTRANSFER_CONTEXT;
  151. // HCD Endpoint Descriptor (contains the HW descriptor)
  152. //
  153. #define ENDPOINT_DATA_PTR(p) ((struct _ENDPOINT_DATA *) (p).Pointer)
  154. typedef struct _HCD_ENDPOINT_DESCRIPTOR {
  155. HW_ENDPOINT_DESCRIPTOR HwED;
  156. // make Physical Address the same as in HCD_TRANSFER_DESCRIPTOR
  157. ULONG Pad4[4];
  158. HW_32BIT_PHYSICAL_ADDRESS PhysicalAddress;
  159. ULONG Sig;
  160. ULONG EdFlags; //use EDFLAG_
  161. ULONG Win64Pad;
  162. MP_HW_POINTER EndpointData;
  163. MP_HW_LIST_ENTRY SwLink;
  164. ULONG PadTo128[14];
  165. } HCD_ENDPOINT_DESCRIPTOR, *PHCD_ENDPOINT_DESCRIPTOR;
  166. C_ASSERT((sizeof(HCD_ENDPOINT_DESCRIPTOR) == 128));
  167. //
  168. // HCD Transfer Descriptor (contains the HW descriptor)
  169. //
  170. #define TD_FLAG_BUSY 0x00000001
  171. #define TD_FLAG_XFER 0x00000002
  172. #define TD_FLAG_CONTROL_STATUS 0x00000004
  173. #define TD_FLAG_DONE 0x00000008
  174. #define TD_FLAG_SKIP 0x00000010
  175. #define TRANSFER_CONTEXT_PTR(p) ((struct _TRANSFER_CONTEXT *) (p).Pointer)
  176. #define TRANSFER_DESCRIPTOR_PTR(p) ((struct _HCD_TRANSFER_DESCRIPTOR *) (p).Pointer)
  177. #define HW_TRANSFER_DESCRIPTOR_PTR(p) ((struct _HW_TRANSFER_DESCRIPTOR *) (p).Pointer)
  178. #define HW_DATA_PTR(p) ((PVOID) (p).Pointer)
  179. typedef struct _HCD_TRANSFER_DESCRIPTOR {
  180. HW_TRANSFER_DESCRIPTOR HwTD;
  181. HW_32BIT_PHYSICAL_ADDRESS PhysicalAddress;
  182. ULONG Sig;
  183. ULONG Flags;
  184. ULONG TransferCount;
  185. MP_HW_POINTER EndpointData;
  186. MP_HW_POINTER TransferContext;
  187. MP_HW_POINTER NextHcdTD;
  188. ULONG FrameIndex;
  189. LIST_ENTRY DoneLink;
  190. #ifdef _WIN64
  191. ULONG PadTo128[8];
  192. #else
  193. ULONG PadTo128[11];
  194. #endif
  195. } HCD_TRANSFER_DESCRIPTOR, *PHCD_TRANSFER_DESCRIPTOR;
  196. C_ASSERT((sizeof(HCD_TRANSFER_DESCRIPTOR) == 128));
  197. typedef struct _SS_PACKET_CONTEXT {
  198. ULONG PhysHold;
  199. MP_HW_POINTER Td;
  200. MP_HW_POINTER Data;
  201. ULONG PadTo8Dwords[3];
  202. } SS_PACKET_CONTEXT, *PSS_PACKET_CONTEXT;
  203. typedef struct _HCD_TD_LIST {
  204. HCD_TRANSFER_DESCRIPTOR Td[1];
  205. } HCD_TD_LIST, *PHCD_TD_LIST;
  206. //#define EPF_HAVE_TRANSFER 0x00000001
  207. //#define EPF_REQUEST_PAUSE 0x00000002
  208. typedef struct _ENDPOINT_DATA {
  209. ULONG Sig;
  210. ENDPOINT_PARAMETERS Parameters;
  211. ULONG Flags;
  212. // USHORT MaxPendingTransfers;
  213. USHORT PendingTransfers;
  214. PHC_STATIC_ED_DATA StaticEd;
  215. PHCD_TD_LIST TdList;
  216. PHCD_ENDPOINT_DESCRIPTOR HcdEd;
  217. ULONG TdCount;
  218. ULONG PendingTds;
  219. PHCD_TRANSFER_DESCRIPTOR HcdTailP;
  220. PHCD_TRANSFER_DESCRIPTOR HcdHeadP;
  221. LIST_ENTRY DoneTdList;
  222. } ENDPOINT_DATA, *PENDPOINT_DATA;
  223. /*
  224. Callouts to port driver services
  225. */
  226. extern USBPORT_REGISTRATION_PACKET RegistrationPacket;
  227. #define USBPORT_DBGPRINT(dd, l, f, arg0, arg1, arg2, arg3, arg4, arg5) \
  228. RegistrationPacket.USBPORTSVC_DbgPrint((dd), (l), (f), (arg0), (arg1), \
  229. (arg2), (arg3), (arg4), (arg5))
  230. #define USBPORT_GET_REGISTRY_KEY_VALUE(dd, branch, keystring, keylen, data, datalen) \
  231. RegistrationPacket.USBPORTSVC_GetMiniportRegistryKeyValue((dd), (branch), \
  232. (keystring), (keylen), (data), (datalen))
  233. #define USBPORT_INVALIDATE_ROOTHUB(dd) \
  234. RegistrationPacket.USBPORTSVC_InvalidateRootHub((dd));
  235. #define USBPORT_COMPLETE_TRANSFER(dd, ep, t, status, length) \
  236. RegistrationPacket.USBPORTSVC_CompleteTransfer((dd), (ep), (t), \
  237. (status), (length));
  238. #define USBPORT_COMPLETE_ISO_TRANSFER(dd, ep, t, iso) \
  239. RegistrationPacket.USBPORTSVC_CompleteIsoTransfer((dd), (ep), (t), \
  240. (iso));
  241. #define USBPORT_INVALIDATE_ENDPOINT(dd, ep) \
  242. RegistrationPacket.USBPORTSVC_InvalidateEndpoint((dd), (ep));
  243. #define USBPORT_INVALIDATE_CONTROLLER(dd, s) \
  244. RegistrationPacket.USBPORTSVC_InvalidateController((dd), (s))
  245. #define USBPORT_PHYSICAL_TO_VIRTUAL(addr, dd, ep) \
  246. RegistrationPacket.USBPORTSVC_MapHwPhysicalToVirtual((addr), (dd), (ep));
  247. #define USBPORT_RW_CONFIG_SPACE(dd, read, buffer, offset, length) \
  248. RegistrationPacket.USBPORTSVC_ReadWriteConfigSpace((dd), (read), \
  249. (buffer), (offset), (length))
  250. #define USBPORT_BUGCHECK(dd) \
  251. RegistrationPacket.USBPORTSVC_BugCheck(dd)
  252. #define INITIALIZE_TD_FOR_TRANSFER(td, tc) \
  253. { ULONG i;\
  254. TRANSFER_CONTEXT_PTR((td)->TransferContext) = (tc);\
  255. SET_FLAG((td)->Flags, TD_FLAG_XFER); \
  256. (td)->HwTD.CBP = 0xbaadf00d;\
  257. (td)->HwTD.BE = 0xf00dbaad;\
  258. (td)->HwTD.NextTD = 0;\
  259. (td)->HwTD.Asy.IntDelay = HcTDIntDelay_NoInterrupt;\
  260. TRANSFER_DESCRIPTOR_PTR((td)->NextHcdTD) = NULL;\
  261. for (i=0; i<8; i++) {\
  262. (td)->HwTD.Packet[i].PSW = 0;\
  263. }\
  264. }
  265. #define SET_NEXT_TD(linkTd, nextTd) \
  266. (linkTd)->HwTD.NextTD = (nextTd)->PhysicalAddress;\
  267. TRANSFER_DESCRIPTOR_PTR((linkTd)->NextHcdTD) = (nextTd);
  268. #define SET_NEXT_TD_NULL(linkTd) \
  269. TRANSFER_DESCRIPTOR_PTR((linkTd)->NextHcdTD) = NULL;\
  270. (linkTd)->HwTD.NextTD = 0;
  271. #ifdef _WIN64
  272. #define FREE_TD_CONTEXT ((PVOID) 0xDEADFACEDEADFACE)
  273. #else
  274. #define FREE_TD_CONTEXT ((PVOID) 0xDEADFACE)
  275. #endif
  276. #define OHCI_FREE_TD(dd, ep, td) \
  277. (td)->Flags = 0;\
  278. (td)->HwTD.NextTD = 0;\
  279. TRANSFER_CONTEXT_PTR((td)->TransferContext) = FREE_TD_CONTEXT;\
  280. (td)->DoneLink.Flink = NULL;\
  281. (td)->DoneLink.Blink = NULL;
  282. #define OHCI_ALLOC_TD OHCI_AllocTd
  283. // assuming only one bit is set this macro returns that bit
  284. //
  285. #define GET_BIT_SET(d, bit) \
  286. { \
  287. UCHAR tmp = (d);\
  288. (bit)=0; \
  289. while (!(tmp & 0x01)) {\
  290. (bit)++;\
  291. tmp >>= 1;\
  292. };\
  293. }
  294. VOID
  295. OHCI_EnableList(
  296. PDEVICE_DATA DeviceData,
  297. PENDPOINT_DATA EndpointData
  298. );
  299. PHCD_TRANSFER_DESCRIPTOR
  300. OHCI_AllocTd(
  301. PDEVICE_DATA DeviceData,
  302. PENDPOINT_DATA EndpointData
  303. );
  304. USB_MINIPORT_STATUS
  305. OHCI_SubmitTransfer(
  306. PDEVICE_DATA DeviceData,
  307. PENDPOINT_DATA EndpointData,
  308. PTRANSFER_PARAMETERS TransferParameters,
  309. PTRANSFER_CONTEXT TransferContext,
  310. PTRANSFER_SG_LIST TransferSGList
  311. );
  312. ULONG
  313. OHCI_MapAsyncTransferToTd(
  314. PDEVICE_DATA DeviceData,
  315. ULONG MaxPacketSize,
  316. ULONG LengthMapped,
  317. PTRANSFER_CONTEXT TransferContext,
  318. PHCD_TRANSFER_DESCRIPTOR Td,
  319. PTRANSFER_SG_LIST SgList
  320. );
  321. USB_MINIPORT_STATUS
  322. OHCI_OpenEndpoint(
  323. PDEVICE_DATA DeviceData,
  324. PENDPOINT_PARAMETERS EndpointParameters,
  325. PENDPOINT_DATA EndpointData
  326. );
  327. MP_ENDPOINT_STATE
  328. OHCI_GetEndpointState(
  329. PDEVICE_DATA DeviceData,
  330. PENDPOINT_DATA EndpointData
  331. );
  332. VOID
  333. OHCI_SetEndpointState(
  334. PDEVICE_DATA DeviceData,
  335. PENDPOINT_DATA EndpointData,
  336. MP_ENDPOINT_STATE State
  337. );
  338. VOID
  339. OHCI_CheckController(
  340. PDEVICE_DATA DeviceData
  341. );
  342. BOOLEAN
  343. OHCI_HardwarePresent(
  344. PDEVICE_DATA DeviceData,
  345. BOOLEAN Notify
  346. );
  347. VOID
  348. OHCI_ResetController(
  349. PDEVICE_DATA DeviceData
  350. );
  351. USB_MINIPORT_STATUS
  352. USBMPFN
  353. OHCI_StartController(
  354. PDEVICE_DATA DeviceData,
  355. PHC_RESOURCES HcResources
  356. );
  357. BOOLEAN
  358. OHCI_InterruptService (
  359. PDEVICE_DATA DeviceData
  360. );
  361. USB_MINIPORT_STATUS
  362. OHCI_RH_GetPortStatus(
  363. PDEVICE_DATA DeviceData,
  364. USHORT PortNumber,
  365. PRH_PORT_STATUS portStatus
  366. );
  367. USB_MINIPORT_STATUS
  368. OHCI_RH_SetFeaturePortReset(
  369. PDEVICE_DATA DeviceData,
  370. USHORT PortNumber
  371. );
  372. USB_MINIPORT_STATUS
  373. OHCI_RH_SetFeaturePortSuspend(
  374. PDEVICE_DATA DeviceData,
  375. USHORT PortNumber
  376. );
  377. VOID
  378. OHCI_RH_GetRootHubData(
  379. PDEVICE_DATA DeviceData,
  380. PROOTHUB_DATA HubData
  381. );
  382. USB_MINIPORT_STATUS
  383. OHCI_RH_GetStatus(
  384. PDEVICE_DATA DeviceData,
  385. PUSHORT Status
  386. );
  387. USB_MINIPORT_STATUS
  388. OHCI_RH_ClearFeaturePortEnable(
  389. PDEVICE_DATA DeviceData,
  390. USHORT PortNumber
  391. );
  392. USB_MINIPORT_STATUS
  393. OHCI_RH_ClearFeaturePortPower(
  394. PDEVICE_DATA DeviceData,
  395. USHORT PortNumber
  396. );
  397. VOID
  398. OHCI_RH_DisableIrq(
  399. PDEVICE_DATA DeviceData
  400. );
  401. VOID
  402. OHCI_RH_EnableIrq(
  403. PDEVICE_DATA DeviceData
  404. );
  405. VOID
  406. OHCI_InterruptDpc (
  407. PDEVICE_DATA DeviceData,
  408. BOOLEAN EnableInterrupts
  409. );
  410. USB_MINIPORT_STATUS
  411. OHCI_RH_ClearFeaturePortEnableChange(
  412. PDEVICE_DATA DeviceData,
  413. USHORT PortNumber
  414. );
  415. USB_MINIPORT_STATUS
  416. OHCI_RH_ClearFeaturePortConnectChange(
  417. PDEVICE_DATA DeviceData,
  418. USHORT PortNumber
  419. );
  420. USB_MINIPORT_STATUS
  421. OHCI_RH_ClearFeaturePortResetChange(
  422. PDEVICE_DATA DeviceData,
  423. USHORT PortNumber
  424. );
  425. USB_MINIPORT_STATUS
  426. OHCI_RH_GetHubStatus(
  427. PDEVICE_DATA DeviceData,
  428. PRH_HUB_STATUS HubStatus
  429. );
  430. USB_MINIPORT_STATUS
  431. OHCI_RH_SetFeaturePortPower(
  432. PDEVICE_DATA DeviceData,
  433. USHORT PortNumber
  434. );
  435. USB_MINIPORT_STATUS
  436. OHCI_RH_SetFeaturePortEnable(
  437. PDEVICE_DATA DeviceData,
  438. USHORT PortNumber
  439. );
  440. VOID
  441. OHCI_QueryEndpointRequirements(
  442. PDEVICE_DATA DeviceData,
  443. PENDPOINT_PARAMETERS EndpointParameters,
  444. PENDPOINT_REQUIREMENTS EndpointRequirements
  445. );
  446. VOID
  447. OHCI_CloseEndpoint(
  448. PDEVICE_DATA DeviceData,
  449. PENDPOINT_DATA EndpointData
  450. );
  451. VOID
  452. OHCI_PollEndpoint(
  453. PDEVICE_DATA DeviceData,
  454. PENDPOINT_DATA EndpointData
  455. );
  456. USB_MINIPORT_STATUS
  457. OHCI_ControlTransfer(
  458. PDEVICE_DATA DeviceData,
  459. PENDPOINT_DATA EndpointData,
  460. PTRANSFER_PARAMETERS TransferParameters,
  461. PTRANSFER_CONTEXT TransferContext,
  462. PTRANSFER_SG_LIST TransferSGList
  463. );
  464. VOID
  465. OHCI_ProcessDoneAsyncTd(
  466. PDEVICE_DATA DeviceData,
  467. PHCD_TRANSFER_DESCRIPTOR Td,
  468. BOOLEAN CompleteTransfer
  469. );
  470. USB_MINIPORT_STATUS
  471. OHCI_PokeEndpoint(
  472. PDEVICE_DATA DeviceData,
  473. PENDPOINT_PARAMETERS EndpointParameters,
  474. PENDPOINT_DATA EndpointData
  475. );
  476. USB_MINIPORT_STATUS
  477. OHCI_BulkOrInterruptTransfer(
  478. PDEVICE_DATA DeviceData,
  479. PENDPOINT_DATA EndpointData,
  480. PTRANSFER_PARAMETERS TransferParameters,
  481. PTRANSFER_CONTEXT TransferContext,
  482. PTRANSFER_SG_LIST TransferSGList
  483. );
  484. USB_MINIPORT_STATUS
  485. OHCI_OpenBulkEndpoint(
  486. PDEVICE_DATA DeviceData,
  487. PENDPOINT_PARAMETERS EndpointParameters,
  488. PENDPOINT_DATA EndpointData
  489. );
  490. USB_MINIPORT_STATUS
  491. OHCI_OpenControlEndpoint(
  492. PDEVICE_DATA DeviceData,
  493. PENDPOINT_PARAMETERS EndpointParameters,
  494. PENDPOINT_DATA EndpointData
  495. );
  496. USB_MINIPORT_STATUS
  497. OHCI_OpenInterruptEndpoint(
  498. PDEVICE_DATA DeviceData,
  499. PENDPOINT_PARAMETERS EndpointParameters,
  500. PENDPOINT_DATA EndpointData
  501. );
  502. PHCD_TRANSFER_DESCRIPTOR
  503. OHCI_InitializeTD(
  504. PDEVICE_DATA DeviceData,
  505. PENDPOINT_DATA EndpointData,
  506. PHCD_TRANSFER_DESCRIPTOR Td,
  507. HW_32BIT_PHYSICAL_ADDRESS HwPhysAddress
  508. );
  509. PHCD_ENDPOINT_DESCRIPTOR
  510. OHCI_InitializeED(
  511. PDEVICE_DATA DeviceData,
  512. PENDPOINT_DATA EndpointData,
  513. PHCD_ENDPOINT_DESCRIPTOR Ed,
  514. PHCD_TRANSFER_DESCRIPTOR DummyTd,
  515. HW_32BIT_PHYSICAL_ADDRESS HwPhysAddress
  516. );
  517. VOID
  518. OHCI_InsertEndpointInSchedule(
  519. PDEVICE_DATA DeviceData,
  520. PENDPOINT_DATA EndpointData
  521. );
  522. VOID
  523. OHCI_PollAsyncEndpoint(
  524. PDEVICE_DATA DeviceData,
  525. PENDPOINT_DATA EndpointData
  526. );
  527. VOID
  528. USBMPFN
  529. OHCI_StopController(
  530. PDEVICE_DATA DeviceData,
  531. BOOLEAN HwPresent
  532. );
  533. ULONG
  534. OHCI_Get32BitFrameNumber(
  535. PDEVICE_DATA DeviceData
  536. );
  537. VOID
  538. OHCI_InterruptNextSOF(
  539. PDEVICE_DATA DeviceData
  540. );
  541. VOID
  542. USBMPFN
  543. OHCI_EnableInterrupts(
  544. PDEVICE_DATA DeviceData
  545. );
  546. VOID
  547. USBMPFN
  548. OHCI_DisableInterrupts(
  549. PDEVICE_DATA DeviceData
  550. );
  551. ULONG
  552. OHCI_FreeTds(
  553. PDEVICE_DATA DeviceData,
  554. PENDPOINT_DATA EndpointData
  555. );
  556. VOID
  557. OHCI_AbortTransfer(
  558. PDEVICE_DATA DeviceData,
  559. PENDPOINT_DATA EndpointData,
  560. PTRANSFER_CONTEXT TransferContext,
  561. PULONG BytesTransferred
  562. );
  563. USB_MINIPORT_STATUS
  564. OHCI_StartSendOnePacket(
  565. PDEVICE_DATA DeviceData,
  566. PMP_PACKET_PARAMETERS PacketParameters,
  567. PUCHAR PacketData,
  568. PULONG PacketLength,
  569. PUCHAR WorkspaceVirtualAddress,
  570. HW_32BIT_PHYSICAL_ADDRESS WorkspacePhysicalAddress,
  571. ULONG WorkSpaceLength,
  572. USBD_STATUS *UsbdStatus
  573. );
  574. USB_MINIPORT_STATUS
  575. OHCI_EndSendOnePacket(
  576. PDEVICE_DATA DeviceData,
  577. PMP_PACKET_PARAMETERS PacketParameters,
  578. PUCHAR PacketData,
  579. PULONG PacketLength,
  580. PUCHAR WorkspaceVirtualAddress,
  581. HW_32BIT_PHYSICAL_ADDRESS WorkspacePhysicalAddress,
  582. ULONG WorkSpaceLength,
  583. USBD_STATUS *UsbdStatus
  584. );
  585. VOID
  586. OHCI_PollController(
  587. PDEVICE_DATA DeviceData
  588. );
  589. VOID
  590. OHCI_SetEndpointDataToggle(
  591. PDEVICE_DATA DeviceData,
  592. PENDPOINT_DATA EndpointData,
  593. ULONG Toggle
  594. );
  595. MP_ENDPOINT_STATUS
  596. OHCI_GetEndpointStatus(
  597. PDEVICE_DATA DeviceData,
  598. PENDPOINT_DATA EndpointData
  599. );
  600. VOID
  601. OHCI_SetEndpointStatus(
  602. PDEVICE_DATA DeviceData,
  603. PENDPOINT_DATA EndpointData,
  604. MP_ENDPOINT_STATUS Status
  605. );
  606. VOID
  607. OHCI_Unload(
  608. PDRIVER_OBJECT DriverObject
  609. );
  610. USB_MINIPORT_STATUS
  611. OHCI_OpenIsoEndpoint(
  612. PDEVICE_DATA DeviceData,
  613. PENDPOINT_PARAMETERS EndpointParameters,
  614. PENDPOINT_DATA EndpointData
  615. );
  616. ULONG
  617. OHCI_MapIsoTransferToTd(
  618. PDEVICE_DATA DeviceData,
  619. PMINIPORT_ISO_TRANSFER IsoTransfer,
  620. ULONG CurrentPacket,
  621. PHCD_TRANSFER_DESCRIPTOR Td
  622. );
  623. USB_MINIPORT_STATUS
  624. OHCI_SubmitIsoTransfer(
  625. PDEVICE_DATA DeviceData,
  626. PENDPOINT_DATA EndpointData,
  627. PTRANSFER_PARAMETERS TransferParameters,
  628. PTRANSFER_CONTEXT TransferContext,
  629. PMINIPORT_ISO_TRANSFER IsoTransfer
  630. );
  631. USB_MINIPORT_STATUS
  632. OHCI_IsoTransfer(
  633. PDEVICE_DATA DeviceData,
  634. PENDPOINT_DATA EndpointData,
  635. PTRANSFER_PARAMETERS TransferParameters,
  636. PTRANSFER_CONTEXT TransferContext,
  637. PMINIPORT_ISO_TRANSFER IsoTransfer
  638. );
  639. VOID
  640. OHCI_ProcessDoneIsoTd(
  641. PDEVICE_DATA DeviceData,
  642. PHCD_TRANSFER_DESCRIPTOR Td,
  643. BOOLEAN CompleteTransfer
  644. );
  645. VOID
  646. OHCI_PollIsoEndpoint(
  647. PDEVICE_DATA DeviceData,
  648. PENDPOINT_DATA EndpointData
  649. );
  650. ULONG
  651. InitializeHydraHsLsFix(
  652. PDEVICE_DATA DeviceData,
  653. PUCHAR CommonBuffer,
  654. HW_32BIT_PHYSICAL_ADDRESS CommonBufferPhys
  655. );
  656. VOID
  657. OHCI_SuspendController(
  658. PDEVICE_DATA DeviceData
  659. );
  660. USB_MINIPORT_STATUS
  661. OHCI_ResumeController(
  662. PDEVICE_DATA DeviceData
  663. );
  664. ULONG
  665. OHCI_ReadRhDescriptorA(
  666. PDEVICE_DATA DeviceData
  667. );
  668. USB_MINIPORT_STATUS
  669. OHCI_RH_ClearFeaturePortSuspend(
  670. PDEVICE_DATA DeviceData,
  671. USHORT PortNumber
  672. );
  673. USB_MINIPORT_STATUS
  674. OHCI_RH_ClearFeaturePortSuspendChange(
  675. PDEVICE_DATA DeviceData,
  676. USHORT PortNumber
  677. );
  678. USB_MINIPORT_STATUS
  679. OHCI_RH_ClearFeaturePortOvercurrentChange(
  680. PDEVICE_DATA DeviceData,
  681. USHORT PortNumber
  682. );
  683. VOID
  684. USBMPFN
  685. OHCI_FlushInterrupts(
  686. PDEVICE_DATA DeviceData
  687. );
  688. #endif /* __OHCI_H__ */