280 ULONG waitCount = 20000;
308 "IssueIdentify: Checking for IDE. Status (%x)\n",
331 if (signatureLow == 0x14 && signatureHigh == 0xEB) {
341 "IssueIdentify: Resetting controller.\n"));
373 if (signatureLow == 0x14 && signatureHigh == 0xEB) {
382 statusByte &= ~IDE_STATUS_INDEX;
398 "IssueIdentify: Checking for ATAPI. Status (%x)\n",
410 for (
j = 0;
j < 2;
j++) {
424 for (
i = 0;
i < 4;
i++) {
444 if (signatureLow == 0x14 && signatureHigh == 0xEB) {
465 if (signatureLow == 0x14 && signatureHigh == 0xEB) {
478 if (
i == 4 &&
j == 0) {
485 "IssueIdentify: DRQ never asserted (%x). Error reg (%x)\n",
494 "IssueIdentify: Status after soft reset (%x)\n",
514 "IssueIdentify: Status before read words %x\n",
542 DebugPrint((2,
"IssueIdentify: Marking drive %d as removable. SFE = %d\n",
573 "IssueIdentify: Device interrupts on assertion of DRQ.\n"));
578 "IssueIdentify: Device does not interrupt on assertion of DRQ.\n"));
591 "IssueIdentify: Device is a tape drive.\n"));
596 "IssueIdentify: Device is not a tape drive.\n"));
606 for (
i = 0;
i < 0x10000;
i++) {
626 "IssueIdentify: Status after read words (%x)\n",
669 "SetDriveParameters: Number of heads %x\n",
673 "SetDriveParameters: Sectors per track %x\n",
697 for (
i=0;
i<30 * 1000;
i++) {
706 "SetDriveParameters: Error bit set. Status %x, error %x\n",
722 if (
i == 30 * 1000) {
764 DebugPrint((2,
"AtapiResetController: Reset IDE\n"));
814 for (
j = 0;
j < numberChannels;
j++) {
823 for (
i = 0;
i < 2;
i++) {
843 "AtapiResetController: Status before Atapi reset (%x).\n",
850 if (statusByte == 0x0) {
859 "AtapiResetController: Status after soft reset %x\n",
884 "AtapiResetController: SetDriveParameters failed\n"));
942 "MapError: Error register is %x\n",
947 switch (errorByte >> 4) {
951 "ATAPI: No sense information\n"));
959 "ATAPI: Recovered error\n"));
967 "ATAPI: Device not ready\n"));
975 "ATAPI: Media error\n"));
983 "ATAPI: Hardware error\n"));
991 "ATAPI: Illegal request\n"));
999 "ATAPI: Unit attention\n"));
1007 "ATAPI: Data protect\n"));
1015 "ATAPI: Blank check\n"));
1022 "Atapi: Command Aborted\n"));
1030 "ATAPI: Invalid sense information\n"));
1048 "IDE: Media change\n"));
1054 "IDE: Command abort\n"));
1063 senseBuffer->
Valid = 1;
1077 "IDE: End of media\n"));
1087 "IDE: Illegal length\n"));
1093 "IDE: Bad block\n"));
1101 senseBuffer->
Valid = 1;
1113 "IDE: Id not found\n"));
1122 senseBuffer->
Valid = 1;
1136 "IDE: Media change\n"));
1145 senseBuffer->
Valid = 1;
1157 "IDE: Data error\n"));
1174 senseBuffer->
Valid = 1;
1189 "MapError: Disabling 32-bit PIO and Multi-sector IOs\n"));
1206 for (
i = 0;
i < 4;
i++) {
1217 (
UCHAR)(((
i & 0x1) << 4) | 0xA0));
1253 "AtapiHwInitialize: Error setting multiple mode. Status %x, error byte %x\n",
1305 UCHAR statusByte, errorByte;
1308 for (
i = 0;
i < 4;
i++) {
1331 (
UCHAR)(((
i & 0x1) << 4) | 0xA0));
1367 "AtapiHwInitialize: Error setting multiple mode. Status %x, error byte %x\n",
1378 "AtapiHwInitialize: Using Multiblock on Device %d. Blocks / int - %d\n",
1392 for (
j = 0;
j < 13;
j += 2) {
1408 if (vendorId[12] ==
'C') {
1457 }
while (waitCount--);
1476 if (MechanismStatus) {
1519 skipSetParameters =
FALSE;
1520 ULONG waitCount = 10000;
1538 for (deviceNumber = 0; deviceNumber < 2; deviceNumber++) {
1545 (
UCHAR)((deviceNumber << 4) | 0xA0));
1552 if (statusByte == 0xFF) {
1562 if (signatureLow == 0x14 && signatureHigh == 0xEB) {
1588 "FindDevices: Device %x is ATAPI\n",
1594 deviceResponded =
TRUE;
1609 "FindDevices: Device %x not responding\n",
1635 "FindDevices: Device %x is IDE\n",
1641 deviceResponded =
TRUE;
1664 if (signatureLow == 0x14 && signatureHigh == 0xEB) {
1671 for (
i = 0;
i < 2;
i++) {
1688 "FindDevices: Found nasty Compaq ESDI!\n"));
1706 "FindDevices: Found nasty Compaq ESDI!\n"));
1725 "FindDevices: Found nasty UltraStor ESDI!\n"));
1735 skipSetParameters =
TRUE;
1739 if (!skipSetParameters) {
1748 (
UCHAR)((
i << 4) | 0xA0));
1759 "FindDevices: Resetting controller before SetDriveParameters.\n"));
1765 (
UCHAR)((
i << 4) | 0xA0));
1781 "FindDevices: Status before SetDriveParameters: (%x) (%x)\n",
1792 "AtapHwInitialize: Set drive parameters for device %d failed\n",
1818 deviceResponded =
TRUE;
1838 if (!deviceResponded) {
1845 return deviceResponded;
1880 ULONG stringLength = 0;
1881 ULONG keyWordLength = 0;
1897 if (*cptr >=
'A' && *cptr <=
'Z') {
1898 *cptr = *cptr + (
'a' -
'A');
1911 if (*cptr >=
'A' && *cptr <=
'Z') {
1912 *cptr = *cptr + (
'a' -
'A');
1918 if (keyWordLength > stringLength) {
1939 while (*cptr ==
' ' || *cptr ==
'\t') {
1943 if (*cptr ==
'\0') {
1953 while (*cptr++ == *kptr++) {
1955 if (*(cptr - 1) ==
'\0') {
1965 if (*(kptr - 1) ==
'\0') {
1972 while (*cptr ==
' ' || *cptr ==
'\t') {
1987 if (*cptr++ ==
';') {
1988 goto ContinueSearch;
2004 while ((*cptr ==
' ') || (*cptr ==
'\t')) {
2008 if (*cptr ==
'\0') {
2024 goto ContinueSearch;
2028 if ((*cptr ==
'0') && (*(cptr + 1) ==
'x')) {
2037 if (*(cptr +
index) ==
' ' ||
2038 *(cptr +
index) ==
'\t' ||
2039 *(cptr +
index) ==
';') {
2043 if ((*(cptr +
index) >=
'0') && (*(cptr +
index) <=
'9')) {
2046 if ((*(cptr +
index) >=
'a') && (*(cptr +
index) <=
'f')) {
2065 if (*(cptr +
index) ==
' ' ||
2066 *(cptr +
index) ==
'\t' ||
2067 *(cptr +
index) ==
';') {
2071 if ((*(cptr +
index) >=
'0') && (*(cptr +
index) <=
'9')) {
2091 if (*cptr++ ==
';') {
2092 goto ContinueSearch;
2155 CONST ULONG AdapterAddresses[5] = {0x1F0, 0x170, 0x1e8, 0x168, 0};
2162 CONST ULONG InterruptLevels[5] = {14, 15, 11, 10, 0};
2164 if (!deviceExtension) {
2173 if (ArgumentString) {
2201 ConfigInfo->AdapterInterfaceType,
2202 ConfigInfo->SystemIoBusNumber,
2203 (*ConfigInfo->AccessRanges)[0].RangeStart,
2204 (*ConfigInfo->AccessRanges)[0].RangeLength,
2205 (
BOOLEAN) !((*ConfigInfo->AccessRanges)[0].RangeInMemory));
2217 while (AdapterAddresses[*adapterCount] != 0) {
2221 for (
i = 0;
i < 4;
i++) {
2241 if (preConfig ==
FALSE) {
2245 ConfigInfo->AdapterInterfaceType,
2246 ConfigInfo->SystemIoBusNumber,
2252 ConfigInfo->AdapterInterfaceType,
2253 ConfigInfo->SystemIoBusNumber,
2295 "AtapiFindController: Identifier read back from Master (%x)\n",
2313 "AtapiFindController: First access to status %x\n",
2318 goto retryIdentifier;
2337 "AtapiFindController: Identifier read back from Slave (%x)\n",
2361 if (preConfig ==
FALSE) {
2371 (*ConfigInfo->AccessRanges)[0].RangeStart =
2375 (*ConfigInfo->AccessRanges)[0].RangeLength = 8;
2376 (*ConfigInfo->AccessRanges)[0].RangeInMemory =
FALSE;
2383 ConfigInfo->BusInterruptLevel =
irq;
2385 ConfigInfo->BusInterruptLevel = InterruptLevels[*adapterCount - 1];
2388 if (ConfigInfo->AdapterInterfaceType ==
MicroChannel) {
2391 ConfigInfo->InterruptMode =
Latched;
2401 ConfigInfo->AdapterInterfaceType,
2402 ConfigInfo->SystemIoBusNumber,
2408 ConfigInfo->AdapterInterfaceType,
2409 ConfigInfo->SystemIoBusNumber,
2419 ConfigInfo->NumberOfBuses = 1;
2420 ConfigInfo->MaximumNumberOfTargets = 2;
2426 ConfigInfo->MaximumTransferLength = 0x10000;
2429 "AtapiFindController: Found IDE at %x\n",
2438 if (preConfig ==
FALSE) {
2441 if (*adapterCount - 1 < 2) {
2448 if (ArgumentString) {
2452 "AtapiFindController: Crash dump\n"));
2457 "AtapiFindController: Atapi Only\n"));
2464 "AtapiFindController: Atapi Only\n"));
2480 slotData.
u.
bits.DeviceNumber = 0;
2481 slotData.
u.
bits.FunctionNumber = 0;
2532 ConfigInfo->AtdiskSecondaryClaimed =
TRUE;
2536 ConfigInfo->AtdiskPrimaryClaimed =
TRUE;
2543 if (*adapterCount == 1) {
2544 ConfigInfo->AtdiskPrimaryClaimed =
TRUE;
2546 }
else if (*adapterCount == 2) {
2547 ConfigInfo->AtdiskSecondaryClaimed =
TRUE;
2563 *(adapterCount) = 0;
2603 ULONG functionNumber;
2606 UCHAR vendorString[5];
2607 UCHAR deviceString[5];
2623 slotData.
u.
bits.DeviceNumber = slotNumber;
2629 for (functionNumber= *FunctionNumber;
2633 slotData.
u.
bits.FunctionNumber = functionNumber;
2664 vendorStrPtr = vendorString;
2665 deviceStrPtr = deviceString;
2670 "FindBrokenController: Bus %x Slot %x Function %x Vendor %s Product %s\n",
2695 *FunctionNumber = functionNumber;
2701 *FunctionNumber = 0;
2749 deviceFound =
FALSE;
2755 UCHAR vendorString[5];
2756 UCHAR deviceString[5];
2767 CONST ULONG AdapterAddresses[3] = {0x1F0, 0x170, 0};
2769 if (!deviceExtension) {
2776 slotData.
u.
bits.DeviceNumber = ConfigInfo->SlotNumber;
2778 for (funcNumber= 0; funcNumber < 8; funcNumber++) {
2780 slotData.
u.
bits.FunctionNumber = funcNumber;
2784 ConfigInfo->SystemIoBusNumber,
2788 if (busDataRead !=
sizeof (pciData)) {
2799 vendorStrPtr = vendorString;
2800 deviceStrPtr = deviceString;
2817 if (pciData.ProgIf & ((1 << 2) | (1 << 0))) {
2827 if (*Again !=
FALSE) {
2829 for (channel = 0; channel < 2; channel++) {
2831 IoBasePort1 = (*ConfigInfo->AccessRanges)[channel * 2 + 0].RangeStart;
2832 IoBasePort2 = (*ConfigInfo->AccessRanges)[channel * 2 + 1].RangeStart;
2840 ConfigInfo->AdapterInterfaceType,
2841 ConfigInfo->SystemIoBusNumber,
2873 "AtapiFindPciController: Identifier read back from Master (%x)\n",
2892 "AtapiFindPciController: Identifier read back from Slave (%x)\n",
2910 goto setStatusAndExit;
2929 ConfigInfo->AdapterInterfaceType,
2930 ConfigInfo->SystemIoBusNumber,
2943 ConfigInfo->NumberOfBuses = 1;
2950 ConfigInfo->MaximumNumberOfTargets = 4;
2956 ConfigInfo->MaximumTransferLength = 0x10000;
2959 "AtapiFindPciController: Found native mode IDE at %x\n",
2988 ConfigInfo->AtdiskPrimaryClaimed =
TRUE;
2992 ConfigInfo->AtdiskSecondaryClaimed =
TRUE;
3049 static ULONG functionNumber,
3056 controllerFound =
FALSE,
3057 deviceFound =
FALSE;
3065 CONST ULONG AdapterAddresses[5] = {0x1F0, 0x170, 0x1e8, 0x168, 0};
3072 CONST ULONG InterruptLevels[5] = {14, 15, 11, 10, 0};
3074 if (!deviceExtension) {
3119 ConfigInfo->SystemIoBusNumber,
3124 controllerFound =
TRUE;
3127 "Found broken PCI IDE controller: VendorId %s, DeviceId %s\n",
3131 if (AdapterAddresses[*adapterCount] != 0) {
3133 for (
j = 0;
j < 2;
j++) {
3140 ConfigInfo->AdapterInterfaceType,
3141 ConfigInfo->SystemIoBusNumber,
3179 "AtapiFindPciController: Identifier read back from Master (%x)\n",
3198 "AtapiFindPciController: Identifier read back from Slave (%x)\n",
3216 goto setStatusAndExit;
3224 if (controllerFound) {
3236 (*ConfigInfo->AccessRanges)[channel].RangeStart =
3239 (*ConfigInfo->AccessRanges)[channel].RangeLength = 8;
3240 (*ConfigInfo->AccessRanges)[channel].RangeInMemory =
FALSE;
3247 ConfigInfo->BusInterruptLevel = InterruptLevels[*adapterCount - 1];
3248 ConfigInfo->InterruptMode =
Latched;
3250 ConfigInfo->BusInterruptLevel2 = InterruptLevels[*adapterCount - 1];
3251 ConfigInfo->InterruptMode2 =
Latched;
3259 ConfigInfo->AdapterInterfaceType,
3260 ConfigInfo->SystemIoBusNumber,
3273 ConfigInfo->NumberOfBuses = 1;
3280 ConfigInfo->MaximumNumberOfTargets = 4;
3286 ConfigInfo->MaximumTransferLength = 0x10000;
3289 "AtapiFindPciController: Found broken IDE at %x\n",
3317 if (*adapterCount == 1) {
3318 ConfigInfo->AtdiskPrimaryClaimed =
TRUE;
3321 }
else if (*adapterCount == 2) {
3322 ConfigInfo->AtdiskSecondaryClaimed =
TRUE;
3339 if (controllerFound && deviceFound) {
3362 IN char *DataBuffer,
3366 ULONG bytesAdjust = 0;
3405 return bytesAdjust >> 1;
3429 "AtapiCallBack: Invalid CDB marked as RDP - %x\n",
3435 if (deviceExtension->
RDP) {
3464 "AtapiCallBack: Requesting another timer for Op %x\n",
3477 "AtapiCallBack: Calling ISR directly due to BUSY\n"));
3509 ULONG wordCount = 0, wordsThisInterrupt = 256;
3512 UCHAR statusByte,interruptReason;
3520 "AtapiInterrupt: CurrentSrb is NULL\n"));
3555 "AtapiInterrupt: Unexpected interrupt.\n"));
3566 "AtapiInterrupt: Entered with status (%x)\n",
3579 "AtapiInterrupt: Hit BUSY while polling during crashdump.\n"));
3588 for (
i = 0;
i < 10;
i++) {
3600 "AtapiInterrupt: BUSY on entry. Status %x, Base IO %x\n",
3638 wordsThisInterrupt = 256;
3651 interruptReason = 0x2;
3654 interruptReason = 0x0;
3676 for (
k = 0;
k < 5000;
k++) {
3692 "AtapiInterrupt: Resetting due to DRQ not up. Status %x, Base IO %x\n",
3710 interruptReason = 0x3;
3722 "AtapiInterrupt: Writing Atapi packet.\n"));
3734 }
else if (interruptReason == 0x0 && (statusByte &
IDE_STATUS_DRQ)) {
3758 if (wordCount != deviceExtension->
WordsLeft) {
3760 "AtapiInterrupt: %d words requested; %d words xferred\n",
3769 if (wordCount > deviceExtension->
WordsLeft) {
3779 if (deviceExtension->
WordsLeft < wordsThisInterrupt) {
3793 wordCount = wordsThisInterrupt;
3804 "AtapiInterrupt: Write interrupt\n"));
3808 if (atapiDev || !deviceExtension->
DWordIO) {
3824 "AtapiInterrupt: Int reason %x, but srb is for a write %x.\n",
3842 deviceExtension->
WordsLeft -= wordCount;
3846 }
else if (interruptReason == 0x2 && (statusByte &
IDE_STATUS_DRQ)) {
3867 if (wordCount != deviceExtension->
WordsLeft) {
3869 "AtapiInterrupt: %d words requested; %d words xferred\n",
3878 if (wordCount > deviceExtension->
WordsLeft) {
3888 if (deviceExtension->
WordsLeft < wordsThisInterrupt) {
3902 wordCount = wordsThisInterrupt;
3913 "AtapiInterrupt: Read interrupt\n"));
3917 if (atapiDev || !deviceExtension->
DWordIO) {
3932 "AtapiInterrupt: Int reason %x, but srb is for a read %x.\n",
3963 deviceExtension->
WordsLeft -= wordCount;
3979 if ((srb->
Cdb[0] == 0x25) &&
3983 if (deviceExtension->
DataBuffer[0] == 0x00) {
4016 }
else if (interruptReason == 0x3 && !(statusByte &
IDE_STATUS_DRQ)) {
4143 for (
i = 0;
i < 30;
i++) {
4158 "AtapiInterrupt: Resetting due to BSY still up - %x. Base Io %x\n",
4171 for (
i = 0;
i < 500;
i++) {
4187 "AtapiInterrupt: Resetting due to DRQ still up - %x\n",
4243 if (!(deviceExtension->
RDP)) {
4295 "AtapiInterrupt: No SRB!\n"));
4302 if (!(deviceExtension->
RDP)) {
4330 "AtapiInterrupt: Unexpected interrupt. InterruptReason %x. Status %x.\n",
4373 UCHAR statusByte,targetId;
4401 "IdeSendSmartCommand: Returning BUSY status\n"));
4410 ((
PUCHAR)cmdOutParameters)[
i] = 0;
4451 "IdeSendSmartCommand: Returning BUSY status\n"));
4460 ((
PUCHAR)cmdOutParameters)[
i] = 0;
4527 UCHAR statusByte,statusByte2;
4528 UCHAR cylinderHigh,cylinderLow,drvSelect,sectorNumber;
4541 "IdeReadWrite: Returning BUSY status\n"));
4569 startingSector = ((
PCDB)
Srb->
Cdb)->CDB10.LogicalBlockByte3 |
4570 ((
PCDB)
Srb->
Cdb)->CDB10.LogicalBlockByte2 << 8 |
4571 ((
PCDB)
Srb->
Cdb)->CDB10.LogicalBlockByte1 << 16 |
4572 ((
PCDB)
Srb->
Cdb)->CDB10.LogicalBlockByte0 << 24;
4575 "IdeReadWrite: Starting sector is %x, Number of bytes %x\n",
4611 "IdeReadWrite: Cylinder %x Head %x Sector %x\n",
4649 if (deviceExtension->
WordsLeft < wordCount) {
4676 "IdeReadWrite 2: Returning BUSY status %x\n",
4681 for (
i = 0;
i < 1000;
i++) {
4693 "IdeReadWrite: DRQ never asserted (%x) original status (%x)\n",
4726 deviceExtension->
WordsLeft -= wordCount;
4769 ULONG startingSector;
4783 "IdeVerify: Total sectors %x\n",
4790 startingSector = ((
PCDB)
Srb->
Cdb)->CDB10.LogicalBlockByte3 |
4791 ((
PCDB)
Srb->
Cdb)->CDB10.LogicalBlockByte2 << 8 |
4792 ((
PCDB)
Srb->
Cdb)->CDB10.LogicalBlockByte1 << 16 |
4793 ((
PCDB)
Srb->
Cdb)->CDB10.LogicalBlockByte0 << 24;
4796 "IdeVerify: Starting sector %x. Number of blocks %x\n",
4805 "IdeVerify: Ending sector %x\n",
4815 "IdeVerify: Truncating request to %x blocks\n",
4816 sectors - startingSector - 1));
4852 (
UCHAR)((startingSector %
4860 (
UCHAR)(startingSector /
4869 (
UCHAR)((startingSector /
4878 (
UCHAR)(((startingSector /
4884 "IdeVerify: Cylinder %x Head %x Sector %x\n",
4965 modeSelect10->
PFBit = 1;
5008 UCHAR statusByte,byteCountLow,byteCountHigh;
5049 "AtapiSendCommand: Command %x to TargetId %d lun %d\n",
5068 }
else if (
Srb->
Lun > 0) {
5090 "AtapiSendCommand: Entered with status %x\n",
5095 "AtapiSendCommand: Device busy (%x)\n",
5105 "AtapiSendCommand: Error on entry: (%x)\n",
5124 DebugPrint((2,
"AtapiSendCommand: DSC not set. %x\n",statusByte));
5133 "AtapiSendCommand: %x mapped as DSC restrictive\n",
5144 "AtapiSendCommand: Entered with status (%x). Attempting to recover.\n",
5152 for (
i = 0;
i < 0x10000;
i++) {
5169 "AtapiSendCommand: DRQ still asserted.Status (%x)\n",
5175 "AtapiSendCommand: Issued soft reset to Atapi device. \n"));
5255 byteCountLow = byteCountHigh = 0xFF;
5276 "AtapiSendCommand: Wait for int. to send packet. Status (%x)\n",
5302 "AtapiSendCommand: DRQ never asserted (%x)\n",
5364 UCHAR statusByte,errorByte;
5370 "IdeSendCommand: Command %x to device %d\n",
5425 for (
i = 0;
i < 8;
i += 2) {
5432 for (
i = 0;
i < 12;
i += 2) {
5443 for (
i = 0;
i < 4;
i++) {
5452 for (
i = 0;
i < 4;
i += 2) {
5588 "IDE disk %x - #sectors %x, #heads %x, #cylinders %x\n",
5642 "IdeSendCommand: Unsupported command %x\n",
5675 UCHAR statusByte,errorByte;
5678 if (EnableMSN !=
FALSE){
5702 "IdeMediaStatus: Error enabling media status. Status %x, error byte %x\n",
5707 DebugPrint((1,
"IdeMediaStatus: Media Status Notification Supported\n"));
5725 deviceExtension->
DeviceFlags[Channel] &= ~DFLAGS_MEDIA_STATUS_ENABLED;
5770 senseBuffer->
Valid = 1;
5778 senseBuffer->
Valid = 1;
5786 senseBuffer->
Valid = 1;
5794 senseBuffer->
Valid = 1;
5854 "AtapiStartIo: Already have a request!\n"));
5896 DebugPrint((1,
"AtapiStartIo: SRB to abort already completed\n"));
5920 DebugPrint((1,
"AtapiStartIo: Reset bus request received\n"));
5925 DebugPrint((1,
"AtapiStartIo: Reset bus failed\n"));
5955 "AtapiStartIo: Already have a request!\n"));
5972 "AtapiStartIo: IoControl signature incorrect. Send %s, expected %s\n",
6071 ((
PUCHAR)cmdOutParameters)[
i] = 0;
6137 "AtapiStartIo: Srb %x complete with status %x\n",
6202 ULONG statusToReturn, newStatus;
6204 DebugPrint((1,
"\n\nATAPI IDE MiniPort Driver\n"));
6206 statusToReturn = 0xffffffff;
6258 &hwInitializationData,
6260 if (newStatus < statusToReturn)
6261 statusToReturn = newStatus;
6282 &hwInitializationData,
6284 if (newStatus < statusToReturn)
6285 statusToReturn = newStatus;
6306 &hwInitializationData,
6308 if (newStatus < statusToReturn)
6309 statusToReturn = newStatus;
6320 &hwInitializationData,
6322 if (newStatus < statusToReturn)
6323 statusToReturn = newStatus;
6325 return statusToReturn;
6348 first = *FirstStr++;
6349 last = *SecondStr++;
6411 for (
i = 0;
i < 4;
i++) {
6421 *
string++ = (
char) (digval - 10 +
'a');
6423 *
string++ = (
char) (digval +
'0');
6436 *
string = *firstdig;
6440 }
while (firstdig <
string);
ACPI_SIZE strlen(const char *String)
#define DFLAGS_ATAPI_DEVICE
struct _IDE_REGISTERS_3 * PIDE_REGISTERS_3
#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 IDENTIFY_DATA_SIZE
#define DFLAGS_CHANGER_INITED
#define IDE_COMMAND_GET_MEDIA_STATUS
struct _IDE_REGISTERS_2 * PIDE_REGISTERS_2
#define IDE_COMMAND_ATAPI_IDENTIFY
#define IDE_COMMAND_SET_DRIVE_PARAMETERS
#define IDE_DC_RESET_CONTROLLER
#define ReadBuffer(BaseIoAddress, Buffer, Count)
#define IDE_COMMAND_IDENTIFY
#define IDE_ERROR_ILLEGAL_LENGTH
#define IDE_ERROR_COMMAND_ABORTED
#define IDE_COMMAND_ENABLE_MEDIA_STATUS
#define WaitOnBaseBusy(BaseIoAddress, Status)
#define NUM_NATIVE_MODE_ADAPTERS
#define IDE_COMMAND_WRITE_MULTIPLE
#define IDE_COMMAND_WRITE
#define IDE_COMMAND_VERIFY
#define IDE_ERROR_MEDIA_CHANGE
#define IDE_COMMAND_READ_MULTIPLE
#define IdeHardReset(BaseIoAddress, result)
#define IDE_COMMAND_ATAPI_PACKET
#define IDE_ERROR_MEDIA_CHANGE_REQ
#define GetStatus(BaseIoAddress, Status)
#define DFLAGS_TAPE_DEVICE
#define IS_RDP(OperationCode)
#define DFLAGS_MEDIA_STATUS_ENABLED
struct _MODE_PARAMETER_HEADER_10 MODE_PARAMETER_HEADER_10
#define IDE_COMMAND_MEDIA_EJECT
#define DFLAGS_REMOVABLE_DRIVE
#define IDE_ERROR_DATA_ERROR
#define IDE_COMMAND_SET_MULTIPLE
struct _MODE_PARAMETER_HEADER_10 * PMODE_PARAMETER_HEADER_10
#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 ATAPI_MODE_SELECT
struct _IDE_REGISTERS_1 * PIDE_REGISTERS_1
struct _MODE_SENSE_10 * PMODE_SENSE_10
BROKEN_CONTROLLER_INFORMATION const BrokenAdapters[]
struct _ATAPI_REGISTERS_2 * PATAPI_REGISTERS_2
#define ReadBuffer2(BaseIoAddress, Buffer, Count)
struct _ATAPI_REGISTERS_1 * PATAPI_REGISTERS_1
NATIVE_MODE_CONTROLLER_INFORMATION const NativeModeAdapters[]
#define AtapiSoftReset(BaseIoAddress, DeviceNumber)
struct _MODE_SELECT_10 * PMODE_SELECT_10
#define ATAPI_FORMAT_UNIT
ULONG NTAPI AtapiParseArgumentString(IN PCHAR String, IN PCHAR KeyWord)
ULONG NTAPI IdeReadWrite(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb)
ULONG NTAPI IdeBuildSenseBuffer(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb)
ULONG NTAPI IdeSendCommand(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb)
VOID NTAPI AtapiCallBack(IN PVOID HwDeviceExtension)
ULONG NTAPI AtapiFindPCIController(IN PVOID HwDeviceExtension, IN PVOID Context, IN PVOID BusInformation, IN PCHAR ArgumentString, IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo, OUT PBOOLEAN Again)
VOID NTAPI Scsi2Atapi(IN PSCSI_REQUEST_BLOCK Srb)
BOOLEAN NTAPI AtapiInterrupt(IN PVOID HwDeviceExtension)
struct _HW_LU_EXTENSION HW_LU_EXTENSION
ULONG NTAPI MapError(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb)
ULONG NTAPI Atapi2Scsi(IN PSCSI_REQUEST_BLOCK Srb, IN char *DataBuffer, IN ULONG ByteCount)
BOOLEAN NTAPI AtapiResetController(IN PVOID HwDeviceExtension, IN ULONG PathId)
BOOLEAN NTAPI AtapiHwInitialize(IN PVOID HwDeviceExtension)
ULONG NTAPI IdeSendSmartCommand(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb)
BOOLEAN NTAPI SetDriveParameters(IN PVOID HwDeviceExtension, IN ULONG DeviceNumber, IN ULONG Channel)
struct _HW_DEVICE_EXTENSION * PHW_DEVICE_EXTENSION
struct _HW_LU_EXTENSION * PHW_LU_EXTENSION
BOOLEAN NTAPI AtapiStartIo(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb)
struct _HW_DEVICE_EXTENSION HW_DEVICE_EXTENSION
ULONG NTAPI AtapiFindNativeModeController(IN PVOID HwDeviceExtension, IN PVOID Context, IN PVOID BusInformation, IN PCHAR ArgumentString, IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo, OUT PBOOLEAN Again)
BOOLEAN NTAPI IssueIdentify(IN PVOID HwDeviceExtension, IN ULONG DeviceNumber, IN ULONG Channel, IN UCHAR Command)
VOID NTAPI AtapiZeroMemory(IN PUCHAR Buffer, IN ULONG Count)
BOOLEAN NTAPI FindBrokenController(IN PVOID DeviceExtension, IN PUCHAR VendorID, IN ULONG VendorIDLength, IN PUCHAR DeviceID, IN ULONG DeviceIDLength, IN OUT PULONG FunctionNumber, IN OUT PULONG SlotNumber, IN ULONG BusNumber, OUT PBOOLEAN LastSlot)
VOID NTAPI IdeMediaStatus(IN BOOLEAN EnableMSN, IN PVOID HwDeviceExtension, IN ULONG Channel)
PSCSI_REQUEST_BLOCK NTAPI BuildMechanismStatusSrb(IN PVOID HwDeviceExtension, IN ULONG PathId, IN ULONG TargetId)
ULONG NTAPI IdeVerify(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb)
PSCSI_REQUEST_BLOCK NTAPI BuildRequestSenseSrb(IN PVOID HwDeviceExtension, IN ULONG PathId, IN ULONG TargetId)
ULONG NTAPI AtapiSendCommand(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb)
ULONG NTAPI AtapiFindController(IN PVOID HwDeviceExtension, IN PVOID Context, IN PVOID BusInformation, IN PCHAR ArgumentString, IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo, OUT PBOOLEAN Again)
VOID NTAPI AtapiHexToString(ULONG Value, PCHAR *Buffer)
VOID NTAPI AtapiHwInitializeChanger(IN PVOID HwDeviceExtension, IN ULONG TargetId, IN PMECHANICAL_STATUS_INFORMATION_HEADER MechanismStatus)
struct _SENDCMDOUTPARAMS * PSENDCMDOUTPARAMS
struct _SENDCMDOUTPARAMS SENDCMDOUTPARAMS
struct _SENDCMDINPARAMS * PSENDCMDINPARAMS
VOID NTAPI ScsiPortCompleteRequest(IN PVOID HwDeviceExtension, IN UCHAR PathId, IN UCHAR TargetId, IN UCHAR Lun, IN UCHAR SrbStatus)
ULONG NTAPI ScsiPortInitialize(IN PVOID Argument1, IN PVOID Argument2, IN PHW_INITIALIZATION_DATA HwInitializationData, IN PVOID HwContext OPTIONAL)
USHORT NTAPI ScsiPortReadPortUshort(IN PUSHORT Port)
VOID __cdecl ScsiPortNotification(IN SCSI_NOTIFICATION_TYPE NotificationType, IN PVOID HwDeviceExtension, IN ...)
SCSI_PHYSICAL_ADDRESS NTAPI ScsiPortConvertUlongToPhysicalAddress(IN ULONG_PTR UlongAddress)
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 ScsiPortWritePortUchar(IN PUCHAR Port, IN UCHAR Value)
VOID NTAPI ScsiPortMoveMemory(IN PVOID WriteBuffer, IN PVOID ReadBuffer, IN ULONG Length)
VOID NTAPI ScsiPortFreeDeviceBase(IN PVOID HwDeviceExtension, IN PVOID MappedAddress)
VOID NTAPI ScsiPortStallExecution(IN ULONG Delay)
UCHAR NTAPI ScsiPortReadPortUchar(IN PUCHAR Port)
ULONG NTAPI ScsiPortGetBusData(IN PVOID DeviceExtension, IN ULONG BusDataType, IN ULONG SystemIoBusNumber, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Length)
PVOID NTAPI ScsiPortGetDeviceBase(IN PVOID HwDeviceExtension, IN INTERFACE_TYPE BusType, IN ULONG SystemIoBusNumber, IN SCSI_PHYSICAL_ADDRESS IoAddress, IN ULONG NumberOfBytes, IN BOOLEAN InIoSpace)
_In_ PSCSI_REQUEST_BLOCK Srb
_In_ ULONG _In_ UCHAR PageCode
#define SCSISTAT_CHECK_CONDITION
#define SCSI_SENSE_NO_SENSE
struct _READ_CAPACITY_DATA * PREAD_CAPACITY_DATA
#define IOCTL_SCSI_MINIPORT_SAVE_ATTRIBUTE_VALUES
#define IOCTL_SCSI_MINIPORT_READ_SMART_ATTRIBS
#define SCSIOP_REQUEST_SENSE
#define SCSIOP_TEST_UNIT_READY
#define IOCTL_SCSI_MINIPORT_DISABLE_SMART
#define SCSI_SENSE_DATA_PROTECT
#define DIRECT_ACCESS_DEVICE
#define SCSI_SENSE_MEDIUM_ERROR
struct _SENSE_DATA * PSENSE_DATA
#define SCSIOP_FORMAT_UNIT
#define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTOSAVE
struct _MECHANICAL_STATUS_INFORMATION_HEADER MECHANICAL_STATUS_INFORMATION_HEADER
#define SCSIOP_READ_CAPACITY
#define SCSIOP_MECHANISM_STATUS
#define IOCTL_SCSI_MINIPORT_IDENTIFY
struct _SENSE_DATA SENSE_DATA
#define IOCTL_SCSI_MINIPORT_EXECUTE_OFFLINE_DIAGS
#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_ADSENSE_MEDIUM_CHANGED
#define IOCTL_SCSI_MINIPORT_SMART_VERSION
#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_SELECT
#define SCSI_SENSE_NOT_READY
#define SCSI_SENSE_ABORTED_COMMAND
_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
DRIVER_INITIALIZE DriverEntry
NTSTATUS NTAPI CompleteRequest(IN PIRP Irp, IN NTSTATUS Status, IN ULONG_PTR Information)
struct _SCSI_REQUEST_BLOCK SCSI_REQUEST_BLOCK
#define SRB_STATUS_BUS_RESET
#define SRB_FUNCTION_IO_CONTROL
#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 _HW_INITIALIZATION_DATA HW_INITIALIZATION_DATA
#define SRB_FUNCTION_RESET_BUS
#define SP_INTERNAL_ADAPTER_ERROR
#define SRB_STATUS_TIMEOUT
#define SRB_STATUS_AUTOSENSE_VALID
#define ScsiPortConvertPhysicalAddressToUlong(Address)
#define SRB_FLAGS_DATA_IN
#define SRB_STATUS_ABORT_FAILED
#define SRB_STATUS_SELECTION_TIMEOUT
#define SRB_FLAGS_DISABLE_SYNCH_TRANSFER
#define SP_RETURN_NOT_FOUND
#define SRB_STATUS_SUCCESS
#define SRB_STATUS_INVALID_REQUEST
#define SRB_FUNCTION_ABORT_COMMAND
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 EXECUTE_OFFLINE_DIAGS
#define READ_ATTRIBUTE_BUFFER_SIZE
#define SAVE_ATTRIBUTE_VALUES
#define RETURN_SMART_STATUS
#define IDENTIFY_BUFFER_SIZE
struct _GETVERSIONINPARAMS * PGETVERSIONINPARAMS
#define ENABLE_DISABLE_AUTOSAVE
_In_ ULONG _In_ ULONG _In_ ULONG Length
struct _SRB_IO_CONTROL SRB_IO_CONTROL
SENSE_DATA MechStatusSense
PSCSI_REQUEST_BLOCK OriginalSrb
IDENTIFY_DATA FullIdentifyData
BOOLEAN ExpectingInterrupt
UCHAR ReturningMediaStatus
PIDE_REGISTERS_2 BaseIoAddress2[2]
ULONG MechStatusRetryCount
UCHAR MaximumBlockXfer[4]
PSCSI_REQUEST_BLOCK CurrentSrb
PIDE_REGISTERS_1 BaseIoAddress1[2]
IDENTIFY_DATA2 IdentifyData[4]
SCSI_REQUEST_BLOCK InternalSrb
MECHANICAL_STATUS_INFORMATION_HEADER MechStatusData
PHW_INTERRUPT HwInterrupt
ULONG SpecificLuExtensionSize
ULONG HwInitializationDataSize
PHW_INITIALIZE HwInitialize
ULONG DeviceExtensionSize
INTERFACE_TYPE AdapterInterfaceType
PHW_FIND_ADAPTER HwFindAdapter
ULONG NumberOfAccessRanges
USHORT FirmwareRevision[4]
USHORT GeneralConfiguration
UCHAR MaximumBlockTransfer
USHORT SpecialFunctionsEnabled
UCHAR ProductRevisionLevel[4]
UCHAR ParameterListLengthLsb
UCHAR ParameterListLengthMsb
UCHAR ParameterListLengthMsb
UCHAR ParameterListLengthLsb
union _PCI_SLOT_NUMBER::@4148 u
struct _PCI_SLOT_NUMBER::@4148::@4149 bits
DRIVERSTATUS DriverStatus
UCHAR AdditionalSenseLength
UCHAR AdditionalSenseCode
UCHAR AdditionalSenseCodeQualifier
#define FIELD_OFFSET(t, f)
#define AtapiStringCmp(s1, s2, n)
struct _CDB::_MECH_STATUS MECH_STATUS
struct _CDB::_CDB6INQUIRY CDB6INQUIRY
struct _CDB::_START_STOP START_STOP
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
_In_ WDFDEVICE _In_ PPNP_BUS_INFORMATION BusInformation
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING DeviceID
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
_In_ WDFIORESREQLIST _In_ ULONG SlotNumber
_Reserved_ PVOID Reserved
_In_opt_ PUNICODE_STRING _In_ PDRIVER_OBJECT _In_ PDEVICE_OBJECT _In_ INTERFACE_TYPE _In_ ULONG BusNumber
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList
#define PCI_INVALID_VENDORID
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _In_ LARGE_INTEGER ByteCount
struct _PCI_COMMON_CONFIG * PPCI_COMMON_CONFIG
struct @647 controllers[XUSER_MAX_COUNT]