ReactOS 0.4.17-dev-1281-g065abb3
bulkio.cpp File Reference
#include "xhcidrv.h"
#include <debug.h>
Include dependency graph for bulkio.cpp:

Go to the source code of this file.

Macros

#define NDEBUG
 

Enumerations

enum class  XhciBulkStep : ULONG { Normal , Pad , EventData , Done }
 

Functions

 C_ASSERT ((sizeof(XhciBulkStage) % 8)==0)
 
 C_ASSERT (alignof(XhciBulkStage) > XHCI_EVENT_DATA_TYPE_MASK)
 
static BOOLEAN NTAPI XhciBulkIsHaltedCode (_In_ ULONG Code)
 
static BOOLEAN NTAPI XhciBulkIsStoppedCode (_In_ ULONG Code)
 
static BOOLEAN NTAPI XhciBulkEndpointIn (_In_ const XhciTransferRing *Ring)
 
static BOOLEAN NTAPI XhciBulkTransferIn (_In_ const XhciBulkTransfer *Transfer)
 
static BOOLEAN NTAPI XhciBulkChainedMdl (_In_ const XhciBulkTransfer *Transfer)
 
static ULONG NTAPI XhciBulkWorstPages (_In_ ULONG Bytes)
 
static BOOLEAN NTAPI XhciBulkSegmentHas (_In_ const XhciDmaBuffer *Segment, _In_ ULONG Start, _In_ ULONG OnePastEnd, _In_ ULONG64 Address)
 
static BOOLEAN NTAPI XhciBulkNeedsNoOps (_In_ const XhciTransferRing *Ring)
 
static ULONG NTAPI XhciBulkPadSize (_In_ const XhciTransferRing *Ring, _In_ ULONG Size)
 
static VOID NTAPI XhciBulkCopyIn (_In_ const XhciBulkTransfer *Transfer, _In_ const XhciBulkStage *Stage, _In_ ULONG Bytes)
 
static VOID NTAPI XhciBulkMoveList (_Inout_ PLIST_ENTRY Destination, _Inout_ PLIST_ENTRY Source)
 
static BOOLEAN NTAPI XhciBulkScanSegment (_In_ const XhciDmaBuffer *Segment, _In_ ULONG Start, _In_ const XHCI_TRB *Event, _Inout_ PULONG Bytes)
 
static ULONG NTAPI XhciBulkStageBytes (_In_ const XhciBulkStage *Stage, _In_ const XHCI_TRB *Event)
 
static BOOLEAN NTAPI XhciBulkStageContains (_In_ const XhciBulkStage *Stage, _In_ ULONG64 Address)
 
static ULONG64 NTAPI XhciBulkEventData (_In_ const XhciTransferRing *Ring, _In_ const XhciBulkStage *Stage)
 
static XhciBulkStage *NTAPI XhciBulkStageFromEventData (_In_ ULONG64 Value)
 
 _Requires_lock_held_ (Ring->m_Lock) XhciBulkStage *XhciBulkRing
 
 _Requires_lock_not_held_ (Ring->m_Lock) VOID XhciBulkRing
 

Variables

static const ULONG XhciBulkStageTag = 'gtSB'
 
static const ULONG XhciBulkTransferTag = 'rTkB'
 
static const ULONG XhciBulkPendingStagesMax = 5
 
static const ULONG XhciBulkSegmentWaitLimit = 3
 
static const ULONG XhciBulkTrbBytesMax = 0x10000
 
static const ULONG XhciBulkImmediateBytes = 8
 
static const ULONG XhciBulkMinStageSize = 0x10000
 
static const ULONG XhciBulkNoOpCount = 8
 
static const USBD_STATUS XhciBulkStatusNotSet = (USBD_STATUS)0xFFFFFFFF
 
static const ULONG XhciBulkReasonEd0Invalid = 0x101F
 
static const ULONG XhciBulkReasonEd0Duplicate = 0x1020
 
