root/drivers/block/ide.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  *  linux/drivers/block/ide.h
   3  *
   4  *  Copyright (C) 1994, 1995  Linus Torvalds & authors
   5  */
   6 
   7 #include <linux/config.h>
   8 
   9 /*
  10  * This is the multiple IDE interface driver, as evolved from hd.c.  
  11  * It supports up to four IDE interfaces, on one or more IRQs (usually 14 & 15).
  12  * There can be up to two drives per interface, as per the ATA-2 spec.
  13  *
  14  * Primary i/f:    ide0: major=3;  (hda)         minor=0; (hdb)         minor=64
  15  * Secondary i/f:  ide1: major=22; (hdc or hd1a) minor=0; (hdd or hd1b) minor=64
  16  * Tertiary i/f:   ide2: major=33; (hde)         minor=0; (hdf)         minor=64
  17  * Quaternary i/f: ide3: major=34; (hdg)         minor=0; (hdh)         minor=64
  18  */
  19 
  20 /******************************************************************************
  21  * IDE driver configuration options (play with these as desired):
  22  * 
  23  * REALLY_SLOW_IO can be defined in ide.c and ide-cd.c, if necessary
  24  */
  25 #undef REALLY_FAST_IO                   /* define if ide ports are perfect */
  26 #define INITIAL_MULT_COUNT      0       /* off=0; on=2,4,8,16,32, etc.. */
  27 
  28 #ifndef SUPPORT_VLB_SYNC                /* 1 to support weird 32-bit chips */
  29 #define SUPPORT_VLB_SYNC        1       /* 0 to reduce kernel size */
  30 #endif
  31 #ifndef DISK_RECOVERY_TIME              /* off=0; on=access_delay_time */
  32 #define DISK_RECOVERY_TIME      0       /*  for hardware that needs it */
  33 #endif
  34 #ifndef OK_TO_RESET_CONTROLLER          /* 1 needed for good error recovery */
  35 #define OK_TO_RESET_CONTROLLER  1       /* 0 for use with AH2372A/B interface */
  36 #endif
  37 #ifndef FAKE_FDISK_FOR_EZDRIVE          /* 1 to help linux fdisk with EZDRIVE */
  38 #define FAKE_FDISK_FOR_EZDRIVE  1       /* 0 to reduce kernel size */
  39 #endif
  40 #ifndef FANCY_STATUS_DUMPS              /* 1 for human-readable drive errors */
  41 #define FANCY_STATUS_DUMPS      1       /* 0 to reduce kernel size */
  42 #endif
  43 
  44 #if defined(CONFIG_BLK_DEV_IDECD) || defined(CONFIG_BLK_DEV_IDETAPE)
  45 #define CONFIG_BLK_DEV_IDEATAPI 1
  46 #endif
  47 
  48 /*
  49  * IDE_DRIVE_CMD is used to implement many features of the hdparm utility
  50  */
  51 #define IDE_DRIVE_CMD           99      /* (magic) undef to reduce kernel size*/
  52 
  53 /*
  54  *  "No user-serviceable parts" beyond this point  :)
  55  *****************************************************************************/
  56 
  57 typedef unsigned char   byte;   /* used everywhere */
  58 
  59 /*
  60  * Probably not wise to fiddle with these
  61  */
  62 #define ERROR_MAX       8       /* Max read/write errors per sector */
  63 #define ERROR_RESET     3       /* Reset controller every 4th retry */
  64 #define ERROR_RECAL     1       /* Recalibrate every 2nd retry */
  65 
  66 /*
  67  * Ensure that various configuration flags have compatible settings
  68  */
  69 #ifdef REALLY_SLOW_IO
  70 #undef REALLY_FAST_IO
  71 #endif
  72 
  73 /*
  74  * Definitions for accessing IDE controller registers
  75  */
  76 
  77 #define HWIF(drive)             ((ide_hwif_t *)((drive)->hwif))
  78 #define HWGROUP(drive)          ((ide_hwgroup_t *)(HWIF(drive)->hwgroup))
  79 
  80 #define IDE_DATA_OFFSET         (0)
  81 #define IDE_ERROR_OFFSET        (1)
  82 #define IDE_NSECTOR_OFFSET      (2)
  83 #define IDE_SECTOR_OFFSET       (3)
  84 #define IDE_LCYL_OFFSET         (4)
  85 #define IDE_HCYL_OFFSET         (5)
  86 #define IDE_SELECT_OFFSET       (6)
  87 #define IDE_STATUS_OFFSET       (7)
  88 #define IDE_FEATURE_OFFSET      IDE_ERROR_OFFSET
  89 #define IDE_COMMAND_OFFSET      IDE_STATUS_OFFSET
  90 
  91 #define IDE_DATA_REG            (HWIF(drive)->io_base+IDE_DATA_OFFSET)
  92 #define IDE_ERROR_REG           (HWIF(drive)->io_base+IDE_ERROR_OFFSET)
  93 #define IDE_NSECTOR_REG         (HWIF(drive)->io_base+IDE_NSECTOR_OFFSET)
  94 #define IDE_SECTOR_REG          (HWIF(drive)->io_base+IDE_SECTOR_OFFSET)
  95 #define IDE_LCYL_REG            (HWIF(drive)->io_base+IDE_LCYL_OFFSET)
  96 #define IDE_HCYL_REG            (HWIF(drive)->io_base+IDE_HCYL_OFFSET)
  97 #define IDE_SELECT_REG          (HWIF(drive)->io_base+IDE_SELECT_OFFSET)
  98 #define IDE_STATUS_REG          (HWIF(drive)->io_base+IDE_STATUS_OFFSET)
  99 #define IDE_CONTROL_REG         (HWIF(drive)->ctl_port)
 100 #define IDE_FEATURE_REG         IDE_ERROR_REG
 101 #define IDE_COMMAND_REG         IDE_STATUS_REG
 102 #define IDE_ALTSTATUS_REG       IDE_CONTROL_REG
 103 
 104 #ifdef REALLY_FAST_IO
 105 #define OUT_BYTE(b,p)           outb((b),(p))
 106 #define IN_BYTE(p)              (byte)inb(p)
 107 #else
 108 #define OUT_BYTE(b,p)           outb_p((b),(p))
 109 #define IN_BYTE(p)              (byte)inb_p(p)
 110 #endif /* REALLY_FAST_IO */
 111 
 112 #define GET_ERR()               IN_BYTE(IDE_ERROR_REG)
 113 #define GET_STAT()              IN_BYTE(IDE_STATUS_REG)
 114 #define OK_STAT(stat,good,bad)  (((stat)&((good)|(bad)))==(good))
 115 #define BAD_R_STAT              (BUSY_STAT   | ERR_STAT)
 116 #define BAD_W_STAT              (BAD_R_STAT  | WRERR_STAT)
 117 #define BAD_STAT                (BAD_R_STAT  | DRQ_STAT)
 118 #define DRIVE_READY             (READY_STAT  | SEEK_STAT)
 119 #define DATA_READY              (DRIVE_READY | DRQ_STAT)
 120 
 121 /*
 122  * Some more useful definitions
 123  */
 124 #define IDE_MAJOR_NAME  "ide"   /* the same for all i/f; see also genhd.c */
 125 #define MAJOR_NAME      IDE_MAJOR_NAME
 126 #define PARTN_BITS      6       /* number of minor dev bits for partitions */
 127 #define PARTN_MASK      ((1<<PARTN_BITS)-1)     /* a useful bit mask */
 128 #define MAX_DRIVES      2       /* per interface; 2 assumed by lots of code */
 129 #ifndef MAX_HWIFS
 130 #define MAX_HWIFS       4       /* an arbitrary, but realistic limit */
 131 #endif
 132 #define SECTOR_WORDS    (512 / 4)       /* number of 32bit words per sector */
 133 
 134 /*
 135  * Timeouts for various operations:
 136  */
 137 #define WAIT_DRQ        (5*HZ/100)      /* 50msec - spec allows up to 20ms */
 138 #define WAIT_READY      (3*HZ/100)      /* 30msec - should be instantaneous */
 139 #define WAIT_PIDENTIFY  (1*HZ)  /* 1sec   - should be less than 3ms (?) */
 140 #define WAIT_WORSTCASE  (30*HZ) /* 30sec  - worst case when spinning up */
 141 #define WAIT_CMD        (10*HZ) /* 10sec  - maximum wait for an IRQ to happen */
 142 
 143 #if defined(CONFIG_BLK_DEV_HT6560B) || defined(CONFIG_BLK_DEV_PROMISE)
 144 #define SELECT_DRIVE(hwif,drive)                                \
 145 {                                                               \
 146         if (hwif->selectproc)                                   \
 147                 hwif->selectproc(drive);                        \
 148         else                                                    \
 149                 OUT_BYTE((drive)->select.all, hwif->io_base+IDE_SELECT_OFFSET); \
 150 }
 151 #else
 152 #define SELECT_DRIVE(hwif,drive)  OUT_BYTE((drive)->select.all, hwif->io_base+IDE_SELECT_OFFSET);
 153 #endif  /* CONFIG_BLK_DEV_HT6560B || CONFIG_BLK_DEV_PROMISE */
 154                 
 155 #ifdef CONFIG_BLK_DEV_IDETAPE
 156 #include "ide-tape.h"
 157 #endif /* CONFIG_BLK_DEV_IDETAPE */
 158 
 159 #ifdef CONFIG_BLK_DEV_IDECD
 160 
 161 struct atapi_request_sense {
 162         unsigned char error_code : 7;
 163         unsigned char valid      : 1;
 164         byte reserved1;
 165         unsigned char sense_key  : 4;
 166         unsigned char reserved2  : 1;
 167         unsigned char ili        : 1;
 168         unsigned char reserved3  : 2;
 169         byte info[4];
 170         byte sense_len;
 171         byte command_info[4];
 172         byte asc;
 173         byte ascq;
 174         byte fru;
 175         byte sense_key_specific[3];
 176 };
 177 
 178 struct packet_command {
 179         char *buffer;
 180         int buflen;
 181         int stat;
 182         struct atapi_request_sense *sense_data;
 183         unsigned char c[12];
 184 };
 185 
 186 
 187 /* Structure of a MSF cdrom address. */
 188 struct atapi_msf {
 189         byte reserved;
 190         byte minute;
 191         byte second;
 192         byte frame;
 193 };
 194 
 195 
 196 /* Space to hold the disk TOC. */
 197 
 198 #define MAX_TRACKS 99
 199 struct atapi_toc_header {
 200         unsigned short toc_length;
 201         byte first_track;
 202         byte last_track;
 203 };
 204 
 205 struct atapi_toc_entry {
 206         byte reserved1;
 207         unsigned control : 4;
 208         unsigned adr     : 4;
 209         byte track;
 210         byte reserved2;
 211         union {
 212                 unsigned lba;
 213                 struct atapi_msf msf;
 214         } addr;
 215 };
 216 
 217 struct atapi_toc {
 218         int    last_session_lba;
 219         int    xa_flag;
 220         unsigned capacity;
 221         struct atapi_toc_header hdr;
 222         struct atapi_toc_entry  ent[MAX_TRACKS+1];
 223           /* One extra for the leadout. */
 224 };
 225 
 226 
 227 /* This structure is annoyingly close to, but not identical with,
 228    the cdrom_subchnl structure from cdrom.h. */
 229 struct atapi_cdrom_subchnl 
 230 {
 231         u_char  acdsc_reserved;
 232         u_char  acdsc_audiostatus;
 233         u_short acdsc_length;
 234         u_char  acdsc_format;
 235 
 236         u_char  acdsc_adr:      4;
 237         u_char  acdsc_ctrl:     4;
 238         u_char  acdsc_trk;
 239         u_char  acdsc_ind;
 240         union {
 241                 struct atapi_msf msf;
 242                 int     lba;
 243         } acdsc_absaddr;
 244         union {
 245                 struct atapi_msf msf;
 246                 int     lba;
 247         } acdsc_reladdr;
 248 };
 249 
 250 
 251 /* Extra per-device info for cdrom drives. */
 252 struct cdrom_info {
 253 
 254         /* Buffer for table of contents.  NULL if we haven't allocated
 255            a TOC buffer for this device yet. */
 256 
 257         struct atapi_toc *toc;
 258 
 259         /* Sector buffer.  If a read request wants only the first part
 260            of a cdrom block, we cache the rest of the block here,
 261            in the expectation that that data is going to be wanted soon.
 262            SECTOR_BUFFERED is the number of the first buffered sector,
 263            and NSECTORS_BUFFERED is the number of sectors in the buffer.
 264            Before the buffer is allocated, we should have
 265            SECTOR_BUFFER == NULL and NSECTORS_BUFFERED == 0. */
 266 
 267         unsigned long sector_buffered;
 268         unsigned long nsectors_buffered;
 269         char *sector_buffer;
 270 
 271         /* The result of the last successful request sense command
 272            on this device. */
 273         struct atapi_request_sense sense_data;
 274 };
 275 
 276 #endif /* CONFIG_BLK_DEV_IDECD */
 277 
 278 /*
 279  * Now for the data we need to maintain per-drive:  ide_drive_t
 280  */
 281 
 282 typedef enum {ide_disk, ide_cdrom, ide_tape} ide_media_t;
 283 
 284 typedef union {
 285         unsigned all                    : 8;    /* all of the bits together */
 286         struct {
 287                 unsigned set_geometry   : 1;    /* respecify drive geometry */
 288                 unsigned recalibrate    : 1;    /* seek to cyl 0      */
 289                 unsigned set_multmode   : 1;    /* set multmode count */
 290                 unsigned set_pio        : 1;    /* set pio mode */
 291                 unsigned reserved       : 4;    /* unused */
 292                 } b;
 293         } special_t;
 294 
 295 typedef union {
 296         unsigned all                    : 8;    /* all of the bits together */
 297         struct {
 298                 unsigned head           : 4;    /* always zeros here */
 299                 unsigned unit           : 1;    /* drive select number, 0 or 1 */
 300                 unsigned bit5           : 1;    /* always 1 */
 301                 unsigned lba            : 1;    /* using LBA instead of CHS */
 302                 unsigned bit7           : 1;    /* always 1 */
 303         } b;
 304         } select_t;
 305 
 306 typedef struct ide_drive_s {
 307         special_t       special;        /* special action flags */
 308         unsigned present        : 1;    /* drive is physically present */
 309         unsigned noprobe        : 1;    /* from:  hdx=noprobe */
 310         unsigned keep_settings  : 1;    /* restore settings after drive reset */
 311         unsigned busy           : 1;    /* currently doing revalidate_disk() */
 312         unsigned removeable     : 1;    /* 1 if need to do check_media_change */
 313         unsigned using_dma      : 1;    /* disk is using dma for read/write */
 314         unsigned forced_geom    : 1;    /* 1 if hdx=c,h,s was given at boot */
 315         unsigned unmask         : 1;    /* flag: okay to unmask other irqs */
 316         unsigned autotune       : 2;    /* 1=autotune, 2=noautotune, 0=default */
 317 #if FAKE_FDISK_FOR_EZDRIVE
 318         unsigned remap_0_to_1   : 1;    /* flag: partitioned with ezdrive */
 319 #endif /* FAKE_FDISK_FOR_EZDRIVE */
 320         ide_media_t     media;          /* disk, cdrom, tape */
 321         select_t        select;         /* basic drive/head select reg value */
 322         byte            ctl;            /* "normal" value for IDE_CONTROL_REG */
 323         byte            ready_stat;     /* min status value for drive ready */
 324         byte            mult_count;     /* current multiple sector setting */
 325         byte            mult_req;       /* requested multiple sector setting */
 326         byte            pio_req;        /* requested multiple sector setting */
 327         byte            io_32bit;       /* 0=16-bit, 1=32-bit, 2/3=32bit+sync */
 328         byte            bad_wstat;      /* used for ignoring WRERR_STAT */
 329         byte            sect0;          /* offset of first sector for DM6:DDO */
 330         byte            usage;          /* current "open()" count for drive */
 331         byte            head;           /* "real" number of heads */
 332         byte            sect;           /* "real" sectors per track */
 333         byte            bios_head;      /* BIOS/fdisk/LILO number of heads */
 334         byte            bios_sect;      /* BIOS/fdisk/LILO sectors per track */
 335         unsigned short  bios_cyl;       /* BIOS/fdisk/LILO number of cyls */
 336         unsigned short  cyl;            /* "real" number of cyls */
 337         void              *hwif;        /* actually (ide_hwif_t *) */
 338         struct wait_queue *wqueue;      /* used to wait for drive in open() */
 339         struct hd_driveid *id;          /* drive model identification info */
 340         struct hd_struct  *part;        /* drive partition table */
 341         char            name[4];        /* drive name, such as "hda" */
 342 #ifdef CONFIG_BLK_DEV_IDECD
 343         struct cdrom_info cdrom_info;   /* for ide-cd.c */
 344 #endif /* CONFIG_BLK_DEV_IDECD */
 345 #ifdef CONFIG_BLK_DEV_IDETAPE
 346         idetape_tape_t  tape;           /* for ide-tape.c */
 347 #endif /* CONFIG_BLK_DEV_IDETAPE */
 348         } ide_drive_t;
 349 
 350 /*
 351  * An ide_dmaproc_t() initiates/aborts DMA read/write operations on a drive.
 352  *
 353  * The caller is assumed to have selected the drive and programmed the drive's
 354  * sector address using CHS or LBA.  All that remains is to prepare for DMA
 355  * and then issue the actual read/write DMA/PIO command to the drive.
 356  *
 357  * Returns 0 if all went well.
 358  * Returns 1 if DMA read/write could not be started, in which case the caller
 359  * should either try again later, or revert to PIO for the current request.
 360  */
 361 typedef enum {  ide_dma_read = 0,       ide_dma_write = 1,
 362                 ide_dma_abort = 2,      ide_dma_check = 3,
 363                 ide_dma_status_bad = 4, ide_dma_transferred = 5,
 364                 ide_dma_begin = 6 }
 365         ide_dma_action_t;
 366 
 367 typedef int (ide_dmaproc_t)(ide_dma_action_t, ide_drive_t *);
 368 
 369 
 370 /*
 371  * An ide_tuneproc_t() is used to set the speed of an IDE interface
 372  * to a particular PIO mode.  The "byte" parameter is used
 373  * to select the PIO mode by number (0,1,2,3,4,5), and a value of 255
 374  * indicates that the interface driver should "auto-tune" the PIO mode
 375  * according to the drive capabilities in drive->id;
 376  *
 377  * Not all interface types support tuning, and not all of those
 378  * support all possible PIO settings.  They may silently ignore
 379  * or round values as they see fit.
 380  */
 381 typedef void (ide_tuneproc_t)(ide_drive_t *, byte);
 382 
 383 /*
 384  * This is used to provide HT6560B & PROMISE interface support.
 385  */
 386 typedef void (ide_selectproc_t) (ide_drive_t *);
 387 
 388 /*
 389  * hwif_chipset_t is used to keep track of the specific hardware
 390  * chipset used by each IDE interface, if known.
 391  */
 392 typedef enum {  ide_unknown,    ide_generic,    ide_triton,
 393                 ide_cmd640,     ide_dtc2278,    ide_ali14xx,
 394                 ide_qd6580,     ide_umc8672,    ide_ht6560b,
 395                 ide_promise }
 396         hwif_chipset_t;
 397 
 398 typedef struct hwif_s {
 399         struct hwif_s   *next;          /* for linked-list in ide_hwgroup_t */
 400         void            *hwgroup;       /* actually (ide_hwgroup_t *) */
 401         unsigned short  io_base;        /* base io port addr */
 402         unsigned short  ctl_port;       /* usually io_base+0x206 */
 403         ide_drive_t     drives[MAX_DRIVES];     /* drive info */
 404         struct gendisk  *gd;            /* gendisk structure */
 405         ide_tuneproc_t  *tuneproc;      /* routine to tune PIO mode for drives */
 406 #if defined(CONFIG_BLK_DEV_HT6560B) || defined(CONFIG_BLK_DEV_PROMISE)
 407         ide_selectproc_t *selectproc;   /* tweaks hardware to select drive */
 408 #endif
 409         ide_dmaproc_t   *dmaproc;       /* dma read/write/abort routine */
 410         unsigned long   *dmatable;      /* dma physical region descriptor table */
 411         unsigned short  dma_base;       /* base addr for dma ports (triton) */
 412         byte            irq;            /* our irq number */
 413         byte            major;          /* our major number */
 414         char            name[5];        /* name of interface, eg. "ide0" */
 415         byte            index;          /* 0 for ide0; 1 for ide1; ... */
 416         hwif_chipset_t  chipset;        /* sub-module for tuning.. */
 417         unsigned        noprobe    : 1; /* don't probe for this interface */
 418         unsigned        present    : 1; /* this interface exists */
 419         unsigned        serialized : 1; /* serialized operation with mate hwif */
 420         unsigned        no_unmask  : 1; /* disallow setting unmask bits */
 421         unsigned        got_irq    : 1; /* 1 = already alloc'd our irq */
 422 #ifdef CONFIG_BLK_DEV_PROMISE
 423         unsigned        is_promise2: 1; /* 2nd i/f on promose DC4030 */
 424 #endif /* CONFIG_BLK_DEV_PROMISE */
 425 #if (DISK_RECOVERY_TIME > 0)
 426         unsigned long   last_time;      /* time when previous rq was done */
 427 #endif
 428 #ifdef CONFIG_BLK_DEV_IDECD
 429         struct request request_sense_request;   /* from ide-cd.c */
 430         struct packet_command request_sense_pc; /* from ide-cd.c */
 431 #endif /* CONFIG_BLK_DEV_IDECD */
 432 #ifdef CONFIG_BLK_DEV_IDETAPE
 433         ide_drive_t     *tape_drive;    /* Pointer to the tape on this interface */
 434 #endif /* CONFIG_BLK_DEV_IDETAPE */
 435         } ide_hwif_t;
 436 
 437 /*
 438  *  internal ide interrupt handler type
 439  */
 440 typedef void (ide_handler_t)(ide_drive_t *);
 441 
 442 typedef struct hwgroup_s {
 443         ide_handler_t           *handler;/* irq handler, if active */
 444         ide_drive_t             *drive; /* current drive */
 445         ide_hwif_t              *hwif;  /* ptr to current hwif in linked-list */
 446         ide_hwif_t              *next_hwif; /* next selected hwif (for tape) */
 447         struct request          *rq;    /* current request */
 448         struct timer_list       timer;  /* failsafe timer */
 449         struct request          wrq;    /* local copy of current write rq */
 450         unsigned long           poll_timeout;   /* timeout value during long polls */
 451         } ide_hwgroup_t;
 452 
 453 /*
 454  * ide_hwifs[] is the master data structure used to keep track
 455  * of just about everything in ide.c.  Whenever possible, routines
 456  * should be using pointers to a drive (ide_drive_t *) or 
 457  * pointers to a hwif (ide_hwif_t *), rather than indexing this
 458  * structure directly (the allocation/layout may change!).
 459  */
 460 #ifdef _IDE_C
 461         ide_hwif_t      ide_hwifs[MAX_HWIFS];   /* master data repository */
 462 #else
 463 extern  ide_hwif_t      ide_hwifs[];
 464 #endif
 465 
 466 /*
 467  * One final include file, which references some of the data/defns from above
 468  */
 469 #define IDE_DRIVER      /* "parameter" for blk.h */
 470 #include <linux/blk.h>
 471 
 472 #if (DISK_RECOVERY_TIME > 0)
 473 void ide_set_recovery_timer (ide_hwif_t *);
 474 #define SET_RECOVERY_TIMER(drive) ide_set_recovery_timer (drive)
 475 #else
 476 #define SET_RECOVERY_TIMER(drive)
 477 #endif
 478 
 479 /*
 480  * This is used for (nearly) all data transfers from the IDE interface
 481  */
 482 void ide_input_data (ide_drive_t *drive, void *buffer, unsigned int wcount);
 483 
 484 /*
 485  * This is used for (nearly) all data transfers to the IDE interface
 486  */
 487 void ide_output_data (ide_drive_t *drive, void *buffer, unsigned int wcount);
 488 
 489 /*
 490  * This is used on exit from the driver, to designate the next irq handler
 491  * and also to start the safety timer.
 492  */
 493 void ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, unsigned int timeout);
 494 
 495 /*
 496  * Error reporting, in human readable form (luxurious, but a memory hog).
 497  */
 498 byte ide_dump_status (ide_drive_t *drive, const char *msg, byte stat);
 499 
 500 /*
 501  * ide_error() takes action based on the error returned by the controller.
 502  * The calling function must return afterwards, to restart the request.
 503  */
 504 void ide_error (ide_drive_t *drive, const char *msg, byte stat);
 505 
 506 /*
 507  * ide_fixstring() cleans up and (optionally) byte-swaps a text string,
 508  * removing leading/trailing blanks and compressing internal blanks.
 509  * It is primarily used to tidy up the model name/number fields as
 510  * returned by the WIN_[P]IDENTIFY commands.
 511  */
 512 void ide_fixstring (byte *s, const int bytecount, const int byteswap);
 513 
 514 /*
 515  * This routine busy-waits for the drive status to be not "busy".
 516  * It then checks the status for all of the "good" bits and none
 517  * of the "bad" bits, and if all is okay it returns 0.  All other
 518  * cases return 1 after invoking ide_error() -- caller should return.
 519  *
 520  */
 521 int ide_wait_stat (ide_drive_t *drive, byte good, byte bad, unsigned long timeout);
 522 
 523 /*
 524  * This routine is called from the partition-table code in genhd.c
 525  * to "convert" a drive to a logical geometry with fewer than 1024 cyls.
 526  *
 527  * The second parameter, "xparm", determines exactly how the translation
 528  * will be handled:
 529  *               0 = convert to CHS with fewer than 1024 cyls
 530  *                      using the same method as Ontrack DiskManager.
 531  *               1 = same as "0", plus offset everything by 63 sectors.
 532  *              -1 = similar to "0", plus redirect sector 0 to sector 1.
 533  *              >1 = convert to a CHS geometry with "xparm" heads.
 534  *
 535  * Returns 0 if the translation was not possible, if the device was not
 536  * an IDE disk drive, or if a geometry was "forced" on the commandline.
 537  * Returns 1 if the geometry translation was successful.
 538  */
 539 int ide_xlate_1024 (kdev_t, int, const char *);
 540 
 541 /*
 542  * Start a reset operation for an IDE interface.
 543  * The caller should return immediately after invoking this.
 544  */
 545 void ide_do_reset (ide_drive_t *);
 546 
 547 /*
 548  * This function is intended to be used prior to invoking ide_do_drive_cmd().
 549  */
 550 void ide_init_drive_cmd (struct request *rq);
 551 
 552 /*
 553  * "action" parameter type for ide_do_drive_cmd() below.
 554  */
 555 typedef enum
 556         {ide_wait,      /* insert rq at end of list, and wait for it */
 557          ide_next,      /* insert rq immediately after current request */
 558          ide_preempt,   /* insert rq in front of current request */
 559          ide_end}       /* insert rq at end of list, but don't wait for it */
 560  ide_action_t;
 561 
 562 /*
 563  * This function issues a special IDE device request
 564  * onto the request queue.
 565  *
 566  * If action is ide_wait, then then rq is queued at the end of
 567  * the request queue, and the function sleeps until it has been
 568  * processed.  This is for use when invoked from an ioctl handler.
 569  *
 570  * If action is ide_preempt, then the rq is queued at the head of
 571  * the request queue, displacing the currently-being-processed
 572  * request and this function returns immediately without waiting
 573  * for the new rq to be completed.  This is VERY DANGEROUS, and is
 574  * intended for careful use by the ATAPI tape/cdrom driver code.
 575  *
 576  * If action is ide_next, then the rq is queued immediately after
 577  * the currently-being-processed-request (if any), and the function
 578  * returns without waiting for the new rq to be completed.  As above,
 579  * This is VERY DANGEROUS, and is intended for careful use by the 
 580  * ATAPI tape/cdrom driver code.
 581  *
 582  * If action is ide_end, then the rq is queued at the end of the
 583  * request queue, and the function returns immediately without waiting
 584  * for the new rq to be completed. This is again intended for careful
 585  * use by the ATAPI tape/cdrom driver code. (Currently used by ide-tape.c,
 586  * when operating in the pipelined operation mode).
 587  */
 588 int ide_do_drive_cmd (ide_drive_t *drive, struct request *rq, ide_action_t action);
 589  
 590 /*
 591  * Clean up after success/failure of an explicit drive cmd.
 592  * stat/err are used only when (HWGROUP(drive)->rq->cmd == IDE_DRIVE_CMD).
 593  */
 594 void ide_end_drive_cmd (ide_drive_t *drive, byte stat, byte err);
 595 
 596 /*
 597  * ide_multwrite() transfers a block of up to mcount sectors of data
 598  * to a drive as part of a disk multwrite operation.
 599  */
 600 void ide_multwrite (ide_drive_t *drive, unsigned int mcount);
 601 
 602 #ifdef CONFIG_BLK_DEV_IDECD
 603 /*
 604  * These are routines in ide-cd.c invoked from ide.c
 605  */
 606 void ide_do_rw_cdrom (ide_drive_t *, unsigned long);
 607 int ide_cdrom_ioctl (ide_drive_t *, struct inode *, struct file *, unsigned int, unsigned long);
 608 int ide_cdrom_check_media_change (ide_drive_t *);
 609 int ide_cdrom_open (struct inode *, struct file *, ide_drive_t *);
 610 void ide_cdrom_release (struct inode *, struct file *, ide_drive_t *);
 611 void ide_cdrom_setup (ide_drive_t *);
 612 #endif /* CONFIG_BLK_DEV_IDECD */
 613 
 614 #ifdef CONFIG_BLK_DEV_IDETAPE
 615 
 616 /*
 617  *      Functions in ide-tape.c which are invoked from ide.c:
 618  */
 619 
 620 /*
 621  *      idetape_identify_device is called during device probing stage to
 622  *      probe for an ide atapi tape drive and to initialize global variables
 623  *      in ide-tape.c which provide the link between the character device
 624  *      and the correspoding block device.
 625  *
 626  *      Returns 1 if an ide tape was detected and is supported.
 627  *      Returns 0 otherwise.
 628  */
 629  
 630 int idetape_identify_device (ide_drive_t *drive,struct hd_driveid *id);
 631 
 632 /*
 633  *      idetape_setup is called a bit later than idetape_identify_device,
 634  *      during the search for disk partitions, to initialize various tape
 635  *      state variables in ide_drive_t *drive.
 636  */
 637  
 638 void idetape_setup (ide_drive_t *drive);
 639 
 640 /*
 641  *      idetape_do_request is our request function. It is called by ide.c
 642  *      to process a new request.
 643  */
 644 
 645 void idetape_do_request (ide_drive_t *drive, struct request *rq, unsigned long block);
 646 
 647 /*
 648  *      idetape_end_request is used to finish servicing a request, and to
 649  *      insert a pending pipeline request into the main device queue.
 650  */
 651  
 652 void idetape_end_request (byte uptodate, ide_hwgroup_t *hwgroup);
 653 
 654 /*
 655  *      Block device interface functions.
 656  */
 657   
 658 int idetape_blkdev_ioctl (ide_drive_t *drive, struct inode *inode, struct file *file,
 659                         unsigned int cmd, unsigned long arg);
 660 int idetape_blkdev_open (struct inode *inode, struct file *filp, ide_drive_t *drive);
 661 void idetape_blkdev_release (struct inode *inode, struct file *filp, ide_drive_t *drive);
 662 
 663 /*
 664  *      idetape_register_chrdev initializes the character device interface to
 665  *      the ide tape drive.
 666  */
 667  
 668 void idetape_register_chrdev (void);
 669 
 670 #endif /* CONFIG_BLK_DEV_IDETAPE */
 671 
 672 #ifdef CONFIG_BLK_DEV_TRITON
 673 void ide_init_triton (byte, byte);
 674 #endif /* CONFIG_BLK_DEV_TRITON */

/* [previous][next][first][last][top][bottom][index][help] */