~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/include/linux/hdreg.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef _LINUX_HDREG_H
  2 #define _LINUX_HDREG_H
  3 
  4 /*
  5  * This file contains some defines for the AT-hd-controller.
  6  * Various sources.  
  7  */
  8 
  9 #define HD_IRQ 14               /* the standard disk interrupt */
 10 
 11 /* ide.c has its own port definitions in "ide.h" */
 12 
 13 /* Hd controller regs. Ref: IBM AT Bios-listing */
 14 #define HD_DATA         0x1f0   /* _CTL when writing */
 15 #define HD_ERROR        0x1f1   /* see err-bits */
 16 #define HD_NSECTOR      0x1f2   /* nr of sectors to read/write */
 17 #define HD_SECTOR       0x1f3   /* starting sector */
 18 #define HD_LCYL         0x1f4   /* starting cylinder */
 19 #define HD_HCYL         0x1f5   /* high byte of starting cyl */
 20 #define HD_CURRENT      0x1f6   /* 101dhhhh , d=drive, hhhh=head */
 21 #define HD_STATUS       0x1f7   /* see status-bits */
 22 #define HD_FEATURE HD_ERROR     /* same io address, read=error, write=feature */
 23 #define HD_PRECOMP HD_FEATURE   /* obsolete use of this port - predates IDE */
 24 #define HD_COMMAND HD_STATUS    /* same io address, read=status, write=cmd */
 25 
 26 #define HD_CMD          0x3f6   /* used for resets */
 27 #define HD_ALTSTATUS    0x3f6   /* same as HD_STATUS but doesn't clear irq */
 28 
 29 /* remainder is shared between hd.c, ide.c, ide-cd.c, and the hdparm utility */
 30 
 31 /* Bits of HD_STATUS */
 32 #define ERR_STAT        0x01
 33 #define INDEX_STAT      0x02
 34 #define ECC_STAT        0x04    /* Corrected error */
 35 #define DRQ_STAT        0x08
 36 #define SEEK_STAT       0x10
 37 #define WRERR_STAT      0x20
 38 #define READY_STAT      0x40
 39 #define BUSY_STAT       0x80
 40 
 41 /* Values for HD_COMMAND */
 42 #define WIN_RESTORE             0x10
 43 #define WIN_READ                0x20
 44 #define WIN_WRITE               0x30
 45 #define WIN_WRITE_VERIFY        0x3C
 46 #define WIN_VERIFY              0x40
 47 #define WIN_FORMAT              0x50
 48 #define WIN_INIT                0x60
 49 #define WIN_SEEK                0x70
 50 #define WIN_DIAGNOSE            0x90
 51 #define WIN_SPECIFY             0x91    /* set drive geometry translation */
 52 #define WIN_IDLEIMMEDIATE       0xE1    /* force drive to become "ready" */
 53 #define WIN_SETIDLE1            0xE3
 54 #define WIN_SETIDLE2            0x97
 55 
 56 #define WIN_STANDBYNOW1         0xE0
 57 #define WIN_STANDBYNOW2         0x94
 58 #define WIN_SLEEPNOW1           0xE6
 59 #define WIN_SLEEPNOW2           0x99
 60 #define WIN_CHECKPOWERMODE1     0xE5
 61 #define WIN_CHECKPOWERMODE2     0x98
 62 
 63 #define WIN_DOORLOCK            0xDE    /* lock door on removable drives */
 64 #define WIN_DOORUNLOCK          0xDF    /* unlock door on removable drives */
 65 
 66 #define WIN_MULTREAD            0xC4    /* read sectors using multiple mode */
 67 #define WIN_MULTWRITE           0xC5    /* write sectors using multiple mode */
 68 #define WIN_SETMULT             0xC6    /* enable/disable multiple mode */
 69 #define WIN_IDENTIFY            0xEC    /* ask drive to identify itself */
 70 #define WIN_IDENTIFY_DMA        0xEE    /* same as WIN_IDENTIFY, but DMA */
 71 #define WIN_SETFEATURES         0xEF    /* set special drive features */
 72 #define WIN_READDMA             0xC8    /* read sectors using DMA transfers */
 73 #define WIN_WRITEDMA            0xCA    /* write sectors using DMA transfers */
 74 
 75 #define WIN_QUEUED_SERVICE      0xA2    /* */
 76 #define WIN_READDMA_QUEUED      0xC7    /* read sectors using Queued DMA transfers */
 77 #define WIN_WRITEDMA_QUEUED     0xCC    /* write sectors using Queued DMA transfers */
 78 
 79 #define WIN_READ_BUFFER         0xE4    /* force read only 1 sector */
 80 #define WIN_WRITE_BUFFER        0xE8    /* force write only 1 sector */
 81 
 82 #define WIN_SMART               0xB0    /* self-monitoring and reporting */
 83 
 84 /* Additional drive command codes used by ATAPI devices. */
 85 #define WIN_PIDENTIFY           0xA1    /* identify ATAPI device        */
 86 #define WIN_SRST                0x08    /* ATAPI soft reset command */
 87 #define WIN_PACKETCMD           0xA0    /* Send a packet command. */
 88 
 89 #define DISABLE_SEAGATE         0xFB
 90 #define EXABYTE_ENABLE_NEST     0xF0
 91 
 92 /* WIN_SMART sub-commands */
 93 
 94 #define SMART_READ_VALUES       0xd0
 95 #define SMART_READ_THRESHOLDS   0xd1
 96 #define SMART_AUTOSAVE          0xd2
 97 #define SMART_SAVE              0xd3
 98 #define SMART_IMMEDIATE_OFFLINE 0xd4
 99 #define SMART_READ_LOG_SECTOR   0xd5
