Ejemplo n.º 1
0
static int proc_print_scsidevice(struct device *dev, void *data)
{
	struct scsi_device *sdev = to_scsi_device(dev);
	struct seq_file *s = data;
	struct Scsi_Host *shost=sdev->host;
	struct scsi_disk *sdkp;
	int i;

        sdkp=(struct scsi_disk*)dev->driver_data;	// ASUS_ADD

        if (strncmp(scsi_device_type(sdev->type), "Direct-Access", 13)==0)	// ASUS ADD
                seq_printf(s, "BusType: %s Diskname: %s ", shost->hostt->name, sdkp->disk->disk_name);
        else
                seq_printf(s, "BusType: %s Diskname: %s ", shost->hostt->name, "NONE");

	seq_printf(s,
		"Host: scsi%d Channel: %02d Id: %02d Lun: %02d\n  Vendor: ",
		sdev->host->host_no, sdev->channel, sdev->id, sdev->lun);
	for (i = 0; i < 8; i++) {
		if (sdev->vendor[i] >= 0x20)
			seq_printf(s, "%c", sdev->vendor[i]);
		else
			seq_printf(s, " ");
	}

	seq_printf(s, " Model: ");
	for (i = 0; i < 16; i++) {
		if (sdev->model[i] >= 0x20)
			seq_printf(s, "%c", sdev->model[i]);
		else
			seq_printf(s, " ");
	}

	seq_printf(s, " Rev: ");
	for (i = 0; i < 4; i++) {
		if (sdev->rev[i] >= 0x20)
			seq_printf(s, "%c", sdev->rev[i]);
		else
			seq_printf(s, " ");
	}

	seq_printf(s, "\n");

	seq_printf(s, "  Type:   %s ", scsi_device_type(sdev->type));
	seq_printf(s, "               ANSI  SCSI revision: %02x",
			sdev->scsi_level - (sdev->scsi_level > 1));
	if (sdev->scsi_level == 2)
		seq_printf(s, " CCS\n");
	else
		seq_printf(s, "\n");

	return 0;
}
Ejemplo n.º 2
0
/**
 * proc_print_scsidevice - return data about this host
 * @dev: A scsi device
 * @data: &struct seq_file to output to.
 *
 * Description: prints Host, Channel, Id, Lun, Vendor, Model, Rev, Type,
 * and revision.
 */
static int proc_print_scsidevice(struct device *dev, void *data)
{
    struct scsi_device *sdev;
    struct seq_file *s = data;
    int i;

    if (!scsi_is_sdev_device(dev))
        goto out;

    sdev = to_scsi_device(dev);
    seq_printf(s,
               "Host: scsi%d Channel: %02d Id: %02d Lun: %02d\n  Vendor: ",
               sdev->host->host_no, sdev->channel, sdev->id, sdev->lun);
    for (i = 0; i < 8; i++) {
        if (sdev->vendor[i] >= 0x20)
            seq_printf(s, "%c", sdev->vendor[i]);
        else
            seq_printf(s, " ");
    }

    seq_printf(s, " Model: ");
    for (i = 0; i < 16; i++) {
        if (sdev->model[i] >= 0x20)
            seq_printf(s, "%c", sdev->model[i]);
        else
            seq_printf(s, " ");
    }

    seq_printf(s, " Rev: ");
    for (i = 0; i < 4; i++) {
        if (sdev->rev[i] >= 0x20)
            seq_printf(s, "%c", sdev->rev[i]);
        else
            seq_printf(s, " ");
    }

    seq_printf(s, "\n");

    seq_printf(s, "  Type:   %s ", scsi_device_type(sdev->type));
    seq_printf(s, "               ANSI  SCSI revision: %02x",
               sdev->scsi_level - (sdev->scsi_level > 1));
    if (sdev->scsi_level == 2)
        seq_printf(s, " CCS\n");
    else
        seq_printf(s, "\n");

out:
    return 0;
}
Ejemplo n.º 3
0
static void
cciss_scsi_remove_entry(ctlr_info_t *h, int hostno, int entry,
	struct scsi2map *removed, int *nremoved)
{
	/* assumes h->ctlr]->scsi_ctlr->lock is held */
	int i;
	struct cciss_scsi_dev_t sd;

