Diff markup
1 #ifndef _IDE_H 1 #ifndef _IDE_H
2 #define _IDE_H 2 #define _IDE_H
3 /* 3 /*
4 * linux/include/linux/ide.h 4 * linux/include/linux/ide.h
5 * 5 *
6 * Copyright (C) 1994-2002 Linus Torvalds & 6 * Copyright (C) 1994-2002 Linus Torvalds & authors
7 */ 7 */
8 8
>> 9 #include <linux/config.h>
9 #include <linux/init.h> 10 #include <linux/init.h>
10 #include <linux/ioport.h> 11 #include <linux/ioport.h>
11 #include <linux/hdreg.h> 12 #include <linux/hdreg.h>
>> 13 #include <linux/hdsmart.h>
12 #include <linux/blkdev.h> 14 #include <linux/blkdev.h>
13 #include <linux/proc_fs.h> 15 #include <linux/proc_fs.h>
14 #include <linux/interrupt.h> 16 #include <linux/interrupt.h>
15 #include <linux/bitops.h> 17 #include <linux/bitops.h>
16 #include <linux/bio.h> 18 #include <linux/bio.h>
17 #include <linux/device.h> 19 #include <linux/device.h>
18 #include <linux/pci.h> 20 #include <linux/pci.h>
19 #include <linux/completion.h> <<
20 #ifdef CONFIG_BLK_DEV_IDEACPI <<
21 #include <acpi/acpi.h> <<
22 #endif <<
23 #include <asm/byteorder.h> 21 #include <asm/byteorder.h>
24 #include <asm/system.h> 22 #include <asm/system.h>
25 #include <asm/io.h> 23 #include <asm/io.h>
26 #include <asm/semaphore.h> 24 #include <asm/semaphore.h>
27 #include <asm/mutex.h> <<
28 25
29 #if defined(CONFIG_CRIS) || defined(CONFIG_FRV !! 26 /*
30 # define SUPPORT_VLB_SYNC 0 !! 27 * This is the multiple IDE interface driver, as evolved from hd.c.
31 #else !! 28 * It supports up to four IDE interfaces, on one or more IRQs (usually 14 & 15).
32 # define SUPPORT_VLB_SYNC 1 !! 29 * There can be up to two drives per interface, as per the ATA-2 spec.
>> 30 *
>> 31 * Primary i/f: ide0: major=3; (hda) minor=0; (hdb) minor=64
>> 32 * Secondary i/f: ide1: major=22; (hdc or hd1a) minor=0; (hdd or hd1b) minor=64
>> 33 * Tertiary i/f: ide2: major=33; (hde) minor=0; (hdf) minor=64
>> 34 * Quaternary i/f: ide3: major=34; (hdg) minor=0; (hdh) minor=64
>> 35 */
>> 36
>> 37 /******************************************************************************
>> 38 * IDE driver configuration options (play with these as desired):
>> 39 *
>> 40 * REALLY_SLOW_IO can be defined in ide.c and ide-cd.c, if necessary
>> 41 */
>> 42 #define INITIAL_MULT_COUNT 0 /* off=0; on=2,4,8,16,32, etc.. */
>> 43
>> 44 #ifndef SUPPORT_SLOW_DATA_PORTS /* 1 to support slow data ports */
>> 45 #define SUPPORT_SLOW_DATA_PORTS 1 /* 0 to reduce kernel size */
>> 46 #endif
>> 47 #ifndef SUPPORT_VLB_SYNC /* 1 to support weird 32-bit chips */
>> 48 #define SUPPORT_VLB_SYNC 1 /* 0 to reduce kernel size */
>> 49 #endif
>> 50 #ifndef OK_TO_RESET_CONTROLLER /* 1 needed for good error recovery */
>> 51 #define OK_TO_RESET_CONTROLLER 1 /* 0 for use with AH2372A/B interface */
>> 52 #endif
>> 53
>> 54 #ifndef DISABLE_IRQ_NOSYNC
>> 55 #define DISABLE_IRQ_NOSYNC 0
33 #endif 56 #endif
34 57
35 /* 58 /*
36 * Used to indicate "no IRQ", should be a valu 59 * Used to indicate "no IRQ", should be a value that cannot be an IRQ
37 * number. 60 * number.
38 */ 61 */
39 62
40 #define IDE_NO_IRQ (-1) 63 #define IDE_NO_IRQ (-1)
41 64
>> 65 /*
>> 66 * "No user-serviceable parts" beyond this point :)
>> 67 *****************************************************************************/
>> 68
42 typedef unsigned char byte; /* used everyw 69 typedef unsigned char byte; /* used everywhere */
43 70
44 /* 71 /*
45 * Probably not wise to fiddle with these 72 * Probably not wise to fiddle with these
46 */ 73 */
47 #define ERROR_MAX 8 /* Max read/wr 74 #define ERROR_MAX 8 /* Max read/write errors per sector */
48 #define ERROR_RESET 3 /* Reset contr 75 #define ERROR_RESET 3 /* Reset controller every 4th retry */
49 #define ERROR_RECAL 1 /* Recalibrate 76 #define ERROR_RECAL 1 /* Recalibrate every 2nd retry */
50 77
51 /* 78 /*
52 * Tune flags 79 * Tune flags
53 */ 80 */
54 #define IDE_TUNE_NOAUTO 2 81 #define IDE_TUNE_NOAUTO 2
55 #define IDE_TUNE_AUTO 1 82 #define IDE_TUNE_AUTO 1
56 #define IDE_TUNE_DEFAULT 0 83 #define IDE_TUNE_DEFAULT 0
57 84
58 /* 85 /*
59 * state flags 86 * state flags
60 */ 87 */
61 88
62 #define DMA_PIO_RETRY 1 /* retrying in 89 #define DMA_PIO_RETRY 1 /* retrying in PIO */
63 90
64 #define HWIF(drive) ((ide_hwif_t * 91 #define HWIF(drive) ((ide_hwif_t *)((drive)->hwif))
65 #define HWGROUP(drive) ((ide_hwgroup_ 92 #define HWGROUP(drive) ((ide_hwgroup_t *)(HWIF(drive)->hwgroup))
66 93
67 /* 94 /*
68 * Definitions for accessing IDE controller re 95 * Definitions for accessing IDE controller registers
69 */ 96 */
70 #define IDE_NR_PORTS (10) 97 #define IDE_NR_PORTS (10)
71 98
72 #define IDE_DATA_OFFSET (0) 99 #define IDE_DATA_OFFSET (0)
73 #define IDE_ERROR_OFFSET (1) 100 #define IDE_ERROR_OFFSET (1)
74 #define IDE_NSECTOR_OFFSET (2) 101 #define IDE_NSECTOR_OFFSET (2)
75 #define IDE_SECTOR_OFFSET (3) 102 #define IDE_SECTOR_OFFSET (3)
76 #define IDE_LCYL_OFFSET (4) 103 #define IDE_LCYL_OFFSET (4)
77 #define IDE_HCYL_OFFSET (5) 104 #define IDE_HCYL_OFFSET (5)
78 #define IDE_SELECT_OFFSET (6) 105 #define IDE_SELECT_OFFSET (6)
79 #define IDE_STATUS_OFFSET (7) 106 #define IDE_STATUS_OFFSET (7)
80 #define IDE_CONTROL_OFFSET (8) 107 #define IDE_CONTROL_OFFSET (8)
81 #define IDE_IRQ_OFFSET (9) 108 #define IDE_IRQ_OFFSET (9)
82 109
83 #define IDE_FEATURE_OFFSET IDE_ERROR_OFFS 110 #define IDE_FEATURE_OFFSET IDE_ERROR_OFFSET
84 #define IDE_COMMAND_OFFSET IDE_STATUS_OFF 111 #define IDE_COMMAND_OFFSET IDE_STATUS_OFFSET
85 112
>> 113 #define IDE_CONTROL_OFFSET_HOB (7)
>> 114
86 #define IDE_DATA_REG (HWIF(drive)-> 115 #define IDE_DATA_REG (HWIF(drive)->io_ports[IDE_DATA_OFFSET])
87 #define IDE_ERROR_REG (HWIF(drive)-> 116 #define IDE_ERROR_REG (HWIF(drive)->io_ports[IDE_ERROR_OFFSET])
88 #define IDE_NSECTOR_REG (HWIF(drive)-> 117 #define IDE_NSECTOR_REG (HWIF(drive)->io_ports[IDE_NSECTOR_OFFSET])
89 #define IDE_SECTOR_REG (HWIF(drive)-> 118 #define IDE_SECTOR_REG (HWIF(drive)->io_ports[IDE_SECTOR_OFFSET])
90 #define IDE_LCYL_REG (HWIF(drive)-> 119 #define IDE_LCYL_REG (HWIF(drive)->io_ports[IDE_LCYL_OFFSET])
91 #define IDE_HCYL_REG (HWIF(drive)-> 120 #define IDE_HCYL_REG (HWIF(drive)->io_ports[IDE_HCYL_OFFSET])
92 #define IDE_SELECT_REG (HWIF(drive)-> 121 #define IDE_SELECT_REG (HWIF(drive)->io_ports[IDE_SELECT_OFFSET])
93 #define IDE_STATUS_REG (HWIF(drive)-> 122 #define IDE_STATUS_REG (HWIF(drive)->io_ports[IDE_STATUS_OFFSET])
94 #define IDE_CONTROL_REG (HWIF(drive)-> 123 #define IDE_CONTROL_REG (HWIF(drive)->io_ports[IDE_CONTROL_OFFSET])
95 #define IDE_IRQ_REG (HWIF(drive)-> 124 #define IDE_IRQ_REG (HWIF(drive)->io_ports[IDE_IRQ_OFFSET])
96 125
97 #define IDE_FEATURE_REG IDE_ERROR_REG 126 #define IDE_FEATURE_REG IDE_ERROR_REG
98 #define IDE_COMMAND_REG IDE_STATUS_REG 127 #define IDE_COMMAND_REG IDE_STATUS_REG
99 #define IDE_ALTSTATUS_REG IDE_CONTROL_RE 128 #define IDE_ALTSTATUS_REG IDE_CONTROL_REG
100 #define IDE_IREASON_REG IDE_NSECTOR_RE 129 #define IDE_IREASON_REG IDE_NSECTOR_REG
101 #define IDE_BCOUNTL_REG IDE_LCYL_REG 130 #define IDE_BCOUNTL_REG IDE_LCYL_REG
102 #define IDE_BCOUNTH_REG IDE_HCYL_REG 131 #define IDE_BCOUNTH_REG IDE_HCYL_REG
103 132
104 #define OK_STAT(stat,good,bad) (((stat)&((goo 133 #define OK_STAT(stat,good,bad) (((stat)&((good)|(bad)))==(good))
105 #define BAD_R_STAT (BUSY_STAT | 134 #define BAD_R_STAT (BUSY_STAT | ERR_STAT)
106 #define BAD_W_STAT (BAD_R_STAT | 135 #define BAD_W_STAT (BAD_R_STAT | WRERR_STAT)
107 #define BAD_STAT (BAD_R_STAT | 136 #define BAD_STAT (BAD_R_STAT | DRQ_STAT)
108 #define DRIVE_READY (READY_STAT | 137 #define DRIVE_READY (READY_STAT | SEEK_STAT)
>> 138 #define DATA_READY (DRQ_STAT)
109 139
110 #define BAD_CRC (ABRT_ERR | 140 #define BAD_CRC (ABRT_ERR | ICRC_ERR)
111 141
112 #define SATA_NR_PORTS (3) /* 16 142 #define SATA_NR_PORTS (3) /* 16 possible ?? */
113 143
114 #define SATA_STATUS_OFFSET (0) 144 #define SATA_STATUS_OFFSET (0)
>> 145 #define SATA_STATUS_REG (HWIF(drive)->sata_scr[SATA_STATUS_OFFSET])
115 #define SATA_ERROR_OFFSET (1) 146 #define SATA_ERROR_OFFSET (1)
>> 147 #define SATA_ERROR_REG (HWIF(drive)->sata_scr[SATA_ERROR_OFFSET])
116 #define SATA_CONTROL_OFFSET (2) 148 #define SATA_CONTROL_OFFSET (2)
>> 149 #define SATA_CONTROL_REG (HWIF(drive)->sata_scr[SATA_CONTROL_OFFSET])
>> 150
>> 151 #define SATA_MISC_OFFSET (0)
>> 152 #define SATA_MISC_REG (HWIF(drive)->sata_misc[SATA_MISC_OFFSET])
>> 153 #define SATA_PHY_OFFSET (1)
>> 154 #define SATA_PHY_REG (HWIF(drive)->sata_misc[SATA_PHY_OFFSET])
>> 155 #define SATA_IEN_OFFSET (2)
>> 156 #define SATA_IEN_REG (HWIF(drive)->sata_misc[SATA_IEN_OFFSET])
117 157
118 /* 158 /*
119 * Our Physical Region Descriptor (PRD) table 159 * Our Physical Region Descriptor (PRD) table should be large enough
120 * to handle the biggest I/O request we are li 160 * to handle the biggest I/O request we are likely to see. Since requests
121 * can have no more than 256 sectors, and sinc 161 * can have no more than 256 sectors, and since the typical blocksize is
122 * two or more sectors, we could get by with a 162 * two or more sectors, we could get by with a limit of 128 entries here for
123 * the usual worst case. Most requests seem t 163 * the usual worst case. Most requests seem to include some contiguous blocks,
124 * further reducing the number of table entrie 164 * further reducing the number of table entries required.
125 * 165 *
126 * The driver reverts to PIO mode for individu 166 * The driver reverts to PIO mode for individual requests that exceed
127 * this limit (possible with 512 byte blocksiz 167 * this limit (possible with 512 byte blocksizes, eg. MSDOS f/s), so handling
128 * 100% of all crazy scenarios here is not nec 168 * 100% of all crazy scenarios here is not necessary.
129 * 169 *
130 * As it turns out though, we must allocate a 170 * As it turns out though, we must allocate a full 4KB page for this,
131 * so the two PRD tables (ide0 & ide1) will ea 171 * so the two PRD tables (ide0 & ide1) will each get half of that,
132 * allowing each to have about 256 entries (8 172 * allowing each to have about 256 entries (8 bytes each) from this.
133 */ 173 */
134 #define PRD_BYTES 8 174 #define PRD_BYTES 8
135 #define PRD_ENTRIES 256 175 #define PRD_ENTRIES 256
136 176
137 /* 177 /*
138 * Some more useful definitions 178 * Some more useful definitions
139 */ 179 */
140 #define PARTN_BITS 6 /* number of m 180 #define PARTN_BITS 6 /* number of minor dev bits for partitions */
141 #define MAX_DRIVES 2 /* per interfa 181 #define MAX_DRIVES 2 /* per interface; 2 assumed by lots of code */
142 #define SECTOR_SIZE 512 182 #define SECTOR_SIZE 512
143 #define SECTOR_WORDS (SECTOR_SIZE / 4) 183 #define SECTOR_WORDS (SECTOR_SIZE / 4) /* number of 32bit words per sector */
144 #define IDE_LARGE_SEEK(b1,b2,t) (((b1) > (b2) 184 #define IDE_LARGE_SEEK(b1,b2,t) (((b1) > (b2) + (t)) || ((b2) > (b1) + (t)))
145 185
146 /* 186 /*
147 * Timeouts for various operations: 187 * Timeouts for various operations:
148 */ 188 */
149 #define WAIT_DRQ (HZ/10) /* 100 189 #define WAIT_DRQ (HZ/10) /* 100msec - spec allows up to 20ms */
150 #define WAIT_READY (5*HZ) /* 5se 190 #define WAIT_READY (5*HZ) /* 5sec - some laptops are very slow */
151 #define WAIT_PIDENTIFY (10*HZ) /* 10sec - sh 191 #define WAIT_PIDENTIFY (10*HZ) /* 10sec - should be less than 3ms (?), if all ATAPI CD is closed at boot */
152 #define WAIT_WORSTCASE (30*HZ) /* 30sec - wo 192 #define WAIT_WORSTCASE (30*HZ) /* 30sec - worst case when spinning up */
153 #define WAIT_CMD (10*HZ) /* 10sec - ma 193 #define WAIT_CMD (10*HZ) /* 10sec - maximum wait for an IRQ to happen */
154 #define WAIT_MIN_SLEEP (2*HZ/100) /* 20m 194 #define WAIT_MIN_SLEEP (2*HZ/100) /* 20msec - minimum sleep time */
155 195
>> 196 #define HOST(hwif,chipset) \
>> 197 { \
>> 198 return ((hwif)->chipset == chipset) ? 1 : 0; \
>> 199 }
>> 200
156 /* 201 /*
157 * Check for an interrupt and acknowledge the 202 * Check for an interrupt and acknowledge the interrupt status
158 */ 203 */
159 struct hwif_s; 204 struct hwif_s;
160 typedef int (ide_ack_intr_t)(struct hwif_s *); 205 typedef int (ide_ack_intr_t)(struct hwif_s *);
161 206
>> 207 #ifndef NO_DMA
>> 208 #define NO_DMA 255
>> 209 #endif
>> 210
162 /* 211 /*
163 * hwif_chipset_t is used to keep track of the 212 * hwif_chipset_t is used to keep track of the specific hardware
164 * chipset used by each IDE interface, if know 213 * chipset used by each IDE interface, if known.
165 */ 214 */
166 enum { ide_unknown, ide_generic, !! 215 typedef enum { ide_unknown, ide_generic, ide_pci,
167 ide_cmd640, ide_dtc2278, 216 ide_cmd640, ide_dtc2278, ide_ali14xx,
168 ide_qd65xx, ide_umc8672, 217 ide_qd65xx, ide_umc8672, ide_ht6560b,
169 ide_rz1000, ide_trm290, 218 ide_rz1000, ide_trm290,
170 ide_cmd646, ide_cy82c693, 219 ide_cmd646, ide_cy82c693, ide_4drives,
171 ide_pmac, ide_etrax100, 220 ide_pmac, ide_etrax100, ide_acorn,
172 ide_au1xxx, ide_palm3710, !! 221 ide_forced
173 }; !! 222 } hwif_chipset_t;
174 <<
175 typedef u8 hwif_chipset_t; <<
176 223
177 /* 224 /*
178 * Structure to hold all information about the 225 * Structure to hold all information about the location of this port
179 */ 226 */
180 typedef struct hw_regs_s { 227 typedef struct hw_regs_s {
181 unsigned long io_ports[IDE_NR_PORTS] 228 unsigned long io_ports[IDE_NR_PORTS]; /* task file registers */
182 int irq; 229 int irq; /* our irq number */
>> 230 int dma; /* our dma entry */
183 ide_ack_intr_t *ack_intr; 231 ide_ack_intr_t *ack_intr; /* acknowledge interrupt */
184 hwif_chipset_t chipset; 232 hwif_chipset_t chipset;
185 struct device *dev; <<
186 } hw_regs_t; 233 } hw_regs_t;
187 234
188 struct hwif_s * ide_find_port(unsigned long); !! 235 /*
189 struct hwif_s *ide_deprecated_find_port(unsign !! 236 * Register new hardware with ide
190 void ide_init_port_data(struct hwif_s *, unsig !! 237 */
191 void ide_init_port_hw(struct hwif_s *, hw_regs !! 238 int ide_register_hw(hw_regs_t *hw, struct hwif_s **hwifp);
192 !! 239 int ide_register_hw_with_fixup(hw_regs_t *, struct hwif_s **, void (*)(struct hwif_s *));
193 struct ide_drive_s; !! 240
194 int ide_register_hw(hw_regs_t *, void (*)(stru !! 241 /*
195 struct hwif_s **); !! 242 * Set up hw_regs_t structure before calling ide_register_hw (optional)
>> 243 */
>> 244 void ide_setup_ports( hw_regs_t *hw,
>> 245 unsigned long base,
>> 246 int *offsets,
>> 247 unsigned long ctrl,
>> 248 unsigned long intr,
>> 249 ide_ack_intr_t *ack_intr,
>> 250 #if 0
>> 251 ide_io_ops_t *iops,
>> 252 #endif
>> 253 int irq);
196 254
197 static inline void ide_std_init_ports(hw_regs_ 255 static inline void ide_std_init_ports(hw_regs_t *hw,
198 unsigned 256 unsigned long io_addr,
199 unsigned 257 unsigned long ctl_addr)
200 { 258 {
201 unsigned int i; 259 unsigned int i;
202 260
203 for (i = IDE_DATA_OFFSET; i <= IDE_STA 261 for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++)
204 hw->io_ports[i] = io_addr++; 262 hw->io_ports[i] = io_addr++;
205 263
206 hw->io_ports[IDE_CONTROL_OFFSET] = ctl 264 hw->io_ports[IDE_CONTROL_OFFSET] = ctl_addr;
207 } 265 }
208 266
209 #include <asm/ide.h> 267 #include <asm/ide.h>
210 268
211 #if !defined(MAX_HWIFS) || defined(CONFIG_EMBE <<
212 #undef MAX_HWIFS <<
213 #define MAX_HWIFS CONFIG_IDE_MAX_HWIFS <<
214 #endif <<
215 <<
216 /* needed on alpha, x86/x86_64, ia64, mips, pp 269 /* needed on alpha, x86/x86_64, ia64, mips, ppc32 and sh */
217 #ifndef IDE_ARCH_OBSOLETE_DEFAULTS 270 #ifndef IDE_ARCH_OBSOLETE_DEFAULTS
218 # define ide_default_io_base(index) (0) 271 # define ide_default_io_base(index) (0)
219 # define ide_default_irq(base) (0) 272 # define ide_default_irq(base) (0)
220 # define ide_init_default_irq(base) (0) 273 # define ide_init_default_irq(base) (0)
221 #endif 274 #endif
222 275
223 #ifdef CONFIG_IDE_ARCH_OBSOLETE_INIT !! 276 /*
>> 277 * ide_init_hwif_ports() is OBSOLETE and will be removed in 2.7 series.
>> 278 * New ports shouldn't define IDE_ARCH_OBSOLETE_INIT in <asm/ide.h>.
>> 279 */
>> 280 #ifdef IDE_ARCH_OBSOLETE_INIT
224 static inline void ide_init_hwif_ports(hw_regs 281 static inline void ide_init_hwif_ports(hw_regs_t *hw,
225 unsigne 282 unsigned long io_addr,
226 unsigne 283 unsigned long ctl_addr,
227 int *ir 284 int *irq)
228 { 285 {
229 if (!ctl_addr) 286 if (!ctl_addr)
230 ide_std_init_ports(hw, io_addr 287 ide_std_init_ports(hw, io_addr, ide_default_io_ctl(io_addr));
231 else 288 else
232 ide_std_init_ports(hw, io_addr 289 ide_std_init_ports(hw, io_addr, ctl_addr);
233 290
234 if (irq) 291 if (irq)
235 *irq = 0; 292 *irq = 0;
236 293
237 hw->io_ports[IDE_IRQ_OFFSET] = 0; 294 hw->io_ports[IDE_IRQ_OFFSET] = 0;
238 295
239 #ifdef CONFIG_PPC32 296 #ifdef CONFIG_PPC32
240 if (ppc_ide_md.ide_init_hwif) 297 if (ppc_ide_md.ide_init_hwif)
241 ppc_ide_md.ide_init_hwif(hw, i 298 ppc_ide_md.ide_init_hwif(hw, io_addr, ctl_addr, irq);
242 #endif 299 #endif
243 } 300 }
244 #else 301 #else
245 static inline void ide_init_hwif_ports(hw_regs 302 static inline void ide_init_hwif_ports(hw_regs_t *hw,
246 unsigne 303 unsigned long io_addr,
247 unsigne 304 unsigned long ctl_addr,
248 int *ir 305 int *irq)
249 { 306 {
250 if (io_addr || ctl_addr) 307 if (io_addr || ctl_addr)
251 printk(KERN_WARNING "%s: must 308 printk(KERN_WARNING "%s: must not be called\n", __FUNCTION__);
252 } 309 }
253 #endif /* CONFIG_IDE_ARCH_OBSOLETE_INIT */ !! 310 #endif /* IDE_ARCH_OBSOLETE_INIT */
254 311
255 /* Currently only m68k, apus and m8xx need it 312 /* Currently only m68k, apus and m8xx need it */
256 #ifndef IDE_ARCH_ACK_INTR 313 #ifndef IDE_ARCH_ACK_INTR
257 # define ide_ack_intr(hwif) (1) 314 # define ide_ack_intr(hwif) (1)
258 #endif 315 #endif
259 316
260 /* Currently only Atari needs it */ 317 /* Currently only Atari needs it */
261 #ifndef IDE_ARCH_LOCK 318 #ifndef IDE_ARCH_LOCK
262 # define ide_release_lock() 319 # define ide_release_lock() do {} while (0)
263 # define ide_get_lock(hdlr, data) 320 # define ide_get_lock(hdlr, data) do {} while (0)
264 #endif /* IDE_ARCH_LOCK */ 321 #endif /* IDE_ARCH_LOCK */
265 322
266 /* 323 /*
267 * Now for the data we need to maintain per-dr 324 * Now for the data we need to maintain per-drive: ide_drive_t
268 */ 325 */
269 326
270 #define ide_scsi 0x21 327 #define ide_scsi 0x21
271 #define ide_disk 0x20 328 #define ide_disk 0x20
272 #define ide_optical 0x7 329 #define ide_optical 0x7
273 #define ide_cdrom 0x5 330 #define ide_cdrom 0x5
274 #define ide_tape 0x1 331 #define ide_tape 0x1
275 #define ide_floppy 0x0 332 #define ide_floppy 0x0
276 333
277 /* 334 /*
278 * Special Driver Flags 335 * Special Driver Flags
279 * 336 *
280 * set_geometry : respecify drive geometry 337 * set_geometry : respecify drive geometry
281 * recalibrate : seek to cyl 0 338 * recalibrate : seek to cyl 0
282 * set_multmode : set multmode count 339 * set_multmode : set multmode count
283 * set_tune : tune interface for drive 340 * set_tune : tune interface for drive
284 * serviced : service command 341 * serviced : service command
285 * reserved : unused 342 * reserved : unused
286 */ 343 */
287 typedef union { 344 typedef union {
288 unsigned all : 8; 345 unsigned all : 8;
289 struct { 346 struct {
>> 347 #if defined(__LITTLE_ENDIAN_BITFIELD)
290 unsigned set_geometry : 1; 348 unsigned set_geometry : 1;
291 unsigned recalibrate : 1; 349 unsigned recalibrate : 1;
292 unsigned set_multmode : 1; 350 unsigned set_multmode : 1;
293 unsigned set_tune : 1; 351 unsigned set_tune : 1;
294 unsigned serviced : 1; 352 unsigned serviced : 1;
295 unsigned reserved : 3; 353 unsigned reserved : 3;
>> 354 #elif defined(__BIG_ENDIAN_BITFIELD)
>> 355 unsigned reserved : 3;
>> 356 unsigned serviced : 1;
>> 357 unsigned set_tune : 1;
>> 358 unsigned set_multmode : 1;
>> 359 unsigned recalibrate : 1;
>> 360 unsigned set_geometry : 1;
>> 361 #else
>> 362 #error "Please fix <asm/byteorder.h>"
>> 363 #endif
296 } b; 364 } b;
297 } special_t; 365 } special_t;
298 366
299 /* 367 /*
>> 368 * ATA DATA Register Special.
>> 369 * ATA NSECTOR Count Register().
>> 370 * ATAPI Byte Count Register.
>> 371 * Channel index ordering pairs.
>> 372 */
>> 373 typedef union {
>> 374 unsigned all :16;
>> 375 struct {
>> 376 #if defined(__LITTLE_ENDIAN_BITFIELD)
>> 377 unsigned low :8; /* LSB */
>> 378 unsigned high :8; /* MSB */
>> 379 #elif defined(__BIG_ENDIAN_BITFIELD)
>> 380 unsigned high :8; /* MSB */
>> 381 unsigned low :8; /* LSB */
>> 382 #else
>> 383 #error "Please fix <asm/byteorder.h>"
>> 384 #endif
>> 385 } b;
>> 386 } ata_nsector_t, ata_data_t, atapi_bcount_t, ata_index_t;
>> 387
>> 388 /*
>> 389 * ATA-IDE Error Register
>> 390 *
>> 391 * mark : Bad address mark
>> 392 * tzero : Couldn't find track 0
>> 393 * abrt : Aborted Command
>> 394 * mcr : Media Change Request
>> 395 * id : ID field not found
>> 396 * mce : Media Change Event
>> 397 * ecc : Uncorrectable ECC error
>> 398 * bdd : dual meaing
>> 399 */
>> 400 typedef union {
>> 401 unsigned all :8;
>> 402 struct {
>> 403 #if defined(__LITTLE_ENDIAN_BITFIELD)
>> 404 unsigned mark :1;
>> 405 unsigned tzero :1;
>> 406 unsigned abrt :1;
>> 407 unsigned mcr :1;
>> 408 unsigned id :1;
>> 409 unsigned mce :1;
>> 410 unsigned ecc :1;
>> 411 unsigned bdd :1;
>> 412 #elif defined(__BIG_ENDIAN_BITFIELD)
>> 413 unsigned bdd :1;
>> 414 unsigned ecc :1;
>> 415 unsigned mce :1;
>> 416 unsigned id :1;
>> 417 unsigned mcr :1;
>> 418 unsigned abrt :1;
>> 419 unsigned tzero :1;
>> 420 unsigned mark :1;
>> 421 #else
>> 422 #error "Please fix <asm/byteorder.h>"
>> 423 #endif
>> 424 } b;
>> 425 } ata_error_t;
>> 426
>> 427 /*
300 * ATA-IDE Select Register, aka Device-Head 428 * ATA-IDE Select Register, aka Device-Head
301 * 429 *
302 * head : always zeros here 430 * head : always zeros here
303 * unit : drive select number: 0/1 431 * unit : drive select number: 0/1
304 * bit5 : always 1 432 * bit5 : always 1
305 * lba : using LBA instead of CHS 433 * lba : using LBA instead of CHS
306 * bit7 : always 1 434 * bit7 : always 1
307 */ 435 */
308 typedef union { 436 typedef union {
309 unsigned all : 8; 437 unsigned all : 8;
310 struct { 438 struct {
311 #if defined(__LITTLE_ENDIAN_BITFIELD) 439 #if defined(__LITTLE_ENDIAN_BITFIELD)
312 unsigned head : 4; 440 unsigned head : 4;
313 unsigned unit : 1; 441 unsigned unit : 1;
314 unsigned bit5 : 1; 442 unsigned bit5 : 1;
315 unsigned lba : 1; 443 unsigned lba : 1;
316 unsigned bit7 : 1; 444 unsigned bit7 : 1;
317 #elif defined(__BIG_ENDIAN_BITFIELD) 445 #elif defined(__BIG_ENDIAN_BITFIELD)
318 unsigned bit7 : 1; 446 unsigned bit7 : 1;
319 unsigned lba : 1; 447 unsigned lba : 1;
320 unsigned bit5 : 1; 448 unsigned bit5 : 1;
321 unsigned unit : 1; 449 unsigned unit : 1;
322 unsigned head : 4; 450 unsigned head : 4;
323 #else 451 #else
324 #error "Please fix <asm/byteorder.h>" 452 #error "Please fix <asm/byteorder.h>"
325 #endif 453 #endif
326 } b; 454 } b;
327 } select_t, ata_select_t; 455 } select_t, ata_select_t;
328 456
329 /* 457 /*
>> 458 * The ATA-IDE Status Register.
>> 459 * The ATAPI Status Register.
>> 460 *
>> 461 * check : Error occurred
>> 462 * idx : Index Error
>> 463 * corr : Correctable error occurred
>> 464 * drq : Data is request by the device
>> 465 * dsc : Disk Seek Complete : ata
>> 466 * : Media access command finished : atapi
>> 467 * df : Device Fault : ata
>> 468 * : Reserved : atapi
>> 469 * drdy : Ready, Command Mode Capable : ata
>> 470 * : Ignored for ATAPI commands : atapi
>> 471 * bsy : Disk is Busy
>> 472 * : The device has access to the command block
>> 473 */
>> 474 typedef union {
>> 475 unsigned all :8;
>> 476 struct {
>> 477 #if defined(__LITTLE_ENDIAN_BITFIELD)
>> 478 unsigned check :1;
>> 479 unsigned idx :1;
>> 480 unsigned corr :1;
>> 481 unsigned drq :1;
>> 482 unsigned dsc :1;
>> 483 unsigned df :1;
>> 484 unsigned drdy :1;
>> 485 unsigned bsy :1;
>> 486 #elif defined(__BIG_ENDIAN_BITFIELD)
>> 487 unsigned bsy :1;
>> 488 unsigned drdy :1;
>> 489 unsigned df :1;
>> 490 unsigned dsc :1;
>> 491 unsigned drq :1;
>> 492 unsigned corr :1;
>> 493 unsigned idx :1;
>> 494 unsigned check :1;
>> 495 #else
>> 496 #error "Please fix <asm/byteorder.h>"
>> 497 #endif
>> 498 } b;
>> 499 } ata_status_t, atapi_status_t;
>> 500
>> 501 /*
>> 502 * ATA-IDE Control Register
>> 503 *
>> 504 * bit0 : Should be set to zero
>> 505 * nIEN : device INTRQ to host
>> 506 * SRST : host soft reset bit
>> 507 * bit3 : ATA-2 thingy, Should be set to 1
>> 508 * reserved456 : Reserved
>> 509 * HOB : 48-bit address ordering, High Ordered Bit
>> 510 */
>> 511 typedef union {
>> 512 unsigned all : 8;
>> 513 struct {
>> 514 #if defined(__LITTLE_ENDIAN_BITFIELD)
>> 515 unsigned bit0 : 1;
>> 516 unsigned nIEN : 1;
>> 517 unsigned SRST : 1;
>> 518 unsigned bit3 : 1;
>> 519 unsigned reserved456 : 3;
>> 520 unsigned HOB : 1;
>> 521 #elif defined(__BIG_ENDIAN_BITFIELD)
>> 522 unsigned HOB : 1;
>> 523 unsigned reserved456 : 3;
>> 524 unsigned bit3 : 1;
>> 525 unsigned SRST : 1;
>> 526 unsigned nIEN : 1;
>> 527 unsigned bit0 : 1;
>> 528 #else
>> 529 #error "Please fix <asm/byteorder.h>"
>> 530 #endif
>> 531 } b;
>> 532 } ata_control_t;
>> 533
>> 534 /*
>> 535 * ATAPI Feature Register
>> 536 *
>> 537 * dma : Using DMA or PIO
>> 538 * reserved321 : Reserved
>> 539 * reserved654 : Reserved (Tag Type)
>> 540 * reserved7 : Reserved
>> 541 */
>> 542 typedef union {
>> 543 unsigned all :8;
>> 544 struct {
>> 545 #if defined(__LITTLE_ENDIAN_BITFIELD)
>> 546 unsigned dma :1;
>> 547 unsigned reserved321 :3;
>> 548 unsigned reserved654 :3;
>> 549 unsigned reserved7 :1;
>> 550 #elif defined(__BIG_ENDIAN_BITFIELD)
>> 551 unsigned reserved7 :1;
>> 552 unsigned reserved654 :3;
>> 553 unsigned reserved321 :3;
>> 554 unsigned dma :1;
>> 555 #else
>> 556 #error "Please fix <asm/byteorder.h>"
>> 557 #endif
>> 558 } b;
>> 559 } atapi_feature_t;
>> 560
>> 561 /*
>> 562 * ATAPI Interrupt Reason Register.
>> 563 *
>> 564 * cod : Information transferred is command (1) or data (0)
>> 565 * io : The device requests us to read (1) or write (0)
>> 566 * reserved : Reserved
>> 567 */
>> 568 typedef union {
>> 569 unsigned all :8;
>> 570 struct {
>> 571 #if defined(__LITTLE_ENDIAN_BITFIELD)
>> 572 unsigned cod :1;
>> 573 unsigned io :1;
>> 574 unsigned reserved :6;
>> 575 #elif defined(__BIG_ENDIAN_BITFIELD)
>> 576 unsigned reserved :6;
>> 577 unsigned io :1;
>> 578 unsigned cod :1;
>> 579 #else
>> 580 #error "Please fix <asm/byteorder.h>"
>> 581 #endif
>> 582 } b;
>> 583 } atapi_ireason_t;
>> 584
>> 585 /*
>> 586 * The ATAPI error register.
>> 587 *
>> 588 * ili : Illegal Length Indication
>> 589 * eom : End Of Media Detected
>> 590 * abrt : Aborted command - As defined by ATA
>> 591 * mcr : Media Change Requested - As defined by ATA
>> 592 * sense_key : Sense key of the last failed packet command
>> 593 */
>> 594 typedef union {
>> 595 unsigned all :8;
>> 596 struct {
>> 597 #if defined(__LITTLE_ENDIAN_BITFIELD)
>> 598 unsigned ili :1;
>> 599 unsigned eom :1;
>> 600 unsigned abrt :1;
>> 601 unsigned mcr :1;
>> 602 unsigned sense_key :4;
>> 603 #elif defined(__BIG_ENDIAN_BITFIELD)
>> 604 unsigned sense_key :4;
>> 605 unsigned mcr :1;
>> 606 unsigned abrt :1;
>> 607 unsigned eom :1;
>> 608 unsigned ili :1;
>> 609 #else
>> 610 #error "Please fix <asm/byteorder.h>"
>> 611 #endif
>> 612 } b;
>> 613 } atapi_error_t;
>> 614
>> 615 /*
>> 616 * ATAPI floppy Drive Select Register
>> 617 *
>> 618 * sam_lun : Logical unit number
>> 619 * reserved3 : Reserved
>> 620 * drv : The responding drive will be drive 0 (0) or drive 1 (1)
>> 621 * one5 : Should be set to 1
>> 622 * reserved6 : Reserved
>> 623 * one7 : Should be set to 1
>> 624 */
>> 625 typedef union {
>> 626 unsigned all :8;
>> 627 struct {
>> 628 #if defined(__LITTLE_ENDIAN_BITFIELD)
>> 629 unsigned sam_lun :3;
>> 630 unsigned reserved3 :1;
>> 631 unsigned drv :1;
>> 632 unsigned one5 :1;
>> 633 unsigned reserved6 :1;
>> 634 unsigned one7 :1;
>> 635 #elif defined(__BIG_ENDIAN_BITFIELD)
>> 636 unsigned one7 :1;
>> 637 unsigned reserved6 :1;
>> 638 unsigned one5 :1;
>> 639 unsigned drv :1;
>> 640 unsigned reserved3 :1;
>> 641 unsigned sam_lun :3;
>> 642 #else
>> 643 #error "Please fix <asm/byteorder.h>"
>> 644 #endif
>> 645 } b;
>> 646 } atapi_select_t;
>> 647
>> 648 /*
330 * Status returned from various ide_ functions 649 * Status returned from various ide_ functions
331 */ 650 */
332 typedef enum { 651 typedef enum {
333 ide_stopped, /* no drive operation 652 ide_stopped, /* no drive operation was started */
334 ide_started, /* a drive operation w 653 ide_started, /* a drive operation was started, handler was set */
335 } ide_startstop_t; 654 } ide_startstop_t;
336 655
337 struct ide_driver_s; 656 struct ide_driver_s;
338 struct ide_settings_s; 657 struct ide_settings_s;
339 658
340 #ifdef CONFIG_BLK_DEV_IDEACPI <<
341 struct ide_acpi_drive_link; <<
342 struct ide_acpi_hwif_link; <<
343 #endif <<
344 <<
345 typedef struct ide_drive_s { 659 typedef struct ide_drive_s {
346 char name[4]; /* dri 660 char name[4]; /* drive name, such as "hda" */
347 char driver_req[10]; /* req 661 char driver_req[10]; /* requests specific driver */
348 662
349 struct request_queue *queue; /* req !! 663 request_queue_t *queue; /* request queue */
350 664
351 struct request *rq; /* cur 665 struct request *rq; /* current request */
352 struct ide_drive_s *next; /* cir 666 struct ide_drive_s *next; /* circular list of hwgroup drives */
>> 667 struct ide_driver_s *driver;/* (ide_driver_t *) */
353 void *driver_data; /* ext 668 void *driver_data; /* extra driver data */
354 struct hd_driveid *id; /* dri 669 struct hd_driveid *id; /* drive model identification info */
355 #ifdef CONFIG_IDE_PROC_FS <<
356 struct proc_dir_entry *proc; /* /pr 670 struct proc_dir_entry *proc; /* /proc/ide/ directory entry */
357 struct ide_settings_s *settings;/* /pr 671 struct ide_settings_s *settings;/* /proc/ide/ drive settings */
358 #endif !! 672 char devfs_name[64]; /* devfs crap */
>> 673
359 struct hwif_s *hwif; /* act 674 struct hwif_s *hwif; /* actually (ide_hwif_t *) */
360 675
361 unsigned long sleep; /* sle 676 unsigned long sleep; /* sleep until this time */
362 unsigned long service_start; /* tim 677 unsigned long service_start; /* time we started last request */
363 unsigned long service_time; /* ser 678 unsigned long service_time; /* service time of last request */
364 unsigned long timeout; /* max 679 unsigned long timeout; /* max time to wait for irq */
365 680
366 special_t special; /* spe 681 special_t special; /* special action flags */
367 select_t select; /* bas 682 select_t select; /* basic drive/head select reg value */
368 683
369 u8 keep_settings; /* res 684 u8 keep_settings; /* restore settings after drive reset */
>> 685 u8 autodma; /* device can safely use dma on host */
370 u8 using_dma; /* dis 686 u8 using_dma; /* disk is using dma for read/write */
371 u8 retry_pio; /* ret 687 u8 retry_pio; /* retrying dma capable host in pio */
372 u8 state; /* ret 688 u8 state; /* retry state */
373 u8 waiting_for_dma; /* dma 689 u8 waiting_for_dma; /* dma currently in progress */
374 u8 unmask; /* oka 690 u8 unmask; /* okay to unmask other irqs */
375 u8 noflush; /* don !! 691 u8 bswap; /* byte swap data */
376 u8 dsc_overlap; /* DSC 692 u8 dsc_overlap; /* DSC overlap */
377 u8 nice1; /* giv 693 u8 nice1; /* give potential excess bandwidth */
378 694
379 unsigned present : 1; /* dri 695 unsigned present : 1; /* drive is physically present */
380 unsigned dead : 1; /* dev 696 unsigned dead : 1; /* device ejected hint */
381 unsigned id_read : 1; /* 1=i 697 unsigned id_read : 1; /* 1=id read from disk 0 = synthetic */
382 unsigned noprobe : 1; /* fro 698 unsigned noprobe : 1; /* from: hdx=noprobe */
383 unsigned removable : 1; /* 1 i 699 unsigned removable : 1; /* 1 if need to do check_media_change */
384 unsigned attach : 1; /* nee 700 unsigned attach : 1; /* needed for removable devices */
>> 701 unsigned is_flash : 1; /* 1 if probed as flash */
385 unsigned forced_geom : 1; /* 1 i 702 unsigned forced_geom : 1; /* 1 if hdx=c,h,s was given at boot */
386 unsigned no_unmask : 1; /* dis 703 unsigned no_unmask : 1; /* disallow setting unmask bit */
387 unsigned no_io_32bit : 1; /* dis 704 unsigned no_io_32bit : 1; /* disallow enabling 32bit I/O */
388 unsigned atapi_overlap : 1; /* ATA 705 unsigned atapi_overlap : 1; /* ATAPI overlap (not supported) */
>> 706 unsigned nice0 : 1; /* give obvious excess bandwidth */
>> 707 unsigned nice2 : 1; /* give a share in our own bandwidth */
389 unsigned doorlocking : 1; /* for 708 unsigned doorlocking : 1; /* for removable only: door lock/unlock works */
390 unsigned nodma : 1; /* dis <<
391 unsigned autotune : 2; /* 0=d 709 unsigned autotune : 2; /* 0=default, 1=autotune, 2=noautotune */
392 unsigned remap_0_to_1 : 1; /* 0=n 710 unsigned remap_0_to_1 : 1; /* 0=noremap, 1=remap 0->1 (for EZDrive) */
393 unsigned blocked : 1; /* 1=p 711 unsigned blocked : 1; /* 1=powermanagment told us not to do anything, so sleep nicely */
394 unsigned vdma : 1; /* 1=d 712 unsigned vdma : 1; /* 1=doing PIO over DMA 0=doing normal DMA */
>> 713 unsigned addressing; /* : 3;
>> 714 * 0=28-bit
>> 715 * 1=48-bit
>> 716 * 2=48-bit doing 28-bit
>> 717 * 3=64-bit
>> 718 */
395 unsigned scsi : 1; /* 0=d 719 unsigned scsi : 1; /* 0=default, 1=ide-scsi emulation */
396 unsigned sleeping : 1; /* 1=s 720 unsigned sleeping : 1; /* 1=sleeping & sleep field valid */
397 unsigned post_reset : 1; <<
398 unsigned udma33_warned : 1; <<
399 721
400 u8 addressing; /* 0=28-bit, 1 <<
401 u8 quirk_list; /* considered 722 u8 quirk_list; /* considered quirky, set for a specific host */
402 u8 init_speed; /* transfer ra 723 u8 init_speed; /* transfer rate set at boot */
>> 724 u8 pio_speed; /* unused by core, used by some drivers for fallback from DMA */
403 u8 current_speed; /* current tra 725 u8 current_speed; /* current transfer rate set */
404 u8 desired_speed; /* desired tra <<
405 u8 dn; /* now wide sp 726 u8 dn; /* now wide spread use */
406 u8 wcache; /* status of w 727 u8 wcache; /* status of write cache */
407 u8 acoustic; /* acoustic ma 728 u8 acoustic; /* acoustic management */
408 u8 media; /* disk, cdrom 729 u8 media; /* disk, cdrom, tape, floppy, ... */
409 u8 ctl; /* "normal" va 730 u8 ctl; /* "normal" value for IDE_CONTROL_REG */
410 u8 ready_stat; /* min status 731 u8 ready_stat; /* min status value for drive ready */
411 u8 mult_count; /* current mul 732 u8 mult_count; /* current multiple sector setting */
412 u8 mult_req; /* requested m 733 u8 mult_req; /* requested multiple sector setting */
413 u8 tune_req; /* requested d 734 u8 tune_req; /* requested drive tuning setting */
414 u8 io_32bit; /* 0=16-bit, 1 735 u8 io_32bit; /* 0=16-bit, 1=32-bit, 2/3=32bit+sync */
415 u8 bad_wstat; /* used for ig 736 u8 bad_wstat; /* used for ignoring WRERR_STAT */
416 u8 nowerr; /* used for ig 737 u8 nowerr; /* used for ignoring WRERR_STAT */
417 u8 sect0; /* offset of f 738 u8 sect0; /* offset of first sector for DM6:DDO */
418 u8 head; /* "real" numb 739 u8 head; /* "real" number of heads */
419 u8 sect; /* "real" sect 740 u8 sect; /* "real" sectors per track */
420 u8 bios_head; /* BIOS/fdisk/ 741 u8 bios_head; /* BIOS/fdisk/LILO number of heads */
421 u8 bios_sect; /* BIOS/fdisk/ 742 u8 bios_sect; /* BIOS/fdisk/LILO sectors per track */
>> 743 u8 doing_barrier; /* state, 1=currently doing flush */
422 744
423 unsigned int bios_cyl; /* BIO 745 unsigned int bios_cyl; /* BIOS/fdisk/LILO number of cyls */
424 unsigned int cyl; /* "re 746 unsigned int cyl; /* "real" number of cyls */
425 unsigned int drive_data; /* use !! 747 unsigned int drive_data; /* use by tuneproc/selectproc */
>> 748 unsigned int usage; /* current "open()" count for drive */
426 unsigned int failures; /* cur 749 unsigned int failures; /* current failure count */
427 unsigned int max_failures; /* max 750 unsigned int max_failures; /* maximum allowed failure count */
428 u64 probed_capacity;/* ini <<
429 751
430 u64 capacity64; /* tot 752 u64 capacity64; /* total number of sectors */
431 753
432 int lun; /* log 754 int lun; /* logical unit */
433 int crc_count; /* crc 755 int crc_count; /* crc counter to reduce drive speed */
434 #ifdef CONFIG_BLK_DEV_IDEACPI <<
435 struct ide_acpi_drive_link *acpidata; <<
436 #endif <<
437 struct list_head list; 756 struct list_head list;
438 struct device gendev; 757 struct device gendev;
439 struct completion gendev_rel_comp; !! 758 struct semaphore gendev_rel_sem; /* to deal with device release() */
>> 759 struct gendisk *disk;
440 } ide_drive_t; 760 } ide_drive_t;
441 761
442 #define to_ide_device(dev)container_of(dev, id <<
443 <<
444 #define IDE_CHIPSET_PCI_MASK \ 762 #define IDE_CHIPSET_PCI_MASK \
445 ((1<<ide_pci)|(1<<ide_cmd646)|(1<<ide_ali1 763 ((1<<ide_pci)|(1<<ide_cmd646)|(1<<ide_ali14xx))
446 #define IDE_CHIPSET_IS_PCI(c) ((IDE_CHIPSET_ 764 #define IDE_CHIPSET_IS_PCI(c) ((IDE_CHIPSET_PCI_MASK >> (c)) & 1)
447 765
448 struct ide_port_info; !! 766 struct ide_pci_device_s;
449 767
450 typedef struct hwif_s { 768 typedef struct hwif_s {
451 struct hwif_s *next; /* for 769 struct hwif_s *next; /* for linked-list in ide_hwgroup_t */
452 struct hwif_s *mate; /* oth 770 struct hwif_s *mate; /* other hwif from same PCI chip */
453 struct hwgroup_s *hwgroup; /* act 771 struct hwgroup_s *hwgroup; /* actually (ide_hwgroup_t *) */
454 struct proc_dir_entry *proc; /* /pr 772 struct proc_dir_entry *proc; /* /proc/ide/ directory entry */
455 773
456 char name[6]; /* nam 774 char name[6]; /* name of interface, eg. "ide0" */
457 775
458 /* task file registers for pat 776 /* task file registers for pata and sata */
459 unsigned long io_ports[IDE_NR_PORTS] 777 unsigned long io_ports[IDE_NR_PORTS];
460 unsigned long sata_scr[SATA_NR_PORTS 778 unsigned long sata_scr[SATA_NR_PORTS];
>> 779 unsigned long sata_misc[SATA_NR_PORTS];
461 780
>> 781 hw_regs_t hw; /* Hardware info */
462 ide_drive_t drives[MAX_DRIVES]; 782 ide_drive_t drives[MAX_DRIVES]; /* drive info */
463 783
464 u8 major; /* our major number */ 784 u8 major; /* our major number */
465 u8 index; /* 0 for ide0; 1 for i 785 u8 index; /* 0 for ide0; 1 for ide1; ... */
466 u8 channel; /* for dual-port chips 786 u8 channel; /* for dual-port chips: 0=primary, 1=secondary */
>> 787 u8 straight8; /* Alan's straight 8 check */
467 u8 bus_state; /* power state of the 788 u8 bus_state; /* power state of the IDE bus */
468 789
469 u32 host_flags; !! 790 u8 atapi_dma; /* host supports atapi_dma */
470 <<
471 u8 pio_mask; <<
472 <<
473 u8 ultra_mask; 791 u8 ultra_mask;
474 u8 mwdma_mask; 792 u8 mwdma_mask;
475 u8 swdma_mask; 793 u8 swdma_mask;
476 794
477 u8 cbl; /* cable type */ <<
478 <<
479 hwif_chipset_t chipset; /* sub-module 795 hwif_chipset_t chipset; /* sub-module for tuning.. */
480 796
481 struct device *dev; !! 797 struct pci_dev *pci_dev; /* for pci chipsets */
482 !! 798 struct ide_pci_device_s *cds; /* chipset device struct */
483 const struct ide_port_info *cds; <<
484 <<
485 ide_ack_intr_t *ack_intr; <<
486 799
487 void (*rw_disk)(ide_drive_t *, struct 800 void (*rw_disk)(ide_drive_t *, struct request *);
488 801
489 #if 0 802 #if 0
490 ide_hwif_ops_t *hwifops; 803 ide_hwif_ops_t *hwifops;
491 #else 804 #else
492 /* host specific initialization of dev !! 805 /* routine to tune PIO mode for drives */
493 void (*port_init_devs)(struct hwif_ !! 806 void (*tuneproc)(ide_drive_t *, u8);
494 /* routine to program host for PIO mod !! 807 /* routine to retune DMA modes for drives */
495 void (*set_pio_mode)(ide_drive_t *, !! 808 int (*speedproc)(ide_drive_t *, u8);
496 /* routine to program host for DMA mod <<
497 void (*set_dma_mode)(ide_drive_t *, <<
498 /* tweaks hardware to select drive */ 809 /* tweaks hardware to select drive */
499 void (*selectproc)(ide_drive_t *); 810 void (*selectproc)(ide_drive_t *);
500 /* chipset polling based on hba specif 811 /* chipset polling based on hba specifics */
501 int (*reset_poll)(ide_drive_t *); 812 int (*reset_poll)(ide_drive_t *);
502 /* chipset specific changes to default 813 /* chipset specific changes to default for device-hba resets */
503 void (*pre_reset)(ide_drive_t *); 814 void (*pre_reset)(ide_drive_t *);
504 /* routine to reset controller after a 815 /* routine to reset controller after a disk reset */
505 void (*resetproc)(ide_drive_t *); 816 void (*resetproc)(ide_drive_t *);
>> 817 /* special interrupt handling for shared pci interrupts */
>> 818 void (*intrproc)(ide_drive_t *);
506 /* special host masking for drive sele 819 /* special host masking for drive selection */
507 void (*maskproc)(ide_drive_t *, int 820 void (*maskproc)(ide_drive_t *, int);
508 /* check host's drive quirk list */ 821 /* check host's drive quirk list */
509 void (*quirkproc)(ide_drive_t *); !! 822 int (*quirkproc)(ide_drive_t *);
510 /* driver soft-power interface */ 823 /* driver soft-power interface */
511 int (*busproc)(ide_drive_t *, int) 824 int (*busproc)(ide_drive_t *, int);
>> 825 // /* host rate limiter */
>> 826 // u8 (*ratemask)(ide_drive_t *);
>> 827 // /* device rate limiter */
>> 828 // u8 (*ratefilter)(ide_drive_t *, u8);
512 #endif 829 #endif
513 u8 (*mdma_filter)(ide_drive_t *); <<
514 u8 (*udma_filter)(ide_drive_t *); <<
515 <<
516 u8 (*cable_detect)(struct hwif_s *); <<
517 830
518 void (*ata_input_data)(ide_drive_t *, 831 void (*ata_input_data)(ide_drive_t *, void *, u32);
519 void (*ata_output_data)(ide_drive_t *, 832 void (*ata_output_data)(ide_drive_t *, void *, u32);
520 833
521 void (*atapi_input_bytes)(ide_drive_t 834 void (*atapi_input_bytes)(ide_drive_t *, void *, u32);
522 void (*atapi_output_bytes)(ide_drive_t 835 void (*atapi_output_bytes)(ide_drive_t *, void *, u32);
523 836
524 void (*dma_host_set)(ide_drive_t *, in <<
525 int (*dma_setup)(ide_drive_t *); 837 int (*dma_setup)(ide_drive_t *);
526 void (*dma_exec_cmd)(ide_drive_t *, u8 838 void (*dma_exec_cmd)(ide_drive_t *, u8);
527 void (*dma_start)(ide_drive_t *); 839 void (*dma_start)(ide_drive_t *);
528 int (*ide_dma_end)(ide_drive_t *drive) 840 int (*ide_dma_end)(ide_drive_t *drive);
>> 841 int (*ide_dma_check)(ide_drive_t *drive);
>> 842 int (*ide_dma_on)(ide_drive_t *drive);
>> 843 int (*ide_dma_off_quietly)(ide_drive_t *drive);
529 int (*ide_dma_test_irq)(ide_drive_t *d 844 int (*ide_dma_test_irq)(ide_drive_t *drive);
530 void (*ide_dma_clear_irq)(ide_drive_t !! 845 int (*ide_dma_host_on)(ide_drive_t *drive);
531 void (*dma_lost_irq)(ide_drive_t *driv !! 846 int (*ide_dma_host_off)(ide_drive_t *drive);
532 void (*dma_timeout)(ide_drive_t *drive !! 847 int (*ide_dma_lostirq)(ide_drive_t *drive);
>> 848 int (*ide_dma_timeout)(ide_drive_t *drive);
533 849
534 void (*OUTB)(u8 addr, unsigned long po 850 void (*OUTB)(u8 addr, unsigned long port);
535 void (*OUTBSYNC)(ide_drive_t *drive, u 851 void (*OUTBSYNC)(ide_drive_t *drive, u8 addr, unsigned long port);
536 void (*OUTW)(u16 addr, unsigned long p 852 void (*OUTW)(u16 addr, unsigned long port);
>> 853 void (*OUTL)(u32 addr, unsigned long port);
537 void (*OUTSW)(unsigned long port, void 854 void (*OUTSW)(unsigned long port, void *addr, u32 count);
538 void (*OUTSL)(unsigned long port, void 855 void (*OUTSL)(unsigned long port, void *addr, u32 count);
539 856
540 u8 (*INB)(unsigned long port); 857 u8 (*INB)(unsigned long port);
541 u16 (*INW)(unsigned long port); 858 u16 (*INW)(unsigned long port);
>> 859 u32 (*INL)(unsigned long port);
542 void (*INSW)(unsigned long port, void 860 void (*INSW)(unsigned long port, void *addr, u32 count);
543 void (*INSL)(unsigned long port, void 861 void (*INSL)(unsigned long port, void *addr, u32 count);
544 862
545 /* dma physical region descriptor tabl 863 /* dma physical region descriptor table (cpu view) */
546 unsigned int *dmatable_cpu; 864 unsigned int *dmatable_cpu;
547 /* dma physical region descriptor tabl 865 /* dma physical region descriptor table (dma view) */
548 dma_addr_t dmatable_dma; 866 dma_addr_t dmatable_dma;
549 /* Scatter-gather list used to build t 867 /* Scatter-gather list used to build the above */
550 struct scatterlist *sg_table; 868 struct scatterlist *sg_table;
551 int sg_max_nents; /* Max 869 int sg_max_nents; /* Maximum number of entries in it */
552 int sg_nents; /* Cur 870 int sg_nents; /* Current number of entries in it */
553 int sg_dma_direction; /* dma 871 int sg_dma_direction; /* dma transfer direction */
554 872
555 /* data phase of the active command (c 873 /* data phase of the active command (currently only valid for PIO/DMA) */
556 int data_phase; 874 int data_phase;
557 875
558 unsigned int nsect; 876 unsigned int nsect;
559 unsigned int nleft; 877 unsigned int nleft;
560 struct scatterlist *cursg; !! 878 unsigned int cursg;
561 unsigned int cursg_ofs; 879 unsigned int cursg_ofs;
562 880
>> 881 int mmio; /* hosts iomio (0) or custom (2) select */
563 int rqsize; /* max 882 int rqsize; /* max sectors per request */
564 int irq; /* our 883 int irq; /* our irq number */
565 884
>> 885 unsigned long dma_master; /* reference base addr dmabase */
566 unsigned long dma_base; /* bas 886 unsigned long dma_base; /* base addr for dma ports */
567 unsigned long dma_command; /* dma 887 unsigned long dma_command; /* dma command register */
568 unsigned long dma_vendor1; /* dma 888 unsigned long dma_vendor1; /* dma vendor 1 register */
569 unsigned long dma_status; /* dma 889 unsigned long dma_status; /* dma status register */
570 unsigned long dma_vendor3; /* dma 890 unsigned long dma_vendor3; /* dma vendor 3 register */
571 unsigned long dma_prdtable; /* act 891 unsigned long dma_prdtable; /* actual prd table address */
>> 892 unsigned long dma_base2; /* extended base addr for dma ports */
572 893
>> 894 unsigned dma_extra; /* extra addr for dma ports */
573 unsigned long config_data; /* for 895 unsigned long config_data; /* for use by chipset-specific code */
574 unsigned long select_data; /* for 896 unsigned long select_data; /* for use by chipset-specific code */
575 897
576 unsigned long extra_base; /* ext <<
577 unsigned extra_ports; /* num <<
578 <<
579 unsigned noprobe : 1; /* don 898 unsigned noprobe : 1; /* don't probe for this interface */
580 unsigned present : 1; /* thi 899 unsigned present : 1; /* this interface exists */
581 unsigned hold : 1; /* thi 900 unsigned hold : 1; /* this interface is always present */
582 unsigned serialized : 1; /* ser 901 unsigned serialized : 1; /* serialized all channel operation */
583 unsigned sharing_irq: 1; /* 1 = 902 unsigned sharing_irq: 1; /* 1 = sharing irq with another hwif */
584 unsigned reset : 1; /* res 903 unsigned reset : 1; /* reset after probe */
>> 904 unsigned autodma : 1; /* auto-attempt using DMA at boot */
>> 905 unsigned udma_four : 1; /* 1=ATA-66 capable, 0=default */
>> 906 unsigned no_lba48 : 1; /* 1 = cannot do LBA48 */
>> 907 unsigned no_lba48_dma : 1; /* 1 = cannot do LBA48 DMA */
>> 908 unsigned no_dsc : 1; /* 0 default, 1 dsc_overlap disabled */
>> 909 unsigned auto_poll : 1; /* supports nop auto-poll */
585 unsigned sg_mapped : 1; /* sg_ 910 unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */
586 unsigned mmio : 1; /* hos <<
587 unsigned straight8 : 1; /* Ala <<
588 911
589 struct device gendev; 912 struct device gendev;
590 struct completion gendev_rel_comp; /* !! 913 struct semaphore gendev_rel_sem; /* To deal with device release() */
591 914
592 void *hwif_data; /* ext 915 void *hwif_data; /* extra hwif data */
593 916
594 unsigned dma; 917 unsigned dma;
595 918
596 #ifdef CONFIG_BLK_DEV_IDEACPI !! 919 void (*led_act)(void *data, int rw);
597 struct ide_acpi_hwif_link *acpidata; !! 920 } ide_hwif_t;
598 #endif <<
599 } ____cacheline_internodealigned_in_smp ide_hw <<
600 921
601 /* 922 /*
602 * internal ide interrupt handler type 923 * internal ide interrupt handler type
603 */ 924 */
>> 925 typedef ide_startstop_t (ide_pre_handler_t)(ide_drive_t *, struct request *);
604 typedef ide_startstop_t (ide_handler_t)(ide_dr 926 typedef ide_startstop_t (ide_handler_t)(ide_drive_t *);
605 typedef int (ide_expiry_t)(ide_drive_t *); 927 typedef int (ide_expiry_t)(ide_drive_t *);
606 928
607 /* used by ide-cd, ide-floppy, etc. */ <<
608 typedef void (xfer_func_t)(ide_drive_t *, void <<
609 <<
610 typedef struct hwgroup_s { 929 typedef struct hwgroup_s {
611 /* irq handler, if active */ 930 /* irq handler, if active */
612 ide_startstop_t (*handler)(ide_drive_t 931 ide_startstop_t (*handler)(ide_drive_t *);
613 !! 932 /* irq handler, suspended if active */
>> 933 ide_startstop_t (*handler_save)(ide_drive_t *);
614 /* BOOL: protects all fields b 934 /* BOOL: protects all fields below */
615 volatile int busy; 935 volatile int busy;
616 /* BOOL: wake us up on timer e 936 /* BOOL: wake us up on timer expiry */
617 unsigned int sleeping : 1; 937 unsigned int sleeping : 1;
618 /* BOOL: polling active & poll 938 /* BOOL: polling active & poll_timeout field valid */
619 unsigned int polling : 1; 939 unsigned int polling : 1;
620 /* BOOL: in a polling reset si <<
621 unsigned int resetting : 1; <<
622 <<
623 /* current drive */ 940 /* current drive */
624 ide_drive_t *drive; 941 ide_drive_t *drive;
625 /* ptr to current hwif in link 942 /* ptr to current hwif in linked-list */
626 ide_hwif_t *hwif; 943 ide_hwif_t *hwif;
627 944
>> 945 /* for pci chipsets */
>> 946 struct pci_dev *pci_dev;
>> 947 /* chipset device struct */
>> 948 struct ide_pci_device_s *cds;
>> 949
628 /* current request */ 950 /* current request */
629 struct request *rq; 951 struct request *rq;
630 <<
631 /* failsafe timer */ 952 /* failsafe timer */
632 struct timer_list timer; 953 struct timer_list timer;
>> 954 /* local copy of current write rq */
>> 955 struct request wrq;
633 /* timeout value during long p 956 /* timeout value during long polls */
634 unsigned long poll_timeout; 957 unsigned long poll_timeout;
635 /* queried upon timeouts */ 958 /* queried upon timeouts */
636 int (*expiry)(ide_drive_t *); 959 int (*expiry)(ide_drive_t *);
>> 960 /* ide_system_bus_speed */
>> 961 int pio_clock;
637 962
638 int req_gen; !! 963 unsigned char cmd_buf[4];
639 int req_gen_timer; <<
640 } ide_hwgroup_t; 964 } ide_hwgroup_t;
641 965
642 typedef struct ide_driver_s ide_driver_t; !! 966 /* structure attached to the request for IDE_TASK_CMDS */
643 <<
644 extern struct mutex ide_setting_mtx; <<
645 <<
646 int set_io_32bit(ide_drive_t *, int); <<
647 int set_pio_mode(ide_drive_t *, int); <<
648 int set_using_dma(ide_drive_t *, int); <<
649 967
650 #ifdef CONFIG_IDE_PROC_FS <<
651 /* 968 /*
652 * configurable drive settings 969 * configurable drive settings
653 */ 970 */
654 971
655 #define TYPE_INT 0 972 #define TYPE_INT 0
656 #define TYPE_BYTE 1 !! 973 #define TYPE_INTA 1
657 #define TYPE_SHORT 2 !! 974 #define TYPE_BYTE 2
>> 975 #define TYPE_SHORT 3
658 976
659 #define SETTING_READ (1 << 0) 977 #define SETTING_READ (1 << 0)
660 #define SETTING_WRITE (1 << 1) 978 #define SETTING_WRITE (1 << 1)
661 #define SETTING_RW (SETTING_READ | SETTIN 979 #define SETTING_RW (SETTING_READ | SETTING_WRITE)
662 980
663 typedef int (ide_procset_t)(ide_drive_t *, int 981 typedef int (ide_procset_t)(ide_drive_t *, int);
664 typedef struct ide_settings_s { 982 typedef struct ide_settings_s {
665 char *name; 983 char *name;
666 int rw; 984 int rw;
>> 985 int read_ioctl;
>> 986 int write_ioctl;
667 int data_type; 987 int data_type;
668 int min; 988 int min;
669 int max; 989 int max;
670 int mul_factor; 990 int mul_factor;
671 int div_factor; 991 int div_factor;
672 void *data; 992 void *data;
673 ide_procset_t *set; 993 ide_procset_t *set;
674 int auto_remove; 994 int auto_remove;
675 struct ide_settings_s *next; 995 struct ide_settings_s *next;
676 } ide_settings_t; 996 } ide_settings_t;
677 997
678 int ide_add_setting(ide_drive_t *, const char !! 998 extern struct semaphore ide_setting_sem;
>> 999 extern int ide_add_setting(ide_drive_t *drive, const char *name, int rw, int read_ioctl, int write_ioctl, int data_type, int min, int max, int mul_factor, int div_factor, void *data, ide_procset_t *set);
>> 1000 extern ide_settings_t *ide_find_setting_by_name(ide_drive_t *drive, char *name);
>> 1001 extern int ide_read_setting(ide_drive_t *t, ide_settings_t *setting);
>> 1002 extern int ide_write_setting(ide_drive_t *drive, ide_settings_t *setting, int val);
>> 1003 extern void ide_add_generic_settings(ide_drive_t *drive);
679 1004
680 /* 1005 /*
681 * /proc/ide interface 1006 * /proc/ide interface
682 */ 1007 */
683 typedef struct { 1008 typedef struct {
684 const char *name; 1009 const char *name;
685 mode_t mode; 1010 mode_t mode;
686 read_proc_t *read_proc; 1011 read_proc_t *read_proc;
687 write_proc_t *write_proc; 1012 write_proc_t *write_proc;
688 } ide_proc_entry_t; 1013 } ide_proc_entry_t;
689 1014
690 void proc_ide_create(void); !! 1015 #ifdef CONFIG_PROC_FS
691 void proc_ide_destroy(void); !! 1016 extern struct proc_dir_entry *proc_ide_root;
692 void ide_proc_register_port(ide_hwif_t *); <<
693 void ide_proc_port_register_devices(ide_hwif_t <<
694 void ide_proc_unregister_port(ide_hwif_t *); <<
695 void ide_proc_register_driver(ide_drive_t *, i <<
696 void ide_proc_unregister_driver(ide_drive_t *, <<
697 <<
698 void ide_add_generic_settings(ide_drive_t *); <<
699 1017
>> 1018 extern void proc_ide_create(void);
>> 1019 extern void proc_ide_destroy(void);
>> 1020 extern void create_proc_ide_interfaces(void);
>> 1021 void destroy_proc_ide_interface(ide_hwif_t *);
>> 1022 extern void ide_add_proc_entries(struct proc_dir_entry *, ide_proc_entry_t *, void *);
>> 1023 extern void ide_remove_proc_entries(struct proc_dir_entry *, ide_proc_entry_t *);
700 read_proc_t proc_ide_read_capacity; 1024 read_proc_t proc_ide_read_capacity;
701 read_proc_t proc_ide_read_geometry; 1025 read_proc_t proc_ide_read_geometry;
702 1026
703 #ifdef CONFIG_BLK_DEV_IDEPCI 1027 #ifdef CONFIG_BLK_DEV_IDEPCI
704 void ide_pci_create_host_proc(const char *, ge 1028 void ide_pci_create_host_proc(const char *, get_info_t *);
705 #endif 1029 #endif
706 1030
707 /* 1031 /*
708 * Standard exit stuff: 1032 * Standard exit stuff:
709 */ 1033 */
710 #define PROC_IDE_READ_RETURN(page,start,off,co 1034 #define PROC_IDE_READ_RETURN(page,start,off,count,eof,len) \
711 { \ 1035 { \
712 len -= off; \ 1036 len -= off; \
713 if (len < count) { \ 1037 if (len < count) { \
714 *eof = 1; \ 1038 *eof = 1; \
715 if (len <= 0) \ 1039 if (len <= 0) \
716 return 0; \ 1040 return 0; \
717 } else \ 1041 } else \
718 len = count; \ 1042 len = count; \
719 *start = page + off; \ 1043 *start = page + off; \
720 return len; \ 1044 return len; \
721 } 1045 }
722 #else 1046 #else
723 static inline void proc_ide_create(void) { ; } !! 1047 static inline void create_proc_ide_interfaces(void) { ; }
724 static inline void proc_ide_destroy(void) { ; !! 1048 static inline void destroy_proc_ide_interface(ide_hwif_t *hwif) { ; }
725 static inline void ide_proc_register_port(ide_ <<
726 static inline void ide_proc_port_register_devi <<
727 static inline void ide_proc_unregister_port(id <<
728 static inline void ide_proc_register_driver(id <<
729 static inline void ide_proc_unregister_driver( <<
730 static inline void ide_add_generic_settings(id <<
731 #define PROC_IDE_READ_RETURN(page,start,off,co 1049 #define PROC_IDE_READ_RETURN(page,start,off,count,eof,len) return 0;
732 #endif 1050 #endif
733 1051
734 /* 1052 /*
735 * Power Management step value (rq->pm->pm_ste 1053 * Power Management step value (rq->pm->pm_step).
736 * 1054 *
737 * The step value starts at 0 (ide_pm_state_st 1055 * The step value starts at 0 (ide_pm_state_start_suspend) for a
738 * suspend operation or 1000 (ide_pm_state_sta 1056 * suspend operation or 1000 (ide_pm_state_start_resume) for a
739 * resume operation. 1057 * resume operation.
740 * 1058 *
741 * For each step, the core calls the subdriver 1059 * For each step, the core calls the subdriver start_power_step() first.
742 * This can return: 1060 * This can return:
743 * - ide_stopped : In this case, the core 1061 * - ide_stopped : In this case, the core calls us back again unless
744 * step have been set to 1062 * step have been set to ide_power_state_completed.
745 * - ide_started : In this case, the chan 1063 * - ide_started : In this case, the channel is left busy until an
746 * async event (interrupt 1064 * async event (interrupt) occurs.
747 * Typically, start_power_step() will issue a 1065 * Typically, start_power_step() will issue a taskfile request with
748 * do_rw_taskfile(). 1066 * do_rw_taskfile().
749 * 1067 *
750 * Upon reception of the interrupt, the core w 1068 * Upon reception of the interrupt, the core will call complete_power_step()
751 * with the error code if any. This routine sh 1069 * with the error code if any. This routine should update the step value
752 * and return. It should not start a new reque 1070 * and return. It should not start a new request. The core will call
753 * start_power_step for the new step value, un 1071 * start_power_step for the new step value, unless step have been set to
754 * ide_power_state_completed. 1072 * ide_power_state_completed.
755 * 1073 *
756 * Subdrivers are expected to define their own 1074 * Subdrivers are expected to define their own additional power
757 * steps from 1..999 for suspend and from 1001 1075 * steps from 1..999 for suspend and from 1001..1999 for resume,
758 * other values are reserved for future use. 1076 * other values are reserved for future use.
759 */ 1077 */
760 1078
761 enum { 1079 enum {
762 ide_pm_state_completed = -1, 1080 ide_pm_state_completed = -1,
763 ide_pm_state_start_suspend = 0, 1081 ide_pm_state_start_suspend = 0,
764 ide_pm_state_start_resume = 1000 1082 ide_pm_state_start_resume = 1000,
765 }; 1083 };
766 1084
767 /* 1085 /*
768 * Subdrivers support. 1086 * Subdrivers support.
769 * <<
770 * The gendriver.owner field should be set to <<
771 * The gendriver.name field should be set to t <<
772 */ 1087 */
773 struct ide_driver_s { !! 1088 typedef struct ide_driver_s {
>> 1089 struct module *owner;
>> 1090 const char *name;
774 const char *versi 1091 const char *version;
775 u8 media; 1092 u8 media;
>> 1093 unsigned busy : 1;
776 unsigned supports_dsc_overlap : 1; 1094 unsigned supports_dsc_overlap : 1;
>> 1095 int (*cleanup)(ide_drive_t *);
777 ide_startstop_t (*do_request)(ide_driv 1096 ide_startstop_t (*do_request)(ide_drive_t *, struct request *, sector_t);
778 int (*end_request)(ide_dri 1097 int (*end_request)(ide_drive_t *, int, int);
779 ide_startstop_t (*error)(ide_drive_t * 1098 ide_startstop_t (*error)(ide_drive_t *, struct request *rq, u8, u8);
780 ide_startstop_t (*abort)(ide_drive_t * 1099 ide_startstop_t (*abort)(ide_drive_t *, struct request *rq);
781 struct device_driver gen_driver; !! 1100 int (*ioctl)(ide_drive_t *, struct inode *, struct file *, unsigned int, unsigned long);
782 int (*probe)(ide_drive_t * !! 1101 void (*pre_reset)(ide_drive_t *);
783 void (*remove)(ide_drive_t !! 1102 sector_t (*capacity)(ide_drive_t *);
784 void (*resume)(ide_drive_t !! 1103 ide_startstop_t (*special)(ide_drive_t *);
785 void (*shutdown)(ide_drive_ <<
786 #ifdef CONFIG_IDE_PROC_FS <<
787 ide_proc_entry_t *proc; 1104 ide_proc_entry_t *proc;
788 #endif !! 1105 int (*attach)(ide_drive_t *);
789 }; !! 1106 void (*ata_prebuilder)(ide_drive_t *);
>> 1107 void (*atapi_prebuilder)(ide_drive_t *);
>> 1108 ide_startstop_t (*start_power_step)(ide_drive_t *, struct request *);
>> 1109 void (*complete_power_step)(ide_drive_t *, struct request *, u8, u8);
>> 1110 struct device_driver gen_driver;
>> 1111 struct list_head drives;
>> 1112 struct list_head drivers;
>> 1113 } ide_driver_t;
790 1114
791 #define to_ide_driver(drv) container_of(drv, i !! 1115 #define DRIVER(drive) ((drive)->driver)
792 1116
793 int generic_ide_ioctl(ide_drive_t *, struct fi !! 1117 extern int generic_ide_ioctl(struct file *, struct block_device *, unsigned, unsigned long);
794 1118
795 /* 1119 /*
796 * ide_hwifs[] is the master data structure us 1120 * ide_hwifs[] is the master data structure used to keep track
797 * of just about everything in ide.c. Wheneve 1121 * of just about everything in ide.c. Whenever possible, routines
798 * should be using pointers to a drive (ide_dr 1122 * should be using pointers to a drive (ide_drive_t *) or
799 * pointers to a hwif (ide_hwif_t *), rather t 1123 * pointers to a hwif (ide_hwif_t *), rather than indexing this
800 * structure directly (the allocation/layout m 1124 * structure directly (the allocation/layout may change!).
801 * 1125 *
802 */ 1126 */
803 #ifndef _IDE_C 1127 #ifndef _IDE_C
804 extern ide_hwif_t ide_hwifs[]; 1128 extern ide_hwif_t ide_hwifs[]; /* master data repository */
805 #endif 1129 #endif
806 extern int noautodma; 1130 extern int noautodma;
807 1131
808 extern int ide_end_request (ide_drive_t *drive 1132 extern int ide_end_request (ide_drive_t *drive, int uptodate, int nrsecs);
809 int ide_end_dequeued_request(ide_drive_t *driv <<
810 int uptodate, int <<
811 1133
>> 1134 /*
>> 1135 * This is used on exit from the driver to designate the next irq handler
>> 1136 * and also to start the safety timer.
>> 1137 */
812 extern void ide_set_handler (ide_drive_t *driv 1138 extern void ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry);
813 1139
814 void ide_execute_command(ide_drive_t *, u8, id !! 1140 /*
815 ide_expiry_t *); !! 1141 * This is used on exit from the driver to designate the next irq handler
>> 1142 * and start the safety time safely and atomically from the IRQ handler
>> 1143 * with respect to the command issue (which it also does)
>> 1144 */
>> 1145 extern void ide_execute_command(ide_drive_t *, task_ioreg_t cmd, ide_handler_t *, unsigned int, ide_expiry_t *);
816 1146
817 ide_startstop_t __ide_error(ide_drive_t *, str 1147 ide_startstop_t __ide_error(ide_drive_t *, struct request *, u8, u8);
818 1148
>> 1149 /*
>> 1150 * ide_error() takes action based on the error returned by the controller.
>> 1151 * The caller should return immediately after invoking this.
>> 1152 *
>> 1153 * (drive, msg, status)
>> 1154 */
819 ide_startstop_t ide_error (ide_drive_t *drive, 1155 ide_startstop_t ide_error (ide_drive_t *drive, const char *msg, byte stat);
820 1156
821 ide_startstop_t __ide_abort(ide_drive_t *, str 1157 ide_startstop_t __ide_abort(ide_drive_t *, struct request *);
822 1158
>> 1159 /*
>> 1160 * Abort a running command on the controller triggering the abort
>> 1161 * from a host side, non error situation
>> 1162 * (drive, msg)
>> 1163 */
823 extern ide_startstop_t ide_abort(ide_drive_t * 1164 extern ide_startstop_t ide_abort(ide_drive_t *, const char *);
824 1165
825 extern void ide_fix_driveid(struct hd_driveid 1166 extern void ide_fix_driveid(struct hd_driveid *);
826 !! 1167 /*
>> 1168 * ide_fixstring() cleans up and (optionally) byte-swaps a text string,
>> 1169 * removing leading/trailing blanks and compressing internal blanks.
>> 1170 * It is primarily used to tidy up the model name/number fields as
>> 1171 * returned by the WIN_[P]IDENTIFY commands.
>> 1172 *
>> 1173 * (s, bytecount, byteswap)
>> 1174 */
827 extern void ide_fixstring(u8 *, const int, con 1175 extern void ide_fixstring(u8 *, const int, const int);
828 1176
829 int ide_wait_stat(ide_startstop_t *, ide_drive !! 1177 /*
>> 1178 * This routine busy-waits for the drive status to be not "busy".
>> 1179 * It then checks the status for all of the "good" bits and none
>> 1180 * of the "bad" bits, and if all is okay it returns 0. All other
>> 1181 * cases return 1 after doing "*startstop = ide_error()", and the
>> 1182 * caller should return the updated value of "startstop" in this case.
>> 1183 * "startstop" is unchanged when the function returns 0;
>> 1184 * (startstop, drive, good, bad, timeout)
>> 1185 */
>> 1186 extern int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long);
830 1187
>> 1188 /*
>> 1189 * Start a reset operation for an IDE interface.
>> 1190 * The caller should return immediately after invoking this.
>> 1191 */
831 extern ide_startstop_t ide_do_reset (ide_drive 1192 extern ide_startstop_t ide_do_reset (ide_drive_t *);
832 1193
>> 1194 /*
>> 1195 * This function is intended to be used prior to invoking ide_do_drive_cmd().
>> 1196 */
833 extern void ide_init_drive_cmd (struct request 1197 extern void ide_init_drive_cmd (struct request *rq);
834 1198
835 /* 1199 /*
>> 1200 * this function returns error location sector offset in case of a write error
>> 1201 */
>> 1202 extern u64 ide_get_error_location(ide_drive_t *, char *);
>> 1203
>> 1204 /*
836 * "action" parameter type for ide_do_drive_cm 1205 * "action" parameter type for ide_do_drive_cmd() below.
837 */ 1206 */
838 typedef enum { 1207 typedef enum {
839 ide_wait, /* insert rq at end of 1208 ide_wait, /* insert rq at end of list, and wait for it */
>> 1209 ide_next, /* insert rq immediately after current request */
840 ide_preempt, /* insert rq in front 1210 ide_preempt, /* insert rq in front of current request */
841 ide_head_wait, /* insert rq in front 1211 ide_head_wait, /* insert rq in front of current request and wait for it */
842 ide_end /* insert rq at end of 1212 ide_end /* insert rq at end of list, but don't wait for it */
843 } ide_action_t; 1213 } ide_action_t;
844 1214
>> 1215 /*
>> 1216 * This function issues a special IDE device request
>> 1217 * onto the request queue.
>> 1218 *
>> 1219 * If action is ide_wait, then the rq is queued at the end of the
>> 1220 * request queue, and the function sleeps until it has been processed.
>> 1221 * This is for use when invoked from an ioctl handler.
>> 1222 *
>> 1223 * If action is ide_preempt, then the rq is queued at the head of
>> 1224 * the request queue, displacing the currently-being-processed
>> 1225 * request and this function returns immediately without waiting
>> 1226 * for the new rq to be completed. This is VERY DANGEROUS, and is
>> 1227 * intended for careful use by the ATAPI tape/cdrom driver code.
>> 1228 *
>> 1229 * If action is ide_next, then the rq is queued immediately after
>> 1230 * the currently-being-processed-request (if any), and the function
>> 1231 * returns without waiting for the new rq to be completed. As above,
>> 1232 * This is VERY DANGEROUS, and is intended for careful use by the
>> 1233 * ATAPI tape/cdrom driver code.
>> 1234 *
>> 1235 * If action is ide_end, then the rq is queued at the end of the
>> 1236 * request queue, and the function returns immediately without waiting
>> 1237 * for the new rq to be completed. This is again intended for careful
>> 1238 * use by the ATAPI tape/cdrom driver code.
>> 1239 */
845 extern int ide_do_drive_cmd(ide_drive_t *, str 1240 extern int ide_do_drive_cmd(ide_drive_t *, struct request *, ide_action_t);
846 1241
>> 1242 /*
>> 1243 * Clean up after success/failure of an explicit drive cmd.
>> 1244 * stat/err are used only when (HWGROUP(drive)->rq->cmd == IDE_DRIVE_CMD).
>> 1245 * stat/err are used only when (HWGROUP(drive)->rq->cmd == IDE_DRIVE_TASK_MASK).
>> 1246 *
>> 1247 * (ide_drive_t *drive, u8 stat, u8 err)
>> 1248 */
847 extern void ide_end_drive_cmd(ide_drive_t *, u 1249 extern void ide_end_drive_cmd(ide_drive_t *, u8, u8);
848 1250
849 enum { !! 1251 /*
850 IDE_TFLAG_LBA48 = (1 < !! 1252 * Issue ATA command and wait for completion.
851 IDE_TFLAG_NO_SELECT_MASK = (1 < !! 1253 * Use for implementing commands in kernel
852 IDE_TFLAG_FLAGGED = (1 < !! 1254 *
853 IDE_TFLAG_OUT_DATA = (1 < !! 1255 * (ide_drive_t *drive, u8 cmd, u8 nsect, u8 feature, u8 sectors, u8 *buf)
854 IDE_TFLAG_OUT_HOB_FEATURE = (1 < !! 1256 */
855 IDE_TFLAG_OUT_HOB_NSECT = (1 < !! 1257 extern int ide_wait_cmd(ide_drive_t *, u8, u8, u8, u8, u8 *);
856 IDE_TFLAG_OUT_HOB_LBAL = (1 < <<
857 IDE_TFLAG_OUT_HOB_LBAM = (1 < <<
858 IDE_TFLAG_OUT_HOB_LBAH = (1 < <<
859 IDE_TFLAG_OUT_HOB = IDE_ <<
860 IDE_ <<
861 IDE_ <<
862 IDE_ <<
863 IDE_ <<
864 IDE_TFLAG_OUT_FEATURE = (1 < <<
865 IDE_TFLAG_OUT_NSECT = (1 < <<
866 IDE_TFLAG_OUT_LBAL = (1 < <<
867 IDE_TFLAG_OUT_LBAM = (1 < <<
868 IDE_TFLAG_OUT_LBAH = (1 < <<
869 IDE_TFLAG_OUT_TF = IDE_ <<
870 IDE_ <<
871 IDE_ <<
872 IDE_ <<
873 IDE_ <<
874 IDE_TFLAG_OUT_DEVICE = (1 < <<
875 IDE_TFLAG_WRITE = (1 < <<
876 IDE_TFLAG_FLAGGED_SET_IN_FLAGS = (1 < <<
877 IDE_TFLAG_IN_DATA = (1 < <<
878 IDE_TFLAG_CUSTOM_HANDLER = (1 < <<
879 IDE_TFLAG_DMA_PIO_FALLBACK = (1 < <<
880 IDE_TFLAG_IN_HOB_FEATURE = (1 < <<
881 IDE_TFLAG_IN_HOB_NSECT = (1 < <<
882 IDE_TFLAG_IN_HOB_LBAL = (1 < <<
883 IDE_TFLAG_IN_HOB_LBAM = (1 < <<
884 IDE_TFLAG_IN_HOB_LBAH = (1 < <<
885 IDE_TFLAG_IN_HOB_LBA = IDE_ <<
886 IDE_ <<
887 IDE_ <<
888 IDE_TFLAG_IN_HOB = IDE_ <<
889 IDE_ <<
890 IDE_ <<
891 IDE_TFLAG_IN_NSECT = (1 < <<
892 IDE_TFLAG_IN_LBAL = (1 < <<
893 IDE_TFLAG_IN_LBAM = (1 < <<
894 IDE_TFLAG_IN_LBAH = (1 < <<
895 IDE_TFLAG_IN_LBA = IDE_ <<
896 IDE_ <<
897 IDE_ <<
898 IDE_TFLAG_IN_TF = IDE_ <<
899 IDE_ <<
900 IDE_TFLAG_IN_DEVICE = (1 < <<
901 IDE_TFLAG_HOB = IDE_ <<
902 IDE_ <<
903 IDE_TFLAG_TF = IDE_ <<
904 IDE_ <<
905 IDE_TFLAG_DEVICE = IDE_ <<
906 IDE_ <<
907 /* force 16-bit I/O operations */ <<
908 IDE_TFLAG_IO_16BIT = (1 < <<
909 /* ide_task_t was allocated using kmal <<
910 IDE_TFLAG_DYN = (1 < <<
911 }; <<
912 <<
913 struct ide_taskfile { <<
914 u8 hob_data; /* 0: high da <<
915 <<
916 u8 hob_feature; /* 1-5: addit <<
917 u8 hob_nsect; <<
918 u8 hob_lbal; <<
919 u8 hob_lbam; <<
920 u8 hob_lbah; <<
921 <<
922 u8 data; /* 6: low dat <<
923 <<
924 union { /* Â 7: */ <<
925 u8 error; /* read: er <<
926 u8 feature; /* write: fea <<
927 }; <<
928 <<
929 u8 nsect; /* 8: number <<
930 u8 lbal; /* 9: LBA low <<
931 u8 lbam; /* 10: LBA mid <<
932 u8 lbah; /* 11: LBA hig <<
933 <<
934 u8 device; /* 12: device <<
935 <<
936 union { /* 13: */ <<
937 u8 status; /* Â read: sta <<
938 u8 command; /* write: comm <<
939 }; <<
940 }; <<
941 1258
942 typedef struct ide_task_s { 1259 typedef struct ide_task_s {
943 union { !! 1260 /*
944 struct ide_taskfile tf; !! 1261 * struct hd_drive_task_hdr tf;
945 u8 tf_arr !! 1262 * task_struct_t tf;
946 }; !! 1263 * struct hd_drive_hob_hdr hobf;
947 u32 tf_flags; !! 1264 * hob_struct_t hobf;
>> 1265 */
>> 1266 task_ioreg_t tfRegister[8];
>> 1267 task_ioreg_t hobRegister[8];
>> 1268 ide_reg_valid_t tf_out_flags;
>> 1269 ide_reg_valid_t tf_in_flags;
948 int data_phase; 1270 int data_phase;
>> 1271 int command_type;
>> 1272 ide_pre_handler_t *prehandler;
>> 1273 ide_handler_t *handler;
949 struct request *rq; 1274 struct request *rq; /* copy of request */
950 void *special; 1275 void *special; /* valid_t generally */
951 } ide_task_t; 1276 } ide_task_t;
952 1277
953 void ide_tf_load(ide_drive_t *, ide_task_t *); !! 1278 extern u32 ide_read_24(ide_drive_t *);
954 void ide_tf_read(ide_drive_t *, ide_task_t *); <<
955 1279
956 extern void SELECT_DRIVE(ide_drive_t *); 1280 extern void SELECT_DRIVE(ide_drive_t *);
>> 1281 extern void SELECT_INTERRUPT(ide_drive_t *);
957 extern void SELECT_MASK(ide_drive_t *, int); 1282 extern void SELECT_MASK(ide_drive_t *, int);
>> 1283 extern void QUIRK_LIST(ide_drive_t *);
958 1284
959 extern int drive_is_ready(ide_drive_t *); 1285 extern int drive_is_ready(ide_drive_t *);
>> 1286 extern int wait_for_ready(ide_drive_t *, int /* timeout */);
960 1287
961 void ide_pktcmd_tf_load(ide_drive_t *, u32, u1 !! 1288 /*
>> 1289 * taskfile io for disks for now...and builds request from ide_ioctl
>> 1290 */
>> 1291 extern ide_startstop_t do_rw_taskfile(ide_drive_t *, ide_task_t *);
962 1292
963 ide_startstop_t do_rw_taskfile(ide_drive_t *, !! 1293 /*
>> 1294 * Special Flagged Register Validation Caller
>> 1295 */
>> 1296 extern ide_startstop_t flagged_taskfile(ide_drive_t *, ide_task_t *);
964 1297
965 void task_end_request(ide_drive_t *, struct re !! 1298 extern ide_startstop_t set_multmode_intr(ide_drive_t *);
>> 1299 extern ide_startstop_t set_geometry_intr(ide_drive_t *);
>> 1300 extern ide_startstop_t recal_intr(ide_drive_t *);
>> 1301 extern ide_startstop_t task_no_data_intr(ide_drive_t *);
>> 1302 extern ide_startstop_t task_in_intr(ide_drive_t *);
>> 1303 extern ide_startstop_t pre_task_out_intr(ide_drive_t *, struct request *);
966 1304
967 int ide_raw_taskfile(ide_drive_t *, ide_task_t !! 1305 extern int ide_raw_taskfile(ide_drive_t *, ide_task_t *, u8 *);
968 int ide_no_data_taskfile(ide_drive_t *, ide_ta <<
969 1306
970 int ide_taskfile_ioctl(ide_drive_t *, unsigned 1307 int ide_taskfile_ioctl(ide_drive_t *, unsigned int, unsigned long);
971 int ide_cmd_ioctl(ide_drive_t *, unsigned int, 1308 int ide_cmd_ioctl(ide_drive_t *, unsigned int, unsigned long);
972 int ide_task_ioctl(ide_drive_t *, unsigned int 1309 int ide_task_ioctl(ide_drive_t *, unsigned int, unsigned long);
973 1310
974 extern int system_bus_clock(void); 1311 extern int system_bus_clock(void);
975 1312
976 extern int ide_driveid_update(ide_drive_t *); 1313 extern int ide_driveid_update(ide_drive_t *);
>> 1314 extern int ide_ata66_check(ide_drive_t *, ide_task_t *);
977 extern int ide_config_drive_speed(ide_drive_t 1315 extern int ide_config_drive_speed(ide_drive_t *, u8);
978 extern u8 eighty_ninty_three (ide_drive_t *); 1316 extern u8 eighty_ninty_three (ide_drive_t *);
>> 1317 extern int set_transfer(ide_drive_t *, ide_task_t *);
979 extern int taskfile_lib_get_identify(ide_drive 1318 extern int taskfile_lib_get_identify(ide_drive_t *drive, u8 *);
980 1319
981 extern int ide_wait_not_busy(ide_hwif_t *hwif, 1320 extern int ide_wait_not_busy(ide_hwif_t *hwif, unsigned long timeout);
982 1321
>> 1322 /*
>> 1323 * ide_stall_queue() can be used by a drive to give excess bandwidth back
>> 1324 * to the hwgroup by sleeping for timeout jiffies.
>> 1325 */
983 extern void ide_stall_queue(ide_drive_t *drive 1326 extern void ide_stall_queue(ide_drive_t *drive, unsigned long timeout);
984 1327
985 extern int ide_spin_wait_hwgroup(ide_drive_t * 1328 extern int ide_spin_wait_hwgroup(ide_drive_t *);
986 extern void ide_timer_expiry(unsigned long); 1329 extern void ide_timer_expiry(unsigned long);
987 extern irqreturn_t ide_intr(int irq, void *dev !! 1330 extern irqreturn_t ide_intr(int irq, void *dev_id, struct pt_regs *regs);
988 extern void do_ide_request(struct request_queu !! 1331 extern void do_ide_request(request_queue_t *);
>> 1332 extern void ide_init_subdrivers(void);
989 1333
990 void ide_init_disk(struct gendisk *, ide_drive !! 1334 extern struct block_device_operations ide_fops[];
991 1335
992 #ifdef CONFIG_IDEPCI_PCIBUS_ORDER !! 1336 extern int ata_attach(ide_drive_t *);
993 extern int ide_scan_direction; <<
994 extern int __ide_pci_register_driver(struct pc <<
995 #define ide_pci_register_driver(d) __ide_pci_r <<
996 #else <<
997 #define ide_pci_register_driver(d) pci_registe <<
998 #endif <<
999 1337
1000 void ide_pci_setup_ports(struct pci_dev *, co !! 1338 extern int ideprobe_init(void);
1001 void ide_setup_pci_noise(struct pci_dev *, co <<
1002 1339
1003 #ifdef CONFIG_BLK_DEV_IDEDMA_PCI !! 1340 extern void ide_scan_pcibus(int scan_direction) __init;
1004 void ide_hwif_setup_dma(ide_hwif_t *, const s !! 1341 extern int ide_pci_register_driver(struct pci_driver *driver);
1005 #else !! 1342 extern void ide_pci_unregister_driver(struct pci_driver *driver);
1006 static inline void ide_hwif_setup_dma(ide_hwi !! 1343 void ide_pci_setup_ports(struct pci_dev *, struct ide_pci_device_s *, int, ata_index_t *);
1007 const s !! 1344 extern void ide_setup_pci_noise (struct pci_dev *dev, struct ide_pci_device_s *d);
1008 #endif <<
1009 1345
1010 extern void default_hwif_iops(ide_hwif_t *); 1346 extern void default_hwif_iops(ide_hwif_t *);
1011 extern void default_hwif_mmiops(ide_hwif_t *) 1347 extern void default_hwif_mmiops(ide_hwif_t *);
1012 extern void default_hwif_transport(ide_hwif_t 1348 extern void default_hwif_transport(ide_hwif_t *);
1013 1349
>> 1350 int ide_register_driver(ide_driver_t *driver);
>> 1351 void ide_unregister_driver(ide_driver_t *driver);
>> 1352 int ide_register_subdriver(ide_drive_t *, ide_driver_t *);
>> 1353 int ide_unregister_subdriver (ide_drive_t *drive);
>> 1354 int ide_replace_subdriver(ide_drive_t *drive, const char *driver);
>> 1355
>> 1356 #define ON_BOARD 1
>> 1357 #define NEVER_BOARD 0
>> 1358
>> 1359 #ifdef CONFIG_BLK_DEV_OFFBOARD
>> 1360 # define OFF_BOARD ON_BOARD
>> 1361 #else /* CONFIG_BLK_DEV_OFFBOARD */
>> 1362 # define OFF_BOARD NEVER_BOARD
>> 1363 #endif /* CONFIG_BLK_DEV_OFFBOARD */
>> 1364
>> 1365 #define NODMA 0
>> 1366 #define NOAUTODMA 1
>> 1367 #define AUTODMA 2
>> 1368
1014 typedef struct ide_pci_enablebit_s { 1369 typedef struct ide_pci_enablebit_s {
1015 u8 reg; /* byte pci reg holdi 1370 u8 reg; /* byte pci reg holding the enable-bit */
1016 u8 mask; /* mask to isolate th 1371 u8 mask; /* mask to isolate the enable-bit */
1017 u8 val; /* value of masked re 1372 u8 val; /* value of masked reg when "enabled" */
1018 } ide_pci_enablebit_t; 1373 } ide_pci_enablebit_t;
1019 1374
1020 enum { 1375 enum {
1021 /* Uses ISA control ports not PCI one 1376 /* Uses ISA control ports not PCI ones. */
1022 IDE_HFLAG_ISA_PORTS = (1 !! 1377 IDEPCI_FLAG_ISA_PORTS = (1 << 0),
1023 /* single port device */ !! 1378 IDEPCI_FLAG_FORCE_PDC = (1 << 1),
1024 IDE_HFLAG_SINGLE = (1 <<
1025 /* don't use legacy PIO blacklist */ <<
1026 IDE_HFLAG_PIO_NO_BLACKLIST = (1 <<
1027 /* don't use conservative PIO "downgr <<
1028 IDE_HFLAG_PIO_NO_DOWNGRADE = (1 <<
1029 /* use PIO8/9 for prefetch off/on */ <<
1030 IDE_HFLAG_ABUSE_PREFETCH = (1 <<
1031 /* use PIO6/7 for fast-devsel off/on <<
1032 IDE_HFLAG_ABUSE_FAST_DEVSEL = (1 <<
1033 /* use 100-102 and 200-202 PIO values <<
1034 IDE_HFLAG_ABUSE_DMA_MODES = (1 <<
1035 /* <<
1036 * keep DMA setting when programming <<
1037 * for hosts which have separate PIO <<
1038 */ <<
1039 IDE_HFLAG_SET_PIO_MODE_KEEP_DMA = (1 <<
1040 /* program host for the transfer mode <<
1041 IDE_HFLAG_POST_SET_MODE = (1 <<
1042 /* don't program host/device for the <<
1043 IDE_HFLAG_NO_SET_MODE = (1 <<
1044 /* trust BIOS for programming chipset <<
1045 IDE_HFLAG_TRUST_BIOS_FOR_DMA = (1 <<
1046 /* host uses VDMA (tied with IDE_HFLA <<
1047 IDE_HFLAG_VDMA = (1 <<
1048 /* ATAPI DMA is unsupported */ <<
1049 IDE_HFLAG_NO_ATAPI_DMA = (1 <<
1050 /* set if host is a "bootable" contro <<
1051 IDE_HFLAG_BOOTABLE = (1 <<
1052 /* host doesn't support DMA */ <<
1053 IDE_HFLAG_NO_DMA = (1 <<
1054 /* check if host is PCI IDE device be <<
1055 IDE_HFLAG_NO_AUTODMA = (1 <<
1056 /* don't autotune PIO */ <<
1057 IDE_HFLAG_NO_AUTOTUNE = (1 <<
1058 /* host is CS5510/CS5520 */ <<
1059 IDE_HFLAG_CS5520 = IDE <<
1060 /* no LBA48 */ <<
1061 IDE_HFLAG_NO_LBA48 = (1 <<
1062 /* no LBA48 DMA */ <<
1063 IDE_HFLAG_NO_LBA48_DMA = (1 <<
1064 /* data FIFO is cleared by an error * <<
1065 IDE_HFLAG_ERROR_STOPS_FIFO = (1 <<
1066 /* serialize ports */ <<
1067 IDE_HFLAG_SERIALIZE = (1 <<
1068 /* use legacy IRQs */ <<
1069 IDE_HFLAG_LEGACY_IRQS = (1 <<
1070 /* force use of legacy IRQs */ <<
1071 IDE_HFLAG_FORCE_LEGACY_IRQS = (1 <<
1072 /* limit LBA48 requests to 256 sector <<
1073 IDE_HFLAG_RQSIZE_256 = (1 <<
1074 /* use 32-bit I/O ops */ <<
1075 IDE_HFLAG_IO_32BIT = (1 <<
1076 /* unmask IRQs */ <<
1077 IDE_HFLAG_UNMASK_IRQS = (1 <<
1078 IDE_HFLAG_ABUSE_SET_DMA_MODE = (1 <<
1079 /* host is CY82C693 */ <<
1080 IDE_HFLAG_CY82C693 = (1 <<
1081 /* force host out of "simplex" mode * <<
1082 IDE_HFLAG_CLEAR_SIMPLEX = (1 <<
1083 /* DSC overlap is unsupported */ <<
1084 IDE_HFLAG_NO_DSC = (1 <<
1085 /* never use 32-bit I/O ops */ <<
1086 IDE_HFLAG_NO_IO_32BIT = (1 <<
1087 /* never unmask IRQs */ <<
1088 IDE_HFLAG_NO_UNMASK_IRQS = (1 <<
1089 }; 1379 };
1090 1380
1091 #ifdef CONFIG_BLK_DEV_OFFBOARD !! 1381 typedef struct ide_pci_device_s {
1092 # define IDE_HFLAG_OFF_BOARD IDE_HFLAG_BOO <<
1093 #else <<
1094 # define IDE_HFLAG_OFF_BOARD 0 <<
1095 #endif <<
1096 <<
1097 struct ide_port_info { <<
1098 char *name; 1382 char *name;
>> 1383 int (*init_setup)(struct pci_dev *, struct ide_pci_device_s *);
>> 1384 void (*init_setup_dma)(struct pci_dev *, struct ide_pci_device_s *, ide_hwif_t *);
1099 unsigned int (*init_chipse 1385 unsigned int (*init_chipset)(struct pci_dev *, const char *);
1100 void (*init_iops)( 1386 void (*init_iops)(ide_hwif_t *);
1101 void (*init_hwif)( 1387 void (*init_hwif)(ide_hwif_t *);
1102 void (*init_dma)(i 1388 void (*init_dma)(ide_hwif_t *, unsigned long);
>> 1389 void (*fixup)(ide_hwif_t *);
>> 1390 u8 channels;
>> 1391 u8 autodma;
1103 ide_pci_enablebit_t enablebits[2] 1392 ide_pci_enablebit_t enablebits[2];
1104 hwif_chipset_t chipset; !! 1393 u8 bootable;
1105 u8 extra; !! 1394 unsigned int extra;
1106 u32 host_flags; !! 1395 struct ide_pci_device_s *next;
1107 u8 pio_mask; !! 1396 u8 flags;
1108 u8 swdma_mask; !! 1397 } ide_pci_device_t;
1109 u8 mwdma_mask; <<
1110 u8 udma_mask; <<
1111 }; <<
1112 1398
1113 int ide_setup_pci_device(struct pci_dev *, co !! 1399 extern int ide_setup_pci_device(struct pci_dev *, ide_pci_device_t *);
1114 int ide_setup_pci_devices(struct pci_dev *, s !! 1400 extern int ide_setup_pci_devices(struct pci_dev *, struct pci_dev *, ide_pci_device_t *);
1115 1401
1116 void ide_map_sg(ide_drive_t *, struct request 1402 void ide_map_sg(ide_drive_t *, struct request *);
1117 void ide_init_sg_cmd(ide_drive_t *, struct re 1403 void ide_init_sg_cmd(ide_drive_t *, struct request *);
1118 1404
1119 #define BAD_DMA_DRIVE 0 1405 #define BAD_DMA_DRIVE 0
1120 #define GOOD_DMA_DRIVE 1 1406 #define GOOD_DMA_DRIVE 1
1121 1407
1122 struct drive_list_entry { <<
1123 const char *id_model; <<
1124 const char *id_firmware; <<
1125 }; <<
1126 <<
1127 int ide_in_drive_list(struct hd_driveid *, co <<
1128 <<
1129 #ifdef CONFIG_BLK_DEV_IDEDMA 1408 #ifdef CONFIG_BLK_DEV_IDEDMA
1130 int __ide_dma_bad_drive(ide_drive_t *); 1409 int __ide_dma_bad_drive(ide_drive_t *);
1131 int ide_id_dma_bug(ide_drive_t *); !! 1410 int __ide_dma_good_drive(ide_drive_t *);
1132 !! 1411 int ide_use_dma(ide_drive_t *);
1133 u8 ide_find_dma_mode(ide_drive_t *, u8); !! 1412 int __ide_dma_off(ide_drive_t *);
1134 !! 1413 void ide_dma_verbose(ide_drive_t *);
1135 static inline u8 ide_max_dma_mode(ide_drive_t <<
1136 { <<
1137 return ide_find_dma_mode(drive, XFER_ <<
1138 } <<
1139 <<
1140 void ide_dma_off_quietly(ide_drive_t *); <<
1141 void ide_dma_off(ide_drive_t *); <<
1142 void ide_dma_on(ide_drive_t *); <<
1143 int ide_set_dma(ide_drive_t *); <<
1144 void ide_check_dma_crc(ide_drive_t *); <<
1145 ide_startstop_t ide_dma_intr(ide_drive_t *); 1414 ide_startstop_t ide_dma_intr(ide_drive_t *);
1146 1415
1147 int ide_build_sglist(ide_drive_t *, struct re !! 1416 #ifdef CONFIG_BLK_DEV_IDEDMA_PCI
1148 void ide_destroy_dmatable(ide_drive_t *); !! 1417 extern int ide_build_sglist(ide_drive_t *, struct request *);
1149 <<
1150 #ifdef CONFIG_BLK_DEV_IDEDMA_SFF <<
1151 extern int ide_build_dmatable(ide_drive_t *, 1418 extern int ide_build_dmatable(ide_drive_t *, struct request *);
>> 1419 extern void ide_destroy_dmatable(ide_drive_t *);
1152 extern int ide_release_dma(ide_hwif_t *); 1420 extern int ide_release_dma(ide_hwif_t *);
1153 extern void ide_setup_dma(ide_hwif_t *, unsig !! 1421 extern void ide_setup_dma(ide_hwif_t *, unsigned long, unsigned int);
1154 1422
1155 void ide_dma_host_set(ide_drive_t *, int); !! 1423 extern int __ide_dma_host_off(ide_drive_t *);
>> 1424 extern int __ide_dma_off_quietly(ide_drive_t *);
>> 1425 extern int __ide_dma_host_on(ide_drive_t *);
>> 1426 extern int __ide_dma_on(ide_drive_t *);
>> 1427 extern int __ide_dma_check(ide_drive_t *);
1156 extern int ide_dma_setup(ide_drive_t *); 1428 extern int ide_dma_setup(ide_drive_t *);
1157 extern void ide_dma_start(ide_drive_t *); 1429 extern void ide_dma_start(ide_drive_t *);
1158 extern int __ide_dma_end(ide_drive_t *); 1430 extern int __ide_dma_end(ide_drive_t *);
1159 extern void ide_dma_lost_irq(ide_drive_t *); !! 1431 extern int __ide_dma_lostirq(ide_drive_t *);
1160 extern void ide_dma_timeout(ide_drive_t *); !! 1432 extern int __ide_dma_timeout(ide_drive_t *);
1161 #endif /* CONFIG_BLK_DEV_IDEDMA_SFF */ !! 1433 #endif /* CONFIG_BLK_DEV_IDEDMA_PCI */
1162 1434
1163 #else 1435 #else
1164 static inline int ide_id_dma_bug(ide_drive_t !! 1436 static inline int ide_use_dma(ide_drive_t *drive) { return 0; }
1165 static inline u8 ide_find_dma_mode(ide_drive_ !! 1437 static inline int __ide_dma_off(ide_drive_t *drive) { return 0; }
1166 static inline u8 ide_max_dma_mode(ide_drive_t <<
1167 static inline void ide_dma_off_quietly(ide_dr <<
1168 static inline void ide_dma_off(ide_drive_t *d <<
1169 static inline void ide_dma_on(ide_drive_t *dr <<
1170 static inline void ide_dma_verbose(ide_drive_ 1438 static inline void ide_dma_verbose(ide_drive_t *drive) { ; }
1171 static inline int ide_set_dma(ide_drive_t *dr <<
1172 static inline void ide_check_dma_crc(ide_driv <<
1173 #endif /* CONFIG_BLK_DEV_IDEDMA */ 1439 #endif /* CONFIG_BLK_DEV_IDEDMA */
1174 1440
1175 #ifndef CONFIG_BLK_DEV_IDEDMA_SFF !! 1441 #ifndef CONFIG_BLK_DEV_IDEDMA_PCI
1176 static inline void ide_release_dma(ide_hwif_t 1442 static inline void ide_release_dma(ide_hwif_t *drive) {;}
1177 #endif 1443 #endif
1178 1444
1179 #ifdef CONFIG_BLK_DEV_IDEACPI <<
1180 extern int ide_acpi_exec_tfs(ide_drive_t *dri <<
1181 extern void ide_acpi_get_timing(ide_hwif_t *h <<
1182 extern void ide_acpi_push_timing(ide_hwif_t * <<
1183 extern void ide_acpi_init(ide_hwif_t *hwif); <<
1184 void ide_acpi_port_init_devices(ide_hwif_t *) <<
1185 extern void ide_acpi_set_state(ide_hwif_t *hw <<
1186 #else <<
1187 static inline int ide_acpi_exec_tfs(ide_drive <<
1188 static inline void ide_acpi_get_timing(ide_hw <<
1189 static inline void ide_acpi_push_timing(ide_h <<
1190 static inline void ide_acpi_init(ide_hwif_t * <<
1191 static inline void ide_acpi_port_init_devices <<
1192 static inline void ide_acpi_set_state(ide_hwi <<
1193 #endif <<
1194 <<
1195 void ide_remove_port_from_hwgroup(ide_hwif_t <<
1196 extern int ide_hwif_request_regions(ide_hwif_ 1445 extern int ide_hwif_request_regions(ide_hwif_t *hwif);
1197 extern void ide_hwif_release_regions(ide_hwif 1446 extern void ide_hwif_release_regions(ide_hwif_t* hwif);
1198 void ide_unregister(unsigned int, int, int); !! 1447 extern void ide_unregister (unsigned int index);
1199 <<
1200 void ide_register_region(struct gendisk *); <<
1201 void ide_unregister_region(struct gendisk *); <<
1202 1448
1203 void ide_undecoded_slave(ide_drive_t *); !! 1449 void ide_undecoded_slave(ide_hwif_t *);
1204 1450
1205 int ide_device_add_all(u8 *idx, const struct !! 1451 int probe_hwif_init_with_fixup(ide_hwif_t *, void (*)(ide_hwif_t *));
1206 int ide_device_add(u8 idx[4], const struct id !! 1452 extern int probe_hwif_init(ide_hwif_t *);
1207 1453
1208 static inline void *ide_get_hwifdata (ide_hwi 1454 static inline void *ide_get_hwifdata (ide_hwif_t * hwif)
1209 { 1455 {
1210 return hwif->hwif_data; 1456 return hwif->hwif_data;
1211 } 1457 }
1212 1458
1213 static inline void ide_set_hwifdata (ide_hwif 1459 static inline void ide_set_hwifdata (ide_hwif_t * hwif, void *data)
1214 { 1460 {
1215 hwif->hwif_data = data; 1461 hwif->hwif_data = data;
1216 } 1462 }
1217 1463
1218 const char *ide_xfer_verbose(u8 mode); !! 1464 /* ide-lib.c */
>> 1465 extern u8 ide_dma_speed(ide_drive_t *drive, u8 mode);
>> 1466 extern u8 ide_rate_filter(u8 mode, u8 speed);
>> 1467 extern int ide_dma_enable(ide_drive_t *drive);
>> 1468 extern char *ide_xfer_verbose(u8 xfer_rate);
1219 extern void ide_toggle_bounce(ide_drive_t *dr 1469 extern void ide_toggle_bounce(ide_drive_t *drive, int on);
1220 extern int ide_set_xfer_rate(ide_drive_t *dri 1470 extern int ide_set_xfer_rate(ide_drive_t *drive, u8 rate);
1221 1471
1222 static inline int ide_dev_has_iordy(struct hd <<
1223 { <<
1224 return ((id->field_valid & 2) && (id- <<
1225 } <<
1226 <<
1227 static inline int ide_dev_is_sata(struct hd_d <<
1228 { <<
1229 /* <<
1230 * See if word 93 is 0 AND drive is a <<
1231 * verifying that word 80 by casting <<
1232 * this trick allows us to filter out <<
1233 * 0x0000 and 0xffff along with the e <<
1234 */ <<
1235 if (id->hw_config == 0 && (short)id-> <<
1236 return 1; <<
1237 return 0; <<
1238 } <<
1239 <<
1240 u64 ide_get_lba_addr(struct ide_taskfile *, i <<
1241 u8 ide_dump_status(ide_drive_t *, const char 1472 u8 ide_dump_status(ide_drive_t *, const char *, u8);
1242 1473
1243 typedef struct ide_pio_timings_s { 1474 typedef struct ide_pio_timings_s {
1244 int setup_time; /* Address se 1475 int setup_time; /* Address setup (ns) minimum */
1245 int active_time; /* Active pul 1476 int active_time; /* Active pulse (ns) minimum */
1246 int cycle_time; /* Cycle time !! 1477 int cycle_time; /* Cycle time (ns) minimum = (setup + active + recovery) */
1247 /* active + r <<
1248 } ide_pio_timings_t; 1478 } ide_pio_timings_t;
1249 1479
1250 unsigned int ide_pio_cycle_time(ide_drive_t * !! 1480 typedef struct ide_pio_data_s {
1251 u8 ide_get_best_pio_mode(ide_drive_t *, u8, u !! 1481 u8 pio_mode;
1252 extern const ide_pio_timings_t ide_pio_timing !! 1482 u8 use_iordy;
>> 1483 u8 overridden;
>> 1484 u8 blacklisted;
>> 1485 unsigned int cycle_time;
>> 1486 } ide_pio_data_t;
1253 1487
1254 int ide_set_pio_mode(ide_drive_t *, u8); !! 1488 extern u8 ide_get_best_pio_mode (ide_drive_t *drive, u8 mode_wanted, u8 max_mode, ide_pio_data_t *d);
1255 int ide_set_dma_mode(ide_drive_t *, u8); !! 1489 extern const ide_pio_timings_t ide_pio_timings[6];
1256 <<
1257 void ide_set_pio(ide_drive_t *, u8); <<
1258 1490
1259 static inline void ide_set_max_pio(ide_drive_ <<
1260 { <<
1261 ide_set_pio(drive, 255); <<
1262 } <<
1263 1491
1264 extern spinlock_t ide_lock; 1492 extern spinlock_t ide_lock;
1265 extern struct mutex ide_cfg_mtx; !! 1493 extern struct semaphore ide_cfg_sem;
1266 /* 1494 /*
1267 * Structure locking: 1495 * Structure locking:
1268 * 1496 *
1269 * ide_cfg_mtx and ide_lock together protect !! 1497 * ide_cfg_sem and ide_lock together protect changes to
1270 * ide_hwif_t->{next,hwgroup} 1498 * ide_hwif_t->{next,hwgroup}
1271 * ide_drive_t->next 1499 * ide_drive_t->next
1272 * 1500 *
1273 * ide_hwgroup_t->busy: ide_lock 1501 * ide_hwgroup_t->busy: ide_lock
1274 * ide_hwgroup_t->hwif: ide_lock 1502 * ide_hwgroup_t->hwif: ide_lock
1275 * ide_hwif_t->mate: constant, no locking 1503 * ide_hwif_t->mate: constant, no locking
1276 * ide_drive_t->hwif: constant, no locking 1504 * ide_drive_t->hwif: constant, no locking
1277 */ 1505 */
1278 1506
1279 #define local_irq_set(flags) do { local_sa !! 1507 #define local_irq_set(flags) do { local_save_flags((flags)); local_irq_enable(); } while (0)
1280 1508
1281 extern struct bus_type ide_bus_type; 1509 extern struct bus_type ide_bus_type;
1282 1510
1283 /* check if CACHE FLUSH (EXT) command is supp 1511 /* check if CACHE FLUSH (EXT) command is supported (bits defined in ATA-6) */
1284 #define ide_id_has_flush_cache(id) ((id) 1512 #define ide_id_has_flush_cache(id) ((id)->cfs_enable_2 & 0x3000)
1285 1513
1286 /* some Maxtor disks have bit 13 defined inco 1514 /* some Maxtor disks have bit 13 defined incorrectly so check bit 10 too */
1287 #define ide_id_has_flush_cache_ext(id) \ 1515 #define ide_id_has_flush_cache_ext(id) \
1288 (((id)->cfs_enable_2 & 0x2400) == 0x2 1516 (((id)->cfs_enable_2 & 0x2400) == 0x2400)
1289 1517
1290 static inline void ide_dump_identify(u8 *id) <<
1291 { <<
1292 print_hex_dump(KERN_INFO, "", DUMP_PR <<
1293 } <<
1294 <<
1295 static inline int hwif_to_node(ide_hwif_t *hw <<
1296 { <<
1297 struct pci_dev *dev = to_pci_dev(hwif <<
1298 return hwif->dev ? pcibus_to_node(dev <<
1299 } <<
1300 <<
1301 static inline ide_drive_t *ide_get_paired_dri <<
1302 { <<
1303 ide_hwif_t *hwif = HWIF(drive) <<
1304 <<
1305 return &hwif->drives[(drive->dn ^ 1) <<
1306 } <<
1307 <<
1308 static inline void ide_set_irq(ide_drive_t *d <<
1309 { <<
1310 drive->hwif->OUTB(drive->ctl | (on ? <<
1311 } <<
1312 <<
1313 static inline u8 ide_read_status(ide_drive_t <<
1314 { <<
1315 ide_hwif_t *hwif = drive->hwif; <<
1316 <<
1317 return hwif->INB(hwif->io_ports[IDE_S <<
1318 } <<
1319 <<
1320 static inline u8 ide_read_altstatus(ide_drive <<
1321 { <<
1322 ide_hwif_t *hwif = drive->hwif; <<
1323 <<
1324 return hwif->INB(hwif->io_ports[IDE_C <<
1325 } <<
1326 <<
1327 static inline u8 ide_read_error(ide_drive_t * <<
1328 { <<
1329 ide_hwif_t *hwif = drive->hwif; <<
1330 <<
1331 return hwif->INB(hwif->io_ports[IDE_E <<
1332 } <<
1333 <<
1334 #endif /* _IDE_H */ 1518 #endif /* _IDE_H */
1335 1519
|
This page was automatically generated by the
LXR engine.
|