2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: PCI IDE bus driver
4 * FILE: drivers/storage/pciide/pciide.c
6 * PROGRAMMERS: Hervé Poussineau (hpoussin@reactos.org)
14 IDE_CHANNEL_STATE NTAPI
16 IN PVOID DeviceExtension
,
19 PCI_COMMON_CONFIG PciConfig
;
22 DPRINT("PciIdeChannelEnabled(%p, %lu)\n", DeviceExtension
, Channel
);
24 Status
= PciIdeXGetBusData(
28 PCI_COMMON_HDR_LENGTH
);
29 if (!NT_SUCCESS(Status
))
31 DPRINT("PciIdeXGetBusData() failed with status 0x%08lx\n", Status
);
32 return ChannelStateUnknown
;
35 if (PCI_CONFIGURATION_TYPE(&PciConfig
) != PCI_DEVICE_TYPE
)
37 DPRINT("Wrong PCI card type. Disabling IDE channel #%lu\n", Channel
);
38 return ChannelDisabled
;
41 if (PciConfig
.BaseClass
!= PCI_CLASS_MASS_STORAGE_CTLR
|| PciConfig
.SubClass
!= PCI_SUBCLASS_MSC_IDE_CTLR
)
43 DPRINT("Wrong PCI card base class/sub class. Disabling IDE channel #%lu\n", Channel
);
44 return ChannelDisabled
;
47 return ChannelStateUnknown
;
51 PciIdeSyncAccessRequired(
52 IN PVOID DeviceExtension
)
54 DPRINT1("PciIdeSyncAccessRequired %p\n", DeviceExtension
);
56 return FALSE
; /* FIXME */
60 PciIdeTransferModeSelect(
61 IN PVOID DeviceExtension
,
62 IN PPCIIDE_TRANSFER_MODE_SELECT XferMode
)
66 DPRINT1("PciIdeTransferModeSelect(%p %p)\n", DeviceExtension
, XferMode
);
68 for (i
= 0; i
< MAX_IDE_DEVICE
; i
++)
69 XferMode
->DevicePresent
[i
] = FALSE
; /* FIXME */
71 return STATUS_SUCCESS
;
76 IN PVOID DeviceExtension
,
80 DPRINT("PciIdeUseDma(%p %p %p)\n", DeviceExtension
, CdbCommand
, Slave
);
82 /* Nothing should prevent us to use DMA */
87 PciIdeGetControllerProperties(
88 IN PVOID DeviceExtension
,
89 OUT PIDE_CONTROLLER_PROPERTIES ControllerProperties
)
91 if (ControllerProperties
->Size
!= sizeof(IDE_CONTROLLER_PROPERTIES
))
92 return STATUS_REVISION_MISMATCH
;
94 ControllerProperties
->PciIdeChannelEnabled
= PciIdeChannelEnabled
;
95 ControllerProperties
->PciIdeSyncAccessRequired
= PciIdeSyncAccessRequired
;
96 ControllerProperties
->PciIdeTransferModeSelect
= PciIdeTransferModeSelect
;
97 ControllerProperties
->IgnoreActiveBitForAtaDevice
= FALSE
;
98 ControllerProperties
->AlwaysClearBusMasterInterrupt
= TRUE
;
99 ControllerProperties
->PciIdeUseDma
= PciIdeUseDma
;
100 ControllerProperties
->AlignmentRequirement
= 1;
101 ControllerProperties
->DefaultPIO
= 0; /* FIXME */
102 ControllerProperties
->PciIdeUdmaModesSupported
= NULL
; /* optional */
104 ControllerProperties
->SupportedTransferMode
[0][0] =
105 ControllerProperties
->SupportedTransferMode
[0][1] =
106 ControllerProperties
->SupportedTransferMode
[1][0] =
107 ControllerProperties
->SupportedTransferMode
[1][1] =
108 PIO_MODE0
| PIO_MODE1
| PIO_MODE2
| PIO_MODE3
| PIO_MODE4
|
109 SWDMA_MODE0
| SWDMA_MODE1
| SWDMA_MODE2
|
110 MWDMA_MODE0
| MWDMA_MODE1
| MWDMA_MODE2
|
111 UDMA_MODE0
| UDMA_MODE1
| UDMA_MODE2
| UDMA_MODE3
| UDMA_MODE4
;
113 return STATUS_SUCCESS
;
118 IN PDRIVER_OBJECT DriverObject
,
119 IN PUNICODE_STRING RegistryPath
)
123 Status
= PciIdeXInitialize(
126 PciIdeGetControllerProperties
,