static const ULONG XhciBulkAckExpected = 0x01
 
static const ULONG XhciBulkHalted = 0x02
 
static const ULONG XhciBulkStoppedSeen = 0x04
 
static const ULONG XhciBulkCanceled = 0x08
 
static const ULONG XhciBulkOkToReclaim = 0x10
 
static const ULONG XhciBulkReclaimAck = 0x20
 
static const LONG XhciBulkWaitIdle = 0
 
static const LONG XhciBulkWaitParked = 1
 
static const LONG XhciBulkWaitArrived = 2
 
static const LONG XhciBulkWaitAbandoned = 3
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 10 of file bulkio.cpp.

Enumeration Type Documentation

◆ XhciBulkStep

Enumerator
Normal 
Pad 
EventData 
Done 

Definition at line 42 of file bulkio.cpp.

Function Documentation

◆ _Requires_lock_held_()

_Requires_lock_held_ ( Ring->  m_Lock)

Finds the stage holding a TRB address; Skipped counts the stages before it.

Stream ring accounting when another stream saw the halt or the stopped event.

Definition at line 1038 of file bulkio.cpp.

1043{
1044 XhciBulkRing* Bulk = &Ring->m_Type.Bulk;
1045 XhciBulkStage* Stage;
1046 ULONG Index;
1047
1048 if (Transfer->Stage != NULL)
1049 return NULL;
1050
1051 for (Index = 0; Index < StageSlots; Index++)
1052 {
1053 Stage = &Bulk->m_Stages[Index];
1054 if (Stage->InUse)
1055 continue;
1056
1057 Stage->InUse = TRUE;
1058 Stage->OnHardware = FALSE;
1059 Stage->FreeMdl = FALSE;
1060 Stage->Generation++;
1061 Stage->Transfer = Transfer;
1062 InitializeListHead(&Stage->FreeSegments);
1063 InitializeListHead(&Stage->UsedSegments);
1064 Stage->Size = 0;
1065 Stage->Mdl = NULL;
1066 Stage->SgList = NULL;
1067 Stage->Buffer = NULL;
1068 Stage->DoubleBuffer = NULL;
1069 Stage->BurstTrbBudget = 0;
1070 Stage->TrbsReserved = 0;
1071 Stage->TrbsWritten = 0;
1072 Stage->FirstSegment = Ring->m_Segment;
1073 Stage->FirstIndex = Ring->m_EnqueueIndex;
1074 Stage->LastSegment = Ring->m_Segment;
1075 Stage->EndIndex = Ring->m_EnqueueIndex;
1076
1077 Transfer->Stage = Stage;
1078 return Stage;
1079 }
1080
1081 DPRINT1("Bulk DCI %lu stream %lu ran out of stage records\n",
1082 Ring->m_Endpoint->Dci(), Ring->m_StreamId);
1083 return NULL;
1084}
#define DPRINT1
Definition: precomp.h:8
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
uint32_t ULONG
Definition: typedefs.h:59
_In_ WDFCOLLECTION _In_ ULONG Index

◆ _Requires_lock_not_held_()

_Requires_lock_not_held_ ( Ring->  m_Lock)

Definition at line 1114 of file bulkio.cpp.

1119{
1120 PDMA_ADAPTER Adapter;
1121 KIRQL OldIrql;
1122
1123 if (Stage->SgList == NULL)
1124 return;
1125
1126 /* Never under the ring lock: the HAL may run another DMA callback of this ring */
1127 Adapter = Ring->m_Controller->m_Buffers.DmaAdapter();
1129 Adapter->DmaOperations->PutScatterGatherList(Adapter,
1130 Stage->SgList,
1131 !XhciBulkTransferIn(Stage->Transfer));
1133 Stage->SgList = NULL;
1134}
static BOOLEAN NTAPI XhciBulkTransferIn(_In_ const XhciBulkTransfer *Transfer)
Definition: bulkio.cpp:102
UCHAR KIRQL
Definition: env_spec_w32.h:591
#define KeRaiseIrql(irql, oldIrql)
Definition: env_spec_w32.h:597
#define KeLowerIrql(oldIrql)
Definition: env_spec_w32.h:602
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
struct _DMA_OPERATIONS * DmaOperations
Definition: iotypes.h:2310
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:778