	if (entry < 0 || entry >= CCISS_MAX_SCSI_DEVS_PER_HBA) return;
	sd = ccissscsi[h->ctlr].dev[entry];
	removed[*nremoved].bus    = sd.bus;
	removed[*nremoved].target = sd.target;
	removed[*nremoved].lun    = sd.lun;
	(*nremoved)++;
	for (i = entry; i < ccissscsi[h->ctlr].ndevices-1; i++)
		ccissscsi[h->ctlr].dev[i] = ccissscsi[h->ctlr].dev[i+1];
	ccissscsi[h->ctlr].ndevices--;
	dev_info(&h->pdev->dev, "%s device c%db%dt%dl%d removed.\n",
		scsi_device_type(sd.devtype), hostno,
			sd.bus, sd.target, sd.lun);
}
Ejemplo n.º 4
0
static int 
cciss_scsi_add_entry(ctlr_info_t *h, int hostno,
		struct cciss_scsi_dev_t *device,
		struct scsi2map *added, int *nadded)
{
	/* assumes h->scsi_ctlr->lock is held */
	int n = ccissscsi[h->ctlr].ndevices;
	struct cciss_scsi_dev_t *sd;
	int i, bus, target, lun;
	unsigned char addr1[8], addr2[8];

	if (n >= CCISS_MAX_SCSI_DEVS_PER_HBA) {
		dev_warn(&h->pdev->dev, "Too many devices, "
			"some will be inaccessible.\n");
		return -1;
	}

	bus = target = -1;
	lun = 0;
	/* Is this device a non-zero lun of a multi-lun device */
	/* byte 4 of the 8-byte LUN addr will contain the logical unit no. */
	if (device->scsi3addr[4] != 0) {
		/* Search through our list and find the device which */
		/* has the same 8 byte LUN address, excepting byte 4. */
		/* Assign the same bus and target for this new LUN. */
		/* Use the logical unit number from the firmware. */
		memcpy(addr1, device->scsi3addr, 8);
		addr1[4] = 0;
		for (i = 0; i < n; i++) {
			sd = &ccissscsi[h->ctlr].dev[i];
			memcpy(addr2, sd->scsi3addr, 8);
			addr2[4] = 0;
			/* differ only in byte 4? */
			if (memcmp(addr1, addr2, 8) == 0) {
				bus = sd->bus;
				target = sd->target;
				lun = device->scsi3addr[4];
				break;
			}
		}
	}

	sd = &ccissscsi[h->ctlr].dev[n];
	if (lun == 0) {
		if (find_bus_target_lun(h,
			&sd->bus, &sd->target, &sd->lun) != 0)
			return -1;
	} else {
		sd->bus = bus;
		sd->target = target;
		sd->lun = lun;
	}
	added[*nadded].bus = sd->bus;
	added[*nadded].target = sd->target;
	added[*nadded].lun = sd->lun;
	(*nadded)++;

	memcpy(sd->scsi3addr, device->scsi3addr, 8);
	memcpy(sd->vendor, device->vendor, sizeof(sd->vendor));
	memcpy(sd->revision, device->revision, sizeof(sd->revision));
	memcpy(sd->device_id, device->device_id, sizeof(sd->device_id));
	sd->devtype = device->devtype;

	ccissscsi[h->ctlr].ndevices++;

	/* initially, (before registering with scsi layer) we don't 
	   know our hostno and we don't want to print anything first 
	   time anyway (the scsi layer's inquiries will show that info) */
	if (hostno != -1)
		dev_info(&h->pdev->dev, "%s device c%db%dt%dl%d added.\n",
			scsi_device_type(sd->devtype), hostno,
			sd->bus, sd->target, sd->lun);
	return 0;
}