72 for(
i=0;
i<100;
i++) {
81 chan->
lun[0]->LimitedTransferMode =
82 chan->
lun[0]->PhyTransferMode =
151 for (retry = 0; retry < 10; retry++) {
153 for (loop = 0; loop < 10; loop++) {
166 for (loop = 0; loop < 10; loop++) {
277 chan->RegTranslation[io_port_ndx].Proc) {
282 PVOID HwDeviceExtension = (
PVOID)deviceExtension;
285 ULONG VendorID = deviceExtension->
DevID & 0xffff;
293 offs = 0x50+chan->lun[
p]->SATA_lun_map*0x10;
295 switch(io_port_ndx) {
313 offs = 0x100+chan->lun[
p]->SATA_lun_map*0x80;
315 switch(io_port_ndx) {
330 offs = ((deviceExtension->
Channel+chan->lChannel)*2+
p) * 0x100;
332 switch(io_port_ndx) {
365 chan->RegTranslation[io_port_ndx].Proc) {
370 PVOID HwDeviceExtension = (
PVOID)deviceExtension;
373 ULONG VendorID = deviceExtension->
DevID & 0xffff;
381 offs = 0x50+chan->lun[
p]->SATA_lun_map*0x10;
383 switch(io_port_ndx) {
401 offs = 0x100+chan->lun[
p]->SATA_lun_map*0x80;
403 switch(io_port_ndx) {
419 offs = ((deviceExtension->
Channel+chan->lChannel)*2+
p) * 0x100;
421 switch(io_port_ndx) {
522 PM_Ports &= 0x0000000f;
524 switch(PM_DeviceId) {
530 PM_RevId, PM_Ports));
540 PM_RevId, PM_Ports));
545 PM_DeviceId, PM_RevId, PM_Ports));
550 for(
i=0;
i<PM_Ports;
i++) {
552 LunExt = chan->lun[
i];
570 chan->PmLunMap |= (1 <<
i);
596 " AHCI Base: %#x MemIo %d Proc %d\n",
597 deviceExtension->BaseIoAHCI_0.Addr,
598 deviceExtension->BaseIoAHCI_0.MemIo,
599 deviceExtension->BaseIoAHCI_0.Proc));
604 " AHCI_%#x (%#x) = %#x\n",
606 (deviceExtension->BaseIoAHCI_0.Addr+
j),
615UniataDumpAhciPortRegs(
623 " AHCI port %d Base: %#x MemIo %d Proc %d\n",
625 chan->BaseIoAHCI_Port.Addr,
626 chan->BaseIoAHCI_Port.MemIo,
627 chan->BaseIoAHCI_Port.Proc));
632 " AHCI%d_%#x (%#x) = %#x\n",
635 (chan->BaseIoAHCI_Port.Addr+
j),
656 ULONG BaseMemAddress;
668 UniataDumpAhciRegs(deviceExtension);
677 for(
i=0;
i<50;
i++) {
690 for(
i=0;
i<2000;
i++) {
727 for(
i=0;
i<1000;
i++) {
808 chan = &deviceExtension->
chan[
c];
910 ULONG NumberChannels;
922 switch(deviceExtension->
DevID) {
928 BaseMemAddress =
AtapiGetIoRange(HwDeviceExtension, ConfigInfo, pciData, SystemIoBusNumber,
930 if(!BaseMemAddress) {
934 if((*ConfigInfo->AccessRanges)[BarId].RangeInMemory) {
942 UniataDumpAhciRegs(deviceExtension);
1052 switch(deviceExtension->
DevID) {
1063 NumberChannels =
min(NumberChannels, 2);
1069 NumberChannels =
min(NumberChannels, 4);
1073 if(!NumberChannels) {
1086 NumberChannels,
PI));
1124 KdPrint((
" AHCI detect status %d\n", found));
1148 KdPrint((
"UniataAhciStatus(%d-%d):\n", lChannel, Channel));
1152 hIS &= (1 << Channel);
1167 KdPrint((
" AHCI: is=%08x ss=%08x serror=%08x CI=%08x, ACT=%08x\n",
1186 if(
CI & (1 <<
tag)) {
1188 UniataDumpAhciPortRegs(chan);
1194 KdPrint((
" AHCI: unexpected, error\n"));
1196 KdPrint((
" AHCI: unexpected, incomplete command or error ?\n"));
1226 regs->bCommandReg = (
UCHAR)(TFD & 0xff);
1227 regs->bFeaturesReg = (
UCHAR)((TFD >> 8) & 0xff);
1230 regs->bSectorCountReg = (
UCHAR)(SIG & 0xff);
1231 regs->bSectorNumberReg = (
UCHAR)((SIG >> 8) & 0xff);
1232 regs->bCylLowReg = (
UCHAR)((SIG >> 16) & 0xff);
1233 regs->bCylHighReg = (
UCHAR)((SIG >> 24) & 0xff);
1255 PHW_CHANNEL chan = &deviceExtension->chan[lChannel];
1352 PHW_CHANNEL chan = &deviceExtension->chan[lChannel];
1451 if (!((
CI >>
tag) & 0x01)) {
1565 KdPrint2((
PRINT_PREFIX "UniataAhciSendPIOCommand: cntrlr %#x:%#x dev %#x, cmd %#x, lba %#I64x bcount %#x feature %#x, buff %#x, len %#x, WF %#x \n",
1569 KdPrint((
" length/DEV_BSIZE != bcount\n"));
1588 AHCI_CMD = AtaReq->
ahci.ahci_cmd_ptr;
1591 &(AHCI_CMD->
cfis[0]),
1605 KdPrint2((
"ahci_flags %#x\n", ahci_flags));
1609 AtaReq->
Flags &= ~REQ_FLAG_READ;
1623 KdPrint2((
" can't setup buffer\n"));
1628 AtaReq->
ahci.io_cmd_flags = ahci_flags;
1642 KdPrint2((
" return imemdiately\n"));
1678 KdPrint2((
PRINT_PREFIX "UniataAhciSendPIOCommand: cntrlr %#x:%#x dev %#x, buff %#x, len %#x, WF %#x \n",
1698 AHCI_CMD = AtaReq->
ahci.ahci_cmd_ptr;
1707 AtaReq->
Flags &= ~REQ_FLAG_READ;
1714 &(AHCI_CMD->
cfis[0]),
1724 KdPrint2((
"ahci_flags %#x\n", ahci_flags));
1733 KdPrint2((
" can't setup buffer\n"));
1738 AtaReq->
ahci.io_cmd_flags = ahci_flags;
1752 KdPrint2((
" return imemdiately\n"));
1861 KdPrint2((
"UniataAhciWaitReady: lChan %d\n", chan->lChannel));
1894 (*signature) = 0xffffffff;
1905 KdPrint((
" busy: TFD %#x\n", TFD));
1911 UniataDumpAhciPortRegs(chan);
1938 ULONG VendorID = deviceExtension->
DevID & 0xffff;
1949 KdPrint((
" No devices in all LUNs\n"));
2004 KdPrint((
" no PM supported (1 lun/chan)\n"));
2013 KdPrint((
" default to ATA ???\n"));
2030 KdPrint2((
"UniataAhciStartFR: lChan %d\n", chan->lChannel));
2049 KdPrint2((
"UniataAhciStopFR: lChan %d\n", chan->lChannel));
2055 for(
i=0;
i<1000;
i++) {
2065 KdPrint2((
"UniataAhciStopFR: timeout\n"));
2078 KdPrint2((
"UniataAhciStart: lChan %d\n", chan->lChannel));
2112 KdPrint2((
"UniataAhciCLO: lChan %d\n", chan->lChannel));
2116 CAP = chan->DeviceExtension->AHCI_CAP;
2125 for(
i=0;
i<1000;
i++) {
2134 KdPrint2((
"UniataAhciCLO: timeout\n"));
2148 KdPrint2((
"UniataAhciStop: lChan %d\n", chan->lChannel));
2152 CMD &= ~ATA_AHCI_P_CMD_ST;
2155 for(
i=0;
i<1000;
i++) {
2165 KdPrint2((
"UniataAhciStop: timeout\n"));
2194 KdPrint2((
"UniataAhciBeginTransaction: lChan %d, AtaReq %#x\n", chan->
lChannel, AtaReq));
2204 if(AtaReq->
ahci.ahci_base64) {
2208 if(AtaReq->
ahci.ahci_cmd_ptr) {
2210 AtaReq->
ahci.ahci_cmd_ptr, (
ULONG)(AtaReq->
ahci.ahci_base64),
2237 KdDump(&(AtaReq->
ahci.ahci_cmd_ptr->acmd), 16);
2239 CMD &= ~ATA_AHCI_P_CMD_ATAPI;
2257 KdPrint2((
" Send CMD START (%#x != %#x)\n",
CMD, CMD0));
2261 KdPrint2((
" No CMD START, already active\n"));
2270 for(
i=0;
i<1000000;
i++) {
2282 AtaReq->
ahci.in_status = TFD;
2322 AtaReq->
ahci.in_error = (
UCHAR)(TFD >> 8);
2325 AtaReq->
ahci.in_error = 0;
2327 AtaReq->
ahci.in_status = TFD;
2331 AtaReq->
ahci.in_bcount = (
ULONG)(RCV_FIS[12]) | ((
ULONG)(RCV_FIS[13]) << 8);
2360 if(
CI & (1 <<
tag)) {
2362 KdPrint2((
" Incomplete command, CI %#x, ACT %#x\n",
CI, ACT));
2363 KdPrint2((
" FIS status %#x, error %#x\n", RCV_FIS[2], RCV_FIS[3]));
2366 UniataDumpAhciPortRegs(chan);
2369 KdPrint2((
" Abort failed, need RESET\n"));
2372 UniataDumpAhciPortRegs(chan);
2396 KdPrint2((
"UniataAhciResume: lChan %d\n", chan->lChannel));
2406 base = chan->AHCI_CTL_PhAddr;
2446 UniataDumpAhciPortRegs(chan);
2462 KdPrint2((
"UniataAhciSuspend:\n"));
2504 PUCHAR RCV_FIS = &(chan->AhciCtlBlock->rcv_fis.rfis[0]);
2538 KdDump(RCV_FIS,
sizeof(chan->AhciCtlBlock->rcv_fis.rfis));
2606 return (
UCHAR)(TFD >> 8);
2627 prd_base64_0 = prd_base64 = 0;
2628 prd_base = (
PUCHAR)(&AtaReq->ahci_cmd0);
2629 prd_base0 = prd_base;
2634 d = (
ULONG)(prd_base64 - prd_base64_0);
2702 AtaReq->
ahci.ahci_cmd_ptr, AtaReq->
ahci.ahci_base64));
const char * SError(int e)
UCHAR const AtaCommands48[256]
UCHAR const AtaCommandFlags[256]
#define DFLAGS_ATAPI_DEVICE
#define IDE_COMMAND_ATAPI_PACKET
#define IDE_COMMAND_ATAPI_RESET
#define DFLAGS_DEVICE_PRESENT
struct _HW_DEVICE_EXTENSION * PHW_DEVICE_EXTENSION
bool NTAPI CheckIfBadBlock(IN PHW_LU_EXTENSION LunExt, IN ULONGLONG lba, IN ULONG count)
#define UNIATA_AHCI_ALT_SIG
#define ATA_AHCI_P_CMD_FR
#define ATA_AHCI_P_CMD_ST
#define ATA_AHCI_P_CMD_ACTIVE
#define ATA_AHCI_P_IX_HBD
#define IDX_AHCI_o_CylinderHighExp
#define ATA_AHCI_CMD_CLR_BUSY
#define AHCI_FIS_ALIGNEMENT_MASK
#define ATA_AHCI_P_IX_TFE
struct _IDE_AHCI_CMD * PIDE_AHCI_CMD
#define SetPciConfig4(offs, op)
#define IDX_AHCI_o_CylinderLowExp
#define AHCI_CAP_NCS_MASK
VOID NTAPI AtapiSetupLunPtrs(IN PHW_CHANNEL chan, IN PHW_DEVICE_EXTENSION deviceExtension, IN ULONG c)
#define ATA_AHCI_P_CMD_ASP
#define IDX_AHCI_o_BlockCount
#define SControl_DET_Idle
#define IDX_AHCI_P_SError
#define IDX_AHCI_o_BlockNumberExp
BOOLEAN NTAPI AtapiDmaSetup(IN PVOID HwDeviceExtension, IN ULONG DeviceNumber, IN ULONG lChannel, IN PSCSI_REQUEST_BLOCK Srb, IN PUCHAR data, IN ULONG count)
#define IDX_AHCI_o_FeatureExp
#define IDX_AHCI_o_Feature
#define AHCI_CLB_ALIGNEMENT_MASK
#define IDX_AHCI_o_CylinderHigh
#define IDX_AHCI_o_Command
#define IDX_SATA_SControl
#define SControl_IPM_NoPartialSlumber
#define IDX_AHCI_o_BlockCountExp
#define ATA_AHCI_CMD_WRITE
VOID NTAPI UniataForgetDevice(PHW_LU_EXTENSION LunExt)
ULONG DDKFASTAPI AtapiReadPort4(IN PHW_CHANNEL chan, IN ULONGIO_PTR port)
#define AHCI_CMD_ALIGNEMENT_MASK
#define ATA_AHCI_P_IX_HBF
#define IDX_AHCI_o_Control
VOID DDKFASTAPI AtapiWritePortEx4(IN PHW_CHANNEL chan, IN ULONGIO_PTR port, IN ULONG offs, IN ULONG data)
#define ATA_AHCI_P_IX_SDB
#define AHCI_FIS_TYPE_ATA_H2D
#define ATA_AHCI_P_CMD_ALPE
#define SStatus_DET_Offline
#define ATA_AHCI_P_CMD_CLO
#define ATA_AHCI_P_CMD_SLUMBER
#define ATA_AHCI_P_CMD_SUD
#define ATA_AHCI_P_IX_DHR
#define IDX_AHCI_P_SStatus
ULONG DDKFASTAPI AtapiReadPortEx4(IN PHW_CHANNEL chan, IN ULONGIO_PTR port, IN ULONG offs)
struct _IDE_AHCI_REGISTERS IDE_AHCI_REGISTERS
VOID NTAPI AtapiDmaAlloc(IN PVOID HwDeviceExtension, IN PPORT_CONFIGURATION_INFORMATION ConfigInfo, IN ULONG lChannel)
#define SControl_DET_DoNothing
#define AHCI_CAP_ISS_MASK
#define GetPciConfig4(offs, op)
#define ATA_AHCI_P_IX_INF
#define ATA_AHCI_P_IX_PRC
#define IDX_AHCI_o_DriveSelect
VOID DDKFASTAPI AtapiWritePort4(IN PHW_CHANNEL chan, IN ULONGIO_PTR port, IN ULONG data)
#define IDX_AHCI_o_CylinderLow
union _ATA_REQ * PATA_REQ
#define SControl_DET_Init
#define ATA_AHCI_CMD_RESET
ULONGIO_PTR NTAPI AtapiGetIoRange(IN PVOID HwDeviceExtension, IN PPORT_CONFIGURATION_INFORMATION ConfigInfo, IN PPCI_COMMON_CONFIG pciData, IN ULONG SystemIoBusNumber, IN ULONG rid, IN ULONG offset, IN ULONG length)
#define CTRFLAGS_AHCI_PM2
#define ATA_AHCI_P_IX_CPD
#define ATA_AHCI_P_CMD_FRE
#define ATA_AHCI_P_CMD_ATAPI
#define AHCI_CAP_NOP_MASK
#define SATA_MAX_PM_UNITS
#define ATA_AHCI_P_CMD_CR
#define CTRFLAGS_NO_SLAVE
#define IDX_AHCI_P_SControl
#define ATA_AHCI_P_CMD_POD
#define IDX_AHCI_o_BlockNumber
#define ATA_AHCI_P_CMD_PMA
_In_ PSCSI_REQUEST_BLOCK Srb
_In_ PCHAR _In_ ULONG DeviceNumber
static const WCHAR version[]
struct _SCSI_REQUEST_BLOCK SCSI_REQUEST_BLOCK
#define SRB_FUNCTION_EXECUTE_SCSI
#define SRB_FLAGS_DATA_OUT
#define SRB_FLAGS_DATA_IN
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLuint GLsizei GLsizei * length
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define IDE_STATUS_SUCCESS
#define IDE_DRIVE_SELECT_1
#define IDE_DC_RESET_CONTROLLER
#define IDX_IO1_i_CylinderLow
#define IDX_IO1_i_BlockCount
#define IDX_IO1_i_CylinderHigh
VOID NTAPI UniataAhciStartFR(IN PHW_CHANNEL chan)
VOID NTAPI UniataAhciResume(IN PHW_CHANNEL chan)
BOOLEAN NTAPI UniataAhciStop(IN PHW_CHANNEL chan)
PSCSI_REQUEST_BLOCK NTAPI BuildAhciInternalSrb(IN PVOID HwDeviceExtension, IN ULONG DeviceNumber, IN ULONG lChannel, IN PUCHAR Buffer, IN ULONG Length)
UCHAR NTAPI UniataAhciWritePM(IN PHW_CHANNEL chan, IN ULONG DeviceNumber, IN ULONG Reg, IN ULONG value)
VOID NTAPI UniataAhciStart(IN PHW_CHANNEL chan)
VOID NTAPI UniataSataWritePort4(IN PHW_CHANNEL chan, IN ULONG io_port_ndx, IN ULONG data, IN ULONG pm_port)
ULONG NTAPI UniataAhciSetupFIS_H2D(IN PHW_DEVICE_EXTENSION deviceExtension, IN ULONG DeviceNumber, IN ULONG lChannel, OUT PUCHAR fis, IN UCHAR command, IN ULONGLONG lba, IN USHORT count, IN USHORT feature)
BOOLEAN NTAPI UniataAhciReadPM(IN PHW_CHANNEL chan, IN ULONG DeviceNumber, IN ULONG Reg, OUT PULONG result)
ULONG NTAPI UniataAhciWaitReady(IN PHW_CHANNEL chan, IN ULONG timeout)
ULONG NTAPI UniataSataSoftReset(IN PVOID HwDeviceExtension, IN ULONG lChannel, IN ULONG DeviceNumber)
UCHAR NTAPI UniataAhciStatus(IN PVOID HwDeviceExtension, IN ULONG lChannel, IN ULONG DeviceNumber)
BOOLEAN NTAPI UniataAhciDetect(IN PVOID HwDeviceExtension, IN PPCI_COMMON_CONFIG pciData, IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo)
ULONG NTAPI UniataAhciHardReset(IN PVOID HwDeviceExtension, IN ULONG lChannel, OUT PULONG signature)
VOID NTAPI UniataAhciSnapAtaRegs(IN PHW_CHANNEL chan, IN ULONG DeviceNumber, IN OUT PIDEREGS_EX regs)
UCHAR NTAPI UniataAhciSendCommand(IN PVOID HwDeviceExtension, IN ULONG lChannel, IN ULONG DeviceNumber, IN USHORT ahci_flags, IN ULONG timeout)
VOID NTAPI UniataAhciReset(IN PVOID HwDeviceExtension, IN ULONG lChannel)
UCHAR NTAPI UniataSataConnect(IN PVOID HwDeviceExtension, IN ULONG lChannel, IN ULONG pm_port)
BOOLEAN NTAPI UniAtaAhciValidateVersion(IN PHW_DEVICE_EXTENSION deviceExtension, IN ULONG version, IN BOOLEAN Strict)
VOID UniataSataIdentifyPM(IN PHW_CHANNEL chan)
UCHAR NTAPI UniataAhciBeginTransaction(IN PVOID HwDeviceExtension, IN ULONG lChannel, IN ULONG DeviceNumber, IN PSCSI_REQUEST_BLOCK Srb)
UCHAR NTAPI UniataSataPhyEnable(IN PVOID HwDeviceExtension, IN ULONG lChannel, IN ULONG pm_port, IN BOOLEAN doReset)
BOOLEAN NTAPI UniataAhciStopFR(IN PHW_CHANNEL chan)
BOOLEAN NTAPI UniataAhciCLO(IN PHW_CHANNEL chan)
UCHAR NTAPI UniataAhciSendPIOCommand(IN PVOID HwDeviceExtension, IN ULONG lChannel, IN ULONG DeviceNumber, IN PSCSI_REQUEST_BLOCK Srb, IN PUCHAR data, IN ULONG length, IN UCHAR command, IN ULONGLONG lba, IN USHORT bcount, IN USHORT feature, IN USHORT ahci_flags, IN ULONG wait_flags, IN ULONG timeout)
BOOLEAN NTAPI UniataSataClearErr(IN PVOID HwDeviceExtension, IN ULONG lChannel, IN BOOLEAN do_connect, IN ULONG pm_port)
UCHAR NTAPI UniataSataWritePM(IN PHW_CHANNEL chan, IN ULONG DeviceNumber, IN ULONG Reg, IN ULONG value)
UCHAR NTAPI UniataAhciWaitCommandReady(IN PHW_CHANNEL chan, IN ULONG timeout)
BOOLEAN NTAPI UniataAhciAbortOperation(IN PHW_CHANNEL chan)
ULONG NTAPI UniataAhciSoftReset(IN PVOID HwDeviceExtension, IN ULONG lChannel, IN ULONG DeviceNumber)
UCHAR NTAPI UniataAhciSendPIOCommandDirect(IN PVOID HwDeviceExtension, IN ULONG lChannel, IN ULONG DeviceNumber, IN PSCSI_REQUEST_BLOCK Srb, IN PIDEREGS_EX regs, IN ULONG wait_flags, IN ULONG timeout)
ULONG NTAPI UniataSataReadPort4(IN PHW_CHANNEL chan, IN ULONG io_port_ndx, IN ULONG pm_port)
BOOLEAN NTAPI UniataSataReadPM(IN PHW_CHANNEL chan, IN ULONG DeviceNumber, IN ULONG Reg, OUT PULONG result)
ULONG NTAPI UniataAhciSetupFIS_H2D_Direct(IN PHW_DEVICE_EXTENSION deviceExtension, IN ULONG DeviceNumber, IN ULONG lChannel, OUT PUCHAR fis, IN PIDEREGS_EX regs)
BOOLEAN NTAPI UniataSataEvent(IN PVOID HwDeviceExtension, IN ULONG lChannel, IN ULONG Action, IN ULONG pm_port)
VOID UniataAhciSetupCmdPtr(IN OUT PATA_REQ AtaReq)
BOOLEAN NTAPI UniataAhciInit(IN PVOID HwDeviceExtension)
UCHAR NTAPI UniataAhciEndTransaction(IN PVOID HwDeviceExtension, IN ULONG lChannel, IN ULONG DeviceNumber, IN PSCSI_REQUEST_BLOCK Srb)
__inline ULONG UniataAhciUlongFromRFIS(PUCHAR RCV_FIS)
__inline ULONG UniataAhciReadChannelPort4(IN PHW_CHANNEL chan, IN ULONG io_port_ndx)
#define UNIATA_SATA_EVENT_ATTACH
__inline USHORT UniAtaAhciAdjustIoFlags(IN UCHAR command, IN USHORT ahci_flags, IN ULONG fis_size, IN ULONG DeviceNumber)
#define UNIATA_SATA_RESET_ENABLE
__inline BOOLEAN UniataAhciChanImplemented(IN PHW_DEVICE_EXTENSION deviceExtension, IN ULONG c)
__inline BOOLEAN UniataIsSATARangeAvailable(IN PHW_DEVICE_EXTENSION deviceExtension, IN ULONG lChannel)
#define UNIATA_SATA_EVENT_DETACH
#define UniataAhciWriteHostPort4(deviceExtension, io_port_ndx, data)
__inline VOID UniataAhciWriteChannelPort4(IN PHW_CHANNEL chan, IN ULONG io_port_ndx, IN ULONG data)
#define UniataAhciReadHostPort4(deviceExtension, io_port_ndx)
INTERNETFEATURELIST feature
_In_ ULONG _In_ ULONG _In_ ULONG Length
PATA_REQ AhciInternalAtaReq
IORES RegTranslation[IDX_MAX_REG]
struct _HW_LU_EXTENSION * lun[IDE_MAX_LUN_PER_CHAN]
ULONGLONG AHCI_CTL_PhAddr
PIDE_AHCI_CHANNEL_CTL_BLOCK AhciCtlBlock
PSCSI_REQUEST_BLOCK AhciInternalSrb
IORES BaseIoAddressSATA_0
ULONG DmaSegmentAlignmentMask
IDE_AHCI_CMD_LIST cmd_list[ATA_AHCI_MAX_TAGS]
struct _IDE_AHCI_PORT_REGISTERS::@1137::@1157::@1159 STS
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define ATA_FLAGS_48BIT_COMMAND
#define IDE_COMMAND_WRITE_PM
#define INTERRUPT_REASON_UNEXPECTED
ULONG NTAPI AtapiRegCheckDevValue(IN PVOID HwDeviceExtension, IN ULONG chan, IN ULONG dev, IN PCWSTR Name, IN ULONG Default)
#define UniAta_need_lba48(command, lba, count, supp48)
#define ATAPI_DEVICE(chan, dev)
#define IDX_IO2_AltStatus
#define AtapiStallExecution(dt)
ULONG NTAPI CheckDevice(IN PVOID HwDeviceExtension, IN ULONG Channel, IN ULONG deviceNumber, IN BOOLEAN ResetBus)
#define DEVNUM_NOT_SPECIFIED
#define INTERRUPT_REASON_IGNORE
#define ATA_CMD_FLAG_48supp
#define CHAN_NOT_SPECIFIED
UCHAR DDKFASTAPI WaitOnBaseBusyLong(IN struct _HW_CHANNEL *chan)
VOID NTAPI UniataInitSyncBaseIO(IN struct _HW_CHANNEL *chan)
#define IDE_COMMAND_READ_PM
#define UniAtaClearAtaReq(AtaReq)
#define INTERRUPT_REASON_OUR
#define ATA_CMD_FLAG_LBAIOsupp
struct _ATA_REQ::@1176::@1178::@1182::@1185 ahci
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action