143#define RESET_COMPLETE_CURRENT 0x00
144#define RESET_COMPLETE_ALL 0x01
145#define RESET_COMPLETE_NONE 0x02
155#ifdef UNIATA_USE_XXableInterrupts
156 #define RETTYPE_XXableInterrupts BOOLEAN
157 #define RETVAL_XXableInterrupts TRUE
159 #define RETTYPE_XXableInterrupts VOID
160 #define RETVAL_XXableInterrupts
205#define ITEMS_TO_QUERY 2
261#define AtapiWritePortN_template(_type, _Type, sz) \
265 IN PHW_CHANNEL chan, \
266 IN ULONGIO_PTR _port, \
271 if(_port >= IDX_MAX_REG) { \
272 res = (PIORES)(_port); \
275 res = &chan->RegTranslation[_port]; \
277 KdPrint(("invalid io write request @ ch %x, res* %x\n", chan, _port)); \
281 KdPrint(("PROC io write request @ ch %x, res* %x\n", chan, _port)); \
285 ScsiPortWritePort##_Type((_type*)(ULONGIO_PTR)(res->Addr), data); \
288 ScsiPortWriteRegister##_Type((_type*)(ULONG_PTR)(res->Addr), data); \
297#define AtapiWritePortExN_template(_type, _Type, sz) \
300AtapiWritePortEx##sz( \
301 IN PHW_CHANNEL chan, \
302 IN ULONGIO_PTR _port, \
308 if(_port >= IDX_MAX_REG) { \
309 res = (PIORES)(_port); \
312 res = &chan->RegTranslation[_port]; \
314 KdPrint(("invalid io write request @ ch %x, res* %x, offs %x\n", chan, _port, offs)); \
318 KdPrint(("PROC io write request @ ch %x, res* %x, offs %x\n", chan, _port, offs)); \
322 ScsiPortWritePort##_Type((_type*)(ULONGIO_PTR)(res->Addr+offs), data); \
325 ScsiPortWriteRegister##_Type((_type*)(ULONG_PTR)(res->Addr+offs), data); \
334#define AtapiReadPortN_template(_type, _Type, sz) \
338 IN PHW_CHANNEL chan, \
339 IN ULONGIO_PTR _port \
343 if(_port >= IDX_MAX_REG) { \
344 res = (PIORES)(_port); \
347 res = &chan->RegTranslation[_port]; \
349 KdPrint(("invalid io read request @ ch %x, res* %x\n", chan, _port)); \
350 return (_type)(-1); \
353 KdPrint(("PROC io read request @ ch %x, res* %x\n", chan, _port)); \
358 return ScsiPortReadPort##_Type((_type*)(ULONGIO_PTR)(res->Addr)); \
361 return ScsiPortReadRegister##_Type((_type*)(ULONG_PTR)(res->Addr)); \
369#define AtapiReadPortExN_template(_type, _Type, sz) \
372AtapiReadPortEx##sz( \
373 IN PHW_CHANNEL chan, \
374 IN ULONGIO_PTR _port, \
379 if(_port >= IDX_MAX_REG) { \
380 res = (PIORES)(_port); \
383 res = &chan->RegTranslation[_port]; \
385 KdPrint(("invalid io read request @ ch %x, res* %x, offs %x\n", chan, _port, offs)); \
386 return (_type)(-1); \
389 KdPrint(("PROC io read request @ ch %x, res* %x, offs %x\n", chan, _port, offs)); \
393 return ScsiPortReadPort##_Type((_type*)(ULONGIO_PTR)(res->Addr+offs)); \
396 return ScsiPortReadRegister##_Type((_type*)(ULONG_PTR)(res->Addr+offs)); \
404#define AtapiReadPortBufferN_template(_type, _Type, sz) \
407AtapiReadBuffer##sz( \
408 IN PHW_CHANNEL chan, \
409 IN ULONGIO_PTR _port, \
419 (*((_type*)Buffer)) = AtapiReadPort##sz(chan, _port); \
421 Buffer = ((_type*)Buffer)+1; \
422 UniataNanoSleep(Timing); \
427 if(_port >= IDX_MAX_REG) { \
428 res = (PIORES)(_port); \
431 res = &chan->RegTranslation[_port]; \
433 KdPrint(("invalid io read request @ ch %x, res* %x\n", chan, _port)); \
438 ScsiPortReadPortBuffer##_Type((_type*)(ULONGIO_PTR)(res->Addr), (_type*)Buffer, Count); \
442 (*((_type*)Buffer)) = ScsiPortReadRegister##_Type((_type*)(ULONG_PTR)(res->Addr)); \
444 Buffer = ((_type*)Buffer)+1; \
449#define AtapiWritePortBufferN_template(_type, _Type, sz) \
452AtapiWriteBuffer##sz( \
453 IN PHW_CHANNEL chan, \
454 IN ULONGIO_PTR _port, \
464 AtapiWritePort##sz(chan, _port, *((_type*)Buffer)); \
465 Buffer = ((_type*)Buffer)+1; \
467 UniataNanoSleep(Timing); \
472 if(_port >= IDX_MAX_REG) { \
473 res = (PIORES)(_port); \
476 res = &chan->RegTranslation[_port]; \
478 KdPrint(("invalid io write request @ ch %x, res* %x\n", chan, _port)); \
483 ScsiPortWritePortBuffer##_Type((_type*)(ULONGIO_PTR)(res->Addr), (_type*)Buffer, Count); \
487 ScsiPortWriteRegister##_Type((_type*)(ULONG_PTR)(res->Addr), *((_type*)Buffer)); \
489 Buffer = ((_type*)Buffer)+1; \
512 for (
i = 0;
i < 0x10000;
i++) {
576FillDeviceIdentificationString(
581 ULONG IdentifierLen, FirstWordLen;
588#define IDENTIFIER_LETTER(Identifier, i) (((PUCHAR)Identifier)[(i) ^ 1])
590 for (IdentifierLen = 20; IdentifierLen > 0 && IDENTIFIER_LETTER(IdentifyData->ModelNumber, IdentifierLen - 1) ==
' '; IdentifierLen--)
594 for (FirstWordLen = 0; IDENTIFIER_LETTER(IdentifyData->ModelNumber, FirstWordLen) !=
' ' && FirstWordLen < IdentifierLen; FirstWordLen++)
596 if (FirstWordLen <= 8)
598 for (
i = 0;
i < FirstWordLen;
i++)
599 InquiryData->VendorId[
i] = IDENTIFIER_LETTER(IdentifyData->ModelNumber,
i);
600 for (
i = FirstWordLen + 1;
i < IdentifierLen;
i++)
601 InquiryData->ProductId[
i - FirstWordLen - 1] = IDENTIFIER_LETTER(IdentifyData->ModelNumber,
i);
606 if (IdentifierLen <= 16)
608 for (
i = 0;
i < IdentifierLen;
i++)
609 InquiryData->ProductId[
i] = IDENTIFIER_LETTER(IdentifyData->ModelNumber,
i);
614 for (
i = 0;
i < 24;
i += 2)
615 MOV_DW_SWP(InquiryData->DeviceIdentificationString[
i], ((
PUCHAR)IdentifyData->ModelNumber)[
i]);
728 for (
i=0;
i<2000;
i++) {
779 for (
i=0;
i<20000;
i++) {
804 for (
i=0;
i<1000;
i++) {
825 for (
i=0;
i<2;
i++) {
847 UCHAR dma_status = 0;
849 UCHAR statusByte0, statusByte2;
863 for (
i = 0;
i < 1000;
i++) {
878 statusByte0 = statusByte2;
917 chan->last_devsel = -1;
924 if(chan && chan->DeviceExtension) {
925 dma_status =
GetDmaStatus(chan->DeviceExtension, chan->lChannel);
957 chan->last_devsel = -1;
979 PHW_CHANNEL chan = &(deviceExtension->chan[lChannel]);
984 KdPrint2((
PRINT_PREFIX "AtaCommand48: cntrlr %#x:%#x dev %#x, cmd %#x, lba %#I64x count %#x feature %#x\n",
1083 switch (wait_flags) {
1101 for (
i=0;
i<30 * 1000;
i++) {
1104 statusByte =
UniataIsIdle(deviceExtension, statusByte);
1143 statusByte &= ~IDE_STATUS_ERROR;
1222 if (
ident->PioTimingsValid) {
1230 if (
ident->PioCycleTimingMode == 2)
1232 if (
ident->PioCycleTimingMode == 1)
1234 if (
ident->PioCycleTimingMode == 0)
1243 if (
ident->MultiWordDMASupport & 0x04)
1245 if (
ident->MultiWordDMASupport & 0x02)
1247 if (
ident->MultiWordDMASupport & 0x01)
1256 if (!
ident->UdmaModesValid)
1258 if (
ident->UltraDMASupport & 0x40)
1260 if (
ident->UltraDMASupport & 0x20)
1262 if (
ident->UltraDMASupport & 0x10)
1264 if (
ident->UltraDMASupport & 0x08)
1266 if (
ident->UltraDMASupport & 0x04)
1268 if (
ident->UltraDMASupport & 0x02)
1270 if (
ident->UltraDMASupport & 0x01)
1278 if(!
ident->SataCapabilities ||
1279 ident->SataCapabilities == 0xffff) {
1305 ULONG MiniportTimerValue;
1317 chan = &(deviceExtension->
chan[lChannel]);
1329 HwScsiTimer(HwDeviceExtension);
1344 chan = &deviceExtension->
chan[lChannel];
1357 if(!MiniportTimerValue)
1358 MiniportTimerValue = 1;
1393 KdPrint2((
PRINT_PREFIX "AtapiQueueTimerDpc: dt=%d for lChn %#x\n", MiniportTimerValue, lChannel));
1397 time.QuadPart += MiniportTimerValue*10;
1403 chan = prev_chan =
NULL;
1406 chan = &(deviceExtension->
chan[
i]);
1412 chan = &(deviceExtension->
chan[lChannel]);
1424 MiniportTimerValue = 1;
1429 KdPrint2((
PRINT_PREFIX "AtapiQueueTimerDpc: dt=%d for lChn %#x\n", MiniportTimerValue, lChannel));
1432 MiniportTimerValue);
1446 UCHAR statusByteAlt;
1454 " Reg_%#x (%#x) = %#x\n",
1456 chan->RegTranslation[
IDX_IO1+
j].Addr,
1459 if(!chan->RegTranslation[
IDX_BM_IO].Addr) {
1465 " BM_%#x (%#x) = %#x\n",
1482 if(chan->DeviceExtension->HwFlags &
UNIATA_AHCI) {
1488 UCHAR statusByteAlt;
1493 ((
PUCHAR)regs)[
j-1] = statusByteAlt;
1500 ((
PUCHAR)regs)[
j-1] = statusByteAlt;
1502 ((
PUCHAR)regs)[
j+8-1] = statusByteAlt;
1539 ULONG waitCount = 50000;
1648 statusByte =
UniataIsIdle(deviceExtension, statusByte) & ~IDE_STATUS_INDEX;
1694 for (;
j < 4*2;
j++) {
1968 (NumOfSectors < deviceExtension->FullIdentifyData.UserAddressableSectors)) {
1977 NumOfSectors = cylinders *
2005 goto skip_lba_staff;
2023 NativeNumOfSectors = cylinders *
2029 if(NativeNumOfSectors > NumOfSectors) {
2031 NumOfSectors = NativeNumOfSectors;
2037 ULONG hNativeNumOfSectors;
2055 NativeNumOfSectors |=
2057 hNativeNumOfSectors=
2060 ((
PULONG)&NativeNumOfSectors)[1] = hNativeNumOfSectors;
2068 if((NativeNumOfSectors & 0xffffff) == ((NativeNumOfSectors >> 24) & 0xffffff)) {
2088 if((NativeNumOfSectors & 0xffffff) == ((NativeNumOfSectors >> 24) & 0xffffff)) {
2090 NativeNumOfSectors = 0;
2095 NativeNumOfSectors > NumOfSectors) {
2103 NumOfSectors = NativeNumOfSectors;
2109 if(NumOfSectors < 0x2100000 /*&& NumOfSectors > 31*1000*1000*/) {
2128 if(NativeNumOfSectors > NumOfSectors) {
2136 NumOfSectors = NativeNumOfSectors;
2172 tmp_cylinders = NumOfSectors / (255*63);
2173 if(tmp_cylinders < 0xffff) {
2198 cylinders = NumOfSectors / (255*63);
2232 cylinders = tmp_cylinders;
2367 statusByte =
UniataIsIdle(deviceExtension, statusByte);
2371 errorByte, statusByte));
2435 ULONG ChannelCtrlFlags;
2436 UCHAR dma_status = 0;
2440 ULONG VendorID = deviceExtension->
DevID & 0xffff;
2462 for (;
j < numberChannels;
j++) {
2465 chan = &(deviceExtension->
chan[
j]);
2469 KdPrint2((
PRINT_PREFIX " CompleteType %#x, Luns %d, chan %#x, sptr %#x, flags %#x\n", CompleteType, MaxLuns, chan, &chan, ChannelCtrlFlags));
2480 LunExt = chan->
lun[
i];
2498 CurSrb = AtaReq->
Srb;
2521 senseBuffer->
Valid = 1;
2524 KdPrint2((
PRINT_PREFIX "AtapiResetController: report SCSI_SENSE_UNIT_ATTENTION + SCSI_ADSENSE_BUS_RESET\n"));
2602 for (
i = 0;
i < MaxLuns;
i++) {
2603 chan->
lun[
i]->PowerState = 0;
2610 UniataDumpAhciPortRegs(chan);
2649 mask = 1 << chan->
lun[0]->SATA_lun_map;
2651 mask |= (1 << chan->
lun[1]->SATA_lun_map);
2667 if (((tmp16 >> pshift) &
mask) ==
mask) {
2695 offs = (ChipFlags &
NV4OFF) ? 0x0440 : 0x0010;
2699 if(ChipFlags &
NVQ) {
2711 if(ChipFlags &
NVQ) {
2730 offset = ((Channel & 1) << 7) + ((Channel & 2) << 8);
2796 for (
i = 0;
i < MaxLuns;
i++) {
2843 statusByte =
UniataIsIdle(deviceExtension, statusByte);
2846 "no drive, status %#x\n",
2887 "AtapiResetController: Status after soft reset %#x\n",
2921 KdPrint2((
PRINT_PREFIX "AtapiResetController: deviceExtension->chan[%d].DisableIntr %d -> 1\n",
2960 UCHAR errorByte = 0;
2971 errorByte = AtaReq->
ahci.in_error;
2978 "MapError: Error register is %#x\n",
2983 switch (errorByte >> 4) {
2987 "ATAPI: No sense information\n"));
2995 "ATAPI: Recovered error\n"));
3003 "ATAPI: Device not ready\n"));
3011 "ATAPI: Media error\n"));
3019 "ATAPI: Hardware error\n"));
3027 "ATAPI: Illegal request\n"));
3035 "ATAPI: Unit attention\n"));
3043 "ATAPI: Data protect\n"));
3051 "ATAPI: Blank check\n"));
3058 "Atapi: Command Aborted\n"));
3066 "ATAPI: Invalid sense information\n"));
3081 "IDE: Media change\n"));
3090 senseBuffer->
Valid = 1;
3101 "IDE: Command abort\n"));
3110 senseBuffer->
Valid = 1;
3124 "IDE: End of media\n"));
3133 senseBuffer->
Valid = 1;
3150 "IDE: Illegal length\n"));
3158 senseBuffer->
Valid = 1;
3171 "IDE: Bad block\n"));
3179 senseBuffer->
Valid = 1;
3191 "IDE: Id not found\n"));
3200 senseBuffer->
Valid = 1;
3214 "IDE: Media change\n"));
3223 senseBuffer->
Valid = 1;
3235 "IDE: Data error\n"));
3249 senseBuffer->
Valid = 1;
3263 "MapError: ErrorCount >= MAX_ERRORS\n"));
3270 "MapError: Disabling 32-bit PIO and Multi-sector IOs\n"));
3274 "ScsiPortLogError: devExt %#x, Srb %#x, P:T:D=%d:%d:%d, MsgId %#x (%d)\n",
3369 for (
c = 0;
c < numberChannels;
c++) {
3384 UCHAR statusByte, errorByte;
3385 PHW_CHANNEL chan = &(deviceExtension->chan[lChannel]);
3388 ULONG PreferedMode = 0xffffffff;
3402 LunExt = chan->
lun[
i];
3418 statusByte =
AtaCommand(deviceExtension,
i, lChannel,
3429 KdPrint2((
PRINT_PREFIX "AtapiHwInitialize: Error setting multiple mode. Status %#x, error byte %#x\n",
3433 statusByte =
AtaCommand(deviceExtension,
i, lChannel,
3441 KdPrint2((
PRINT_PREFIX "AtapiHwInitialize: Error disabling multiple mode. Status %#x, error byte %#x\n",
3450 "AtapiHwInitialize: Using Multiblock on Device %d. Blocks / int - %d\n",
3460 statusByte =
AtaCommand(deviceExtension,
i, lChannel,
3467 "AtapiHwInitialize: Enable read/write cacheing on Device %d failed\n",
3475 statusByte =
AtaCommand(deviceExtension,
i, lChannel,
3484 statusByte =
AtaCommand(deviceExtension,
i, lChannel,
3490 "AtapiHwInitialize: Enable write cacheing on Device %d failed\n",
3498 statusByte =
AtaCommand(deviceExtension,
i, lChannel,
3511 statusByte =
AtaCommand(deviceExtension,
i, lChannel,
3517 "AtapiHwInitialize: Enable APM on Device %d failed\n",
3522 statusByte =
AtaCommand(deviceExtension,
i, lChannel,
3527 if(LunExt->
IdentifyData.FeaturesSupport.AutoAcoustic) {
3531 statusByte =
AtaCommand(deviceExtension,
i, lChannel,
3537 "AtapiHwInitialize: Enable Acoustic Mgmt on Device %d failed\n",
3542 statusByte =
AtaCommand(deviceExtension,
i, lChannel,
3550 statusByte =
AtaCommand(deviceExtension,
i, lChannel,
3556 "AtapiHwInitialize: standby timer on Device %d failed\n",
3571 for (
j = 0;
j < 26;
j += 2) {
3580 if (vendorId[12] ==
'C') {
3592 if((PreferedMode == 0xffffffff) || (PreferedMode > chan->
MaxTransferMode)) {
3650 }
while (waitCount--);
3678 if (MechanismStatus) {
3679 LunExt->
DiscsPresent = MechanismStatus->NumberAvailableSlots;
3713 ULONG stringLength = 0;
3714 ULONG keyWordLength = 0;
3736 if (keyWordLength > stringLength) {
3748 while (*cptr ==
' ' || *cptr ==
'\t') {
3752 if (*cptr ==
'\0') {
3758 while ((*cptr == *kptr) ||
3759 (*cptr >=
'A' && *cptr <=
'Z' && *cptr + (
'a' -
'A') == *kptr) ||
3760 (*cptr >=
'a' && *cptr <=
'z' && *cptr - (
'a' -
'A') == *kptr)) {
3764 if (*cptr ==
'\0') {
3770 if (*kptr ==
'\0') {
3773 while (*cptr ==
' ' || *cptr ==
'\t') {
3782 if (*cptr++ ==
';') {
3783 goto ContinueSearch;
3792 while ((*cptr ==
' ') || (*cptr ==
'\t')) {
3796 if (*cptr ==
'\0') {
3804 goto ContinueSearch;
3808 if ((*cptr ==
'0') && ((*(cptr + 1) ==
'x') || (*(cptr + 1) ==
'X'))) {
3813 if (*(cptr +
index) ==
' ' ||
3814 *(cptr +
index) ==
'\t' ||
3815 *(cptr +
index) ==
';') {
3819 if ((*(cptr +
index) >=
'0') && (*(cptr +
index) <=
'9')) {
3822 if ((*(cptr +
index) >=
'a') && (*(cptr +
index) <=
'f')) {
3824 }
else if ((*(cptr +
index) >=
'A') && (*(cptr +
index) <=
'F')) {
3837 if (*(cptr +
index) ==
' ' ||
3838 *(cptr +
index) ==
'\t' ||
3839 *(cptr +
index) ==
';') {
3843 if ((*(cptr +
index) >=
'0') && (*(cptr +
index) <=
'9')) {
3858 if (*cptr++ ==
';') {
3859 goto ContinueSearch;
3899 goto ReturnCallback;
3908 goto ReturnEnableIntr;
3949 goto ReturnCallback;
3954 if(CrNtInterlockedExchangeAdd(&(chan->
DisableIntr), 0)) {
3957#ifdef UNIATA_USE_XXableInterrupts
3987 chan = &(deviceExtension->
chan[
c]);
4060 checked |= ~deviceExtension->AHCI_PI;
4093 if((checked>>
c) & 0x01)
4100 checked |= (
ULONG)1 <<
c;
4104 if(CrNtInterlockedExchangeAdd(&(deviceExtension->
chan[
c].
DisableIntr), 0)) {
4194 IN PVOID Isr2HwDeviceExtension
4226 checked |= ~deviceExtension->AHCI_PI;
4241 if((checked>>
c) & 0x01)
4244 checked |= (
ULONG)1 <<
c;
4246 if(CrNtInterlockedExchangeAdd(&(deviceExtension->
chan[
c].
DisableIntr), 0)) {
4344 chan = &(deviceExtension->
chan[
c]);
4416 chan = &(deviceExtension->
chan[
c]);
4468 chan = &(deviceExtension->
chan[
c]);
4497 chan->ExpectingInterrupt = Expecting;
4499 chan->DeviceExtension->ExpectingInterrupt++;
4501 if(chan->DeviceExtension->ExpectingInterrupt) {
4502 chan->DeviceExtension->ExpectingInterrupt--;
4521 ULONG VendorID = deviceExtension->
DevID & 0xffff;
4525 ULONG pr_status = 0;
4526 UCHAR dma_status = 0;
4529 UCHAR statusByte = 0;
4539 UCHAR interruptReason;
4546 Channel = (
UCHAR)(deviceExtension->
Channel + lChannel);
4556 return OurInterrupt;
4581 return OurInterrupt;
4616 ((Channel) ? 0x00004000 : 0x00000400))) {
4632 ULONG stat_reg = (ChipFlags &
PRG2) ? 0x60 : 0x6c;
4636 if(
status & (1 << (Channel+1))) {
4648 if(pr_status & (0x11 << Channel)) {
4653 if(!(
status & (0x01 << Channel))) {
4674 ULONG offs = (ChipFlags &
NV4OFF) ? 0x0440 : 0x0010;
4678 if(ChipFlags &
NVQ) {
4688 if(((pr_status & (0x0cUL <<
shift)) == (0x04UL <<
shift)) ) {
4692 if((pr_status & (0x08UL <<
shift)) &&
4693 !((pr_status & (0x04UL <<
shift) &&
4698 if(!(pr_status & (0x01UL <<
shift))) {
4721 if(reg32 == 0xffffffff) {
4747 return OurInterrupt;
4750 goto skip_dma_stat_check;
4758 (Channel ? 0x08 : 0x04))) {
4781 goto skip_dma_stat_check;
4838 SingleBlockIntr =
TRUE;
4876 return OurInterrupt;
4932 return OurInterrupt;
4935#ifndef UNIATA_PIO_ONLY
4945 if(SingleBlockIntr) {
4965 return OurInterrupt;
4969 return OurInterrupt;
4994 UCHAR dma_status = 0;
4997 UCHAR statusByte = 0,interruptReason;
5008 ULONG TimerValue = 1000;
5009 ULONG TotalTimerValue = 0;
5010#ifdef UNIATA_USE_XXableInterrupts
5037 Channel = (
UCHAR)(deviceExtension->
Channel + lChannel);
5057 goto enqueue_next_req;
5069 goto ServiceInterrupt;
5096 goto ServiceInterrupt;
5098 switch(OldReqState) {
5106 goto ServiceInterrupt;
5112 if((!DmaTransfer && !atapiDev) || deviceExtension->
DriverMustPoll) {
5120 goto ServiceInterrupt;
5122#ifdef UNIATA_USE_XXableInterrupts
5140 goto ServiceInterrupt;
5160#ifdef UNIATA_USE_XXableInterrupts
5194 if(AtaReq && InDpc) {
5259 UniataDumpAhciPortRegs(chan);
5265 UniataDumpAhciPortRegs(chan);
5295 goto ReturnEnableIntr;
5300 k = (InDpc && UseDpc) ? 1000 : 2;
5302 for (
i = 0;
i <
k;
i++) {
5311 if (!InDpc && UseDpc &&
i == 2) {
5322 goto ServiceInterrupt;
5325 if (InDpc &&
i ==
k) {
5328 " Resetting due to BUSY on entry - %#x.\n",
5330 goto IntrPrepareResetController;
5378 TotalTimerValue += TimerValue;
5415 switch(OldReqState) {
5436 UniataDumpAhciPortRegs(chan);
5444 UniataDumpAhciPortRegs(chan);
5455 UniataDumpAhciPortRegs(chan);
5489 for (
k = atapiDev ? 0 : 200;
k;
k--) {
5544 AtaReq->
Flags &= ~REQ_FLAG_DMA_OPERATION;
5658 for (
k = 0;
k < 5000;
k++) {
5672 goto ServiceInterrupt;
5681IntrPrepareResetController:
5683 goto ReturnEnableIntr;
5697 KdPrint2((
PRINT_PREFIX "AtapiInterrupt: i-reason=%d, status=%#x\n", interruptReason, statusByte));
5735 goto ReturnEnableIntr;
5755 "AtapiInterrupt: %d words requested; %d words xferred\n",
5764 "AtapiInterrupt: Write underrun\n"));
5771 if (AtaReq->
WordsLeft < wordsThisInterrupt) {
5776 wordCount = wordsThisInterrupt;
5785 "IdeIntr: DMA tmp INTR %#x vs %#x\n", AtaReq->
WordsLeft, wordCount));
5790 goto ReturnEnableIntr;
5805 "AtapiInterrupt: Write interrupt\n"));
5810 || (wordCount & 1)) {
5826 "AtapiInterrupt: Int reason %#x, but srb is for a read %#x.\n",
5835 "AtapiInterrupt: Try ATAPI reset\n"));
5856 goto ReturnEnableIntr;
5880 "AtapiInterrupt: %d words requested; %d words xferred\n",
5894 if (AtaReq->
WordsLeft < wordsThisInterrupt) {
5899 wordCount = wordsThisInterrupt;
5907 "IdeIntr: DMA tmp INTR %#x vs %#x\n", AtaReq->
WordsLeft, wordCount));
5912 goto ReturnEnableIntr;
5933 "IdeIntr: unaligned ATAPI %#x Words\n", wordCount));
5937 "IdeIntr: pre-Read %#x Dwords\n", wordCount/2));
5951 "IdeIntr: Read %#x words\n", wordCount));
5959 KdPrint2((
"IdeIntr: PIO Read AtaReq->DataBuffer %#x, srb->DataBuffer %#x\n", AtaReq->
DataBuffer, (srb ? srb->
DataBuffer : (
void*)-1) ));
5975 for (
i = 0;
i < 2;
i++) {
5987 "AtapiInterrupt: Int reason %#x, but srb is for a read %#x.\n",
6022#ifndef UNIATA_INIT_CHANGERS
6073 KdPrint2((
PRINT_PREFIX "AtapiInterrupt: early complete + underrun ? status %x\n", statusByte));
6082 goto continue_read_drq;
6087 goto ReturnEnableIntr;
6116#ifdef UNIATA_DUMP_ATAPI
6122 PCHAR ModeSelectData;
6127 ScsiCommand =
Cdb->
CDB6.OperationCode;
6131 if(CdbDataLen > 0x1000) {
6132 CdbDataLen = 0x1000;
6136 KdPrint2((
"DeviceID+VendorID/Rev %#x/%#x\n", deviceExtension->
DevID, deviceExtension->
RevID));
6141 KdPrint((
"Complete SCSI Command %2.2x\n", ScsiCommand));
6147 ModeSelectData = CdbData+4;
6148 KdDump(CdbData, CdbDataLen);
6153 ModeSelectData = CdbData+8;
6154 KdDump(CdbData, CdbDataLen);
6157 KdPrint((
"Read buffer from device:\n"));
6158 KdDump(CdbData, CdbDataLen);
6181#ifdef UNIATA_INIT_CHANGERS
6214 goto ReturnEnableIntr;
6245#ifdef UNIATA_INIT_CHANGERS
6278 goto ReturnEnableIntr;
6318 }
else if(!DmaTransfer) {
6325 for (
i = 0;
i < 5*30;
i++) {
6339 goto ServiceInterrupt;
6349 "AtapiInterrupt: Resetting due to BSY still up - %#x.\n",
6351 goto IntrPrepareResetController;
6383 for (
i = 0;
i < 200;
i++) {
6397 goto ServiceInterrupt;
6407 goto IntrPrepareResetController;
6411 KdPrint2((
"IdeIntr: ATAPI Read AtaReq->DataBuffer %#x, srb->DataBuffer %#x, len %#x\n",
6416 KdPrint2((
"IdeIntr: Can't sync DMA and PIO buffers\n"));
6456 AtaReq->
Flags &= ~REQ_FLAG_DMA_OPERATION;
6481 senseBuffer->
Valid = 1;
6530 goto IntrCompleteReq;
6540 for (
i = 0;
i < 5;
i++) {
6564 goto ServiceInterrupt;
6598 goto ReturnEnableIntr;
6603 KdPrint2((
PRINT_PREFIX "AtapiInterrupt: Unexpected ATAPI interrupt. InterruptReason %#x. Status %#x.\n",
6631 if(CrNtInterlockedExchangeAdd(&(chan->
DisableIntr), 0)) {
6633#ifdef UNIATA_USE_XXableInterrupts
6657 KdPrint2((
PRINT_PREFIX "AtapiInterrupt: exiting, UseDpc=%d, NoStartIo=%d\n", UseDpc, NoStartIo));
6660 if(!UseDpc && !NoStartIo) {
6716 "IdeSendSmartCommand: bCommandReg != SMART_CMD\n"));
6724 chan = &(deviceExtension->
chan[
c]);
6737 "IdeSendSmartCommand: wrong buffer size\n"));
6745 "IdeSendSmartCommand: Returning BUSY status\n"));
6783 "IdeSendSmartCommand: Returning BUSY status\n"));
6825 UCHAR drvSelect,sectorNumber;
6836 return startingSector;
6852 cylinder, drvSelect, sectorNumber, (*max_bcount)));
6865 ULONG drvSelect,sectorNumber;
6876 drvSelect = (
UCHAR)((
lba >> 24) & 0xf);
6877 sectorNumber = (
UCHAR)(
lba & 0xff);
6879 lba = sectorNumber-1 +
6919 ULONG max_bcount = 0;
6920 ULONG wordCount = 0;
6921 UCHAR statusByte,statusByte2;
6945 AtaReq->
Flags &= ~REQ_FLAG_DMA_OPERATION;
6951 KdPrint2((
PRINT_PREFIX "IdeReadWrite (Chained REQ): Starting sector %I64x, OrigWordsRequested %#x, WordsTransfered %#x, DevSize %#x\n",
6987 KdPrint2((
PRINT_PREFIX "IdeReadWrite (Orig REQ): Starting sector %I64x, OrigWordsRequested %#x, DevSize %#x\n",
7000 KdPrint2((
PRINT_PREFIX "IdeReadWrite (REQ): Starting sector is %I64x, Number of WORDS %#x, DevSize %#x\n",
7045 &(AtaReq->
ahci.ahci_cmd_ptr->cfis[0]),
7084 AtaReq->
Flags &= ~REQ_FLAG_DMA_OPERATION;
7188 "IdeReadWrite: error sending command (%#x)\n",
7192 "IdeReadWrite: DRQ never asserted (%#x)\n",
7216 "IdeReadWrite: Write %#x words\n", wordCount));
7226 "IdeReadWrite: Write %#x Dwords\n", wordCount/2));
7290 "IdeVerify: Total sectors %#I64x\n",
7310 "IdeVerify: Starting sector %#I64x. Number of blocks %#x\n",
7317 "IdeVerify: Ending sector %#I64x\n",
7324 "IdeVerify: Truncating request to %#x blocks\n",
7325 sectors - startingSector - 1));
7391 UCHAR statusByte,statusByte0,byteCountLow,byteCountHigh;
7392 UCHAR interruptReason;
7406#ifdef UNIATA_DUMP_ATAPI
7411 PCHAR ModeSelectData;
7415 ScsiCommand =
Cdb->
CDB6.OperationCode;
7419 if(CdbDataLen > 0x1000) {
7420 CdbDataLen = 0x1000;
7424 KdPrint2((
"DeviceID+VendorID/Rev %#x/%#x\n", deviceExtension->
DevID, deviceExtension->
RevID));
7429 KdPrint((
"SCSI Command %2.2x\n", ScsiCommand));
7433 KdPrint((
"Write10, LBA %2.2x%2.2x%2.2x%2.2x\n",
7441 KdPrint((
"Write12, LBA %2.2x%2.2x%2.2x%2.2x\n",
7449 KdPrint((
"Write16, LBA %2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x\n",
7463 ModeSelectData = CdbData+4;
7464 KdDump(CdbData, CdbDataLen);
7469 ModeSelectData = CdbData+8;
7470 KdDump(CdbData, CdbDataLen);
7473 KdPrint((
"Send buffer to device:\n"));
7474 KdDump(CdbData, CdbDataLen);
7508#ifdef UNIATA_INIT_CHANGERS
7531#ifdef UNIATA_INIT_CHANGERS
7619 AtaReq->
Flags &= ~REQ_FLAG_RW_MASK;
7626 AtaReq->
Flags &= ~REQ_FLAG_RW_MASK;
7628 KdPrint((
" assume 0-transfer\n"));
7694 goto call_dma_setup;
7750 AtaReq->
Flags &= ~REQ_FLAG_DMA_OPERATION;
7767 &(AtaReq->
ahci.ahci_cmd_ptr->cfis[0]),
7798 AtaReq->
Flags &= ~REQ_FLAG_DMA_OPERATION;
7802 dma_reinited =
TRUE;
7818 AtaReq->
Flags &= ~REQ_FLAG_DMA_OPERATION;
7828 AtaReq->
Flags &= ~REQ_FLAG_DMA_OPERATION;
7835 AtaReq->
Flags &= ~REQ_FLAG_DMA_OPERATION;
7860 }
else if(
Srb->
Lun > 0) {
7918 KdPrint2((
PRINT_PREFIX "AtapiSendCommand: DSC not set. %#x => SRB_STATUS_PENDING\n",statusByte));
7931 KdPrint3((
PRINT_PREFIX "AtapiSendCommand: Entered with status (%#x). Attempting to recover.\n",
8025 byteCountLow = byteCountHigh = 0xFF;
8031 KdPrint3((
PRINT_PREFIX "AtapiSendCommand: F:%#x, CntHL:%#x:%#x.\n", FeatureReg, byteCountHigh, byteCountLow));
8058 statusByte0 = statusByte;
8103 for(
i=0;
i<5000;
i++) {
8131 if(statusByte >> 4) {
8140 KdPrint3((
PRINT_PREFIX "AtapiSendCommand: ready for packet, status %#x, i=%d\n", interruptReason,
i));
8185 if(statusByte >> 4) {
8225ULONG check_point = 0;
8226#define SetCheckPoint(cp) { check_point = (cp) ; }
8228#define SetCheckPoint(cp)
8252 UCHAR statusByte,errorByte;
8292 chan = &(deviceExtension->
chan[lChannel]);
8309 goto default_no_prep;
8339 "IdeSendCommand: SCSIOP_INQUIRY PATH:LUN:TID = %#x:%#x:%#x\n",
8347 "IdeSendCommand: SCSIOP_INQUIRY rejected\n"));
8355 "IdeSendCommand: SCSIOP_INQUIRY ok\n"));
8363 "IdeSendCommand: SCSIOP_INQUIRY rejected (2)\n"));
8372 "IdeSendCommand: SCSIOP_INQUIRY device have gone\n"));
8390 "RemovableMedia\n"));
8397 "RelativeAddressing\n"));
8404 FillDeviceIdentificationString(inquiryData, identifyData);
8406 for (
i = 0;
i < 24;
i += 2) {
8418 for (
i = 0;
i < 4;
i += 2) {
8433 "IdeSendCommand: SCSIOP_REPORT_LUNS PATH:LUN:TID = %#x:%#x:%#x\n",
8455 "IdeSendCommand: SCSIOP_MODE_SENSE PATH:LUN:TID = %#x:%#x:%#x\n",
8544 "IdeSendCommand: SCSIOP_TEST_UNIT_READY PATH:LUN:TID = %#x:%#x:%#x\n",
8591 "** IdeSendCommand: SCSIOP_READ_CAPACITY PATH:LUN:TID = %#x:%#x:%#x\n",
8614 "** IDE disk %#x - #sectors %#x, #heads %#x, #cylinders %#x\n",
8628 "** IdeSendCommand: SCSIOP_READ_CAPACITY PATH:LUN:TID = %#x:%#x:%#x\n",
8646 "** IDE disk %#x - #sectors %#x, #heads %#x, #cylinders %#x (16)\n",
8663 "IdeSendCommand: SCSIOP_VERIFY PATH:LUN:TID = %#x:%#x:%#x\n",
8677 "IdeSendCommand: SCSIOP_%s PATH:LUN:TID = %#x:%#x:%#x\n",
8680 AtaReq->
Flags &= ~REQ_FLAG_RW_MASK;
8691 "IdeSendCommand: SCSIOP_START_STOP_UNIT immed %d PATH:LUN:TID = %#x:%#x:%#x\n",
8772 senseBuffer->
Valid = 1;
8826 "IdeSendCommand: SCSIOP_REQUEST_SENSE PATH:LUN:TID = %#x:%#x:%#x\n",
8855 "IdeSendCommand: SCSIOP_ATA_PASSTHROUGH (exec) PATH:LUN:TID = %#x:%#x:%#x\n",
8882 goto passthrough_err;
8886 goto passthrough_err;
8888 goto passthrough_done;
8933 goto passthrough_err;
8940 for(
i=0;
i<to_lim;
i+=2) {
8954 goto passthrough_err;
8971 senseBuffer->
Valid = 1;
9009 "IdeSendCommand: SCSIOP_ATA_PASSTHROUGH (snap) PATH:LUN:TID = %#x:%#x:%#x\n",
9035 "IdeSendCommand: Unsupported command %#x\n",
9078 UCHAR statusByte,errorByte;
9080 chan = &(deviceExtension->
chan[lChannel]);
9083 if (EnableMSN ==
TRUE){
9098 "IdeMediaStatus: Error enabling media status. Status %#x, error byte %#x\n",
9160 senseBuffer->
Valid = 1;
9168 senseBuffer->
Valid = 1;
9176 senseBuffer->
Valid = 1;
9184 senseBuffer->
Valid = 1;
9341 "** AtapiStartIo: Function %#x, PATH:LUN:TID = %#x:%#x:%#x\n",
9352 "AtapiStartIo: Communication port\n"));
9392 "AtapiStartIo: SRB rejected\n"));
9405 chan = &(deviceExtension->
chan[lChannel]);
9416 if(!commPort && !LunExt) {
9452 "AtapiStartIo: EXECUTE_SCSI rejected (2)\n"));
9566 for (
j = 0;
j <
sizeof(vendorId);
j += 2)
9600 "RemovableMedia\n"));
9607 "RelativeAddressing\n"));
9614 FillDeviceIdentificationString(inquiryData, identifyData);
9616 for (
i = 0;
i < 24;
i += 2) {
9623 for (
i = 0;
i < 4;
i += 2) {
9683 "ScsiPortLogError: devExt %#x, Srb %#x, P:T:D=%d:%d:%d, MsgId %#x (%d)\n",
9700 senseBuffer->
Valid = 1;
9747 "ScsiPortLogError: devExt %#x, Srb %#x, P:T:D=%d:%d:%d, MsgId %#x (%d) - (2)\n",
9784 "AtapiHwInitialize: Disable write cacheing on Device %d failed\n",
9796 "AtapiHwInitialize: Enable write cacheing on Device %d failed\n",
9829 goto wrong_buffer_size;
9838 goto wrong_buffer_size;
9860 goto wrong_buffer_size;
9875 if(targetId != (
ULONG)(-1)) {
9893 lChannel = (
UCHAR)targetId / 2;
9896 lChannel = (
UCHAR)(targetId / 2);
9905 "AtapiStartIo: SCSIDISK IOCTL for non-exestent drive %d -> EXECUTE_SCSI rejected (2)\n",
9911 chan = &(deviceExtension->
chan[lChannel]);
9927 UCHAR deviceNumberMap;
9941 goto invalid_request;
9953 deviceNumberMap = 1 << lChannel;
9985 goto invalid_request;
9993 goto invalid_request;
10051 "AtapiStartIo: SCSIDISK Smart IOCTL for commPort -> EXECUTE_SCSI rejected (3)\n"));
10054 goto invalid_request;
10099 goto wrong_buffer_size;
10113 chan = &(deviceExtension->
chan[lChannel]);
10130 DeviceNumber < deviceExtension->NumberLuns) {
10132 chan = &(deviceExtension->
chan[lChannel]);
10136 goto handle_bad_ldev;
10140 chan = &(deviceExtension->
chan[lChannel]);
10151 "AtapiStartIo: bad_ldev -> IOCTL SRB rejected\n"));
10163 goto uata_ctl_queue;
10168 goto wrong_buffer_size;
10173 goto uata_ctl_queue;
10203 goto wrong_buffer_size;
10232 goto wrong_buffer_size;
10255 goto wrong_buffer_size;
10287 goto wrong_buffer_size;
10304 goto wrong_buffer_size;
10322 goto wrong_buffer_size;
10359 if(
len >=
pos+AtaCtl->AdapterInfo.NumberChannels*
sizeof(
CHANINFO)) {
10363 for(
i=0;
i<AtaCtl->AdapterInfo.NumberChannels;
i++) {
10365 cur_chan = &(deviceExtension->
chan[
i]);
10377 AtaCtl->AdapterInfo.ChanInfoValid =
TRUE;
10378 AtaCtl->AdapterInfo.ChanHeaderLength =
sizeof(*ChanInfo);
10414 KdPrint2((
PRINT_PREFIX "AtapiStartIo: IoControl signature incorrect. Send %s, expected %s or %s\n",
10416 "SCSIDISK",
"-UNIATA-"));
10443 "AtapiStartIo: Srb %#x complete with status %#x\n",
10500UniataInitAtaCommands()
10508 for(
i=0;
i<256;
i++) {
10623 flags &= ~ATA_CMD_FLAG_48supp;
10688 ULONG adapterCount;
10690 ULONG statusToReturn, newStatus;
10694#ifndef USE_REACTOS_DDK
10709 statusToReturn = 0xffffffff;
10716 sizeof(hwInitializationData.
comm) +
10742 &hwInitializationData.
comm,
10754 KdPrint((
"crashdump mode\n"));
10759#ifdef USE_REACTOS_DDK
10760 KdPrint((
"UniATA Init: OS should be ReactOS\n"));
10769 KdPrint((
"UniATA Init: CrNtInit failed with status %#x\n",
status));
10790 KdPrint((
"UniATA Init: ReEnter\n"));
10816 KdPrint((
"UniATA: Behave as WDM, mlia (1)\n"));
10824 KdPrint((
"UniATA: Behave as WDM, mlia (5)\n"));
10837 KdPrint((
"set NeedPhysicalAddresses = TRUE\n"));
10839 KdPrint((
"set AtapiAdapterControl() ptr\n"));
10855 if(!IgnoreIsaCompatiblePci || !IgnoreNativePci) {
10908 KdPrint2((
PRINT_PREFIX "\n\nATAPI IDE: Look for legacy ISA-bridged PCI IDE controller (onboard)\n"));
10916 if(IgnoreIsaCompatiblePci) {
10921 if(
BMList[
i].ChanInitOk & 0x03) {
10931 PrimaryClaimed =
TRUE;
10933 SecondaryClaimed =
TRUE;
10937 !(
BMList[
i].ChanInitOk & 0x80)) {
10956 KdPrint2((
PRINT_PREFIX "Can't acquire PCI part of BusMaster on SMP NT3/4 system, try init anyway.\n"));
10973 for(
c=0;
c<2;
c++) {
10979 if(PrimaryClaimed) {
10985 if(SecondaryClaimed) {
11017 &hwInitializationData.
comm,
11018 UlongToPtr(
i | ((alt ^ pref_alt) ? 0x80000000 : 0)));
11020 if (newStatus < statusToReturn) {
11021 statusToReturn = newStatus;
11029 if(
BMList[
i].ChanInitOk & (0x01 <<
c)) {
11047 if(
BMList[
i].ChanInitOk & 0x03) {
11064 if(
BMList[
i].ChanInitOk & 0x03) {
11083 if(IgnoreNativePci) {
11089 _PrintNtConsole(
"Init PCI ATA controller Vendor/Dev %4.4s//%4.4s at PCI Address %d:%d:%d",
11112 &hwInitializationData.
comm,
11125 &hwInitializationData.
comm,
11129 if (newStatus < statusToReturn)
11130 statusToReturn = newStatus;
11176 &hwInitializationData.
comm,
11179 if (newStatus < statusToReturn)
11180 statusToReturn = newStatus;
11190 &hwInitializationData.
comm,
11193 if (newStatus < statusToReturn)
11194 statusToReturn = newStatus;
11198 KdPrint2((
PRINT_PREFIX "\n\nLeave UNIATA MiniPort DriverEntry with status %#x\n", statusToReturn));
11200 return statusToReturn;
11308 HwDeviceExtension, NamePrefix,
Name,
val);
11311 swprintf(namex,
L"%s\\Chan_%1.1d", NamePrefix, chan);
11313 HwDeviceExtension, namex,
Name,
val);
11315 swprintf(namex,
L"%s\\Chan_%1.1d\\%s", NamePrefix, chan, (
dev & 0x01) ?
L"Lun_1" :
L"Lun_0");
11317 HwDeviceExtension, namex,
Name,
val);
11394 if(deviceExtension) {
11395 VendorID = deviceExtension->
DevID & 0xffff;
11398 HwFlags = deviceExtension->
HwFlags;
11407 HwDeviceExtension,
L"Parameters", chan,
dev,
Name,
val);
11409 if(deviceExtension) {
11413 swprintf(namex,
L"Parameters%s", namev);
11415 HwDeviceExtension, namex, chan,
dev,
Name,
val);
11419 swprintf(namex,
L"Parameters%s", namev);
11421 HwDeviceExtension, namex, chan,
dev,
Name,
val);
11425 swprintf(namex,
L"Parameters%s", namev);
11427 HwDeviceExtension, namex, chan,
dev,
Name,
val);
11433 swprintf(namex,
L"Parameters%s", namev);
11435 HwDeviceExtension, namex, chan,
dev,
Name,
val);
11438 swprintf(namev,
L"\\Ven_%4.4x", VendorID);
11442 swprintf(namex,
L"Parameters%s", namev);
11444 HwDeviceExtension, namex, chan,
dev,
Name,
val);
11446 swprintf(namex,
L"Parameters%s%s", namev, named);
11448 HwDeviceExtension, namex, chan,
dev,
Name,
val);
11452 HwDeviceExtension, namex, chan,
dev,
Name,
val);
11457 swprintf(namex,
L"Parameters%s", namev);
11459 HwDeviceExtension, namex, chan,
dev,
Name,
val);
11462 swprintf(namex,
L"Parameters%s", namev);
11464 HwDeviceExtension, namex, chan,
dev,
Name,
val);
11470 swprintf(namex,
L"Parameters%s", namev);
11472 HwDeviceExtension, namex, chan,
dev,
Name,
val);
11475 swprintf(namex,
L"Parameters%s", namev);
11477 HwDeviceExtension, namex, chan,
dev,
Name,
val);
11516#define ITEMS_TO_QUERY 2
11525 LONG doRun = Default;
11544 KdPrint((
"AtapiCheckRegValue: couldn't allocate paramPath\n"));
11566 KdPrint((
"AtapiCheckRegValue: %ws -> %ws is %#x\n", PathSuffix,
Name, doRun));
11578#undef ITEMS_TO_QUERY
11597 KdPrint((
"AtapiAdapterControl: %#x\n", ControlType));
11599 switch(ControlType) {
11618 for(
i = 0;
i < lim;
i++) {
11627 KdPrint((
"AtapiAdapterControl: ScsiStopAdapter\n"));
11630 for (
c = 0;
c < numberChannels;
c++) {
11643 KdPrint((
"AtapiAdapterControl: ScsiRestartAdapter\n"));
11650 for (
c = 0;
c < numberChannels;
c++) {
11666 KdPrint((
"AtapiAdapterControl: default => return ScsiAdapterControlUnsuccessful\n"));
11684#define DEBUG_MSG_BUFFER_SIZE 512
struct outqueuenode * head
#define InterlockedIncrement
#define InterlockedExchange
#define InterlockedDecrement
UCHAR const AtaCommands48[256]
UCHAR const AtaCommandFlags[256]
#define DFLAGS_ATAPI_DEVICE
#define GetBaseStatus(BaseIoAddress, Status)
#define DFLAGS_SANYO_ATAPI_CHANGER
#define WaitForDrq(BaseIoAddress, Status)
#define IDE_ERROR_END_OF_MEDIA
#define DFLAGS_ATAPI_CHANGER
#define WriteBuffer(BaseIoAddress, Buffer, Count)
#define DFLAGS_CHANGER_INITED
#define IDE_COMMAND_GET_MEDIA_STATUS
#define IDE_DRIVE_SELECT_1
#define IDE_COMMAND_ATAPI_IDENTIFY
#define IDE_COMMAND_SET_DRIVE_PARAMETERS
#define IDE_DC_RESET_CONTROLLER
#define IDE_COMMAND_WRITE_DMA
#define WaitShortForDrq(BaseIoAddress, Status)
#define ReadBuffer(BaseIoAddress, Buffer, Count)
#define IDE_COMMAND_IDENTIFY
#define IDE_ERROR_ILLEGAL_LENGTH
#define IDE_ERROR_COMMAND_ABORTED
#define WaitOnBaseBusy(BaseIoAddress, Status)
#define IDE_COMMAND_WRITE_MULTIPLE
#define IDE_COMMAND_WRITE
#define IDE_COMMAND_VERIFY
#define IDE_ERROR_MEDIA_CHANGE
#define IDE_COMMAND_READ_MULTIPLE
#define IDE_COMMAND_READ_DMA
#define IDE_COMMAND_ATAPI_PACKET
#define IDE_ERROR_MEDIA_CHANGE_REQ
#define GetStatus(BaseIoAddress, Status)
#define IDE_DRIVE_SELECT_2
#define DFLAGS_TAPE_DEVICE
#define IS_RDP(OperationCode)
#define DFLAGS_MEDIA_STATUS_ENABLED
#define IDE_COMMAND_ATAPI_RESET
#define IDE_COMMAND_MEDIA_EJECT
#define DFLAGS_REMOVABLE_DRIVE
#define IDE_ERROR_DATA_ERROR
#define IDE_COMMAND_SET_MULTIPLE
#define IDE_DC_DISABLE_INTERRUPTS
#define WaitOnBusy(BaseIoAddress, Status)
#define IDE_DC_REENABLE_CONTROLLER
#define DFLAGS_DEVICE_PRESENT
#define IDE_ERROR_ID_NOT_FOUND
#define IDE_ERROR_BAD_BLOCK
#define WriteBuffer2(BaseIoAddress, Buffer, Count)
#define ReadBuffer2(BaseIoAddress, Buffer, Count)
#define AtapiSoftReset(BaseIoAddress, DeviceNumber)
struct _HW_LU_EXTENSION HW_LU_EXTENSION
struct _HW_DEVICE_EXTENSION * PHW_DEVICE_EXTENSION
struct _HW_DEVICE_EXTENSION HW_DEVICE_EXTENSION
void NTAPI InitBadBlocks(IN PHW_LU_EXTENSION LunExt)
void NTAPI ForgetBadBlocks(IN PHW_LU_EXTENSION LunExt)
bool NTAPI CheckIfBadBlock(IN PHW_LU_EXTENSION LunExt, IN ULONGLONG lba, IN ULONG count)
struct _SENDCMDINPARAMS SENDCMDINPARAMS
struct _SENDCMDOUTPARAMS * PSENDCMDOUTPARAMS
struct _SENDCMDOUTPARAMS SENDCMDOUTPARAMS
struct _SENDCMDINPARAMS * PSENDCMDINPARAMS
#define UniataGetPioTiming(LunExt)
#define ATA_SILICON_IMAGE_ID
ULONG NTAPI ScsiPortInitialize(IN PVOID Argument1, IN PVOID Argument2, IN PHW_INITIALIZATION_DATA HwInitializationData, IN PVOID HwContext OPTIONAL)
VOID __cdecl ScsiPortNotification(IN SCSI_NOTIFICATION_TYPE NotificationType, IN PVOID HwDeviceExtension, IN ...)
VOID NTAPI ScsiPortLogError(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb OPTIONAL, IN UCHAR PathId, IN UCHAR TargetId, IN UCHAR Lun, IN ULONG ErrorCode, IN ULONG UniqueId)
VOID NTAPI ScsiPortMoveMemory(IN PVOID WriteBuffer, IN PVOID ReadBuffer, IN ULONG Length)
VOID NTAPI ScsiPortStallExecution(IN ULONG Delay)
PSCSI_REQUEST_BLOCK NTAPI ScsiPortGetSrb(IN PVOID DeviceExtension, IN UCHAR PathId, IN UCHAR TargetId, IN UCHAR Lun, IN LONG QueueTag)
VOID NTAPI AtapiDmaInit__(IN PHW_DEVICE_EXTENSION deviceExtension, IN PHW_LU_EXTENSION LunExt)
#define BM_DS0_SII_DMA_COMPLETE
UCHAR NTAPI AtapiDmaDone(IN PVOID HwDeviceExtension, IN ULONG DeviceNumber, IN ULONG lChannel, IN PSCSI_REQUEST_BLOCK Srb)
#define REORDER_MCOST_SWITCH_RW_CD
#define ATA_AHCI_P_IX_HBD
#define REQ_STATE_PREPARE_TO_TRANSFER
#define REQ_STATE_PROCESSING_INTR
#define REQ_STATE_ATAPI_EXPECTING_DATA_INTR
#define ATA_AHCI_P_IX_TFE
VOID DDKFASTAPI AtapiWritePortEx1(IN PHW_CHANNEL chan, IN ULONGIO_PTR port, IN ULONG offs, IN UCHAR data)
ULONG NTAPI UniataFindCompatBusMasterController1(IN PVOID HwDeviceExtension, IN PVOID Context, IN PVOID BusInformation, IN PCHAR ArgumentString, IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo, OUT PBOOLEAN Again)
#define IDX_BM_DeviceSpecific1
ULONG NTAPI UniataFindCompatBusMasterController2(IN PVOID HwDeviceExtension, IN PVOID Context, IN PVOID BusInformation, IN PCHAR ArgumentString, IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo, OUT PBOOLEAN Again)
#define ATA_SE_HANDSHAKE_ERR
#define CTRFLAGS_INTR_DISABLED
#define REQ_STATE_READY_TO_TRANSFER
BOOLEAN NTAPI AtapiDmaDBPreSync(IN PVOID HwDeviceExtension, PHW_CHANNEL chan, PSCSI_REQUEST_BLOCK Srb)
#define ATA_AHCI_CMD_PREFETCH
BOOLEAN NTAPI AtapiDmaSetup(IN PVOID HwDeviceExtension, IN ULONG DeviceNumber, IN ULONG lChannel, IN PSCSI_REQUEST_BLOCK Srb, IN PUCHAR data, IN ULONG count)
#define REQ_STATE_DPC_WAIT_BUSY0
#define REQ_STATE_DPC_WAIT_DRQ
#define REORDER_COST_SWITCH_RW_CD
#define BM_DS0_SII_DMA_ENABLE
BOOLEAN NTAPI AtapiDmaDBSync(PHW_CHANNEL chan, PSCSI_REQUEST_BLOCK Srb)
#define IDX_BM_DeviceSpecific0
#define ATA_AHCI_CMD_WRITE
UCHAR DDKFASTAPI AtapiReadPort1(IN PHW_CHANNEL chan, IN ULONGIO_PTR port)
#define REORDER_MCOST_SEEK_BACK_CD
#define REQ_FLAG_DMA_OPERATION
ULONG DDKFASTAPI AtapiReadPort4(IN PHW_CHANNEL chan, IN ULONGIO_PTR port)
ULONG NTAPI UniataFindBusMasterController(IN PVOID HwDeviceExtension, IN PVOID Context, IN PVOID BusInformation, IN PCHAR ArgumentString, IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo, OUT PBOOLEAN Again)
#define ATA_AHCI_P_IX_HBF
#define GetPciConfig1(offs, op)
struct _ISR2_DEVICE_EXTENSION * PISR2_DEVICE_EXTENSION
#define REQ_STATE_ATAPI_EXPECTING_DATA_INTR2
#define ATA_AHCI_CMD_ATAPI
#define REQ_FLAG_FORCE_DOWNRATE
VOID DDKFASTAPI AtapiWritePortEx4(IN PHW_CHANNEL chan, IN ULONGIO_PTR port, IN ULONG offs, IN ULONG data)
#define CTRFLAGS_ENABLE_INTR_REQ
#define REQ_STATE_DPC_WAIT_BUSY
#define BM_DS0_SII_DMA_ERROR
#define ATA_AHCI_P_IX_SDB
NTSTATUS NTAPI UniataClaimLegacyPCIIDE(ULONG i)
#define ChangePciConfig2(offs, _op)
#define REQ_STATE_DPC_WAIT_BUSY1
#define REQ_FLAG_REORDERABLE_CMD
NTSTATUS NTAPI UniataConnectIntr2(IN PVOID HwDeviceExtension)
#define REQ_FLAG_FORCE_DOWNRATE_LBA48
#define ATA_AHCI_P_IX_DHR
#define CHECK_INTR_DETECTED
#define HBAFLAGS_DMA_DISABLED_LBA48
ULONG DDKFASTAPI AtapiReadPortEx4(IN PHW_CHANNEL chan, IN ULONGIO_PTR port, IN ULONG offs)
#define ATA_SE_LINKSEQ_ERR
#define REQ_STATE_ATAPI_DO_NOTHING_INTR
#define ATA_AHCI_P_IX_INF
#define BM_DS0_SII_DMA_SATA_IRQ
#define CTRFLAGS_DMA_OPERATION
#define ATA_AHCI_P_IX_PRC
#define CTRFLAGS_PERMANENT
#define ATA_SE_UNKNOWN_FIS
#define REQ_STATE_EXPECTING_INTR
VOID DDKFASTAPI AtapiWritePort4(IN PHW_CHANNEL chan, IN ULONGIO_PTR port, IN ULONG data)
#define REQ_STATE_ATAPI_EXPECTING_CMD_INTR
union _ATA_REQ * PATA_REQ
BOOLEAN NTAPI AtapiDmaPioSync(PVOID HwDeviceExtension, PSCSI_REQUEST_BLOCK Srb, PUCHAR data, ULONG count)
#define CMD_ACTION_PREPARE
#define ATA_AHCI_P_IX_CPD
#define REQ_STATE_EARLY_INTR
PDRIVER_OBJECT SavedDriverObject
#define REQ_STATE_PREPARE_TO_NEXT
#define ATA_SE_TRANSPORT_ERR
#define ATA_WAIT_BASE_READY
#define REQ_STATE_TRANSFER_COMPLETE
#define GetPciConfig2(offs, op)
#define REQ_STATE_DPC_WAIT_DRQ_ERR
VOID DDKFASTAPI AtapiWritePort1(IN PHW_CHANNEL chan, IN ULONGIO_PTR port, IN UCHAR data)
#define CTRFLAGS_NO_SLAVE
#define CHECK_INTR_ACTIVE
#define REQ_STATE_DPC_WAIT_DRQ0
VOID NTAPI AtapiDmaReinit(IN PHW_DEVICE_EXTENSION deviceExtension, IN PHW_LU_EXTENSION LunExt, IN PATA_REQ AtaReq)
NTSTATUS NTAPI UniataDisconnectIntr2(IN PVOID HwDeviceExtension)
#define BM_COMMAND_START_STOP
UCHAR DDKFASTAPI AtapiReadPortEx1(IN PHW_CHANNEL chan, IN ULONGIO_PTR port, IN ULONG offs)
#define REQ_STATE_DPC_INTR_REQ
USHORT DDKFASTAPI AtapiReadPort2(IN PHW_CHANNEL chan, IN ULONGIO_PTR port)
BOOLEAN NTAPI AtapiChipInit(IN PVOID HwDeviceExtension, IN ULONG DeviceNumber, IN ULONG c)
#define GetDmaStatus(de, c)
#define SetPciConfig1(offs, op)
VOID NTAPI AtapiDmaStart(IN PVOID HwDeviceExtension, IN ULONG DeviceNumber, IN ULONG lChannel, IN PSCSI_REQUEST_BLOCK Srb)
VOID NTAPI UniataEnumBusMasterController(IN PVOID DriverObject, PVOID Argument2)
PBUSMASTER_CONTROLLER_INFORMATION BMList
#define CTRFLAGS_DMA_ACTIVE
_In_ PSCSI_REQUEST_BLOCK Srb
#define SCSISTAT_CHECK_CONDITION
#define COMMUNICATION_DEVICE
#define SCSIOP_MODE_SENSE10
struct _INQUIRYDATA * PINQUIRYDATA
#define SCSI_SENSE_NO_SENSE
struct _MODE_POWER_CONDITION_PAGE * PMODE_POWER_CONDITION_PAGE
#define IOCTL_SCSI_MINIPORT_SAVE_ATTRIBUTE_VALUES
#define IOCTL_SCSI_MINIPORT_READ_SMART_ATTRIBS
#define SCSIOP_REQUEST_SENSE
struct _MODE_CACHING_PAGE * PMODE_CACHING_PAGE
#define SCSIOP_TEST_UNIT_READY
#define IOCTL_SCSI_MINIPORT_DISABLE_SMART
#define SCSI_SENSE_DATA_PROTECT
#define SCSI_ADSENSE_INVALID_VALUE
#define SCSI_ADSENSE_INVALID_CDB
struct _MODE_POWER_CONDITION_PAGE MODE_POWER_CONDITION_PAGE
#define SCSIOP_MEDIUM_REMOVAL
#define DIRECT_ACCESS_DEVICE
#define SCSI_SENSE_MEDIUM_ERROR
struct _SENSE_DATA * PSENSE_DATA
struct _MODE_CACHING_PAGE MODE_CACHING_PAGE
#define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTOSAVE
struct _MECHANICAL_STATUS_INFORMATION_HEADER MECHANICAL_STATUS_INFORMATION_HEADER
#define MODE_PAGE_CACHING
#define READ_ONLY_DIRECT_ACCESS_DEVICE
#define SCSI_ADSENSE_MEDIA_STATE
#define SCSIOP_READ_CAPACITY
#define SCSIOP_FLUSH_BUFFER
#define SCSIOP_MECHANISM_STATUS
#define IOCTL_SCSI_MINIPORT_IDENTIFY
struct _SENSE_DATA SENSE_DATA
#define SCSI_SENSEQ_SCSI_BUS
#define IOCTL_SCSI_MINIPORT_EXECUTE_OFFLINE_DIAGS
#define SCSI_SENSEQ_END_OF_MEDIUM
#define SCSI_SENSE_ILLEGAL_REQUEST
#define IOCTL_SCSI_MINIPORT_READ_SMART_THRESHOLDS
#define IOCTL_SCSI_MINIPORT_ENABLE_SMART
#define SCSIOP_MODE_SENSE
#define SCSI_SENSE_UNIT_ATTENTION
#define SCSI_ADSENSE_NO_MEDIA_IN_DEVICE
#define IOCTL_SCSI_MINIPORT_RETURN_STATUS
#define SCSI_SENSEQ_PARAM_INVALID_VALUE
#define SCSI_ADSENSE_MEDIUM_CHANGED
#define MODE_PAGE_POWER_CONDITION
#define IOCTL_SCSI_MINIPORT_SMART_VERSION
#define SCSIOP_READ_CD_MSF
#define MODE_DSP_WRITE_PROTECT
#define SCSIOP_START_STOP_UNIT
#define SCSI_SENSE_BLANK_CHECK
#define SCSI_SENSE_HARDWARE_ERROR
struct _MODE_PARAMETER_HEADER * PMODE_PARAMETER_HEADER
#define SCSI_SENSE_RECOVERED_ERROR
#define SCSIOP_MODE_SELECT10
#define SCSIOP_MODE_SELECT
#define SCSI_SENSE_NOT_READY
#define SCSI_SENSE_ABORTED_COMMAND
#define SCSI_ADSENSE_BUS_RESET
#define SCSIOP_SYNCHRONIZE_CACHE
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR _In_ UCHAR Lun
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR PathId
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR TargetId
_In_ PCHAR _In_ ULONG DeviceNumber
#define NT_SUCCESS(StatCode)
DRIVER_INITIALIZE DriverEntry
NTSTATUS NTAPI CompleteRequest(IN PIRP Irp, IN NTSTATUS Status, IN ULONG_PTR Information)
#define MOV_SWP_DW2DD(a, b)
#define SCSIOP_REPORT_LUNS
#define SCSIOP_SA_READ_CAPACITY16
#define StartStop_Power_Sleep
#define SCSIOP_SERVICE_ACTION16
#define IOCTL_SCSI_MINIPORT_WRITE_SMART_LOG
#define StartStop_Power_Idle
struct _REPORT_LUNS_INFO_HDR * PREPORT_LUNS_INFO_HDR
#define IOCTL_SCSI_MINIPORT_READ_SMART_LOG
#define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTO_OFFLINE
#define StartStop_Power_Standby
struct _SCSI_REQUEST_BLOCK SCSI_REQUEST_BLOCK
BOOLEAN(NTAPI * PHW_INTERRUPT)(IN PVOID DeviceExtension)
@ ScsiQuerySupportedControlTypes
#define SRB_FUNCTION_RESET_DEVICE
#define SRB_STATUS_BUS_RESET
#define SRB_FUNCTION_RESET_LOGICAL_UNIT
@ ScsiAdapterControlSuccess
@ ScsiAdapterControlUnsuccessful
VOID(NTAPI * PHW_TIMER)(IN PVOID DeviceExtension)
#define SRB_FUNCTION_IO_CONTROL
enum _SCSI_ADAPTER_CONTROL_TYPE SCSI_ADAPTER_CONTROL_TYPE
enum _SCSI_ADAPTER_CONTROL_STATUS SCSI_ADAPTER_CONTROL_STATUS
#define SRB_FUNCTION_EXECUTE_SCSI
#define SRB_STATUS_DATA_OVERRUN
#define SRB_FLAGS_DATA_OUT
#define SRB_STATUS_ABORTED
#define SRB_STATUS_PENDING
#define SP_BAD_FW_WARNING
struct _SCSI_SUPPORTED_CONTROL_TYPE_LIST * PSCSI_SUPPORTED_CONTROL_TYPE_LIST
#define SRB_FUNCTION_RESET_BUS
#define SRB_FUNCTION_FLUSH
BOOLEAN(NTAPI * PHW_STARTIO)(IN PVOID DeviceExtension, IN PSCSI_REQUEST_BLOCK Srb)
#define SP_INTERNAL_ADAPTER_ERROR
#define SRB_STATUS_TIMEOUT
#define SRB_FUNCTION_SHUTDOWN
BOOLEAN(NTAPI * PHW_RESET_BUS)(IN PVOID DeviceExtension, IN ULONG PathId)
#define SRB_STATUS_AUTOSENSE_VALID
#define SRB_FLAGS_DATA_IN
#define SRB_STATUS_ABORT_FAILED
#define SRB_STATUS_SELECTION_TIMEOUT
SCSI_ADAPTER_CONTROL_STATUS(NTAPI * PHW_ADAPTER_CONTROL)(IN PVOID DeviceExtension, IN SCSI_ADAPTER_CONTROL_TYPE ControlType, IN PVOID Parameters)
#define SRB_FLAGS_DISABLE_SYNCH_TRANSFER
#define SRB_STATUS_SUCCESS
BOOLEAN(NTAPI * PHW_INITIALIZE)(IN PVOID DeviceExtension)
#define SRB_STATUS_INVALID_REQUEST
#define SRB_FUNCTION_ABORT_COMMAND
UNICODE_STRING * PUNICODE_STRING
NTSTATUS RtlAppendUnicodeToString(IN PUNICODE_STRING Str1, IN PWSTR Str2)
#define KeQuerySystemTime(t)
#define KeGetCurrentIrql()
IN PFCB IN PCCB IN TYPE_OF_OPEN IN BOOLEAN IN BOOLEAN TopLevel
#define ExAllocatePool(type, size)
NTSTATUS CrNtInit(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLboolean GLboolean GLboolean GLboolean a
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
RETTYPE_XXableInterrupts NTAPI AtapiEnableInterrupts__(IN PVOID HwDeviceExtension)
#define RETVAL_XXableInterrupts
LONG NTAPI AtaPio2Mode(LONG pio)
NTHALAPI VOID NTAPI HalDisplayString(PUCHAR String)
VOID NTAPI AtapiCallBack_X(IN PVOID HwDeviceExtension)
ULONG NTAPI AtapiRegCheckDevValue(IN PVOID HwDeviceExtension, IN ULONG chan, IN ULONG dev, IN PCWSTR Name, IN ULONG Default)
BOOLEAN NTAPI AtapiResetController__(IN PVOID HwDeviceExtension, IN ULONG PathId, IN UCHAR CompleteType)
BOOLEAN NTAPI AtapiInterrupt2(IN PKINTERRUPT Interrupt, IN PVOID Isr2HwDeviceExtension)
VOID NTAPI AtapiQueueTimerDpc(IN PVOID HwDeviceExtension, IN ULONG lChannel, IN PHW_TIMER HwScsiTimer, IN ULONG MiniportTimerValue)
ULONG NTAPI IdeBuildSenseBuffer(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb)
#define SetCheckPoint(cp)
UCHAR DDKFASTAPI SelectDrive(IN PHW_CHANNEL chan, IN ULONG DeviceNumber)
BOOLEAN NTAPI AtapiStartIo__(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb, IN BOOLEAN TopLevel)
ULONG NTAPI AtapiSendCommand(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb, IN ULONG CmdAction)
#define RESET_COMPLETE_CURRENT
BOOLEAN NTAPI AtapiRegGetStringParameterValue(IN PWSTR RegistryPath, IN PWSTR Name, IN PWCHAR Str, IN ULONG MaxLen)
static const CHAR ver_string[]
#define AtapiWritePortExN_template(_type, _Type, sz)
ULONG g_opt_WaitBusyCount
#define AtapiReadPortBufferN_template(_type, _Type, sz)
BOOLEAN g_opt_BochsDmaReadWorkaround
UCHAR DDKFASTAPI UniataIsIdle(IN struct _HW_DEVICE_EXTENSION *deviceExtension, IN UCHAR Status)
VOID NTAPI UniataSnapAtaRegs(IN PHW_CHANNEL chan, IN ULONG DeviceNumber, IN OUT PIDEREGS_EX regs)
PSCSI_REQUEST_BLOCK NTAPI BuildRequestSenseSrb(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb)
ULONG g_opt_WaitBusyResetCount
VOID NTAPI UniataForgetDevice(PHW_LU_EXTENSION LunExt)
ULONG NTAPI IdeReadWrite(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb, IN ULONG CmdAction)
ULONGLONG NTAPI UniAtaCalculateLBARegsBack(PHW_LU_EXTENSION LunExt, ULONGLONG lba)
UCHAR DDKFASTAPI AtapiSuckPort2(IN PHW_CHANNEL chan)
LONG NTAPI AtaWmode(PIDENTIFY_DATA2 ident)
ULONGLONG NTAPI UniAtaCalculateLBARegs(PHW_LU_EXTENSION LunExt, ULONGLONG startingSector, PULONG max_bcount)
BOOLEAN NTAPI AtapiInterrupt__(IN PVOID HwDeviceExtension, IN UCHAR c)
BOOLEAN NTAPI AtapiInterrupt(IN PVOID HwDeviceExtension)
ULONG NTAPI EncodeVendorStr(OUT PWCHAR Buffer, IN PUCHAR Str, IN ULONG Length)
UCHAR DDKFASTAPI WaitOnBusyLong(IN PHW_CHANNEL chan)
VOID NTAPI AtapiHwInitializeChanger(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb, IN PMECHANICAL_STATUS_INFORMATION_HEADER MechanismStatus)
#define RETTYPE_XXableInterrupts
SCSI_ADAPTER_CONTROL_STATUS NTAPI AtapiAdapterControl(IN PVOID HwDeviceExtension, IN SCSI_ADAPTER_CONTROL_TYPE ControlType, IN PVOID Parameters)
ULONG NTAPI IdeSendSmartCommand(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb, IN ULONG targetId)
UCHAR DDKFASTAPI WaitOnBaseBusyLong(IN PHW_CHANNEL chan)
UCHAR NTAPI AtaCommand(IN PHW_DEVICE_EXTENSION deviceExtension, IN ULONG DeviceNumber, IN ULONG lChannel, IN UCHAR command, IN USHORT cylinder, IN UCHAR head, IN UCHAR sector, IN UCHAR count, IN UCHAR feature, IN ULONG wait_flags)
ULONG NTAPI MapError(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb)
VOID _cdecl _PrintNtConsole(PCCH DebugMessage,...)
ULONG NTAPI AtapiRegCheckParameterValue(IN PVOID HwDeviceExtension, IN PCWSTR PathSuffix, IN PCWSTR Name, IN ULONG Default)
#define AtapiReadPortExN_template(_type, _Type, sz)
VOID DDKFASTAPI UniataNanoSleep(ULONG nano)
ULONG NTAPI AtapiRegCheckDevLunValue(IN PVOID HwDeviceExtension, IN PCWCH NamePrefix, IN ULONG chan, IN ULONG dev, IN PCWSTR Name, IN ULONG Default)
ULONG g_opt_VirtualMachine
BOOLEAN NTAPI AtapiCheckInterrupt__(IN PVOID HwDeviceExtension, IN UCHAR c)
UNICODE_STRING SavedRegPath
BOOLEAN NTAPI AtapiResetController(IN PVOID HwDeviceExtension, IN ULONG PathId)
BOOLEAN NTAPI AtapiHwInitialize(IN PVOID HwDeviceExtension)
VOID NTAPI UniataUserDeviceReset(PHW_DEVICE_EXTENSION deviceExtension, PHW_LU_EXTENSION LunExt, ULONG lChannel)
BOOLEAN NTAPI AtapiStartIo(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb)
#define AtapiReadPortN_template(_type, _Type, sz)
RETTYPE_XXableInterrupts NTAPI AtapiInterruptDpc(IN PVOID HwDeviceExtension)
ULONG NTAPI AtapiParseArgumentString(IN PCCH String, IN PCCH KeyWord)
ULONG g_opt_DriveSelectNanoDelay
VOID NTAPI AtapiTimerDpc(IN PVOID HwDeviceExtension)
VOID NTAPI AtapiEnableInterrupts(IN PVOID HwDeviceExtension, IN ULONG c)
#define AtapiWritePortN_template(_type, _Type, sz)
ULONG g_opt_WaitBusyDelay
VOID UniataExpectChannelInterrupt(IN struct _HW_CHANNEL *chan, IN BOOLEAN Expecting)
LONG NTAPI AtaSAmode(PIDENTIFY_DATA2 ident)
ULONG NTAPI IdeSendCommand(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb, IN ULONG CmdAction)
VOID NTAPI AtapiHwInitialize__(IN PHW_DEVICE_EXTENSION deviceExtension, IN ULONG lChannel)
BOOLEAN g_opt_AtapiSendDisableIntr
VOID NTAPI AtapiDisableInterrupts(IN PVOID HwDeviceExtension, IN ULONG c)
#define DEBUG_MSG_BUFFER_SIZE
BOOLEAN g_opt_AtapiDmaRawRead
BOOLEAN NTAPI SetDriveParameters(IN PVOID HwDeviceExtension, IN ULONG DeviceNumber, IN ULONG lChannel)
VOID NTAPI AtapiCallBack__(IN PVOID HwDeviceExtension, IN UCHAR lChannel)
BOOLEAN NTAPI IssueIdentify(IN PVOID HwDeviceExtension, IN ULONG DeviceNumber, IN ULONG lChannel, IN UCHAR Command, IN BOOLEAN NoSetup)
VOID NTAPI IdeMediaStatus(BOOLEAN EnableMSN, IN PVOID HwDeviceExtension, IN ULONG lChannel, IN ULONG DeviceNumber)
#define AtapiWritePortBufferN_template(_type, _Type, sz)
PSCSI_REQUEST_BLOCK NTAPI BuildMechanismStatusSrb(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb)
BOOLEAN NTAPI UniataNeedQueueing(PHW_DEVICE_EXTENSION deviceExtension, PHW_CHANNEL chan, BOOLEAN TopLevel)
UCHAR NTAPI AtaCommand48(IN PHW_DEVICE_EXTENSION deviceExtension, IN ULONG DeviceNumber, IN ULONG lChannel, IN UCHAR command, IN ULONGLONG lba, IN USHORT count, IN USHORT feature, IN ULONG wait_flags)
ULONG g_opt_WaitBusyLongDelay
ULONG NTAPI IdeVerify(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb)
#define RESET_COMPLETE_NONE
ULONG DDKFASTAPI AtapiSuckPortBuffer2(IN PHW_CHANNEL chan, IN PUSHORT Buffer, IN ULONG Count)
#define RESET_COMPLETE_ALL
LONG NTAPI AtaPioMode(PIDENTIFY_DATA2 ident)
VOID DDKFASTAPI AtapiHardReset(IN struct _HW_CHANNEL *chan, IN BOOLEAN DisableInterrupts, IN ULONG Delay)
LONG NTAPI AtaUmode(PIDENTIFY_DATA2 ident)
WCHAR SavedRegPathBuffer[256]
UCHAR DDKFASTAPI WaitForIdleLong(IN PHW_CHANNEL chan)
ULONG g_opt_WaitBusyLongCount
static const CHAR uniata_comm_name[]
VOID NTAPI UniataRemoveRequest(IN PHW_CHANNEL chan, IN PSCSI_REQUEST_BLOCK Srb)
VOID NTAPI UniataQueueRequest(IN PHW_CHANNEL chan, IN PSCSI_REQUEST_BLOCK Srb)
PHW_CHANNEL NTAPI UniataGetNextChannel(IN PHW_CHANNEL chan)
PSCSI_REQUEST_BLOCK NTAPI UniataGetCurRequest(IN PHW_CHANNEL chan)
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)
ULONG NTAPI UniataAhciWaitReady(IN PHW_CHANNEL chan, IN ULONG timeout)
UCHAR NTAPI UniataAhciStatus(IN PVOID HwDeviceExtension, IN ULONG lChannel, IN ULONG DeviceNumber)
VOID NTAPI UniataAhciSnapAtaRegs(IN PHW_CHANNEL chan, IN ULONG DeviceNumber, IN OUT PIDEREGS_EX regs)
VOID NTAPI UniataAhciReset(IN PVOID HwDeviceExtension, IN ULONG lChannel)
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)
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 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 UniataSataEvent(IN PVOID HwDeviceExtension, IN ULONG lChannel, IN ULONG Action, IN ULONG pm_port)
VOID UniataAhciSetupCmdPtr(IN OUT PATA_REQ AtaReq)
UCHAR NTAPI UniataAhciEndTransaction(IN PVOID HwDeviceExtension, IN ULONG lChannel, IN ULONG DeviceNumber, IN PSCSI_REQUEST_BLOCK Srb)
#define UNIATA_SATA_IGNORE_CONNECT
__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)
#define UNIATA_SATA_DO_CONNECT
__inline BOOLEAN UniataIsSATARangeAvailable(IN PHW_DEVICE_EXTENSION deviceExtension, IN ULONG lChannel)
#define UNIATA_SATA_EVENT_DETACH
__inline VOID UniataAhciWriteChannelPort4(IN PHW_CHANNEL chan, IN ULONG io_port_ndx, IN ULONG data)
#define UniataAhciReadHostPort4(deviceExtension, io_port_ndx)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
NTSYSAPI NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID)
PCONFIGURATION_INFORMATION NTAPI IoGetConfigurationInformation(VOID)
Returns a pointer to the I/O manager's global configuration information structure.
INTERNETFEATURELIST feature
#define RTL_REGISTRY_ABSOLUTE
#define RTL_QUERY_REGISTRY_DIRECT
#define EXECUTE_OFFLINE_DIAGS
#define READ_ATTRIBUTE_BUFFER_SIZE
#define SAVE_ATTRIBUTE_VALUES
#define RETURN_SMART_STATUS
#define IDENTIFY_BUFFER_SIZE
struct _GETVERSIONINPARAMS GETVERSIONINPARAMS
struct _GETVERSIONINPARAMS * PGETVERSIONINPARAMS
#define ENABLE_DISABLE_AUTOSAVE
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define STATUS_CONFLICTING_ADDRESSES
#define STATUS_DEVICE_DOES_NOT_EXIST
_In_opt_ WDFREQUEST _In_ ULONG _In_ BOOLEAN _In_ PCDB Cdb
struct _SRB_IO_CONTROL SRB_IO_CONTROL
BOOLEAN ChanHeaderLengthValid
ULONG OrigAdapterInterfaceType
ULONG AdapterInterfaceType
ULONG WaitForPhysicalLink
LONGLONG QueueStat[MAX_QUEUE_STAT]
LONGLONG TryReorderHeadCount
LONGLONG TryReorderTailCount
ULONG MechStatusRetryCount
SENSE_DATA MechStatusSense
SCSI_REQUEST_BLOCK InternalSrb
UCHAR ReturningMediaStatus
PATA_REQ AhciInternalAtaReq
LONGLONG TryReorderHeadCount
struct _HW_LU_EXTENSION * lun[IDE_MAX_LUN_PER_CHAN]
BOOLEAN ExpectingInterrupt
MECHANICAL_STATUS_INFORMATION_HEADER MechStatusData
LONGLONG TryReorderTailCount
LONGLONG QueueStat[MAX_QUEUE_STAT]
struct _HW_DEVICE_EXTENSION * DeviceExtension
IDENTIFY_DATA FullIdentifyData
INTERFACE_TYPE AdapterInterfaceType
BOOLEAN ExpectingInterrupt
BOOLEAN opt_AtapiDmaReadWrite
PDEVICE_OBJECT Isr2DevObj
ULONG FirstChannelToCheck
INTERFACE_TYPE OrigAdapterInterfaceType
BOOLEAN opt_AtapiDmaRawRead
UCHAR LastInterruptedChannel
IORES BaseIoAddressSATA_0
BOOLEAN opt_AtapiDmaControlCmd
BOOLEAN opt_AtapiDmaZeroTransfer
PHW_ADAPTER_CONTROL HwAdapterControl
HW_INITIALIZATION_DATA_2K w2k
HW_INITIALIZATION_DATA comm
PHW_INTERRUPT HwInterrupt
BOOLEAN NeedPhysicalAddresses
ULONG SpecificLuExtensionSize
ULONG HwInitializationDataSize
PHW_INITIALIZE HwInitialize
ULONG DeviceExtensionSize
INTERFACE_TYPE AdapterInterfaceType
PHW_FIND_ADAPTER HwFindAdapter
ULONG NumberOfAccessRanges
BOOLEAN opt_ReadCacheEnable
struct _HW_DEVICE_EXTENSION * DeviceExtension
ULONG opt_MaxTransferMode
IDENTIFY_DATA2 IdentifyData
LONGLONG RecoverCount[MAX_RETRIES]
UCHAR LimitedTransferMode
ULONG opt_PreferedTransferMode
BOOLEAN opt_WriteCacheEnable
ULONG AtapiReadyWaitDelay
USHORT FirmwareRevision[4]
USHORT NumberOfCurrentCylinders
USHORT NVCache_PM_Enabled
USHORT NumberOfCurrentHeads
ULONG UserAddressableSectors
struct _IDENTIFY_DATA::@1104 FeaturesEnabled
USHORT NominalMediaRotationRate
ULONGLONG UserAddressableSectors48
USHORT CurrentSectorsPerTrack
USHORT MasterPasswdRevision
USHORT SingleWordDMAActive
struct _IDENTIFY_DATA::@1102::@1117 AtapiDMA
USHORT FirmwareRevision[4]
USHORT NVCache_PM_Supported
USHORT NVCache_PM_Version
UCHAR MaximumBlockTransfer
USHORT MultiWordDMAActive
struct _IDENTIFY_DATA::@1104 FeaturesSupport
USHORT LogicalSectorOffset
UCHAR ProductRevisionLevel[4]
UCHAR DeviceIdentificationString[28]
PHW_DEVICE_EXTENSION HwDeviceExtension
struct _MODE_POWER_CONDITION_PAGE::@932::@933 Fields
union _MODE_POWER_CONDITION_PAGE::@932 Byte3
UCHAR SenseInfoBufferLength
struct _SCSI_REQUEST_BLOCK * NextSrb
OUT BOOLEAN SupportedTypeList[0]
DRIVERSTATUS DriverStatus
UCHAR AdditionalSenseLength
UCHAR AdditionalSenseCode
UCHAR AdditionalSenseCodeQualifier
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define IOCTL_SCSI_MINIPORT_UNIATA_GET_VERSION
struct _ADAPTERINFO ADAPTERINFO
#define IOCTL_SCSI_MINIPORT_UNIATA_SET_MAX_MODE
#define UNIATA_REMOVE_FLAGS_HIDE
#define UNIATA_ADD_FLAGS_UNHIDE
#define IOCTL_SCSI_MINIPORT_UNIATA_DELETE_DEVICE
#define IOCTL_SCSI_MINIPORT_UNIATA_FIND_DEVICES
#define UNIATA_SPTI_EX_USE_DMA
#define IOCTL_SCSI_MINIPORT_UNIATA_RESETBB
#define IOCTL_SCSI_MINIPORT_UNIATA_GET_MODE
struct _UNIATA_CTL * PUNIATA_CTL
#define IOCTL_SCSI_MINIPORT_UNIATA_RESET_DEVICE
#define UNIATA_COMM_PORT_VENDOR_STR
struct _IDEREGS_EX * PIDEREGS_EX
#define UNIATA_SPTI_EX_SPEC_TO
struct _CHANINFO * PCHANINFO
#define IOCTL_SCSI_MINIPORT_UNIATA_ADAPTER_INFO
struct _GETDRVVERSION GETDRVVERSION
#define ATA_FLAGS_48BIT_COMMAND
#define ATA_C_F_DIS_RCACHE
#define ATAPI_IR_IO_toHost
#define IDX_IO1_o_BlockNumber
#define IDX_ATAPI_IO1_o_Command
#define DFLAGS_LBA_ENABLED
#define INTERRUPT_REASON_UNEXPECTED
#define IDX_IO1_o_CylinderHigh
#define ATA_C_F_DIS_MEDIASTAT
#define SCSIOP_ATA_PASSTHROUGH
#define PrintNtConsole(x)
#define ATA_C_F_DIS_WCACHE
#define IDE_COMMAND_READ_DMA_Q48
VOID NTAPI UniataDumpATARegs(IN struct _HW_CHANNEL *chan)
#define DFLAGS_ORIG_GEOMETRY
#define IDX_ATAPI_IO1_i_InterruptReason
#define AdvancedPIOModes_3
#define IDE_COMMAND_DATA_SET_MGMT
#define UNIATA_FIND_DEV_UNHIDE
#define IDX_ATAPI_IO1_o_ByteCountHigh
#define UniAta_need_lba48(command, lba, count, supp48)
#define ATAPI_DEVICE(chan, dev)
#define IDE_COMMAND_TRUSTED_SEND_DMA
#define DFLAGS_MANUAL_CHS
#define IDX_IO1_i_BlockNumber
#define IDE_COMMAND_FLUSH_CACHE48
#define IDE_COMMAND_WRITE_DMA_Q
#define AtapiStallExecution(dt)
#define ATA_ChecksumValid
#define DFLAGS_WCACHE_ENABLED
#define IDE_STATUS_SUCCESS
#define IDX_ATAPI_IO1_i_ByteCountHigh
#define IDE_COMMAND_VERIFY48
#define IDX_IO1_o_Feature
#define IDE_COMMAND_TRUSTED_RCV_DMA
#define IDE_COMMAND_SET_FEATURES
#define IDE_COMMAND_READ_STREAM48
ULONG NTAPI CheckDevice(IN PVOID HwDeviceExtension, IN ULONG Channel, IN ULONG deviceNumber, IN BOOLEAN ResetBus)
#define IDE_COMMAND_WRITE_DMA48
#define IDX_IO1_i_DriveSelect
#define IDE_COMMAND_IDLE_IMMED
#define IDE_COMMAND_WRITE_DMA_Q48
#define IDE_COMMAND_WRITE_STREAM_DMA48
#define IDE_COMMAND_WRITE_FUA_DMA48
#define IDX_IO1_i_CylinderLow
#define IDX_ATAPI_IO1_o_ByteCountLow
#define DEVNUM_NOT_SPECIFIED
#define DFLAGS_RCACHE_ENABLED
#define DFLAGS_REINIT_DMA
#define IDX_ATAPI_IO1_i_ByteCountLow
#define ATA_C_F_ENAB_RCACHE
#define DFLAGS_DWORDIO_ENABLED
#define IDE_COMMAND_WRITE_STREAM48
#define INTERRUPT_REASON_IGNORE
#define IDX_IO1_i_CylinderHigh
#define IDX_IO1_o_DriveSelect
#define IDE_COMMAND_FLUSH_CACHE
#define IDE_COMMAND_WRITE_FUA_DMA_Q48
#define IDE_COMMAND_READ48
#define IDE_COMMAND_WRITE_MUL48
#define IDX_IO1_o_Command
#define IDE_COMMAND_READ_NATIVE_SIZE
#define IDE_COMMAND_READ_NATIVE_SIZE48
#define ATA_CMD_FLAG_48supp
#define IDX_ATAPI_IO1_o_Feature
#define AtapiStringCmp(s1, s2, n)
#define IDE_COMMAND_SET_NATIVE_SIZE48
#define Connect_DbgPrint()
#define IDE_COMMAND_READ_DMA48
#define CHAN_NOT_SPECIFIED
#define AdvancedPIOModes_4
#define IDE_COMMAND_READ_STREAM_DMA48
#define IDE_COMMAND_READ_DMA_Q
#define IDE_COMMAND_SLEEP
__inline LONG ata_cur_mode_from_ident(PIDENTIFY_DATA ident, BOOLEAN Active)
#define IDE_COMMAND_STANDBY_IMMED
#define AdvancedPIOModes_5
#define IDX_IO2_o_Control
#define IDE_COMMAND_WRITE_MUL_FUA48
#define IDE_COMMAND_READ_MUL48
#define ATAPI_IR_IO_toDev
#define IDE_COMMAND_SET_NATIVE_SIZE
#define IOMODE_NOT_SPECIFIED
#define IDE_COMMAND_WRITE48
#define IDE_COMMAND_DOOR_UNLOCK
ULONG NTAPI UniataAnybodyHome(IN PVOID HwDeviceExtension, IN ULONG Channel, IN ULONG deviceNumber)
#define UniAtaClearAtaReq(AtaReq)
#define IDENT_MODE_ACTIVE
#define ATA_C_F_DIS_ACOUSTIC
#define ATA_C_F_ENAB_ACOUSTIC
ULONG NTAPI AtapiReadArgumentString(IN PVOID HwDeviceExtension, IN PVOID Context, IN PVOID BusInformation, IN PCHAR ArgumentString, IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo, OUT PBOOLEAN Again)
#define IDE_COMMAND_WRITE_LOG_DMA48
#define IDE_COMMAND_READ_LOG_DMA48
#define ATAPI_TYPE_OPTICAL
#define IDX_IO1_o_BlockCount
#define INTERRUPT_REASON_OUR
#define ATA_C_F_ENAB_WCACHE
#define IDX_IO1_o_CylinderLow
#define ATA_CMD_FLAG_LBAIOsupp
#define IDX_ATAPI_IO1_i_Error
ULONG NTAPI AtapiFindIsaController(IN PVOID HwDeviceExtension, IN PVOID Context, IN PVOID BusInformation, IN PCHAR ArgumentString, IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo, OUT PBOOLEAN Again)
#define ATA_C_F_ENAB_MEDIASTAT
#define IDE_COMMAND_DOOR_LOCK
#define UNIATA_VER_SUB_MN
#define UNIATA_VER_SUB_MJ
struct _ATA_REQ::@1201::@1203::@1207::@1210 ahci
PSCSI_REQUEST_BLOCK OriginalSrb
struct _CDB::_SERVICE_ACTION16 SERVICE_ACTION16
struct _CDB::_MEDIA_REMOVAL MEDIA_REMOVAL
struct _CDB::_MECH_STATUS MECH_STATUS
struct _CDB::_CDB16READWRITE CDB16READWRITE
struct _CDB::_WRITE_CD WRITE_CD
struct _CDB::_CDB12READWRITE CDB12READWRITE
struct _CDB::_CDB6INQUIRY CDB6INQUIRY
struct _CDB::_START_STOP START_STOP
struct _CDB::_MODE_SENSE MODE_SENSE
struct _CDB::_REPORT_LUNS REPORT_LUNS
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_INTERRUPT_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFINTERRUPT * Interrupt
_Must_inspect_result_ _In_ WDFQUEUE _In_opt_ WDFREQUEST _In_opt_ WDFFILEOBJECT _Inout_opt_ PWDF_REQUEST_PARAMETERS Parameters
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING DeviceID
_In_ WDFIORESREQLIST _In_ ULONG SlotNumber
_In_ ULONG _In_ ULONG_PTR ident
void int int ULONGLONG int va_list * ap
struct _DRIVER_OBJECT * PDRIVER_OBJECT