);
VOID
+NTAPI
AtapiHwInitialize__(
IN PHW_DEVICE_EXTENSION deviceExtension,
IN ULONG lChannel
);
VOID
+NTAPI
AtapiQueueTimerDpc(
IN PVOID HwDeviceExtension,
IN ULONG lChannel,
#endif //UNIATA_CORE
BOOLEAN
+NTAPI
AtapiCheckInterrupt__(
IN PVOID HwDeviceExtension,
IN UCHAR c
#ifndef UNIATA_CORE
BOOLEAN
+NTAPI
AtapiRegGetStringParameterValue(
IN PWSTR RegistryPath,
IN PWSTR Name,
)
{
//ULONG c = chan->lChannel;
- ULONG i;
+ ULONG i = 30 * 1000;
UCHAR dma_status = 0;
KdPrint2((PRINT_PREFIX "AtapiSoftReset:\n"));
UCHAR statusByte2;
SelectDrive(chan, DeviceNumber);
AtapiStallExecution(10000);
AtapiWritePort1(chan, IDX_IO1_o_Command, IDE_COMMAND_ATAPI_RESET);
- for (i = 0; i < 1000; i++) {
- AtapiStallExecution(999);
+ while ((AtapiReadPort1(chan, IDX_IO1_i_Status) & IDE_STATUS_BUSY) &&
+ i--)
+ {
+ AtapiStallExecution(30);
}
SelectDrive(chan, DeviceNumber);
WaitOnBusy(chan);
Translate to 48-Lba form if required
*/
UCHAR
+NTAPI
AtaCommand48(
IN PHW_DEVICE_EXTENSION deviceExtension,
IN ULONG DeviceNumber,
This is simply wrapper for AtaCommand48()
*/
UCHAR
+NTAPI
AtaCommand(
IN PHW_DEVICE_EXTENSION deviceExtension,
IN ULONG DeviceNumber,
} // end AtaCommand()
LONG
+NTAPI
AtaPio2Mode(LONG pio)
{
switch (pio) {
} // end AtaPio2Mode()
LONG
+NTAPI
AtaPioMode(PIDENTIFY_DATA2 ident)
{
if (ident->PioTimingsValid) {
} // end AtaPioMode()
LONG
+NTAPI
AtaWmode(PIDENTIFY_DATA2 ident)
{
if (ident->MultiWordDMASupport & 0x04)
} // end AtaWmode()
LONG
+NTAPI
AtaUmode(PIDENTIFY_DATA2 ident)
{
if (!ident->UdmaModesValid)
cancels previous Dpc request (if any), but we need Dpc queue.
*/
VOID
+NTAPI
AtapiQueueTimerDpc(
IN PVOID HwDeviceExtension,
IN ULONG lChannel,
#endif //UNIATA_CORE
VOID
+NTAPI
UniataDumpATARegs(
IN PHW_CHANNEL chan
)
--*/
BOOLEAN
+NTAPI
IssueIdentify(
IN PVOID HwDeviceExtension,
IN ULONG DeviceNumber,
--*/
BOOLEAN
+NTAPI
SetDriveParameters(
IN PVOID HwDeviceExtension,
IN ULONG DeviceNumber,
} // end SetDriveParameters()
VOID
+NTAPI
UniataForgetDevice(
PHW_LU_EXTENSION LunExt
)
BOOLEAN
+NTAPI
AtapiResetController__(
IN PVOID HwDeviceExtension,
IN ULONG PathId,
ULONG slotNumber = deviceExtension->slotNumber;
ULONG SystemIoBusNumber = deviceExtension->SystemIoBusNumber;
ULONG VendorID = deviceExtension->DevID & 0xffff;
+#ifdef _DEBUG
ULONG DeviceID = (deviceExtension->DevID >> 16) & 0xffff;
+#endif
//ULONG RevID = deviceExtension->RevID;
ULONG ChipFlags = deviceExtension->HwFlags & CHIPFLAG_MASK;
UCHAR tmp8;
--*/
ULONG
+NTAPI
MapError(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb
} // end AtapiHwInitialize()
VOID
+NTAPI
AtapiHwInitialize__(
IN PHW_DEVICE_EXTENSION deviceExtension,
IN ULONG lChannel
#ifndef UNIATA_CORE
VOID
+NTAPI
AtapiHwInitializeChanger(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb,
--*/
ULONG
+NTAPI
AtapiParseArgumentString(
- IN PCHAR String,
- IN PCHAR KeyWord
+ IN PCCH String,
+ IN PCCH KeyWord
)
{
- PCHAR cptr;
- PCHAR kptr;
+ PCCH cptr;
+ PCCH kptr;
ULONG value;
ULONG stringLength = 0;
ULONG keyWordLength = 0;
return 0;
}
- // Calculate the string length and lower case all characters.
+ // Calculate the string length.
cptr = String;
- while (*cptr) {
- if (*cptr >= 'A' && *cptr <= 'Z') {
- *cptr = *cptr + ('a' - 'A');
- }
- cptr++;
+ while (*cptr++) {
stringLength++;
}
- // Calculate the keyword length and lower case all characters.
- cptr = KeyWord;
- while (*cptr) {
-
- if (*cptr >= 'A' && *cptr <= 'Z') {
- *cptr = *cptr + ('a' - 'A');
- }
- cptr++;
+ // Calculate the keyword length.
+ kptr = KeyWord;
+ while (*kptr++) {
keyWordLength++;
}
}
kptr = KeyWord;
- while (*cptr++ == *kptr++) {
+ while ((*cptr == *kptr) ||
+ (*cptr <= 'Z' && *cptr + ('a' - 'A') == *kptr) ||
+ (*cptr >= 'a' && *cptr - ('a' - 'A') == *kptr)) {
+ cptr++;
+ kptr++;
- if (*(cptr - 1) == '\0') {
+ if (*cptr == '\0') {
// end of string
return 0;
}
}
- if (*(kptr - 1) == '\0') {
+ if (*kptr == '\0') {
// May have a match backup and check for blank or equals.
- cptr--;
while (*cptr == ' ' || *cptr == '\t') {
cptr++;
}
}
value = 0;
- if ((*cptr == '0') && (*(cptr + 1) == 'x')) {
+ if ((*cptr == '0') && ((*(cptr + 1) == 'x') || (*(cptr + 1) == 'X'))) {
// Value is in Hex. Skip the "0x"
cptr += 2;
for (index = 0; *(cptr + index); index++) {
} else {
if ((*(cptr + index) >= 'a') && (*(cptr + index) <= 'f')) {
value = (16 * value) + (*(cptr + index) - 'a' + 10);
+ } else if ((*(cptr + index) >= 'A') && (*(cptr + index) <= 'F')) {
+ value = (16 * value) + (*(cptr + index) - 'A' + 10);
} else {
// Syntax error, return not found.
return 0;
Timer callback
*/
VOID
+NTAPI
AtapiCallBack__(
IN PVOID HwDeviceExtension,
IN UCHAR lChannel
goto ReturnCallback;
}
-#ifdef DBG
+#if DBG
if (!IS_RDP((srb->Cdb[0]))) {
KdPrint2((PRINT_PREFIX "AtapiCallBack: Invalid CDB marked as RDP - %#x\n", srb->Cdb[0]));
}
} // end AtapiCallBack__()
VOID
+NTAPI
AtapiCallBack_X(
IN PVOID HwDeviceExtension
)
#ifndef UNIATA_CORE
BOOLEAN
+NTAPI
AtapiInterrupt2(
IN PKINTERRUPT Interrupt,
IN PVOID Isr2HwDeviceExtension
VOID
+NTAPI
AtapiEnableInterrupts(
IN PVOID HwDeviceExtension,
IN ULONG c
} // end AtapiEnableInterrupts()
VOID
+NTAPI
AtapiDisableInterrupts(
IN PVOID HwDeviceExtension,
IN ULONG c
Check hardware for interrupt state
*/
BOOLEAN
+NTAPI
AtapiCheckInterrupt__(
IN PVOID HwDeviceExtension,
IN UCHAR c // logical channel
BOOLEAN
+NTAPI
AtapiInterrupt__(
IN PVOID HwDeviceExtension,
IN UCHAR c
for (k = atapiDev ? 0 : 200; k; k--) {
GetStatus(chan, statusByte);
if (!(statusByte & IDE_STATUS_DRQ)) {
- AtapiStallExecution(50);
+ AtapiStallExecution(100);
} else {
break;
}
--*/
ULONG
+NTAPI
IdeSendSmartCommand(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb
#endif //UNIATA_CORE
ULONGLONG
+NTAPI
UniAtaCalculateLBARegs(
PHW_LU_EXTENSION LunExt,
ULONG startingSector,
USHORT cylinder;
ULONG tmp;
+ (*max_bcount) = 0;
+
if(LunExt->DeviceFlags & DFLAGS_LBA_ENABLED) {
if(LunExt->LimitedTransferMode >= ATA_DMA) {
if(LunExt->DeviceExtension) {
KdPrint2((PRINT_PREFIX "UniAtaCalculateLBARegs: C:H:S=%#x:%#x:%#x, max_bc %#x\n",
cylinder, drvSelect, sectorNumber, (*max_bcount)));
}
- (*max_bcount) = 0;
return (ULONG)(sectorNumber&0xff) | (((ULONG)cylinder&0xffff)<<8) | (((ULONG)drvSelect&0xf)<<24);
} // end UniAtaCalculateLBARegs()
ULONGLONG
+NTAPI
UniAtaCalculateLBARegsBack(
PHW_LU_EXTENSION LunExt,
ULONGLONG lba
--*/
ULONG
+NTAPI
IdeReadWrite(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb,
--*/
ULONG
+NTAPI
IdeVerify(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb
--*/
ULONG
+NTAPI
AtapiSendCommand(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb,
InterlockedExchange(&(chan->CheckIntr),
CHECK_INTR_IDLE);
- AtapiDisableInterrupts(deviceExtension, lChannel);
+ //AtapiDisableInterrupts(deviceExtension, lChannel);
// Write ATAPI packet command.
AtapiWritePort1(chan, IDX_IO1_o_Command, IDE_COMMAND_ATAPI_PACKET);
GetBaseStatus(chan, statusByte);
- AtapiEnableInterrupts(deviceExtension, lChannel);
+ //AtapiEnableInterrupts(deviceExtension, lChannel);
WriteBuffer(chan,
(PUSHORT)Srb->Cdb,
#endif
ULONG
+NTAPI
IdeSendCommand(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb,
--*/
VOID
+NTAPI
IdeMediaStatus(
BOOLEAN EnableMSN,
IN PVOID HwDeviceExtension,
--*/
ULONG
+NTAPI
IdeBuildSenseBuffer(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb
}// End of IdeBuildSenseBuffer
VOID
+NTAPI
UniataUserDeviceReset(
PHW_DEVICE_EXTENSION deviceExtension,
PHW_LU_EXTENSION LunExt,
} // end UniataUserDeviceReset()
BOOLEAN
+NTAPI
UniataNeedQueueing(
PHW_DEVICE_EXTENSION deviceExtension,
PHW_CHANNEL chan,
} // end AtapiStartIo()
BOOLEAN
+NTAPI
AtapiStartIo__(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb,
void
+NTAPI
UniataInitAtaCommands()
{
int i;
LARGE_INTEGER t0, t1;
Connect_DbgPrint();
- KdPrint2((PRINT_PREFIX (PCCHAR)ver_string));
+ KdPrint2((PRINT_PREFIX "%s", (PCCHAR)ver_string));
a = (WCHAR)strlen(ver_string);
g_opt_Verbose = (BOOLEAN)AtapiRegCheckDevValue(NULL, CHAN_NOT_SPECIFIED, DEVNUM_NOT_SPECIFIED, L"PrintLogo", 0);
PSCSI_REQUEST_BLOCK
+NTAPI
BuildMechanismStatusSrb(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb
#endif //UNIATA_CORE
PSCSI_REQUEST_BLOCK
+NTAPI
BuildRequestSenseSrb (
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb
#ifndef UNIATA_CORE
ULONG
+NTAPI
AtapiRegCheckDevLunValue(
IN PVOID HwDeviceExtension,
- IN PWCHAR NamePrefix,
+ IN PCWCH NamePrefix,
IN ULONG chan,
IN ULONG dev,
- IN PWSTR Name,
+ IN PCWSTR Name,
IN ULONG Default
)
{
} // end AtapiRegCheckDevLunValue()
ULONG
+NTAPI
EncodeVendorStr(
OUT PWCHAR Buffer,
IN PUCHAR Str,
} // end EncodeVendorStr()
ULONG
+NTAPI
AtapiRegCheckDevValue(
IN PVOID HwDeviceExtension,
IN ULONG chan,
IN ULONG dev,
- IN PWSTR Name,
+ IN PCWSTR Name,
IN ULONG Default
)
{
Returns: Registry Key value
*/
ULONG
+NTAPI
AtapiRegCheckParameterValue(
IN PVOID HwDeviceExtension,
- IN PWSTR PathSuffix,
- IN PWSTR Name,
+ IN PCWSTR PathSuffix,
+ IN PCWSTR Name,
IN ULONG Default
)
{
VOID
_cdecl
_PrintNtConsole(
- PCHAR DebugMessage,
+ PCCH DebugMessage,
...
)
{