]> err.no Git - linux-2.6/blobdiff - include/linux/ide.h
ide: remove atapi_feature_t
[linux-2.6] / include / linux / ide.h
index 66a38f1011753ac498d22d56e2d9f82bcabd2ab7..a638dde17e77108d631f5bae40252b6f38e8516d 100644 (file)
 #include <asm/semaphore.h>
 #include <asm/mutex.h>
 
-/******************************************************************************
- * IDE driver configuration options (play with these as desired):
- *
- * REALLY_SLOW_IO can be defined in ide.c and ide-cd.c, if necessary
- */
-#define INITIAL_MULT_COUNT     0       /* off=0; on=2,4,8,16,32, etc.. */
-
-#ifndef SUPPORT_SLOW_DATA_PORTS                /* 1 to support slow data ports */
-#define SUPPORT_SLOW_DATA_PORTS        1       /* 0 to reduce kernel size */
-#endif
-#ifndef SUPPORT_VLB_SYNC               /* 1 to support weird 32-bit chips */
-#define SUPPORT_VLB_SYNC       1       /* 0 to reduce kernel size */
-#endif
-#ifndef OK_TO_RESET_CONTROLLER         /* 1 needed for good error recovery */
-#define OK_TO_RESET_CONTROLLER 1       /* 0 for use with AH2372A/B interface */
-#endif
-
-#ifndef DISABLE_IRQ_NOSYNC
-#define DISABLE_IRQ_NOSYNC     0
+#if defined(CRIS) || defined(FRV)
+# define SUPPORT_VLB_SYNC 0
+#else
+# define SUPPORT_VLB_SYNC 1
 #endif
 
 /*
  
 #define IDE_NO_IRQ             (-1)
 
-/*
- *  "No user-serviceable parts" beyond this point  :)
- *****************************************************************************/
-
 typedef unsigned char  byte;   /* used everywhere */
 
 /*
@@ -103,8 +84,6 @@ typedef unsigned char        byte;   /* used everywhere */
 #define IDE_FEATURE_OFFSET     IDE_ERROR_OFFSET
 #define IDE_COMMAND_OFFSET     IDE_STATUS_OFFSET
 
-#define IDE_CONTROL_OFFSET_HOB (7)
-
 #define IDE_DATA_REG           (HWIF(drive)->io_ports[IDE_DATA_OFFSET])
 #define IDE_ERROR_REG          (HWIF(drive)->io_ports[IDE_ERROR_OFFSET])
 #define IDE_NSECTOR_REG                (HWIF(drive)->io_ports[IDE_NSECTOR_OFFSET])
@@ -327,23 +306,12 @@ static inline void ide_init_hwif_ports(hw_regs_t *hw,
 typedef union {
        unsigned all                    : 8;
        struct {
-#if defined(__LITTLE_ENDIAN_BITFIELD)
                unsigned set_geometry   : 1;
                unsigned recalibrate    : 1;
                unsigned set_multmode   : 1;
                unsigned set_tune       : 1;
                unsigned serviced       : 1;
                unsigned reserved       : 3;
-#elif defined(__BIG_ENDIAN_BITFIELD)
-               unsigned reserved       : 3;
-               unsigned serviced       : 1;
-               unsigned set_tune       : 1;
-               unsigned set_multmode   : 1;
-               unsigned recalibrate    : 1;
-               unsigned set_geometry   : 1;
-#else
-#error "Please fix <asm/byteorder.h>"
-#endif
        } b;
 } special_t;
 
@@ -397,77 +365,6 @@ typedef union {
        } b;
 } select_t, ata_select_t;
 
