WARNING This driver is in beta stages, you may want to use it in production, but you need test it for your hardware configuration. INTRODUCTION This is an SCST driver for ISP Qlogic chipsets commonly used in many SCSI and FC host bus adapters. Supported chipsets are listed in the README file; an incomplete list of supported HBAs can be found in doc/Hardware.txt . It is based on Matthew Jacob's multiplatform driver for ISP chipsets, which has its own page at http://www.feral.com/isp.html . The update for SCST was made by Stanislaw Gruszka for Open-E Inc. Driver operates on the same hardware as qla2x00t, but has one notable adventage over it: support of 24xx series of Qlogic adapters. INSTALLATION: QUICK START Build driver with the following command $ make Copy the firmware image appropriate for your HBA from the Qlogic FTP server ftp://ftp.qlogic.com/outgoing/linux/firmware/ to one of the Linux firmware loader directories (e.g. /lib/firmware, see the udev/hotplug documentation for your distribution). The next step depends on whether you have other QLA modules installed. Note that you can't load an ISP driver when you build other Qlogic drivers in the kernel (kerel oops may occur). Other QLA modules are acceptable, but extra care is needed, first copy modules to a directory, e.g.: $ mkdir /root/qla_isp $ cp linux-2.6/build/*.ko /root/qla_isp Each time you want to run qla_isp, unload all other qla modules $ rmmod qla2x00tgt $ rmmod qla2400 $ rmmod qla2300 $ rmmod qla2200 $ rmmod qla2xxx and load ISP modules directly from the created directory, e.g.: $ insmod /root/qla_isp/isp_scst.ko $ insmod /root/qla_isp/isp_mod.ko If you have neither other QLA drivers from SCST (qla2x00tgt) nor kernel (qla2xxx and friends) you can install in the standard /lib/modules directory: $ make install $ depmod -ea Then load the drivers manually the first time : $ modprobe isp_scst $ modprobe isp_mod Now whenever the system is booted and a QLA card is plugged, modules will load automatically. When the driver is loaded, enable all channels for each HBA to work in target mode. For Fibre Channel adapters you need to write the "enable all" string into the procfs configuration file, e.g.: $ echo "enable all" > /proc/scsi_tgt/qla_isp/3 To unload the isp_mod.ko module you must disable target mode for all cards, e.g.: $ echo "disable all" > /proc/scsi_tgt/qla_isp/3 $ echo "disable all" > /proc/scsi_tgt/qla_isp/4 To attach logical units continue with normal SCST setup. SELECTING FIRMWARE The firmware loading interface allows for choosing the appropriate firmware. However, some firmware images are not available from the Qlogic site, e.g. firmware with multichannel support. That is why you can build a firmware image into the isp_mod module. At the beginning of the isp_linux.h file you need to comment out the following line: #define DISABLE_FW_LOADER 1 Firmware from sources for 24xx supports multichannel (NPIV) SUPPORTED DEVICES You can disable support for selected chipsets by editing the isp_linux.h file. In the following example, only the 2400 chipset is enabled: #define ISP_DISABLE_1080_SUPPORT 1 #define ISP_DISABLE_12160_SUPPORT 1 #define ISP_DISABLE_2100_SUPPORT 1 #define ISP_DISABLE_2200_SUPPORT 1 #define ISP_DISABLE_2300_SUPPORT 1 #define ISP_DISABLE_2322_SUPPORT 1 //#define ISP_DISABLE_2400_SUPPORT 1 TARGET/INITIATOR ROLES The driver can work as either a target or an initiator. Prior to performing the compilation you can establish the default mode the driver will work in by editing the file linux-2.6/build/Makefile - you need to set one of the following values instead of ISP_ROLE_NONE in -DISP_DEFAULT_ROLES=ISP_ROLE_NONE ISP_ROLE_TARGET ISP_ROLE_INITIATOR ISP_ROLE_BOTH You can also establish the driver role during module initialization using the isp_roles option, e.g: $ modprobe isp_mod isp_roles="b0300=initiator" Number "b0300" is a DEVID value based on an address on the PCI bus, which you can find in /proc/scsi/isp/N. Target role will be enabled automatically when activating channels/LUNs in /proc/scsi_tgt/qla_isp/N . The driver can also work as both a target and an initiator simultaneously, but this will probably only function for P2P connections. To make the driver work as a target/initator on one port with a FC switch, you can use N_PORT ID virtualization, as seen below. N_PORT ID VIRTUALIZATION You can add an isp_vports option to the ISP module. It denotes the number of ports(channels) and cannot be greater than 127. Each vport has its own WWN. From the driver point of view each vport is a separate channel. You can define separate role for each of the channels. PROCFS INTERFACE Target configuration interface is located in the following file: /proc/scsi_tgt/qla_isp/N ; where N is the Linux SCSI host number and is the same as for proc/scsi/isp/N and /sys/class/scsi_host/hostN files. The process for enabling options for this file is different for FC and SPI devices. For FC it is enabling/disabling channels, while SPI it is enabling/disabling channels and logical units. For example: FC: $ echo "enable 5" > /proc/scsi_tgt/qla_isp/4 SPI: $ echo "enable 0 1" > /proc/scsi_tgt/qla_isp/5 You may use the string "all" instead of a number e.g.: $echo "disable all all" > /proc/scsi_tgt/qla_isp/5 When all LUNs and channels are disabled, the target role will also become inactive. For N_PORT ID virtualization, when enabling channels, you need to first enable channel 0; when disabling channels, you need to disable channel 0 last. Send question about this driver to scst-devel@lists.sourceforge.net, CC Matthew Jacob and Stanislaw Gruszka .