◆ C_ASSERT() [1/2]

C_ASSERT ( (sizeof(XhciBulkStage) % 8)  = =0)

◆ C_ASSERT() [2/2]

C_ASSERT ( alignof(XhciBulkStage)  ,
XHCI_EVENT_DATA_TYPE_MASK   
)

◆ XhciBulkChainedMdl()

static BOOLEAN NTAPI XhciBulkChainedMdl ( _In_ const XhciBulkTransfer *  Transfer)
static

Definition at line 111 of file bulkio.cpp.

113{
114 return Transfer->Urb->TransferBufferMDL != NULL &&
115 Transfer->Urb->TransferBufferMDL->Next != NULL;
116}

Referenced by XhciBulkRing::ChooseMechanism(), and XhciBulkRing::EstimateTrbs().

◆ XhciBulkCopyIn()

static VOID NTAPI XhciBulkCopyIn ( _In_ const XhciBulkTransfer *  Transfer,
_In_ const XhciBulkStage *  Stage,
_In_ ULONG  Bytes 
)
static

Definition at line 188 of file bulkio.cpp.

192{
193 if (Bytes != 0 &&
194 Transfer->Mechanism == XhciBulkMechanism::DoubleBuffer &&
195 XhciBulkTransferIn(Transfer))
196 {
197 RtlCopyMemory(Stage->Buffer, Stage->DoubleBuffer->VirtualAddress, Bytes);
198 }
199}
_In_ UINT Bytes
Definition: mmcopy.h:9
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263

Referenced by XhciBulkRing::Ed1Event(), and XhciBulkRing::HaltedEvent().

◆ XhciBulkEndpointIn()

static BOOLEAN NTAPI XhciBulkEndpointIn ( _In_ const XhciTransferRing *  Ring)
static

Definition at line 93 of file bulkio.cpp.

95{
96 return (Ring->m_Endpoint->Descriptor()->bEndpointAddress & USB_ENDPOINT_DIRECTION_MASK) != 0;
97}
#define USB_ENDPOINT_DIRECTION_MASK
Definition: usb100.h:73

Referenced by XhciBulkRing::Initialize(), XhciBulkNeedsNoOps(), and XhciBulkPadSize().

◆ XhciBulkEventData()

static ULONG64 NTAPI XhciBulkEventData ( _In_ const XhciTransferRing *  Ring,
_In_ const XhciBulkStage *  Stage 
)
static

Event Data value of a stage: its address, the endpoint type, and on 32 bit its generation.

Definition at line 333 of file bulkio.cpp.

336{
337 ULONG64 Value = (ULONG_PTR)Stage | (Ring->m_TransferType & XHCI_EVENT_DATA_TYPE_MASK);
338
339#ifndef _WIN64
340 Value |= (ULONG64)Stage->Generation << 32;
341#endif
342 return Value;
343}
#define ULONG_PTR
Definition: config.h:101
unsigned __int64 ULONG64
Definition: imports.h:198
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
#define XHCI_EVENT_DATA_TYPE_MASK
Definition: xhcihw.h:324

Referenced by XhciBulkRing::BuildTd().

◆ XhciBulkIsHaltedCode()

static BOOLEAN NTAPI XhciBulkIsHaltedCode ( _In_ ULONG  Code)
static

◆ XhciBulkIsStoppedCode()

static BOOLEAN NTAPI XhciBulkIsStoppedCode ( _In_ ULONG  Code)
static

Definition at line 82 of file bulkio.cpp.

Referenced by XhciBulkRing::Ed0Event(), and XhciBulkRing::Ed1Event().