-/*
- * The ATA-IDE Status Register.
- * The ATAPI Status Register.
- *
- * check       : Error occurred
- * idx         : Index Error
- * corr                : Correctable error occurred
- * drq         : Data is request by the device
- * dsc         : Disk Seek Complete                    : ata
- *             : Media access command finished         : atapi
- * df          : Device Fault                          : ata
- *             : Reserved                              : atapi
- * drdy                : Ready, Command Mode Capable           : ata
- *             : Ignored for ATAPI commands            : atapi
- * bsy         : Disk is Busy
- *             : The device has access to the command block
- */
-typedef union {
-       unsigned all                    :8;
-       struct {
-#if defined(__LITTLE_ENDIAN_BITFIELD)
-               unsigned check          :1;
-               unsigned idx            :1;
-               unsigned corr           :1;
-               unsigned drq            :1;
-               unsigned dsc            :1;
-               unsigned df             :1;
-               unsigned drdy           :1;
-               unsigned bsy            :1;
-#elif defined(__BIG_ENDIAN_BITFIELD)
-               unsigned bsy            :1;
-               unsigned drdy           :1;
-               unsigned df             :1;
-               unsigned dsc            :1;
-               unsigned drq            :1;
-               unsigned corr           :1;
-               unsigned idx            :1;
-               unsigned check          :1;
-#else
-#error "Please fix <asm/byteorder.h>"
-#endif
-       } b;
-} ata_status_t, atapi_status_t;
-
-/*
- * ATAPI Feature Register
- *
- * dma         : Using DMA or PIO
- * reserved321 : Reserved
- * reserved654 : Reserved (Tag Type)
- * reserved7   : Reserved
- */
-typedef union {
-       unsigned all                    :8;
-       struct {
-#if defined(__LITTLE_ENDIAN_BITFIELD)
-               unsigned dma            :1;
-               unsigned reserved321    :3;
-               unsigned reserved654    :3;
-               unsigned reserved7      :1;
-#elif defined(__BIG_ENDIAN_BITFIELD)
-               unsigned reserved7      :1;
-               unsigned reserved654    :3;
-               unsigned reserved321    :3;
-               unsigned dma            :1;
-#else
-#error "Please fix <asm/byteorder.h>"
-#endif
-       } b;
-} atapi_feature_t;
-
 /*
  * ATAPI Interrupt Reason Register.
  *
@@ -492,36 +389,6 @@ typedef union {
        } b;
 } atapi_ireason_t;
 
-/*
- * The ATAPI error register.
- *
- * ili         : Illegal Length Indication
- * eom         : End Of Media Detected
- * abrt                : Aborted command - As defined by ATA
- * mcr         : Media Change Requested - As defined by ATA
- * sense_key   : Sense key of the last failed packet command
- */
-typedef union {
-       unsigned all                    :8;
-       struct {
-#if defined(__LITTLE_ENDIAN_BITFIELD)
-               unsigned ili            :1;
-               unsigned eom            :1;
-               unsigned abrt           :1;
-               unsigned mcr            :1;
-               unsigned sense_key      :4;
-#elif defined(__BIG_ENDIAN_BITFIELD)
-               unsigned sense_key      :4;
-               unsigned mcr            :1;
-               unsigned abrt           :1;
-               unsigned eom            :1;
-               unsigned ili            :1;
-#else
-#error "Please fix <asm/byteorder.h>"
-#endif
-       } b;
-} atapi_error_t;
-
 /*
  * Status returned from various ide_ functions
  */
@@ -1062,16 +929,69 @@ extern void ide_end_drive_cmd(ide_drive_t *, u8, u8);
  */
 extern int ide_wait_cmd(ide_drive_t *, u8, u8, u8, u8, u8 *);
 
