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 DISK_RECOVERY_TIME              /* off=0; on=access_delay_time */
  29 #define DISK_RECOVERY_TIME      0       /*  for hardware that needs it */
  30 #endif
  31 #ifndef OK_TO_RESET_CONTROLLER          /* 1 needed for good error recovery */
  32 #define OK_TO_RESET_CONTROLLER  1       /* 0 for use with AH2372A/B interface */
  33 #endif
  34 #ifndef FAKE_FDISK_FOR_EZDRIVE          /* 1 to help linux fdisk with EZDRIVE */
  35 #define FAKE_FDISK_FOR_EZDRIVE  1       /* 0 to reduce kernel size */
  36 #endif
  37 #ifndef SUPPORT_RZ1000                  /* 1 to support RZ1000 chipset */
  38 #define SUPPORT_RZ1000          1       /* 0 to reduce kernel size */
  39 #endif
  40 #ifndef SUPPORT_CMD640                  /* 1 to support CMD640 chipset */
  41 #define SUPPORT_CMD640          1       /* 0 to reduce kernel size */
  42 #endif
  43 #ifndef SUPPORT_UMC8672                 /* 1 to support UMC8672 chipset */
  44 #define SUPPORT_UMC8672         1       /* 0 to reduce kernel size */
  45 #endif
  46 #ifndef SUPPORT_HT6560B                 /* 1 to support HT6560B chipset */
  47 #define SUPPORT_HT6560B         1       /* 0 to reduce kernel size */
  48 #endif
  49 #ifndef SUPPORT_QD6580                  /* 1 to support QD6580 chipset */
  50 #define SUPPORT_QD6580          1       /* 0 to reduce kernel size */
  51 #endif
  52 #ifndef SUPPORT_DTC2278                 /* 1 to support DTC2278 chipset */
  53 #define SUPPORT_DTC2278         1       /* 0 to reduce kernel size */
  54 #ifndef SET_DTC2278_MODE4
  55 #define SET_DTC2278_MODE4       0       /* 1 to init primary i/f for PIO mode4 */
  56 #endif
  57 #endif
  58 #ifndef FANCY_STATUS_DUMPS              /* 1 for human-readable drive errors */
  59 #define FANCY_STATUS_DUMPS      1       /* 0 to reduce kernel size */
  60 #endif
  61 
  62 /*
  63  * IDE_DRIVE_CMD is used to implement many features of the hdparm utility
  64  */
  65 #define IDE_DRIVE_CMD           99      /* (magic) undef to reduce kernel size*/
  66 
  67 /*
  68  *  "No user-serviceable parts" beyond this point  :)
  69  *****************************************************************************/
  70 
  71 typedef unsigned char   byte;   /* used everywhere */
  72 
  73 /*
  74  * Probably not wise to fiddle with these
  75  */
  76 #define ERROR_MAX       8       /* Max read/write errors per sector */
  77 #define ERROR_RESET     3       /* Reset controller every 4th retry */
  78 #define ERROR_RECAL     1       /* Recalibrate every 2nd retry */
  79 
  80 /*
  81  * Ensure that various configuration flags have compatible settings
  82  */
  83 #ifdef REALLY_SLOW_IO
  84 #undef REALLY_FAST_IO
  85 #endif
  86 
  87 /*
  88  * Definitions for accessing IDE controller registers
  89  */
  90 
  91 #define HWIF(drive)             ((ide_hwif_t *)drive->hwif)
  92 #define HWGROUP(drive)          ((ide_hwgroup_t *)(HWIF(drive)->hwgroup))
  93 
  94 #define IDE_DATA_OFFSET         (0)
  95 #define IDE_ERROR_OFFSET        (1)
  96 #define IDE_NSECTOR_OFFSET      (2)
  97 #define IDE_SECTOR_OFFSET       (3)
  98 #define IDE_LCYL_OFFSET         (4)
  99 #define IDE_HCYL_OFFSET         (5)
 100 #define IDE_SELECT_OFFSET       (6)
 101 #define IDE_STATUS_OFFSET       (7)
 102 #define IDE_FEATURE_OFFSET      IDE_ERROR_OFFSET
 103 #define IDE_COMMAND_OFFSET      IDE_STATUS_OFFSET
 104 
 105 #define IDE_DATA_REG            (HWIF(drive)->io_base+IDE_DATA_OFFSET)
 106 #define IDE_ERROR_REG           (HWIF(drive)->io_base+IDE_ERROR_OFFSET)
 107 #define IDE_NSECTOR_REG         (HWIF(drive)->io_base+IDE_NSECTOR_OFFSET)
 108 #define IDE_SECTOR_REG          (HWIF(drive)->io_base+IDE_SECTOR_OFFSET)
 109 #define IDE_LCYL_REG            (HWIF(drive)->io_base+IDE_LCYL_OFFSET)
 110 #define IDE_HCYL_REG            (HWIF(drive)->io_base+IDE_HCYL_OFFSET)
 111 #define IDE_SELECT_REG          (HWIF(drive)->io_base+IDE_SELECT_OFFSET)
 112 #define IDE_STATUS_REG          (HWIF(drive)->io_base+IDE_STATUS_OFFSET)
 113 #define IDE_CONTROL_REG         (HWIF(drive)->ctl_port)
 114 #define IDE_FEATURE_REG         IDE_ERROR_REG
 115 #define IDE_COMMAND_REG         IDE_STATUS_REG
 116 #define IDE_ALTSTATUS_REG       IDE_CONTROL_REG
 117 
 118 #ifdef REALLY_FAST_IO
 119 #define OUT_BYTE(b,p)           outb((b),p)
 120 #define IN_BYTE(p)              (byte)inb(p)
 121 #else
 122 #define OUT_BYTE(b,p)           outb_p((b),p)
 123 #define IN_BYTE(p)              (byte)inb_p(p)
 124 #endif /* REALLY_FAST_IO */
 125 
 126 #define GET_ERR()               IN_BYTE(IDE_ERROR_REG)
 127 #define GET_STAT()              IN_BYTE(IDE_STATUS_REG)
 128 #define OK_STAT(stat,good,bad)  (((stat)&((good)|(bad)))==(good))
 129 #define BAD_R_STAT              (BUSY_STAT   | ERR_STAT)
 130 #define BAD_W_STAT              (BAD_R_STAT  | WRERR_STAT)
 131 #define BAD_STAT                (BAD_R_STAT  | DRQ_STAT)
 132 #define DRIVE_READY             (READY_STAT  | SEEK_STAT)
 133 #define DATA_READY              (DRIVE_READY | DRQ_STAT)
 134 
 135 /*
 136  * Some more useful definitions
 137  */
 138 #define IDE_MAJOR_NAME  "ide"   /* the same for all i/f; see also genhd.c */
 139 #define MAJOR_NAME      IDE_MAJOR_NAME
 140 #define PARTN_BITS      6       /* number of minor dev bits for partitions */
 141 #define PARTN_MASK      ((1<<PARTN_BITS)-1)     /* a useful bit mask */
 142 #define MAX_DRIVES      2       /* per interface; 2 assumed by lots of code */
 143 #define MAX_HWIFS       4       /* an arbitrary, but realistic limit */
 144 #define SECTOR_WORDS    (512 / 4)       /* number of 32bit words per sector */
 145 
 146 /*
 147  * Timeouts for various operations:
 148  */
 149 #define WAIT_DRQ        (5*HZ/100)      /* 50msec - spec allows up to 20ms */
 150 #define WAIT_READY      (3*HZ/100)      /* 30msec - should be instantaneous */
 151 #define WAIT_PIDENTIFY  (1*HZ)  /* 1sec   - should be less than 3ms (?) */
 152 #define WAIT_WORSTCASE  (30*HZ) /* 30sec  - worst case when spinning up */
 153 #define WAIT_CMD        (10*HZ) /* 10sec  - maximum wait for an IRQ to happen */
 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 /* Space to hold the disk TOC. */
 187 
 188 #define MAX_TRACKS 99
 189 struct atapi_toc_header {
 190   unsigned short toc_length;
 191   byte first_track;
 192   byte last_track;
 193 };
 194 
 195 struct atapi_toc_entry {
 196   byte reserved1;
 197   unsigned control : 4;
 198   unsigned adr     : 4;
 199   byte track;
 200   byte reserved2;
 201   unsigned lba;
 202 };
 203 
 204 struct atapi_toc {
 205   int    last_session_lba;
 206   int    xa_flag;
 207   unsigned capacity;
 208   struct atapi_toc_header hdr;
 209   struct atapi_toc_entry  ent[MAX_TRACKS+1];  /* One extra for the leadout. */
 210 };
 211 
 212 /* Extra per-device info for cdrom drives. */
 213 struct cdrom_info {
 214 
 215   /* Buffer for table of contents.  NULL if we haven't allocated
 216      a TOC buffer for this device yet. */
 217 
 218   struct atapi_toc *toc;
 219 
 220   /* Sector buffer.  If a read request wants only the first part of a cdrom
 221      block, we cache the rest of the block here, in the expectation that that
 222      data is going to be wanted soon.  SECTOR_BUFFERED is the number of the
 223      first buffered sector, and NSECTORS_BUFFERED is the number of sectors
 224      in the buffer.  Before the buffer is allocated, we should have
 225      SECTOR_BUFFER == NULL and NSECTORS_BUFFERED == 0. */
 226 
 227   unsigned long sector_buffered;
 228   unsigned long nsectors_buffered;
 229   char *sector_buffer;
 230 
 231   /* The result of the last successful request sense command
 232      on this device. */
 233   struct atapi_request_sense sense_data;
 234 };
 235 
 236 #endif /* CONFIG_BLK_DEV_IDECD */
 237 
 238 /*
 239  * Now for the data we need to maintain per-drive:  ide_drive_t
 240  */
 241 
 242 typedef enum {ide_disk, ide_cdrom, ide_tape} ide_media_t;
 243 
 244 typedef union {
 245         unsigned all                    : 8;    /* all of the bits together */
 246         struct {
 247                 unsigned set_geometry   : 1;    /* respecify drive geometry */
 248                 unsigned recalibrate    : 1;    /* seek to cyl 0      */
 249                 unsigned set_multmode   : 1;    /* set multmode count */
 250                 unsigned reserved       : 5;    /* unused */
 251                 } b;
 252         } special_t;
 253 
 254 typedef union {
 255         unsigned all                    : 8;    /* all of the bits together */
 256         struct {
 257                 unsigned head           : 4;    /* always zeros here */
 258                 unsigned unit           : 1;    /* drive select number, 0 or 1 */
 259                 unsigned bit5           : 1;    /* always 1 */
 260                 unsigned lba            : 1;    /* using LBA instead of CHS */
 261                 unsigned bit7           : 1;    /* always 1 */
 262         } b;
 263         } select_t;
 264 
 265 typedef struct ide_drive_s {
 266         special_t       special;        /* special action flags */
 267 #if FAKE_FDISK_FOR_EZDRIVE
 268         unsigned ezdrive        : 1;    /* flag: partitioned with ezdrive */
 269 #endif /* FAKE_FDISK_FOR_EZDRIVE */
 270         unsigned present        : 1;    /* drive is physically present */
 271         unsigned noprobe        : 1;    /* from:  hdx=noprobe */
 272         unsigned keep_settings  : 1;    /* restore settings after drive reset */
 273         unsigned busy           : 1;    /* currently doing revalidate_disk() */
 274         unsigned vlb_32bit      : 1;    /* use 32bit in/out for data */
 275         unsigned vlb_sync       : 1;    /* needed for some 32bit chip sets */
 276         unsigned removeable     : 1;    /* 1 if need to do check_media_change */
 277         unsigned using_dma      : 1;    /* disk is using dma for read/write */
 278         unsigned unmask         : 1;    /* flag: okay to unmask other irqs */
 279         ide_media_t     media;          /* disk, cdrom, tape */
 280         select_t        select;         /* basic drive/head select reg value */
 281         void            *hwif;          /* actually (ide_hwif_t *) */
 282         byte            ctl;            /* "normal" value for IDE_CONTROL_REG */
 283         byte            ready_stat;     /* min status value for drive ready */
 284         byte            mult_count;     /* current multiple sector setting */
 285         byte            mult_req;       /* requested multiple sector setting */
 286         byte            chipset;        /* interface chipset access method */
 287         byte            bad_wstat;      /* used for ignoring WRERR_STAT */
 288         byte            sect0;          /* offset of first sector for DM6:DDO */
 289         byte            usage;          /* current "open()" count for drive */
 290         byte            head;           /* "real" number of heads */
 291         byte            sect;           /* "real" sectors per track */
 292         byte            bios_head;      /* BIOS/fdisk/LILO number of heads */
 293         byte            bios_sect;      /* BIOS/fdisk/LILO sectors per track */
 294         unsigned short  bios_cyl;       /* BIOS/fdisk/LILO number of cyls */
 295         unsigned short  cyl;            /* "real" number of cyls */
 296         struct wait_queue *wqueue;      /* used to wait for drive in open() */
 297         struct hd_driveid *id;          /* drive model identification info */
 298         struct hd_struct  *part;        /* drive partition table */
 299         char            name[4];        /* drive name, such as "hda" */
 300 #ifdef CONFIG_BLK_DEV_IDECD
 301         struct cdrom_info cdrom_info;   /* from ide-cd.c */
 302 #endif /* CONFIG_BLK_DEV_IDECD */
 303 
 304 #ifdef CONFIG_BLK_DEV_IDETAPE           /* ide-tape specific data */
 305 
 306 /*
 307  *      Most of our global data which we need to save even as we leave the
 308  *      driver due to an interrupt or a timer event is stored here.
 309  *
 310  *      Additional global variables which provide the link between the
 311  *      character device interface to this structure are defined in
 312  *      ide-tape.c
 313  */
 314 
 315         idetape_tape_t tape;
 316 
 317 #endif /* CONFIG_BLK_DEV_IDETAPE */
 318 
 319         } ide_drive_t;
 320 
 321 /*
 322  * An ide_dmaproc_t() initiates/aborts DMA read/write operations on a drive.
 323  *
 324  * The caller is assumed to have selected the drive and programmed the drive's
 325  * sector address using CHS or LBA.  All that remains is to prepare for DMA
 326  * and then issue the actual read/write DMA/PIO command to the drive.
 327  *
 328  * Returns 0 if all went well.
 329  * Returns 1 if DMA read/write could not be started, in which case the caller
 330  * should either try again later, or revert to PIO for the current request.
 331  */
 332 typedef enum {ide_dma_read = 0, ide_dma_write = 1, ide_dma_abort = 2, ide_dma_check = 3} ide_dma_action_t;
 333 typedef int (ide_dmaproc_t)(ide_dma_action_t, ide_drive_t *);
 334 
 335 typedef struct hwif_s {
 336         struct hwif_s   *next;          /* for linked-list in ide_hwgroup_t */
 337         void            *hwgroup;       /* actually (ide_hwgroup_t *) */
 338         unsigned short  io_base;        /* base io port addr */
 339         unsigned short  ctl_port;       /* usually io_base+0x206 */
 340         ide_drive_t     drives[MAX_DRIVES];     /* drive info */
 341         struct gendisk  *gd;            /* gendisk structure */
 342         ide_dmaproc_t   *dmaproc;       /* dma read/write/abort routine */
 343         unsigned long   *dmatable;      /* dma physical region descriptor table */
 344         unsigned short  dma_base;       /* base addr for dma ports (triton) */
 345         byte            irq;            /* our irq number */
 346         byte            major;          /* our major number */
 347         byte            select;         /* pri/sec hwif select for ht6560b */
 348         char            name[5];        /* name of interface, eg. "ide0" */
 349         unsigned        noprobe : 1;    /* don't probe for this interface */
 350         unsigned        present : 1;    /* this interface exists */
 351 #if (DISK_RECOVERY_TIME > 0)
 352         unsigned long   last_time;      /* time when previous rq was done */
 353 #endif
 354 #ifdef CONFIG_BLK_DEV_IDECD
 355         struct request request_sense_request;   /* from ide-cd.c */
 356         struct packet_command request_sense_pc; /* from ide-cd.c */
 357 #endif /* CONFIG_BLK_DEV_IDECD */
 358 #ifdef CONFIG_BLK_DEV_IDETAPE
 359         ide_drive_t     *tape_drive;    /* Pointer to the tape on this interface */
 360 #endif /* CONFIG_BLK_DEV_IDETAPE */
 361         } ide_hwif_t;
 362 
 363 /*
 364  *  internal ide interrupt handler type
 365  */
 366 typedef void (ide_handler_t)(ide_drive_t *);
 367 
 368 typedef struct hwgroup_s {
 369         ide_handler_t           *handler;/* irq handler, if active */
 370         ide_drive_t             *drive; /* current drive */
 371         ide_hwif_t              *hwif;  /* ptr to current hwif in linked-list */
 372         struct request          *rq;    /* current request */
 373         struct timer_list       timer;  /* failsafe timer */
 374         struct request          wrq;    /* local copy of current write rq */
 375         unsigned long           poll_timeout;   /* timeout value during long polls */
 376         } ide_hwgroup_t;
 377 
 378 /*
 379  * One final include file, which references some of the data/defns from above
 380  */
 381 #define IDE_DRIVER      /* "parameter" for blk.h */
 382 #include <linux/blk.h>
 383 
 384 #if (DISK_RECOVERY_TIME > 0)
 385 void ide_set_recovery_timer (ide_hwif_t *);
 386 #define SET_RECOVERY_TIMER(drive) ide_set_recovery_timer (drive)
 387 #else
 388 #define SET_RECOVERY_TIMER(drive)
 389 #endif
 390 
 391 /*
 392  * This is used for (nearly) all data transfers from the IDE interface
 393  */
 394 void ide_input_data (ide_drive_t *drive, void *buffer, unsigned int wcount);
 395 
 396 /*
 397  * This is used for (nearly) all data transfers to the IDE interface
 398  */
 399 void ide_output_data (ide_drive_t *drive, void *buffer, unsigned int wcount);
 400 
 401 /*
 402  * This is used on exit from the driver, to designate the next irq handler
 403  * and also to start the safety timer.
 404  */
 405 void ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, unsigned int timeout);
 406 
 407 /*
 408  * Error reporting, in human readable form (luxurious, but a memory hog).
 409  */
 410 byte ide_dump_status (ide_drive_t *drive, const char *msg, byte stat);
 411 
 412 /*
 413  * ide_error() takes action based on the error returned by the controller.
 414  * The calling function must return afterwards, to restart the request.
 415  */
 416 void ide_error (ide_drive_t *drive, const char *msg, byte stat);
 417 
 418 /*
 419  * ide_fixstring() cleans up and (optionally) byte-swaps a text string,
 420  * removing leading/trailing blanks and compressing internal blanks.
 421  * It is primarily used to tidy up the model name/number fields as
 422  * returned by the WIN_[P]IDENTIFY commands.
 423  */
 424 void ide_fixstring (byte *s, const int bytecount, const int byteswap);
 425 
 426 /*
 427  * This routine busy-waits for the drive status to be not "busy".
 428  * It then checks the status for all of the "good" bits and none
 429  * of the "bad" bits, and if all is okay it returns 0.  All other
 430  * cases return 1 after invoking ide_error() -- caller should return.
 431  *
 432  */
 433 int ide_wait_stat (ide_drive_t *drive, byte good, byte bad, unsigned long timeout);
 434 
 435 /*
 436  * This is called from genhd.c to correct DiskManager/EZ-Drive geometries
 437  */
 438 int ide_xlate_1024(kdev_t, int, const char *);
 439 
 440 /*
 441  * Start a reset operation for an IDE interface.
 442  * The caller should return immediately after invoking this.
 443  */
 444 void ide_do_reset (ide_drive_t *);
 445 
 446 /*
 447  * This function is intended to be used prior to invoking ide_do_drive_cmd().
 448  */
 449 void ide_init_drive_cmd (struct request *rq);
 450 
 451 /*
 452  * "action" parameter type for ide_do_drive_cmd() below.
 453  */
 454 typedef enum
 455         {ide_wait,      /* insert rq at end of list, and wait for it */
 456          ide_next,      /* insert rq immediately after current request */
 457          ide_preempt,   /* insert rq in front of current request */
 458          ide_end}       /* insert rq at end of list, but don't wait for it */
 459  ide_action_t;
 460 
 461 /*
 462  * This function issues a special IDE device request
 463  * onto the request queue.
 464  *
 465  * If action is ide_wait, then then rq is queued at the end of
 466  * the request queue, and the function sleeps until it has been
 467  * processed.  This is for use when invoked from an ioctl handler.
 468  *
 469  * If action is ide_preempt, then the rq is queued at the head of
 470  * the request queue, displacing the currently-being-processed
 471  * request and this function returns immediately without waiting
 472  * for the new rq to be completed.  This is VERY DANGEROUS, and is
 473  * intended for careful use by the ATAPI tape/cdrom driver code.
 474  *
 475  * If action is ide_next, then the rq is queued immediately after
 476  * the currently-being-processed-request (if any), and the function
 477  * returns without waiting for the new rq to be completed.  As above,
 478  * This is VERY DANGEROUS, and is intended for careful use by the 
 479  * ATAPI tape/cdrom driver code.
 480  *
 481  * If action is ide_end, then the rq is queued at the end of the
 482  * request queue, and the function returns immediately without waiting
 483  * for the new rq to be completed. This is again intended for careful
 484  * use by the ATAPI tape/cdrom driver code. (Currently used by ide-tape.c,
 485  * when operating in the pipelined operation mode).
 486  */
 487 int ide_do_drive_cmd (ide_drive_t *drive, struct request *rq, ide_action_t action);
 488  
 489 /*
 490  * Clean up after success/failure of an explicit drive cmd.
 491  * stat/err are used only when (HWGROUP(drive)->rq->cmd == IDE_DRIVE_CMD).
 492  */
 493 void ide_end_drive_cmd (ide_drive_t *drive, byte stat, byte err);
 494 
 495 #ifdef CONFIG_BLK_DEV_IDECD
 496 /*
 497  * These are routines in ide-cd.c invoked from ide.c
 498  */
 499 void ide_do_rw_cdrom (ide_drive_t *, unsigned long);
 500 int ide_cdrom_ioctl (ide_drive_t *, struct inode *, struct file *, unsigned int, unsigned long);
 501 int ide_cdrom_check_media_change (ide_drive_t *);
 502 int ide_cdrom_open (struct inode *, struct file *, ide_drive_t *);
 503 void ide_cdrom_release (struct inode *, struct file *, ide_drive_t *);
 504 void ide_cdrom_setup (ide_drive_t *);
 505 #endif /* CONFIG_BLK_DEV_IDECD */
 506 
 507 #ifdef CONFIG_BLK_DEV_IDETAPE
 508 
 509 /*
 510  *      Functions in ide-tape.c which are invoked from ide.c:
 511  */
 512 
 513 /*
 514  *      idetape_identify_device is called during device probing stage to
 515  *      probe for an ide atapi tape drive and to initialize global variables
 516  *      in ide-tape.c which provide the link between the character device
 517  *      and the correspoding block device.
 518  *
 519  *      Returns 1 if an ide tape was detected and is supported.
 520  *      Returns 0 otherwise.
 521  */
 522  
 523 int idetape_identify_device (ide_drive_t *drive,struct hd_driveid *id);
 524 
 525 /*
 526  *      idetape_setup is called a bit later than idetape_identify_device,
 527  *      during the search for disk partitions, to initialize various tape
 528  *      state variables in ide_drive_t *drive.
 529  */
 530  
 531 void idetape_setup (ide_drive_t *drive);
 532 
 533 /*
 534  *      idetape_do_request is our request function. It is called by ide.c
 535  *      to process a new request.
 536  */
 537 
 538 void idetape_do_request (ide_drive_t *drive, struct request *rq, unsigned long block);
 539 
 540 /*
 541  *      Block device interface functions.
 542  */
 543   
 544 int idetape_blkdev_ioctl (ide_drive_t *drive, struct inode *inode, struct file *file,
 545                         unsigned int cmd, unsigned long arg);
 546 int idetape_blkdev_open (struct inode *inode, struct file *filp, ide_drive_t *drive);
 547 void idetape_blkdev_release (struct inode *inode, struct file *filp, ide_drive_t *drive);
 548 
 549 /*
 550  *      idetape_register_chrdev initializes the character device interface to
 551  *      the ide tape drive.
 552  */
 553  
 554 void idetape_register_chrdev (void);
 555 
 556 /*
 557  *      The following function is called to re-insert a postponed tape
 558  *      request into the request queue.
 559  */
 560  
 561 void idetape_put_back_postponed_request (ide_drive_t *drive);
 562 
 563 #endif /* CONFIG_BLK_DEV_IDETAPE */
 564 
 565 #ifdef CONFIG_BLK_DEV_TRITON
 566 void ide_init_triton (byte, byte);
 567 #endif /* CONFIG_BLK_DEV_TRITON */
 568 

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