Loading drivers/scsi/Kconfig +25 −1 Original line number Diff line number Diff line Loading @@ -229,7 +229,7 @@ config SCSI_FC_ATTRS config SCSI_ISCSI_ATTRS tristate "iSCSI Transport Attributes" depends on SCSI depends on SCSI && NET help If you wish to export transport-specific information about each attached iSCSI device to sysfs, say Y. Loading @@ -247,6 +247,30 @@ endmenu menu "SCSI low-level drivers" depends on SCSI!=n config ISCSI_TCP tristate "iSCSI Initiator over TCP/IP" depends on SCSI && INET select CRYPTO select CRYPTO_MD5 select CRYPTO_CRC32C select SCSI_ISCSI_ATTRS help The iSCSI Driver provides a host with the ability to access storage through an IP network. The driver uses the iSCSI protocol to transport SCSI requests and responses over a TCP/IP network between the host (the "initiator") and "targets". Architecturally, the iSCSI driver combines with the host's TCP/IP stack, network drivers, and Network Interface Card (NIC) to provide the same functions as a SCSI or a Fibre Channel (FC) adapter driver with a Host Bus Adapter (HBA). To compile this driver as a module, choose M here: the module will be called iscsi_tcp. The userspace component needed to initialize the driver, documentation, and sample configuration files can be found here: http://linux-iscsi.sf.net config SGIWD93_SCSI tristate "SGI WD93C93 SCSI Driver" depends on SGI_IP22 && SCSI Loading drivers/scsi/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ obj-$(CONFIG_SCSI_FC_ATTRS) += scsi_transport_fc.o obj-$(CONFIG_SCSI_ISCSI_ATTRS) += scsi_transport_iscsi.o obj-$(CONFIG_SCSI_SAS_ATTRS) += scsi_transport_sas.o obj-$(CONFIG_ISCSI_TCP) += iscsi_tcp.o obj-$(CONFIG_SCSI_AMIGA7XX) += amiga7xx.o 53c7xx.o obj-$(CONFIG_A3000_SCSI) += a3000.o wd33c93.o obj-$(CONFIG_A2091_SCSI) += a2091.o wd33c93.o Loading drivers/scsi/aacraid/aachba.c +42 −15 Original line number Diff line number Diff line Loading @@ -608,17 +608,43 @@ static char *container_types[] = { * files instead of in OS dependant driver source. */ static void setinqstr(int devtype, void *data, int tindex) static void setinqstr(struct aac_dev *dev, void *data, int tindex) { struct scsi_inq *str; struct aac_driver_ident *mp; mp = aac_get_driver_ident(devtype); str = (struct scsi_inq *)(data); /* cast data to scsi inq block */ memset(str, ' ', sizeof(*str)); if (dev->supplement_adapter_info.AdapterTypeText[0]) { char * cp = dev->supplement_adapter_info.AdapterTypeText; int c = sizeof(str->vid); while (*cp && *cp != ' ' && --c) ++cp; c = *cp; *cp = '\0'; inqstrcpy (dev->supplement_adapter_info.AdapterTypeText, str->vid); *cp = c; while (*cp && *cp != ' ') ++cp; while (*cp == ' ') ++cp; /* last six chars reserved for vol type */ c = 0; if (strlen(cp) > sizeof(str->pid)) { c = cp[sizeof(str->pid)]; cp[sizeof(str->pid)] = '\0'; } inqstrcpy (cp, str->pid); if (c) cp[sizeof(str->pid)] = c; } else { struct aac_driver_ident *mp = aac_get_driver_ident(dev->cardtype); inqstrcpy (mp->vname, str->vid); inqstrcpy (mp->model, str->pid); /* last six chars reserved for vol type */ /* last six chars reserved for vol type */ inqstrcpy (mp->model, str->pid); } if (tindex < (sizeof(container_types)/sizeof(char *))){ char *findit = str->pid; Loading @@ -627,6 +653,8 @@ static void setinqstr(int devtype, void *data, int tindex) /* RAID is superfluous in the context of a RAID device */ if (memcmp(findit-4, "RAID", 4) == 0) *(findit -= 4) = ' '; if (((findit - str->pid) + strlen(container_types[tindex])) < (sizeof(str->pid) + sizeof(str->prl))) inqstrcpy (container_types[tindex], findit + 1); } inqstrcpy ("V1.0", str->prl); Loading Loading @@ -822,12 +850,12 @@ int aac_get_adapter_info(struct aac_dev* dev) dev->dac_support = (dacmode!=0); } if(dev->dac_support != 0) { if (!pci_set_dma_mask(dev->pdev, 0xFFFFFFFFFFFFFFFFULL) && !pci_set_consistent_dma_mask(dev->pdev, 0xFFFFFFFFFFFFFFFFULL)) { if (!pci_set_dma_mask(dev->pdev, DMA_64BIT_MASK) && !pci_set_consistent_dma_mask(dev->pdev, DMA_64BIT_MASK)) { printk(KERN_INFO"%s%d: 64 Bit DAC enabled\n", dev->name, dev->id); } else if (!pci_set_dma_mask(dev->pdev, 0xFFFFFFFFULL) && !pci_set_consistent_dma_mask(dev->pdev, 0xFFFFFFFFULL)) { } else if (!pci_set_dma_mask(dev->pdev, DMA_32BIT_MASK) && !pci_set_consistent_dma_mask(dev->pdev, DMA_32BIT_MASK)) { printk(KERN_INFO"%s%d: DMA mask set failed, 64 Bit DAC disabled\n", dev->name, dev->id); dev->dac_support = 0; Loading Loading @@ -1438,7 +1466,6 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd) struct Scsi_Host *host = scsicmd->device->host; struct aac_dev *dev = (struct aac_dev *)host->hostdata; struct fsa_dev_info *fsa_dev_ptr = dev->fsa_dev; int cardtype = dev->cardtype; int ret; /* Loading Loading @@ -1542,14 +1569,14 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd) * see: <vendor>.c i.e. aac.c */ if (scsicmd->device->id == host->this_id) { setinqstr(cardtype, (void *) (inq_data.inqd_vid), (sizeof(container_types)/sizeof(char *))); setinqstr(dev, (void *) (inq_data.inqd_vid), (sizeof(container_types)/sizeof(char *))); inq_data.inqd_pdt = INQD_PDT_PROC; /* Processor device */ aac_internal_transfer(scsicmd, &inq_data, 0, sizeof(inq_data)); scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; scsicmd->scsi_done(scsicmd); return 0; } setinqstr(cardtype, (void *) (inq_data.inqd_vid), fsa_dev_ptr[cid].type); setinqstr(dev, (void *) (inq_data.inqd_vid), fsa_dev_ptr[cid].type); inq_data.inqd_pdt = INQD_PDT_DA; /* Direct/random access device */ aac_internal_transfer(scsicmd, &inq_data, 0, sizeof(inq_data)); return aac_get_container_name(scsicmd, cid); Loading drivers/scsi/aacraid/aacraid.h +1 −1 Original line number Diff line number Diff line Loading @@ -1560,7 +1560,7 @@ struct fib_ioctl struct revision { __le32 compat; u32 compat; __le32 version; __le32 build; }; Loading drivers/scsi/aacraid/commctrl.c +3 −3 Original line number Diff line number Diff line Loading @@ -408,7 +408,7 @@ static int check_revision(struct aac_dev *dev, void __user *arg) char *driver_version = aac_driver_version; u32 version; response.compat = cpu_to_le32(1); response.compat = 1; version = (simple_strtol(driver_version, &driver_version, 10) << 24) | 0x00000400; version += simple_strtol(driver_version + 1, &driver_version, 10) << 16; Loading Loading @@ -574,7 +574,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) rcode = -ENOMEM; goto cleanup; } sg_user[i] = (void __user *)usg->sg[i].addr; sg_user[i] = (void __user *)(long)usg->sg[i].addr; sg_list[i] = p; // save so we can clean up later sg_indx = i; Loading Loading @@ -624,7 +624,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) rcode = -ENOMEM; goto cleanup; } sg_user[i] = (void __user *)upsg->sg[i].addr; sg_user[i] = (void __user *)(long)upsg->sg[i].addr; sg_list[i] = p; // save so we can clean up later sg_indx = i; Loading Loading
drivers/scsi/Kconfig +25 −1 Original line number Diff line number Diff line Loading @@ -229,7 +229,7 @@ config SCSI_FC_ATTRS config SCSI_ISCSI_ATTRS tristate "iSCSI Transport Attributes" depends on SCSI depends on SCSI && NET help If you wish to export transport-specific information about each attached iSCSI device to sysfs, say Y. Loading @@ -247,6 +247,30 @@ endmenu menu "SCSI low-level drivers" depends on SCSI!=n config ISCSI_TCP tristate "iSCSI Initiator over TCP/IP" depends on SCSI && INET select CRYPTO select CRYPTO_MD5 select CRYPTO_CRC32C select SCSI_ISCSI_ATTRS help The iSCSI Driver provides a host with the ability to access storage through an IP network. The driver uses the iSCSI protocol to transport SCSI requests and responses over a TCP/IP network between the host (the "initiator") and "targets". Architecturally, the iSCSI driver combines with the host's TCP/IP stack, network drivers, and Network Interface Card (NIC) to provide the same functions as a SCSI or a Fibre Channel (FC) adapter driver with a Host Bus Adapter (HBA). To compile this driver as a module, choose M here: the module will be called iscsi_tcp. The userspace component needed to initialize the driver, documentation, and sample configuration files can be found here: http://linux-iscsi.sf.net config SGIWD93_SCSI tristate "SGI WD93C93 SCSI Driver" depends on SGI_IP22 && SCSI Loading
drivers/scsi/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ obj-$(CONFIG_SCSI_FC_ATTRS) += scsi_transport_fc.o obj-$(CONFIG_SCSI_ISCSI_ATTRS) += scsi_transport_iscsi.o obj-$(CONFIG_SCSI_SAS_ATTRS) += scsi_transport_sas.o obj-$(CONFIG_ISCSI_TCP) += iscsi_tcp.o obj-$(CONFIG_SCSI_AMIGA7XX) += amiga7xx.o 53c7xx.o obj-$(CONFIG_A3000_SCSI) += a3000.o wd33c93.o obj-$(CONFIG_A2091_SCSI) += a2091.o wd33c93.o Loading
drivers/scsi/aacraid/aachba.c +42 −15 Original line number Diff line number Diff line Loading @@ -608,17 +608,43 @@ static char *container_types[] = { * files instead of in OS dependant driver source. */ static void setinqstr(int devtype, void *data, int tindex) static void setinqstr(struct aac_dev *dev, void *data, int tindex) { struct scsi_inq *str; struct aac_driver_ident *mp; mp = aac_get_driver_ident(devtype); str = (struct scsi_inq *)(data); /* cast data to scsi inq block */ memset(str, ' ', sizeof(*str)); if (dev->supplement_adapter_info.AdapterTypeText[0]) { char * cp = dev->supplement_adapter_info.AdapterTypeText; int c = sizeof(str->vid); while (*cp && *cp != ' ' && --c) ++cp; c = *cp; *cp = '\0'; inqstrcpy (dev->supplement_adapter_info.AdapterTypeText, str->vid); *cp = c; while (*cp && *cp != ' ') ++cp; while (*cp == ' ') ++cp; /* last six chars reserved for vol type */ c = 0; if (strlen(cp) > sizeof(str->pid)) { c = cp[sizeof(str->pid)]; cp[sizeof(str->pid)] = '\0'; } inqstrcpy (cp, str->pid); if (c) cp[sizeof(str->pid)] = c; } else { struct aac_driver_ident *mp = aac_get_driver_ident(dev->cardtype); inqstrcpy (mp->vname, str->vid); inqstrcpy (mp->model, str->pid); /* last six chars reserved for vol type */ /* last six chars reserved for vol type */ inqstrcpy (mp->model, str->pid); } if (tindex < (sizeof(container_types)/sizeof(char *))){ char *findit = str->pid; Loading @@ -627,6 +653,8 @@ static void setinqstr(int devtype, void *data, int tindex) /* RAID is superfluous in the context of a RAID device */ if (memcmp(findit-4, "RAID", 4) == 0) *(findit -= 4) = ' '; if (((findit - str->pid) + strlen(container_types[tindex])) < (sizeof(str->pid) + sizeof(str->prl))) inqstrcpy (container_types[tindex], findit + 1); } inqstrcpy ("V1.0", str->prl); Loading Loading @@ -822,12 +850,12 @@ int aac_get_adapter_info(struct aac_dev* dev) dev->dac_support = (dacmode!=0); } if(dev->dac_support != 0) { if (!pci_set_dma_mask(dev->pdev, 0xFFFFFFFFFFFFFFFFULL) && !pci_set_consistent_dma_mask(dev->pdev, 0xFFFFFFFFFFFFFFFFULL)) { if (!pci_set_dma_mask(dev->pdev, DMA_64BIT_MASK) && !pci_set_consistent_dma_mask(dev->pdev, DMA_64BIT_MASK)) { printk(KERN_INFO"%s%d: 64 Bit DAC enabled\n", dev->name, dev->id); } else if (!pci_set_dma_mask(dev->pdev, 0xFFFFFFFFULL) && !pci_set_consistent_dma_mask(dev->pdev, 0xFFFFFFFFULL)) { } else if (!pci_set_dma_mask(dev->pdev, DMA_32BIT_MASK) && !pci_set_consistent_dma_mask(dev->pdev, DMA_32BIT_MASK)) { printk(KERN_INFO"%s%d: DMA mask set failed, 64 Bit DAC disabled\n", dev->name, dev->id); dev->dac_support = 0; Loading Loading @@ -1438,7 +1466,6 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd) struct Scsi_Host *host = scsicmd->device->host; struct aac_dev *dev = (struct aac_dev *)host->hostdata; struct fsa_dev_info *fsa_dev_ptr = dev->fsa_dev; int cardtype = dev->cardtype; int ret; /* Loading Loading @@ -1542,14 +1569,14 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd) * see: <vendor>.c i.e. aac.c */ if (scsicmd->device->id == host->this_id) { setinqstr(cardtype, (void *) (inq_data.inqd_vid), (sizeof(container_types)/sizeof(char *))); setinqstr(dev, (void *) (inq_data.inqd_vid), (sizeof(container_types)/sizeof(char *))); inq_data.inqd_pdt = INQD_PDT_PROC; /* Processor device */ aac_internal_transfer(scsicmd, &inq_data, 0, sizeof(inq_data)); scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; scsicmd->scsi_done(scsicmd); return 0; } setinqstr(cardtype, (void *) (inq_data.inqd_vid), fsa_dev_ptr[cid].type); setinqstr(dev, (void *) (inq_data.inqd_vid), fsa_dev_ptr[cid].type); inq_data.inqd_pdt = INQD_PDT_DA; /* Direct/random access device */ aac_internal_transfer(scsicmd, &inq_data, 0, sizeof(inq_data)); return aac_get_container_name(scsicmd, cid); Loading
drivers/scsi/aacraid/aacraid.h +1 −1 Original line number Diff line number Diff line Loading @@ -1560,7 +1560,7 @@ struct fib_ioctl struct revision { __le32 compat; u32 compat; __le32 version; __le32 build; }; Loading
drivers/scsi/aacraid/commctrl.c +3 −3 Original line number Diff line number Diff line Loading @@ -408,7 +408,7 @@ static int check_revision(struct aac_dev *dev, void __user *arg) char *driver_version = aac_driver_version; u32 version; response.compat = cpu_to_le32(1); response.compat = 1; version = (simple_strtol(driver_version, &driver_version, 10) << 24) | 0x00000400; version += simple_strtol(driver_version + 1, &driver_version, 10) << 16; Loading Loading @@ -574,7 +574,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) rcode = -ENOMEM; goto cleanup; } sg_user[i] = (void __user *)usg->sg[i].addr; sg_user[i] = (void __user *)(long)usg->sg[i].addr; sg_list[i] = p; // save so we can clean up later sg_indx = i; Loading Loading @@ -624,7 +624,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) rcode = -ENOMEM; goto cleanup; } sg_user[i] = (void __user *)upsg->sg[i].addr; sg_user[i] = (void __user *)(long)upsg->sg[i].addr; sg_list[i] = p; // save so we can clean up later sg_indx = i; Loading