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

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

Version: ~ [ 0.6-2.3.46 ] ~
Architecture: ~ [ um ] ~

** Warning: Cannot open xref database.

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 */ 14 extern spinlock_t io_request_lock; 15 16 /* 17 * NR_REQUEST is the number of entries in the request-queue. 18 * NOTE that writes may use only the low 2/3 of these: reads 19 * take precedence. 20 */ 21 #define NR_REQUEST 128 22 23 /* 24 * This is used in the elevator algorithm. We don't prioritise reads 25 * over writes any more --- although reads are more time-critical than 26 * writes, by treating them equally we increase filesystem throughput. 27 * This turns out to give better overall performance. -- sct 28 */ 29 #define IN_ORDER(s1,s2) \ 30 ((s1)->rq_dev < (s2)->rq_dev || (((s1)->rq_dev == (s2)->rq_dev && \ 31 (s1)->sector < (s2)->sector))) 32 33 /* 34 * Initialization functions. 35 */ 36 extern int isp16_init(void); 37 extern int cdu31a_init(void); 38 extern int acsi_init(void); 39 extern int mcd_init(void); 40 extern int mcdx_init(void); 41 extern int sbpcd_init(void); 42 extern int aztcd_init(void); 43 extern int sony535_init(void); 44 extern int gscd_init(void); 45 extern int cm206_init(void); 46 extern int optcd_init(void); 47 extern int sjcd_init(void); 48 extern int cdi_init(void); 49 extern int hd_init(void); 50 extern int ide_init(void); 51 extern int xd_init(void); 52 extern int mfm_init(void); 53 extern int loop_init(void); 54 extern int md_init(void); 55 extern int ap_init(void); 56 extern int ddv_init(void); 57 extern int z2_init(void); 58 extern int swim3_init(void); 59 extern int swimiop_init(void); 60 extern int amiga_floppy_init(void); 61 extern int atari_floppy_init(void); 62 extern int nbd_init(void); 63 extern int ez_init(void); 64 extern int bpcd_init(void); 65 extern int ps2esdi_init(void); 66 67 extern void set_device_ro(kdev_t dev,int flag); 68 void add_blkdev_randomness(int major); 69 70 extern int floppy_init(void); 71 extern void rd_load(void); 72 extern int rd_init(void); 73 extern int rd_doload; /* 1 = load ramdisk, 0 = don't load */ 74 extern int rd_prompt; /* 1 = prompt for ramdisk, 0 = don't prompt */ 75 extern int rd_image_start; /* starting block # of image */ 76 77 #ifdef CONFIG_BLK_DEV_INITRD 78 79 #define INITRD_MINOR 250 /* shouldn't collide with /dev/ram* too soon ... */ 80 81 extern unsigned long initrd_start,initrd_end; 82 extern int mount_initrd; /* zero if initrd should not be mounted */ 83 extern int initrd_below_start_ok; /* 1 if it is not an error if initrd_start < memory_start */ 84 void initrd_init(void); 85 86 #endif 87 88 89 /* 90 * end_request() and friends. Must be called with the request queue spinlock 91 * acquired. All functions called within end_request() _must_be_ atomic. 92 * 93 * Several drivers define their own end_request and call 94 * end_that_request_first() and end_that_request_last() 95 * for parts of the original function. This prevents 96 * code duplication in drivers. 97 */ 98 99 extern inline void blkdev_dequeue_request(struct request * req) 100 { 101 if (req->q) 102 { 103 if (req->cmd == READ) 104 req->q->elevator.read_pendings--; 105 req->q->nr_segments -= req->nr_segments; 106 req->q = NULL; 107 } 108 list_del(&req->queue); 109 } 110 111 int end_that_request_first(struct request *req, int uptodate, char *name); 112 void end_that_request_last(struct request *req); 113 114 #if defined(MAJOR_NR) || defined(IDE_DRIVER) 115 116 /* 117 * Add entries as needed. 118 */ 119 120 #ifdef IDE_DRIVER 121 122 #define DEVICE_NR(device) (MINOR(device) >> PARTN_BITS) 123 #define DEVICE_ON(device) /* nothing */ 124 #define DEVICE_OFF(device) /* nothing */ 125 #define DEVICE_NAME "ide" 126 127 #elif (MAJOR_NR == RAMDISK_MAJOR) 128 129 /* ram disk */ 130 #define DEVICE_NAME "ramdisk" 131 #define DEVICE_REQUEST rd_request 132 #define DEVICE_NR(device) (MINOR(device)) 133 #define DEVICE_ON(device) 134 #define DEVICE_OFF(device) 135 #define DEVICE_NO_RANDOM 136 137 #elif (MAJOR_NR == Z2RAM_MAJOR) 138 139 /* Zorro II Ram */ 140 #define DEVICE_NAME "Z2RAM" 141 #define DEVICE_REQUEST do_z2_request 142 #define DEVICE_NR(device) (MINOR(device)) 143 #define DEVICE_ON(device) 144 #define DEVICE_OFF(device) 145 146 #elif (MAJOR_NR == FLOPPY_MAJOR) 147 148 static void floppy_off(unsigned int nr); 149 150 #define DEVICE_NAME "floppy" 151 #define DEVICE_INTR do_floppy 152 #define DEVICE_REQUEST do_fd_request 153 #define DEVICE_NR(device) ( (MINOR(device) & 3) | ((MINOR(device) & 0x80 ) >> 5 )) 154 #define DEVICE_ON(device) 155 #define DEVICE_OFF(device) floppy_off(DEVICE_NR(device)) 156 157 #elif (MAJOR_NR == HD_MAJOR) 158 159 /* Hard disk: timeout is 6 seconds. */ 160 #define DEVICE_NAME "hard disk" 161 #define DEVICE_INTR do_hd 162 #define DEVICE_TIMEOUT HD_TIMER 163 #define TIMEOUT_VALUE (6*HZ) 164 #define DEVICE_REQUEST do_hd_request 165 #define DEVICE_NR(device) (MINOR(device)>>6) 166 #define DEVICE_ON(device) 167 #define DEVICE_OFF(device) 168 169 #elif (SCSI_DISK_MAJOR(MAJOR_NR)) 170 171 #define DEVICE_NAME "scsidisk" 172 #define TIMEOUT_VALUE (2*HZ) 173 #define DEVICE_NR(device) (((MAJOR(device) & SD_MAJOR_MASK) << (8 - 4)) + (MINOR(device) >> 4)) 174 #define DEVICE_ON(device) 175 #define DEVICE_OFF(device) 176 177 /* Kludge to use the same number for both char and block major numbers */ 178 #elif (MAJOR_NR == MD_MAJOR) && defined(MD_DRIVER) 179 180 #define DEVICE_NAME "Multiple devices driver" 181 #define DEVICE_REQUEST do_md_request 182 #define DEVICE_NR(device) (MINOR(device)) 183 #define DEVICE_ON(device) 184 #define DEVICE_OFF(device) 185 186 #elif (MAJOR_NR == SCSI_TAPE_MAJOR) 187 188 #define DEVICE_NAME "scsitape" 189 #define DEVICE_INTR do_st 190 #define DEVICE_NR(device) (MINOR(device) & 0x7f) 191 #define DEVICE_ON(device) 192 #define DEVICE_OFF(device) 193 194 #elif (MAJOR_NR == SCSI_CDROM_MAJOR) 195 196 #define DEVICE_NAME "CD-ROM" 197 #define DEVICE_NR(device) (MINOR(device)) 198 #define DEVICE_ON(device) 199 #define DEVICE_OFF(device) 200 201 #elif (MAJOR_NR == XT_DISK_MAJOR) 202 203 #define DEVICE_NAME "xt disk" 204 #define DEVICE_REQUEST do_xd_request 205 #define DEVICE_NR(device) (MINOR(device) >> 6) 206 #define DEVICE_ON(device) 207 #define DEVICE_OFF(device) 208 209 #elif (MAJOR_NR == PS2ESDI_MAJOR) 210 211 #define DEVICE_NAME "PS/2 ESDI" 212 #define DEVICE_REQUEST do_ps2esdi_request 213 #define DEVICE_NR(device) (MINOR(device) >> 6) 214 #define DEVICE_ON(device) 215 #define DEVICE_OFF(device) 216 217 #elif (MAJOR_NR == CDU31A_CDROM_MAJOR) 218 219 #define DEVICE_NAME "CDU31A" 220 #define DEVICE_REQUEST do_cdu31a_request 221 #define DEVICE_NR(device) (MINOR(device)) 222 #define DEVICE_ON(device) 223 #define DEVICE_OFF(device) 224 225 #elif (MAJOR_NR == ACSI_MAJOR) && (defined(CONFIG_ATARI_ACSI) || defined(CONFIG_ATARI_ACSI_MODULE)) 226 227 #define DEVICE_NAME "ACSI" 228 #define DEVICE_INTR do_acsi 229 #define DEVICE_REQUEST do_acsi_request 230 #define DEVICE_NR(device) (MINOR(device) >> 4) 231 #define DEVICE_ON(device) 232 #define DEVICE_OFF(device) 233 234 #elif (MAJOR_NR == MITSUMI_CDROM_MAJOR) 235 236 #define DEVICE_NAME "Mitsumi CD-ROM" 237 /* #define DEVICE_INTR do_mcd */ 238 #define DEVICE_REQUEST do_mcd_request 239 #define DEVICE_NR(device) (MINOR(device)) 240 #define DEVICE_ON(device) 241 #define DEVICE_OFF(device) 242 243 #elif (MAJOR_NR == MITSUMI_X_CDROM_MAJOR) 244 245 #define DEVICE_NAME "Mitsumi CD-ROM" 246 /* #define DEVICE_INTR do_mcdx */ 247 #define DEVICE_REQUEST do_mcdx_request 248 #define DEVICE_NR(device) (MINOR(device)) 249 #define DEVICE_ON(device) 250 #define DEVICE_OFF(device) 251 252 #elif (MAJOR_NR == MATSUSHITA_CDROM_MAJOR) 253 254 #define DEVICE_NAME "Matsushita CD-ROM controller #1" 255 #define DEVICE_REQUEST do_sbpcd_request 256 #define DEVICE_NR(device) (MINOR(device)) 257 #define DEVICE_ON(device) 258 #define DEVICE_OFF(device) 259 260 #elif (MAJOR_NR == MATSUSHITA_CDROM2_MAJOR) 261 262 #define DEVICE_NAME "Matsushita CD-ROM controller #2" 263 #define DEVICE_REQUEST do_sbpcd2_request 264 #define DEVICE_NR(device) (MINOR(device)) 265 #define DEVICE_ON(device) 266 #define DEVICE_OFF(device) 267 268 #elif (MAJOR_NR == MATSUSHITA_CDROM3_MAJOR) 269 270 #define DEVICE_NAME "Matsushita CD-ROM controller #3" 271 #define DEVICE_REQUEST do_sbpcd3_request 272 #define DEVICE_NR(device) (MINOR(device)) 273 #define DEVICE_ON(device) 274 #define DEVICE_OFF(device) 275 276 #elif (MAJOR_NR == MATSUSHITA_CDROM4_MAJOR) 277 278 #define DEVICE_NAME "Matsushita CD-ROM controller #4" 279 #define DEVICE_REQUEST do_sbpcd4_request 280 #define DEVICE_NR(device) (MINOR(device)) 281 #define DEVICE_ON(device) 282 #define DEVICE_OFF(device) 283 284 #elif (MAJOR_NR == AZTECH_CDROM_MAJOR) 285 286 #define DEVICE_NAME "Aztech CD-ROM" 287 #define DEVICE_REQUEST do_aztcd_request 288 #define DEVICE_NR(device) (MINOR(device)) 289 #define DEVICE_ON(device) 290 #define DEVICE_OFF(device) 291 292 #elif (MAJOR_NR == CDU535_CDROM_MAJOR) 293 294 #define DEVICE_NAME "SONY-CDU535" 295 #define DEVICE_INTR do_cdu535 296 #define DEVICE_REQUEST do_cdu535_request 297 #define DEVICE_NR(device) (MINOR(device)) 298 #define DEVICE_ON(device) 299 #define DEVICE_OFF(device) 300 301 #elif (MAJOR_NR == GOLDSTAR_CDROM_MAJOR) 302 303 #define DEVICE_NAME "Goldstar R420" 304 #define DEVICE_REQUEST do_gscd_request 305 #define DEVICE_NR(device) (MINOR(device)) 306 #define DEVICE_ON(device) 307 #define DEVICE_OFF(device) 308 309 #elif (MAJOR_NR == CM206_CDROM_MAJOR) 310 #define DEVICE_NAME "Philips/LMS CD-ROM cm206" 311 #define DEVICE_REQUEST do_cm206_request 312 #define DEVICE_NR(device) (MINOR(device)) 313 #define DEVICE_ON(device) 314 #define DEVICE_OFF(device) 315 316 #elif (MAJOR_NR == OPTICS_CDROM_MAJOR) 317 318 #define DEVICE_NAME "DOLPHIN 8000AT CD-ROM" 319 #define DEVICE_REQUEST do_optcd_request 320 #define DEVICE_NR(device) (MINOR(device)) 321 #define DEVICE_ON(device) 322 #define DEVICE_OFF(device) 323 324 #elif (MAJOR_NR == SANYO_CDROM_MAJOR) 325 326 #define DEVICE_NAME "Sanyo H94A CD-ROM" 327 #define DEVICE_REQUEST do_sjcd_request 328 #define DEVICE_NR(device) (MINOR(device)) 329 #define DEVICE_ON(device) 330 #define DEVICE_OFF(device) 331 332 #elif (MAJOR_NR == APBLOCK_MAJOR) 333 334 #define DEVICE_NAME "apblock" 335 #define DEVICE_REQUEST ap_request 336 #define DEVICE_NR(device) (MINOR(device)) 337 #define DEVICE_ON(device) 338 #define DEVICE_OFF(device) 339 340 #elif (MAJOR_NR == DDV_MAJOR) 341 342 #define DEVICE_NAME "ddv" 343 #define DEVICE_REQUEST ddv_request 344 #define DEVICE_NR(device) (MINOR(device)>>PARTN_BITS) 345 #define DEVICE_ON(device) 346 #define DEVICE_OFF(device) 347 348 #elif (MAJOR_NR == MFM_ACORN_MAJOR) 349 350 #define DEVICE_NAME "mfm disk" 351 #define DEVICE_INTR do_mfm 352 #define DEVICE_REQUEST do_mfm_request 353 #define DEVICE_NR(device) (MINOR(device) >> 6) 354 #define DEVICE_ON(device) 355 #define DEVICE_OFF(device) 356 357 #elif (MAJOR_NR == NBD_MAJOR) 358 359 #define DEVICE_NAME "nbd" 360 #define DEVICE_REQUEST do_nbd_request 361 #define DEVICE_NR(device) (MINOR(device)) 362 #define DEVICE_ON(device) 363 #define DEVICE_OFF(device) 364 365 #elif (MAJOR_NR == I2O_MAJOR) 366 367 #define DEVICE_NAME "I2O block" 368 #define DEVICE_REQUEST do_i2ob_request 369 #define DEVICE_NR(device) (MINOR(device)>>4) 370 #define DEVICE_ON(device) 371 #define DEVICE_OFF(device) 372 373 #elif (MAJOR_NR == COMPAQ_SMART2_MAJOR) 374 375 #define DEVICE_NAME "ida" 376 #define DEVICE_INTR do_ida 377 #define TIMEOUT_VALUE (25*HZ) 378 #define DEVICE_REQUEST do_ida_request0 379 #define DEVICE_NR(device) (MINOR(device) >> 4) 380 #define DEVICE_ON(device) 381 #define DEVICE_OFF(device) 382 383 #elif (MAJOR_NR == FHD_MAJOR) 384 385 #define DEVICE_NAME "Fake disk in a Linux file" 386 #define DEVICE_REQUEST do_fhd_request 387 #define DEVICE_NR(device) (MINOR(device)) 388 #define DEVICE_ON(device) 389 #define DEVICE_OFF(device) 390 391 #endif /* MAJOR_NR == whatever */ 392 393 #if (MAJOR_NR != SCSI_TAPE_MAJOR) 394 #if !defined(IDE_DRIVER) 395 396 #ifndef CURRENT 397 #define CURRENT blkdev_entry_next_request(&blk_dev[MAJOR_NR].request_queue.queue_head) 398 #endif 399 #ifndef QUEUE_EMPTY 400 #define QUEUE_EMPTY list_empty(&blk_dev[MAJOR_NR].request_queue.queue_head) 401 #endif 402 403 #ifndef DEVICE_NAME 404 #define DEVICE_NAME "unknown" 405 #endif 406 407 #define CURRENT_DEV DEVICE_NR(CURRENT->rq_dev) 408 409 #ifdef DEVICE_INTR 410 static void (*DEVICE_INTR)(void) = NULL; 411 #endif 412 413 #ifdef DEVICE_TIMEOUT 414 415 #define SET_TIMER \ 416 ((timer_table[DEVICE_TIMEOUT].expires = jiffies + TIMEOUT_VALUE), \ 417 (timer_active |= 1<<DEVICE_TIMEOUT)) 418 419 #define CLEAR_TIMER \ 420 timer_active &= ~(1<<DEVICE_TIMEOUT) 421 422 #define SET_INTR(x) \ 423 if ((DEVICE_INTR = (x)) != NULL) \ 424 SET_TIMER; \ 425 else \ 426 CLEAR_TIMER; 427 428 #else 429 430 #define SET_INTR(x) (DEVICE_INTR = (x)) 431 432 #endif /* DEVICE_TIMEOUT */ 433 434 #ifdef DEVICE_REQUEST 435 static void (DEVICE_REQUEST)(request_queue_t *); 436 #endif 437 438 #ifdef DEVICE_INTR 439 #define CLEAR_INTR SET_INTR(NULL) 440 #else 441 #define CLEAR_INTR 442 #endif 443 444 #define INIT_REQUEST \ 445 if (QUEUE_EMPTY) {\ 446 CLEAR_INTR; \ 447 return; \ 448 } \ 449 if (MAJOR(CURRENT->rq_dev) != MAJOR_NR) \ 450 panic(DEVICE_NAME ": request list destroyed"); \ 451 if (CURRENT->bh) { \ 452 if (!buffer_locked(CURRENT->bh)) \ 453 panic(DEVICE_NAME ": block not locked"); \ 454 } 455 456 #endif /* !defined(IDE_DRIVER) */ 457 458 459 #ifndef LOCAL_END_REQUEST /* If we have our own end_request, we do not want to include this mess */ 460 461 #if ! SCSI_BLK_MAJOR(MAJOR_NR) && (MAJOR_NR != COMPAQ_SMART2_MAJOR) 462 463 static void end_request(int uptodate) { 464 struct request *req = CURRENT; 465 466 if (end_that_request_first(req, uptodate, DEVICE_NAME)) 467 return; 468 469 #ifndef DEVICE_NO_RANDOM 470 add_blkdev_randomness(MAJOR(req->rq_dev)); 471 #endif 472 DEVICE_OFF(req->rq_dev); 473 blkdev_dequeue_request(req); 474 end_that_request_last(req); 475 } 476 477 #endif /* ! SCSI_BLK_MAJOR(MAJOR_NR) */ 478 #endif /* LOCAL_END_REQUEST */ 479 480 #endif /* (MAJOR_NR != SCSI_TAPE_MAJOR) */ 481 #endif /* defined(MAJOR_NR) || defined(IDE_DRIVER) */ 482 483 #endif /* _BLK_H */ 484

~ [ 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.