100 #define SMART_WRITE_LOG_SECTOR  0xd6
101 #define SMART_ENABLE            0xd8
102 #define SMART_DISABLE           0xd9
103 #define SMART_STATUS            0xda
104 #define SMART_AUTO_OFFLINE      0xdb
105 
106 /* WIN_SETFEATURES sub-commands */
107 
108 #define SETFEATURES_EN_WCACHE   0x02    /* Enable write cache */
109 #define SETFEATURES_XFER        0x03    /* Set transfer mode */
110 #       define XFER_UDMA_7      0x47    /* 0100|0111 */
111 #       define XFER_UDMA_6      0x46    /* 0100|0110 */
112 #       define XFER_UDMA_5      0x45    /* 0100|0101 */
113 #       define XFER_UDMA_4      0x44    /* 0100|0100 */
114 #       define XFER_UDMA_3      0x43    /* 0100|0011 */
115 #       define XFER_UDMA_2      0x42    /* 0100|0010 */
116 #       define XFER_UDMA_1      0x41    /* 0100|0001 */
117 #       define XFER_UDMA_0      0x40    /* 0100|0000 */
118 #       define XFER_MW_DMA_2    0x22    /* 0010|0010 */
119 #       define XFER_MW_DMA_1    0x21    /* 0010|0001 */
120 #       define XFER_MW_DMA_0    0x20    /* 0010|0000 */
121 #       define XFER_SW_DMA_2    0x12    /* 0001|0010 */
122 #       define XFER_SW_DMA_1    0x11    /* 0001|0001 */
123 #       define XFER_SW_DMA_0    0x10    /* 0001|0000 */
124 #       define XFER_PIO_4       0x0C    /* 0000|1100 */
125 #       define XFER_PIO_3       0x0B    /* 0000|1011 */
126 #       define XFER_PIO_2       0x0A    /* 0000|1010 */
127 #       define XFER_PIO_1       0x09    /* 0000|1001 */
128 #       define XFER_PIO_0       0x08    /* 0000|1000 */
129 #       define XFER_PIO_SLOW    0x00    /* 0000|0000 */
130 #define SETFEATURES_DIS_DEFECT  0x04    /* Disable Defect Management */
131 #define SETFEATURES_EN_APM      0x05    /* Enable advanced power management */
132 #define SETFEATURES_DIS_MSN     0x31    /* Disable Media Status Notification */
133 #define SETFEATURES_DIS_RLA     0x55    /* Disable read look-ahead feature */
134 #define SETFEATURES_EN_RI       0x5D    /* Enable release interrupt */
135 #define SETFEATURES_EN_SI       0x5E    /* Enable SERVICE interrupt */
136 #define SETFEATURES_DIS_RPOD    0x66    /* Disable reverting to power on defaults */
137 #define SETFEATURES_DIS_WCACHE  0x82    /* Disable write cache */
138 #define SETFEATURES_EN_DEFECT   0x84    /* Enable Defect Management */
139 #define SETFEATURES_DIS_APM     0x85    /* Disable advanced power management */
140 #define SETFEATURES_EN_MSN      0x95    /* Enable Media Status Notification */
141 #define SETFEATURES_EN_RLA      0xAA    /* Enable read look-ahead feature */
142 #define SETFEATURES_PREFETCH    0xAB    /* Sets drive prefetch value */
143 #define SETFEATURES_EN_RPOD     0xCC    /* Enable reverting to power on defaults */
144 #define SETFEATURES_DIS_RI      0xDD    /* Disable release interrupt */
145 #define SETFEATURES_DIS_SI      0xDE    /* Disable SERVICE interrupt */
146 
147 /* WIN_SECURITY sub-commands */
148 
149 #define SECURITY_SET_PASSWORD           0xBA    /* 0xF1 */
150 #define SECURITY_UNLOCK                 0xBB    /* 0xF2 */
151 #define SECURITY_ERASE_PREPARE          0xBC    /* 0xF3 */
152 #define SECURITY_ERASE_UNIT             0xBD    /* 0xF4 */
153 #define SECURITY_FREEZE_LOCK            0xBE    /* 0xF5 */
154 #define SECURITY_DISABLE_PASSWORD       0xBF    /* 0xF6 */
155 
156 /* Bits for HD_ERROR */
157 #define MARK_ERR        0x01    /* Bad address mark */
158 #define TRK0_ERR        0x02    /* couldn't find track 0 */
159 #define ABRT_ERR        0x04    /* Command aborted */
160 #define MCR_ERR         0x08    /* media change request */
161 #define ID_ERR          0x10    /* ID field not found */
162 #define ECC_ERR         0x40    /* Uncorrectable ECC error */
163 #define BBD_ERR         0x80    /* pre-EIDE meaning:  block marked bad */
164 #define ICRC_ERR        0x80    /* new meaning:  CRC error during transfer */
165 
166 struct hd_geometry {
167       unsigned char heads;
168       unsigned char sectors;
169       unsigned short cylinders;
170       unsigned long start;
171 };
172 
173 /* hd/ide ctl's that pass (arg) ptrs to user space are numbered 0x030n/0x031n */
174 #define HDIO_GETGEO             0x0301  /* get device geometry */
175 #define HDIO_GET_UNMASKINTR     0x0302  /* get current unmask setting */
176 #define HDIO_GET_MULTCOUNT      0x0304  /* get current IDE blockmode setting */
177 #define HDIO_OBSOLETE_IDENTITY  0x0307  /* OBSOLETE, DO NOT USE: returns 142 bytes */
178 #define HDIO_GET_KEEPSETTINGS   0x0308  /* get keep-settings-on-reset flag */
179 #define HDIO_GET_32BIT          0x0309  /* get current io_32bit setting */
180 #define HDIO_GET_NOWERR         0x030a  /* get ignore-write-error flag */
181 #define HDIO_GET_DMA            0x030b  /* get use-dma flag */
182 #define HDIO_GET_NICE           0x030c  /* get nice flags */
183 #define HDIO_GET_IDENTITY       0x030d  /* get IDE identification info */
184 
185 #define HDIO_DRIVE_RESET        0x031c  /* execute a device reset */
186 #define HDIO_TRISTATE_HWIF      0x031d  /* execute a channel tristate */
187 #define HDIO_DRIVE_TASK         0x031e  /* execute task and special drive command */
188 #define HDIO_DRIVE_CMD          0x031f  /* execute a special drive command */
189 
190 #define HDIO_DRIVE_CMD_AEB      HDIO_DRIVE_TASK
191 
192 /* hd/ide ctl's that pass (arg) non-ptr values are numbered 0x032n/0x033n */
193 #define HDIO_SET_MULTCOUNT      0x0321  /* change IDE blockmode */
194 #define HDIO_SET_UNMASKINTR     0x0322  /* permit other irqs during I/O */
195 #define HDIO_SET_KEEPSETTINGS   0x0323  /* keep ioctl settings on reset */
196 #define HDIO_SET_32BIT          0x0324  /* change io_32bit flags */
197 #define HDIO_SET_NOWERR         0x0325  /* change ignore-write-error flag */
198 #define HDIO_SET_DMA            0x0326  /* change use-dma flag */
199 #define HDIO_SET_PIO_MODE       0x0327  /* reconfig interface to new speed */
200 #define HDIO_SCAN_HWIF          0x0328  /* register and (re)scan interface */
201 #define HDIO_SET_NICE           0x0329  /* set nice flags */
202 #define HDIO_UNREGISTER_HWIF    0x032a  /* unregister interface */
203 
204 /* BIG GEOMETRY */
205 struct hd_big_geometry {
206         unsigned char heads;
207         unsigned char sectors;
208         unsigned int cylinders;
209         unsigned long start;
210 };
211 
212 /* hd/ide ctl's that pass (arg) ptrs to user space are numbered 0x033n/0x033n */
213 #define HDIO_GETGEO_BIG         0x0330  /* */
214 #define HDIO_GETGEO_BIG_RAW     0x0331  /* */
215 
216 #define __NEW_HD_DRIVE_ID
217 /* structure returned by HDIO_GET_IDENTITY, as per ANSI ATA2 rev.2f spec */
218 struct hd_driveid {
219         unsigned short  config;         /* lots of obsolete bit flags */
220         unsigned short  cyls;           /* "physical" cyls */
221         unsigned short  reserved2;      /* reserved (word 2) */
222         unsigned short  heads;          /* "physical" heads */
223         unsigned short  track_bytes;    /* unformatted bytes per track */
224         unsigned short  sector_bytes;   /* unformatted bytes per sector */
225         unsigned short  sectors;        /* "physical" sectors per track */
226         unsigned short  vendor0;        /* vendor unique */
227         unsigned short  vendor1;        /* vendor unique */
228         unsigned short  vendor2;        /* vendor unique */
229         unsigned char   serial_no[20];  /* 0 = not_specified */
230         unsigned short  buf_type;
231         unsigned short  buf_size;       /* 512 byte increments; 0 = not_specified */
232         unsigned short  ecc_bytes;      /* for r/w long cmds; 0 = not_specified */
233         unsigned char   fw_rev[8];      /* 0 = not_specified */
234         unsigned char   model[40];      /* 0 = not_specified */
235         unsigned char   max_multsect;   /* 0=not_implemented */
236         unsigned char   vendor3;        /* vendor unique */
237         unsigned short  dword_io;       /* 0=not_implemented; 1=implemented */
238         unsigned char   vendor4;        /* vendor unique */
239         unsigned char   capability;     /* bits 0:DMA 1:LBA 2:IORDYsw 3:IORDYsup*/
240         unsigned short  reserved50;     /* reserved (word 50) */
241         unsigned char   vendor5;        /* vendor unique */
242         unsigned char   tPIO;           /* 0=slow, 1=medium, 2=fast */
243         unsigned char   vendor6;        /* vendor unique */
244         unsigned char   tDMA;           /* 0=slow, 1=medium, 2=fast */
245         unsigned short  field_valid;    /* bits 0:cur_ok 1:eide_ok */
246         unsigned short  cur_cyls;       /* logical cylinders */
247         unsigned short  cur_heads;      /* logical heads */
248         unsigned short  cur_sectors;    /* logical sectors per track */
249         unsigned short  cur_capacity0;  /* logical total sectors on drive */
250         unsigned short  cur_capacity1;  /*  (2 words, misaligned int)     */
251         unsigned char   multsect;       /* current multiple sector count */
252         unsigned char   multsect_valid; /* when (bit0==1) multsect is ok */
253         unsigned int    lba_capacity;   /* total number of sectors */
254         unsigned short  dma_1word;      /* single-word dma info */
255         unsigned short  dma_mword;      /* multiple-word dma info */
256         unsigned short  eide_pio_modes; /* bits 0:mode3 1:mode4 */
257         unsigned short  eide_dma_min;   /* min mword dma cycle time (ns) */
258         unsigned short  eide_dma_time;  /* recommended mword dma cycle time (ns) */
259         unsigned short  eide_pio;       /* min cycle time (ns), no IORDY  */
260         unsigned short  eide_pio_iordy; /* min cycle time (ns), with IORDY */
261         unsigned short  words69_70[2];  /* reserved words 69-70 */
262         /* HDIO_GET_IDENTITY currently returns only words 0 through 70 */
263         unsigned short  words71_74[4];  /* reserved words 71-74 */
264         unsigned short  queue_depth;    /*  */
265         unsigned short  words76_79[4];  /* reserved words 76-79 */
266         unsigned short  major_rev_num;  /*  */
267         unsigned short  minor_rev_num;  /*  */
268         unsigned short  command_set_1;  /* bits 0:Smart 1:Security 2:Removable 3:PM */
269         unsigned short  command_set_2;  /* bits 14:Smart Enabled 13:0 zero */
270         unsigned short  cfsse;          /* command set-feature supported extensions */
271         unsigned short  cfs_enable_1;   /* command set-feature enabled */
272         unsigned short  cfs_enable_2;   /* command set-feature enabled */
273         unsigned short  csf_default;    /* command set-feature default */
274         unsigned short  dma_ultra;      /*  */
275         unsigned short  word89;         /* reserved (word 89) */
276         unsigned short  word90;         /* reserved (word 90) */
277         unsigned short  CurAPMvalues;   /* current APM values */
278         unsigned short  word92;         /* reserved (word 92) */
279         unsigned short  hw_config;      /* hardware config */
280         unsigned short  words94_125[32];/* reserved words 94-125 */
281         unsigned short  last_lun;       /* reserved (word 126) */
282         unsigned short  word127;        /* reserved (word 127) */
283         unsigned short  dlf;            /* device lock function
284                                          * 15:9 reserved
285                                          * 8    security level 1:max 0:high
286                                          * 7:6  reserved
287                                          * 5    enhanced erase
288                                          * 4    expire
289                                          * 3    frozen
290                                          * 2    locked
291                                          * 1    en/disabled
292                                          * 0    capability
293                                          */
294         unsigned short  csfo;           /* current set features options
295                                          * 15:4 reserved
296                                          * 3    auto reassign
297                                          * 2    reverting
298                                          * 1    read-look-ahead
299                                          * 0    write cache
300                                          */
301         unsigned short  words130_155[26];/* reserved vendor words 130-155 */
302         unsigned short  word156;
303         unsigned short  words157_159[3];/* reserved vendor words 157-159 */
304         unsigned short  words160_255[95];/* reserved words 160-255 */
305 };
306 
307 /*
308  * IDE "nice" flags. These are used on a per drive basis to determine
309  * when to be nice and give more bandwidth to the other devices which
310  * share the same IDE bus.
311  */
312 #define IDE_NICE_DSC_OVERLAP    (0)     /* per the DSC overlap protocol */
313 #define IDE_NICE_ATAPI_OVERLAP  (1)     /* not supported yet */
314 #define IDE_NICE_0              (2)     /* when sure that it won't affect us */
315 #define IDE_NICE_1              (3)     /* when probably won't affect us much */
316 #define IDE_NICE_2              (4)     /* when we know it's on our expense */
317 
318 #ifdef __KERNEL__
319 /*
320  * These routines are used for kernel command line parameters from main.c:
321  */
322 #include <linux/config.h>
323 
324 #if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)
325 int ide_register(int io_port, int ctl_port, int irq);
326 void ide_unregister(unsigned int);
327 #endif /* CONFIG_BLK_DEV_IDE || CONFIG_BLK_DEV_IDE_MODULE */
328 
329 #endif  /* __KERNEL__ */
330 
331 #endif  /* _LINUX_HDREG_H */
332 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.