linux-old/include/linux/blk.h
<<
>>
Prefs
   1#ifndef _BLK_H
   2#define _BLK_H
   3
   4#include <linux/blkdev.h>
   5#include <linux/locks.h>
   6#include <linux/config.h>
   7#include <linux/spinlock.h>
   8
   9/*
  10 * Spinlock for protecting the request queue which
  11 * is mucked around with in interrupts on potentially
  12 * multiple CPU's..
  13 */
  14extern spinlock_t io_request_lock;
  15
  16/*
  17 * Initialization functions.
  18 */
  19extern int isp16_init(void);
  20extern int cdu31a_init(void);
  21extern int acsi_init(void);
  22extern int mcd_init(void);
  23extern int mcdx_init(void);
  24extern int sbpcd_init(void);
  25extern int aztcd_init(void);
  26extern int sony535_init(void);
  27extern int gscd_init(void);
  28extern int cm206_init(void);
  29extern int optcd_init(void);
  30extern int sjcd_init(void);
  31extern int cdi_init(void);
  32extern int hd_init(void);
  33extern int ide_init(void);
  34extern int xd_init(void);
  35extern int mfm_init(void);
  36extern int loop_init(void);
  37extern int md_init(void);
  38extern int ap_init(void);
  39extern int ddv_init(void);
  40extern int z2_init(void);
  41extern int swim3_init(void);
  42extern int swimiop_init(void);
  43extern int amiga_floppy_init(void);
  44extern int atari_floppy_init(void);
  45extern int nbd_init(void);
  46extern int ez_init(void);
  47extern int bpcd_init(void);
  48extern int ps2esdi_init(void);
  49extern int jsfd_init(void);
  50
  51#if defined(CONFIG_ARCH_S390)
  52extern int mdisk_init(void);
  53extern int dasd_init(void);
  54#endif /* CONFIG_ARCH_S390 */
  55
  56extern void set_device_ro(kdev_t dev,int flag);
  57void add_blkdev_randomness(int major);
  58
  59extern int floppy_init(void);
  60extern void rd_load(void);
  61extern int rd_init(void);
  62extern int rd_doload;           /* 1 = load ramdisk, 0 = don't load */
  63extern int rd_prompt;           /* 1 = prompt for ramdisk, 0 = don't prompt */
  64extern int rd_image_start;      /* starting block # of image */
  65
  66#ifdef CONFIG_BLK_DEV_INITRD
  67
  68#define INITRD_MINOR 250 /* shouldn't collide with /dev/ram* too soon ... */
  69
  70extern unsigned long initrd_start,initrd_end;
  71extern int mount_initrd; /* zero if initrd should not be mounted */
  72extern int initrd_below_start_ok; /* 1 if it is not an error if initrd_start < memory_start */
  73void initrd_init(void);
  74
  75#endif
  76
  77                 
  78/*
  79 * end_request() and friends. Must be called with the request queue spinlock
  80 * acquired. All functions called within end_request() _must_be_ atomic.
  81 *
  82 * Several drivers define their own end_request and call
  83 * end_that_request_first() and end_that_request_last()
  84 * for parts of the original function. This prevents
  85 * code duplication in drivers.
  86 */
  87
  88static inline void blkdev_dequeue_request(struct request * req)
  89{
  90        if (req->e) {
  91                req->e->dequeue_fn(req);
  92                req->e = NULL;
  93        }
  94        list_del(&req->queue);
  95}
  96
  97int end_that_request_first(struct request *req, int uptodate, char *name);
  98void end_that_request_last(struct request *req);
  99
 100#if defined(MAJOR_NR) || defined(IDE_DRIVER)
 101
 102#undef DEVICE_ON
 103#undef DEVICE_OFF
 104
 105/*
 106 * Add entries as needed.
 107 */
 108
 109#ifdef IDE_DRIVER
 110
 111#define DEVICE_NR(device)       (MINOR(device) >> PARTN_BITS)
 112#define DEVICE_NAME "ide"
 113
 114#elif (MAJOR_NR == RAMDISK_MAJOR)
 115
 116/* ram disk */
 117#define DEVICE_NAME "ramdisk"
 118#define DEVICE_NR(device) (MINOR(device))
 119#define DEVICE_NO_RANDOM
 120
 121#elif (MAJOR_NR == Z2RAM_MAJOR)
 122
 123/* Zorro II Ram */
 124#define DEVICE_NAME "Z2RAM"
 125#define DEVICE_REQUEST do_z2_request
 126#define DEVICE_NR(device) (MINOR(device))
 127
 128#elif (MAJOR_NR == FLOPPY_MAJOR)
 129
 130static void floppy_off(unsigned int nr);
 131
 132#define DEVICE_NAME "floppy"
 133#define DEVICE_INTR do_floppy
 134#define DEVICE_REQUEST do_fd_request
 135#define DEVICE_NR(device) ( (MINOR(device) & 3) | ((MINOR(device) & 0x80 ) >> 5 ))
 136#define DEVICE_OFF(device) floppy_off(DEVICE_NR(device))
 137
 138#elif (MAJOR_NR == HD_MAJOR)
 139
 140/* Hard disk:  timeout is 6 seconds. */
 141#define DEVICE_NAME "hard disk"
 142#define DEVICE_INTR do_hd
 143#define TIMEOUT_VALUE (6*HZ)
 144#define DEVICE_REQUEST do_hd_request
 145#define DEVICE_NR(device) (MINOR(device)>>6)
 146
 147#elif (SCSI_DISK_MAJOR(MAJOR_NR))
 148
 149#define DEVICE_NAME "scsidisk"
 150#define TIMEOUT_VALUE (2*HZ)
 151#define DEVICE_NR(device) (((MAJOR(device) & SD_MAJOR_MASK) << (8 - 4)) + (MINOR(device) >> 4))
 152
 153/* Kludge to use the same number for both char and block major numbers */
 154#elif  (MAJOR_NR == MD_MAJOR) && defined(MD_DRIVER)
 155
 156#define DEVICE_NAME "Multiple devices driver"
 157#define DEVICE_REQUEST do_md_request
 158#define DEVICE_NR(device) (MINOR(device))
 159
 160#elif (MAJOR_NR == SCSI_TAPE_MAJOR)
 161
 162#define DEVICE_NAME "scsitape"
 163#define DEVICE_INTR do_st  
 164#define DEVICE_NR(device) (MINOR(device) & 0x7f)
 165
 166#elif (MAJOR_NR == OSST_MAJOR)
 167
 168#define DEVICE_NAME "onstream" 
 169#define DEVICE_INTR do_osst
 170#define DEVICE_NR(device) (MINOR(device) & 0x7f) 
 171#define DEVICE_ON(device) 
 172#define DEVICE_OFF(device) 
 173
 174#elif (MAJOR_NR == SCSI_CDROM_MAJOR)
 175
 176#define DEVICE_NAME "CD-ROM"
 177#define DEVICE_NR(device) (MINOR(device))
 178
 179#elif (MAJOR_NR == XT_DISK_MAJOR)
 180
 181#define DEVICE_NAME "xt disk"
 182#define DEVICE_REQUEST do_xd_request
 183#define DEVICE_NR(device) (MINOR(device) >> 6)
 184
 185#elif (MAJOR_NR == PS2ESDI_MAJOR)
 186
 187#define DEVICE_NAME "PS/2 ESDI"
 188#define DEVICE_REQUEST do_ps2esdi_request
 189#define DEVICE_NR(device) (MINOR(device) >> 6)
 190
 191#elif (MAJOR_NR == CDU31A_CDROM_MAJOR)
 192
 193#define DEVICE_NAME "CDU31A"
 194#define DEVICE_REQUEST do_cdu31a_request
 195#define DEVICE_NR(device) (MINOR(device))
 196
 197#elif (MAJOR_NR == ACSI_MAJOR) && (defined(CONFIG_ATARI_ACSI) || defined(CONFIG_ATARI_ACSI_MODULE))
 198
 199#define DEVICE_NAME "ACSI"
 200#define DEVICE_INTR do_acsi
 201#define DEVICE_REQUEST do_acsi_request
 202#define DEVICE_NR(device) (MINOR(device) >> 4)
 203
 204#elif (MAJOR_NR == MITSUMI_CDROM_MAJOR)
 205
 206#define DEVICE_NAME "Mitsumi CD-ROM"
 207/* #define DEVICE_INTR do_mcd */
 208#define DEVICE_REQUEST do_mcd_request
 209#define DEVICE_NR(device) (MINOR(device))
 210
 211#elif (MAJOR_NR == MITSUMI_X_CDROM_MAJOR)
 212
 213#define DEVICE_NAME "Mitsumi CD-ROM"
 214/* #define DEVICE_INTR do_mcdx */
 215#define DEVICE_REQUEST do_mcdx_request
 216#define DEVICE_NR(device) (MINOR(device))
 217
 218#elif (MAJOR_NR == MATSUSHITA_CDROM_MAJOR)
 219
 220#define DEVICE_NAME "Matsushita CD-ROM controller #1"
 221#define DEVICE_REQUEST do_sbpcd_request
 222#define DEVICE_NR(device) (MINOR(device))
 223
 224#elif (MAJOR_NR == MATSUSHITA_CDROM2_MAJOR)
 225
 226#define DEVICE_NAME "Matsushita CD-ROM controller #2"
 227#define DEVICE_REQUEST do_sbpcd2_request
 228#define DEVICE_NR(device) (MINOR(device))
 229
 230#elif (MAJOR_NR == MATSUSHITA_CDROM3_MAJOR)
 231
 232#define DEVICE_NAME "Matsushita CD-ROM controller #3"
 233#define DEVICE_REQUEST do_sbpcd3_request
 234#define DEVICE_NR(device) (MINOR(device))
 235
 236#elif (MAJOR_NR == MATSUSHITA_CDROM4_MAJOR)
 237
 238#define DEVICE_NAME "Matsushita CD-ROM controller #4"
 239#define DEVICE_REQUEST do_sbpcd4_request
 240#define DEVICE_NR(device) (MINOR(device))
 241
 242#elif (MAJOR_NR == AZTECH_CDROM_MAJOR)
 243
 244#define DEVICE_NAME "Aztech CD-ROM"
 245#define DEVICE_REQUEST do_aztcd_request
 246#define DEVICE_NR(device) (MINOR(device))
 247
 248#elif (MAJOR_NR == CDU535_CDROM_MAJOR)
 249
 250#define DEVICE_NAME "SONY-CDU535"
 251#define DEVICE_INTR do_cdu535
 252#define DEVICE_REQUEST do_cdu535_request
 253#define DEVICE_NR(device) (MINOR(device))
 254
 255#elif (MAJOR_NR == GOLDSTAR_CDROM_MAJOR)
 256
 257#define DEVICE_NAME "Goldstar R420"
 258#define DEVICE_REQUEST do_gscd_request
 259#define DEVICE_NR(device) (MINOR(device))
 260
 261#elif (MAJOR_NR == CM206_CDROM_MAJOR)
 262#define DEVICE_NAME "Philips/LMS CD-ROM cm206"
 263#define DEVICE_REQUEST do_cm206_request
 264#define DEVICE_NR(device) (MINOR(device))
 265
 266#elif (MAJOR_NR == OPTICS_CDROM_MAJOR)
 267
 268#define DEVICE_NAME "DOLPHIN 8000AT CD-ROM"
 269#define DEVICE_REQUEST do_optcd_request
 270#define DEVICE_NR(device) (MINOR(device))
 271
 272#elif (MAJOR_NR == SANYO_CDROM_MAJOR)
 273
 274#define DEVICE_NAME "Sanyo H94A CD-ROM"
 275#define DEVICE_REQUEST do_sjcd_request
 276#define DEVICE_NR(device) (MINOR(device))
 277
 278#elif (MAJOR_NR == APBLOCK_MAJOR)
 279
 280#define DEVICE_NAME "apblock"
 281#define DEVICE_REQUEST ap_request
 282#define DEVICE_NR(device) (MINOR(device))
 283
 284#elif (MAJOR_NR == DDV_MAJOR)
 285
 286#define DEVICE_NAME "ddv"
 287#define DEVICE_REQUEST ddv_request
 288#define DEVICE_NR(device) (MINOR(device)>>PARTN_BITS)
 289
 290#elif (MAJOR_NR == MFM_ACORN_MAJOR)
 291
 292#define DEVICE_NAME "mfm disk"
 293#define DEVICE_INTR do_mfm
 294#define DEVICE_REQUEST do_mfm_request
 295#define DEVICE_NR(device) (MINOR(device) >> 6)
 296
 297#elif (MAJOR_NR == NBD_MAJOR)
 298
 299#define DEVICE_NAME "nbd"
 300#define DEVICE_REQUEST do_nbd_request
 301#define DEVICE_NR(device) (MINOR(device))
 302
 303#elif (MAJOR_NR == MDISK_MAJOR)
 304
 305#define DEVICE_NAME "mdisk"
 306#define DEVICE_REQUEST mdisk_request
 307#define DEVICE_NR(device) (MINOR(device))
 308
 309#elif (MAJOR_NR == DASD_MAJOR)
 310
 311#define DEVICE_NAME "dasd"
 312#define DEVICE_REQUEST do_dasd_request
 313#define DEVICE_NR(device) (MINOR(device) >> PARTN_BITS)
 314
 315#elif (MAJOR_NR == I2O_MAJOR)
 316
 317#define DEVICE_NAME "I2O block"
 318#define DEVICE_REQUEST i2ob_request
 319#define DEVICE_NR(device) (MINOR(device)>>4)
 320
 321#elif (MAJOR_NR == COMPAQ_SMART2_MAJOR)
 322
 323#define DEVICE_NAME "ida"
 324#define TIMEOUT_VALUE (25*HZ)
 325#define DEVICE_REQUEST do_ida_request0
 326#define DEVICE_NR(device) (MINOR(device) >> 4)
 327
 328#endif /* MAJOR_NR == whatever */
 329
 330/* provide DEVICE_xxx defaults, if not explicitly defined
 331 * above in the MAJOR_NR==xxx if-elif tree */
 332#ifndef DEVICE_ON
 333#define DEVICE_ON(device) do {} while (0)
 334#endif
 335#ifndef DEVICE_OFF
 336#define DEVICE_OFF(device) do {} while (0)
 337#endif
 338
 339#if (MAJOR_NR != SCSI_TAPE_MAJOR) && (MAJOR_NR != OSST_MAJOR)
 340#if !defined(IDE_DRIVER)
 341
 342#ifndef CURRENT
 343#define CURRENT blkdev_entry_next_request(&blk_dev[MAJOR_NR].request_queue.queue_head)
 344#endif
 345#ifndef QUEUE_EMPTY
 346#define QUEUE_EMPTY list_empty(&blk_dev[MAJOR_NR].request_queue.queue_head)
 347#endif
 348
 349#ifndef DEVICE_NAME
 350#define DEVICE_NAME "unknown"
 351#endif
 352
 353#define CURRENT_DEV DEVICE_NR(CURRENT->rq_dev)
 354
 355#ifdef DEVICE_INTR
 356static void (*DEVICE_INTR)(void) = NULL;
 357#endif
 358
 359#define SET_INTR(x) (DEVICE_INTR = (x))
 360
 361#ifdef DEVICE_REQUEST
 362static void (DEVICE_REQUEST)(request_queue_t *);
 363#endif 
 364  
 365#ifdef DEVICE_INTR
 366#define CLEAR_INTR SET_INTR(NULL)
 367#else
 368#define CLEAR_INTR
 369#endif
 370
 371#define INIT_REQUEST \
 372        if (QUEUE_EMPTY) {\
 373                CLEAR_INTR; \
 374                return; \
 375        } \
 376        if (MAJOR(CURRENT->rq_dev) != MAJOR_NR) \
 377                panic(DEVICE_NAME ": request list destroyed"); \
 378        if (CURRENT->bh) { \
 379                if (!buffer_locked(CURRENT->bh)) \
 380                        panic(DEVICE_NAME ": block not locked"); \
 381        }
 382
 383#endif /* !defined(IDE_DRIVER) */
 384
 385
 386#ifndef LOCAL_END_REQUEST       /* If we have our own end_request, we do not want to include this mess */
 387
 388#if ! SCSI_BLK_MAJOR(MAJOR_NR) && (MAJOR_NR != COMPAQ_SMART2_MAJOR)
 389
 390static inline void end_request(int uptodate) {
 391        struct request *req = CURRENT;
 392
 393        if (end_that_request_first(req, uptodate, DEVICE_NAME))
 394                return;
 395
 396#ifndef DEVICE_NO_RANDOM
 397        add_blkdev_randomness(MAJOR(req->rq_dev));
 398#endif
 399        DEVICE_OFF(req->rq_dev);
 400        blkdev_dequeue_request(req);
 401        end_that_request_last(req);
 402}
 403
 404#endif /* ! SCSI_BLK_MAJOR(MAJOR_NR) */
 405#endif /* LOCAL_END_REQUEST */
 406
 407#endif /* (MAJOR_NR != SCSI_TAPE_MAJOR) */
 408#endif /* defined(MAJOR_NR) || defined(IDE_DRIVER) */
 409
 410#endif /* _BLK_H */
 411
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.