|
|
1.1 root 1: /*
2: * scsi.c Copyright (C) 1992 Drew Eckhardt
3: * Copyright (C) 1993, 1994, 1995 Eric Youngdale
4: *
5: * generic mid-level SCSI driver
6: * Initial versions: Drew Eckhardt
7: * Subsequent revisions: Eric Youngdale
8: *
9: * <[email protected]>
10: *
11: * Bug correction thanks go to :
12: * Rik Faith <[email protected]>
13: * Tommy Thorn <tthorn>
14: * Thomas Wuensche <[email protected]>
15: *
16: * Modified by Eric Youngdale [email protected] to
17: * add scatter-gather, multiple outstanding request, and other
18: * enhancements.
19: *
20: * Native multichannel, wide scsi, /proc/scsi and hot plugging
21: * support added by Michael Neuffer <[email protected]>
22: *
23: * Added request_module("scsi_hostadapter") for kerneld:
24: * (Put an "alias scsi_hostadapter your_hostadapter" in /etc/conf.modules)
25: * Bjorn Ekwall <[email protected]>
26: *
27: * Major improvements to the timeout, abort, and reset processing,
28: * as well as performance modifications for large queue depths by
29: * Leonard N. Zubkoff <[email protected]>
30: */
31:
32: /*
33: * Don't import our own symbols, as this would severely mess up our
34: * symbol tables.
35: */
36: #define _SCSI_SYMS_VER_
37:
38: #include <linux/config.h>
39: #include <linux/module.h>
40:
41: #include <linux/sched.h>
42: #include <linux/timer.h>
43: #include <linux/string.h>
44: #include <linux/malloc.h>
45: #include <linux/ioport.h>
46: #include <linux/kernel.h>
47: #include <linux/stat.h>
48: #include <linux/blk.h>
49: #include <linux/interrupt.h>
50: #include <linux/delay.h>
51:
52: #include <asm/system.h>
53: #include <asm/irq.h>
54: #include <asm/dma.h>
55:
56: #include "scsi.h"
57: #include "hosts.h"
58: #include "constants.h"
59:
60: #ifdef CONFIG_KERNELD
61: #include <linux/kerneld.h>
62: #endif
63:
64: #undef USE_STATIC_SCSI_MEMORY
65:
66: /*
1.1.1.2 ! root 67: static const char RCSid[] = "$Header: /cvs/gnumach/linux/dev/drivers/scsi/scsi.c,v 1.1 1999/04/26 05:44:26 tb Exp $";
1.1 root 68: */
69:
70:
71: /* Command groups 3 and 4 are reserved and should never be used. */
72: const unsigned char scsi_command_size[8] = { 6, 10, 10, 12, 12, 12, 10, 10 };
73:
74: #define INTERNAL_ERROR (panic ("Internal error in file %s, line %d.\n", __FILE__, __LINE__))
75:
76: /*
77: * PAGE_SIZE must be a multiple of the sector size (512). True
78: * for all reasonably recent architectures (even the VAX...).
79: */
80: #define SECTOR_SIZE 512
81: #define SECTORS_PER_PAGE (PAGE_SIZE/SECTOR_SIZE)
82:
83: #if SECTORS_PER_PAGE <= 8
84: typedef unsigned char FreeSectorBitmap;
85: #elif SECTORS_PER_PAGE <= 32
86: typedef unsigned int FreeSectorBitmap;
87: #else
88: # error You lose.
89: #endif
90:
91: static void scsi_done (Scsi_Cmnd *SCpnt);
92: static int update_timeout (Scsi_Cmnd *, int);
93: static void print_inquiry(unsigned char *data);
94: static void scsi_times_out (Scsi_Cmnd * SCpnt);
95: static int scan_scsis_single (int channel,int dev,int lun,int * max_scsi_dev ,
96: int * sparse_lun, Scsi_Device ** SDpnt, Scsi_Cmnd * SCpnt,
97: struct Scsi_Host *shpnt, char * scsi_result);
98: void scsi_build_commandblocks(Scsi_Device * SDpnt);
99:
100: #ifdef CONFIG_MODULES
101: extern struct symbol_table scsi_symbol_table;
102: #endif
103:
104: static FreeSectorBitmap * dma_malloc_freelist = NULL;
105: static int scsi_need_isa_bounce_buffers;
106: static unsigned int dma_sectors = 0;
107: unsigned int dma_free_sectors = 0;
108: unsigned int need_isa_buffer = 0;
109: static unsigned char ** dma_malloc_pages = NULL;
110:
111: static int time_start;
112: static int time_elapsed;
113: static volatile struct Scsi_Host * host_active = NULL;
114: #define SCSI_BLOCK(HOST) ((HOST->block && host_active && HOST != host_active) \
115: || (HOST->can_queue && HOST->host_busy >= HOST->can_queue))
116:
117: const char *const scsi_device_types[MAX_SCSI_DEVICE_CODE] =
118: {
119: "Direct-Access ",
120: "Sequential-Access",
121: "Printer ",
122: "Processor ",
123: "WORM ",
124: "CD-ROM ",
125: "Scanner ",
126: "Optical Device ",
127: "Medium Changer ",
128: "Communications "
129: };
130:
131:
132: /*
133: * global variables :
134: * scsi_devices an array of these specifying the address for each
135: * (host, id, LUN)
136: */
137:
138: Scsi_Device * scsi_devices = NULL;
139:
140: /* Process ID of SCSI commands */
141: unsigned long scsi_pid = 0;
142:
143: static unsigned long serial_number = 0;
144:
145: static unsigned char generic_sense[6] = {REQUEST_SENSE, 0,0,0, 255, 0};
146: static void resize_dma_pool(void);
147:
148: /* This variable is merely a hook so that we can debug the kernel with gdb. */
149: Scsi_Cmnd * last_cmnd = NULL;
150:
151: /* This is the pointer to the /proc/scsi code.
152: * It is only initialized to !=0 if the scsi code is present
153: */
154: #if CONFIG_PROC_FS
155: extern int (* dispatch_scsi_info_ptr)(int ino, char *buffer, char **start,
156: off_t offset, int length, int inout);
157: extern int dispatch_scsi_info(int ino, char *buffer, char **start,
158: off_t offset, int length, int inout);
159:
160: struct proc_dir_entry proc_scsi_scsi = {
161: PROC_SCSI_SCSI, 4, "scsi",
162: S_IFREG | S_IRUGO | S_IWUSR, 1, 0, 0, 0,
163: NULL,
164: NULL, NULL,
165: NULL, NULL, NULL
166: };
167: #endif
168:
169: /*
170: * This is the number of clock ticks we should wait before we time out
171: * and abort the command. This is for where the scsi.c module generates
172: * the command, not where it originates from a higher level, in which
173: * case the timeout is specified there.
174: *
175: * ABORT_TIMEOUT and RESET_TIMEOUT are the timeouts for RESET and ABORT
176: * respectively.
177: */
178:
179: #ifdef DEBUG_TIMEOUT
180: static void scsi_dump_status(void);
181: #endif
182:
183:
184: #ifdef DEBUG
185: #define SCSI_TIMEOUT (5*HZ)
186: #else
187: #define SCSI_TIMEOUT (2*HZ)
188: #endif
189:
190: #ifdef DEBUG
191: #define SENSE_TIMEOUT SCSI_TIMEOUT
192: #define ABORT_TIMEOUT SCSI_TIMEOUT
193: #define RESET_TIMEOUT SCSI_TIMEOUT
194: #else
195: #define SENSE_TIMEOUT (5*HZ/10)
196: #define RESET_TIMEOUT (5*HZ/10)
197: #define ABORT_TIMEOUT (5*HZ/10)
198: #endif
199:
200: #define MIN_RESET_DELAY (2*HZ)
201:
202: /* Do not call reset on error if we just did a reset within 15 sec. */
203: #define MIN_RESET_PERIOD (15*HZ)
204:
205: /* The following devices are known not to tolerate a lun != 0 scan for
206: * one reason or another. Some will respond to all luns, others will
207: * lock up.
208: */
209:
210: #define BLIST_NOLUN 0x01
211: #define BLIST_FORCELUN 0x02
212: #define BLIST_BORKEN 0x04
213: #define BLIST_KEY 0x08
214: #define BLIST_SINGLELUN 0x10
215: #define BLIST_NOTQ 0x20
216: #define BLIST_SPARSELUN 0x40
217: #define BLIST_MAX5LUN 0x80
218:
219: struct dev_info{
220: const char * vendor;
221: const char * model;
222: const char * revision; /* Latest revision known to be bad. Not used yet */
223: unsigned flags;
224: };
225:
226: /*
227: * This is what was previously known as the blacklist. The concept
228: * has been expanded so that we can specify other types of things we
229: * need to be aware of.
230: */
231: static struct dev_info device_list[] =
232: {
233: {"TEAC","CD-R55S","1.0H", BLIST_NOLUN}, /* Locks up if polled for lun != 0 */
234: {"CHINON","CD-ROM CDS-431","H42", BLIST_NOLUN}, /* Locks up if polled for lun != 0 */
235: {"CHINON","CD-ROM CDS-535","Q14", BLIST_NOLUN}, /* Locks up if polled for lun != 0 */
236: {"DENON","DRD-25X","V", BLIST_NOLUN}, /* Locks up if probed for lun != 0 */
237: {"HITACHI","DK312C","CM81", BLIST_NOLUN}, /* Responds to all lun - dtg */
238: {"HITACHI","DK314C","CR21" , BLIST_NOLUN}, /* responds to all lun */
239: {"IMS", "CDD521/10","2.06", BLIST_NOLUN}, /* Locks-up when LUN>0 polled. */
240: {"MAXTOR","XT-3280","PR02", BLIST_NOLUN}, /* Locks-up when LUN>0 polled. */
241: {"MAXTOR","XT-4380S","B3C", BLIST_NOLUN}, /* Locks-up when LUN>0 polled. */
242: {"MAXTOR","MXT-1240S","I1.2", BLIST_NOLUN}, /* Locks up when LUN>0 polled */
243: {"MAXTOR","XT-4170S","B5A", BLIST_NOLUN}, /* Locks-up sometimes when LUN>0 polled. */
244: {"MAXTOR","XT-8760S","B7B", BLIST_NOLUN}, /* guess what? */
245: {"MEDIAVIS","RENO CD-ROMX2A","2.03",BLIST_NOLUN},/*Responds to all lun */
246: {"MICROP", "4110", "*", BLIST_NOTQ}, /* Buggy Tagged Queuing */
247: {"NEC","CD-ROM DRIVE:841","1.0", BLIST_NOLUN}, /* Locks-up when LUN>0 polled. */
248: {"RODIME","RO3000S","2.33", BLIST_NOLUN}, /* Locks up if polled for lun != 0 */
249: {"SANYO", "CRD-250S", "1.20", BLIST_NOLUN}, /* causes failed REQUEST SENSE on lun 1
250: * for aha152x controller, which causes
251: * SCSI code to reset bus.*/
252: {"SEAGATE", "ST157N", "\004|j", BLIST_NOLUN}, /* causes failed REQUEST SENSE on lun 1
253: * for aha152x controller, which causes
254: * SCSI code to reset bus.*/
255: {"SEAGATE", "ST296","921", BLIST_NOLUN}, /* Responds to all lun */
256: {"SEAGATE","ST1581","6538",BLIST_NOLUN}, /* Responds to all lun */
257: {"SONY","CD-ROM CDU-541","4.3d", BLIST_NOLUN},
258: {"SONY","CD-ROM CDU-55S","1.0i", BLIST_NOLUN},
259: {"SONY","CD-ROM CDU-561","1.7x", BLIST_NOLUN},
260: {"TANDBERG","TDC 3600","U07", BLIST_NOLUN}, /* Locks up if polled for lun != 0 */
261: {"TEAC","CD-ROM","1.06", BLIST_NOLUN}, /* causes failed REQUEST SENSE on lun 1
262: * for seagate controller, which causes
263: * SCSI code to reset bus.*/
264: {"TEXEL","CD-ROM","1.06", BLIST_NOLUN}, /* causes failed REQUEST SENSE on lun 1
265: * for seagate controller, which causes
266: * SCSI code to reset bus.*/
267: {"QUANTUM","LPS525S","3110", BLIST_NOLUN}, /* Locks sometimes if polled for lun != 0 */
268: {"QUANTUM","PD1225S","3110", BLIST_NOLUN}, /* Locks sometimes if polled for lun != 0 */
269: {"MEDIAVIS","CDR-H93MV","1.31", BLIST_NOLUN}, /* Locks up if polled for lun != 0 */
270: {"SANKYO", "CP525","6.64", BLIST_NOLUN}, /* causes failed REQ SENSE, extra reset */
271: {"HP", "C1750A", "3226", BLIST_NOLUN}, /* scanjet iic */
272: {"HP", "C1790A", "", BLIST_NOLUN}, /* scanjet iip */
273: {"HP", "C2500A", "", BLIST_NOLUN}, /* scanjet iicx */
274:
275: /*
276: * Other types of devices that have special flags.
277: */
278: {"SONY","CD-ROM CDU-8001","*", BLIST_BORKEN},
279: {"TEXEL","CD-ROM","1.06", BLIST_BORKEN},
280: {"IOMEGA","Io20S *F","*", BLIST_KEY},
281: {"INSITE","Floptical F*8I","*", BLIST_KEY},
282: {"INSITE","I325VM","*", BLIST_KEY},
283: {"NRC","MBR-7","*", BLIST_FORCELUN | BLIST_SINGLELUN},
284: {"NRC","MBR-7.4","*", BLIST_FORCELUN | BLIST_SINGLELUN},
285: {"REGAL","CDC-4X","*", BLIST_MAX5LUN | BLIST_SINGLELUN},
286: {"NAKAMICH","MJ-4.8S","*", BLIST_FORCELUN | BLIST_SINGLELUN},
287: {"NAKAMICH","MJ-5.16S","*", BLIST_FORCELUN | BLIST_SINGLELUN},
288: {"PIONEER","CD-ROM DRM-600","*", BLIST_FORCELUN | BLIST_SINGLELUN},
289: {"PIONEER","CD-ROM DRM-602X","*", BLIST_FORCELUN | BLIST_SINGLELUN},
290: {"PIONEER","CD-ROM DRM-604X","*", BLIST_FORCELUN | BLIST_SINGLELUN},
291: {"EMULEX","MD21/S2 ESDI","*", BLIST_SINGLELUN},
292: {"CANON","IPUBJD","*", BLIST_SPARSELUN},
293: {"MATSHITA","PD","*", BLIST_FORCELUN | BLIST_SINGLELUN},
294: {"YAMAHA","CDR100","1.00", BLIST_NOLUN}, /* Locks up if polled for lun != 0 */
295: {"YAMAHA","CDR102","1.00", BLIST_NOLUN}, /* Locks up if polled for lun != 0 */
296: {"nCipher","Fastness Crypto","*", BLIST_FORCELUN},
297: /*
298: * Must be at end of list...
299: */
300: {NULL, NULL, NULL}
301: };
302:
303: static int get_device_flags(unsigned char * response_data){
304: int i = 0;
305: unsigned char * pnt;
306: for(i=0; 1; i++){
307: if(device_list[i].vendor == NULL) return 0;
308: pnt = &response_data[8];
309: while(*pnt && *pnt == ' ') pnt++;
310: if(memcmp(device_list[i].vendor, pnt,
311: strlen(device_list[i].vendor))) continue;
312: pnt = &response_data[16];
313: while(*pnt && *pnt == ' ') pnt++;
314: if(memcmp(device_list[i].model, pnt,
315: strlen(device_list[i].model))) continue;
316: return device_list[i].flags;
317: }
318: return 0;
319: }
320:
321: void scsi_make_blocked_list(void) {
322: int block_count = 0, index;
323: unsigned long flags;
324: struct Scsi_Host * sh[128], * shpnt;
325:
326: /*
327: * Create a circular linked list from the scsi hosts which have
328: * the "wish_block" field in the Scsi_Host structure set.
329: * The blocked list should include all the scsi hosts using ISA DMA.
330: * In some systems, using two dma channels simultaneously causes
331: * unpredictable results.
332: * Among the scsi hosts in the blocked list, only one host at a time
333: * is allowed to have active commands queued. The transition from
334: * one active host to the next one is allowed only when host_busy == 0
335: * for the active host (which implies host_busy == 0 for all the hosts
336: * in the list). Moreover for block devices the transition to a new
337: * active host is allowed only when a request is completed, since a
338: * block device request can be divided into multiple scsi commands
339: * (when there are few sg lists or clustering is disabled).
340: *
341: * (DB, 4 Feb 1995)
342: */
343:
344: save_flags(flags);
345: cli();
346: host_active = NULL;
347:
348: for(shpnt=scsi_hostlist; shpnt; shpnt = shpnt->next) {
349:
350: #if 0
351: /*
352: * Is this is a candidate for the blocked list?
353: * Useful to put into the blocked list all the hosts whose driver
354: * does not know about the host->block feature.
355: */
356: if (shpnt->unchecked_isa_dma) shpnt->wish_block = 1;
357: #endif
358:
359: if (shpnt->wish_block) sh[block_count++] = shpnt;
360: }
361:
362: if (block_count == 1) sh[0]->block = NULL;
363:
364: else if (block_count > 1) {
365:
366: for(index = 0; index < block_count - 1; index++) {
367: sh[index]->block = sh[index + 1];
368: printk("scsi%d : added to blocked host list.\n",
369: sh[index]->host_no);
370: }
371:
372: sh[block_count - 1]->block = sh[0];
373: printk("scsi%d : added to blocked host list.\n",
374: sh[index]->host_no);
375: }
376:
377: restore_flags(flags);
378: }
379:
380: static void scan_scsis_done (Scsi_Cmnd * SCpnt)
381: {
382:
383: #ifdef DEBUG
384: printk ("scan_scsis_done(%p, %06x)\n", SCpnt->host, SCpnt->result);
385: #endif
386: SCpnt->request.rq_status = RQ_SCSI_DONE;
387:
388: if (SCpnt->request.sem != NULL)
389: up(SCpnt->request.sem);
390: }
391:
392: #ifdef CONFIG_SCSI_MULTI_LUN
393: static int max_scsi_luns = 8;
394: #else
395: static int max_scsi_luns = 1;
396: #endif
397:
398: void scsi_luns_setup(char *str, int *ints) {
399: if (ints[0] != 1)
400: printk("scsi_luns_setup : usage max_scsi_luns=n (n should be between 1 and 8)\n");
401: else
402: max_scsi_luns = ints[1];
403: }
404:
405: /*
406: * Detecting SCSI devices :
407: * We scan all present host adapter's busses, from ID 0 to ID (max_id).
408: * We use the INQUIRY command, determine device type, and pass the ID /
409: * lun address of all sequential devices to the tape driver, all random
410: * devices to the disk driver.
411: */
412: static void scan_scsis (struct Scsi_Host *shpnt, unchar hardcoded,
413: unchar hchannel, unchar hid, unchar hlun)
414: {
415: int dev, lun, channel;
416: unsigned char scsi_result0[256];
417: unsigned char *scsi_result;
418: Scsi_Device *SDpnt;
419: int max_dev_lun, sparse_lun;
420: Scsi_Cmnd *SCpnt;
421:
422: SCpnt = (Scsi_Cmnd *) scsi_init_malloc (sizeof (Scsi_Cmnd), GFP_ATOMIC | GFP_DMA);
423: SDpnt = (Scsi_Device *) scsi_init_malloc (sizeof (Scsi_Device), GFP_ATOMIC);
424: memset (SCpnt, 0, sizeof (Scsi_Cmnd));
425:
426:
427: /* Make sure we have something that is valid for DMA purposes */
428: scsi_result = ( ( !shpnt->unchecked_isa_dma )
429: ? &scsi_result0[0] : scsi_init_malloc (512, GFP_DMA));
430:
431: if (scsi_result == NULL) {
432: printk ("Unable to obtain scsi_result buffer\n");
433: goto leave;
434: }
435:
436: /* We must chain ourself in the host_queue, so commands can time out */
437: if(shpnt->host_queue)
438: shpnt->host_queue->prev = SCpnt;
439: SCpnt->next = shpnt->host_queue;
440: SCpnt->prev = NULL;
441: shpnt->host_queue = SCpnt;
442:
443:
444: if (hardcoded == 1) {
445: Scsi_Device *oldSDpnt=SDpnt;
446: struct Scsi_Device_Template * sdtpnt;
447: channel = hchannel;
448: if(channel > shpnt->max_channel) goto leave;
449: dev = hid;
450: if(dev >= shpnt->max_id) goto leave;
451: lun = hlun;
452: if(lun >= shpnt->max_lun) goto leave;
453: scan_scsis_single (channel, dev, lun, &max_dev_lun, &sparse_lun,
454: &SDpnt, SCpnt, shpnt, scsi_result);
455: if(SDpnt!=oldSDpnt) {
456:
457: /* it could happen the blockdevice hasn't yet been inited */
458: for(sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next)
459: if(sdtpnt->init && sdtpnt->dev_noticed) (*sdtpnt->init)();
460:
461: oldSDpnt->scsi_request_fn = NULL;
462: for(sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next)
463: if(sdtpnt->attach) {
464: (*sdtpnt->attach)(oldSDpnt);
465: if(oldSDpnt->attached) scsi_build_commandblocks(oldSDpnt);}
466: resize_dma_pool();
467:
468: for(sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next) {
469: if(sdtpnt->finish && sdtpnt->nr_dev)
470: {(*sdtpnt->finish)();}
471: }
472: }
473:
474: }
475: else {
476: for (channel = 0; channel <= shpnt->max_channel; channel++) {
477: for (dev = 0; dev < shpnt->max_id; ++dev) {
478: if (shpnt->this_id != dev) {
479:
480: /*
481: * We need the for so our continue, etc. work fine. We put this in
482: * a variable so that we can override it during the scan if we
483: * detect a device *KNOWN* to have multiple logical units.
484: */
485: max_dev_lun = (max_scsi_luns < shpnt->max_lun ?
486: max_scsi_luns : shpnt->max_lun);
487: sparse_lun = 0;
488: for (lun = 0; lun < max_dev_lun; ++lun) {
489: if (!scan_scsis_single (channel, dev, lun, &max_dev_lun,
490: &sparse_lun, &SDpnt, SCpnt, shpnt,
491: scsi_result)
492: && !sparse_lun)
493: break; /* break means don't probe further for luns!=0 */
494: } /* for lun ends */
495: } /* if this_id != id ends */
496: } /* for dev ends */
497: } /* for channel ends */
498: } /* if/else hardcoded */
499:
500: leave:
501:
502: {/* Unchain SCpnt from host_queue */
503: Scsi_Cmnd *prev, *next, *hqptr;
504: for(hqptr = shpnt->host_queue; hqptr != SCpnt; hqptr = hqptr->next) ;
505: if(hqptr) {
506: prev = hqptr->prev;
507: next = hqptr->next;
508: if(prev)
509: prev->next = next;
510: else
511: shpnt->host_queue = next;
512: if(next) next->prev = prev;
513: }
514: }
515:
516: /* Last device block does not exist. Free memory. */
517: if (SDpnt != NULL)
518: scsi_init_free ((char *) SDpnt, sizeof (Scsi_Device));
519:
520: if (SCpnt != NULL)
521: scsi_init_free ((char *) SCpnt, sizeof (Scsi_Cmnd));
522:
523: /* If we allocated a buffer so we could do DMA, free it now */
524: if (scsi_result != &scsi_result0[0] && scsi_result != NULL)
525: scsi_init_free (scsi_result, 512);
526:
527: }
528:
529: /*
530: * The worker for scan_scsis.
531: * Returning 0 means Please don't ask further for lun!=0, 1 means OK go on.
532: * Global variables used : scsi_devices(linked list)
533: */
534: int scan_scsis_single (int channel, int dev, int lun, int *max_dev_lun,
535: int *sparse_lun, Scsi_Device **SDpnt2, Scsi_Cmnd * SCpnt,
536: struct Scsi_Host * shpnt, char *scsi_result)
537: {
538: unsigned char scsi_cmd[12];
539: struct Scsi_Device_Template *sdtpnt;
540: Scsi_Device * SDtail, *SDpnt=*SDpnt2;
541: int bflags, type=-1;
542:
543: SDtail = scsi_devices;
544: if (scsi_devices)
545: while (SDtail->next)
546: SDtail = SDtail->next;
547:
548: memset (SDpnt, 0, sizeof (Scsi_Device));
549: SDpnt->host = shpnt;
550: SDpnt->id = dev;
551: SDpnt->lun = lun;
552: SDpnt->channel = channel;
553:
554: /* Some low level driver could use device->type (DB) */
555: SDpnt->type = -1;
556:
557: /*
558: * Assume that the device will have handshaking problems, and then fix this
559: * field later if it turns out it doesn't
560: */
561: SDpnt->borken = 1;
562: SDpnt->was_reset = 0;
563: SDpnt->expecting_cc_ua = 0;
564:
565: scsi_cmd[0] = TEST_UNIT_READY;
566: scsi_cmd[1] = lun << 5;
567: scsi_cmd[2] = scsi_cmd[3] = scsi_cmd[4] = scsi_cmd[5] = 0;
568:
569: SCpnt->host = SDpnt->host;
570: SCpnt->device = SDpnt;
571: SCpnt->target = SDpnt->id;
572: SCpnt->lun = SDpnt->lun;
573: SCpnt->channel = SDpnt->channel;
574: {
575: struct semaphore sem = MUTEX_LOCKED;
576: SCpnt->request.sem = &sem;
577: SCpnt->request.rq_status = RQ_SCSI_BUSY;
578: scsi_do_cmd (SCpnt, (void *) scsi_cmd,
579: (void *) scsi_result,
580: 256, scan_scsis_done, SCSI_TIMEOUT + 4 * HZ, 5);
581: down (&sem);
582: }
583:
584: #if defined(DEBUG) || defined(DEBUG_INIT)
585: printk ("scsi: scan_scsis_single id %d lun %d. Return code 0x%08x\n",
586: dev, lun, SCpnt->result);
587: print_driverbyte(SCpnt->result); print_hostbyte(SCpnt->result);
588: printk("\n");
589: #endif
590:
591: if (SCpnt->result) {
592: if (((driver_byte (SCpnt->result) & DRIVER_SENSE) ||
593: (status_byte (SCpnt->result) & CHECK_CONDITION)) &&
594: ((SCpnt->sense_buffer[0] & 0x70) >> 4) == 7) {
595: if (((SCpnt->sense_buffer[2] & 0xf) != NOT_READY) &&
596: ((SCpnt->sense_buffer[2] & 0xf) != UNIT_ATTENTION) &&
597: ((SCpnt->sense_buffer[2] & 0xf) != ILLEGAL_REQUEST || lun > 0))
598: return 1;
599: }
600: else
601: return 0;
602: }
603:
604: #if defined (DEBUG) || defined(DEBUG_INIT)
605: printk ("scsi: performing INQUIRY\n");
606: #endif
607: /*
608: * Build an INQUIRY command block.
609: */
610: scsi_cmd[0] = INQUIRY;
611: scsi_cmd[1] = (lun << 5) & 0xe0;
612: scsi_cmd[2] = 0;
613: scsi_cmd[3] = 0;
614: scsi_cmd[4] = 255;
615: scsi_cmd[5] = 0;
616: SCpnt->cmd_len = 0;
617: {
618: struct semaphore sem = MUTEX_LOCKED;
619: SCpnt->request.sem = &sem;
620: SCpnt->request.rq_status = RQ_SCSI_BUSY;
621: scsi_do_cmd (SCpnt, (void *) scsi_cmd,
622: (void *) scsi_result,
623: 256, scan_scsis_done, SCSI_TIMEOUT, 3);
624: down (&sem);
625: }
626:
627: #if defined(DEBUG) || defined(DEBUG_INIT)
628: printk ("scsi: INQUIRY %s with code 0x%x\n",
629: SCpnt->result ? "failed" : "successful", SCpnt->result);
630: #endif
631:
632: if (SCpnt->result)
633: return 0; /* assume no peripheral if any sort of error */
634:
635: /*
636: * Check the peripheral qualifier field - this tells us whether LUNS
637: * are supported here or not.
638: */
639: if( (scsi_result[0] >> 5) == 3 )
640: {
641: return 0; /* assume no peripheral if any sort of error */
642: }
643:
644: /*
645: * It would seem some TOSHIBA CDROM gets things wrong
646: */
647: if (!strncmp (scsi_result + 8, "TOSHIBA", 7) &&
648: !strncmp (scsi_result + 16, "CD-ROM", 6) &&
649: scsi_result[0] == TYPE_DISK) {
650: scsi_result[0] = TYPE_ROM;
651: scsi_result[1] |= 0x80; /* removable */
652: }
653:
654: if (!strncmp (scsi_result + 8, "NEC", 3)) {
655: if (!strncmp (scsi_result + 16, "CD-ROM DRIVE:84 ", 16) ||
656: !strncmp (scsi_result + 16, "CD-ROM DRIVE:25", 15))
657: SDpnt->manufacturer = SCSI_MAN_NEC_OLDCDR;
658: else
659: SDpnt->manufacturer = SCSI_MAN_NEC;
660: }
661: else if (!strncmp (scsi_result + 8, "TOSHIBA", 7))
662: SDpnt->manufacturer = SCSI_MAN_TOSHIBA;
663: else if (!strncmp (scsi_result + 8, "SONY", 4))
664: SDpnt->manufacturer = SCSI_MAN_SONY;
665: else if (!strncmp (scsi_result + 8, "PIONEER", 7))
666: SDpnt->manufacturer = SCSI_MAN_PIONEER;
667: else
668: SDpnt->manufacturer = SCSI_MAN_UNKNOWN;
669:
670: memcpy (SDpnt->vendor, scsi_result + 8, 8);
671: memcpy (SDpnt->model, scsi_result + 16, 16);
672: memcpy (SDpnt->rev, scsi_result + 32, 4);
673:
674: SDpnt->removable = (0x80 & scsi_result[1]) >> 7;
675: SDpnt->lockable = SDpnt->removable;
676: SDpnt->changed = 0;
677: SDpnt->access_count = 0;
678: SDpnt->busy = 0;
679: SDpnt->has_cmdblocks = 0;
680: /*
681: * Currently, all sequential devices are assumed to be tapes, all random
682: * devices disk, with the appropriate read only flags set for ROM / WORM
683: * treated as RO.
684: */
685: switch (type = (scsi_result[0] & 0x1f)) {
686: case TYPE_TAPE:
687: case TYPE_DISK:
688: case TYPE_MOD:
689: case TYPE_PROCESSOR:
690: case TYPE_SCANNER:
691: case TYPE_MEDIUM_CHANGER:
692: SDpnt->writeable = 1;
693: break;
694: case TYPE_WORM:
695: case TYPE_ROM:
696: SDpnt->writeable = 0;
697: break;
698: default:
699: printk ("scsi: unknown type %d\n", type);
700: }
701:
702: SDpnt->single_lun = 0;
703: SDpnt->soft_reset =
704: (scsi_result[7] & 1) && ((scsi_result[3] & 7) == 2);
705: SDpnt->random = (type == TYPE_TAPE) ? 0 : 1;
706: SDpnt->type = (type & 0x1f);
707:
708: print_inquiry (scsi_result);
709:
710: for (sdtpnt = scsi_devicelist; sdtpnt;
711: sdtpnt = sdtpnt->next)
712: if (sdtpnt->detect)
713: SDpnt->attached +=
714: (*sdtpnt->detect) (SDpnt);
715:
716: SDpnt->scsi_level = scsi_result[2] & 0x07;
717: if (SDpnt->scsi_level >= 2 ||
718: (SDpnt->scsi_level == 1 &&
719: (scsi_result[3] & 0x0f) == 1))
720: SDpnt->scsi_level++;
721:
722: /*
723: * Accommodate drivers that want to sleep when they should be in a polling
724: * loop.
725: */
726: SDpnt->disconnect = 0;
727:
728: /*
729: * Get any flags for this device.
730: */
731: bflags = get_device_flags (scsi_result);
732:
733: /*
734: * Set the tagged_queue flag for SCSI-II devices that purport to support
735: * tagged queuing in the INQUIRY data.
736: */
737: SDpnt->tagged_queue = 0;
738: if ((SDpnt->scsi_level >= SCSI_2) &&
739: (scsi_result[7] & 2) &&
740: !(bflags & BLIST_NOTQ)) {
741: SDpnt->tagged_supported = 1;
742: SDpnt->current_tag = 0;
743: }
744:
745: /*
746: * Some revisions of the Texel CD ROM drives have handshaking problems when
747: * used with the Seagate controllers. Before we know what type of device
748: * we're talking to, we assume it's borken and then change it here if it
749: * turns out that it isn't a TEXEL drive.
750: */
751: if ((bflags & BLIST_BORKEN) == 0)
752: SDpnt->borken = 0;
753:
754: /*
755: * If we want to only allow I/O to one of the luns attached to this device
756: * at a time, then we set this flag.
757: */
758: if (bflags & BLIST_SINGLELUN)
759: SDpnt->single_lun = 1;
760:
761: /*
762: * These devices need this "key" to unlock the devices so we can use it
763: */
764: if ((bflags & BLIST_KEY) != 0) {
765: printk ("Unlocked floptical drive.\n");
766: SDpnt->lockable = 0;
767: scsi_cmd[0] = MODE_SENSE;
768: scsi_cmd[1] = (lun << 5) & 0xe0;
769: scsi_cmd[2] = 0x2e;
770: scsi_cmd[3] = 0;
771: scsi_cmd[4] = 0x2a;
772: scsi_cmd[5] = 0;
773: SCpnt->cmd_len = 0;
774: {
775: struct semaphore sem = MUTEX_LOCKED;
776: SCpnt->request.rq_status = RQ_SCSI_BUSY;
777: SCpnt->request.sem = &sem;
778: scsi_do_cmd (SCpnt, (void *) scsi_cmd,
779: (void *) scsi_result, 0x2a,
780: scan_scsis_done, SCSI_TIMEOUT, 3);
781: down (&sem);
782: }
783: }
784: /* Add this device to the linked list at the end */
785: if (SDtail)
786: SDtail->next = SDpnt;
787: else
788: scsi_devices = SDpnt;
789: SDtail = SDpnt;
790:
791: SDpnt = (Scsi_Device *) scsi_init_malloc (sizeof (Scsi_Device), GFP_ATOMIC);
792: *SDpnt2=SDpnt;
793: if (!SDpnt)
794: printk ("scsi: scan_scsis_single: Cannot malloc\n");
795:
796:
797: /*
798: * Some scsi devices cannot be polled for lun != 0 due to firmware bugs
799: */
800: if (bflags & BLIST_NOLUN)
801: return 0; /* break; */
802:
803: /*
804: * If this device is known to support sparse multiple units, override the
805: * other settings, and scan all of them.
806: */
807: if (bflags & BLIST_SPARSELUN) {
808: *max_dev_lun = 8;
809: *sparse_lun = 1;
810: return 1;
811: }
812:
813: /*
814: * If this device is known to support multiple units, override the other
815: * settings, and scan all of them.
816: */
817: if (bflags & BLIST_FORCELUN) {
818: *max_dev_lun = 8;
819: return 1;
820: }
821:
822: /*
823: * REGAL CDC-4X: avoid hang after LUN 4
824: */
825: if (bflags & BLIST_MAX5LUN) {
826: *max_dev_lun = 5;
827: return 1;
828: }
829:
830: /*
831: * We assume the device can't handle lun!=0 if: - it reports scsi-0 (ANSI
832: * SCSI Revision 0) (old drives like MAXTOR XT-3280) or - it reports scsi-1
833: * (ANSI SCSI Revision 1) and Response Data Format 0
834: */
835: if (((scsi_result[2] & 0x07) == 0)
836: ||
837: ((scsi_result[2] & 0x07) == 1 &&
838: (scsi_result[3] & 0x0f) == 0))
839: return 0;
840: return 1;
841: }
842:
843: /*
844: * Flag bits for the internal_timeout array
845: */
846: #define NORMAL_TIMEOUT 0
847: #define IN_ABORT 1
848: #define IN_RESET 2
849: #define IN_RESET2 4
850: #define IN_RESET3 8
851:
852: /*
853: * This is our time out function, called when the timer expires for a
854: * given host adapter. It will attempt to abort the currently executing
855: * command, that failing perform a kernel panic.
856: */
857:
858: static void scsi_times_out (Scsi_Cmnd * SCpnt)
859: {
860:
861: switch (SCpnt->internal_timeout & (IN_ABORT | IN_RESET | IN_RESET2 | IN_RESET3))
862: {
863: case NORMAL_TIMEOUT:
864: {
865: #ifdef DEBUG_TIMEOUT
866: scsi_dump_status();
867: #endif
868: }
869:
870: if (!scsi_abort (SCpnt, DID_TIME_OUT))
871: return;
872: case IN_ABORT:
873: printk("SCSI host %d abort (pid %ld) timed out - resetting\n",
874: SCpnt->host->host_no, SCpnt->pid);
875: if (!scsi_reset (SCpnt, SCSI_RESET_ASYNCHRONOUS))
876: return;
877: case IN_RESET:
878: case (IN_ABORT | IN_RESET):
879: /* This might be controversial, but if there is a bus hang,
880: * you might conceivably want the machine up and running
881: * esp if you have an ide disk.
882: */
883: printk("SCSI host %d channel %d reset (pid %ld) timed out - "
884: "trying harder\n",
885: SCpnt->host->host_no, SCpnt->channel, SCpnt->pid);
886: SCpnt->internal_timeout &= ~IN_RESET;
887: SCpnt->internal_timeout |= IN_RESET2;
888: scsi_reset (SCpnt,
889: SCSI_RESET_ASYNCHRONOUS | SCSI_RESET_SUGGEST_BUS_RESET);
890: return;
891: case IN_RESET2:
892: case (IN_ABORT | IN_RESET2):
893: /* Obviously the bus reset didn't work.
894: * Let's try even harder and call for an HBA reset.
895: * Maybe the HBA itself crashed and this will shake it loose.
896: */
897: printk("SCSI host %d reset (pid %ld) timed out - trying to shake it loose\n",
898: SCpnt->host->host_no, SCpnt->pid);
899: SCpnt->internal_timeout &= ~(IN_RESET | IN_RESET2);
900: SCpnt->internal_timeout |= IN_RESET3;
901: scsi_reset (SCpnt,
902: SCSI_RESET_ASYNCHRONOUS | SCSI_RESET_SUGGEST_HOST_RESET);
903: return;
904:
905: default:
906: printk("SCSI host %d reset (pid %ld) timed out again -\n",
907: SCpnt->host->host_no, SCpnt->pid);
908: printk("probably an unrecoverable SCSI bus or device hang.\n");
909: return;
910:
911: }
912:
913: }
914:
915:
916: /* This function takes a quick look at a request, and decides if it
917: * can be queued now, or if there would be a stall while waiting for
918: * something else to finish. This routine assumes that interrupts are
919: * turned off when entering the routine. It is the responsibility
920: * of the calling code to ensure that this is the case.
921: */
922:
923: Scsi_Cmnd * request_queueable (struct request * req, Scsi_Device * device)
924: {
925: Scsi_Cmnd * SCpnt = NULL;
926: int tablesize;
927: Scsi_Cmnd * found = NULL;
928: struct buffer_head * bh, *bhp;
929:
930: if (!device)
931: panic ("No device passed to request_queueable().\n");
932:
933: if (req && req->rq_status == RQ_INACTIVE)
934: panic("Inactive in request_queueable");
935:
936: /*
937: * Look for a free command block. If we have been instructed not to queue
938: * multiple commands to multi-lun devices, then check to see what else is
939: * going for this device first.
940: */
941:
942: if (!device->single_lun) {
943: SCpnt = device->device_queue;
944: while(SCpnt){
945: if(SCpnt->request.rq_status == RQ_INACTIVE) break;
946: SCpnt = SCpnt->device_next;
947: }
948: } else {
949: SCpnt = device->host->host_queue;
950: while(SCpnt){
951: if(SCpnt->channel == device->channel
952: && SCpnt->target == device->id) {
953: if (SCpnt->lun == device->lun) {
954: if(found == NULL
955: && SCpnt->request.rq_status == RQ_INACTIVE)
956: {
957: found=SCpnt;
958: }
959: }
960: if(SCpnt->request.rq_status != RQ_INACTIVE) {
961: /*
962: * I think that we should really limit things to one
963: * outstanding command per device - this is what tends
964: * to trip up buggy firmware.
965: */
966: return NULL;
967: }
968: }
969: SCpnt = SCpnt->next;
970: }
971: SCpnt = found;
972: }
973:
974: if (!SCpnt) return NULL;
975:
976: if (SCSI_BLOCK(device->host)) return NULL;
977:
978: if (req) {
979: memcpy(&SCpnt->request, req, sizeof(struct request));
980: tablesize = device->host->sg_tablesize;
981: bhp = bh = req->bh;
982: if(!tablesize) bh = NULL;
983: /* Take a quick look through the table to see how big it is.
984: * We already have our copy of req, so we can mess with that
985: * if we want to.
986: */
987: while(req->nr_sectors && bh){
988: bhp = bhp->b_reqnext;
989: if(!bhp || !CONTIGUOUS_BUFFERS(bh,bhp)) tablesize--;
990: req->nr_sectors -= bh->b_size >> 9;
991: req->sector += bh->b_size >> 9;
992: if(!tablesize) break;
993: bh = bhp;
994: }
995: if(req->nr_sectors && bh && bh->b_reqnext){ /* Any leftovers? */
996: SCpnt->request.bhtail = bh;
997: req->bh = bh->b_reqnext; /* Divide request */
998: bh->b_reqnext = NULL;
999: bh = req->bh;
1000:
1001: /* Now reset things so that req looks OK */
1002: SCpnt->request.nr_sectors -= req->nr_sectors;
1003: req->current_nr_sectors = bh->b_size >> 9;
1004: req->buffer = bh->b_data;
1005: SCpnt->request.sem = NULL; /* Wait until whole thing done */
1006: } else {
1007: req->rq_status = RQ_INACTIVE;
1008: wake_up(&wait_for_request);
1009: }
1010: } else {
1011: SCpnt->request.rq_status = RQ_SCSI_BUSY; /* Busy, but no request */
1012: SCpnt->request.sem = NULL; /* And no one is waiting for the device
1013: * either */
1014: }
1015:
1016: SCpnt->use_sg = 0; /* Reset the scatter-gather flag */
1017: SCpnt->old_use_sg = 0;
1018: SCpnt->transfersize = 0;
1019: SCpnt->underflow = 0;
1020: SCpnt->cmd_len = 0;
1021:
1022: /* Since not everyone seems to set the device info correctly
1023: * before Scsi_Cmnd gets send out to scsi_do_command, we do it here.
1024: */
1025: SCpnt->channel = device->channel;
1026: SCpnt->lun = device->lun;
1027: SCpnt->target = device->id;
1028:
1029: return SCpnt;
1030: }
1031:
1032: /* This function returns a structure pointer that will be valid for
1033: * the device. The wait parameter tells us whether we should wait for
1034: * the unit to become free or not. We are also able to tell this routine
1035: * not to return a descriptor if the host is unable to accept any more
1036: * commands for the time being. We need to keep in mind that there is no
1037: * guarantee that the host remain not busy. Keep in mind the
1038: * request_queueable function also knows the internal allocation scheme
1039: * of the packets for each device
1040: */
1041:
1042: Scsi_Cmnd * allocate_device (struct request ** reqp, Scsi_Device * device,
1043: int wait)
1044: {
1045: kdev_t dev;
1046: struct request * req = NULL;
1047: int tablesize;
1048: unsigned long flags;
1049: struct buffer_head * bh, *bhp;
1050: struct Scsi_Host * host;
1051: Scsi_Cmnd * SCpnt = NULL;
1052: Scsi_Cmnd * SCwait = NULL;
1053: Scsi_Cmnd * found = NULL;
1054:
1055: if (!device)
1056: panic ("No device passed to allocate_device().\n");
1057:
1058: if (reqp) req = *reqp;
1059:
1060: /* See if this request has already been queued by an interrupt routine */
1061: if (req) {
1062: if(req->rq_status == RQ_INACTIVE) return NULL;
1063: dev = req->rq_dev;
1064: } else
1065: dev = 0; /* unused */
1066:
1067: host = device->host;
1068:
1069: if (intr_count && SCSI_BLOCK(host)) return NULL;
1070:
1071: while (1==1){
1072: if (!device->single_lun) {
1073: SCpnt = device->device_queue;
1074: while(SCpnt){
1075: SCwait = SCpnt;
1076: if(SCpnt->request.rq_status == RQ_INACTIVE) break;
1077: SCpnt = SCpnt->device_next;
1078: }
1079: } else {
1080: SCpnt = device->host->host_queue;
1081: while(SCpnt){
1082: if(SCpnt->channel == device->channel
1083: && SCpnt->target == device->id) {
1084: if (SCpnt->lun == device->lun) {
1085: SCwait = SCpnt;
1086: if(found == NULL
1087: && SCpnt->request.rq_status == RQ_INACTIVE)
1088: {
1089: found=SCpnt;
1090: }
1091: }
1092: if(SCpnt->request.rq_status != RQ_INACTIVE) {
1093: /*
1094: * I think that we should really limit things to one
1095: * outstanding command per device - this is what tends
1096: * to trip up buggy firmware.
1097: */
1098: found = NULL;
1099: break;
1100: }
1101: }
1102: SCpnt = SCpnt->next;
1103: }
1104: SCpnt = found;
1105: }
1106:
1107: save_flags(flags);
1108: cli();
1109: /* See if this request has already been queued by an interrupt routine
1110: */
1111: if (req && (req->rq_status == RQ_INACTIVE || req->rq_dev != dev)) {
1112: restore_flags(flags);
1113: return NULL;
1114: }
1115: if (!SCpnt || SCpnt->request.rq_status != RQ_INACTIVE) /* Might have changed */
1116: {
1117: #if 1 /* NEW CODE */
1118: if (wait && SCwait && SCwait->request.rq_status != RQ_INACTIVE){
1119: sleep_on(&device->device_wait);
1120: restore_flags(flags);
1121: } else {
1122: restore_flags(flags);
1123: if (!wait) return NULL;
1124: if (!SCwait) {
1125: printk("Attempt to allocate device channel %d,"
1126: " target %d, lun %d\n", device->channel,
1127: device->id, device->lun);
1128: panic("No device found in allocate_device\n");
1129: }
1130: }
1131: #else /* ORIGINAL CODE */
1132: restore_flags(flags);
1133: if(!wait) return NULL;
1134: if (!SCwait) {
1135: printk("Attempt to allocate device channel %d, target"
1136: " %d, lun %d\n", device->channel, device->id,
1137: device->lun);
1138: panic("No device found in allocate_device\n");
1139: }
1140: SCSI_SLEEP(&device->device_wait,
1141: (SCwait->request.rq_status != RQ_INACTIVE));
1142: #endif
1143: } else {
1144: if (req) {
1145: memcpy(&SCpnt->request, req, sizeof(struct request));
1146: tablesize = device->host->sg_tablesize;
1147: bhp = bh = req->bh;
1148: if(!tablesize) bh = NULL;
1149: /* Take a quick look through the table to see how big it is.
1150: * We already have our copy of req, so we can mess with that
1151: * if we want to.
1152: */
1153: while(req->nr_sectors && bh){
1154: bhp = bhp->b_reqnext;
1155: if(!bhp || !CONTIGUOUS_BUFFERS(bh,bhp)) tablesize--;
1156: req->nr_sectors -= bh->b_size >> 9;
1157: req->sector += bh->b_size >> 9;
1158: if(!tablesize) break;
1159: bh = bhp;
1160: }
1161: if(req->nr_sectors && bh && bh->b_reqnext){/* Any leftovers? */
1162: SCpnt->request.bhtail = bh;
1163: req->bh = bh->b_reqnext; /* Divide request */
1164: bh->b_reqnext = NULL;
1165: bh = req->bh;
1166: /* Now reset things so that req looks OK */
1167: SCpnt->request.nr_sectors -= req->nr_sectors;
1168: req->current_nr_sectors = bh->b_size >> 9;
1169: req->buffer = bh->b_data;
1170: SCpnt->request.sem = NULL; /* Wait until whole thing done*/
1171: }
1172: else
1173: {
1174: req->rq_status = RQ_INACTIVE;
1175: *reqp = req->next;
1176: wake_up(&wait_for_request);
1177: }
1178: } else {
1179: SCpnt->request.rq_status = RQ_SCSI_BUSY;
1180: SCpnt->request.sem = NULL; /* And no one is waiting for this
1181: * to complete */
1182: }
1183: restore_flags(flags);
1184: break;
1185: }
1186: }
1187:
1188: SCpnt->use_sg = 0; /* Reset the scatter-gather flag */
1189: SCpnt->old_use_sg = 0;
1190: SCpnt->transfersize = 0; /* No default transfer size */
1191: SCpnt->cmd_len = 0;
1192:
1193: SCpnt->underflow = 0; /* Do not flag underflow conditions */
1194:
1195: /* Since not everyone seems to set the device info correctly
1196: * before Scsi_Cmnd gets send out to scsi_do_command, we do it here.
1197: */
1198: SCpnt->channel = device->channel;
1199: SCpnt->lun = device->lun;
1200: SCpnt->target = device->id;
1201:
1202: return SCpnt;
1203: }
1204:
1205: /*
1206: * This is inline because we have stack problemes if we recurse to deeply.
1207: */
1208:
1209: inline void internal_cmnd (Scsi_Cmnd * SCpnt)
1210: {
1211: unsigned long flags, timeout;
1212: struct Scsi_Host * host;
1213: #ifdef DEBUG_DELAY
1214: unsigned long clock;
1215: #endif
1216:
1217: #if DEBUG
1218: unsigned long *ret = 0;
1219: #ifdef __mips__
1220: __asm__ __volatile__ ("move\t%0,$31":"=r"(ret));
1221: #else
1222: ret = __builtin_return_address(0);
1223: #endif
1224: #endif
1225:
1226: host = SCpnt->host;
1227:
1228: save_flags(flags);
1229: cli();
1230: /* Assign a unique nonzero serial_number. */
1231: if (++serial_number == 0) serial_number = 1;
1232: SCpnt->serial_number = serial_number;
1233:
1234: /*
1235: * We will wait MIN_RESET_DELAY clock ticks after the last reset so
1236: * we can avoid the drive not being ready.
1237: */
1238: timeout = host->last_reset + MIN_RESET_DELAY;
1239: if (jiffies < timeout) {
1240: int ticks_remaining = timeout - jiffies;
1241: /*
1242: * NOTE: This may be executed from within an interrupt
1243: * handler! This is bad, but for now, it'll do. The irq
1244: * level of the interrupt handler has been masked out by the
1245: * platform dependent interrupt handling code already, so the
1246: * sti() here will not cause another call to the SCSI host's
1247: * interrupt handler (assuming there is one irq-level per
1248: * host).
1249: */
1250: sti();
1251: while (--ticks_remaining >= 0) udelay(1000000/HZ);
1252: host->last_reset = jiffies - MIN_RESET_DELAY;
1253: }
1254: restore_flags(flags);
1255:
1256: update_timeout(SCpnt, SCpnt->timeout_per_command);
1257:
1258: /*
1259: * We will use a queued command if possible, otherwise we will emulate the
1260: * queuing and calling of completion function ourselves.
1261: */
1262: #ifdef DEBUG
1263: printk("internal_cmnd (host = %d, channel = %d, target = %d, "
1264: "command = %p, buffer = %p, \nbufflen = %d, done = %p)\n",
1265: SCpnt->host->host_no, SCpnt->channel, SCpnt->target, SCpnt->cmnd,
1266: SCpnt->buffer, SCpnt->bufflen, SCpnt->done);
1267: #endif
1268:
1269: if (host->can_queue)
1270: {
1271: #ifdef DEBUG
1272: printk("queuecommand : routine at %p\n",
1273: host->hostt->queuecommand);
1274: #endif
1275: /* This locking tries to prevent all sorts of races between
1276: * queuecommand and the interrupt code. In effect,
1277: * we are only allowed to be in queuecommand once at
1278: * any given time, and we can only be in the interrupt
1279: * handler and the queuecommand function at the same time
1280: * when queuecommand is called while servicing the
1281: * interrupt.
1282: */
1283:
1284: if(!intr_count && SCpnt->host->irq)
1285: disable_irq(SCpnt->host->irq);
1286:
1287: host->hostt->queuecommand (SCpnt, scsi_done);
1288:
1289: if(!intr_count && SCpnt->host->irq)
1290: enable_irq(SCpnt->host->irq);
1291: }
1292: else
1293: {
1294: int temp;
1295:
1296: #ifdef DEBUG
1297: printk("command() : routine at %p\n", host->hostt->command);
1298: #endif
1299: temp = host->hostt->command (SCpnt);
1300: SCpnt->result = temp;
1301: #ifdef DEBUG_DELAY
1302: clock = jiffies + 4 * HZ;
1303: while (jiffies < clock) barrier();
1304: printk("done(host = %d, result = %04x) : routine at %p\n",
1305: host->host_no, temp, host->hostt->command);
1306: #endif
1307: scsi_done(SCpnt);
1308: }
1309: #ifdef DEBUG
1310: printk("leaving internal_cmnd()\n");
1311: #endif
1312: }
1313:
1314: static void scsi_request_sense (Scsi_Cmnd * SCpnt)
1315: {
1316: unsigned long flags;
1317:
1318: save_flags(flags);
1319: cli();
1320: SCpnt->flags |= WAS_SENSE | ASKED_FOR_SENSE;
1321: update_timeout(SCpnt, SENSE_TIMEOUT);
1322: restore_flags(flags);
1323:
1324:
1325: memcpy ((void *) SCpnt->cmnd , (void *) generic_sense,
1326: sizeof(generic_sense));
1327:
1328: SCpnt->cmnd[1] = SCpnt->lun << 5;
1329: SCpnt->cmnd[4] = sizeof(SCpnt->sense_buffer);
1330:
1331: SCpnt->request_buffer = &SCpnt->sense_buffer;
1332: SCpnt->request_bufflen = sizeof(SCpnt->sense_buffer);
1333: SCpnt->use_sg = 0;
1334: SCpnt->cmd_len = COMMAND_SIZE(SCpnt->cmnd[0]);
1335: internal_cmnd (SCpnt);
1336: }
1337:
1338:
1339:
1340: /*
1341: * scsi_do_cmd sends all the commands out to the low-level driver. It
1342: * handles the specifics required for each low level driver - ie queued
1343: * or non queued. It also prevents conflicts when different high level
1344: * drivers go for the same host at the same time.
1345: */
1346:
1347: void scsi_do_cmd (Scsi_Cmnd * SCpnt, const void *cmnd ,
1348: void *buffer, unsigned bufflen, void (*done)(Scsi_Cmnd *),
1349: int timeout, int retries)
1350: {
1351: unsigned long flags;
1352: struct Scsi_Host * host = SCpnt->host;
1353:
1354: #ifdef DEBUG
1355: {
1356: int i;
1357: int target = SCpnt->target;
1358: printk ("scsi_do_cmd (host = %d, channel = %d target = %d, "
1359: "buffer =%p, bufflen = %d, done = %p, timeout = %d, "
1360: "retries = %d)\n"
1361: "command : " , host->host_no, SCpnt->channel, target, buffer,
1362: bufflen, done, timeout, retries);
1363: for (i = 0; i < 10; ++i)
1364: printk ("%02x ", ((unsigned char *) cmnd)[i]);
1365: printk("\n");
1366: }
1367: #endif
1368:
1369: if (!host)
1370: {
1371: panic ("Invalid or not present host.\n");
1372: }
1373:
1374:
1375: /*
1376: * We must prevent reentrancy to the lowlevel host driver. This prevents
1377: * it - we enter a loop until the host we want to talk to is not busy.
1378: * Race conditions are prevented, as interrupts are disabled in between the
1379: * time we check for the host being not busy, and the time we mark it busy
1380: * ourselves.
1381: */
1382:
1383: save_flags(flags);
1384: cli();
1385: SCpnt->pid = scsi_pid++;
1386:
1387: while (SCSI_BLOCK(host)) {
1388: restore_flags(flags);
1389: SCSI_SLEEP(&host->host_wait, SCSI_BLOCK(host));
1390: cli();
1391: }
1392:
1393: if (host->block) host_active = host;
1394:
1395: host->host_busy++;
1396: restore_flags(flags);
1397:
1398: /*
1399: * Our own function scsi_done (which marks the host as not busy, disables
1400: * the timeout counter, etc) will be called by us or by the
1401: * scsi_hosts[host].queuecommand() function needs to also call
1402: * the completion function for the high level driver.
1403: */
1404:
1405: memcpy ((void *) SCpnt->data_cmnd , (const void *) cmnd, 12);
1406: #if 0
1407: SCpnt->host = host;
1408: SCpnt->channel = channel;
1409: SCpnt->target = target;
1410: SCpnt->lun = (SCpnt->data_cmnd[1] >> 5);
1411: #endif
1412: SCpnt->reset_chain = NULL;
1413: SCpnt->serial_number = 0;
1414: SCpnt->bufflen = bufflen;
1415: SCpnt->buffer = buffer;
1416: SCpnt->flags = 0;
1417: SCpnt->retries = 0;
1418: SCpnt->allowed = retries;
1419: SCpnt->done = done;
1420: SCpnt->timeout_per_command = timeout;
1421:
1422: memcpy ((void *) SCpnt->cmnd , (const void *) cmnd, 12);
1423: /* Zero the sense buffer. Some host adapters automatically request
1424: * sense on error. 0 is not a valid sense code.
1425: */
1426: memset ((void *) SCpnt->sense_buffer, 0, sizeof SCpnt->sense_buffer);
1427: SCpnt->request_buffer = buffer;
1428: SCpnt->request_bufflen = bufflen;
1429: SCpnt->old_use_sg = SCpnt->use_sg;
1430: if (SCpnt->cmd_len == 0)
1431: SCpnt->cmd_len = COMMAND_SIZE(SCpnt->cmnd[0]);
1432: SCpnt->old_cmd_len = SCpnt->cmd_len;
1433:
1434: /* Start the timer ticking. */
1435:
1436: SCpnt->internal_timeout = NORMAL_TIMEOUT;
1437: SCpnt->abort_reason = 0;
1438: internal_cmnd (SCpnt);
1439:
1440: #ifdef DEBUG
1441: printk ("Leaving scsi_do_cmd()\n");
1442: #endif
1443: }
1444:
1445: static int check_sense (Scsi_Cmnd * SCpnt)
1446: {
1447: /* If there is no sense information, request it. If we have already
1448: * requested it, there is no point in asking again - the firmware must
1449: * be confused.
1450: */
1451: if (((SCpnt->sense_buffer[0] & 0x70) >> 4) != 7) {
1452: if(!(SCpnt->flags & ASKED_FOR_SENSE))
1453: return SUGGEST_SENSE;
1454: else
1455: return SUGGEST_RETRY;
1456: }
1457:
1458: SCpnt->flags &= ~ASKED_FOR_SENSE;
1459:
1460: #ifdef DEBUG_INIT
1461: printk("scsi%d, channel%d : ", SCpnt->host->host_no, SCpnt->channel);
1462: print_sense("", SCpnt);
1463: printk("\n");
1464: #endif
1465: if (SCpnt->sense_buffer[2] & 0xe0)
1466: return SUGGEST_ABORT;
1467:
1468: switch (SCpnt->sense_buffer[2] & 0xf)
1469: {
1470: case NO_SENSE:
1471: return 0;
1472: case RECOVERED_ERROR:
1473: return SUGGEST_IS_OK;
1474:
1475: case ABORTED_COMMAND:
1476: return SUGGEST_RETRY;
1477: case NOT_READY:
1478: case UNIT_ATTENTION:
1479: /*
1480: * If we are expecting a CC/UA because of a bus reset that we
1481: * performed, treat this just as a retry. Otherwise this is
1482: * information that we should pass up to the upper-level driver
1483: * so that we can deal with it there.
1484: */
1485: if( SCpnt->device->expecting_cc_ua )
1486: {
1487: SCpnt->device->expecting_cc_ua = 0;
1488: return SUGGEST_RETRY;
1489: }
1490: return SUGGEST_ABORT;
1491:
1492: /* these three are not supported */
1493: case COPY_ABORTED:
1494: case VOLUME_OVERFLOW:
1495: case MISCOMPARE:
1496:
1497: case MEDIUM_ERROR:
1498: return SUGGEST_REMAP;
1499: case BLANK_CHECK:
1500: case DATA_PROTECT:
1501: case HARDWARE_ERROR:
1502: case ILLEGAL_REQUEST:
1503: default:
1504: return SUGGEST_ABORT;
1505: }
1506: }
1507:
1508: /* This function is the mid-level interrupt routine, which decides how
1509: * to handle error conditions. Each invocation of this function must
1510: * do one and *only* one of the following:
1511: *
1512: * (1) Call last_cmnd[host].done. This is done for fatal errors and
1513: * normal completion, and indicates that the handling for this
1514: * request is complete.
1515: * (2) Call internal_cmnd to requeue the command. This will result in
1516: * scsi_done being called again when the retry is complete.
1517: * (3) Call scsi_request_sense. This asks the host adapter/drive for
1518: * more information about the error condition. When the information
1519: * is available, scsi_done will be called again.
1520: * (4) Call reset(). This is sort of a last resort, and the idea is that
1521: * this may kick things loose and get the drive working again. reset()
1522: * automatically calls scsi_request_sense, and thus scsi_done will be
1523: * called again once the reset is complete.
1524: *
1525: * If none of the above actions are taken, the drive in question
1526: * will hang. If more than one of the above actions are taken by
1527: * scsi_done, then unpredictable behavior will result.
1528: */
1529: static void scsi_done (Scsi_Cmnd * SCpnt)
1530: {
1531: int status=0;
1532: int exit=0;
1533: int checked;
1534: int oldto;
1535: struct Scsi_Host * host = SCpnt->host;
1536: int result = SCpnt->result;
1537: SCpnt->serial_number = 0;
1538: oldto = update_timeout(SCpnt, 0);
1539:
1540: #ifdef DEBUG_TIMEOUT
1541: if(result) printk("Non-zero result in scsi_done %x %d:%d\n",
1542: result, SCpnt->target, SCpnt->lun);
1543: #endif
1544:
1545: /* If we requested an abort, (and we got it) then fix up the return
1546: * status to say why
1547: */
1548: if(host_byte(result) == DID_ABORT && SCpnt->abort_reason)
1549: SCpnt->result = result = (result & 0xff00ffff) |
1550: (SCpnt->abort_reason << 16);
1551:
1552:
1553: #define FINISHED 0
1554: #define MAYREDO 1
1555: #define REDO 3
1556: #define PENDING 4
1557:
1558: #ifdef DEBUG
1559: printk("In scsi_done(host = %d, result = %06x)\n", host->host_no, result);
1560: #endif
1561:
1562: if(SCpnt->flags & WAS_SENSE)
1563: {
1564: SCpnt->use_sg = SCpnt->old_use_sg;
1565: SCpnt->cmd_len = SCpnt->old_cmd_len;
1566: }
1567:
1568: switch (host_byte(result))
1569: {
1570: case DID_OK:
1571: if (status_byte(result) && (SCpnt->flags & WAS_SENSE))
1572: /* Failed to obtain sense information */
1573: {
1574: SCpnt->flags &= ~WAS_SENSE;
1575: #if 0 /* This cannot possibly be correct. */
1576: SCpnt->internal_timeout &= ~SENSE_TIMEOUT;
1577: #endif
1578:
1579: if (!(SCpnt->flags & WAS_RESET))
1580: {
1581: printk("scsi%d : channel %d target %d lun %d request sense"
1582: " failed, performing reset.\n",
1583: SCpnt->host->host_no, SCpnt->channel, SCpnt->target,
1584: SCpnt->lun);
1585: scsi_reset(SCpnt, SCSI_RESET_SYNCHRONOUS);
1586: return;
1587: }
1588: else
1589: {
1590: exit = (DRIVER_HARD | SUGGEST_ABORT);
1591: status = FINISHED;
1592: }
1593: }
1594: else switch(msg_byte(result))
1595: {
1596: case COMMAND_COMPLETE:
1597: switch (status_byte(result))
1598: {
1599: case GOOD:
1600: if (SCpnt->flags & WAS_SENSE)
1601: {
1602: #ifdef DEBUG
1603: printk ("In scsi_done, GOOD status, COMMAND COMPLETE, "
1604: "parsing sense information.\n");
1605: #endif
1606: SCpnt->flags &= ~WAS_SENSE;
1607: #if 0 /* This cannot possibly be correct. */
1608: SCpnt->internal_timeout &= ~SENSE_TIMEOUT;
1609: #endif
1610:
1611: switch (checked = check_sense(SCpnt))
1612: {
1613: case SUGGEST_SENSE:
1614: case 0:
1615: #ifdef DEBUG
1616: printk("NO SENSE. status = REDO\n");
1617: #endif
1618: update_timeout(SCpnt, oldto);
1619: status = REDO;
1620: break;
1621: case SUGGEST_IS_OK:
1622: break;
1623: case SUGGEST_REMAP:
1624: #ifdef DEBUG
1625: printk("SENSE SUGGEST REMAP - status = FINISHED\n");
1626: #endif
1627: status = FINISHED;
1628: exit = DRIVER_SENSE | SUGGEST_ABORT;
1629: break;
1630: case SUGGEST_RETRY:
1631: #ifdef DEBUG
1632: printk("SENSE SUGGEST RETRY - status = MAYREDO\n");
1633: #endif
1634: status = MAYREDO;
1635: exit = DRIVER_SENSE | SUGGEST_RETRY;
1636: break;
1637: case SUGGEST_ABORT:
1638: #ifdef DEBUG
1639: printk("SENSE SUGGEST ABORT - status = FINISHED");
1640: #endif
1641: status = FINISHED;
1642: exit = DRIVER_SENSE | SUGGEST_ABORT;
1643: break;
1644: default:
1645: printk ("Internal error %s %d \n", __FILE__,
1646: __LINE__);
1647: }
1648: } /* end WAS_SENSE */
1649: else
1650: {
1651: #ifdef DEBUG
1652: printk("COMMAND COMPLETE message returned, "
1653: "status = FINISHED. \n");
1654: #endif
1655: exit = DRIVER_OK;
1656: status = FINISHED;
1657: }
1658: break;
1659:
1660: case CHECK_CONDITION:
1661: case COMMAND_TERMINATED:
1662: switch (check_sense(SCpnt))
1663: {
1664: case 0:
1665: update_timeout(SCpnt, oldto);
1666: status = REDO;
1667: break;
1668: case SUGGEST_REMAP:
1669: status = FINISHED;
1670: exit = DRIVER_SENSE | SUGGEST_ABORT;
1671: break;
1672: case SUGGEST_RETRY:
1673: status = MAYREDO;
1674: exit = DRIVER_SENSE | SUGGEST_RETRY;
1675: break;
1676: case SUGGEST_ABORT:
1677: status = FINISHED;
1678: exit = DRIVER_SENSE | SUGGEST_ABORT;
1679: break;
1680: case SUGGEST_SENSE:
1681: scsi_request_sense (SCpnt);
1682: status = PENDING;
1683: break;
1684: }
1685: break;
1686:
1687: case CONDITION_GOOD:
1688: case INTERMEDIATE_GOOD:
1689: case INTERMEDIATE_C_GOOD:
1690: break;
1691:
1692: case BUSY:
1693: case QUEUE_FULL:
1694: update_timeout(SCpnt, oldto);
1695: status = REDO;
1696: break;
1697:
1698: case RESERVATION_CONFLICT:
1699: printk("scsi%d, channel %d : RESERVATION CONFLICT performing"
1700: " reset.\n", SCpnt->host->host_no, SCpnt->channel);
1701: scsi_reset(SCpnt, SCSI_RESET_SYNCHRONOUS);
1702: return;
1703: #if 0
1704: exit = DRIVER_SOFT | SUGGEST_ABORT;
1705: status = MAYREDO;
1706: break;
1707: #endif
1708: default:
1709: printk ("Internal error %s %d \n"
1710: "status byte = %d \n", __FILE__,
1711: __LINE__, status_byte(result));
1712:
1713: }
1714: break;
1715: default:
1716: panic("scsi: unsupported message byte %d received\n",
1717: msg_byte(result));
1718: }
1719: break;
1720: case DID_TIME_OUT:
1721: #ifdef DEBUG
1722: printk("Host returned DID_TIME_OUT - ");
1723: #endif
1724:
1725: if (SCpnt->flags & WAS_TIMEDOUT)
1726: {
1727: #ifdef DEBUG
1728: printk("Aborting\n");
1729: #endif
1730: /*
1731: Allow TEST_UNIT_READY and INQUIRY commands to timeout early
1732: without causing resets. All other commands should be retried.
1733: */
1734: if (SCpnt->cmnd[0] != TEST_UNIT_READY &&
1735: SCpnt->cmnd[0] != INQUIRY)
1736: status = MAYREDO;
1737: exit = (DRIVER_TIMEOUT | SUGGEST_ABORT);
1738: }
1739: else
1740: {
1741: #ifdef DEBUG
1742: printk ("Retrying.\n");
1743: #endif
1744: SCpnt->flags |= WAS_TIMEDOUT;
1745: SCpnt->internal_timeout &= ~IN_ABORT;
1746: status = REDO;
1747: }
1748: break;
1749: case DID_BUS_BUSY:
1750: case DID_PARITY:
1751: status = REDO;
1752: break;
1753: case DID_NO_CONNECT:
1754: #ifdef DEBUG
1755: printk("Couldn't connect.\n");
1756: #endif
1757: exit = (DRIVER_HARD | SUGGEST_ABORT);
1758: break;
1759: case DID_ERROR:
1760: status = MAYREDO;
1761: exit = (DRIVER_HARD | SUGGEST_ABORT);
1762: break;
1763: case DID_BAD_TARGET:
1764: case DID_ABORT:
1765: exit = (DRIVER_INVALID | SUGGEST_ABORT);
1766: break;
1767: case DID_RESET:
1768: if (SCpnt->flags & IS_RESETTING)
1769: {
1770: SCpnt->flags &= ~IS_RESETTING;
1771: status = REDO;
1772: break;
1773: }
1774:
1775: if(msg_byte(result) == GOOD &&
1776: status_byte(result) == CHECK_CONDITION) {
1777: switch (check_sense(SCpnt)) {
1778: case 0:
1779: update_timeout(SCpnt, oldto);
1780: status = REDO;
1781: break;
1782: case SUGGEST_REMAP:
1783: case SUGGEST_RETRY:
1784: status = MAYREDO;
1785: exit = DRIVER_SENSE | SUGGEST_RETRY;
1786: break;
1787: case SUGGEST_ABORT:
1788: status = FINISHED;
1789: exit = DRIVER_SENSE | SUGGEST_ABORT;
1790: break;
1791: case SUGGEST_SENSE:
1792: scsi_request_sense (SCpnt);
1793: status = PENDING;
1794: break;
1795: }
1796: } else {
1797: status=REDO;
1798: exit = SUGGEST_RETRY;
1799: }
1800: break;
1801: default :
1802: exit = (DRIVER_ERROR | SUGGEST_DIE);
1803: }
1804:
1805: switch (status)
1806: {
1807: case FINISHED:
1808: case PENDING:
1809: break;
1810: case MAYREDO:
1811: #ifdef DEBUG
1812: printk("In MAYREDO, allowing %d retries, have %d\n",
1813: SCpnt->allowed, SCpnt->retries);
1814: #endif
1815: if ((++SCpnt->retries) < SCpnt->allowed)
1816: {
1817: if ((SCpnt->retries >= (SCpnt->allowed >> 1))
1818: && !(SCpnt->host->last_reset > 0 &&
1819: jiffies < SCpnt->host->last_reset + MIN_RESET_PERIOD)
1820: && !(SCpnt->flags & WAS_RESET))
1821: {
1822: printk("scsi%d channel %d : resetting for second half of retries.\n",
1823: SCpnt->host->host_no, SCpnt->channel);
1824: scsi_reset(SCpnt, SCSI_RESET_SYNCHRONOUS);
1825: break;
1826: }
1827:
1828: }
1829: else
1830: {
1831: status = FINISHED;
1832: break;
1833: }
1834: /* fall through to REDO */
1835:
1836: case REDO:
1837:
1838: if (SCpnt->flags & WAS_SENSE)
1839: scsi_request_sense(SCpnt);
1840: else
1841: {
1842: memcpy ((void *) SCpnt->cmnd,
1843: (void*) SCpnt->data_cmnd,
1844: sizeof(SCpnt->data_cmnd));
1845: SCpnt->request_buffer = SCpnt->buffer;
1846: SCpnt->request_bufflen = SCpnt->bufflen;
1847: SCpnt->use_sg = SCpnt->old_use_sg;
1848: SCpnt->cmd_len = SCpnt->old_cmd_len;
1849: internal_cmnd (SCpnt);
1850: }
1851: break;
1852: default:
1853: INTERNAL_ERROR;
1854: }
1855:
1856: if (status == FINISHED) {
1857: #ifdef DEBUG
1858: printk("Calling done function - at address %p\n", SCpnt->done);
1859: #endif
1860: host->host_busy--; /* Indicate that we are free */
1861:
1862: if (host->block && host->host_busy == 0) {
1863: host_active = NULL;
1864:
1865: /* For block devices "wake_up" is done in end_scsi_request */
1866: if (MAJOR(SCpnt->request.rq_dev) != SCSI_DISK_MAJOR &&
1867: MAJOR(SCpnt->request.rq_dev) != SCSI_CDROM_MAJOR) {
1868: struct Scsi_Host * next;
1869:
1870: for (next = host->block; next != host; next = next->block)
1871: wake_up(&next->host_wait);
1872: }
1873:
1874: }
1875:
1876: wake_up(&host->host_wait);
1877: SCpnt->result = result | ((exit & 0xff) << 24);
1878: SCpnt->use_sg = SCpnt->old_use_sg;
1879: SCpnt->cmd_len = SCpnt->old_cmd_len;
1880: SCpnt->done (SCpnt);
1881: }
1882:
1883: #undef FINISHED
1884: #undef REDO
1885: #undef MAYREDO
1886: #undef PENDING
1887: }
1888:
1889: /*
1890: * The scsi_abort function interfaces with the abort() function of the host
1891: * we are aborting, and causes the current command to not complete. The
1892: * caller should deal with any error messages or status returned on the
1893: * next call.
1894: *
1895: * This will not be called reentrantly for a given host.
1896: */
1897:
1898: /*
1899: * Since we're nice guys and specified that abort() and reset()
1900: * can be non-reentrant. The internal_timeout flags are used for
1901: * this.
1902: */
1903:
1904:
1905: int scsi_abort (Scsi_Cmnd * SCpnt, int why)
1906: {
1907: int oldto;
1908: unsigned long flags;
1909: struct Scsi_Host * host = SCpnt->host;
1910:
1911: while(1)
1912: {
1913: save_flags(flags);
1914: cli();
1915:
1916: /*
1917: * Protect against races here. If the command is done, or we are
1918: * on a different command forget it.
1919: */
1920: if (SCpnt->serial_number != SCpnt->serial_number_at_timeout) {
1921: restore_flags(flags);
1922: return 0;
1923: }
1924:
1925: if (SCpnt->internal_timeout & IN_ABORT)
1926: {
1927: restore_flags(flags);
1928: while (SCpnt->internal_timeout & IN_ABORT)
1929: barrier();
1930: }
1931: else
1932: {
1933: SCpnt->internal_timeout |= IN_ABORT;
1934: oldto = update_timeout(SCpnt, ABORT_TIMEOUT);
1935:
1936: if ((SCpnt->flags & IS_RESETTING) && SCpnt->device->soft_reset) {
1937: /* OK, this command must have died when we did the
1938: * reset. The device itself must have lied.
1939: */
1940: printk("Stale command on %d %d:%d appears to have died when"
1941: " the bus was reset\n",
1942: SCpnt->channel, SCpnt->target, SCpnt->lun);
1943: }
1944:
1945: restore_flags(flags);
1946: if (!host->host_busy) {
1947: SCpnt->internal_timeout &= ~IN_ABORT;
1948: update_timeout(SCpnt, oldto);
1949: return 0;
1950: }
1951: printk("scsi : aborting command due to timeout : pid %lu, scsi%d,"
1952: " channel %d, id %d, lun %d ",
1953: SCpnt->pid, SCpnt->host->host_no, (int) SCpnt->channel,
1954: (int) SCpnt->target, (int) SCpnt->lun);
1955: print_command (SCpnt->cmnd);
1956: if (SCpnt->serial_number != SCpnt->serial_number_at_timeout)
1957: return 0;
1958: SCpnt->abort_reason = why;
1959: switch(host->hostt->abort(SCpnt)) {
1960: /* We do not know how to abort. Try waiting another
1961: * time increment and see if this helps. Set the
1962: * WAS_TIMEDOUT flag set so we do not try this twice
1963: */
1964: case SCSI_ABORT_BUSY: /* Tough call - returning 1 from
1965: * this is too severe
1966: */
1967: case SCSI_ABORT_SNOOZE:
1968: if(why == DID_TIME_OUT) {
1969: save_flags(flags);
1970: cli();
1971: SCpnt->internal_timeout &= ~IN_ABORT;
1972: if(SCpnt->flags & WAS_TIMEDOUT) {
1973: restore_flags(flags);
1974: return 1; /* Indicate we cannot handle this.
1975: * We drop down into the reset handler
1976: * and try again
1977: */
1978: } else {
1979: SCpnt->flags |= WAS_TIMEDOUT;
1980: oldto = SCpnt->timeout_per_command;
1981: update_timeout(SCpnt, oldto);
1982: }
1983: restore_flags(flags);
1984: }
1985: return 0;
1986: case SCSI_ABORT_PENDING:
1987: if(why != DID_TIME_OUT) {
1988: save_flags(flags);
1989: cli();
1990: update_timeout(SCpnt, oldto);
1991: restore_flags(flags);
1992: }
1993: return 0;
1994: case SCSI_ABORT_SUCCESS:
1995: /* We should have already aborted this one. No
1996: * need to adjust timeout
1997: */
1998: SCpnt->internal_timeout &= ~IN_ABORT;
1999: return 0;
2000: case SCSI_ABORT_NOT_RUNNING:
2001: SCpnt->internal_timeout &= ~IN_ABORT;
2002: update_timeout(SCpnt, 0);
2003: return 0;
2004: case SCSI_ABORT_ERROR:
2005: default:
2006: SCpnt->internal_timeout &= ~IN_ABORT;
2007: return 1;
2008: }
2009: }
2010: }
2011: }
2012:
2013:
2014: /* Mark a single SCSI Device as having been reset. */
2015:
2016: static inline void scsi_mark_device_reset(Scsi_Device *Device)
2017: {
2018: Device->was_reset = 1;
2019: Device->expecting_cc_ua = 1;
2020: }
2021:
2022:
2023: /* Mark all SCSI Devices on a specific Host as having been reset. */
2024:
2025: void scsi_mark_host_reset(struct Scsi_Host *Host)
2026: {
2027: Scsi_Cmnd *SCpnt;
2028: for (SCpnt = Host->host_queue; SCpnt; SCpnt = SCpnt->next)
2029: scsi_mark_device_reset(SCpnt->device);
2030: }
2031:
2032:
2033: /* Mark all SCSI Devices on a specific Host Bus as having been reset. */
2034:
2035: void scsi_mark_bus_reset(struct Scsi_Host *Host, int channel)
2036: {
2037: Scsi_Cmnd *SCpnt;
2038: for (SCpnt = Host->host_queue; SCpnt; SCpnt = SCpnt->next)
2039: if (SCpnt->channel == channel)
2040: scsi_mark_device_reset(SCpnt->device);
2041: }
2042:
2043:
2044: int scsi_reset (Scsi_Cmnd * SCpnt, unsigned int reset_flags)
2045: {
2046: int temp;
2047: unsigned long flags;
2048: Scsi_Cmnd * SCpnt1;
2049: struct Scsi_Host * host = SCpnt->host;
2050:
2051: printk("SCSI bus is being reset for host %d channel %d.\n",
2052: host->host_no, SCpnt->channel);
2053:
2054: #if 0
2055: /*
2056: * First of all, we need to make a recommendation to the low-level
2057: * driver as to whether a BUS_DEVICE_RESET should be performed,
2058: * or whether we should do a full BUS_RESET. There is no simple
2059: * algorithm here - we basically use a series of heuristics
2060: * to determine what we should do.
2061: */
2062: SCpnt->host->suggest_bus_reset = FALSE;
2063:
2064: /*
2065: * First see if all of the active devices on the bus have
2066: * been jammed up so that we are attempting resets. If so,
2067: * then suggest a bus reset. Forcing a bus reset could
2068: * result in some race conditions, but no more than
2069: * you would usually get with timeouts. We will cross
2070: * that bridge when we come to it.
2071: *
2072: * This is actually a pretty bad idea, since a sequence of
2073: * commands will often timeout together and this will cause a
2074: * Bus Device Reset followed immediately by a SCSI Bus Reset.
2075: * If all of the active devices really are jammed up, the
2076: * Bus Device Reset will quickly timeout and scsi_times_out
2077: * will follow up with a SCSI Bus Reset anyway.
2078: */
2079: SCpnt1 = host->host_queue;
2080: while(SCpnt1) {
2081: if( SCpnt1->request.rq_status != RQ_INACTIVE
2082: && (SCpnt1->flags & (WAS_RESET | IS_RESETTING)) == 0 )
2083: break;
2084: SCpnt1 = SCpnt1->next;
2085: }
2086: if( SCpnt1 == NULL ) {
2087: reset_flags |= SCSI_RESET_SUGGEST_BUS_RESET;
2088: }
2089:
2090: /*
2091: * If the code that called us is suggesting a hard reset, then
2092: * definitely request it. This usually occurs because a
2093: * BUS_DEVICE_RESET times out.
2094: *
2095: * Passing reset_flags along takes care of this automatically.
2096: */
2097: if( reset_flags & SCSI_RESET_SUGGEST_BUS_RESET ) {
2098: SCpnt->host->suggest_bus_reset = TRUE;
2099: }
2100: #endif
2101:
2102: while (1) {
2103: save_flags(flags);
2104: cli();
2105:
2106: /*
2107: * Protect against races here. If the command is done, or we are
2108: * on a different command forget it.
2109: */
2110: if (reset_flags & SCSI_RESET_ASYNCHRONOUS)
2111: if (SCpnt->serial_number != SCpnt->serial_number_at_timeout) {
2112: restore_flags(flags);
2113: return 0;
2114: }
2115:
2116: if (SCpnt->internal_timeout & IN_RESET)
2117: {
2118: restore_flags(flags);
2119: while (SCpnt->internal_timeout & IN_RESET)
2120: barrier();
2121: }
2122: else
2123: {
2124: SCpnt->internal_timeout |= IN_RESET;
2125: update_timeout(SCpnt, RESET_TIMEOUT);
2126:
2127: if (host->host_busy)
2128: {
2129: restore_flags(flags);
2130: SCpnt1 = host->host_queue;
2131: while(SCpnt1) {
2132: if (SCpnt1->request.rq_status != RQ_INACTIVE) {
2133: #if 0
2134: if (!(SCpnt1->flags & IS_RESETTING) &&
2135: !(SCpnt1->internal_timeout & IN_ABORT))
2136: scsi_abort(SCpnt1, DID_RESET);
2137: #endif
2138: SCpnt1->flags |= (WAS_RESET | IS_RESETTING);
2139: }
2140: SCpnt1 = SCpnt1->next;
2141: }
2142:
2143: host->last_reset = jiffies;
2144: temp = host->hostt->reset(SCpnt, reset_flags);
2145: /*
2146: This test allows the driver to introduce an additional bus
2147: settle time delay by setting last_reset up to 20 seconds in
2148: the future. In the normal case where the driver does not
2149: modify last_reset, it must be assumed that the actual bus
2150: reset occurred immediately prior to the return to this code,
2151: and so last_reset must be updated to the current time, so
2152: that the delay in internal_cmnd will guarantee at least a
2153: MIN_RESET_DELAY bus settle time.
2154: */
2155: if ((host->last_reset < jiffies) ||
2156: (host->last_reset > (jiffies + 20 * HZ)))
2157: host->last_reset = jiffies;
2158: }
2159: else
2160: {
2161: if (!host->block) host->host_busy++;
2162: restore_flags(flags);
2163: host->last_reset = jiffies;
2164: SCpnt->flags |= (WAS_RESET | IS_RESETTING);
2165: temp = host->hostt->reset(SCpnt, reset_flags);
2166: if ((host->last_reset < jiffies) ||
2167: (host->last_reset > (jiffies + 20 * HZ)))
2168: host->last_reset = jiffies;
2169: if (!host->block) host->host_busy--;
2170: }
2171:
2172: #ifdef DEBUG
2173: printk("scsi reset function returned %d\n", temp);
2174: #endif
2175:
2176: /*
2177: * Now figure out what we need to do, based upon
2178: * what the low level driver said that it did.
2179: * If the result is SCSI_RESET_SUCCESS, SCSI_RESET_PENDING,
2180: * or SCSI_RESET_WAKEUP, then the low level driver did a
2181: * bus device reset or bus reset, so we should go through
2182: * and mark one or all of the devices on that bus
2183: * as having been reset.
2184: */
2185: switch(temp & SCSI_RESET_ACTION) {
2186: case SCSI_RESET_SUCCESS:
2187: if (temp & SCSI_RESET_HOST_RESET)
2188: scsi_mark_host_reset(host);
2189: else if (temp & SCSI_RESET_BUS_RESET)
2190: scsi_mark_bus_reset(host, SCpnt->channel);
2191: else scsi_mark_device_reset(SCpnt->device);
2192: save_flags(flags);
2193: cli();
2194: SCpnt->internal_timeout &= ~(IN_RESET|IN_RESET2|IN_RESET3);
2195: restore_flags(flags);
2196: return 0;
2197: case SCSI_RESET_PENDING:
2198: if (temp & SCSI_RESET_HOST_RESET)
2199: scsi_mark_host_reset(host);
2200: else if (temp & SCSI_RESET_BUS_RESET)
2201: scsi_mark_bus_reset(host, SCpnt->channel);
2202: else scsi_mark_device_reset(SCpnt->device);
2203: case SCSI_RESET_NOT_RUNNING:
2204: return 0;
2205: case SCSI_RESET_PUNT:
2206: SCpnt->internal_timeout &= ~(IN_RESET|IN_RESET2|IN_RESET3);
2207: scsi_request_sense (SCpnt);
2208: return 0;
2209: case SCSI_RESET_WAKEUP:
2210: if (temp & SCSI_RESET_HOST_RESET)
2211: scsi_mark_host_reset(host);
2212: else if (temp & SCSI_RESET_BUS_RESET)
2213: scsi_mark_bus_reset(host, SCpnt->channel);
2214: else scsi_mark_device_reset(SCpnt->device);
2215: SCpnt->internal_timeout &= ~(IN_RESET|IN_RESET2|IN_RESET3);
2216: scsi_request_sense (SCpnt);
2217: /*
2218: * If a bus reset was performed, we
2219: * need to wake up each and every command
2220: * that was active on the bus or if it was a HBA
2221: * reset all active commands on all channels
2222: */
2223: if( temp & SCSI_RESET_HOST_RESET )
2224: {
2225: SCpnt1 = host->host_queue;
2226: while(SCpnt1) {
2227: if (SCpnt1->request.rq_status != RQ_INACTIVE
2228: && SCpnt1 != SCpnt)
2229: scsi_request_sense (SCpnt1);
2230: SCpnt1 = SCpnt1->next;
2231: }
2232: } else if( temp & SCSI_RESET_BUS_RESET ) {
2233: SCpnt1 = host->host_queue;
2234: while(SCpnt1) {
2235: if(SCpnt1->request.rq_status != RQ_INACTIVE
2236: && SCpnt1 != SCpnt
2237: && SCpnt1->channel == SCpnt->channel)
2238: scsi_request_sense (SCpnt);
2239: SCpnt1 = SCpnt1->next;
2240: }
2241: }
2242: return 0;
2243: case SCSI_RESET_SNOOZE:
2244: /* In this case, we set the timeout field to 0
2245: * so that this command does not time out any more,
2246: * and we return 1 so that we get a message on the
2247: * screen.
2248: */
2249: save_flags(flags);
2250: cli();
2251: SCpnt->internal_timeout &= ~(IN_RESET|IN_RESET2|IN_RESET3);
2252: update_timeout(SCpnt, 0);
2253: restore_flags(flags);
2254: /* If you snooze, you lose... */
2255: case SCSI_RESET_ERROR:
2256: default:
2257: return 1;
2258: }
2259:
2260: return temp;
2261: }
2262: }
2263: }
2264:
2265:
2266: static void scsi_main_timeout(void)
2267: {
2268: /*
2269: * We must not enter update_timeout with a timeout condition still pending.
2270: */
2271:
2272: int timed_out;
2273: unsigned long flags;
2274: struct Scsi_Host * host;
2275: Scsi_Cmnd * SCpnt = NULL;
2276:
2277: save_flags(flags);
2278: cli();
2279:
2280: update_timeout(NULL, 0);
2281:
2282: /*
2283: * Find all timers such that they have 0 or negative (shouldn't happen)
2284: * time remaining on them.
2285: */
2286: timed_out = 0;
2287: for (host = scsi_hostlist; host; host = host->next) {
2288: for (SCpnt = host->host_queue; SCpnt; SCpnt = SCpnt->next)
2289: if (SCpnt->timeout == -1)
2290: {
2291: SCpnt->timeout = 0;
2292: SCpnt->serial_number_at_timeout = SCpnt->serial_number;
2293: ++timed_out;
2294: }
2295: }
2296: if (timed_out > 0) {
2297: for (host = scsi_hostlist; host; host = host->next) {
2298: for (SCpnt = host->host_queue; SCpnt; SCpnt = SCpnt->next)
2299: if (SCpnt->serial_number_at_timeout > 0 &&
2300: SCpnt->serial_number_at_timeout == SCpnt->serial_number)
2301: {
2302: restore_flags(flags);
2303: scsi_times_out(SCpnt);
2304: SCpnt->serial_number_at_timeout = 0;
2305: cli();
2306: }
2307: }
2308: }
2309: restore_flags(flags);
2310: }
2311:
2312: /*
2313: * The strategy is to cause the timer code to call scsi_times_out()
2314: * when the soonest timeout is pending.
2315: * The arguments are used when we are queueing a new command, because
2316: * we do not want to subtract the time used from this time, but when we
2317: * set the timer, we want to take this value into account.
2318: */
2319:
2320: static int update_timeout(Scsi_Cmnd * SCset, int timeout)
2321: {
2322: unsigned int least, used;
2323: unsigned int oldto;
2324: unsigned long flags;
2325: struct Scsi_Host * host;
2326: Scsi_Cmnd * SCpnt = NULL;
2327:
2328: save_flags(flags);
2329: cli();
2330:
2331: oldto = 0;
2332:
2333: /*
2334: * This routine can be a performance bottleneck under high loads, since
2335: * it is called twice per SCSI operation: once when internal_cmnd is
2336: * called, and again when scsi_done completes the command. To limit
2337: * the load this routine can cause, we shortcut processing if no clock
2338: * ticks have occurred since the last time it was called.
2339: */
2340:
2341: if (jiffies == time_start && timer_table[SCSI_TIMER].expires > 0) {
2342: if(SCset){
2343: oldto = SCset->timeout;
2344: SCset->timeout = timeout;
2345: if (timeout > 0 &&
2346: jiffies + timeout < timer_table[SCSI_TIMER].expires)
2347: timer_table[SCSI_TIMER].expires = jiffies + timeout;
2348: }
2349: restore_flags(flags);
2350: return oldto;
2351: }
2352:
2353: /*
2354: * Figure out how much time has passed since the last time the timeouts
2355: * were updated
2356: */
2357: used = (time_start) ? (jiffies - time_start) : 0;
2358:
2359: /*
2360: * Find out what is due to timeout soonest, and adjust all timeouts for
2361: * the amount of time that has passed since the last time we called
2362: * update_timeout.
2363: */
2364:
2365: oldto = 0;
2366:
2367: if(SCset){
2368: oldto = SCset->timeout - used;
2369: SCset->timeout = timeout;
2370: }
2371:
2372: least = 0xffffffff;
2373:
2374: for(host = scsi_hostlist; host; host = host->next)
2375: for(SCpnt = host->host_queue; SCpnt; SCpnt = SCpnt->next)
2376: if (SCpnt->timeout > 0) {
2377: if (SCpnt != SCset)
2378: SCpnt->timeout -= used;
2379: if(SCpnt->timeout <= 0) SCpnt->timeout = -1;
2380: if(SCpnt->timeout > 0 && SCpnt->timeout < least)
2381: least = SCpnt->timeout;
2382: }
2383:
2384: /*
2385: * If something is due to timeout again, then we will set the next timeout
2386: * interrupt to occur. Otherwise, timeouts are disabled.
2387: */
2388:
2389: if (least != 0xffffffff)
2390: {
2391: time_start = jiffies;
2392: timer_table[SCSI_TIMER].expires = (time_elapsed = least) + jiffies;
2393: timer_active |= 1 << SCSI_TIMER;
2394: }
2395: else
2396: {
2397: timer_table[SCSI_TIMER].expires = time_start = time_elapsed = 0;
2398: timer_active &= ~(1 << SCSI_TIMER);
2399: }
2400: restore_flags(flags);
2401: return oldto;
2402: }
2403:
2404: #ifdef CONFIG_MODULES
2405: static int scsi_register_host(Scsi_Host_Template *);
2406: static void scsi_unregister_host(Scsi_Host_Template *);
2407: #endif
2408:
2409: void *scsi_malloc(unsigned int len)
2410: {
2411: unsigned int nbits, mask;
2412: unsigned long flags;
2413: int i, j;
2414: if(len % SECTOR_SIZE != 0 || len > PAGE_SIZE)
2415: return NULL;
2416:
2417: save_flags(flags);
2418: cli();
2419: nbits = len >> 9;
2420: mask = (1 << nbits) - 1;
2421:
2422: for(i=0;i < dma_sectors / SECTORS_PER_PAGE; i++)
2423: for(j=0; j<=SECTORS_PER_PAGE - nbits; j++){
2424: if ((dma_malloc_freelist[i] & (mask << j)) == 0){
2425: dma_malloc_freelist[i] |= (mask << j);
2426: restore_flags(flags);
2427: dma_free_sectors -= nbits;
2428: #ifdef DEBUG
2429: printk("SMalloc: %d %p\n",len, dma_malloc_pages[i] + (j << 9));
2430: #endif
2431: return (void *) ((unsigned long) dma_malloc_pages[i] + (j << 9));
2432: }
2433: }
2434: restore_flags(flags);
2435: return NULL; /* Nope. No more */
2436: }
2437:
2438: int scsi_free(void *obj, unsigned int len)
2439: {
2440: unsigned int page, sector, nbits, mask;
2441: unsigned long flags;
2442:
2443: #ifdef DEBUG
2444: unsigned long ret = 0;
2445:
2446: #ifdef __mips__
2447: __asm__ __volatile__ ("move\t%0,$31":"=r"(ret));
2448: #else
2449: ret = __builtin_return_address(0);
2450: #endif
2451: printk("scsi_free %p %d\n",obj, len);
2452: #endif
2453:
2454: for (page = 0; page < dma_sectors / SECTORS_PER_PAGE; page++) {
2455: unsigned long page_addr = (unsigned long) dma_malloc_pages[page];
2456: if ((unsigned long) obj >= page_addr &&
2457: (unsigned long) obj < page_addr + PAGE_SIZE)
2458: {
2459: sector = (((unsigned long) obj) - page_addr) >> 9;
2460:
2461: nbits = len >> 9;
2462: mask = (1 << nbits) - 1;
2463:
2464: if ((mask << sector) >= (1 << SECTORS_PER_PAGE))
2465: panic ("scsi_free:Bad memory alignment");
2466:
2467: save_flags(flags);
2468: cli();
2469: if((dma_malloc_freelist[page] &
2470: (mask << sector)) != (mask<<sector)){
2471: #ifdef DEBUG
2472: printk("scsi_free(obj=%p, len=%d) called from %08lx\n",
2473: obj, len, ret);
2474: #endif
2475: panic("scsi_free:Trying to free unused memory");
2476: }
2477: dma_free_sectors += nbits;
2478: dma_malloc_freelist[page] &= ~(mask << sector);
2479: restore_flags(flags);
2480: return 0;
2481: }
2482: }
2483: panic("scsi_free:Bad offset");
2484: }
2485:
2486:
2487: int scsi_loadable_module_flag; /* Set after we scan builtin drivers */
2488:
2489: void * scsi_init_malloc(unsigned int size, int priority)
2490: {
2491: void * retval;
2492:
2493: /*
2494: * For buffers used by the DMA pool, we assume page aligned
2495: * structures.
2496: */
2497: if ((size % PAGE_SIZE) == 0) {
2498: int order, a_size;
2499: for (order = 0, a_size = PAGE_SIZE;
2500: a_size < size; order++, a_size <<= 1)
2501: ;
2502: retval = (void *) __get_dma_pages(priority & GFP_LEVEL_MASK,
2503: order);
2504: } else
2505: retval = kmalloc(size, priority);
2506:
2507: if (retval)
2508: memset(retval, 0, size);
2509: return retval;
2510: }
2511:
2512:
2513: void scsi_init_free(char * ptr, unsigned int size)
2514: {
2515: /*
2516: * We need this special code here because the DMA pool assumes
2517: * page aligned data. Besides, it is wasteful to allocate
2518: * page sized chunks with kmalloc.
2519: */
2520: if ((size % PAGE_SIZE) == 0) {
2521: int order, a_size;
2522:
2523: for (order = 0, a_size = PAGE_SIZE;
2524: a_size < size; order++, a_size <<= 1)
2525: ;
2526: free_pages((unsigned long)ptr, order);
2527: } else
2528: kfree(ptr);
2529: }
2530:
2531: void scsi_build_commandblocks(Scsi_Device * SDpnt)
2532: {
2533: struct Scsi_Host *host = SDpnt->host;
2534: int j;
2535: Scsi_Cmnd * SCpnt;
2536:
2537: if (SDpnt->queue_depth == 0)
2538: SDpnt->queue_depth = host->cmd_per_lun;
2539: SDpnt->device_queue = NULL;
2540:
2541: for(j=0;j<SDpnt->queue_depth;j++){
2542: SCpnt = (Scsi_Cmnd *)
2543: scsi_init_malloc(sizeof(Scsi_Cmnd),
2544: GFP_ATOMIC |
2545: (host->unchecked_isa_dma ? GFP_DMA : 0));
2546: SCpnt->host = host;
2547: SCpnt->device = SDpnt;
2548: SCpnt->target = SDpnt->id;
2549: SCpnt->lun = SDpnt->lun;
2550: SCpnt->channel = SDpnt->channel;
2551: SCpnt->request.rq_status = RQ_INACTIVE;
2552: SCpnt->use_sg = 0;
2553: SCpnt->old_use_sg = 0;
2554: SCpnt->old_cmd_len = 0;
2555: SCpnt->timeout = 0;
2556: SCpnt->underflow = 0;
2557: SCpnt->transfersize = 0;
2558: SCpnt->serial_number = 0;
2559: SCpnt->serial_number_at_timeout = 0;
2560: SCpnt->host_scribble = NULL;
2561: if(host->host_queue)
2562: host->host_queue->prev = SCpnt;
2563: SCpnt->next = host->host_queue;
2564: SCpnt->prev = NULL;
2565: host->host_queue = SCpnt;
2566: SCpnt->device_next = SDpnt->device_queue;
2567: SDpnt->device_queue = SCpnt;
2568: }
2569: SDpnt->has_cmdblocks = 1;
2570: }
2571:
2572: /*
2573: * scsi_dev_init() is our initialization routine, which in turn calls host
2574: * initialization, bus scanning, and sd/st initialization routines.
2575: */
2576:
2577: int scsi_dev_init(void)
2578: {
2579: Scsi_Device * SDpnt;
2580: struct Scsi_Host * shpnt;
2581: struct Scsi_Device_Template * sdtpnt;
2582: #ifdef FOO_ON_YOU
2583: return;
2584: #endif
2585:
2586: /* Yes we're here... */
2587: #if CONFIG_PROC_FS
2588: dispatch_scsi_info_ptr = dispatch_scsi_info;
2589: #endif
2590:
2591: /* Init a few things so we can "malloc" memory. */
2592: scsi_loadable_module_flag = 0;
2593:
2594: timer_table[SCSI_TIMER].fn = scsi_main_timeout;
2595: timer_table[SCSI_TIMER].expires = 0;
2596:
2597: #ifdef CONFIG_MODULES
2598: register_symtab(&scsi_symbol_table);
2599: #endif
2600:
2601: /* Register the /proc/scsi/scsi entry */
2602: #if CONFIG_PROC_FS
2603: proc_scsi_register(0, &proc_scsi_scsi);
2604: #endif
2605:
2606: /* initialize all hosts */
2607: scsi_init();
2608:
2609: scsi_devices = (Scsi_Device *) NULL;
2610:
2611: for (shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next) {
2612: scan_scsis(shpnt,0,0,0,0); /* scan for scsi devices */
2613: if (shpnt->select_queue_depths != NULL)
2614: (shpnt->select_queue_depths)(shpnt, scsi_devices);
2615: }
2616:
2617: printk("scsi : detected ");
2618: for (sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next)
2619: if (sdtpnt->dev_noticed && sdtpnt->name)
2620: printk("%d SCSI %s%s ", sdtpnt->dev_noticed, sdtpnt->name,
2621: (sdtpnt->dev_noticed != 1) ? "s" : "");
2622: printk("total.\n");
2623:
2624: for(sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next)
2625: if(sdtpnt->init && sdtpnt->dev_noticed) (*sdtpnt->init)();
2626:
2627: for (SDpnt=scsi_devices; SDpnt; SDpnt = SDpnt->next) {
2628: SDpnt->scsi_request_fn = NULL;
2629: for(sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next)
2630: if(sdtpnt->attach) (*sdtpnt->attach)(SDpnt);
2631: if(SDpnt->attached) scsi_build_commandblocks(SDpnt);
2632: }
2633:
2634:
2635: /*
2636: * This should build the DMA pool.
2637: */
2638: resize_dma_pool();
2639:
2640: /*
2641: * OK, now we finish the initialization by doing spin-up, read
2642: * capacity, etc, etc
2643: */
2644: for(sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next)
2645: if(sdtpnt->finish && sdtpnt->nr_dev)
2646: (*sdtpnt->finish)();
2647:
2648: scsi_loadable_module_flag = 1;
2649:
2650: return 0;
2651: }
2652:
2653: static void print_inquiry(unsigned char *data)
2654: {
2655: int i;
2656:
2657: printk(" Vendor: ");
2658: for (i = 8; i < 16; i++)
2659: {
2660: if (data[i] >= 0x20 && i < data[4] + 5)
2661: printk("%c", data[i]);
2662: else
2663: printk(" ");
2664: }
2665:
2666: printk(" Model: ");
2667: for (i = 16; i < 32; i++)
2668: {
2669: if (data[i] >= 0x20 && i < data[4] + 5)
2670: printk("%c", data[i]);
2671: else
2672: printk(" ");
2673: }
2674:
2675: printk(" Rev: ");
2676: for (i = 32; i < 36; i++)
2677: {
2678: if (data[i] >= 0x20 && i < data[4] + 5)
2679: printk("%c", data[i]);
2680: else
2681: printk(" ");
2682: }
2683:
2684: printk("\n");
2685:
2686: i = data[0] & 0x1f;
2687:
2688: printk(" Type: %s ",
2689: i < MAX_SCSI_DEVICE_CODE ? scsi_device_types[i] : "Unknown " );
2690: printk(" ANSI SCSI revision: %02x", data[2] & 0x07);
2691: if ((data[2] & 0x07) == 1 && (data[3] & 0x0f) == 1)
2692: printk(" CCS\n");
2693: else
2694: printk("\n");
2695: }
2696:
2697:
2698: #ifdef CONFIG_PROC_FS
2699: int scsi_proc_info(char *buffer, char **start, off_t offset, int length,
2700: int hostno, int inout)
2701: {
2702: Scsi_Cmnd *SCpnt;
2703: struct Scsi_Device_Template *SDTpnt;
2704: Scsi_Device *scd, *scd_h = NULL;
2705: struct Scsi_Host *HBA_ptr;
2706: char *p;
2707: int host, channel, id, lun;
2708: int size, len = 0;
2709: off_t begin = 0;
2710: off_t pos = 0;
2711:
2712: scd = scsi_devices;
2713: HBA_ptr = scsi_hostlist;
2714:
2715: if(inout == 0) {
2716: size = sprintf(buffer+len,"Attached devices: %s\n", (scd)?"":"none");
2717: len += size;
2718: pos = begin + len;
2719: while (HBA_ptr) {
2720: #if 0
2721: size += sprintf(buffer+len,"scsi%2d: %s\n", (int) HBA_ptr->host_no,
2722: HBA_ptr->hostt->procname);
2723: len += size;
2724: pos = begin + len;
2725: #endif
2726: scd = scsi_devices;
2727: while (scd) {
2728: if (scd->host == HBA_ptr) {
2729: proc_print_scsidevice(scd, buffer, &size, len);
2730: len += size;
2731: pos = begin + len;
2732:
2733: if (pos < offset) {
2734: len = 0;
2735: begin = pos;
2736: }
2737: if (pos > offset + length)
2738: goto stop_output;
2739: }
2740: scd = scd->next;
2741: }
2742: HBA_ptr = HBA_ptr->next;
2743: }
2744:
2745: stop_output:
2746: *start=buffer+(offset-begin); /* Start of wanted data */
2747: len-=(offset-begin); /* Start slop */
2748: if(len>length)
2749: len = length; /* Ending slop */
2750: return (len);
2751: }
2752:
2753: if(!buffer || length < 25 || strncmp("scsi", buffer, 4))
2754: return(-EINVAL);
2755:
2756: /*
2757: * Usage: echo "scsi add-single-device 0 1 2 3" >/proc/scsi/scsi
2758: * with "0 1 2 3" replaced by your "Host Channel Id Lun".
2759: * Consider this feature BETA.
2760: * CAUTION: This is not for hotplugging your peripherals. As
2761: * SCSI was not designed for this you could damage your
2762: * hardware !
2763: * However perhaps it is legal to switch on an
2764: * already connected device. It is perhaps not
2765: * guaranteed this device doesn't corrupt an ongoing data transfer.
2766: */
2767: if(!strncmp("add-single-device", buffer + 5, 17)) {
2768: p = buffer + 23;
2769:
2770: host = simple_strtoul(p, &p, 0);
2771: channel = simple_strtoul(p+1, &p, 0);
2772: id = simple_strtoul(p+1, &p, 0);
2773: lun = simple_strtoul(p+1, &p, 0);
2774:
2775: printk("scsi singledevice %d %d %d %d\n", host, channel,
2776: id, lun);
2777:
2778: while(scd && (scd->host->host_no != host
2779: || scd->channel != channel
2780: || scd->id != id
2781: || scd->lun != lun)) {
2782: scd = scd->next;
2783: }
2784: if(scd)
2785: return(-ENOSYS); /* We do not yet support unplugging */
2786: while(HBA_ptr && HBA_ptr->host_no != host)
2787: HBA_ptr = HBA_ptr->next;
2788:
2789: if(!HBA_ptr)
2790: return(-ENXIO);
2791:
2792: scan_scsis (HBA_ptr, 1, channel, id, lun);
2793: return(length);
2794:
2795: }
2796:
2797: /*
2798: * Usage: echo "scsi remove-single-device 0 1 2 3" >/proc/scsi/scsi
2799: * with "0 1 2 3" replaced by your "Host Channel Id Lun".
2800: *
2801: * Consider this feature pre-BETA.
2802: *
2803: * CAUTION: This is not for hotplugging your peripherals. As
2804: * SCSI was not designed for this you could damage your
2805: * hardware and thoroughly confuse the SCSI subsystem.
2806: *
2807: */
2808: else if(!strncmp("remove-single-device", buffer + 5, 20)) {
2809: p = buffer + 26;
2810:
2811: host = simple_strtoul(p, &p, 0);
2812: channel = simple_strtoul(p+1, &p, 0);
2813: id = simple_strtoul(p+1, &p, 0);
2814: lun = simple_strtoul(p+1, &p, 0);
2815:
2816: while(scd != NULL) {
2817: if(scd->host->host_no == host
2818: && scd->channel == channel
2819: && scd->id == id
2820: && scd->lun == lun){
2821: break;
2822: }
2823: scd_h = scd;
2824: scd = scd->next;
2825: }
2826:
2827: if(scd == NULL)
2828: return(-ENODEV); /* there is no such device attached */
2829:
2830: if(scd->access_count)
2831: return(-EBUSY);
2832:
2833: SDTpnt = scsi_devicelist;
2834: while(SDTpnt != NULL) {
2835: if(SDTpnt->detach) (*SDTpnt->detach)(scd);
2836: SDTpnt = SDTpnt->next;
2837: }
2838:
2839: if(scd->attached == 0) {
2840: /*
2841: * Nobody is using this device any more.
2842: * Free all of the command structures.
2843: */
2844: for(SCpnt=scd->host->host_queue; SCpnt; SCpnt = SCpnt->next){
2845: if(SCpnt->device == scd) {
2846: if(SCpnt->prev != NULL)
2847: SCpnt->prev->next = SCpnt->next;
2848: if(SCpnt->next != NULL)
2849: SCpnt->next->prev = SCpnt->prev;
2850: if(SCpnt == scd->host->host_queue)
2851: scd->host->host_queue = SCpnt->next;
2852: scsi_init_free((char *) SCpnt, sizeof(*SCpnt));
2853: }
2854: }
2855: /* Now we can remove the device structure */
2856: if(scd_h != NULL) {
2857: scd_h->next = scd->next;
2858: } else if (scsi_devices == scd) {
2859: /* We had a hit on the first entry of the device list */
2860: scsi_devices = scd->next;
2861: }
2862: scsi_init_free((char *) scd, sizeof(Scsi_Device));
2863: } else {
2864: return(-EBUSY);
2865: }
2866: return(0);
2867: }
2868: return(-EINVAL);
2869: }
2870: #endif
2871:
2872: /*
2873: * Go through the device list and recompute the most appropriate size
2874: * for the dma pool. Then grab more memory (as required).
2875: */
2876: static void resize_dma_pool(void)
2877: {
2878: int i;
2879: unsigned long size;
2880: struct Scsi_Host * shpnt;
2881: struct Scsi_Host * host = NULL;
2882: Scsi_Device * SDpnt;
2883: unsigned long flags;
2884: FreeSectorBitmap * new_dma_malloc_freelist = NULL;
2885: unsigned int new_dma_sectors = 0;
2886: unsigned int new_need_isa_buffer = 0;
2887: unsigned char ** new_dma_malloc_pages = NULL;
2888:
2889: if( !scsi_devices )
2890: {
2891: /*
2892: * Free up the DMA pool.
2893: */
2894: if( dma_free_sectors != dma_sectors )
2895: panic("SCSI DMA pool memory leak %d %d\n",dma_free_sectors,dma_sectors);
2896:
2897: for(i=0; i < dma_sectors / SECTORS_PER_PAGE; i++)
2898: scsi_init_free(dma_malloc_pages[i], PAGE_SIZE);
2899: if (dma_malloc_pages)
2900: scsi_init_free((char *) dma_malloc_pages,
2901: (dma_sectors / SECTORS_PER_PAGE)*sizeof(*dma_malloc_pages));
2902: dma_malloc_pages = NULL;
2903: if (dma_malloc_freelist)
2904: scsi_init_free((char *) dma_malloc_freelist,
2905: (dma_sectors / SECTORS_PER_PAGE)*sizeof(*dma_malloc_freelist));
2906: dma_malloc_freelist = NULL;
2907: dma_sectors = 0;
2908: dma_free_sectors = 0;
2909: return;
2910: }
2911: /* Next, check to see if we need to extend the DMA buffer pool */
2912:
2913: new_dma_sectors = 2*SECTORS_PER_PAGE; /* Base value we use */
2914:
2915: if (high_memory-1 > ISA_DMA_THRESHOLD)
2916: scsi_need_isa_bounce_buffers = 1;
2917: else
2918: scsi_need_isa_bounce_buffers = 0;
2919:
2920: if (scsi_devicelist)
2921: for(shpnt=scsi_hostlist; shpnt; shpnt = shpnt->next)
2922: new_dma_sectors += SECTORS_PER_PAGE; /* Increment for each host */
2923:
2924: for (SDpnt=scsi_devices; SDpnt; SDpnt = SDpnt->next) {
2925: host = SDpnt->host;
2926:
2927: /*
2928: * sd and sr drivers allocate scatterlists.
2929: * sr drivers may allocate for each command 1x2048 or 2x1024 extra
2930: * buffers for 2k sector size and 1k fs.
2931: * sg driver allocates buffers < 4k.
2932: * st driver does not need buffers from the dma pool.
2933: * estimate 4k buffer/command for devices of unknown type (should panic).
2934: */
2935: if (SDpnt->type == TYPE_WORM || SDpnt->type == TYPE_ROM ||
2936: SDpnt->type == TYPE_DISK || SDpnt->type == TYPE_MOD) {
2937: new_dma_sectors += ((host->sg_tablesize *
2938: sizeof(struct scatterlist) + 511) >> 9) *
2939: SDpnt->queue_depth;
2940: if (SDpnt->type == TYPE_WORM || SDpnt->type == TYPE_ROM)
2941: new_dma_sectors += (2048 >> 9) * SDpnt->queue_depth;
2942: }
2943: else if (SDpnt->type == TYPE_SCANNER ||
2944: SDpnt->type == TYPE_PROCESSOR ||
2945: SDpnt->type == TYPE_MEDIUM_CHANGER) {
2946: new_dma_sectors += (4096 >> 9) * SDpnt->queue_depth;
2947: }
2948: else {
2949: if (SDpnt->type != TYPE_TAPE) {
2950: printk("resize_dma_pool: unknown device type %d\n", SDpnt->type);
2951: new_dma_sectors += (4096 >> 9) * SDpnt->queue_depth;
2952: }
2953: }
2954:
2955: if(host->unchecked_isa_dma &&
2956: scsi_need_isa_bounce_buffers &&
2957: SDpnt->type != TYPE_TAPE) {
2958: new_dma_sectors += (PAGE_SIZE >> 9) * host->sg_tablesize *
2959: SDpnt->queue_depth;
2960: new_need_isa_buffer++;
2961: }
2962: }
2963:
2964: #ifdef DEBUG_INIT
2965: printk("resize_dma_pool: needed dma sectors = %d\n", new_dma_sectors);
2966: #endif
2967:
2968: /* limit DMA memory to 32MB: */
2969: new_dma_sectors = (new_dma_sectors + 15) & 0xfff0;
2970:
2971: /*
2972: * We never shrink the buffers - this leads to
2973: * race conditions that I would rather not even think
2974: * about right now.
2975: */
2976: if( new_dma_sectors < dma_sectors )
2977: new_dma_sectors = dma_sectors;
2978:
2979: if (new_dma_sectors)
2980: {
2981: size = (new_dma_sectors / SECTORS_PER_PAGE)*sizeof(FreeSectorBitmap);
2982: new_dma_malloc_freelist = (FreeSectorBitmap *) scsi_init_malloc(size, GFP_ATOMIC);
2983: memset(new_dma_malloc_freelist, 0, size);
2984:
2985: size = (new_dma_sectors / SECTORS_PER_PAGE)*sizeof(*new_dma_malloc_pages);
2986: new_dma_malloc_pages = (unsigned char **) scsi_init_malloc(size, GFP_ATOMIC);
2987: memset(new_dma_malloc_pages, 0, size);
2988: }
2989:
2990: /*
2991: * If we need more buffers, expand the list.
2992: */
2993: if( new_dma_sectors > dma_sectors ) {
2994: for(i=dma_sectors / SECTORS_PER_PAGE; i< new_dma_sectors / SECTORS_PER_PAGE; i++)
2995: new_dma_malloc_pages[i] = (unsigned char *)
2996: scsi_init_malloc(PAGE_SIZE, GFP_ATOMIC | GFP_DMA);
2997: }
2998:
2999: /* When we dick with the actual DMA list, we need to
3000: * protect things
3001: */
3002: save_flags(flags);
3003: cli();
3004: if (dma_malloc_freelist)
3005: {
3006: size = (dma_sectors / SECTORS_PER_PAGE)*sizeof(FreeSectorBitmap);
3007: memcpy(new_dma_malloc_freelist, dma_malloc_freelist, size);
3008: scsi_init_free((char *) dma_malloc_freelist, size);
3009: }
3010: dma_malloc_freelist = new_dma_malloc_freelist;
3011:
3012: if (dma_malloc_pages)
3013: {
3014: size = (dma_sectors / SECTORS_PER_PAGE)*sizeof(*dma_malloc_pages);
3015: memcpy(new_dma_malloc_pages, dma_malloc_pages, size);
3016: scsi_init_free((char *) dma_malloc_pages, size);
3017: }
3018:
3019: dma_free_sectors += new_dma_sectors - dma_sectors;
3020: dma_malloc_pages = new_dma_malloc_pages;
3021: dma_sectors = new_dma_sectors;
3022: need_isa_buffer = new_need_isa_buffer;
3023: restore_flags(flags);
3024:
3025: #ifdef DEBUG_INIT
3026: printk("resize_dma_pool: dma free sectors = %d\n", dma_free_sectors);
3027: printk("resize_dma_pool: dma sectors = %d\n", dma_sectors);
3028: printk("resize_dma_pool: need isa buffers = %d\n", need_isa_buffer);
3029: #endif
3030: }
3031:
3032: #ifdef CONFIG_MODULES /* a big #ifdef block... */
3033:
3034: /*
3035: * This entry point should be called by a loadable module if it is trying
3036: * add a low level scsi driver to the system.
3037: */
3038: static int scsi_register_host(Scsi_Host_Template * tpnt)
3039: {
3040: int pcount;
3041: struct Scsi_Host * shpnt;
3042: Scsi_Device * SDpnt;
3043: struct Scsi_Device_Template * sdtpnt;
3044: const char * name;
3045:
3046: if (tpnt->next || !tpnt->detect) return 1;/* Must be already loaded, or
3047: * no detect routine available
3048: */
3049: pcount = next_scsi_host;
3050: if ((tpnt->present = tpnt->detect(tpnt)))
3051: {
3052: if(pcount == next_scsi_host) {
3053: if(tpnt->present > 1) {
3054: printk("Failure to register low-level scsi driver");
3055: scsi_unregister_host(tpnt);
3056: return 1;
3057: }
3058: /* The low-level driver failed to register a driver. We
3059: * can do this now.
3060: */
3061: scsi_register(tpnt,0);
3062: }
3063: tpnt->next = scsi_hosts; /* Add to the linked list */
3064: scsi_hosts = tpnt;
3065:
3066: /* Add the new driver to /proc/scsi */
3067: #if CONFIG_PROC_FS
3068: build_proc_dir_entries(tpnt);
3069: #endif
3070:
3071: for(shpnt=scsi_hostlist; shpnt; shpnt = shpnt->next)
3072: if(shpnt->hostt == tpnt)
3073: {
3074: if(tpnt->info)
3075: name = tpnt->info(shpnt);
3076: else
3077: name = tpnt->name;
3078: printk ("scsi%d : %s\n", /* And print a little message */
3079: shpnt->host_no, name);
3080: }
3081:
3082: printk ("scsi : %d host%s.\n", next_scsi_host,
3083: (next_scsi_host == 1) ? "" : "s");
3084:
3085: scsi_make_blocked_list();
3086:
3087: /* The next step is to call scan_scsis here. This generates the
3088: * Scsi_Devices entries
3089: */
3090:
3091: for(shpnt=scsi_hostlist; shpnt; shpnt = shpnt->next)
3092: if(shpnt->hostt == tpnt) {
3093: scan_scsis(shpnt,0,0,0,0);
3094: if (shpnt->select_queue_depths != NULL)
3095: (shpnt->select_queue_depths)(shpnt, scsi_devices);
3096: }
3097:
3098: for(sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next)
3099: if(sdtpnt->init && sdtpnt->dev_noticed) (*sdtpnt->init)();
3100:
3101: /* Next we create the Scsi_Cmnd structures for this host */
3102:
3103: for(SDpnt = scsi_devices; SDpnt; SDpnt = SDpnt->next)
3104: if(SDpnt->host->hostt == tpnt)
3105: {
3106: for(sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next)
3107: if(sdtpnt->attach) (*sdtpnt->attach)(SDpnt);
3108: if(SDpnt->attached) scsi_build_commandblocks(SDpnt);
3109: }
3110:
3111: /*
3112: * Now that we have all of the devices, resize the DMA pool,
3113: * as required. */
3114: resize_dma_pool();
3115:
3116:
3117: /* This does any final handling that is required. */
3118: for(sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next)
3119: if(sdtpnt->finish && sdtpnt->nr_dev)
3120: (*sdtpnt->finish)();
3121: }
3122:
3123: #if defined(USE_STATIC_SCSI_MEMORY)
3124: printk ("SCSI memory: total %ldKb, used %ldKb, free %ldKb.\n",
3125: (scsi_memory_upper_value - scsi_memory_lower_value) / 1024,
3126: (scsi_init_memory_start - scsi_memory_lower_value) / 1024,
3127: (scsi_memory_upper_value - scsi_init_memory_start) / 1024);
3128: #endif
3129:
3130: MOD_INC_USE_COUNT;
3131: return 0;
3132: }
3133:
3134: /*
3135: * Similarly, this entry point should be called by a loadable module if it
3136: * is trying to remove a low level scsi driver from the system.
3137: */
3138: static void scsi_unregister_host(Scsi_Host_Template * tpnt)
3139: {
3140: Scsi_Host_Template * SHT, *SHTp;
3141: Scsi_Device *sdpnt, * sdppnt, * sdpnt1;
3142: Scsi_Cmnd * SCpnt;
3143: unsigned long flags;
3144: struct Scsi_Device_Template * sdtpnt;
3145: struct Scsi_Host * shpnt, *sh1;
3146: int pcount;
3147:
3148: /* First verify that this host adapter is completely free with no pending
3149: * commands */
3150:
3151: for(sdpnt = scsi_devices; sdpnt; sdpnt = sdpnt->next)
3152: if(sdpnt->host->hostt == tpnt && sdpnt->host->hostt->usage_count
3153: && *sdpnt->host->hostt->usage_count) return;
3154:
3155: for(shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next)
3156: {
3157: if (shpnt->hostt != tpnt) continue;
3158: for(SCpnt = shpnt->host_queue; SCpnt; SCpnt = SCpnt->next)
3159: {
3160: save_flags(flags);
3161: cli();
3162: if(SCpnt->request.rq_status != RQ_INACTIVE) {
3163: restore_flags(flags);
3164: for(SCpnt = shpnt->host_queue; SCpnt; SCpnt = SCpnt->next)
3165: if(SCpnt->request.rq_status == RQ_SCSI_DISCONNECTING)
3166: SCpnt->request.rq_status = RQ_INACTIVE;
3167: printk("Device busy???\n");
3168: return;
3169: }
3170: SCpnt->request.rq_status = RQ_SCSI_DISCONNECTING; /* Mark as busy */
3171: restore_flags(flags);
3172: }
3173: }
3174: /* Next we detach the high level drivers from the Scsi_Device structures */
3175:
3176: for(sdpnt = scsi_devices; sdpnt; sdpnt = sdpnt->next)
3177: if(sdpnt->host->hostt == tpnt)
3178: {
3179: for(sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next)
3180: if(sdtpnt->detach) (*sdtpnt->detach)(sdpnt);
3181: /* If something still attached, punt */
3182: if (sdpnt->attached) {
3183: printk("Attached usage count = %d\n", sdpnt->attached);
3184: return;
3185: }
3186: }
3187:
3188: /* Next we free up the Scsi_Cmnd structures for this host */
3189:
3190: for(sdpnt = scsi_devices; sdpnt; sdpnt = sdpnt->next)
3191: if(sdpnt->host->hostt == tpnt)
3192: while (sdpnt->host->host_queue) {
3193: SCpnt = sdpnt->host->host_queue->next;
3194: scsi_init_free((char *) sdpnt->host->host_queue, sizeof(Scsi_Cmnd));
3195: sdpnt->host->host_queue = SCpnt;
3196: if (SCpnt) SCpnt->prev = NULL;
3197: sdpnt->has_cmdblocks = 0;
3198: }
3199:
3200: /* Next free up the Scsi_Device structures for this host */
3201:
3202: sdppnt = NULL;
3203: for(sdpnt = scsi_devices; sdpnt; sdpnt = sdpnt1)
3204: {
3205: sdpnt1 = sdpnt->next;
3206: if (sdpnt->host->hostt == tpnt) {
3207: if (sdppnt)
3208: sdppnt->next = sdpnt->next;
3209: else
3210: scsi_devices = sdpnt->next;
3211: scsi_init_free((char *) sdpnt, sizeof (Scsi_Device));
3212: } else
3213: sdppnt = sdpnt;
3214: }
3215:
3216: /* Next we go through and remove the instances of the individual hosts
3217: * that were detected */
3218:
3219: shpnt = scsi_hostlist;
3220: while(shpnt) {
3221: sh1 = shpnt->next;
3222: if(shpnt->hostt == tpnt) {
3223: if(shpnt->loaded_as_module) {
3224: pcount = next_scsi_host;
3225: /* Remove the /proc/scsi directory entry */
3226: #if CONFIG_PROC_FS
3227: proc_scsi_unregister(tpnt->proc_dir,
3228: shpnt->host_no + PROC_SCSI_FILE);
3229: #endif
3230: if(tpnt->release)
3231: (*tpnt->release)(shpnt);
3232: else {
3233: /* This is the default case for the release function.
3234: * It should do the right thing for most correctly
3235: * written host adapters.
3236: */
3237: if (shpnt->irq) free_irq(shpnt->irq, NULL);
3238: if (shpnt->dma_channel != 0xff) free_dma(shpnt->dma_channel);
3239: if (shpnt->io_port && shpnt->n_io_port)
3240: release_region(shpnt->io_port, shpnt->n_io_port);
3241: }
3242: if(pcount == next_scsi_host) scsi_unregister(shpnt);
3243: tpnt->present--;
3244: }
3245: }
3246: shpnt = sh1;
3247: }
3248:
3249: /*
3250: * If there are absolutely no more hosts left, it is safe
3251: * to completely nuke the DMA pool. The resize operation will
3252: * do the right thing and free everything.
3253: */
3254: if( !scsi_devices )
3255: resize_dma_pool();
3256:
3257: printk ("scsi : %d host%s.\n", next_scsi_host,
3258: (next_scsi_host == 1) ? "" : "s");
3259:
3260: #if defined(USE_STATIC_SCSI_MEMORY)
3261: printk ("SCSI memory: total %ldKb, used %ldKb, free %ldKb.\n",
3262: (scsi_memory_upper_value - scsi_memory_lower_value) / 1024,
3263: (scsi_init_memory_start - scsi_memory_lower_value) / 1024,
3264: (scsi_memory_upper_value - scsi_init_memory_start) / 1024);
3265: #endif
3266:
3267: scsi_make_blocked_list();
3268:
3269: /* There were some hosts that were loaded at boot time, so we cannot
3270: do any more than this */
3271: if (tpnt->present) return;
3272:
3273: /* OK, this is the very last step. Remove this host adapter from the
3274: linked list. */
3275: for(SHTp=NULL, SHT=scsi_hosts; SHT; SHTp=SHT, SHT=SHT->next)
3276: if(SHT == tpnt) {
3277: if(SHTp)
3278: SHTp->next = SHT->next;
3279: else
3280: scsi_hosts = SHT->next;
3281: SHT->next = NULL;
3282: break;
3283: }
3284:
3285: /* Rebuild the /proc/scsi directory entries */
3286: #if CONFIG_PROC_FS
3287: proc_scsi_unregister(tpnt->proc_dir, tpnt->proc_dir->low_ino);
3288: #endif
3289: MOD_DEC_USE_COUNT;
3290: }
3291:
3292: /*
3293: * This entry point should be called by a loadable module if it is trying
3294: * add a high level scsi driver to the system.
3295: */
3296: static int scsi_register_device_module(struct Scsi_Device_Template * tpnt)
3297: {
3298: Scsi_Device * SDpnt;
3299:
3300: if (tpnt->next) return 1;
3301:
3302: scsi_register_device(tpnt);
3303: /*
3304: * First scan the devices that we know about, and see if we notice them.
3305: */
3306:
3307: for(SDpnt = scsi_devices; SDpnt; SDpnt = SDpnt->next)
3308: if(tpnt->detect) SDpnt->attached += (*tpnt->detect)(SDpnt);
3309:
3310: /*
3311: * If any of the devices would match this driver, then perform the
3312: * init function.
3313: */
3314: if(tpnt->init && tpnt->dev_noticed)
3315: if ((*tpnt->init)()) return 1;
3316:
3317: /*
3318: * Now actually connect the devices to the new driver.
3319: */
3320: for(SDpnt = scsi_devices; SDpnt; SDpnt = SDpnt->next)
3321: {
3322: if(tpnt->attach) (*tpnt->attach)(SDpnt);
3323: /*
3324: * If this driver attached to the device, and we no longer
3325: * have anything attached, release the scsi command blocks.
3326: */
3327: if(SDpnt->attached && SDpnt->has_cmdblocks == 0)
3328: scsi_build_commandblocks(SDpnt);
3329: }
3330:
3331: /*
3332: * This does any final handling that is required.
3333: */
3334: if(tpnt->finish && tpnt->nr_dev) (*tpnt->finish)();
3335: MOD_INC_USE_COUNT;
3336: return 0;
3337: }
3338:
3339: static int scsi_unregister_device(struct Scsi_Device_Template * tpnt)
3340: {
3341: Scsi_Device * SDpnt;
3342: Scsi_Cmnd * SCpnt;
3343: struct Scsi_Device_Template * spnt;
3344: struct Scsi_Device_Template * prev_spnt;
3345:
3346: /*
3347: * If we are busy, this is not going to fly.
3348: */
3349: if( *tpnt->usage_count != 0) return 0;
3350: /*
3351: * Next, detach the devices from the driver.
3352: */
3353:
3354: for(SDpnt = scsi_devices; SDpnt; SDpnt = SDpnt->next)
3355: {
3356: if(tpnt->detach) (*tpnt->detach)(SDpnt);
3357: if(SDpnt->attached == 0)
3358: {
3359: /*
3360: * Nobody is using this device any more. Free all of the
3361: * command structures.
3362: */
3363: for(SCpnt = SDpnt->host->host_queue; SCpnt; SCpnt = SCpnt->next)
3364: {
3365: if(SCpnt->device == SDpnt)
3366: {
3367: if(SCpnt->prev != NULL)
3368: SCpnt->prev->next = SCpnt->next;
3369: if(SCpnt->next != NULL)
3370: SCpnt->next->prev = SCpnt->prev;
3371: if(SCpnt == SDpnt->host->host_queue)
3372: SDpnt->host->host_queue = SCpnt->next;
3373: scsi_init_free((char *) SCpnt, sizeof(*SCpnt));
3374: }
3375: }
3376: SDpnt->has_cmdblocks = 0;
3377: }
3378: }
3379: /*
3380: * Extract the template from the linked list.
3381: */
3382: spnt = scsi_devicelist;
3383: prev_spnt = NULL;
3384: while(spnt != tpnt)
3385: {
3386: prev_spnt = spnt;
3387: spnt = spnt->next;
3388: }
3389: if(prev_spnt == NULL)
3390: scsi_devicelist = tpnt->next;
3391: else
3392: prev_spnt->next = spnt->next;
3393:
3394: MOD_DEC_USE_COUNT;
3395: /*
3396: * Final cleanup for the driver is done in the driver sources in the
3397: * cleanup function.
3398: */
3399: return 0;
3400: }
3401:
3402:
3403: int scsi_register_module(int module_type, void * ptr)
3404: {
3405: switch(module_type){
3406: case MODULE_SCSI_HA:
3407: return scsi_register_host((Scsi_Host_Template *) ptr);
3408:
3409: /* Load upper level device handler of some kind */
3410: case MODULE_SCSI_DEV:
3411: #ifdef CONFIG_KERNELD
3412: if (scsi_hosts == NULL)
3413: request_module("scsi_hostadapter");
3414: #endif
3415: return scsi_register_device_module((struct Scsi_Device_Template *) ptr);
3416: /* The rest of these are not yet implemented */
3417:
3418: /* Load constants.o */
3419: case MODULE_SCSI_CONST:
3420:
3421: /* Load specialized ioctl handler for some device. Intended for
3422: * cdroms that have non-SCSI2 audio command sets. */
3423: case MODULE_SCSI_IOCTL:
3424:
3425: default:
3426: return 1;
3427: }
3428: }
3429:
3430: void scsi_unregister_module(int module_type, void * ptr)
3431: {
3432: switch(module_type) {
3433: case MODULE_SCSI_HA:
3434: scsi_unregister_host((Scsi_Host_Template *) ptr);
3435: break;
3436: case MODULE_SCSI_DEV:
3437: scsi_unregister_device((struct Scsi_Device_Template *) ptr);
3438: break;
3439: /* The rest of these are not yet implemented. */
3440: case MODULE_SCSI_CONST:
3441: case MODULE_SCSI_IOCTL:
3442: break;
3443: default:
3444: }
3445: return;
3446: }
3447:
3448: #endif /* CONFIG_MODULES */
3449:
3450: #ifdef DEBUG_TIMEOUT
3451: static void
3452: scsi_dump_status(void)
3453: {
3454: int i;
3455: struct Scsi_Host * shpnt;
3456: Scsi_Cmnd * SCpnt;
3457: printk("Dump of scsi parameters:\n");
3458: i = 0;
3459: for(shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next)
3460: for(SCpnt=shpnt->host_queue; SCpnt; SCpnt = SCpnt->next)
3461: {
3462: /* (0) 0:0:0:0 (802 123434 8 8 0) (3 3 2) (%d %d %d) %d %x */
3463: printk("(%d) %d:%d:%d:%d (%s %ld %ld %ld %d) (%d %d %x) (%d %d %d) %x %x %x\n",
3464: i++, SCpnt->host->host_no,
3465: SCpnt->channel,
3466: SCpnt->target,
3467: SCpnt->lun,
3468: kdevname(SCpnt->request.rq_dev),
3469: SCpnt->request.sector,
3470: SCpnt->request.nr_sectors,
3471: SCpnt->request.current_nr_sectors,
3472: SCpnt->use_sg,
3473: SCpnt->retries,
3474: SCpnt->allowed,
3475: SCpnt->flags,
3476: SCpnt->timeout_per_command,
3477: SCpnt->timeout,
3478: SCpnt->internal_timeout,
3479: SCpnt->cmnd[0],
3480: SCpnt->sense_buffer[2],
3481: SCpnt->result);
3482: }
3483: printk("wait_for_request = %p\n", wait_for_request);
3484: /* Now dump the request lists for each block device */
3485: printk("Dump of pending block device requests\n");
3486: for(i=0; i<MAX_BLKDEV; i++)
3487: if(blk_dev[i].current_request)
3488: {
3489: struct request * req;
3490: printk("%d: ", i);
3491: req = blk_dev[i].current_request;
3492: while(req) {
3493: printk("(%s %d %ld %ld %ld) ",
3494: kdevname(req->rq_dev),
3495: req->cmd,
3496: req->sector,
3497: req->nr_sectors,
3498: req->current_nr_sectors);
3499: req = req->next;
3500: }
3501: printk("\n");
3502: }
3503: }
3504: #endif
3505:
3506: #ifdef MODULE
3507:
3508: int init_module(void) {
3509: unsigned long size;
3510:
3511: /*
3512: * This makes /proc/scsi visible.
3513: */
3514: #if CONFIG_PROC_FS
3515: dispatch_scsi_info_ptr = dispatch_scsi_info;
3516: #endif
3517:
3518: timer_table[SCSI_TIMER].fn = scsi_main_timeout;
3519: timer_table[SCSI_TIMER].expires = 0;
3520: register_symtab(&scsi_symbol_table);
3521: scsi_loadable_module_flag = 1;
3522:
3523: /* Register the /proc/scsi/scsi entry */
3524: #if CONFIG_PROC_FS
3525: proc_scsi_register(0, &proc_scsi_scsi);
3526: #endif
3527:
3528:
3529: dma_sectors = PAGE_SIZE / SECTOR_SIZE;
3530: dma_free_sectors= dma_sectors;
3531: /*
3532: * Set up a minimal DMA buffer list - this will be used during scan_scsis
3533: * in some cases.
3534: */
3535:
3536: /* One bit per sector to indicate free/busy */
3537: size = (dma_sectors / SECTORS_PER_PAGE)*sizeof(FreeSectorBitmap);
3538: dma_malloc_freelist = (unsigned char *) scsi_init_malloc(size, GFP_ATOMIC);
3539: memset(dma_malloc_freelist, 0, size);
3540:
3541: /* One pointer per page for the page list */
3542: dma_malloc_pages = (unsigned char **)
3543: scsi_init_malloc((dma_sectors / SECTORS_PER_PAGE)*sizeof(*dma_malloc_pages), GFP_ATOMIC);
3544: dma_malloc_pages[0] = (unsigned char *)
3545: scsi_init_malloc(PAGE_SIZE, GFP_ATOMIC | GFP_DMA);
3546: return 0;
3547: }
3548:
3549: void cleanup_module( void)
3550: {
3551: #if CONFIG_PROC_FS
3552: proc_scsi_unregister(0, PROC_SCSI_SCSI);
3553:
3554: /* No, we're not here anymore. Don't show the /proc/scsi files. */
3555: dispatch_scsi_info_ptr = 0L;
3556: #endif
3557:
3558: /*
3559: * Free up the DMA pool.
3560: */
3561: resize_dma_pool();
3562:
3563: timer_table[SCSI_TIMER].fn = NULL;
3564: timer_table[SCSI_TIMER].expires = 0;
3565: }
3566: #endif /* MODULE */
3567:
3568: /*
3569: * Overrides for Emacs so that we follow Linus's tabbing style.
3570: * Emacs will notice this stuff at the end of the file and automatically
3571: * adjust the settings for this buffer only. This must remain at the end
3572: * of the file.
3573: * ---------------------------------------------------------------------------
3574: * Local variables:
3575: * c-indent-level: 4
3576: * c-brace-imaginary-offset: 0
3577: * c-brace-offset: -4
3578: * c-argdecl-indent: 4
3579: * c-label-offset: -4
3580: * c-continued-statement-offset: 4
3581: * c-continued-brace-offset: 0
3582: * indent-tabs-mode: nil
3583: * tab-width: 8
3584: * End:
3585: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.