◆ XhciBulkMoveList()

static VOID NTAPI XhciBulkMoveList ( _Inout_ PLIST_ENTRY  Destination,
_Inout_ PLIST_ENTRY  Source 
)
static

Definition at line 204 of file bulkio.cpp.

207{
208 while (!IsListEmpty(Source))
210}
#define InsertTailList(ListHead, Entry)
#define IsListEmpty(ListHead)
Definition: env_spec_w32.h:954
#define RemoveHeadList(ListHead)
Definition: env_spec_w32.h:964
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
Definition: ndis.h:3169
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
Definition: rtlfuncs.h:3051

Referenced by XhciBulkRing::AllowReclaimOnCancel(), and XhciBulkRing::RecoverTransfers().

◆ XhciBulkNeedsNoOps()

static BOOLEAN NTAPI XhciBulkNeedsNoOps ( _In_ const XhciTransferRing *  Ring)
static

Definition at line 148 of file bulkio.cpp.

150{
151 return Ring->m_Controller->HasErrata(XhciErrata::XferPadSsBulkInTail) &&
152 Ring->m_Device->Speed() == UsbSuperSpeed &&
153 Ring->m_TransferType == USB_ENDPOINT_TYPE_BULK &&
154 XhciBulkEndpointIn(Ring);
155}
static BOOLEAN NTAPI XhciBulkEndpointIn(_In_ const XhciTransferRing *Ring)
Definition: bulkio.cpp:93
#define USB_ENDPOINT_TYPE_BULK
Definition: usb100.h:64
@ UsbSuperSpeed
Definition: usb200.h:45
@ XferPadSsBulkInTail

Referenced by XhciBulkRing::BuildTd(), and XhciBulkRing::EstimateSegments().

◆ XhciBulkPadSize()

static ULONG NTAPI XhciBulkPadSize ( _In_ const XhciTransferRing *  Ring,
_In_ ULONG  Size 
)
static

Bytes of the split IN rounding pad for a stage of Size bytes, 0 when none applies.

Definition at line 161 of file bulkio.cpp.

164{
165 const XHCI_SLOT_CONTEXT* Slot;
166 USB_DEVICE_SPEED Speed = Ring->m_Device->Speed();
167 ULONG MaxPacket = Ring->m_Endpoint->MaxPacketSize();
168
169 if (!Ring->m_Controller->HasErrata(XhciErrata::XferPacketAlignChunks) ||
170 !XhciBulkEndpointIn(Ring) ||
171 (Speed != UsbLowSpeed && Speed != UsbFullSpeed) ||
172 MaxPacket == 0 ||
173 (Size % MaxPacket) == 0)
174 {
175 return 0;
176 }
177
178 Slot = static_cast<const XHCI_SLOT_CONTEXT*>(Ring->m_Device->OutputContext(0));
179 if (Slot == NULL || Slot->TTHubSlotId == 0)
180 return 0;
181
182 return MaxPacket - (Size % MaxPacket);
183}
_Inout_ HubConfiguration ** Slot
Definition: devhcd.cpp:1260
@ UsbLowSpeed
Definition: usb200.h:42
@ UsbFullSpeed
Definition: usb200.h:43
enum _USB_DEVICE_SPEED USB_DEVICE_SPEED
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4539
@ XferPacketAlignChunks

Referenced by XhciBulkRing::BuildTd(), and XhciBulkRing::EstimateTrbs().

◆ XhciBulkScanSegment()

static BOOLEAN NTAPI XhciBulkScanSegment ( _In_ const XhciDmaBuffer *  Segment,
_In_ ULONG  Start,
_In_ const XHCI_TRB *  Event,
_Inout_ PULONG  Bytes 
)
static

Scans one segment of a stage from Start for the TRB the event names, adding the bytes the stage moved before it. Returns TRUE when the TRB was found.

Definition at line 219 of file bulkio.cpp.

