2245 UCHAR statusByte, statusByte2;
2258 static CONST ULONG InterruptLevels[5] = {14, 15, 11, 10, 0};
2262 if (!deviceExtension) {
2276 chan = &(deviceExtension->
chan[0]);
2281 = ConfigInfo->AdapterInterfaceType;
2291 if (ArgumentString) {
2306 #endif //UNIATA_CORE 2325 ConfigInfo->AdapterInterfaceType,
2326 ConfigInfo->SystemIoBusNumber,
2327 (*ConfigInfo->AccessRanges)[0].RangeStart,
2328 (*ConfigInfo->AccessRanges)[0].RangeLength,
2329 (
BOOLEAN) !((*ConfigInfo->AccessRanges)[0].RangeInMemory));
2337 KdPrint2((
PRINT_PREFIX " preconfig, portBase=%x, len=%x\n", portBase, (*ConfigInfo->AccessRanges)[0].RangeLength));
2342 while (AdapterAddresses[*adapterCount] != 0) {
2345 #endif //UNIATA_CORE 2348 deviceExtension->
DevIndex = (*adapterCount);
2360 if (preConfig ==
FALSE) {
2362 ULONG portBase_reg = 0;
2366 portBase = AdapterAddresses[*adapterCount];
2374 if(portBase_reg && irq_reg) {
2376 portBase = portBase_reg;
2384 ConfigInfo->AdapterInterfaceType,
2385 ConfigInfo->SystemIoBusNumber,
2412 if (BaseIoAddress1) {
2417 ConfigInfo->AdapterInterfaceType,
2418 ConfigInfo->SystemIoBusNumber,
2424 ConfigInfo->AdapterInterfaceType,
2425 ConfigInfo->SystemIoBusNumber,
2451 KdPrint2((
PRINT_PREFIX "AtapiFindIsaController: Status %x vs AltStatus %x missmatch, abort init ?\n", statusByte, statusByte2));
2453 if(BaseIoAddress2) {
2455 (
PCHAR)BaseIoAddress2);
2456 BaseIoAddress2 =
NULL;
2461 ConfigInfo->AdapterInterfaceType,
2462 ConfigInfo->SystemIoBusNumber,
2467 BaseIoAddress2 =
NULL;
2475 KdPrint2((
PRINT_PREFIX " abort: Status %x vs AltStatus %x missmatch\n", statusByte, statusByte2));
2508 "AtapiFindIsaController: First access to status %#x\n",
2513 goto retryIdentifier;
2528 "AtapiFindIsaController: Identifier read back from Slave (%#x)\n",
2535 if (preConfig ==
FALSE) {
2543 (*ConfigInfo->AccessRanges)[0].RangeStart =
2547 (*ConfigInfo->AccessRanges)[0].RangeLength =
ATA_IOSIZE;
2548 (*ConfigInfo->AccessRanges)[0].RangeInMemory =
FALSE;
2550 if(BaseIoAddress2) {
2554 (*ConfigInfo->AccessRanges)[1].RangeInMemory =
FALSE;
2564 (*ConfigInfo->AccessRanges)[1].RangeLength = 0;
2570 ConfigInfo->BusInterruptLevel =
irq;
2572 ConfigInfo->BusInterruptLevel = InterruptLevels[*adapterCount - 1];
2575 if (ConfigInfo->AdapterInterfaceType ==
MicroChannel) {
2578 ConfigInfo->InterruptMode =
Latched;
2582 ConfigInfo->NumberOfBuses = 1;
2586 ConfigInfo->MaximumTransferLength = 0x10000;
2607 "AtapiFindIsaController: Found IDE at %#x\n",
2612 if (preConfig ==
FALSE) {
2614 if (*adapterCount - 1 < 2) {
2621 #endif //UNIATA_CORE 2643 "AtapiFindIsaController: look for devices\n"));
2650 "AtapiFindIsaController: detected\n"));
2655 ConfigInfo->AtdiskSecondaryClaimed =
TRUE;
2659 ConfigInfo->AtdiskPrimaryClaimed =
TRUE;
2666 if (*adapterCount == 1) {
2667 ConfigInfo->AtdiskPrimaryClaimed =
TRUE;
2669 }
else if (*adapterCount == 2) {
2670 ConfigInfo->AtdiskSecondaryClaimed =
TRUE;
2682 ConfigInfo->NumberOfBuses++;
2684 "AtapiFindIsaController: return SP_RETURN_FOUND\n"));
2689 if(BaseIoAddress1) {
2691 (
PCHAR)BaseIoAddress1);
2692 BaseIoAddress1 =
NULL;
2694 if(BaseIoAddress2) {
2696 (
PCHAR)BaseIoAddress2);
2697 BaseIoAddress2 =
NULL;
2699 for(
i=0;
i<2;
i++) {
2701 "AtapiFindIsaController: cleanup AccessRanges %d\n",
i));
2703 (*ConfigInfo->AccessRanges)[
i].RangeLength = 0;
2704 (*ConfigInfo->AccessRanges)[
i].RangeInMemory =
FALSE;
2713 #endif //UNIATA_CORE 2719 *(adapterCount) = 0;
2722 "AtapiFindIsaController: return SP_RETURN_NOT_FOUND\n"));
#define CHAN_NOT_SPECIFIED
INTERFACE_TYPE OrigAdapterInterfaceType
#define IDX_IO2_AltStatus
#define ScsiPortConvertPhysicalAddressToUlong(Address)
UCHAR DDKFASTAPI SelectDrive(IN struct _HW_CHANNEL *chan, IN ULONG DeviceNumber)
struct _IDE_REGISTERS_2 * PIDE_REGISTERS_2
#define DFLAGS_ATAPI_DEVICE
ULONG NTAPI AtapiParseArgumentString(IN PCHAR String, IN PCHAR KeyWord)
BOOLEAN NTAPI UniataAllocateLunExt(PHW_DEVICE_EXTENSION deviceExtension, ULONG NewNumberChannels)
PVOID NTAPI ScsiPortGetDeviceBase(IN PVOID HwDeviceExtension, IN INTERFACE_TYPE BusType, IN ULONG SystemIoBusNumber, IN SCSI_PHYSICAL_ADDRESS IoAddress, IN ULONG NumberOfBytes, IN BOOLEAN InIoSpace)
VOID NTAPI ScsiPortFreeDeviceBase(IN PVOID HwDeviceExtension, IN PVOID MappedAddress)
VOID NTAPI UniataDumpATARegs(IN struct _HW_CHANNEL *chan)
BOOLEAN NTAPI AtapiCheckIOInterference(IN PPORT_CONFIGURATION_INFORMATION ConfigInfo, ULONG portBase)
VOID NTAPI AtapiSetupLunPtrs(IN PHW_CHANNEL chan, IN PHW_DEVICE_EXTENSION deviceExtension, IN ULONG c)
#define DFLAGS_TAPE_DEVICE
#define UNIATA_ALLOCATE_NEW_LUNS
UCHAR DDKFASTAPI AtapiReadPort1(IN PHW_CHANNEL chan, IN ULONGIO_PTR port)
ULONG NTAPI AtapiRegCheckDevValue(IN PVOID HwDeviceExtension, IN ULONG chan, IN ULONG dev, IN PCWSTR Name, IN ULONG Default)
SCSI_PHYSICAL_ADDRESS NTAPI ScsiPortConvertUlongToPhysicalAddress(IN ULONG_PTR UlongAddress)
#define DEVNUM_NOT_SPECIFIED
#define SP_RETURN_NOT_FOUND
#define IDX_IO1_i_CylinderLow
VOID NTAPI UniataInitMapBase(IN struct _HW_CHANNEL *chan, IN PIDE_REGISTERS_1 BaseIoAddress1, IN PIDE_REGISTERS_2 BaseIoAddress2)
BOOLEAN NTAPI AtapiReadChipConfig(IN PVOID HwDeviceExtension, IN ULONG DeviceNumber, IN ULONG channel)
VOID NTAPI UniataFreeLunExt(PHW_DEVICE_EXTENSION deviceExtension)
struct _HW_DEVICE_EXTENSION * PHW_DEVICE_EXTENSION
#define IDX_IO1_o_CylinderLow
VOID DDKFASTAPI AtapiWritePort1(IN PHW_CHANNEL chan, IN ULONGIO_PTR port, IN UCHAR data)
#define DFLAGS_DEVICE_PRESENT
#define IDX_ATAPI_IO1_i_Status
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
#define AtapiStallExecution(dt)
VOID NTAPI UniataInitMapBM(IN struct _HW_DEVICE_EXTENSION *deviceExtension, IN struct _IDE_BUSMASTER_REGISTERS *BaseIoAddressBM_0, IN BOOLEAN MemIo)
#define RtlZeroMemory(Destination, Length)
BOOLEAN NTAPI AtapiChipInit(IN PVOID HwDeviceExtension, IN ULONG DeviceNumber, IN ULONG c)
#define IDE_MAX_LUN_PER_CHAN
ULONG MaximumDmaTransferLength
BOOLEAN NTAPI FindDevices(IN PVOID HwDeviceExtension, IN ULONG Flags, IN ULONG Channel)
INTERFACE_TYPE AdapterInterfaceType
struct _IDE_REGISTERS_1 * PIDE_REGISTERS_1