462{
464 ULONG i, SupportedMode, HwFlags = 0;
466
469
470 switch (Controller->Pci.DeviceID)
471 {
473
474
475
476
477
479
482 break;
483
486
487 if (Controller->Pci.RevisionID < 6)
489 break;
490
494
495 if (Controller->Pci.RevisionID < 3)
497 else
499
500 if (Controller->Pci.RevisionID == 5 || Controller->Pci.RevisionID == 6)
501 {
502
503
504
505
507 }
508 else if (Controller->Pci.RevisionID > 6)
509 {
511 }
512 break;
513
516
519 break;
520
524
525 if (Controller->Pci.RevisionID == 2)
527
529 break;
530
531 default:
533 }
534
536
539
543
545 if (!Controller->HwExt)
547
548 for (
i = 0;
i < Controller->MaxChannels; ++
i)
549 {
551
555 ChanData->TransferModeSupported = SupportedMode;
556
558 {
559 ChanData->ChanInfo &= ~CHANNEL_FLAG_IO32;
560 }
561 else
562 {
563
565 {
568 {
569 INFO(
"CH %lu: BIOS detected 40-conductor cable\n", ChanData->Channel);
570 ChanData->TransferModeSupported &= ~UDMA_80C_ALL;
571 }
572 }
573 }
574 }
575
577}
#define NT_SUCCESS(StatCode)
static VOID CmdSetTransferMode(_In_ PATA_CONTROLLER Controller, _In_ ULONG Channel, _In_reads_(MAX_IDE_DEVICE) PCHANNEL_DEVICE_CONFIG *DeviceList)
static BOOLEAN CmdCheckInterruptPci(_In_ PCHANNEL_DATA_PATA ChanData)
#define CMD_BMIDECSR_CR(Channel)
static IDE_CHANNEL_STATE CmdChannelEnabledTest(_In_ PATA_CONTROLLER Controller, _In_ ULONG Channel)
#define HW_FLAGS_HAS_UDMA_REG
#define HW_FLAGS_NEED_PIO_FIX
static BOOLEAN CmdCheckInterruptMrdMode(_In_ PCHANNEL_DATA_PATA ChanData)
static VOID CmdControllerStart(_In_ PATA_CONTROLLER Controller)
#define HW_FLAGS_NO_PREFETCH
static PVOID ExAllocatePoolZero(ULONG PoolType, SIZE_T NumberOfBytes, ULONG Tag)
#define UDMA_MODES(MinMode, MaxMode)
NTSTATUS PciIdeCreateChannelData(_In_ PATA_CONTROLLER Controller, _In_ ULONG HwExtensionSize)
#define CTRL_FLAG_USE_TEST_FUNCTION
CHANNEL_CHECK_INTERRUPT * PCHANNEL_CHECK_INTERRUPT
#define CTRL_FLAG_IS_SIMPLEX
PCHANNEL_CHECK_INTERRUPT CheckInterrupt
#define STATUS_INSUFFICIENT_RESOURCES