224{
225 const XHCI_TRB* Trbs = static_cast<const XHCI_TRB*>(Segment->VirtualAddress);
226 ULONG Slots = Segment->Size / sizeof(XHCI_TRB);
227 ULONG64 Pointer = XhciTrbPointer(Event);
228 ULONG Residual = Event->Dword[2] & XHCI_TRANSFER_EVENT_LENGTH_MASK;
230 ULONG64 Address = (ULONG64)Segment->LogicalAddress.QuadPart + (ULONG64)Start * sizeof(XHCI_TRB);
231 ULONG Index;
232
233 for (Index = Start; Index < Slots; Index++, Address += sizeof(XHCI_TRB))
234 {
235 BOOLEAN Match = (Address == Pointer);
237
238 switch (XhciTrbType(&Trbs[Index]))
239 {
240 case static_cast<ULONG>(XhciTrbType::Normal):
241 if (!Match)
242 {
243 *Bytes += Length;
244 break;
245 }
246
247 switch (static_cast<XhciCompletionCode>(Code))
248 {
255 if (Residual <= Length)
256 *Bytes += Length - Residual;
257 break;
259 *Bytes = Residual;
260 break;
261 default:
262 break;
263 }
264 break;
265
266 case static_cast<ULONG>(XhciTrbType::EventData):
267 if (!Match)
268 *Bytes = 0;
269 break;
270
271 case static_cast<ULONG>(XhciTrbType::Link):
272 return Match;
273
274 default:
275 break;
276 }
277
278 if (Match)
279 return TRUE;
280 }
281
282 return FALSE;
283}
static _Out_opt_ PULONGLONG Start
unsigned char BOOLEAN
Definition: actypes.h:127
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG Event
Definition: dispmprt.h:1287
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
static WCHAR Address[46]
Definition: ping.c:68
ULONG Dword[4]
Definition: xhcihw.h:17
_Inout_ PVOID Segment
Definition: exfuncs.h:1101
#define XHCI_TRB_LENGTH_MASK
Definition: xhcihw.h:621
FORCEINLINE ULONG64 NTAPI XhciTrbPointer(_In_ const XHCI_TRB *Trb)
Definition: xhcihw.h:60
#define XHCI_TRANSFER_EVENT_LENGTH_MASK
Definition: xhcihw.h:635
XhciTrbType
Definition: xhcihw.h:68
struct _XHCI_TRB XHCI_TRB
FORCEINLINE ULONG NTAPI XhciTrbCompletionCode(_In_ const XHCI_TRB *Trb)
Definition: xhcihw.h:42

Referenced by XhciBulkStageBytes().

◆ XhciBulkSegmentHas()

static BOOLEAN NTAPI XhciBulkSegmentHas ( _In_ const XhciDmaBuffer *  Segment,
_In_ ULONG  Start,
_In_ ULONG  OnePastEnd,
_In_ ULONG64  Address 
)
static

Definition at line 131 of file bulkio.cpp.

136{
137 ULONG64 Base = (ULONG64)Segment->LogicalAddress.QuadPart;
138 ULONG Slots = Segment->Size / sizeof(XHCI_TRB);
140
141 Limit = (OnePastEnd >= Slots) ? Segment->Size : (ULONG64)OnePastEnd * sizeof(XHCI_TRB);
142 return Address >= Base + (ULONG64)Start * sizeof(XHCI_TRB) && Address < Base + Limit;
143}
PUCHAR Limit
Definition: desccheck.cpp:2230
Walk Base
Definition: desccheck.cpp:2270

Referenced by XhciBulkStageContains().

◆ XhciBulkStageBytes()

static ULONG NTAPI XhciBulkStageBytes ( _In_ const XhciBulkStage *  Stage,
_In_ const XHCI_TRB *  Event 
)
static

Definition at line 288 of file bulkio.cpp.

