1 /* 2 * scsi.h Copyright (C) 1992 Drew Eckhardt 3 * generic SCSI package header file by 4 * Drew Eckhardt 5 * 6 * <drew@colorado.edu> 7 * 8 * Modified by Eric Youngdale eric@tantalus.nrl.navy.mil to 9 * add scatter-gather, multiple outstanding request, and other 10 * enhancements. 11 */ 12
13 #ifndef_SCSI_H 14 #define_SCSI_H 15
16 /* 17 $Header: /usr/src/linux/kernel/blk_drv/scsi/RCS/scsi.h,v 1.3 1993/09/24 12:20:33 drew Exp $ 18
19 For documentation on the OPCODES, MESSAGES, and SENSE values, 20 please consult the SCSI standard. 21
22 */ 23
24 /* 25 * SCSI opcodes 26 */ 27
28 #defineTEST_UNIT_READY 0x00
29 #defineREZERO_UNIT 0x01
30 #defineREQUEST_SENSE 0x03
31 #defineFORMAT_UNIT 0x04
32 #defineREAD_BLOCK_LIMITS 0x05
33 #defineREASSIGN_BLOCKS 0x07
34 #defineREAD_6 0x08
35 #defineWRITE_6 0x0a
36 #defineSEEK_6 0x0b
37 #define READ_REVERSE 0x0f
38 #defineWRITE_FILEMARKS 0x10
39 #defineSPACE 0x11
40 #defineINQUIRY 0x12
41 #define RECOVER_BUFFERED_DATA 0x14
42 #defineMODE_SELECT 0x15
43 #defineRESERVE 0x16
44 #define RELEASE 0x17
45 #defineCOPY 0x18
46 #defineERASE 0x19
47 #defineMODE_SENSE 0x1a
48 #defineSTART_STOP 0x1b
49 #define RECEIVE_DIAGNOSTIC 0x1c
50 #defineSEND_DIAGNOSTIC 0x1d
51 #defineALLOW_MEDIUM_REMOVAL 0x1e
52
53 #defineSET_WINDOW 0x24
54 #defineREAD_CAPACITY 0x25
55 #defineREAD_10 0x28
56 #defineWRITE_10 0x2a
57 #defineSEEK_10 0x2b
58 #defineWRITE_VERIFY 0x2e
59 #define VERIFY 0x2f
60 #defineSEARCH_HIGH 0x30
61 #defineSEARCH_EQUAL 0x31
62 #defineSEARCH_LOW 0x32
63 #define SET_LIMITS 0x33
64 #define PRE_FETCH 0x34
65 #defineREAD_POSITION 0x34
66 #define SYNCHRONIZE_CACHE 0x35
67 #define LOCK_UNLOCK_CACHE 0x36
68 #define READ_DEFECT_DATA 0x37
69 #defineMEDIUM_SCAN 0x38
70 #defineCOMPARE 0x39
71 #defineCOPY_VERIFY 0x3a
72 #defineWRITE_BUFFER 0x3b
73 #define READ_BUFFER 0x3c
74 #defineUPDATE_BLOCK 0x3d
75 #define READ_LONG 0x3e
76 #defineWRITE_LONG 0x3f
77 #defineCHANGE_DEFINITION 0x40
78 #defineWRITE_SAME 0x41
79 #defineLOG_SELECT 0x4c
80 #defineLOG_SENSE 0x4d
81 #defineMODE_SELECT_10 0x55
82 #defineMODE_SENSE_10 0x5a
83 #defineWRITE_12 0xaa
84 #defineWRITE_VERIFY_12 0xae
85 #defineSEARCH_HIGH_12 0xb0
86 #defineSEARCH_EQUAL_12 0xb1
87 #defineSEARCH_LOW_12 0xb2
88 #defineSEND_VOLUME_TAG 0xb6
89 #define WRITE_LONG_2 0xea
90
91 externvoidscsi_make_blocked_list(void);
92 externvolatileintin_scan_scsis;
93 externconstunsignedcharscsi_command_size[8];
94 #defineCOMMAND_SIZE(opcode) scsi_command_size[((opcode) >> 5) & 7]
95
96 /* 97 * MESSAGE CODES 98 */ 99
100 #defineCOMMAND_COMPLETE 0x00
101 #defineEXTENDED_MESSAGE 0x01
102 #defineEXTENDED_MODIFY_DATA_POINTER 0x00
103 #defineEXTENDED_SDTR 0x01
104 #defineEXTENDED_EXTENDED_IDENTIFY 0x02 /* SCSI-I only */ 105 #defineEXTENDED_WDTR 0x03
106 #defineSAVE_POINTERS 0x02
107 #defineRESTORE_POINTERS 0x03
108 #defineDISCONNECT 0x04
109 #define INITIATOR_ERROR 0x05
110 #defineABORT 0x06
111 #defineMESSAGE_REJECT 0x07
112 #defineNOP 0x08
113 #define MSG_PARITY_ERROR 0x09
114 #defineLINKED_CMD_COMPLETE 0x0a
115 #defineLINKED_FLG_CMD_COMPLETE 0x0b
116 #defineBUS_DEVICE_RESET 0x0c
117
118 #defineINITIATE_RECOVERY 0x0f /* SCSI-II only */ 119 #define RELEASE_RECOVERY 0x10 /* SCSI-II only */ 120
121 #defineSIMPLE_QUEUE_TAG 0x20
122 #defineHEAD_OF_QUEUE_TAG 0x21
123 #defineORDERED_QUEUE_TAG 0x22
124
125 #defineIDENTIFY_BASE 0x80
126 #defineIDENTIFY(can_disconnect, lun) (IDENTIFY_BASE |\
127 ((can_disconnect) ? 0x40 : 0) |\
128 ((lun) & 0x07))
129
130
131 /* 132 * Status codes 133 */ 134
135 #defineGOOD 0x00
136 #defineCHECK_CONDITION 0x01
137 #defineCONDITION_GOOD 0x02
138 #defineBUSY 0x04
139 #defineINTERMEDIATE_GOOD 0x08
140 #defineINTERMEDIATE_C_GOOD 0x0a
141 #defineRESERVATION_CONFLICT 0x0c
142 #defineQUEUE_FULL 0x1a
143
144 #defineSTATUS_MASK 0x1e
145
146 /* 147 * the return of the status word will be in the following format : 148 * The low byte is the status returned by the SCSI command, 149 * with vendor specific bits masked. 150 * 151 * The next byte is the message which followed the SCSI status. 152 * This allows a stos to be used, since the Intel is a little 153 * endian machine. 154 * 155 * The final byte is a host return code, which is one of the following. 156 * 157 * IE 158 * lsb msb 159 * status msg host code 160 * 161 * Our errors returned by OUR driver, NOT SCSI message. Or'd with 162 * SCSI message passed back to driver <IF any>. 163 */ 164
165
166 #defineDID_OK 0x00 /* NO error */ 167 #defineDID_NO_CONNECT 0x01 /* Couldn't connect before timeout period */ 168 #defineDID_BUS_BUSY 0x02 /* BUS stayed busy through time out period */ 169 #defineDID_TIME_OUT 0x03 /* TIMED OUT for other reason */ 170 #defineDID_BAD_TARGET 0x04 /* BAD target. */ 171 #defineDID_ABORT 0x05 /* Told to abort for some other reason */ 172 #defineDID_PARITY 0x06 /* Parity error */ 173 #defineDID_ERROR 0x07 /* Internal error */ 174 #defineDID_RESET 0x08 /* Reset by somebody. */ 175 #defineDID_BAD_INTR 0x09 /* Got an interrupt we weren't expecting. */ 176 #defineDRIVER_OK 0x00 /* Driver status */ 177
178 /* 179 * These indicate the error that occurred, and what is available. 180 */ 181
182 #define DRIVER_BUSY 0x01
183 #defineDRIVER_SOFT 0x02
184 #define DRIVER_MEDIA 0x03
185 #defineDRIVER_ERROR 0x04
186
187 #defineDRIVER_INVALID 0x05
188 #defineDRIVER_TIMEOUT 0x06
189 #defineDRIVER_HARD 0x07
190
191 #defineSUGGEST_RETRY 0x10
192 #defineSUGGEST_ABORT 0x20
193 #defineSUGGEST_REMAP 0x30
194 #defineSUGGEST_DIE 0x40
195 #defineSUGGEST_SENSE 0x80
196 #defineSUGGEST_IS_OK 0xff
197
198 #defineDRIVER_SENSE 0x08
199
200 #define DRIVER_MASK 0x0f
201 #defineSUGGEST_MASK 0xf0
202
203 /* 204 * SENSE KEYS 205 */ 206
207 #defineNO_SENSE 0x00
208 #defineRECOVERED_ERROR 0x01
209 #defineNOT_READY 0x02
210 #defineMEDIUM_ERROR 0x03
211 #defineHARDWARE_ERROR 0x04
212 #defineILLEGAL_REQUEST 0x05
213 #defineUNIT_ATTENTION 0x06
214 #defineDATA_PROTECT 0x07
215 #defineBLANK_CHECK 0x08
216 #defineCOPY_ABORTED 0x0a
217 #defineABORTED_COMMAND 0x0b
218 #defineVOLUME_OVERFLOW 0x0d
219 #defineMISCOMPARE 0x0e
220
221
222 /* 223 * DEVICE TYPES 224 */ 225
226 #defineTYPE_DISK 0x00
227 #defineTYPE_TAPE 0x01
228 #defineTYPE_PROCESSOR 0x03 /* HP scanners use this */ 229 #defineTYPE_WORM 0x04 /* Treated as ROM by our system */ 230 #defineTYPE_ROM 0x05
231 #defineTYPE_SCANNER 0x06
232 #defineTYPE_MOD 0x07 /* Magneto-optical disk - 233 * - treated as TYPE_DISK */ 234 #define TYPE_NO_LUN 0x7f
235
236
237 #defineMAX_COMMAND_SIZE 12
238
239 /* 240 * SCSI command sets 241 */ 242
243 #define SCSI_UNKNOWN 0
244 #define SCSI_1 1
245 #define SCSI_1_CCS 2
246 #defineSCSI_2 3
247
248 /* 249 * Every SCSI command starts with a one byte OP-code. 250 * The next byte's high three bits are the LUN of the 251 * device. Any multi-byte quantities are stored high byte 252 * first, and may have a 5 bit MSB in the same byte 253 * as the LUN. 254 */ 255
256 /* 257 * Manufacturers list 258 */ 259
260 #defineSCSI_MAN_UNKNOWN 0
261 #defineSCSI_MAN_NEC 1
262 #defineSCSI_MAN_TOSHIBA 2
263 #defineSCSI_MAN_NEC_OLDCDR 3
264 #defineSCSI_MAN_SONY 4
265
266 /* 267 * As the scsi do command functions are intelligent, and may need to 268 * redo a command, we need to keep track of the last command 269 * executed on each one. 270 */ 271
272 #defineWAS_RESET 0x01
273 #defineWAS_TIMEDOUT 0x02
274 #defineWAS_SENSE 0x04
275 #defineIS_RESETTING 0x08
276 #define IS_ABORTING 0x10
277 #defineASKED_FOR_SENSE 0x20
278
279 /* 280 * The scsi_device struct contains what we know about each given scsi 281 * device. 282 */ 283
284 typedefstructscsi_device{ 285 structscsi_device * next; /* Used for linked list */ 286
287 unsignedcharid, lun, channel;
288
289 unsignedintmanufacturer; /* Manufacturer of device, for using 290 * vendor-specific cmd's */ 291 intattached; /* # of high level drivers attached to 292 * this */ 293 intaccess_count; /* Count of open channels/mounts */ 294 structwait_queue * device_wait;/* Used to wait if device is busy */ 295 structScsi_Host * host;
296 void (*scsi_request_fn)(void); /* Used to jumpstart things after an 297 * ioctl */ 298 void *hostdata; /* available to low-level driver */ 299 chartype;
300 charscsi_level;
301 charvendor[8], model[16], rev[4];
302 unsignedwriteable:1;
303 unsignedremovable:1;
304 unsignedrandom:1;
305 unsignedhas_cmdblocks:1;
306 unsignedchanged:1; /* Data invalid due to media change */ 307 unsignedbusy:1; /* Used to prevent races */ 308 unsignedlockable:1; /* Able to prevent media removal */ 309 unsignedborken:1; /* Tell the Seagate driver to be 310 * painfully slow on this device */ 311 unsignedtagged_supported:1; /* Supports SCSI-II tagged queuing */ 312 unsignedtagged_queue:1; /* SCSI-II tagged queuing enabled */ 313 unsigneddisconnect:1; /* can disconnect */ 314 unsignedsoft_reset:1; /* Uses soft reset option */ 315 unsignedsync:1; /* Negotiate for sync transfers */ 316 unsignedsingle_lun:1; /* Indicates we should only allow I/O to 317 one of the luns for the device at a time. */ 318 unsignedcharcurrent_tag; /* current tag */ 319 unsignedchar sync_min_period; /* Not less than this period */ 320 unsignedchar sync_max_offset; /* Not greater than this offset */ 321 }Scsi_Device;
322
323 /* 324 * Use these to separate status msg and our bytes 325 */ 326
327 #definestatus_byte(result) (((result) >> 1) & 0xf)
328 #definemsg_byte(result) (((result) >> 8) & 0xff)
329 #definehost_byte(result) (((result) >> 16) & 0xff)
330 #definedriver_byte(result) (((result) >> 24) & 0xff)
331 #definesuggestion(result) (driver_byte(result) & SUGGEST_MASK)
332
333 #definesense_class(sense) (((sense) >> 4) & 0x7)
334 #definesense_error(sense) ((sense) & 0xf)
335 #define sense_valid(sense) ((sense) & 0x80);
336
337 /* 338 * These are the SCSI devices available on the system. 339 */ 340
341 externScsi_Device * scsi_devices;
342
343 /* 344 * Initializes all SCSI devices. This scans all scsi busses. 345 */ 346
347 externunsignedlongscsi_dev_init (unsignedlong, unsignedlong);
348
349 structscatterlist{ 350 char * address; /* Location data is to be transferred to */ 351 char * alt_address; /* Location of actual if address is a 352 * dma indirect buffer. NULL otherwise */ 353 unsignedintlength;
354 };
355
356 #ifdef__alpha__ 357 # defineISA_DMA_THRESHOLD (~0UL)
358 #else 359 # defineISA_DMA_THRESHOLD (0x00ffffff)
360 #endif 361 #defineCONTIGUOUS_BUFFERS(X,Y) ((X->b_data+X->b_size) == Y->b_data)
362
363
364 /* 365 * These are the return codes for the abort and reset functions. The mid-level 366 * code uses these to decide what to do next. Each of the low level abort 367 * and reset functions must correctly indicate what it has done. 368 */ 369
370 /* We did not do anything. 371 * Wait some more for this command to complete, and if this does not work, 372 * try something more serious. */ 373 #defineSCSI_ABORT_SNOOZE 0
374
375 /* This means that we were able to abort the command. We have already 376 * called the mid-level done function, and do not expect an interrupt that 377 * will lead to another call to the mid-level done function for this command */ 378 #defineSCSI_ABORT_SUCCESS 1
379
380 /* We called for an abort of this command, and we should get an interrupt 381 * when this succeeds. Thus we should not restore the timer for this 382 * command in the mid-level abort function. */ 383 #defineSCSI_ABORT_PENDING 2
384
385 /* Unable to abort - command is currently on the bus. Grin and bear it. */ 386 #defineSCSI_ABORT_BUSY 3
387
388 /* The command is not active in the low level code. Command probably 389 * finished. */ 390 #defineSCSI_ABORT_NOT_RUNNING 4
391
392 /* Something went wrong. The low level driver will indicate the correct 393 * error condition when it calls scsi_done, so the mid-level abort function 394 * can simply wait until this comes through */ 395 #defineSCSI_ABORT_ERROR 5
396
397 /* We do not know how to reset the bus, or we do not want to. Bummer. 398 * Anyway, just wait a little more for the command in question, and hope that 399 * it eventually finishes. If it never finishes, the SCSI device could 400 * hang, so use this with caution. */ 401 #defineSCSI_RESET_SNOOZE 0
402
403 /* We do not know how to reset the bus, or we do not want to. Bummer. 404 * We have given up on this ever completing. The mid-level code will 405 * request sense information to decide how to proceed from here. */ 406 #defineSCSI_RESET_PUNT 1
407
408 /* This means that we were able to reset the bus. We have restarted all of 409 * the commands that should be restarted, and we should be able to continue 410 * on normally from here. We do not expect any interrupts that will return 411 * DID_RESET to any of the other commands in the host_queue, and the mid-level 412 * code does not need to do anything special to keep the commands alive. */ 413 #defineSCSI_RESET_SUCCESS 2
414
415 /* We called for a reset of this bus, and we should get an interrupt 416 * when this succeeds. Each command should get its own status 417 * passed up to scsi_done, but this has not happened yet. */ 418 #defineSCSI_RESET_PENDING 3
419
420 /* We did a reset, but do not expect an interrupt to signal DID_RESET. 421 * This tells the upper level code to request the sense info, and this 422 * should keep the command alive. */ 423 #defineSCSI_RESET_WAKEUP 4
424
425 /* Something went wrong, and we do not know how to fix it. */ 426 #defineSCSI_RESET_ERROR 5
427
428 void * scsi_malloc(unsignedint);
429 intscsi_free(void *, unsignedint);
430 externunsignedintdma_free_sectors; /* How much room do we have left */ 431 externunsignedintneed_isa_buffer; /* True if some devices need indirection 432 * buffers */ 433
434 /* 435 * The Scsi_Cmnd structure is used by scsi.c internally, and for communication 436 * with low level drivers that support multiple outstanding commands. 437 */ 438 typedefstruct scsi_pointer { 439 char * ptr; /* data pointer */ 440 intthis_residual; /* left in this buffer */ 441 structscatterlist *buffer; /* which buffer */ 442 intbuffers_residual; /* how many buffers left */ 443
444 volatileintStatus;
445 volatileintMessage;
446 volatileinthave_data_in;
447 volatileintsent_command;
448 volatileintphase;
449 }Scsi_Pointer;
450
451 typedefstructscsi_cmnd{ 452 structScsi_Host * host;
453 Scsi_Device * device;
454 unsignedchartarget, lun, channel;
455 unsignedcharcmd_len;
456 unsignedcharold_cmd_len;
457 structscsi_cmnd *next, *prev;
458
459 /* These elements define the operation we are about to perform */ 460 unsignedcharcmnd[12];
461 unsignedrequest_bufflen; /* Actual request size */ 462
463 void * request_buffer; /* Actual requested buffer */ 464
465 /* These elements define the operation we ultimately want to perform */ 466 unsignedchardata_cmnd[12];
467 unsignedshortold_use_sg; /* We save use_sg here when requesting 468 * sense info */ 469 unsignedshortuse_sg; /* Number of pieces of scatter-gather */ 470 unsignedshortsglist_len; /* size of malloc'd scatter-gather list */ 471 unsignedshortabort_reason;/* If the mid-level code requests an 472 * abort, this is the reason. */ 473 unsignedbufflen; /* Size of data buffer */ 474 void *buffer; /* Data buffer */ 475
476 unsignedunderflow; /* Return error if less than this amount is 477 * transfered */ 478
479 unsignedtransfersize; /* How much we are guaranteed to transfer with 480 * each SCSI transfer (ie, between disconnect / 481 * reconnects. Probably == sector size */ 482
483
484 structrequestrequest; /* A copy of the command we are working on */ 485
486 unsignedcharsense_buffer[16]; /* Sense for this command, if needed */ 487
488
489 intretries;
490 intallowed;
491 inttimeout_per_command, timeout_total, timeout;
492
493 /* 494 * We handle the timeout differently if it happens when a reset, 495 * abort, etc are in process. 496 */ 497 unsignedvolatilecharinternal_timeout;
498
499 unsignedflags;
500
501 /* These variables are for the cdrom only. Once we have variable size 502 * buffers in the buffer cache, they will go away. */ 503 intthis_count;
504 /* End of special cdrom variables */ 505
506 /* Low-level done function - can be used by low-level driver to point 507 * to completion function. Not used by mid/upper level code. */ 508 void (*scsi_done)(structscsi_cmnd *);
509 void (*done)(structscsi_cmnd *); /* Mid-level done function */ 510
511 /* 512 * The following fields can be written to by the host specific code. 513 * Everything else should be left alone. 514 */ 515
516 Scsi_PointerSCp; /* Scratchpad used by some host adapters */ 517
518 unsignedchar * host_scribble; /* The host adapter is allowed to 519 * call scsi_malloc and get some memory 520 * and hang it here. The host adapter 521 * is also expected to call scsi_free 522 * to release this memory. (The memory 523 * obtained by scsi_malloc is guaranteed 524 * to be at an address < 16Mb). */ 525
526 intresult; /* Status code from lower level driver */ 527
528 unsignedchartag; /* SCSI-II queued command tag */ 529 unsignedlongpid; /* Process ID, starts at 0 */ 530 }Scsi_Cmnd;
531
532 /* 533 * scsi_abort aborts the current command that is executing on host host. 534 * The error code, if non zero is returned in the host byte, otherwise 535 * DID_ABORT is returned in the hostbyte. 536 */ 537
538 externintscsi_abort (Scsi_Cmnd *, intcode, intpid);
539
540 externvoidscsi_do_cmd (Scsi_Cmnd *, constvoid *cmnd ,
541 void *buffer, unsignedbufflen,
542 void (*done)(structscsi_cmnd *),
543 inttimeout, intretries);
544
545
546 externScsi_Cmnd * allocate_device(structrequest **, Scsi_Device *, int);
547
548 externScsi_Cmnd * request_queueable(structrequest *, Scsi_Device *);
549 externintscsi_reset (Scsi_Cmnd *);
550
551 externintmax_scsi_hosts;
552
553 externvoidbuild_proc_dir_entries(void);
554
555 externintkernel_scsi_ioctl (Scsi_Device *dev, intcmd, void *arg);
556 externintscsi_ioctl (Scsi_Device *dev, intcmd, void *arg);
557 externvoidprint_command(unsignedchar *);
558 externvoidprint_sense(char *, Scsi_Cmnd *);
559
560
561 #ifdefined(MAJOR_NR) && (MAJOR_NR != SCSI_TAPE_MAJOR)
562 #include "hosts.h"
563
564 staticScsi_Cmnd * end_scsi_request(Scsi_Cmnd * SCpnt, intuptodate, intsectors)
/* */ 565 { 566 structrequest * req;
567 structbuffer_head * bh;
568
569 req = &SCpnt->request;
570 req->errors = 0;
571 if (!uptodate) { 572 printk(DEVICE_NAME " I/O error: dev %04x, sector %lu\n",
573 req->dev,req->sector);
574 } 575
576 do{ 577 if ((bh = req->bh) != NULL) { 578 req->bh = bh->b_reqnext;
579 req->nr_sectors -= bh->b_size >> 9;
580 req->sector += bh->b_size >> 9;
581 bh->b_reqnext = NULL;
582 bh->b_uptodate = uptodate;
583 unlock_buffer(bh);
584 sectors -= bh->b_size >> 9;
585 if ((bh = req->bh) != NULL) { 586 req->current_nr_sectors = bh->b_size >> 9;
587 if (req->nr_sectors < req->current_nr_sectors) { 588 req->nr_sectors = req->current_nr_sectors;
589 printk("end_scsi_request: buffer-list destroyed\n");
590 } 591 } 592 } 593 }while(sectors && bh);
594 if (req->bh){ 595 req->buffer = bh->b_data;
596 returnSCpnt;
597 };
598 DEVICE_OFF(req->dev);
599 if (req->sem != NULL) { 600 up(req->sem);
601 } 602
603 if (SCpnt->host->block) { 604 structScsi_Host * next;
605
606 for (next = SCpnt->host->block; next != SCpnt->host;
607 next = next->block)
608 wake_up(&next->host_wait);
609 } 610
611 req->dev = -1;
612 wake_up(&wait_for_request);
613 wake_up(&SCpnt->device->device_wait);
614 returnNULL;
615 } 616
617
618 /* This is just like INIT_REQUEST, but we need to be aware of the fact 619 * that an interrupt may start another request, so we run this with interrupts 620 * turned off 621 */ 622 #defineINIT_SCSI_REQUEST \
623 if (!CURRENT) {\
624 CLEAR_INTR; \
625 restore_flags(flags); \
626 return; \
627 } \
628 if (MAJOR(CURRENT->dev) != MAJOR_NR) \
629 panic(DEVICE_NAME ": request list destroyed"); \
630 if (CURRENT->bh) { \
631 if (!CURRENT->bh->b_lock) \
632 panic(DEVICE_NAME ": block not locked"); \
633 } 634 #endif 635
636 #defineSCSI_SLEEP(QUEUE, CONDITION) { \
637 if (CONDITION) { \
638 structwait_queuewait = {current, NULL}; \
639 add_wait_queue(QUEUE, &wait); \
640 for(;;) { \
641 current->state = TASK_UNINTERRUPTIBLE; \
642 if (CONDITION) { \
643 if (intr_count) \
644 panic("scsi: trying to call schedule() in interrupt" \
645 ", file %s, line %d.\n", __FILE__, __LINE__); \
646 schedule(); \
647 } \
648 else \
649 break; \
650 } \
651 remove_wait_queue(QUEUE, &wait); \
652 current->state = TASK_RUNNING; \
653 }; } 654
655 #endif 656
657 /* 658 * Overrides for Emacs so that we follow Linus's tabbing style. 659 * Emacs will notice this stuff at the end of the file and automatically 660 * adjust the settings for this buffer only. This must remain at the end 661 * of the file. 662 * --------------------------------------------------------------------------- 663 * Local variables: 664 * c-indent-level: 4 665 * c-brace-imaginary-offset: 0 666 * c-brace-offset: -4 667 * c-argdecl-indent: 4 668 * c-label-offset: -4 669 * c-continued-statement-offset: 4 670 * c-continued-brace-offset: 0 671 * indent-tabs-mode: nil 672 * tab-width: 8 673 * End: 674 */