diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/message/fusion/Kconfig | 1 | ||||
| -rw-r--r-- | drivers/message/fusion/mptbase.c | 32 | ||||
| -rw-r--r-- | drivers/message/fusion/mptbase.h | 29 | ||||
| -rw-r--r-- | drivers/message/fusion/mptspi.c | 2 |
4 files changed, 64 insertions, 0 deletions
diff --git a/drivers/message/fusion/Kconfig b/drivers/message/fusion/Kconfig index f55cc03a75c9..3c44a2fc4efb 100644 --- a/drivers/message/fusion/Kconfig +++ b/drivers/message/fusion/Kconfig | |||
| @@ -20,6 +20,7 @@ config FUSION_SPI | |||
| 20 | LSI53C1020A | 20 | LSI53C1020A |
| 21 | LSI53C1030 | 21 | LSI53C1030 |
| 22 | LSI53C1035 | 22 | LSI53C1035 |
| 23 | ATTO UL4D | ||
| 23 | 24 | ||
| 24 | config FUSION_FC | 25 | config FUSION_FC |
| 25 | tristate "Fusion MPT ScsiHost drivers for FC" | 26 | tristate "Fusion MPT ScsiHost drivers for FC" |
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c index 414c109f4cf5..828f0ca7c1b3 100644 --- a/drivers/message/fusion/mptbase.c +++ b/drivers/message/fusion/mptbase.c | |||
| @@ -4888,6 +4888,38 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum) | |||
| 4888 | /* Nvram data is left with INVALID mark | 4888 | /* Nvram data is left with INVALID mark |
| 4889 | */ | 4889 | */ |
| 4890 | rc = 1; | 4890 | rc = 1; |
| 4891 | } else if (ioc->pcidev->vendor == PCI_VENDOR_ID_ATTO) { | ||
| 4892 | |||
| 4893 | /* This is an ATTO adapter, read Page2 accordingly | ||
| 4894 | */ | ||
| 4895 | ATTO_SCSIPortPage2_t *pPP2 = (ATTO_SCSIPortPage2_t *) pbuf; | ||
| 4896 | ATTODeviceInfo_t *pdevice = NULL; | ||
| 4897 | u16 ATTOFlags; | ||
| 4898 | |||
| 4899 | /* Save the Port Page 2 data | ||
| 4900 | * (reformat into a 32bit quantity) | ||
| 4901 | */ | ||
| 4902 | for (ii=0; ii < MPT_MAX_SCSI_DEVICES; ii++) { | ||
| 4903 | pdevice = &pPP2->DeviceSettings[ii]; | ||
| 4904 | ATTOFlags = le16_to_cpu(pdevice->ATTOFlags); | ||
| 4905 | data = 0; | ||
| 4906 | |||
| 4907 | /* Translate ATTO device flags to LSI format | ||
| 4908 | */ | ||
| 4909 | if (ATTOFlags & ATTOFLAG_DISC) | ||
| 4910 | data |= (MPI_SCSIPORTPAGE2_DEVICE_DISCONNECT_ENABLE); | ||
| 4911 | if (ATTOFlags & ATTOFLAG_ID_ENB) | ||
| 4912 | data |= (MPI_SCSIPORTPAGE2_DEVICE_ID_SCAN_ENABLE); | ||
| 4913 | if (ATTOFlags & ATTOFLAG_LUN_ENB) | ||
| 4914 | data |= (MPI_SCSIPORTPAGE2_DEVICE_LUN_SCAN_ENABLE); | ||
| 4915 | if (ATTOFlags & ATTOFLAG_TAGGED) | ||
| 4916 | data |= (MPI_SCSIPORTPAGE2_DEVICE_TAG_QUEUE_ENABLE); | ||
| 4917 | if (!(ATTOFlags & ATTOFLAG_WIDE_ENB)) | ||
| 4918 | data |= (MPI_SCSIPORTPAGE2_DEVICE_WIDE_DISABLE); | ||
| 4919 | |||
| 4920 | data = (data << 16) | (pdevice->Period << 8) | 10; | ||
| 4921 | ioc->spi_data.nvram[ii] = data; | ||
| 4922 | } | ||
| 4891 | } else { | 4923 | } else { |
| 4892 | SCSIPortPage2_t *pPP2 = (SCSIPortPage2_t *) pbuf; | 4924 | SCSIPortPage2_t *pPP2 = (SCSIPortPage2_t *) pbuf; |
| 4893 | MpiDeviceInfo_t *pdevice = NULL; | 4925 | MpiDeviceInfo_t *pdevice = NULL; |
diff --git a/drivers/message/fusion/mptbase.h b/drivers/message/fusion/mptbase.h index 15ff22645844..a8c80805e170 100644 --- a/drivers/message/fusion/mptbase.h +++ b/drivers/message/fusion/mptbase.h | |||
| @@ -194,6 +194,35 @@ | |||
| 194 | 194 | ||
| 195 | /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ | 195 | /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ |
| 196 | /* | 196 | /* |
| 197 | * ATTO UL4D associated structures and defines | ||
| 198 | */ | ||
| 199 | #define ATTOFLAG_DISC 0x0001 | ||
| 200 | #define ATTOFLAG_TAGGED 0x0002 | ||
| 201 | #define ATTOFLAG_WIDE_ENB 0x0008 | ||
| 202 | #define ATTOFLAG_ID_ENB 0x0010 | ||
| 203 | #define ATTOFLAG_LUN_ENB 0x0060 | ||
| 204 | |||
| 205 | typedef struct _ATTO_DEVICE_INFO | ||
| 206 | { | ||
| 207 | u8 Offset; /* 00h */ | ||
| 208 | u8 Period; /* 01h */ | ||
| 209 | u16 ATTOFlags; /* 02h */ | ||
| 210 | } ATTO_DEVICE_INFO, MPI_POINTER PTR_ATTO_DEVICE_INFO, | ||
| 211 | ATTODeviceInfo_t, MPI_POINTER pATTODeviceInfo_t; | ||
| 212 | |||
| 213 | typedef struct _ATTO_CONFIG_PAGE_SCSI_PORT_2 | ||
| 214 | { | ||
| 215 | CONFIG_PAGE_HEADER Header; /* 00h */ | ||
| 216 | u16 PortFlags; /* 04h */ | ||
| 217 | u16 Unused1; /* 06h */ | ||
| 218 | u32 Unused2; /* 08h */ | ||
| 219 | ATTO_DEVICE_INFO DeviceSettings[16]; /* 0Ch */ | ||
| 220 | } fATTO_CONFIG_PAGE_SCSI_PORT_2, MPI_POINTER PTR_ATTO_CONFIG_PAGE_SCSI_PORT_2, | ||
| 221 | ATTO_SCSIPortPage2_t, MPI_POINTER pATTO_SCSIPortPage2_t; | ||
| 222 | |||
| 223 | |||
| 224 | /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ | ||
| 225 | /* | ||
| 197 | * MPT protocol driver defs... | 226 | * MPT protocol driver defs... |
| 198 | */ | 227 | */ |
| 199 | typedef enum { | 228 | typedef enum { |
diff --git a/drivers/message/fusion/mptspi.c b/drivers/message/fusion/mptspi.c index 8c98420640a5..25df3bfdcb0b 100644 --- a/drivers/message/fusion/mptspi.c +++ b/drivers/message/fusion/mptspi.c | |||
| @@ -1190,6 +1190,8 @@ static struct spi_function_template mptspi_transport_functions = { | |||
| 1190 | static struct pci_device_id mptspi_pci_table[] = { | 1190 | static struct pci_device_id mptspi_pci_table[] = { |
| 1191 | { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_53C1030, | 1191 | { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_53C1030, |
| 1192 | PCI_ANY_ID, PCI_ANY_ID }, | 1192 | PCI_ANY_ID, PCI_ANY_ID }, |
| 1193 | { PCI_VENDOR_ID_ATTO, MPI_MANUFACTPAGE_DEVID_53C1030, | ||
| 1194 | PCI_ANY_ID, PCI_ANY_ID }, | ||
| 1193 | { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_53C1035, | 1195 | { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_53C1035, |
| 1194 | PCI_ANY_ID, PCI_ANY_ID }, | 1196 | PCI_ANY_ID, PCI_ANY_ID }, |
| 1195 | {0} /* Terminating entry */ | 1197 | {0} /* Terminating entry */ |
