48 lines
1.2 KiB
C++
48 lines
1.2 KiB
C++
#include "xhci/trb.h"
|
|
|
|
constexpr uint8_t kTrb_Normal = 1;
|
|
constexpr uint8_t kTrb_SetupStage = 2;
|
|
constexpr uint8_t kTrb_DataStage = 3;
|
|
constexpr uint8_t kTrb_StatusStage = 4;
|
|
constexpr uint8_t kTrb_Isoch = 5;
|
|
constexpr uint8_t kTrb_Link = 6;
|
|
constexpr uint8_t kTrb_EventData = 7;
|
|
constexpr uint8_t kTrb_NoOp = 8;
|
|
constexpr uint8_t kTrb_EnableSlot = 9;
|
|
constexpr uint8_t kTrb_DisableSlot = 10;
|
|
constexpr uint8_t kTrb_NoOpCommand = 23;
|
|
|
|
constexpr uint8_t kTrb_TypeOffset = 10;
|
|
|
|
constexpr uint8_t kTrb_Cycle = 1;
|
|
|
|
XhciTrb CreateLinkTrb(uint64_t physical_address) {
|
|
return {
|
|
.parameter = physical_address,
|
|
.status = 0,
|
|
.type_and_cycle = kTrb_Link << kTrb_TypeOffset,
|
|
.control = 0,
|
|
};
|
|
}
|
|
|
|
XhciTrb CreateEnableSlotTrb() {
|
|
return {
|
|
.parameter = 0,
|
|
.status = 0,
|
|
// FIXME: Accept Cycle Bit as a parameter.
|
|
.type_and_cycle = kTrb_EnableSlot << kTrb_TypeOffset | kTrb_Cycle,
|
|
// FIXME: Specify slot type if necessary. (XHCI Table 7-9)?
|
|
.control = 0,
|
|
};
|
|
}
|
|
|
|
XhciTrb CreateNoOpCommandTrb() {
|
|
return {
|
|
.parameter = 0,
|
|
.status = 0,
|
|
// FIXME: Accept Cycle Bit as a parameter.
|
|
.type_and_cycle = kTrb_NoOpCommand << kTrb_TypeOffset | kTrb_Cycle,
|
|
.control = 0,
|
|
};
|
|
}
|