linux-old/drivers/scsi/scsi_scan.c
<<
>>
Prefs
   1/*
   2 *  scsi_scan.c Copyright (C) 2000 Eric Youngdale
   3 *
   4 *  Bus scan logic.
   5 *
   6 *  This used to live in scsi.c, but that file was just a laundry basket
   7 *  full of misc stuff.  This got separated out in order to make things
   8 *  clearer.
   9 */
  10
  11#define __NO_VERSION__
  12#include <linux/config.h>
  13#include <linux/module.h>
  14#include <linux/init.h>
  15
  16#include <linux/blk.h>
  17
  18#include "scsi.h"
  19#include "hosts.h"
  20#include "constants.h"
  21
  22#ifdef CONFIG_KMOD
  23#include <linux/kmod.h>
  24#endif
  25
  26/* 
  27 * Flags for irregular SCSI devices that need special treatment 
  28 */
  29#define BLIST_NOLUN             0x001   /* Don't scan for LUNs */
  30#define BLIST_FORCELUN          0x002   /* Known to have LUNs, force sanning */
  31#define BLIST_BORKEN            0x004   /* Flag for broken handshaking */
  32#define BLIST_KEY               0x008   /* Needs to be unlocked by special command */
  33#define BLIST_SINGLELUN         0x010   /* LUNs should better not be used in parallel */
  34#define BLIST_NOTQ              0x020   /* Buggy Tagged Command Queuing */
  35#define BLIST_SPARSELUN         0x040   /* Non consecutive LUN numbering */
  36#define BLIST_MAX5LUN           0x080   /* Avoid LUNS >= 5 */
  37#define BLIST_ISDISK            0x100   /* Treat as (removable) disk */
  38#define BLIST_ISROM             0x200   /* Treat as (removable) CD-ROM */
  39#define BLIST_LARGELUN          0x400   /* LUNs larger than 7 despite reporting as SCSI 2 */
  40#define BLIST_NOSTARTONADD      0x1000  /* do not do automatic start on add */
  41
  42
  43static void print_inquiry(unsigned char *data);
  44static int scan_scsis_single(unsigned int channel, unsigned int dev,
  45                unsigned int lun, int lun0_scsi_level, 
  46                unsigned int *max_scsi_dev, unsigned int *sparse_lun, 
  47                Scsi_Device ** SDpnt, struct Scsi_Host *shpnt, 
  48                char *scsi_result);
  49static int find_lun0_scsi_level(unsigned int channel, unsigned int dev,
  50                                struct Scsi_Host *shpnt);
  51
  52struct dev_info {
  53        const char *vendor;
  54        const char *model;
  55        const char *revision;   /* Latest revision known to be bad.  Not used yet */
  56        unsigned flags;
  57};
  58
  59/*
  60 * This is what was previously known as the blacklist.  The concept
  61 * has been expanded so that we can specify other types of things we
  62 * need to be aware of.
  63 */
  64static struct dev_info device_list[] =
  65{
  66/* The following devices are known not to tolerate a lun != 0 scan for
  67 * one reason or another.  Some will respond to all luns, others will
  68 * lock up.
  69 */
  70        {"Aashima", "IMAGERY 2400SP", "1.03", BLIST_NOLUN},     /* Locks up if polled for lun != 0 */
  71        {"CHINON", "CD-ROM CDS-431", "H42", BLIST_NOLUN},       /* Locks up if polled for lun != 0 */
  72        {"CHINON", "CD-ROM CDS-535", "Q14", BLIST_NOLUN},       /* Locks up if polled for lun != 0 */
  73        {"DENON", "DRD-25X", "V", BLIST_NOLUN},                 /* Locks up if probed for lun != 0 */
  74        {"HITACHI", "DK312C", "CM81", BLIST_NOLUN},             /* Responds to all lun - dtg */
  75        {"HITACHI", "DK314C", "CR21", BLIST_NOLUN},             /* responds to all lun */
  76        {"IMS", "CDD521/10", "2.06", BLIST_NOLUN},              /* Locks-up when LUN>0 polled. */
  77        {"MAXTOR", "XT-3280", "PR02", BLIST_NOLUN},             /* Locks-up when LUN>0 polled. */
  78        {"MAXTOR", "XT-4380S", "B3C", BLIST_NOLUN},             /* Locks-up when LUN>0 polled. */
  79        {"MAXTOR", "MXT-1240S", "I1.2", BLIST_NOLUN},           /* Locks up when LUN>0 polled */
  80        {"MAXTOR", "XT-4170S", "B5A", BLIST_NOLUN},             /* Locks-up sometimes when LUN>0 polled. */
  81        {"MAXTOR", "XT-8760S", "B7B", BLIST_NOLUN},             /* guess what? */
  82        {"MEDIAVIS", "RENO CD-ROMX2A", "2.03", BLIST_NOLUN},    /*Responds to all lun */
  83        {"NEC", "CD-ROM DRIVE:841", "1.0", BLIST_NOLUN},        /* Locks-up when LUN>0 polled. */
  84        {"PHILIPS", "PCA80SC", "V4-2", BLIST_NOLUN},            /* Responds to all lun */
  85        {"RODIME", "RO3000S", "2.33", BLIST_NOLUN},             /* Locks up if polled for lun != 0 */
  86        {"SANYO", "CRD-250S", "1.20", BLIST_NOLUN},             /* causes failed REQUEST SENSE on lun 1
  87                                                                 * for aha152x controller, which causes
  88                                                                 * SCSI code to reset bus.*/
  89        {"SEAGATE", "ST157N", "\004|j", BLIST_NOLUN},           /* causes failed REQUEST SENSE on lun 1
  90                                                                 * for aha152x controller, which causes
  91                                                                 * SCSI code to reset bus.*/
  92        {"SEAGATE", "ST296", "921", BLIST_NOLUN},               /* Responds to all lun */
  93        {"SEAGATE", "ST1581", "6538", BLIST_NOLUN},             /* Responds to all lun */
  94        {"SONY", "CD-ROM CDU-541", "4.3d", BLIST_NOLUN},        
  95        {"SONY", "CD-ROM CDU-55S", "1.0i", BLIST_NOLUN},
  96        {"SONY", "CD-ROM CDU-561", "1.7x", BLIST_NOLUN},
  97        {"SONY", "CD-ROM CDU-8012", "*", BLIST_NOLUN},
  98        {"TANDBERG", "TDC 3600", "U07", BLIST_NOLUN},           /* Locks up if polled for lun != 0 */
  99        {"TEAC", "CD-R55S", "1.0H", BLIST_NOLUN},               /* Locks up if polled for lun != 0 */
 100        {"TEAC", "CD-ROM", "1.06", BLIST_NOLUN},                /* causes failed REQUEST SENSE on lun 1
 101                                                                 * for seagate controller, which causes
 102                                                                 * SCSI code to reset bus.*/
 103        {"TEAC", "MT-2ST/45S2-27", "RV M", BLIST_NOLUN},        /* Responds to all lun */
 104        {"TEXEL", "CD-ROM", "1.06", BLIST_NOLUN},               /* causes failed REQUEST SENSE on lun 1
 105                                                                 * for seagate controller, which causes
 106                                                                 * SCSI code to reset bus.*/
 107        {"QUANTUM", "LPS525S", "3110", BLIST_NOLUN},            /* Locks sometimes if polled for lun != 0 */
 108        {"QUANTUM", "PD1225S", "3110", BLIST_NOLUN},            /* Locks sometimes if polled for lun != 0 */
 109        {"QUANTUM", "FIREBALL ST4.3S", "0F0C", BLIST_NOLUN},    /* Locks up when polled for lun != 0 */
 110        {"MEDIAVIS", "CDR-H93MV", "1.31", BLIST_NOLUN},         /* Locks up if polled for lun != 0 */
 111        {"SANKYO", "CP525", "6.64", BLIST_NOLUN},               /* causes failed REQ SENSE, extra reset */
 112        {"HP", "C1750A", "3226", BLIST_NOLUN},                  /* scanjet iic */
 113        {"HP", "C1790A", "", BLIST_NOLUN},                      /* scanjet iip */
 114        {"HP", "C2500A", "", BLIST_NOLUN},                      /* scanjet iicx */
 115        {"HP", "A6188A", "*", BLIST_SPARSELUN | BLIST_LARGELUN},/* HP Va7100 Array */
 116        {"HP", "A6189A", "*", BLIST_SPARSELUN | BLIST_LARGELUN},/* HP Va7400 Array */
 117        {"HP", "A6189B", "*", BLIST_SPARSELUN | BLIST_LARGELUN},/* HP Va7110 Array */
 118        {"HP", "A6218A", "*", BLIST_SPARSELUN | BLIST_LARGELUN},/* HP Va7410 Array */
 119        {"YAMAHA", "CDR100", "1.00", BLIST_NOLUN},              /* Locks up if polled for lun != 0 */
 120        {"YAMAHA", "CDR102", "1.00", BLIST_NOLUN},              /* Locks up if polled for lun != 0  
 121                                                                 * extra reset */
 122        {"YAMAHA", "CRW8424S", "1.0", BLIST_NOLUN},             /* Locks up if polled for lun != 0 */
 123        {"YAMAHA", "CRW6416S", "1.0c", BLIST_NOLUN},            /* Locks up if polled for lun != 0 */
 124        {"MITSUMI", "CD-R CR-2201CS", "6119", BLIST_NOLUN},     /* Locks up if polled for lun != 0 */
 125        {"RELISYS", "Scorpio", "*", BLIST_NOLUN},               /* responds to all LUN */
 126        {"RELISYS", "VM3530+", "*", BLIST_NOLUN},               /* responds to all LUN */
 127        {"ACROSS", "", "*", BLIST_NOLUN},                       /* responds to all LUN */
 128        {"MICROTEK", "ScanMaker II", "5.61", BLIST_NOLUN},      /* responds to all LUN */
 129
 130/*
 131 * Other types of devices that have special flags.
 132 */
 133        {"SONY", "CD-ROM CDU-8001", "*", BLIST_BORKEN},
 134        {"TEXEL", "CD-ROM", "1.06", BLIST_BORKEN},
 135        {"IOMEGA", "Io20S         *F", "*", BLIST_KEY},
 136        {"INSITE", "Floptical   F*8I", "*", BLIST_KEY},
 137        {"INSITE", "I325VM", "*", BLIST_KEY},
 138        {"LASOUND","CDX7405","3.10", BLIST_MAX5LUN | BLIST_SINGLELUN},
 139        {"MICROP", "4110", "*", BLIST_NOTQ},                    /* Buggy Tagged Queuing */
 140        {"NRC", "MBR-7", "*", BLIST_FORCELUN | BLIST_SINGLELUN},
 141        {"NRC", "MBR-7.4", "*", BLIST_FORCELUN | BLIST_SINGLELUN},
 142        {"REGAL", "CDC-4X", "*", BLIST_MAX5LUN | BLIST_SINGLELUN},
 143        {"NAKAMICH", "MJ-4.8S", "*", BLIST_FORCELUN | BLIST_SINGLELUN},
 144        {"NAKAMICH", "MJ-5.16S", "*", BLIST_FORCELUN | BLIST_SINGLELUN},
 145        {"PIONEER", "CD-ROM DRM-600", "*", BLIST_FORCELUN | BLIST_SINGLELUN},
 146        {"PIONEER", "CD-ROM DRM-602X", "*", BLIST_FORCELUN | BLIST_SINGLELUN},
 147        {"PIONEER", "CD-ROM DRM-604X", "*", BLIST_FORCELUN | BLIST_SINGLELUN},
 148        {"EMULEX", "MD21/S2     ESDI", "*", BLIST_SINGLELUN},
 149        {"CANON", "IPUBJD", "*", BLIST_SPARSELUN},
 150        {"nCipher", "Fastness Crypto", "*", BLIST_FORCELUN},
 151        {"DEC","HSG80","*", BLIST_FORCELUN | BLIST_NOSTARTONADD},
 152        {"COMPAQ","LOGICAL VOLUME","*", BLIST_FORCELUN},
 153        {"COMPAQ","CR3500","*", BLIST_FORCELUN},
 154        {"NEC", "PD-1 ODX654P", "*", BLIST_FORCELUN | BLIST_SINGLELUN},
 155        {"MATSHITA", "PD-1", "*", BLIST_FORCELUN | BLIST_SINGLELUN},
 156        {"iomega", "jaz 1GB", "J.86", BLIST_NOTQ | BLIST_NOLUN},
 157        {"TOSHIBA","CDROM","*", BLIST_ISROM},
 158        {"TOSHIBA","CD-ROM","*", BLIST_ISROM},
 159        {"MegaRAID", "LD", "*", BLIST_FORCELUN},
 160        {"DGC",  "RAID",      "*", BLIST_SPARSELUN | BLIST_LARGELUN}, // Dell PV 650F (tgt @ LUN 0)
 161        {"DGC",  "DISK",      "*", BLIST_SPARSELUN | BLIST_LARGELUN}, // Dell PV 650F (no tgt @ LUN 0) 
 162        {"DELL", "PV660F",   "*", BLIST_SPARSELUN | BLIST_LARGELUN},
 163        {"DELL", "PV660F   PSEUDO",   "*", BLIST_SPARSELUN | BLIST_LARGELUN},
 164        {"DELL", "PSEUDO DEVICE .",   "*", BLIST_SPARSELUN | BLIST_LARGELUN}, // Dell PV 530F
 165        {"DELL", "PV530F",    "*", BLIST_SPARSELUN | BLIST_LARGELUN}, // Dell PV 530F
 166        {"EMC", "SYMMETRIX", "*", BLIST_SPARSELUN | BLIST_LARGELUN | BLIST_FORCELUN},
 167        {"HP", "A6189A", "*", BLIST_SPARSELUN |  BLIST_LARGELUN}, // HP VA7400, by Alar Aun
 168        {"HP", "OPEN-", "*", BLIST_SPARSELUN | BLIST_LARGELUN}, /* HP XP Arrays */
 169        {"CMD", "CRA-7280", "*", BLIST_SPARSELUN | BLIST_LARGELUN},   // CMD RAID Controller
 170        {"CNSI", "G7324", "*", BLIST_SPARSELUN | BLIST_LARGELUN},     // Chaparral G7324 RAID
 171        {"CNSi", "G8324", "*", BLIST_SPARSELUN | BLIST_LARGELUN},     // Chaparral G8324 RAID
 172        {"Zzyzx", "RocketStor 500S", "*", BLIST_SPARSELUN},
 173        {"Zzyzx", "RocketStor 2000", "*", BLIST_SPARSELUN},
 174        {"SONY", "TSL",       "*", BLIST_FORCELUN},  // DDS3 & DDS4 autoloaders
 175        {"DELL", "PERCRAID", "*", BLIST_FORCELUN},
 176        {"HP", "NetRAID-4M", "*", BLIST_FORCELUN},
 177        {"ADAPTEC", "AACRAID", "*", BLIST_FORCELUN},
 178        {"ADAPTEC", "Adaptec 5400S", "*", BLIST_FORCELUN},
 179        {"APPLE", "Xserve", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
 180        {"COMPAQ", "MSA1000", "*", BLIST_SPARSELUN | BLIST_LARGELUN | BLIST_NOSTARTONADD},
 181        {"COMPAQ", "MSA1000 VOLUME", "*", BLIST_SPARSELUN | BLIST_LARGELUN | BLIST_NOSTARTONADD},
 182        {"COMPAQ", "HSV110", "*", BLIST_SPARSELUN | BLIST_LARGELUN | BLIST_NOSTARTONADD},
 183        {"HP", "HSV100", "*", BLIST_SPARSELUN | BLIST_LARGELUN | BLIST_NOSTARTONADD},
 184        {"HP", "C1557A", "*", BLIST_FORCELUN},
 185        {"IBM", "AuSaV1S2", "*", BLIST_FORCELUN},
 186        {"FSC", "CentricStor", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
 187        {"DDN", "SAN DataDirector", "*", BLIST_SPARSELUN},
 188        {"HITACHI", "DF400", "*", BLIST_SPARSELUN},
 189        {"HITACHI", "DF500", "*", BLIST_SPARSELUN},
 190        {"HITACHI", "DF600", "*", BLIST_SPARSELUN},
 191        {"IBM", "ProFibre 4000R", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
 192        {"HITACHI", "OPEN-", "*", BLIST_SPARSELUN | BLIST_LARGELUN},  /* HITACHI XP Arrays */
 193        {"HITACHI", "DISK-SUBSYSTEM", "*", BLIST_SPARSELUN | BLIST_LARGELUN},  /* HITACHI 9960 */
 194        {"WINSYS","FLASHDISK G6", "*", BLIST_SPARSELUN},
 195        {"DotHill","SANnet RAID X300", "*", BLIST_SPARSELUN},   
 196        {"SUN", "T300", "*", BLIST_SPARSELUN},
 197        {"SUN", "T4", "*", BLIST_SPARSELUN},
 198        {"SGI", "RAID3", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
 199        {"SGI", "RAID5", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
 200        {"SGI", "TP9100", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
 201        {"SGI", "TP9300", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
 202        {"SGI", "TP9400", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
 203        {"SGI", "TP9500", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
 204        {"MYLEX", "DACARMRB", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
 205        {"PLATYPUS", "CX5", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
 206        {"Raidtec", "FCR", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
 207        {"HP", "C7200", "*", BLIST_SPARSELUN},                  /* Medium Changer */
 208        {"SMSC", "USB 2 HS", "*", BLIST_SPARSELUN | BLIST_LARGELUN}, 
 209        {"XYRATEX", "RS", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
 210        {"NEC", "iStorage", "*", BLIST_SPARSELUN | BLIST_LARGELUN | BLIST_FORCELUN},
 211
 212        /*
 213         * Must be at end of list...
 214         */
 215        {NULL, NULL, NULL}
 216};
 217
 218#define MAX_SCSI_LUNS 0xFFFFFFFF
 219
 220#ifdef CONFIG_SCSI_MULTI_LUN
 221static unsigned int max_scsi_luns = MAX_SCSI_LUNS;
 222#else
 223static unsigned int max_scsi_luns = 1;
 224#endif
 225
 226static unsigned int scsi_allow_ghost_devices = 0;
 227
 228#ifdef MODULE
 229
 230MODULE_PARM(max_scsi_luns, "i");
 231MODULE_PARM_DESC(max_scsi_luns, "last scsi LUN (should be between 1 and 2^32-1)");
 232MODULE_PARM(scsi_allow_ghost_devices, "i");
 233MODULE_PARM_DESC(scsi_allow_ghost_devices, "allow devices marked as being offline to be accessed anyway (0 = off, else allow ghosts on lun 0 through scsi_allow_ghost_devices - 1");
 234
 235#else
 236
 237static int __init scsi_luns_setup(char *str)
 238{
 239        unsigned int tmp;
 240
 241        if (get_option(&str, &tmp) == 1) {
 242                max_scsi_luns = tmp;
 243                return 1;
 244        } else {
 245                printk("scsi_luns_setup : usage max_scsi_luns=n "
 246                       "(n should be between 1 and 2^32-1)\n");
 247                return 0;
 248        }
 249}
 250
 251__setup("max_scsi_luns=", scsi_luns_setup);
 252
 253static int __init scsi_allow_ghost_devices_setup(char *str)
 254{
 255        unsigned int tmp;
 256
 257        if (get_option(&str, &tmp) == 1) {
 258                scsi_allow_ghost_devices = tmp;
 259                return 1;
 260        } else {
 261                printk("scsi_allow_ghost_devices_setup: usage scsi_allow_ghost_devices=n (0: off else\nallow ghost devices (ghost devices are devices that report themselves as\nbeing offline but which we allow access to anyway) on lun 0 through n - 1.\n");
 262                return 0;
 263        }
 264}
 265
 266__setup("scsi_allow_ghost_devices=", scsi_allow_ghost_devices_setup);
 267
 268#endif
 269
 270static void print_inquiry(unsigned char *data)
 271{
 272        int i;
 273
 274        printk("  Vendor: ");
 275        for (i = 8; i < 16; i++) {
 276                if (data[i] >= 0x20 && i < data[4] + 5)
 277                        printk("%c", data[i]);
 278                else
 279                        printk(" ");
 280        }
 281
 282        printk("  Model: ");
 283        for (i = 16; i < 32; i++) {
 284                if (data[i] >= 0x20 && i < data[4] + 5)
 285                        printk("%c", data[i]);
 286                else
 287                        printk(" ");
 288        }
 289
 290        printk("  Rev: ");
 291        for (i = 32; i < 36; i++) {
 292                if (data[i] >= 0x20 && i < data[4] + 5)
 293                        printk("%c", data[i]);
 294                else
 295                        printk(" ");
 296        }
 297
 298        printk("\n");
 299
 300        i = data[0] & 0x1f;
 301
 302        printk("  Type:   %s ",
 303               i < MAX_SCSI_DEVICE_CODE ? scsi_device_types[i] : "Unknown          ");
 304        printk("                 ANSI SCSI revision: %02x", data[2] & 0x07);
 305        if ((data[2] & 0x07) == 1 && (data[3] & 0x0f) == 1)
 306                printk(" CCS\n");
 307        else
 308                printk("\n");
 309}
 310
 311static int get_device_flags(unsigned char *response_data)
 312{
 313        int i = 0;
 314        unsigned char *pnt;
 315        for (i = 0; 1; i++) {
 316                if (device_list[i].vendor == NULL)
 317                        return 0;
 318                pnt = &response_data[8];
 319                while (*pnt && *pnt == ' ')
 320                        pnt++;
 321                if (memcmp(device_list[i].vendor, pnt,
 322                           strlen(device_list[i].vendor)))
 323                        continue;
 324                pnt = &response_data[16];
 325                while (*pnt && *pnt == ' ')
 326                        pnt++;
 327                if (memcmp(device_list[i].model, pnt,
 328                           strlen(device_list[i].model)))
 329                        continue;
 330                return device_list[i].flags;
 331        }
 332        return 0;
 333}
 334
 335/*
 336 *  Detecting SCSI devices :
 337 *  We scan all present host adapter's busses,  from ID 0 to ID (max_id).
 338 *  We use the INQUIRY command, determine device type, and pass the ID /
 339 *  lun address of all sequential devices to the tape driver, all random
 340 *  devices to the disk driver.
 341 */
 342void scan_scsis(struct Scsi_Host *shpnt,
 343                       uint hardcoded,
 344                       uint hchannel,
 345                       uint hid,
 346                       uint hlun)
 347{
 348        uint channel;
 349        unsigned int dev;
 350        unsigned int lun;
 351        unsigned int max_dev_lun;
 352        unsigned char *scsi_result;
 353        unsigned char scsi_result0[256];
 354        Scsi_Device *SDpnt;
 355        Scsi_Device *SDtail;
 356        unsigned int sparse_lun;
 357        int lun0_sl;
 358
 359        scsi_result = NULL;
 360
 361        SDpnt = (Scsi_Device *) kmalloc(sizeof(Scsi_Device),
 362                                        GFP_ATOMIC);
 363        if (SDpnt) {
 364                memset(SDpnt, 0, sizeof(Scsi_Device));
 365                /*
 366                 * Register the queue for the device.  All I/O requests will
 367                 * come in through here.  We also need to register a pointer to
 368                 * ourselves, since the queue handler won't know what device
 369                 * the queue actually represents.   We could look it up, but it
 370                 * is pointless work.
 371                 */
 372                scsi_initialize_queue(SDpnt, shpnt);
 373                SDpnt->request_queue.queuedata = (void *) SDpnt;
 374                /* Make sure we have something that is valid for DMA purposes */
 375                scsi_result = ((!shpnt->unchecked_isa_dma)
 376                               ? &scsi_result0[0] : kmalloc(512, GFP_DMA));
 377        }
 378
 379        if (scsi_result == NULL) {
 380                printk("Unable to obtain scsi_result buffer\n");
 381                goto leave;
 382        }
 383        /*
 384         * We must chain ourself in the host_queue, so commands can time out 
 385         */
 386        SDpnt->queue_depth = 1;
 387        SDpnt->host = shpnt;
 388        SDpnt->online = TRUE;
 389
 390        initialize_merge_fn(SDpnt);
 391
 392        /*
 393         * Initialize the object that we will use to wait for command blocks.
 394         */
 395        init_waitqueue_head(&SDpnt->scpnt_wait);
 396
 397        /*
 398         * Next, hook the device to the host in question.
 399         */
 400        SDpnt->prev = NULL;
 401        SDpnt->next = NULL;
 402        if (shpnt->host_queue != NULL) {
 403                SDtail = shpnt->host_queue;
 404                while (SDtail->next != NULL)
 405                        SDtail = SDtail->next;
 406
 407                SDtail->next = SDpnt;
 408                SDpnt->prev = SDtail;
 409        } else {
 410                shpnt->host_queue = SDpnt;
 411        }
 412
 413        /*
 414         * We need to increment the counter for this one device so we can track
 415         * when things are quiet.
 416         */
 417        if (hardcoded == 1) {
 418                Scsi_Device *oldSDpnt = SDpnt;
 419                struct Scsi_Device_Template *sdtpnt;
 420                channel = hchannel;
 421                if (channel > shpnt->max_channel)
 422                        goto leave;
 423                dev = hid;
 424                if (dev >= shpnt->max_id)
 425                        goto leave;
 426                lun = hlun;
 427                if (lun >= shpnt->max_lun)
 428                        goto leave;
 429                if ((0 == lun) || (lun > 7))
 430                        lun0_sl = SCSI_3; /* actually don't care for 0 == lun */
 431                else
 432                        lun0_sl = find_lun0_scsi_level(channel, dev, shpnt);
 433                scan_scsis_single(channel, dev, lun, lun0_sl, &max_dev_lun, 
 434                                  &sparse_lun, &SDpnt, shpnt, scsi_result);
 435                if (SDpnt != oldSDpnt) {
 436
 437                        /* it could happen the blockdevice hasn't yet been inited */
 438                        /* queue_depth() moved from scsi_proc_info() so that
 439                           it is called before scsi_build_commandblocks() */
 440                        if (shpnt->select_queue_depths != NULL)
 441                                (shpnt->select_queue_depths)(shpnt,
 442                                                             shpnt->host_queue);
 443
 444                        for (sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next)
 445                                if (sdtpnt->init && sdtpnt->dev_noticed)
 446                                        (*sdtpnt->init) ();
 447
 448                        for (sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next) {
 449                                if (sdtpnt->attach) {
 450                                        (*sdtpnt->attach) (oldSDpnt);
 451                                        if (oldSDpnt->attached) {
 452                                                scsi_build_commandblocks(oldSDpnt);
 453                                                if (0 == oldSDpnt->has_cmdblocks) {
 454                                                        printk("scan_scsis: DANGER, no command blocks\n");
 455                                                        /* What to do now ?? */
 456                                                }
 457                                        }
 458                                }
 459                        }
 460                        scsi_resize_dma_pool();
 461
 462                        for (sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next) {
 463                                if (sdtpnt->finish && sdtpnt->nr_dev) {
 464                                        (*sdtpnt->finish) ();
 465                                }
 466                        }
 467                }
 468        } else {
 469                /* Actual LUN. PC ordering is 0->n IBM/spec ordering is n->0 */
 470                int order_dev;
 471
 472                for (channel = 0; channel <= shpnt->max_channel; channel++) {
 473                        for (dev = 0; dev < shpnt->max_id; ++dev) {
 474                                if (shpnt->reverse_ordering)
 475                                        /* Shift to scanning 15,14,13... or 7,6,5,4, */
 476                                        order_dev = shpnt->max_id - dev - 1;
 477                                else
 478                                        order_dev = dev;
 479
 480                                if (shpnt->this_id != order_dev) {
 481
 482                                        /*
 483                                         * We need the for so our continue, etc. work fine. We put this in
 484                                         * a variable so that we can override it during the scan if we
 485                                         * detect a device *KNOWN* to have multiple logical units.
 486                                         */
 487                                        max_dev_lun = (max_scsi_luns < shpnt->max_lun ?
 488                                         max_scsi_luns : shpnt->max_lun);
 489                                        sparse_lun = 0;
 490                                        for (lun = 0, lun0_sl = SCSI_2; lun < max_dev_lun; ++lun) {
 491                                                /* don't probe further for luns > 7 for targets <= SCSI_2 */
 492                                                if ((lun0_sl < SCSI_3) && (lun > 7))
 493                                                        break;
 494
 495                                                if (!scan_scsis_single(channel, order_dev, lun, lun0_sl,
 496                                                                       &max_dev_lun, &sparse_lun, &SDpnt, shpnt,
 497                                                                       scsi_result)
 498                                                    && !sparse_lun)
 499                                                        break;  /* break means don't probe further for luns!=0 */
 500                                                if (SDpnt && (0 == lun)) {
 501                                                        int bflags = get_device_flags (scsi_result);
 502                                                        if (bflags & BLIST_LARGELUN)
 503                                                                lun0_sl = SCSI_3; /* treat as SCSI 3 */
 504                                                        else
 505                                                                lun0_sl = SDpnt->scsi_level;
 506                                                }
 507                                        }       /* for lun ends */
 508                                }       /* if this_id != id ends */
 509                        }       /* for dev ends */
 510                }               /* for channel ends */
 511        }                       /* if/else hardcoded */
 512
 513      leave:
 514
 515        {                       /* Unchain SRpnt from host_queue */
 516                Scsi_Device *prev, *next;
 517                Scsi_Device *dqptr;
 518
 519                for (dqptr = shpnt->host_queue; dqptr != SDpnt; dqptr = dqptr->next)
 520                        continue;
 521                if (dqptr) {
 522                        prev = dqptr->prev;
 523                        next = dqptr->next;
 524                        if (prev)
 525                                prev->next = next;
 526                        else
 527                                shpnt->host_queue = next;
 528                        if (next)
 529                                next->prev = prev;
 530                }
 531        }
 532
 533        /* Last device block does not exist.  Free memory. */
 534        if (SDpnt != NULL) {
 535                blk_cleanup_queue(&SDpnt->request_queue);
 536                kfree((char *) SDpnt);
 537        }
 538
 539        /* If we allocated a buffer so we could do DMA, free it now */
 540        if (scsi_result != &scsi_result0[0] && scsi_result != NULL) {
 541                kfree(scsi_result);
 542        } {
 543                Scsi_Device *sdev;
 544                Scsi_Cmnd *scmd;
 545
 546                SCSI_LOG_SCAN_BUS(4, printk("Host status for host %p:\n", shpnt));
 547                for (sdev = shpnt->host_queue; sdev; sdev = sdev->next) {
 548                        SCSI_LOG_SCAN_BUS(4, printk("Device %d %p: ", sdev->id, sdev));
 549                        for (scmd = sdev->device_queue; scmd; scmd = scmd->next) {
 550                                SCSI_LOG_SCAN_BUS(4, printk("%p ", scmd));
 551                        }
 552                        SCSI_LOG_SCAN_BUS(4, printk("\n"));
 553                }
 554        }
 555}
 556
 557/*
 558 * The worker for scan_scsis.
 559 * Returning 0 means Please don't ask further for lun!=0, 1 means OK go on.
 560 * Global variables used : scsi_devices(linked list)
 561 */
 562static int scan_scsis_single(unsigned int channel, unsigned int dev,
 563                unsigned int lun, int lun0_scsi_level,
 564                unsigned int *max_dev_lun, unsigned int *sparse_lun, 
 565                Scsi_Device ** SDpnt2, struct Scsi_Host *shpnt, 
 566                char *scsi_result)
 567{
 568        char devname[64];
 569        unsigned char scsi_cmd[MAX_COMMAND_SIZE];
 570        struct Scsi_Device_Template *sdtpnt;
 571        Scsi_Device *SDtail, *SDpnt = *SDpnt2;
 572        Scsi_Request * SRpnt;
 573        int bflags, type = -1;
 574        extern devfs_handle_t scsi_devfs_handle;
 575        int scsi_level;
 576
 577        SDpnt->host = shpnt;
 578        SDpnt->id = dev;
 579        SDpnt->lun = lun;
 580        SDpnt->channel = channel;
 581        SDpnt->online = TRUE;
 582
 583        scsi_build_commandblocks(SDpnt);
 584 
 585        /* Some low level driver could use device->type (DB) */
 586        SDpnt->type = -1;
 587
 588        /*
 589         * Assume that the device will have handshaking problems, and then fix
 590         * this field later if it turns out it doesn't
 591         */
 592        SDpnt->borken = 1;
 593        SDpnt->was_reset = 0;
 594        SDpnt->expecting_cc_ua = 0;
 595        SDpnt->starved = 0;
 596
 597        if (NULL == (SRpnt = scsi_allocate_request(SDpnt))) {
 598                printk("scan_scsis_single: no memory\n");
 599                return 0;
 600        }
 601
 602        /*
 603         * We used to do a TEST_UNIT_READY before the INQUIRY but that was 
 604         * not really necessary.  Spec recommends using INQUIRY to scan for
 605         * devices (and TEST_UNIT_READY to poll for media change). - Paul G.
 606         */
 607
 608        SCSI_LOG_SCAN_BUS(3, printk("scsi: performing INQUIRY\n"));
 609        /*
 610         * Build an INQUIRY command block.
 611         */
 612        scsi_cmd[0] = INQUIRY;
 613        if ((lun > 0) && (lun0_scsi_level <= SCSI_2))
 614                scsi_cmd[1] = (lun << 5) & 0xe0;
 615        else    
 616                scsi_cmd[1] = 0;        /* SCSI_3 and higher, don't touch */
 617        scsi_cmd[2] = 0;
 618        scsi_cmd[3] = 0;
 619        scsi_cmd[4] = 255;
 620        scsi_cmd[5] = 0;
 621        SRpnt->sr_cmd_len = 0;
 622        SRpnt->sr_data_direction = SCSI_DATA_READ;
 623
 624        scsi_wait_req (SRpnt, (void *) scsi_cmd,
 625                  (void *) scsi_result,
 626                  256, SCSI_TIMEOUT+4*HZ, 3);
 627
 628        SCSI_LOG_SCAN_BUS(3, printk("scsi: INQUIRY %s with code 0x%x\n",
 629                SRpnt->sr_result ? "failed" : "successful", SRpnt->sr_result));
 630
 631        /*
 632         * Now that we don't do TEST_UNIT_READY anymore, we must be prepared
 633         * for media change conditions here, so cannot require zero result.
 634         */
 635        if (SRpnt->sr_result) {
 636                if ((driver_byte(SRpnt->sr_result) & DRIVER_SENSE) != 0 &&
 637                    (SRpnt->sr_sense_buffer[2] & 0xf) == UNIT_ATTENTION &&
 638                    SRpnt->sr_sense_buffer[12] == 0x28 &&
 639                    SRpnt->sr_sense_buffer[13] == 0) {
 640                        /* not-ready to ready transition - good */
 641                } else {
 642                        /* assume no peripheral if any other sort of error */
 643                        scsi_release_request(SRpnt);
 644                        scsi_release_commandblocks(SDpnt);
 645                        return 0;
 646                }
 647        }
 648
 649        /*
 650         * Check for SPARSELUN before checking the peripheral qualifier,
 651         * so sparse lun devices are completely scanned.
 652         */
 653
 654        /*
 655         * If we are offline and we are on a LUN != 0, then skip this entry.
 656         * If we are on a BLIST_FORCELUN device this will stop the scan at
 657         * the first offline LUN (typically the correct thing to do).  If
 658         * we are on a BLIST_SPARSELUN device then this won't stop the scan,
 659         * but it will keep us from having false entries in our device
 660         * array. DL
 661         *
 662         * NOTE: Need to test this to make sure it doesn't cause problems
 663         * with tape autoloaders, multidisc CD changers, and external
 664         * RAID chassis that might use sparse luns or multiluns... DL
 665         */
 666        if (lun != 0 && (scsi_result[0] >> 5) == 1) {
 667                scsi_release_request(SRpnt);
 668                scsi_release_commandblocks(SDpnt);
 669                return 0;
 670        }
 671
 672        /*
 673         * Get any flags for this device.  
 674         */
 675        bflags = get_device_flags (scsi_result);
 676
 677        if (bflags & BLIST_SPARSELUN) {
 678          *sparse_lun = 1;
 679        }
 680        /*
 681         * Check the peripheral qualifier field - this tells us whether LUNS
 682         * are supported here or not.
 683         */
 684        if ((scsi_result[0] >> 5) == 3) {
 685                scsi_release_request(SRpnt);
 686                return 0;       /* assume no peripheral if any sort of error */
 687        }
 688         /*   The Toshiba ROM was "gender-changed" here as an inline hack.
 689              This is now much more generic.
 690              This is a mess: What we really want is to leave the scsi_result
 691              alone, and just change the SDpnt structure. And the SDpnt is what
 692              we want print_inquiry to print.  -- REW
 693         */
 694        if (bflags & BLIST_ISDISK) {
 695                scsi_result[0] = TYPE_DISK;                                                
 696                scsi_result[1] |= 0x80;     /* removable */
 697        }
 698
 699        if (bflags & BLIST_ISROM) {
 700                scsi_result[0] = TYPE_ROM;
 701                scsi_result[1] |= 0x80;     /* removable */
 702        }
 703    
 704        memcpy(SDpnt->vendor, scsi_result + 8, 8);
 705        memcpy(SDpnt->model, scsi_result + 16, 16);
 706        memcpy(SDpnt->rev, scsi_result + 32, 4);
 707
 708        SDpnt->removable = (0x80 & scsi_result[1]) >> 7;
 709        /* Use the peripheral qualifier field to determine online/offline */
 710        if ((((scsi_result[0] >> 5) & 7) == 1) &&
 711            (lun >= scsi_allow_ghost_devices))
 712                SDpnt->online = FALSE;
 713        else 
 714                SDpnt->online = TRUE;
 715        SDpnt->lockable = SDpnt->removable;
 716        SDpnt->changed = 0;
 717        SDpnt->access_count = 0;
 718        SDpnt->busy = 0;
 719        SDpnt->has_cmdblocks = 0;
 720        /*
 721         * Currently, all sequential devices are assumed to be tapes, all random
 722         * devices disk, with the appropriate read only flags set for ROM / WORM
 723         * treated as RO.
 724         */
 725        switch (type = (scsi_result[0] & 0x1f)) {
 726        case TYPE_TAPE:
 727        case TYPE_DISK:
 728        case TYPE_PRINTER:
 729        case TYPE_MOD:
 730        case TYPE_PROCESSOR:
 731        case TYPE_SCANNER:
 732        case TYPE_MEDIUM_CHANGER:
 733        case TYPE_ENCLOSURE:
 734        case TYPE_COMM:
 735                SDpnt->writeable = 1;
 736                break;
 737        case TYPE_WORM:
 738        case TYPE_ROM:
 739                SDpnt->writeable = 0;
 740                break;
 741        default:
 742                printk("scsi: unknown type %d\n", type);
 743        }
 744
 745        SDpnt->device_blocked = FALSE;
 746        SDpnt->device_busy = 0;
 747        SDpnt->single_lun = 0;
 748        SDpnt->soft_reset =
 749            (scsi_result[7] & 1) && ((scsi_result[3] & 7) == 2);
 750        SDpnt->random = (type == TYPE_TAPE) ? 0 : 1;
 751        SDpnt->type = (type & 0x1f);
 752
 753        print_inquiry(scsi_result);
 754
 755        sprintf (devname, "host%d/bus%d/target%d/lun%d",
 756                 SDpnt->host->host_no, SDpnt->channel, SDpnt->id, SDpnt->lun);
 757        if (SDpnt->de) printk ("DEBUG: dir: \"%s\" already exists\n", devname);
 758        else SDpnt->de = devfs_mk_dir (scsi_devfs_handle, devname, NULL);
 759
 760        for (sdtpnt = scsi_devicelist; sdtpnt;
 761             sdtpnt = sdtpnt->next)
 762                if (sdtpnt->detect)
 763                        SDpnt->attached +=
 764                            (*sdtpnt->detect) (SDpnt);
 765
 766        SDpnt->scsi_level = scsi_result[2] & 0x07;
 767        if (SDpnt->scsi_level >= 2 ||
 768            (SDpnt->scsi_level == 1 &&
 769             (scsi_result[3] & 0x0f) == 1))
 770                SDpnt->scsi_level++;
 771        scsi_level = SDpnt->scsi_level;
 772
 773        /*
 774         * Accommodate drivers that want to sleep when they should be in a polling
 775         * loop.
 776         */
 777        SDpnt->disconnect = 0;
 778
 779
 780        /*
 781         * Set the tagged_queue flag for SCSI-II devices that purport to support
 782         * tagged queuing in the INQUIRY data.
 783         */
 784        SDpnt->tagged_queue = 0;
 785        if ((SDpnt->scsi_level >= SCSI_2) &&
 786            (scsi_result[7] & 2) &&
 787            !(bflags & BLIST_NOTQ)) {
 788                SDpnt->tagged_supported = 1;
 789                SDpnt->current_tag = 0;
 790        }
 791        /*
 792         * Some revisions of the Texel CD ROM drives have handshaking problems when
 793         * used with the Seagate controllers.  Before we know what type of device
 794         * we're talking to, we assume it's borken and then change it here if it
 795         * turns out that it isn't a TEXEL drive.
 796         */
 797        if ((bflags & BLIST_BORKEN) == 0)
 798                SDpnt->borken = 0;
 799
 800        /*
 801         * Some devices may not want to have a start command automatically
 802         * issued when a device is added.
 803         */
 804        if (bflags & BLIST_NOSTARTONADD)
 805                SDpnt->no_start_on_add = 1;
 806
 807        /*
 808         * If we want to only allow I/O to one of the luns attached to this device
 809         * at a time, then we set this flag.
 810         */
 811        if (bflags & BLIST_SINGLELUN)
 812                SDpnt->single_lun = 1;
 813
 814        /*
 815         * These devices need this "key" to unlock the devices so we can use it
 816         */
 817        if ((bflags & BLIST_KEY) != 0) {
 818                printk("Unlocked floptical drive.\n");
 819                SDpnt->lockable = 0;
 820                scsi_cmd[0] = MODE_SENSE;
 821                if (shpnt->max_lun <= 8)
 822                        scsi_cmd[1] = (lun << 5) & 0xe0;
 823                else    scsi_cmd[1] = 0;        /* any other idea? */
 824                scsi_cmd[2] = 0x2e;
 825                scsi_cmd[3] = 0;
 826                scsi_cmd[4] = 0x2a;
 827                scsi_cmd[5] = 0;
 828                SRpnt->sr_cmd_len = 0;
 829                SRpnt->sr_data_direction = SCSI_DATA_READ;
 830                scsi_wait_req (SRpnt, (void *) scsi_cmd,
 831                        (void *) scsi_result, 0x2a,
 832                        SCSI_TIMEOUT, 3);
 833        }
 834
 835        scsi_release_request(SRpnt);
 836        SRpnt = NULL;
 837
 838        scsi_release_commandblocks(SDpnt);
 839
 840        /*
 841         * This device was already hooked up to the host in question,
 842         * so at this point we just let go of it and it should be fine.  We do need to
 843         * allocate a new one and attach it to the host so that we can further scan the bus.
 844         */
 845        SDpnt = (Scsi_Device *) kmalloc(sizeof(Scsi_Device), GFP_ATOMIC);
 846        if (!SDpnt) {
 847                printk("scsi: scan_scsis_single: Cannot malloc\n");
 848                return 0;
 849        }
 850        memset(SDpnt, 0, sizeof(Scsi_Device));
 851
 852        *SDpnt2 = SDpnt;
 853        SDpnt->queue_depth = 1;
 854        SDpnt->host = shpnt;
 855        SDpnt->online = TRUE;
 856        SDpnt->scsi_level = scsi_level;
 857
 858        /*
 859         * Register the queue for the device.  All I/O requests will come
 860         * in through here.  We also need to register a pointer to
 861         * ourselves, since the queue handler won't know what device
 862         * the queue actually represents.   We could look it up, but it
 863         * is pointless work.
 864         */
 865        scsi_initialize_queue(SDpnt, shpnt);
 866        SDpnt->host = shpnt;
 867        initialize_merge_fn(SDpnt);
 868
 869        /*
 870         * Mark this device as online, or otherwise we won't be able to do much with it.
 871         */
 872        SDpnt->online = TRUE;
 873
 874        /*
 875         * Initialize the object that we will use to wait for command blocks.
 876         */
 877        init_waitqueue_head(&SDpnt->scpnt_wait);
 878
 879        /*
 880         * Since we just found one device, there had damn well better be one in the list
 881         * already.
 882         */
 883        if (shpnt->host_queue == NULL)
 884                panic("scan_scsis_single: Host queue == NULL\n");
 885
 886        SDtail = shpnt->host_queue;
 887        while (SDtail->next) {
 888                SDtail = SDtail->next;
 889        }
 890
 891        /* Add this device to the linked list at the end */
 892        SDtail->next = SDpnt;
 893        SDpnt->prev = SDtail;
 894        SDpnt->next = NULL;
 895
 896        /*
 897         * Some scsi devices cannot be polled for lun != 0 due to firmware bugs
 898         */
 899        if (bflags & BLIST_NOLUN)
 900                return 0;       /* break; */
 901
 902        /*
 903         * If this device is known to support sparse multiple units, override the
 904         * other settings, and scan all of them.
 905         */
 906        if (bflags & BLIST_SPARSELUN) {
 907                *max_dev_lun = shpnt->max_lun;
 908                *sparse_lun = 1;
 909                return 1;
 910        }
 911        /*
 912         * If this device is known to support multiple units, override the other
 913         * settings, and scan all of them.
 914         */
 915        if (bflags & BLIST_FORCELUN) {
 916                /* 
 917                 * Scanning MAX_SCSI_LUNS units would be a bad idea.
 918                 * Any better idea?
 919                 * I think we need REPORT LUNS in future to avoid scanning
 920                 * of unused LUNs. But, that is another item.
 921                 */
 922                /*
 923                if (*max_dev_lun < shpnt->max_lun)
 924                        *max_dev_lun = shpnt->max_lun;
 925                else    if ((max_scsi_luns >> 1) >= *max_dev_lun)
 926                                *max_dev_lun += shpnt->max_lun;
 927                        else    *max_dev_lun = max_scsi_luns;
 928                */
 929                /*
 930                 * Blech...the above code is broken.  When you have a device
 931                 * that is present, and it is a FORCELUN device, then we
 932                 * need to scan *all* the luns on that device.  Besides,
 933                 * skipping the scanning of LUNs is a false optimization.
 934                 * Scanning for a LUN on a present device is a very fast
 935                 * operation, it's scanning for devices that don't exist that
 936                 * is expensive and slow (although if you are truly scanning
 937                 * through MAX_SCSI_LUNS devices that would be bad, I hope
 938                 * all of the controllers out there set a reasonable value
 939                 * in shpnt->max_lun).  DL
 940                 */
 941                *max_dev_lun = shpnt->max_lun;
 942                return 1;
 943        }
 944        /*
 945         * REGAL CDC-4X: avoid hang after LUN 4
 946         */
 947        if (bflags & BLIST_MAX5LUN) {
 948                *max_dev_lun = 5;
 949                return 1;
 950        }
 951
 952        /*
 953         * We assume the device can't handle lun!=0 if: - it reports scsi-0
 954         * (ANSI SCSI Revision 0) (old drives like MAXTOR XT-3280) or - it
 955         * reports scsi-1 (ANSI SCSI Revision 1) and Response Data Format 0
 956         */
 957        if (((scsi_result[2] & 0x07) == 0)
 958            ||
 959            ((scsi_result[2] & 0x07) == 1 &&
 960             (scsi_result[3] & 0x0f) == 0))
 961                return 0;
 962        return 1;
 963}
 964
 965/*
 966 * The worker for scan_scsis.
 967 * Returns the scsi_level of lun0 on this host, channel and dev (if already
 968 * known), otherwise returns SCSI_2.
 969 */
 970static int find_lun0_scsi_level(unsigned int channel, unsigned int dev,
 971                                struct Scsi_Host *shpnt)
 972{
 973        int res = SCSI_2;
 974        Scsi_Device *SDpnt;
 975
 976        for (SDpnt = shpnt->host_queue; SDpnt; SDpnt = SDpnt->next)
 977        {
 978                if ((0 == SDpnt->lun) && (dev == SDpnt->id) &&
 979                    (channel == SDpnt->channel))
 980                        return (int)SDpnt->scsi_level;
 981        }
 982        /* haven't found lun0, should send INQUIRY but take easy route */
 983        return res;
 984}
 985
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.