291{
292 const LIST_ENTRY* Entry;
293 ULONG Bytes = 0;
294 ULONG Start = Stage->FirstIndex;
295
296 for (Entry = Stage->UsedSegments.Flink; Entry != &Stage->UsedSegments; Entry = Entry->Flink)
297 {
299 return Bytes;
300 Start = 0;
301 }
302
303 if (!XhciBulkScanSegment(Stage->LastSegment, Start, Event, &Bytes))
304 DPRINT1("Event TRB 0x%I64x not found while sizing its stage\n", XhciTrbPointer(Event));
305
306 return Bytes;
307}
static BOOLEAN NTAPI XhciBulkScanSegment(_In_ const XhciDmaBuffer *Segment, _In_ ULONG Start, _In_ const XHCI_TRB *Event, _Inout_ PULONG Bytes)
Definition: bulkio.cpp:219
PLIST_ENTRY Entry
Definition: devhcd.cpp:1262
Definition: typedefs.h:120
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by XhciBulkRing::Ed0Event().

◆ XhciBulkStageContains()

static BOOLEAN NTAPI XhciBulkStageContains ( _In_ const XhciBulkStage *  Stage,
_In_ ULONG64  Address 
)
static

Definition at line 312 of file bulkio.cpp.

315{
316 const LIST_ENTRY* Entry;
317 ULONG Start = Stage->FirstIndex;
318
319 for (Entry = Stage->UsedSegments.Flink; Entry != &Stage->UsedSegments; Entry = Entry->Flink)
320 {
322 return TRUE;
323 Start = 0;
324 }
325
326 return XhciBulkSegmentHas(Stage->LastSegment, Start, Stage->EndIndex, Address);
327}
static BOOLEAN NTAPI XhciBulkSegmentHas(_In_ const XhciDmaBuffer *Segment, _In_ ULONG Start, _In_ ULONG OnePastEnd, _In_ ULONG64 Address)
Definition: bulkio.cpp:131
#define MAXULONG
Definition: typedefs.h:251

◆ XhciBulkStageFromEventData()

static XhciBulkStage *NTAPI XhciBulkStageFromEventData ( _In_ ULONG64  Value)
static

Definition at line 348 of file bulkio.cpp.

350{
351 return reinterpret_cast<XhciBulkStage*>((ULONG_PTR)Value & ~(ULONG_PTR)XHCI_EVENT_DATA_TYPE_MASK);
352}
uint32_t ULONG_PTR
Definition: typedefs.h:65

Referenced by XhciBulkRing::Ed1Event().

◆ XhciBulkTransferIn()

static BOOLEAN NTAPI XhciBulkTransferIn ( _In_ const XhciBulkTransfer *  Transfer)
static

Definition at line 102 of file bulkio.cpp.

104{
105 return (Transfer->Urb->TransferFlags & USBD_TRANSFER_DIRECTION_IN) != 0;
106}
#define USBD_TRANSFER_DIRECTION_IN
Definition: usb.h:167

Referenced by _Requires_lock_not_held_(), XhciBulkRing::BuildTd(), XhciBulkRing::EncodeStage(), XhciBulkRing::SizeStage(), and XhciBulkCopyIn().

◆ XhciBulkWorstPages()

static ULONG NTAPI XhciBulkWorstPages ( _In_ ULONG  Bytes)
static

Worst case number of pages Bytes can touch at any alignment.

Definition at line 122 of file bulkio.cpp.

124{
125 return (Bytes + 2 * (PAGE_SIZE - 1)) / PAGE_SIZE;
126}
#define PAGE_SIZE
Definition: env_spec_w32.h:49

Referenced by XhciBulkRing::EnableForwardProgress(), and XhciBulkRing::EstimateTrbs().

Variable Documentation

◆ XhciBulkAckExpected

const ULONG XhciBulkAckExpected = 0x01
static

◆ XhciBulkCanceled

const ULONG XhciBulkCanceled = 0x08
static

Definition at line 32 of file bulkio.cpp.

