Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]

Diff markup

Differences between /linux/include/linux/ide.h (Version 2.6.25.8) and /linux/include/linux/ide.h (Version 2.6.11.8)


  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.