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