Referenced by XhciBulkRing::AllowReclaimOnCancel().

◆ XhciBulkHalted

const ULONG XhciBulkHalted = 0x02
static

Definition at line 30 of file bulkio.cpp.

Referenced by XhciBulkRing::HaltedEvent(), and XhciBulkRing::OnPipeHalted().

◆ XhciBulkImmediateBytes

const ULONG XhciBulkImmediateBytes = 8
static

Definition at line 19 of file bulkio.cpp.

Referenced by XhciBulkRing::ChooseMechanism(), and XhciBulkRing::Initialize().

◆ XhciBulkMinStageSize

const ULONG XhciBulkMinStageSize = 0x10000
static

Definition at line 20 of file bulkio.cpp.

Referenced by XhciBulkRing::Enable().

◆ XhciBulkNoOpCount

const ULONG XhciBulkNoOpCount = 8
static

Definition at line 21 of file bulkio.cpp.

Referenced by XhciBulkRing::BuildTd().

◆ XhciBulkOkToReclaim

const ULONG XhciBulkOkToReclaim = 0x10
static

Definition at line 33 of file bulkio.cpp.

Referenced by XhciBulkRing::AllowReclaimOnCancel().

◆ XhciBulkPendingStagesMax

const ULONG XhciBulkPendingStagesMax = 5
static

Definition at line 16 of file bulkio.cpp.

Referenced by XhciBulkRing::Initialize().

◆ XhciBulkReasonEd0Duplicate

const ULONG XhciBulkReasonEd0Duplicate = 0x1020
static

Definition at line 26 of file bulkio.cpp.

◆ XhciBulkReasonEd0Invalid

const ULONG XhciBulkReasonEd0Invalid = 0x101F
static

Definition at line 25 of file bulkio.cpp.

◆ XhciBulkReclaimAck

const ULONG XhciBulkReclaimAck = 0x20
static

Definition at line 34 of file bulkio.cpp.

Referenced by XhciBulkRing::RecoverTransfers().

◆ XhciBulkSegmentWaitLimit

const ULONG XhciBulkSegmentWaitLimit = 3
static

Definition at line 17 of file bulkio.cpp.

Referenced by XhciBulkRing::NextTdSlot().

◆ XhciBulkStageTag

const ULONG XhciBulkStageTag = 'gtSB'
static

Definition at line 13 of file bulkio.cpp.

Referenced by XhciBulkRing::Initialize().

◆ XhciBulkStatusNotSet

const USBD_STATUS XhciBulkStatusNotSet = (USBD_STATUS)0xFFFFFFFF
static

◆ XhciBulkStoppedSeen

const ULONG XhciBulkStoppedSeen = 0x04
static

◆ XhciBulkTransferTag

const ULONG XhciBulkTransferTag = 'rTkB'
static

Definition at line 14 of file bulkio.cpp.

Referenced by XhciBulkRing::InitTransfer().

◆ XhciBulkTrbBytesMax

const ULONG XhciBulkTrbBytesMax = 0x10000
static

Definition at line 18 of file bulkio.cpp.

Referenced by XhciBulkRing::BuildTd().

◆ XhciBulkWaitAbandoned

const LONG XhciBulkWaitAbandoned = 3
static

Definition at line 40 of file bulkio.cpp.

Referenced by XhciBulkRing::ReleaseParkedMapping(), and XhciBulkRing::SegmentsArrived().

◆ XhciBulkWaitArrived

const LONG XhciBulkWaitArrived = 2
static

Definition at line 39 of file bulkio.cpp.

Referenced by XhciBulkRing::SegmentsArrived().

◆ XhciBulkWaitIdle

const LONG XhciBulkWaitIdle = 0
static

Definition at line 37 of file bulkio.cpp.

Referenced by XhciBulkRing::ParkOnSegments(), and XhciBulkRing::SegmentsArrived().

◆ XhciBulkWaitParked

const LONG XhciBulkWaitParked = 1
static