Annotation of Gnu-Mach/i386/i386at/gpl/linux/scsi/sd.c, revision 1.1.1.1

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:  */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.