aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/pata_rdc/pata_rdc.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/pata_rdc/pata_rdc.h')
-rw-r--r--drivers/staging/pata_rdc/pata_rdc.h237
1 files changed, 237 insertions, 0 deletions
diff --git a/drivers/staging/pata_rdc/pata_rdc.h b/drivers/staging/pata_rdc/pata_rdc.h
new file mode 100644
index 00000000000..af1d79e104d
--- /dev/null
+++ b/drivers/staging/pata_rdc/pata_rdc.h
@@ -0,0 +1,237 @@
1#ifndef pata_rdc_H
2#define pata_rdc_H
3
4#ifndef TRUE
5#define TRUE 1
6#endif
7
8#ifndef FALSE
9#define FALSE 0
10#endif
11
12// ATA Configuration Register ID offset address size
13#define ATAConfiguration_PCIOffset 0x40
14#define ATAConfiguration_ID_PrimaryTiming 0x00
15#define ATAConfiguration_ID_SecondaryTiming 0x02
16#define ATAConfiguration_ID_Device1Timing 0x04
17#define ATAConfiguration_ID_UDMAControl 0x08
18#define ATAConfiguration_ID_UDMATiming 0x0A
19#define ATAConfiguration_ID_IDEIOConfiguration 0x14
20
21#define ATAConfiguration_ID_PrimaryTiming_Size 2
22#define ATAConfiguration_ID_SecondaryTiming_Size 2
23#define ATAConfiguration_ID_Device1Timing_Size 1
24#define ATAConfiguration_ID_UDMAControl_Size 1
25#define ATAConfiguration_ID_UDMATiming_Size 2
26#define ATAConfiguration_ID_IDEIOConfiguration_Size 4
27
28// ATA Configuration Register bit define
29#define ATAConfiguration_PrimaryTiming_Device0FastTimingEnable 0x0001
30#define ATAConfiguration_PrimaryTiming_Device0IORDYSampleModeEnable 0x0002 // PIO 3 or greater
31#define ATAConfiguration_PrimaryTiming_Device0PrefetchandPostingEnable 0x0004 // PIO 2 or greater
32#define ATAConfiguration_PrimaryTiming_Device0DMATimingEnable 0x0008
33#define ATAConfiguration_PrimaryTiming_Device1FastTimingEnable 0x0010
34#define ATAConfiguration_PrimaryTiming_Device1IORDYSampleModeEnable 0x0020 // PIO 3 or greater
35#define ATAConfiguration_PrimaryTiming_Device1PrefetchandPostingEnable 0x0040 // PIO 2 or greater
36#define ATAConfiguration_PrimaryTiming_Device1DMATimingEnable 0x0080
37#define ATAConfiguration_PrimaryTiming_Device0RecoveryMode 0x0300
38#define ATAConfiguration_PrimaryTiming_Device0RecoveryMode_0 0x0000 // PIO 0, PIO 2, MDMA 0
39#define ATAConfiguration_PrimaryTiming_Device0RecoveryMode_1 0x0100 // PIO 3, MDMA 1
40#define ATAConfiguration_PrimaryTiming_Device0RecoveryMode_2 0x0200 // X
41#define ATAConfiguration_PrimaryTiming_Device0RecoveryMode_3 0x0300 // PIO 4, MDMA 2
42#define ATAConfiguration_PrimaryTiming_Device0IORDYSampleMode 0x3000
43#define ATAConfiguration_PrimaryTiming_Device0IORDYSampleMode_0 0x0000 // PIO 0
44#define ATAConfiguration_PrimaryTiming_Device0IORDYSampleMode_1 0x1000 // PIO 2, MDMA 0
45#define ATAConfiguration_PrimaryTiming_Device0IORDYSampleMode_2 0x2000 // PIO 3, PIO 4, MDMA 1, MDMA 2
46#define ATAConfiguration_PrimaryTiming_Device0IORDYSampleMode_3 0x3000 // X
47#define ATAConfiguration_PrimaryTiming_Device1TimingRegisterEnable 0x4000
48#define ATAConfiguration_PrimaryTiming_IDEDecodeEnable 0x8000
49
50#define ATAConfiguration_Device1Timing_PrimaryRecoveryMode 0x0003
51#define ATAConfiguration_Device1Timing_PrimaryRecoveryMode_0 0x0000
52#define ATAConfiguration_Device1Timing_PrimaryRecoveryMode_1 0x0001
53#define ATAConfiguration_Device1Timing_PrimaryRecoveryMode_2 0x0002
54#define ATAConfiguration_Device1Timing_PrimaryRecoveryMode_3 0x0003
55#define ATAConfiguration_Device1Timing_PrimaryIORDYSampleMode 0x000C
56#define ATAConfiguration_Device1Timing_PrimaryIORDYSampleMode_0 0x0000
57#define ATAConfiguration_Device1Timing_PrimaryIORDYSampleMode_1 0x0004
58#define ATAConfiguration_Device1Timing_PrimaryIORDYSampleMode_2 0x0008
59#define ATAConfiguration_Device1Timing_PrimaryIORDYSampleMode_3 0x000C
60#define ATAConfiguration_Device1Timing_SecondaryRecoveryMode 0x0030
61#define ATAConfiguration_Device1Timing_SecondaryRecoveryMode_0 0x0000
62#define ATAConfiguration_Device1Timing_SecondaryRecoveryMode_1 0x0010
63#define ATAConfiguration_Device1Timing_SecondaryRecoveryMode_2 0x0020
64#define ATAConfiguration_Device1Timing_SecondaryRecoveryMode_3 0x0030
65#define ATAConfiguration_Device1Timing_SecondaryIORDYSampleMode 0x00C0
66#define ATAConfiguration_Device1Timing_SecondaryIORDYSampleMode_0 0x0000
67#define ATAConfiguration_Device1Timing_SecondaryIORDYSampleMode_1 0x0040
68#define ATAConfiguration_Device1Timing_SecondaryIORDYSampleMode_2 0x0080
69#define ATAConfiguration_Device1Timing_SecondaryIORDYSampleMode_3 0x00C0
70
71#define ATAConfiguration_UDMAControl_PrimaryDevice0UDMAModeEnable 0x0001
72#define ATAConfiguration_UDMAControl_PrimaryDevice1UDMAModeEnable 0x0002
73#define ATAConfiguration_UDMAControl_SecondaryDevice0UDMAModeEnable 0x0004
74#define ATAConfiguration_UDMAControl_SecondaryDevice1UDMAModeEnable 0x0008
75
76#define ATAConfiguration_UDMATiming_PrimaryDevice0CycleTime 0x0003
77#define ATAConfiguration_UDMATiming_PrimaryDevice0CycleTime_0 0x0000 // UDMA 0
78#define ATAConfiguration_UDMATiming_PrimaryDevice0CycleTime_1 0x0001 // UDMA 1, UDMA 3, UDMA 5
79#define ATAConfiguration_UDMATiming_PrimaryDevice0CycleTime_2 0x0002 // UDMA 2, UDMA 4
80#define ATAConfiguration_UDMATiming_PrimaryDevice0CycleTime_3 0x0003 // X
81#define ATAConfiguration_UDMATiming_PrimaryDevice1CycleTime 0x0030
82#define ATAConfiguration_UDMATiming_PrimaryDevice1CycleTime_0 0x0000 // UDMA 0
83#define ATAConfiguration_UDMATiming_PrimaryDevice1CycleTime_1 0x0010 // UDMA 1, UDMA 3, UDMA 5
84#define ATAConfiguration_UDMATiming_PrimaryDevice1CycleTime_2 0x0020 // UDMA 2, UDMA 4
85#define ATAConfiguration_UDMATiming_PrimaryDevice1CycleTime_3 0x0030 // X
86#define ATAConfiguration_UDMATiming_SecondaryDevice0CycleTime 0x0300
87#define ATAConfiguration_UDMATiming_SecondaryDevice0CycleTime_0 0x0000 // UDMA 0
88#define ATAConfiguration_UDMATiming_SecondaryDevice0CycleTime_1 0x0100 // UDMA 1, UDMA 3, UDMA 5
89#define ATAConfiguration_UDMATiming_SecondaryDevice0CycleTime_2 0x0200 // UDMA 2, UDMA 4
90#define ATAConfiguration_UDMATiming_SecondaryDevice0CycleTime_3 0x0300 // X
91#define ATAConfiguration_UDMATiming_SecondaryDevice1CycleTime 0x3000
92#define ATAConfiguration_UDMATiming_SecondaryDevice1CycleTime_0 0x0000 // UDMA 0
93#define ATAConfiguration_UDMATiming_SecondaryDevice1CycleTime_1 0x1000 // UDMA 1, UDMA 3, UDMA 5
94#define ATAConfiguration_UDMATiming_SecondaryDevice1CycleTime_2 0x2000 // UDMA 2, UDMA 4
95#define ATAConfiguration_UDMATiming_SecondaryDevice1CycleTime_3 0x3000 // X
96
97#define ATAConfiguration_IDEIOConfiguration_PrimaryDevice066MhzEnable 0x00000001 // UDMA 3, UDMA 4
98#define ATAConfiguration_IDEIOConfiguration_PrimaryDevice166MhzEnable 0x00000002
99#define ATAConfiguration_IDEIOConfiguration_SecondaryDevice066MhzEnable 0x00000004
100#define ATAConfiguration_IDEIOConfiguration_SecondaryDevice166MhzEnable 0x00000008
101#define ATAConfiguration_IDEIOConfiguration_DeviceCable80Report 0x000000F0
102#define ATAConfiguration_IDEIOConfiguration_PrimaryDeviceCable80Report 0x00000030
103#define ATAConfiguration_IDEIOConfiguration_PrimaryDevice0Cable80Report 0x00000010 // UDMA 3, UDMA 4, UDMA 5
104#define ATAConfiguration_IDEIOConfiguration_PrimaryDevice1Cable80Report 0x00000020
105#define ATAConfiguration_IDEIOConfiguration_SecondaryDeviceCable80Report 0x000000C0
106#define ATAConfiguration_IDEIOConfiguration_SecondaryDevice0Cable80Report 0x00000040
107#define ATAConfiguration_IDEIOConfiguration_SecondaryDevice1Cable80Report 0x00000080
108#define ATAConfiguration_IDEIOConfiguration_PrimaryDevice0100MhzEnable 0x00001000 // UDMA 5
109#define ATAConfiguration_IDEIOConfiguration_PrimaryDevice1100MhzEnable 0x00002000
110#define ATAConfiguration_IDEIOConfiguration_SecondaryDevice0100MhzEnable 0x00004000
111#define ATAConfiguration_IDEIOConfiguration_SecondaryDevice1100MhzEnable 0x00008000
112#define ATAConfiguration_IDEIOConfiguration_ATA100IsSupported 0x00F00000
113
114enum _PIOTimingMode
115{
116 PIO0 = 0,
117 PIO1,
118 PIO2, // MDMA 0
119 PIO3, // MDMA 1
120 PIO4 // MDMA 2
121};
122
123enum _DMATimingMode
124{
125 MDMA0 = 0,
126 MDMA1,
127 MDMA2
128};
129
130enum _UDMATimingMode
131{
132 UDMA0 = 0,
133 UDMA1,
134 UDMA2,
135 UDMA3,
136 UDMA4,
137 UDMA5
138};
139
140
141enum rdc_controller_ids {
142 /* controller IDs */
143 RDC_17F31011,
144 RDC_17F31012
145};
146
147// callback function for driver
148
149static int __devinit rdc_init_one(
150 struct pci_dev *pdev,
151 const struct pci_device_id *ent
152 );
153
154// callback function for ata_port
155
156static int rdc_pata_port_start(
157 struct ata_port *ap
158 );
159
160static void rdc_pata_port_stop(
161 struct ata_port *ap
162 );
163
164static int rdc_pata_prereset(
165 struct ata_link *link,
166 unsigned long deadline
167 );
168
169static int rdc_pata_cable_detect(
170 struct ata_port *ap
171 );
172
173static void rdc_pata_set_piomode(
174 struct ata_port *ap,
175 struct ata_device *adev
176 );
177
178static void rdc_pata_set_dmamode(
179 struct ata_port *ap,
180 struct ata_device *adev
181 );
182
183// modified PCIDeviceIO code.
184
185static uint
186PCIDeviceIO_ReadPCIConfiguration(
187 struct pci_dev *pdev,
188 uint Offset,
189 uint Length,
190 void* pBuffer
191 );
192
193static uint
194PCIDeviceIO_WritePCIConfiguration(
195 struct pci_dev *pdev,
196 uint Offset,
197 uint Length,
198 void* pBuffer
199 );
200
201// modify ATAHostAdapter code
202
203static uint
204ATAHostAdapter_SetPrimaryPIO(
205 struct pci_dev *pdev,
206 uint DeviceID,
207 uint PIOTimingMode,
208 uint DMAEnable,
209 uint PrefetchPostingEnable
210 );
211
212static uint
213ATAHostAdapter_SetSecondaryPIO(
214 struct pci_dev *pdev,
215 uint DeviceID,
216 uint PIOTimingMode,
217 uint DMAEnable,
218 uint PrefetchPostingEnable
219 );
220
221static uint
222ATAHostAdapter_SetPrimaryUDMA(
223 struct pci_dev *pdev,
224 uint DeviceID,
225 uint UDMAEnable,
226 uint UDMATimingMode
227 );
228
229static uint
230ATAHostAdapter_SetSecondaryUDMA(
231 struct pci_dev *pdev,
232 uint DeviceID,
233 uint UDMAEnable,
234 uint UDMATimingMode
235 );
236
237#endif