|
|
1.1 root 1: /*
2: * sd.c Copyright (C) 1992 Drew Eckhardt
3: * Copyright (C) 1993, 1994, 1995 Eric Youngdale
4: *
5: * Linux scsi disk driver
6: * Initial versions: Drew Eckhardt
7: * Subsequent revisions: Eric Youngdale
8: *
9: * <[email protected]>
10: *
11: * Modified by Eric Youngdale [email protected] to
12: * add scatter-gather, multiple outstanding request, and other
13: * enhancements.
14: *
15: * Modified by Eric Youngdale [email protected] to support loadable
16: * low-level scsi drivers.
17: */
18:
19: #include <linux/module.h>
20: #ifdef MODULE
21: /*
22: * This is a variable in scsi.c that is set when we are processing something
23: * after boot time. By definition, this is true when we are a loadable module
24: * ourselves.
25: */
26: #define MODULE_FLAG 1
27: #else
28: #define MODULE_FLAG scsi_loadable_module_flag
29: #endif /* MODULE */
30:
31: #include <linux/fs.h>
32: #include <linux/kernel.h>
33: #include <linux/sched.h>
34: #include <linux/mm.h>
35: #include <linux/string.h>
36: #include <linux/errno.h>
37: #include <linux/interrupt.h>
38:
39: #include <asm/system.h>
40:
41: #define MAJOR_NR SCSI_DISK_MAJOR
42: #include <linux/blk.h>
43: #include "scsi.h"
44: #include "hosts.h"
45: #include "sd.h"
46: #include <scsi/scsi_ioctl.h>
47: #include "constants.h"
48:
49: #include <linux/genhd.h>
50:
51: /*
52: * static const char RCSid[] = "$Header:";
53: */
54:
55: #define MAX_RETRIES 5
56:
57: /*
58: * Time out in seconds for disks and Magneto-opticals (which are slower).
59: */
60:
61: #define SD_TIMEOUT (20 * HZ)
62: #define SD_MOD_TIMEOUT (25 * HZ)
63:
64: #define CLUSTERABLE_DEVICE(SC) (SC->host->use_clustering && \
65: SC->device->type != TYPE_MOD)
66:
67: struct hd_struct * sd;
68:
69: Scsi_Disk * rscsi_disks = NULL;
70: static int * sd_sizes;
71: static int * sd_blocksizes;
72: static int * sd_hardsizes; /* Hardware sector size */
73:
74: extern int sd_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
75:
76: static int check_scsidisk_media_change(kdev_t);
77: static int fop_revalidate_scsidisk(kdev_t);
78:
79: static int sd_init_onedisk(int);
80:
81: static void requeue_sd_request (Scsi_Cmnd * SCpnt);
82:
83: static int sd_init(void);
84: static void sd_finish(void);
85: static int sd_attach(Scsi_Device *);
86: static int sd_detect(Scsi_Device *);
87: static void sd_detach(Scsi_Device *);
88:
89: struct Scsi_Device_Template sd_template =
90: { NULL, "disk", "sd", NULL, TYPE_DISK,
91: SCSI_DISK_MAJOR, 0, 0, 0, 1,
92: sd_detect, sd_init,
93: sd_finish, sd_attach, sd_detach
94: };
95:
96: static int sd_open(struct inode * inode, struct file * filp)
97: {
98: int target;
99: target = DEVICE_NR(inode->i_rdev);
100:
101: if(target >= sd_template.dev_max || !rscsi_disks[target].device)
102: return -ENXIO; /* No such device */
103:
104: /*
105: * Make sure that only one process can do a check_change_disk at one time.
106: * This is also used to lock out further access when the partition table
107: * is being re-read.
108: */
109:
110: while (rscsi_disks[target].device->busy)
111: barrier();
112: if(rscsi_disks[target].device->removable) {
113: check_disk_change(inode->i_rdev);
114:
115: /*
116: * If the drive is empty, just let the open fail.
117: */
118: if ( !rscsi_disks[target].ready )
119: return -ENXIO;
120:
121: /*
122: * Similarly, if the device has the write protect tab set,
123: * have the open fail if the user expects to be able to write
124: * to the thing.
125: */
126: if ( (rscsi_disks[target].write_prot) && (filp->f_mode & 2) )
127: return -EROFS;
128: }
129:
130: /*
131: * See if we are requesting a non-existent partition. Do this
132: * after checking for disk change.
133: */
134: if(sd_sizes[MINOR(inode->i_rdev)] == 0)
135: return -ENXIO;
136:
137: if(rscsi_disks[target].device->removable)
138: if(!rscsi_disks[target].device->access_count)
139: sd_ioctl(inode, NULL, SCSI_IOCTL_DOORLOCK, 0);
140:
141: rscsi_disks[target].device->access_count++;
142: if (rscsi_disks[target].device->host->hostt->usage_count)
143: (*rscsi_disks[target].device->host->hostt->usage_count)++;
144: if(sd_template.usage_count) (*sd_template.usage_count)++;
145: return 0;
146: }
147:
148: static void sd_release(struct inode * inode, struct file * file)
149: {
150: int target;
151: fsync_dev(inode->i_rdev);
152:
153: target = DEVICE_NR(inode->i_rdev);
154:
155: rscsi_disks[target].device->access_count--;
156: if (rscsi_disks[target].device->host->hostt->usage_count)
157: (*rscsi_disks[target].device->host->hostt->usage_count)--;
158: if(sd_template.usage_count) (*sd_template.usage_count)--;
159:
160: if(rscsi_disks[target].device->removable) {
161: if(!rscsi_disks[target].device->access_count)
162: sd_ioctl(inode, NULL, SCSI_IOCTL_DOORUNLOCK, 0);
163: }
164: }
165:
166: static void sd_geninit(struct gendisk *);
167:
168: static struct file_operations sd_fops = {
169: NULL, /* lseek - default */
170: block_read, /* read - general block-dev read */
171: block_write, /* write - general block-dev write */
172: NULL, /* readdir - bad */
173: NULL, /* select */
174: sd_ioctl, /* ioctl */
175: NULL, /* mmap */
176: sd_open, /* open code */
177: sd_release, /* release */
178: block_fsync, /* fsync */
179: NULL, /* fasync */
180: check_scsidisk_media_change, /* Disk change */
181: fop_revalidate_scsidisk /* revalidate */
182: };
183:
184: static struct gendisk sd_gendisk = {
185: MAJOR_NR, /* Major number */
186: "sd", /* Major name */
187: 4, /* Bits to shift to get real from partition */
188: 1 << 4, /* Number of partitions per real */
189: 0, /* maximum number of real */
190: sd_geninit, /* init function */
191: NULL, /* hd struct */
192: NULL, /* block sizes */
193: 0, /* number */
194: NULL, /* internal */
195: NULL /* next */
196: };
197:
198: static void sd_geninit (struct gendisk *ignored)
199: {
200: int i;
201:
202: for (i = 0; i < sd_template.dev_max; ++i)
203: if(rscsi_disks[i].device)
204: sd[i << 4].nr_sects = rscsi_disks[i].capacity;
205: #if 0
206: /* No longer needed - we keep track of this as we attach/detach */
207: sd_gendisk.nr_real = sd_template.dev_max;
208: #endif
209: }
210:
211: /*
212: * rw_intr is the interrupt routine for the device driver.
213: * It will be notified on the end of a SCSI read / write, and
214: * will take one of several actions based on success or failure.
215: */
216:
217: static void rw_intr (Scsi_Cmnd *SCpnt)
218: {
219: int result = SCpnt->result;
220: int this_count = SCpnt->bufflen >> 9;
221: int good_sectors = (result == 0 ? this_count : 0);
222: int block_sectors = 1;
223:
224: #ifdef DEBUG
225: printk("sd%c : rw_intr(%d, %d)\n", 'a' + MINOR(SCpnt->request.rq_dev),
226: SCpnt->host->host_no, result);
227: #endif
228:
229: /*
230: Handle MEDIUM ERRORs that indicate partial success. Since this is a
231: relatively rare error condition, no care is taken to avoid unnecessary
232: additional work such as memcpy's that could be avoided.
233: */
234:
235: if (driver_byte(result) != 0 && /* An error occurred */
236: SCpnt->sense_buffer[0] == 0xF0 && /* Sense data is valid */
237: SCpnt->sense_buffer[2] == MEDIUM_ERROR)
238: {
239: long error_sector = (SCpnt->sense_buffer[3] << 24) |
240: (SCpnt->sense_buffer[4] << 16) |
241: (SCpnt->sense_buffer[5] << 8) |
242: SCpnt->sense_buffer[6];
243: int sector_size =
244: rscsi_disks[DEVICE_NR(SCpnt->request.rq_dev)].sector_size;
245: if (SCpnt->request.bh != NULL)
246: block_sectors = SCpnt->request.bh->b_size >> 9;
247: if (sector_size == 1024)
248: {
249: error_sector <<= 1;
250: if (block_sectors < 2) block_sectors = 2;
251: }
252: else if (sector_size == 256)
253: error_sector >>= 1;
254: error_sector -= sd[MINOR(SCpnt->request.rq_dev)].start_sect;
255: error_sector &= ~ (block_sectors - 1);
256: good_sectors = error_sector - SCpnt->request.sector;
257: if (good_sectors < 0 || good_sectors >= this_count)
258: good_sectors = 0;
259: }
260:
261: /*
262: * Handle RECOVERED ERRORs that indicate success after recovery action
263: * by the target device.
264: */
265:
266: if (SCpnt->sense_buffer[0] == 0xF0 && /* Sense data is valid */
267: SCpnt->sense_buffer[2] == RECOVERED_ERROR)
268: {
269: printk("scsidisk recovered I/O error: dev %s, sector %lu, absolute sector %lu\n",
270: kdevname(SCpnt->request.rq_dev), SCpnt->request.sector,
271: SCpnt->request.sector + sd[MINOR(SCpnt->request.rq_dev)].start_sect);
272: good_sectors = this_count;
273: result = 0;
274: }
275:
276: /*
277: * First case : we assume that the command succeeded. One of two things
278: * will happen here. Either we will be finished, or there will be more
279: * sectors that we were unable to read last time.
280: */
281:
282: if (good_sectors > 0) {
283:
284: #ifdef DEBUG
285: printk("sd%c : %d sectors remain.\n", 'a' + MINOR(SCpnt->request.rq_dev),
286: SCpnt->request.nr_sectors);
287: printk("use_sg is %d\n ",SCpnt->use_sg);
288: #endif
289: if (SCpnt->use_sg) {
290: struct scatterlist * sgpnt;
291: int i;
292: sgpnt = (struct scatterlist *) SCpnt->buffer;
293: for(i=0; i<SCpnt->use_sg; i++) {
294: #ifdef DEBUG
295: printk(":%x %x %d\n",sgpnt[i].alt_address, sgpnt[i].address,
296: sgpnt[i].length);
297: #endif
298: if (sgpnt[i].alt_address) {
299: if (SCpnt->request.cmd == READ)
300: memcpy(sgpnt[i].alt_address, sgpnt[i].address,
301: sgpnt[i].length);
302: scsi_free(sgpnt[i].address, sgpnt[i].length);
303: }
304: }
305:
306: /* Free list of scatter-gather pointers */
307: scsi_free(SCpnt->buffer, SCpnt->sglist_len);
308: } else {
309: if (SCpnt->buffer != SCpnt->request.buffer) {
310: #ifdef DEBUG
311: printk("nosg: %x %x %d\n",SCpnt->request.buffer, SCpnt->buffer,
312: SCpnt->bufflen);
313: #endif
314: if (SCpnt->request.cmd == READ)
315: memcpy(SCpnt->request.buffer, SCpnt->buffer,
316: SCpnt->bufflen);
317: scsi_free(SCpnt->buffer, SCpnt->bufflen);
318: }
319: }
320: /*
321: * If multiple sectors are requested in one buffer, then
322: * they will have been finished off by the first command.
323: * If not, then we have a multi-buffer command.
324: */
325: if (SCpnt->request.nr_sectors > this_count)
326: {
327: SCpnt->request.errors = 0;
328:
329: if (!SCpnt->request.bh)
330: {
331: #ifdef DEBUG
332: printk("sd%c : handling page request, no buffer\n",
333: 'a' + MINOR(SCpnt->request.rq_dev));
334: #endif
335: /*
336: * The SCpnt->request.nr_sectors field is always done in
337: * 512 byte sectors, even if this really isn't the case.
338: */
339: panic("sd.c: linked page request (%lx %x)",
340: SCpnt->request.sector, this_count);
341: }
342: }
343: SCpnt = end_scsi_request(SCpnt, 1, good_sectors);
344: if (result == 0)
345: {
346: requeue_sd_request(SCpnt);
347: return;
348: }
349: }
350:
351: if (good_sectors == 0) {
352:
353: /* Free up any indirection buffers we allocated for DMA purposes. */
354: if (SCpnt->use_sg) {
355: struct scatterlist * sgpnt;
356: int i;
357: sgpnt = (struct scatterlist *) SCpnt->buffer;
358: for(i=0; i<SCpnt->use_sg; i++) {
359: #ifdef DEBUG
360: printk("err: %x %x %d\n",SCpnt->request.buffer, SCpnt->buffer,
361: SCpnt->bufflen);
362: #endif
363: if (sgpnt[i].alt_address) {
364: scsi_free(sgpnt[i].address, sgpnt[i].length);
365: }
366: }
367: scsi_free(SCpnt->buffer, SCpnt->sglist_len); /* Free list of scatter-gather pointers */
368: } else {
369: #ifdef DEBUG
370: printk("nosgerr: %x %x %d\n",SCpnt->request.buffer, SCpnt->buffer,
371: SCpnt->bufflen);
372: #endif
373: if (SCpnt->buffer != SCpnt->request.buffer)
374: scsi_free(SCpnt->buffer, SCpnt->bufflen);
375: }
376: }
377:
378: /*
379: * Now, if we were good little boys and girls, Santa left us a request
380: * sense buffer. We can extract information from this, so we
381: * can choose a block to remap, etc.
382: */
383:
384: if (driver_byte(result) != 0) {
385: if (suggestion(result) == SUGGEST_REMAP) {
386: #ifdef REMAP
387: /*
388: * Not yet implemented. A read will fail after being remapped,
389: * a write will call the strategy routine again.
390: */
391: if rscsi_disks[DEVICE_NR(SCpnt->request.rq_dev)].remap
392: {
393: result = 0;
394: }
395: else
396: #endif
397: }
398:
399: if ((SCpnt->sense_buffer[0] & 0x7f) == 0x70) {
400: if ((SCpnt->sense_buffer[2] & 0xf) == UNIT_ATTENTION) {
401: if(rscsi_disks[DEVICE_NR(SCpnt->request.rq_dev)].device->removable) {
402: /* detected disc change. set a bit and quietly refuse
403: * further access.
404: */
405: rscsi_disks[DEVICE_NR(SCpnt->request.rq_dev)].device->changed = 1;
406: SCpnt = end_scsi_request(SCpnt, 0, this_count);
407: requeue_sd_request(SCpnt);
408: return;
409: }
410: else
411: {
412: /*
413: * Must have been a power glitch, or a bus reset.
414: * Could not have been a media change, so we just retry
415: * the request and see what happens.
416: */
417: requeue_sd_request(SCpnt);
418: return;
419: }
420: }
421: }
422:
423:
424: /* If we had an ILLEGAL REQUEST returned, then we may have
425: * performed an unsupported command. The only thing this should be
426: * would be a ten byte read where only a six byte read was supported.
427: * Also, on a system where READ CAPACITY failed, we have read past
428: * the end of the disk.
429: */
430:
431: if (SCpnt->sense_buffer[2] == ILLEGAL_REQUEST) {
432: if (rscsi_disks[DEVICE_NR(SCpnt->request.rq_dev)].ten) {
433: rscsi_disks[DEVICE_NR(SCpnt->request.rq_dev)].ten = 0;
434: requeue_sd_request(SCpnt);
435: result = 0;
436: } else {
437: /* ???? */
438: }
439: }
440:
441: if (SCpnt->sense_buffer[2] == MEDIUM_ERROR) {
442: printk("scsi%d: MEDIUM ERROR on channel %d, id %d, lun %d, CDB: ",
443: SCpnt->host->host_no, (int) SCpnt->channel,
444: (int) SCpnt->target, (int) SCpnt->lun);
445: print_command(SCpnt->cmnd);
446: print_sense("sd", SCpnt);
447: SCpnt = end_scsi_request(SCpnt, 0, block_sectors);
448: requeue_sd_request(SCpnt);
449: return;
450: }
451: } /* driver byte != 0 */
452: if (result) {
453: printk("SCSI disk error : host %d channel %d id %d lun %d return code = %x\n",
454: rscsi_disks[DEVICE_NR(SCpnt->request.rq_dev)].device->host->host_no,
455: rscsi_disks[DEVICE_NR(SCpnt->request.rq_dev)].device->channel,
456: rscsi_disks[DEVICE_NR(SCpnt->request.rq_dev)].device->id,
457: rscsi_disks[DEVICE_NR(SCpnt->request.rq_dev)].device->lun, result);
458:
459: if (driver_byte(result) & DRIVER_SENSE)
460: print_sense("sd", SCpnt);
461: SCpnt = end_scsi_request(SCpnt, 0, SCpnt->request.current_nr_sectors);
462: requeue_sd_request(SCpnt);
463: return;
464: }
465: }
466:
467: /*
468: * requeue_sd_request() is the request handler function for the sd driver.
469: * Its function in life is to take block device requests, and translate
470: * them to SCSI commands.
471: */
472:
473: static void do_sd_request (void)
474: {
475: Scsi_Cmnd * SCpnt = NULL;
476: Scsi_Device * SDev;
477: struct request * req = NULL;
478: unsigned long flags;
479: int flag = 0;
480:
481: save_flags(flags);
482: while (1==1){
483: cli();
484: if (CURRENT != NULL && CURRENT->rq_status == RQ_INACTIVE) {
485: restore_flags(flags);
486: return;
487: }
488:
489: INIT_SCSI_REQUEST;
490: SDev = rscsi_disks[DEVICE_NR(CURRENT->rq_dev)].device;
491:
492: /*
493: * I am not sure where the best place to do this is. We need
494: * to hook in a place where we are likely to come if in user
495: * space.
496: */
497: if( SDev->was_reset )
498: {
499: /*
500: * We need to relock the door, but we might
501: * be in an interrupt handler. Only do this
502: * from user space, since we do not want to
503: * sleep from an interrupt.
504: */
505: if( SDev->removable && !intr_count )
506: {
507: scsi_ioctl(SDev, SCSI_IOCTL_DOORLOCK, 0);
508: /* scsi_ioctl may allow CURRENT to change, so start over. */
509: SDev->was_reset = 0;
510: continue;
511: }
512: SDev->was_reset = 0;
513: }
514:
515: /* We have to be careful here. allocate_device will get a free pointer,
516: * but there is no guarantee that it is queueable. In normal usage,
517: * we want to call this, because other types of devices may have the
518: * host all tied up, and we want to make sure that we have at least
519: * one request pending for this type of device. We can also come
520: * through here while servicing an interrupt, because of the need to
521: * start another command. If we call allocate_device more than once,
522: * then the system can wedge if the command is not queueable. The
523: * request_queueable function is safe because it checks to make sure
524: * that the host is able to take another command before it returns
525: * a pointer.
526: */
527:
528: if (flag++ == 0)
529: SCpnt = allocate_device(&CURRENT,
530: rscsi_disks[DEVICE_NR(CURRENT->rq_dev)].device, 0);
531: else SCpnt = NULL;
532:
533: /*
534: * The following restore_flags leads to latency problems. FIXME.
535: * Using a "sti()" gets rid of the latency problems but causes
536: * race conditions and crashes.
537: */
538: restore_flags(flags);
539:
540: /* This is a performance enhancement. We dig down into the request
541: * list and try to find a queueable request (i.e. device not busy,
542: * and host able to accept another command. If we find one, then we
543: * queue it. This can make a big difference on systems with more than
544: * one disk drive. We want to have the interrupts off when monkeying
545: * with the request list, because otherwise the kernel might try to
546: * slip in a request in between somewhere.
547: */
548:
549: if (!SCpnt && sd_template.nr_dev > 1){
550: struct request *req1;
551: req1 = NULL;
552: cli();
553: req = CURRENT;
554: while(req){
555: SCpnt = request_queueable(req,
556: rscsi_disks[DEVICE_NR(req->rq_dev)].device);
557: if(SCpnt) break;
558: req1 = req;
559: req = req->next;
560: }
561: if (SCpnt && req->rq_status == RQ_INACTIVE) {
562: if (req == CURRENT)
563: CURRENT = CURRENT->next;
564: else
565: req1->next = req->next;
566: }
567: restore_flags(flags);
568: }
569:
570: if (!SCpnt) return; /* Could not find anything to do */
571:
572: /* Queue command */
573: requeue_sd_request(SCpnt);
574: } /* While */
575: }
576:
577: static void requeue_sd_request (Scsi_Cmnd * SCpnt)
578: {
579: int dev, devm, block, this_count;
580: unsigned char cmd[10];
581: int bounce_size, contiguous;
582: int max_sg;
583: struct buffer_head * bh, *bhp;
584: char * buff, *bounce_buffer;
585:
586: repeat:
587:
588: if(!SCpnt || SCpnt->request.rq_status == RQ_INACTIVE) {
589: do_sd_request();
590: return;
591: }
592:
593: devm = MINOR(SCpnt->request.rq_dev);
594: dev = DEVICE_NR(SCpnt->request.rq_dev);
595:
596: block = SCpnt->request.sector;
597: this_count = 0;
598:
599: #ifdef DEBUG
600: printk("Doing sd request, dev = %d, block = %d\n", devm, block);
601: #endif
602:
603: if (devm >= (sd_template.dev_max << 4) ||
604: !rscsi_disks[dev].device ||
605: block + SCpnt->request.nr_sectors > sd[devm].nr_sects)
606: {
607: SCpnt = end_scsi_request(SCpnt, 0, SCpnt->request.nr_sectors);
608: goto repeat;
609: }
610:
611: block += sd[devm].start_sect;
612:
613: if (rscsi_disks[dev].device->changed)
614: {
615: /*
616: * quietly refuse to do anything to a changed disc until the changed
617: * bit has been reset
618: */
619: /* printk("SCSI disk has been changed. Prohibiting further I/O.\n"); */
620: SCpnt = end_scsi_request(SCpnt, 0, SCpnt->request.nr_sectors);
621: goto repeat;
622: }
623:
624: #ifdef DEBUG
625: printk("sd%c : real dev = /dev/sd%c, block = %d\n",
626: 'a' + devm, dev, block);
627: #endif
628:
629: /*
630: * If we have a 1K hardware sectorsize, prevent access to single
631: * 512 byte sectors. In theory we could handle this - in fact
632: * the scsi cdrom driver must be able to handle this because
633: * we typically use 1K blocksizes, and cdroms typically have
634: * 2K hardware sectorsizes. Of course, things are simpler
635: * with the cdrom, since it is read-only. For performance
636: * reasons, the filesystems should be able to handle this
637: * and not force the scsi disk driver to use bounce buffers
638: * for this.
639: */
640: if (rscsi_disks[dev].sector_size == 1024)
641: if((block & 1) || (SCpnt->request.nr_sectors & 1)) {
642: printk("sd.c:Bad block number requested");
643: SCpnt = end_scsi_request(SCpnt, 0, SCpnt->request.nr_sectors);
644: goto repeat;
645: }
646:
647: switch (SCpnt->request.cmd)
648: {
649: case WRITE :
650: if (!rscsi_disks[dev].device->writeable)
651: {
652: SCpnt = end_scsi_request(SCpnt, 0, SCpnt->request.nr_sectors);
653: goto repeat;
654: }
655: cmd[0] = WRITE_6;
656: break;
657: case READ :
658: cmd[0] = READ_6;
659: break;
660: default :
661: panic ("Unknown sd command %d\n", SCpnt->request.cmd);
662: }
663:
664: SCpnt->this_count = 0;
665:
666: /* If the host adapter can deal with very large scatter-gather
667: * requests, it is a waste of time to cluster
668: */
669: contiguous = (!CLUSTERABLE_DEVICE(SCpnt) ? 0 :1);
670: bounce_buffer = NULL;
671: bounce_size = (SCpnt->request.nr_sectors << 9);
672:
673: /* First see if we need a bounce buffer for this request. If we do, make
674: * sure that we can allocate a buffer. Do not waste space by allocating
675: * a bounce buffer if we are straddling the 16Mb line
676: */
677: if (contiguous && SCpnt->request.bh &&
678: ((long) SCpnt->request.bh->b_data)
679: + (SCpnt->request.nr_sectors << 9) - 1 > ISA_DMA_THRESHOLD
680: && SCpnt->host->unchecked_isa_dma) {
681: if(((long) SCpnt->request.bh->b_data) > ISA_DMA_THRESHOLD)
682: bounce_buffer = (char *) scsi_malloc(bounce_size);
683: if(!bounce_buffer) contiguous = 0;
684: }
685:
686: if(contiguous && SCpnt->request.bh && SCpnt->request.bh->b_reqnext)
687: for(bh = SCpnt->request.bh, bhp = bh->b_reqnext; bhp; bh = bhp,
688: bhp = bhp->b_reqnext) {
689: if(!CONTIGUOUS_BUFFERS(bh,bhp)) {
690: if(bounce_buffer) scsi_free(bounce_buffer, bounce_size);
691: contiguous = 0;
692: break;
693: }
694: }
695: if (!SCpnt->request.bh || contiguous) {
696:
697: /* case of page request (i.e. raw device), or unlinked buffer */
698: this_count = SCpnt->request.nr_sectors;
699: buff = SCpnt->request.buffer;
700: SCpnt->use_sg = 0;
701:
702: } else if (SCpnt->host->sg_tablesize == 0 ||
703: (need_isa_buffer && dma_free_sectors <= 10)) {
704:
705: /* Case of host adapter that cannot scatter-gather. We also
706: * come here if we are running low on DMA buffer memory. We set
707: * a threshold higher than that we would need for this request so
708: * we leave room for other requests. Even though we would not need
709: * it all, we need to be conservative, because if we run low enough
710: * we have no choice but to panic.
711: */
712: if (SCpnt->host->sg_tablesize != 0 &&
713: need_isa_buffer &&
714: dma_free_sectors <= 10)
715: printk("Warning: SCSI DMA buffer space running low. Using non scatter-gather I/O.\n");
716:
717: this_count = SCpnt->request.current_nr_sectors;
718: buff = SCpnt->request.buffer;
719: SCpnt->use_sg = 0;
720:
721: } else {
722:
723: /* Scatter-gather capable host adapter */
724: struct scatterlist * sgpnt;
725: int count, this_count_max;
726: int counted;
727:
728: bh = SCpnt->request.bh;
729: this_count = 0;
730: this_count_max = (rscsi_disks[dev].ten ? 0xffff : 0xff);
731: count = 0;
732: bhp = NULL;
733: while(bh) {
734: if ((this_count + (bh->b_size >> 9)) > this_count_max) break;
735: if(!bhp || !CONTIGUOUS_BUFFERS(bhp,bh) ||
736: !CLUSTERABLE_DEVICE(SCpnt) ||
737: (SCpnt->host->unchecked_isa_dma &&
738: ((unsigned long) bh->b_data-1) == ISA_DMA_THRESHOLD)) {
739: if (count < SCpnt->host->sg_tablesize) count++;
740: else break;
741: }
742: this_count += (bh->b_size >> 9);
743: bhp = bh;
744: bh = bh->b_reqnext;
745: }
746: #if 0
747: if(SCpnt->host->unchecked_isa_dma &&
748: ((unsigned int) SCpnt->request.bh->b_data-1) == ISA_DMA_THRESHOLD) count--;
749: #endif
750: SCpnt->use_sg = count; /* Number of chains */
751: /* scsi_malloc can only allocate in chunks of 512 bytes */
752: count = (SCpnt->use_sg * sizeof(struct scatterlist) + 511) & ~511;
753:
754: SCpnt->sglist_len = count;
755: max_sg = count / sizeof(struct scatterlist);
756: if(SCpnt->host->sg_tablesize < max_sg)
757: max_sg = SCpnt->host->sg_tablesize;
758: sgpnt = (struct scatterlist * ) scsi_malloc(count);
759: if (!sgpnt) {
760: printk("Warning - running *really* short on DMA buffers\n");
761: SCpnt->use_sg = 0; /* No memory left - bail out */
762: this_count = SCpnt->request.current_nr_sectors;
763: buff = SCpnt->request.buffer;
764: } else {
765: memset(sgpnt, 0, count); /* Zero so it is easy to fill, but only
766: * if memory is available
767: */
768: buff = (char *) sgpnt;
769: counted = 0;
770: for(count = 0, bh = SCpnt->request.bh, bhp = bh->b_reqnext;
771: count < SCpnt->use_sg && bh;
772: count++, bh = bhp) {
773:
774: bhp = bh->b_reqnext;
775:
776: if(!sgpnt[count].address) sgpnt[count].address = bh->b_data;
777: sgpnt[count].length += bh->b_size;
778: counted += bh->b_size >> 9;
779:
780: if (((long) sgpnt[count].address) + sgpnt[count].length - 1 >
781: ISA_DMA_THRESHOLD && (SCpnt->host->unchecked_isa_dma) &&
782: !sgpnt[count].alt_address) {
783: sgpnt[count].alt_address = sgpnt[count].address;
784: /* We try to avoid exhausting the DMA pool, since it is
785: * easier to control usage here. In other places we might
786: * have a more pressing need, and we would be screwed if
787: * we ran out */
788: if(dma_free_sectors < (sgpnt[count].length >> 9) + 10) {
789: sgpnt[count].address = NULL;
790: } else {
791: sgpnt[count].address =
792: (char *) scsi_malloc(sgpnt[count].length);
793: }
794: /* If we start running low on DMA buffers, we abort the
795: * scatter-gather operation, and free all of the memory
796: * we have allocated. We want to ensure that all scsi
797: * operations are able to do at least a non-scatter/gather
798: * operation */
799: if(sgpnt[count].address == NULL){ /* Out of dma memory */
800: #if 0
801: printk("Warning: Running low on SCSI DMA buffers");
802: /* Try switching back to a non s-g operation. */
803: while(--count >= 0){
804: if(sgpnt[count].alt_address)
805: scsi_free(sgpnt[count].address,
806: sgpnt[count].length);
807: }
808: this_count = SCpnt->request.current_nr_sectors;
809: buff = SCpnt->request.buffer;
810: SCpnt->use_sg = 0;
811: scsi_free(sgpnt, SCpnt->sglist_len);
812: #endif
813: SCpnt->use_sg = count;
814: this_count = counted -= bh->b_size >> 9;
815: break;
816: }
817: }
818:
819: /* Only cluster buffers if we know that we can supply DMA
820: * buffers large enough to satisfy the request. Do not cluster
821: * a new request if this would mean that we suddenly need to
822: * start using DMA bounce buffers */
823: if(bhp && CONTIGUOUS_BUFFERS(bh,bhp)
824: && CLUSTERABLE_DEVICE(SCpnt)) {
825: char * tmp;
826:
827: if (((long) sgpnt[count].address) + sgpnt[count].length +
828: bhp->b_size - 1 > ISA_DMA_THRESHOLD &&
829: (SCpnt->host->unchecked_isa_dma) &&
830: !sgpnt[count].alt_address) continue;
831:
832: if(!sgpnt[count].alt_address) {count--; continue; }
833: if(dma_free_sectors > 10)
834: tmp = (char *) scsi_malloc(sgpnt[count].length
835: + bhp->b_size);
836: else {
837: tmp = NULL;
838: max_sg = SCpnt->use_sg;
839: }
840: if(tmp){
841: scsi_free(sgpnt[count].address, sgpnt[count].length);
842: sgpnt[count].address = tmp;
843: count--;
844: continue;
845: }
846:
847: /* If we are allowed another sg chain, then increment
848: * counter so we can insert it. Otherwise we will end
849: up truncating */
850:
851: if (SCpnt->use_sg < max_sg) SCpnt->use_sg++;
852: } /* contiguous buffers */
853: } /* for loop */
854:
855: /* This is actually how many we are going to transfer */
856: this_count = counted;
857:
858: if(count < SCpnt->use_sg || SCpnt->use_sg
859: > SCpnt->host->sg_tablesize){
860: bh = SCpnt->request.bh;
861: printk("Use sg, count %d %x %d\n",
862: SCpnt->use_sg, count, dma_free_sectors);
863: printk("maxsg = %x, counted = %d this_count = %d\n",
864: max_sg, counted, this_count);
865: while(bh){
866: printk("[%p %lx] ", bh->b_data, bh->b_size);
867: bh = bh->b_reqnext;
868: }
869: if(SCpnt->use_sg < 16)
870: for(count=0; count<SCpnt->use_sg; count++)
871: printk("{%d:%p %p %d} ", count,
872: sgpnt[count].address,
873: sgpnt[count].alt_address,
874: sgpnt[count].length);
875: panic("Ooops");
876: }
877:
878: if (SCpnt->request.cmd == WRITE)
879: for(count=0; count<SCpnt->use_sg; count++)
880: if(sgpnt[count].alt_address)
881: memcpy(sgpnt[count].address, sgpnt[count].alt_address,
882: sgpnt[count].length);
883: } /* Able to malloc sgpnt */
884: } /* Host adapter capable of scatter-gather */
885:
886: /* Now handle the possibility of DMA to addresses > 16Mb */
887:
888: if(SCpnt->use_sg == 0){
889: if (((long) buff) + (this_count << 9) - 1 > ISA_DMA_THRESHOLD &&
890: (SCpnt->host->unchecked_isa_dma)) {
891: if(bounce_buffer)
892: buff = bounce_buffer;
893: else
894: buff = (char *) scsi_malloc(this_count << 9);
895: if(buff == NULL) { /* Try backing off a bit if we are low on mem*/
896: this_count = SCpnt->request.current_nr_sectors;
897: buff = (char *) scsi_malloc(this_count << 9);
898: if(!buff) panic("Ran out of DMA buffers.");
899: }
900: if (SCpnt->request.cmd == WRITE)
901: memcpy(buff, (char *)SCpnt->request.buffer, this_count << 9);
902: }
903: }
904: #ifdef DEBUG
905: printk("sd%c : %s %d/%d 512 byte blocks.\n",
906: 'a' + devm,
907: (SCpnt->request.cmd == WRITE) ? "writing" : "reading",
908: this_count, SCpnt->request.nr_sectors);
909: #endif
910:
911: cmd[1] = (SCpnt->lun << 5) & 0xe0;
912:
913: if (rscsi_disks[dev].sector_size == 1024){
914: if(block & 1) panic("sd.c:Bad block number requested");
915: if(this_count & 1) panic("sd.c:Bad block number requested");
916: block = block >> 1;
917: this_count = this_count >> 1;
918: }
919:
920: if (rscsi_disks[dev].sector_size == 256){
921: block = block << 1;
922: this_count = this_count << 1;
923: }
924:
925: if (((this_count > 0xff) || (block > 0x1fffff)) && rscsi_disks[dev].ten)
926: {
927: if (this_count > 0xffff)
928: this_count = 0xffff;
929:
930: cmd[0] += READ_10 - READ_6 ;
931: cmd[2] = (unsigned char) (block >> 24) & 0xff;
932: cmd[3] = (unsigned char) (block >> 16) & 0xff;
933: cmd[4] = (unsigned char) (block >> 8) & 0xff;
934: cmd[5] = (unsigned char) block & 0xff;
935: cmd[6] = cmd[9] = 0;
936: cmd[7] = (unsigned char) (this_count >> 8) & 0xff;
937: cmd[8] = (unsigned char) this_count & 0xff;
938: }
939: else
940: {
941: if (this_count > 0xff)
942: this_count = 0xff;
943:
944: cmd[1] |= (unsigned char) ((block >> 16) & 0x1f);
945: cmd[2] = (unsigned char) ((block >> 8) & 0xff);
946: cmd[3] = (unsigned char) block & 0xff;
947: cmd[4] = (unsigned char) this_count;
948: cmd[5] = 0;
949: }
950:
951: /*
952: * We shouldn't disconnect in the middle of a sector, so with a dumb
953: * host adapter, it's safe to assume that we can at least transfer
954: * this many bytes between each connect / disconnect.
955: */
956:
957: SCpnt->transfersize = rscsi_disks[dev].sector_size;
958: SCpnt->underflow = this_count << 9;
959: scsi_do_cmd (SCpnt, (void *) cmd, buff,
960: this_count * rscsi_disks[dev].sector_size,
961: rw_intr,
962: (SCpnt->device->type == TYPE_DISK ?
963: SD_TIMEOUT : SD_MOD_TIMEOUT),
964: MAX_RETRIES);
965: }
966:
967: static int check_scsidisk_media_change(kdev_t full_dev){
968: int retval;
969: int target;
970: struct inode inode;
971: int flag = 0;
972:
973: target = DEVICE_NR(full_dev);
974:
975: if (target >= sd_template.dev_max ||
976: !rscsi_disks[target].device) {
977: printk("SCSI disk request error: invalid device.\n");
978: return 0;
979: }
980:
981: if(!rscsi_disks[target].device->removable) return 0;
982:
983: inode.i_rdev = full_dev; /* This is all we really need here */
984:
985: /* Using Start/Stop enables differentiation between drive with
986: * no cartridge loaded - NOT READY, drive with changed cartridge -
987: * UNIT ATTENTION, or with same cartridge - GOOD STATUS.
988: * This also handles drives that auto spin down. eg iomega jaz 1GB
989: * as this will spin up the drive.
990: */
991: retval = sd_ioctl(&inode, NULL, SCSI_IOCTL_START_UNIT, 0);
992:
993: if(retval){ /* Unable to test, unit probably not ready. This usually
994: * means there is no disc in the drive. Mark as changed,
995: * and we will figure it out later once the drive is
996: * available again. */
997:
998: rscsi_disks[target].ready = 0;
999: rscsi_disks[target].device->changed = 1;
1000: return 1; /* This will force a flush, if called from
1001: * check_disk_change */
1002: }
1003:
1004: /*
1005: * for removable scsi disk ( FLOPTICAL ) we have to recognise the
1006: * presence of disk in the drive. This is kept in the Scsi_Disk
1007: * struct and tested at open ! Daniel Roche ( [email protected] )
1008: */
1009:
1010: rscsi_disks[target].ready = 1; /* FLOPTICAL */
1011:
1012: retval = rscsi_disks[target].device->changed;
1013: if(!flag) rscsi_disks[target].device->changed = 0;
1014: return retval;
1015: }
1016:
1017: static void sd_init_done (Scsi_Cmnd * SCpnt)
1018: {
1019: struct request * req;
1020:
1021: req = &SCpnt->request;
1022: req->rq_status = RQ_SCSI_DONE; /* Busy, but indicate request done */
1023:
1024: if (req->sem != NULL) {
1025: up(req->sem);
1026: }
1027: }
1028:
1029: static int sd_init_onedisk(int i)
1030: {
1031: unsigned char cmd[10];
1032: unsigned char *buffer;
1033: unsigned long spintime;
1034: int the_result, retries;
1035: Scsi_Cmnd * SCpnt;
1036:
1037: /* We need to retry the READ_CAPACITY because a UNIT_ATTENTION is
1038: * considered a fatal error, and many devices report such an error
1039: * just after a scsi bus reset.
1040: */
1041:
1042: SCpnt = allocate_device(NULL, rscsi_disks[i].device, 1);
1043: buffer = (unsigned char *) scsi_malloc(512);
1044:
1045: spintime = 0;
1046:
1047: /* Spin up drives, as required. Only do this at boot time */
1048: /* Spinup needs to be done for module loads too. */
1049: do{
1050: retries = 0;
1051: while(retries < 3)
1052: {
1053: cmd[0] = TEST_UNIT_READY;
1054: cmd[1] = (rscsi_disks[i].device->lun << 5) & 0xe0;
1055: memset ((void *) &cmd[2], 0, 8);
1056: SCpnt->cmd_len = 0;
1057: SCpnt->sense_buffer[0] = 0;
1058: SCpnt->sense_buffer[2] = 0;
1059:
1060: {
1061: struct semaphore sem = MUTEX_LOCKED;
1062: /* Mark as really busy again */
1063: SCpnt->request.rq_status = RQ_SCSI_BUSY;
1064: SCpnt->request.sem = &sem;
1065: scsi_do_cmd (SCpnt,
1066: (void *) cmd, (void *) buffer,
1067: 512, sd_init_done, SD_TIMEOUT,
1068: MAX_RETRIES);
1069: down(&sem);
1070: }
1071:
1072: the_result = SCpnt->result;
1073: retries++;
1074: if( the_result == 0
1075: || SCpnt->sense_buffer[2] != UNIT_ATTENTION)
1076: break;
1077: }
1078:
1079: /* Look for non-removable devices that return NOT_READY.
1080: * Issue command to spin up drive for these cases. */
1081: if(the_result && !rscsi_disks[i].device->removable &&
1082: SCpnt->sense_buffer[2] == NOT_READY) {
1083: unsigned long time1;
1084: if(!spintime){
1085: #ifdef MACH
1086: printk( "sd%d: Spinning up disk...", i);
1087: #else
1088: printk( "sd%c: Spinning up disk...", 'a' + i );
1089: #endif
1090: cmd[0] = START_STOP;
1091: cmd[1] = (rscsi_disks[i].device->lun << 5) & 0xe0;
1092: cmd[1] |= 1; /* Return immediately */
1093: memset ((void *) &cmd[2], 0, 8);
1094: cmd[4] = 1; /* Start spin cycle */
1095: SCpnt->cmd_len = 0;
1096: SCpnt->sense_buffer[0] = 0;
1097: SCpnt->sense_buffer[2] = 0;
1098:
1099: {
1100: struct semaphore sem = MUTEX_LOCKED;
1101: /* Mark as really busy again */
1102: SCpnt->request.rq_status = RQ_SCSI_BUSY;
1103: SCpnt->request.sem = &sem;
1104: scsi_do_cmd (SCpnt,
1105: (void *) cmd, (void *) buffer,
1106: 512, sd_init_done, SD_TIMEOUT,
1107: MAX_RETRIES);
1108: down(&sem);
1109: }
1110:
1111: spintime = jiffies;
1112: }
1113:
1114: time1 = jiffies + HZ;
1115: while(jiffies < time1); /* Wait 1 second for next try */
1116: printk( "." );
1117: }
1118: } while(the_result && spintime && spintime+100*HZ > jiffies);
1119: if (spintime) {
1120: if (the_result)
1121: printk( "not responding...\n" );
1122: else
1123: printk( "ready\n" );
1124: }
1125:
1126: retries = 3;
1127: do {
1128: cmd[0] = READ_CAPACITY;
1129: cmd[1] = (rscsi_disks[i].device->lun << 5) & 0xe0;
1130: memset ((void *) &cmd[2], 0, 8);
1131: memset ((void *) buffer, 0, 8);
1132: SCpnt->cmd_len = 0;
1133: SCpnt->sense_buffer[0] = 0;
1134: SCpnt->sense_buffer[2] = 0;
1135:
1136: {
1137: struct semaphore sem = MUTEX_LOCKED;
1138: /* Mark as really busy again */
1139: SCpnt->request.rq_status = RQ_SCSI_BUSY;
1140: SCpnt->request.sem = &sem;
1141: scsi_do_cmd (SCpnt,
1142: (void *) cmd, (void *) buffer,
1143: 8, sd_init_done, SD_TIMEOUT,
1144: MAX_RETRIES);
1145: down(&sem); /* sleep until it is ready */
1146: }
1147:
1148: the_result = SCpnt->result;
1149: retries--;
1150:
1151: } while(the_result && retries);
1152:
1153: SCpnt->request.rq_status = RQ_INACTIVE; /* Mark as not busy */
1154:
1155: wake_up(&SCpnt->device->device_wait);
1156:
1157: /* Wake up a process waiting for device */
1158:
1159: /*
1160: * The SCSI standard says:
1161: * "READ CAPACITY is necessary for self configuring software"
1162: * While not mandatory, support of READ CAPACITY is strongly encouraged.
1163: * We used to die if we couldn't successfully do a READ CAPACITY.
1164: * But, now we go on about our way. The side effects of this are
1165: *
1166: * 1. We can't know block size with certainty. I have said "512 bytes
1167: * is it" as this is most common.
1168: *
1169: * 2. Recovery from when some one attempts to read past the end of the
1170: * raw device will be slower.
1171: */
1172:
1173: if (the_result)
1174: {
1175: #ifdef MACH
1176: printk ("sd%d : READ CAPACITY failed.\n"
1177: "sd%d : status = %x, message = %02x, host = %d, driver = %02x \n",
1178: i, i,
1179: #else
1180: printk ("sd%c : READ CAPACITY failed.\n"
1181: "sd%c : status = %x, message = %02x, host = %d, driver = %02x \n",
1182: 'a' + i, 'a' + i,
1183: #endif
1184: status_byte(the_result),
1185: msg_byte(the_result),
1186: host_byte(the_result),
1187: driver_byte(the_result)
1188: );
1189: if (driver_byte(the_result) & DRIVER_SENSE)
1190: #ifdef MACH
1191: printk("sd%d : extended sense code = %1x \n",
1192: i, SCpnt->sense_buffer[2] & 0xf);
1193: #else
1194: printk("sd%c : extended sense code = %1x \n",
1195: 'a' + i, SCpnt->sense_buffer[2] & 0xf);
1196: #endif
1197: else
1198: #ifdef MACH
1199: printk("sd%d : sense not available. \n", i);
1200: #else
1201: printk("sd%c : sense not available. \n", 'a' + i);
1202: #endif
1203:
1204: #ifdef MACH
1205: printk("sd%d : block size assumed to be 512 bytes, disk size 1GB. \n",
1206: i);
1207: #else
1208: printk("sd%c : block size assumed to be 512 bytes, disk size 1GB. \n",
1209: 'a' + i);
1210: #endif
1211: rscsi_disks[i].capacity = 0x1fffff;
1212: rscsi_disks[i].sector_size = 512;
1213:
1214: /* Set dirty bit for removable devices if not ready - sometimes drives
1215: * will not report this properly. */
1216: if(rscsi_disks[i].device->removable &&
1217: SCpnt->sense_buffer[2] == NOT_READY)
1218: rscsi_disks[i].device->changed = 1;
1219:
1220: }
1221: else
1222: {
1223: /*
1224: * FLOPTICAL , if read_capa is ok , drive is assumed to be ready
1225: */
1226: rscsi_disks[i].ready = 1;
1227:
1228: rscsi_disks[i].capacity = 1 + ((buffer[0] << 24) |
1229: (buffer[1] << 16) |
1230: (buffer[2] << 8) |
1231: buffer[3]);
1232:
1233: rscsi_disks[i].sector_size = (buffer[4] << 24) |
1234: (buffer[5] << 16) | (buffer[6] << 8) | buffer[7];
1235:
1236: if (rscsi_disks[i].sector_size == 0) {
1237: rscsi_disks[i].sector_size = 512;
1238: #ifdef MACH
1239: printk("sd%d : sector size 0 reported, assuming 512.\n", i);
1240: #else
1241: printk("sd%c : sector size 0 reported, assuming 512.\n", 'a' + i);
1242: #endif
1243: }
1244:
1245:
1246: if (rscsi_disks[i].sector_size != 512 &&
1247: rscsi_disks[i].sector_size != 1024 &&
1248: rscsi_disks[i].sector_size != 256)
1249: {
1250: #ifdef MACH
1251: printk ("sd%d : unsupported sector size %d.\n",
1252: i, rscsi_disks[i].sector_size);
1253: #else
1254: printk ("sd%c : unsupported sector size %d.\n",
1255: 'a' + i, rscsi_disks[i].sector_size);
1256: #endif
1257: if(rscsi_disks[i].device->removable){
1258: rscsi_disks[i].capacity = 0;
1259: } else {
1260: printk ("scsi : deleting disk entry.\n");
1261: rscsi_disks[i].device = NULL;
1262: sd_template.nr_dev--;
1263: sd_gendisk.nr_real--;
1264: return i;
1265: }
1266: }
1267: {
1268: /*
1269: * The msdos fs needs to know the hardware sector size
1270: * So I have created this table. See ll_rw_blk.c
1271: * Jacques Gelinas ([email protected])
1272: */
1273: int m, mb;
1274: int sz_quot, sz_rem;
1275: int hard_sector = rscsi_disks[i].sector_size;
1276: /* There are 16 minors allocated for each major device */
1277: for (m=i<<4; m<((i+1)<<4); m++){
1278: sd_hardsizes[m] = hard_sector;
1279: }
1280: mb = rscsi_disks[i].capacity / 1024 * hard_sector / 1024;
1281: /* sz = div(m/100, 10); this seems to not be in the libr */
1282: m = (mb + 50) / 100;
1283: sz_quot = m / 10;
1284: sz_rem = m - (10 * sz_quot);
1285: #ifdef MACH
1286: printk ("SCSI device sd%d: hdwr sector= %d bytes."
1287: " Sectors= %d [%d MB] [%d.%1d GB]\n",
1288: i, hard_sector, rscsi_disks[i].capacity,
1289: mb, sz_quot, sz_rem);
1290: #else
1291: printk ("SCSI device sd%c: hdwr sector= %d bytes."
1292: " Sectors= %d [%d MB] [%d.%1d GB]\n",
1293: i+'a', hard_sector, rscsi_disks[i].capacity,
1294: mb, sz_quot, sz_rem);
1295: #endif
1296: }
1297: if(rscsi_disks[i].sector_size == 1024)
1298: rscsi_disks[i].capacity <<= 1; /* Change into 512 byte sectors */
1299: if(rscsi_disks[i].sector_size == 256)
1300: rscsi_disks[i].capacity >>= 1; /* Change into 512 byte sectors */
1301: }
1302:
1303:
1304: /*
1305: * Unless otherwise specified, this is not write protected.
1306: */
1307: rscsi_disks[i].write_prot = 0;
1308: if ( rscsi_disks[i].device->removable && rscsi_disks[i].ready ) {
1309: /* FLOPTICAL */
1310:
1311: /*
1312: * for removable scsi disk ( FLOPTICAL ) we have to recognise
1313: * the Write Protect Flag. This flag is kept in the Scsi_Disk struct
1314: * and tested at open !
1315: * Daniel Roche ( [email protected] )
1316: */
1317:
1318: memset ((void *) &cmd[0], 0, 8);
1319: cmd[0] = MODE_SENSE;
1320: cmd[1] = (rscsi_disks[i].device->lun << 5) & 0xe0;
1321: cmd[2] = 1; /* page code 1 ?? */
1322: cmd[4] = 12;
1323: SCpnt->cmd_len = 0;
1324: SCpnt->sense_buffer[0] = 0;
1325: SCpnt->sense_buffer[2] = 0;
1326:
1327: /* same code as READCAPA !! */
1328: {
1329: struct semaphore sem = MUTEX_LOCKED;
1330: SCpnt->request.rq_status = RQ_SCSI_BUSY; /* Mark as really busy again */
1331: SCpnt->request.sem = &sem;
1332: scsi_do_cmd (SCpnt,
1333: (void *) cmd, (void *) buffer,
1334: 512, sd_init_done, SD_TIMEOUT,
1335: MAX_RETRIES);
1336: down(&sem);
1337: }
1338:
1339: the_result = SCpnt->result;
1340: SCpnt->request.rq_status = RQ_INACTIVE; /* Mark as not busy */
1341: wake_up(&SCpnt->device->device_wait);
1342:
1343: if ( the_result ) {
1344: #ifdef MACH
1345: printk ("sd%d: test WP failed, assume Write Protected\n",i);
1346: #else
1347: printk ("sd%c: test WP failed, assume Write Protected\n",i+'a');
1348: #endif
1349: rscsi_disks[i].write_prot = 1;
1350: } else {
1351: rscsi_disks[i].write_prot = ((buffer[2] & 0x80) != 0);
1352: #ifdef MACH
1353: printk ("sd%d: Write Protect is %s\n",i,
1354: rscsi_disks[i].write_prot ? "on" : "off");
1355: #else
1356: printk ("sd%c: Write Protect is %s\n",i+'a',
1357: rscsi_disks[i].write_prot ? "on" : "off");
1358: #endif
1359: }
1360:
1361: } /* check for write protect */
1362:
1363: rscsi_disks[i].ten = 1;
1364: rscsi_disks[i].remap = 1;
1365: scsi_free(buffer, 512);
1366: return i;
1367: }
1368:
1369: /*
1370: * The sd_init() function looks at all SCSI drives present, determines
1371: * their size, and reads partition table entries for them.
1372: */
1373:
1374: static int sd_registered = 0;
1375:
1376: static int sd_init()
1377: {
1378: int i;
1379:
1380: if (sd_template.dev_noticed == 0) return 0;
1381:
1382: if(!sd_registered) {
1383: if (register_blkdev(MAJOR_NR,"sd",&sd_fops)) {
1384: printk("Unable to get major %d for SCSI disk\n",MAJOR_NR);
1385: return 1;
1386: }
1387: sd_registered++;
1388: }
1389:
1390: /* We do not support attaching loadable devices yet. */
1391: if(rscsi_disks) return 0;
1392:
1393: sd_template.dev_max = sd_template.dev_noticed + SD_EXTRA_DEVS;
1394:
1395: rscsi_disks = (Scsi_Disk *)
1396: scsi_init_malloc(sd_template.dev_max * sizeof(Scsi_Disk), GFP_ATOMIC);
1397: memset(rscsi_disks, 0, sd_template.dev_max * sizeof(Scsi_Disk));
1398:
1399: sd_sizes = (int *) scsi_init_malloc((sd_template.dev_max << 4) *
1400: sizeof(int), GFP_ATOMIC);
1401: memset(sd_sizes, 0, (sd_template.dev_max << 4) * sizeof(int));
1402:
1403: sd_blocksizes = (int *) scsi_init_malloc((sd_template.dev_max << 4) *
1404: sizeof(int), GFP_ATOMIC);
1405:
1406: sd_hardsizes = (int *) scsi_init_malloc((sd_template.dev_max << 4) *
1407: sizeof(int), GFP_ATOMIC);
1408:
1409: for(i=0;i<(sd_template.dev_max << 4);i++){
1410: sd_blocksizes[i] = 1024;
1411: sd_hardsizes[i] = 512;
1412: }
1413: blksize_size[MAJOR_NR] = sd_blocksizes;
1414: hardsect_size[MAJOR_NR] = sd_hardsizes;
1415: sd = (struct hd_struct *) scsi_init_malloc((sd_template.dev_max << 4) *
1416: sizeof(struct hd_struct),
1417: GFP_ATOMIC);
1418:
1419:
1420: sd_gendisk.max_nr = sd_template.dev_max;
1421: sd_gendisk.part = sd;
1422: sd_gendisk.sizes = sd_sizes;
1423: sd_gendisk.real_devices = (void *) rscsi_disks;
1424: return 0;
1425: }
1426:
1427: static void sd_finish(void)
1428: {
1429: struct gendisk *gendisk;
1430: int i;
1431:
1432: blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST;
1433:
1434: for (gendisk = gendisk_head; gendisk != NULL; gendisk = gendisk->next)
1435: if (gendisk == &sd_gendisk)
1436: break;
1437: if (gendisk == NULL)
1438: {
1439: sd_gendisk.next = gendisk_head;
1440: gendisk_head = &sd_gendisk;
1441: }
1442:
1443: for (i = 0; i < sd_template.dev_max; ++i)
1444: if (!rscsi_disks[i].capacity &&
1445: rscsi_disks[i].device)
1446: {
1447: if (MODULE_FLAG
1448: && !rscsi_disks[i].has_part_table) {
1449: sd_sizes[i << 4] = rscsi_disks[i].capacity;
1450: /* revalidate does sd_init_onedisk via MAYBE_REINIT*/
1451: revalidate_scsidisk(MKDEV(MAJOR_NR, i << 4), 0);
1452: }
1453: else
1454: i=sd_init_onedisk(i);
1455: rscsi_disks[i].has_part_table = 1;
1456: }
1457:
1458: /* If our host adapter is capable of scatter-gather, then we increase
1459: * the read-ahead to 16 blocks (32 sectors). If not, we use
1460: * a two block (4 sector) read ahead.
1461: */
1462: if(rscsi_disks[0].device && rscsi_disks[0].device->host->sg_tablesize)
1463: read_ahead[MAJOR_NR] = 120; /* 120 sector read-ahead */
1464: else
1465: read_ahead[MAJOR_NR] = 4; /* 4 sector read-ahead */
1466:
1467: return;
1468: }
1469:
1470: static int sd_detect(Scsi_Device * SDp){
1471: if(SDp->type != TYPE_DISK && SDp->type != TYPE_MOD) return 0;
1472:
1473: #ifdef MACH
1474: printk("Detected scsi %sdisk sd%d at scsi%d, channel %d, id %d, lun %d\n",
1475: SDp->removable ? "removable " : "",
1476: sd_template.dev_noticed++,
1477: SDp->host->host_no, SDp->channel, SDp->id, SDp->lun);
1478: #else
1479: printk("Detected scsi %sdisk sd%c at scsi%d, channel %d, id %d, lun %d\n",
1480: SDp->removable ? "removable " : "",
1481: 'a'+ (sd_template.dev_noticed++),
1482: SDp->host->host_no, SDp->channel, SDp->id, SDp->lun);
1483: #endif
1484:
1485: return 1;
1486: }
1487:
1488: static int sd_attach(Scsi_Device * SDp){
1489: Scsi_Disk * dpnt;
1490: int i;
1491:
1492: if(SDp->type != TYPE_DISK && SDp->type != TYPE_MOD) return 0;
1493:
1494: if(sd_template.nr_dev >= sd_template.dev_max) {
1495: SDp->attached--;
1496: return 1;
1497: }
1498:
1499: for(dpnt = rscsi_disks, i=0; i<sd_template.dev_max; i++, dpnt++)
1500: if(!dpnt->device) break;
1501:
1502: if(i >= sd_template.dev_max) panic ("scsi_devices corrupt (sd)");
1503:
1504: SDp->scsi_request_fn = do_sd_request;
1505: rscsi_disks[i].device = SDp;
1506: rscsi_disks[i].has_part_table = 0;
1507: sd_template.nr_dev++;
1508: sd_gendisk.nr_real++;
1509: return 0;
1510: }
1511:
1512: #define DEVICE_BUSY rscsi_disks[target].device->busy
1513: #define USAGE rscsi_disks[target].device->access_count
1514: #define CAPACITY rscsi_disks[target].capacity
1515: #define MAYBE_REINIT sd_init_onedisk(target)
1516: #define GENDISK_STRUCT sd_gendisk
1517:
1518: /* This routine is called to flush all partitions and partition tables
1519: * for a changed scsi disk, and then re-read the new partition table.
1520: * If we are revalidating a disk because of a media change, then we
1521: * enter with usage == 0. If we are using an ioctl, we automatically have
1522: * usage == 1 (we need an open channel to use an ioctl :-), so this
1523: * is our limit.
1524: */
1525: int revalidate_scsidisk(kdev_t dev, int maxusage){
1526: int target;
1527: struct gendisk * gdev;
1528: unsigned long flags;
1529: int max_p;
1530: int start;
1531: int i;
1532:
1533: target = DEVICE_NR(dev);
1534: gdev = &GENDISK_STRUCT;
1535:
1536: save_flags(flags);
1537: cli();
1538: if (DEVICE_BUSY || USAGE > maxusage) {
1539: restore_flags(flags);
1540: printk("Device busy for revalidation (usage=%d)\n", USAGE);
1541: return -EBUSY;
1542: }
1543: DEVICE_BUSY = 1;
1544: restore_flags(flags);
1545:
1546: max_p = gdev->max_p;
1547: start = target << gdev->minor_shift;
1548:
1549: for (i=max_p - 1; i >=0 ; i--) {
1550: int minor = start+i;
1551: kdev_t devi = MKDEV(MAJOR_NR, minor);
1552: sync_dev(devi);
1553: invalidate_inodes(devi);
1554: invalidate_buffers(devi);
1555: gdev->part[minor].start_sect = 0;
1556: gdev->part[minor].nr_sects = 0;
1557: /*
1558: * Reset the blocksize for everything so that we can read
1559: * the partition table.
1560: */
1561: blksize_size[MAJOR_NR][minor] = 1024;
1562: }
1563:
1564: #ifdef MAYBE_REINIT
1565: MAYBE_REINIT;
1566: #endif
1567:
1568: gdev->part[start].nr_sects = CAPACITY;
1569: resetup_one_dev(gdev, target);
1570:
1571: DEVICE_BUSY = 0;
1572: return 0;
1573: }
1574:
1575: static int fop_revalidate_scsidisk(kdev_t dev){
1576: return revalidate_scsidisk(dev, 0);
1577: }
1578:
1579:
1580: static void sd_detach(Scsi_Device * SDp)
1581: {
1582: Scsi_Disk * dpnt;
1583: int i;
1584: int max_p;
1585: int start;
1586:
1587: for(dpnt = rscsi_disks, i=0; i<sd_template.dev_max; i++, dpnt++)
1588: if(dpnt->device == SDp) {
1589:
1590: /* If we are disconnecting a disk driver, sync and invalidate
1591: * everything */
1592: max_p = sd_gendisk.max_p;
1593: start = i << sd_gendisk.minor_shift;
1594:
1595: for (i=max_p - 1; i >=0 ; i--) {
1596: int minor = start+i;
1597: kdev_t devi = MKDEV(MAJOR_NR, minor);
1598: sync_dev(devi);
1599: invalidate_inodes(devi);
1600: invalidate_buffers(devi);
1601: sd_gendisk.part[minor].start_sect = 0;
1602: sd_gendisk.part[minor].nr_sects = 0;
1603: sd_sizes[minor] = 0;
1604: }
1605:
1606: dpnt->has_part_table = 0;
1607: dpnt->device = NULL;
1608: dpnt->capacity = 0;
1609: SDp->attached--;
1610: sd_template.dev_noticed--;
1611: sd_template.nr_dev--;
1612: sd_gendisk.nr_real--;
1613: return;
1614: }
1615: return;
1616: }
1617:
1618: #ifdef MODULE
1619:
1620: int init_module(void) {
1621: sd_template.usage_count = &mod_use_count_;
1622: return scsi_register_module(MODULE_SCSI_DEV, &sd_template);
1623: }
1624:
1625: void cleanup_module( void)
1626: {
1627: struct gendisk * prev_sdgd;
1628: struct gendisk * sdgd;
1629:
1630: scsi_unregister_module(MODULE_SCSI_DEV, &sd_template);
1631: unregister_blkdev(SCSI_DISK_MAJOR, "sd");
1632: sd_registered--;
1633: if( rscsi_disks != NULL )
1634: {
1635: scsi_init_free((char *) rscsi_disks,
1636: (sd_template.dev_noticed + SD_EXTRA_DEVS)
1637: * sizeof(Scsi_Disk));
1638:
1639: scsi_init_free((char *) sd_sizes, sd_template.dev_max * sizeof(int));
1640: scsi_init_free((char *) sd_blocksizes, sd_template.dev_max * sizeof(int));
1641: scsi_init_free((char *) sd_hardsizes, sd_template.dev_max * sizeof(int));
1642: scsi_init_free((char *) sd,
1643: (sd_template.dev_max << 4) * sizeof(struct hd_struct));
1644: /*
1645: * Now remove sd_gendisk from the linked list
1646: */
1647: sdgd = gendisk_head;
1648: prev_sdgd = NULL;
1649: while(sdgd != &sd_gendisk)
1650: {
1651: prev_sdgd = sdgd;
1652: sdgd = sdgd->next;
1653: }
1654:
1655: if(sdgd != &sd_gendisk)
1656: printk("sd_gendisk not in disk chain.\n");
1657: else {
1658: if(prev_sdgd != NULL)
1659: prev_sdgd->next = sdgd->next;
1660: else
1661: gendisk_head = sdgd->next;
1662: }
1663: }
1664:
1665: blksize_size[MAJOR_NR] = NULL;
1666: blk_dev[MAJOR_NR].request_fn = NULL;
1667: blk_size[MAJOR_NR] = NULL;
1668: hardsect_size[MAJOR_NR] = NULL;
1669: read_ahead[MAJOR_NR] = 0;
1670: sd_template.dev_max = 0;
1671: }
1672: #endif /* MODULE */
1673:
1674: /*
1675: * Overrides for Emacs so that we almost follow Linus's tabbing style.
1676: * Emacs will notice this stuff at the end of the file and automatically
1677: * adjust the settings for this buffer only. This must remain at the end
1678: * of the file.
1679: * ---------------------------------------------------------------------------
1680: * Local variables:
1681: * c-indent-level: 4
1682: * c-brace-imaginary-offset: 0
1683: * c-brace-offset: -4
1684: * c-argdecl-indent: 4
1685: * c-label-offset: -4
1686: * c-continued-statement-offset: 4
1687: * c-continued-brace-offset: 0
1688: * indent-tabs-mode: nil
1689: * tab-width: 8
1690: * End:
1691: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.