+enum {
+       IDE_TFLAG_LBA48                 = (1 << 0),
+       IDE_TFLAG_NO_SELECT_MASK        = (1 << 1),
+       IDE_TFLAG_FLAGGED               = (1 << 2),
+       IDE_TFLAG_OUT_DATA              = (1 << 3),
+       IDE_TFLAG_OUT_HOB_FEATURE       = (1 << 4),
+       IDE_TFLAG_OUT_HOB_NSECT         = (1 << 5),
+       IDE_TFLAG_OUT_HOB_LBAL          = (1 << 6),
+       IDE_TFLAG_OUT_HOB_LBAM          = (1 << 7),
+       IDE_TFLAG_OUT_HOB_LBAH          = (1 << 8),
+       IDE_TFLAG_OUT_HOB               = IDE_TFLAG_OUT_HOB_FEATURE |
+                                         IDE_TFLAG_OUT_HOB_NSECT |
+                                         IDE_TFLAG_OUT_HOB_LBAL |
+                                         IDE_TFLAG_OUT_HOB_LBAM |
+                                         IDE_TFLAG_OUT_HOB_LBAH,
+       IDE_TFLAG_OUT_FEATURE           = (1 << 9),
+       IDE_TFLAG_OUT_NSECT             = (1 << 10),
+       IDE_TFLAG_OUT_LBAL              = (1 << 11),
+       IDE_TFLAG_OUT_LBAM              = (1 << 12),
+       IDE_TFLAG_OUT_LBAH              = (1 << 13),
+       IDE_TFLAG_OUT_TF                = IDE_TFLAG_OUT_FEATURE |
+                                         IDE_TFLAG_OUT_NSECT |
+                                         IDE_TFLAG_OUT_LBAL |
+                                         IDE_TFLAG_OUT_LBAM |
+                                         IDE_TFLAG_OUT_LBAH,
+       IDE_TFLAG_OUT_DEVICE            = (1 << 14),
+};
+
+struct ide_taskfile {
+       u8      hob_data;       /*  0: high data byte (for TASKFILE IOCTL) */
+
+       u8      hob_feature;    /*  1-5: additional data to support LBA48 */
+       u8      hob_nsect;
+       u8      hob_lbal;
+       u8      hob_lbam;
+       u8      hob_lbah;
+
+       u8      data;           /*  6: low data byte (for TASKFILE IOCTL) */
+
+       union {                 /*  7: */
+               u8 error;       /*   read:  error */
+               u8 feature;     /*  write: feature */
+       };
+
+       u8      nsect;          /*  8: number of sectors */
+       u8      lbal;           /*  9: LBA low */
+       u8      lbam;           /* 10: LBA mid */
+       u8      lbah;           /* 11: LBA high */
+
+       u8      device;         /* 12: device select */
+
+       union {                 /* 13: */
+               u8 status;      /*  read: status  */
+               u8 command;     /* write: command */
+       };
+};
+
 typedef struct ide_task_s {
-/*
- *     struct hd_drive_task_hdr        tf;
- *     task_struct_t           tf;
- *     struct hd_drive_hob_hdr         hobf;
- *     hob_struct_t            hobf;
- */
-       u8                      tfRegister[8];
-       u8                      hobRegister[8];
-       ide_reg_valid_t         tf_out_flags;
+       union {
+               struct ide_taskfile     tf;
+               u8                      tf_array[14];
+       };
+       u16                     tf_flags;
        ide_reg_valid_t         tf_in_flags;
        int                     data_phase;
        int                     command_type;
@@ -1081,6 +1001,8 @@ typedef struct ide_task_s {
        void                    *special;       /* valid_t generally */
 } ide_task_t;
 
+void ide_tf_load(ide_drive_t *, ide_task_t *);
+
 extern u32 ide_read_24(ide_drive_t *);
 
 extern void SELECT_DRIVE(ide_drive_t *);
@@ -1109,6 +1031,8 @@ extern ide_startstop_t pre_task_out_intr(ide_drive_t *, struct request *);
 
 extern int ide_raw_taskfile(ide_drive_t *, ide_task_t *, u8 *);
 
+int ide_no_data_taskfile(ide_drive_t *, ide_task_t *);
+
 int ide_taskfile_ioctl(ide_drive_t *, unsigned int, unsigned long);
 int ide_cmd_ioctl(ide_drive_t *, unsigned int, unsigned long);
 int ide_task_ioctl(ide_drive_t *, unsigned int, unsigned long);