Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6: (30 commits) [SCSI] qla1280: set residual correctly [SCSI] fusion: bump version [SCSI] fusion: MODULE_VERSION support [SCSI] fusion: power pc and miscellaneous bug fixs [SCSI] fusion: fibre channel: return DID_ERROR for MPI_IOCSTATUS_SCSI_IOC_TERMINATED [SCSI] megaraid_sas: Update module author [SCSI] 3ware 8000 serialize reset code [SCSI] sr: fix error code check in sr_block_ioctl() [SCSI] scsi: lpfc error path fix [SCSI] aacraid: Product List Update [SCSI] libiscsi: fix senselen calculation [SCSI] iscsi: simplify IPv6 and IPv4 address printing [SCSI] iscsi: newline in printk [SCSI] iscsi: fix crypto_alloc_hash() error check [SCSI] iscsi: fix 2.6.19 data digest calculation bug [SCSI] scsi_scan: fix report lun problems with CDROM or RBC devices [SCSI] qla2xxx: Update version number to 8.01.07-k4. [SCSI] qla2xxx: Use generic isp_ops.fw_dump() function. [SCSI] qla2xxx: Perform a fw-dump when an ISP23xx RISC-paused state is detected. [SCSI] qla2xxx: Correct reset handling logic. ...
This commit is contained in:
commit
365bbe0d0c
|
@ -11,43 +11,42 @@ the original).
|
||||||
Supported Cards/Chipsets
|
Supported Cards/Chipsets
|
||||||
-------------------------
|
-------------------------
|
||||||
PCI ID (pci.ids) OEM Product
|
PCI ID (pci.ids) OEM Product
|
||||||
9005:0283:9005:0283 Adaptec Catapult (3210S with arc firmware)
|
|
||||||
9005:0284:9005:0284 Adaptec Tomcat (3410S with arc firmware)
|
|
||||||
9005:0285:9005:0285 Adaptec 2200S (Vulcan)
|
9005:0285:9005:0285 Adaptec 2200S (Vulcan)
|
||||||
9005:0285:9005:0286 Adaptec 2120S (Crusader)
|
9005:0285:9005:0286 Adaptec 2120S (Crusader)
|
||||||
9005:0285:9005:0287 Adaptec 2200S (Vulcan-2m)
|
9005:0285:9005:0287 Adaptec 2200S (Vulcan-2m)
|
||||||
9005:0285:9005:0288 Adaptec 3230S (Harrier)
|
9005:0285:9005:0288 Adaptec 3230S (Harrier)
|
||||||
9005:0285:9005:0289 Adaptec 3240S (Tornado)
|
9005:0285:9005:0289 Adaptec 3240S (Tornado)
|
||||||
9005:0285:9005:028a Adaptec 2020ZCR (Skyhawk)
|
9005:0285:9005:028a Adaptec 2020ZCR (Skyhawk)
|
||||||
9005:0285:9005:028b Adaptec 2025ZCR (Terminator)
|
9005:0285:9005:028b Adaptec 2025ZCR (Terminator)
|
||||||
9005:0286:9005:028c Adaptec 2230S (Lancer)
|
9005:0286:9005:028c Adaptec 2230S (Lancer)
|
||||||
9005:0286:9005:028c Adaptec 2230SLP (Lancer)
|
9005:0286:9005:028c Adaptec 2230SLP (Lancer)
|
||||||
9005:0286:9005:028d Adaptec 2130S (Lancer)
|
9005:0286:9005:028d Adaptec 2130S (Lancer)
|
||||||
9005:0285:9005:028e Adaptec 2020SA (Skyhawk)
|
9005:0285:9005:028e Adaptec 2020SA (Skyhawk)
|
||||||
9005:0285:9005:028f Adaptec 2025SA (Terminator)
|
9005:0285:9005:028f Adaptec 2025SA (Terminator)
|
||||||
9005:0285:9005:0290 Adaptec 2410SA (Jaguar)
|
9005:0285:9005:0290 Adaptec 2410SA (Jaguar)
|
||||||
9005:0285:103c:3227 Adaptec 2610SA (Bearcat HP release)
|
9005:0285:103c:3227 Adaptec 2610SA (Bearcat HP release)
|
||||||
9005:0285:9005:0293 Adaptec 21610SA (Corsair-16)
|
9005:0285:9005:0293 Adaptec 21610SA (Corsair-16)
|
||||||
9005:0285:9005:0296 Adaptec 2240S (SabreExpress)
|
9005:0285:9005:0296 Adaptec 2240S (SabreExpress)
|
||||||
9005:0285:9005:0292 Adaptec 2810SA (Corsair-8)
|
9005:0285:9005:0292 Adaptec 2810SA (Corsair-8)
|
||||||
9005:0285:9005:0294 Adaptec Prowler
|
9005:0285:9005:0297 Adaptec 4005 (AvonPark)
|
||||||
9005:0285:9005:0297 Adaptec 4005SAS (AvonPark)
|
9005:0285:9005:0298 Adaptec 4000 (BlackBird)
|
||||||
9005:0285:9005:0298 Adaptec 4000SAS (BlackBird)
|
|
||||||
9005:0285:9005:0299 Adaptec 4800SAS (Marauder-X)
|
9005:0285:9005:0299 Adaptec 4800SAS (Marauder-X)
|
||||||
9005:0285:9005:029a Adaptec 4805SAS (Marauder-E)
|
9005:0285:9005:029a Adaptec 4805SAS (Marauder-E)
|
||||||
9005:0286:9005:029b Adaptec 2820SA (Intruder)
|
9005:0286:9005:029b Adaptec 2820SA (Intruder)
|
||||||
9005:0286:9005:029c Adaptec 2620SA (Intruder)
|
9005:0286:9005:029c Adaptec 2620SA (Intruder)
|
||||||
9005:0286:9005:029d Adaptec 2420SA (Intruder HP release)
|
9005:0286:9005:029d Adaptec 2420SA (Intruder HP release)
|
||||||
9005:0286:9005:02a2 Adaptec 3800SAS (Hurricane44)
|
9005:0286:9005:02ac Adaptec 1800 (Typhoon44)
|
||||||
9005:0286:9005:02a7 Adaptec 3805SAS (Hurricane80)
|
9005:0285:9005:02b5 Adaptec 5445 (Voodoo44)
|
||||||
9005:0286:9005:02a8 Adaptec 3400SAS (Hurricane40)
|
9005:0285:9005:02b6 Adaptec 5805 (Voodoo80)
|
||||||
9005:0286:9005:02ac Adaptec 1800SAS (Typhoon44)
|
9005:0285:9005:02b7 Adaptec 5085 (Voodoo08)
|
||||||
9005:0286:9005:02b3 Adaptec 2400SAS (Hurricane40lm)
|
9005:0285:9005:02bb Adaptec 3405 (Marauder40LP)
|
||||||
9005:0285:9005:02b5 Adaptec ASR5800 (Voodoo44)
|
9005:0285:9005:02bc Adaptec 3805 (Marauder80LP)
|
||||||
9005:0285:9005:02b6 Adaptec ASR5805 (Voodoo80)
|
9005:0285:9005:02c7 Adaptec 3085 (Marauder08ELP)
|
||||||
9005:0285:9005:02b7 Adaptec ASR5808 (Voodoo08)
|
9005:0285:9005:02bd Adaptec 31205 (Marauder120)
|
||||||
|
9005:0285:9005:02be Adaptec 31605 (Marauder160)
|
||||||
|
9005:0285:9005:02c3 Adaptec 51205 (Voodoo120)
|
||||||
|
9005:0285:9005:02c4 Adaptec 51605 (Voodoo160)
|
||||||
1011:0046:9005:0364 Adaptec 5400S (Mustang)
|
1011:0046:9005:0364 Adaptec 5400S (Mustang)
|
||||||
1011:0046:9005:0365 Adaptec 5400S (Mustang)
|
|
||||||
9005:0287:9005:0800 Adaptec Themisto (Jupiter)
|
9005:0287:9005:0800 Adaptec Themisto (Jupiter)
|
||||||
9005:0200:9005:0200 Adaptec Themisto (Jupiter)
|
9005:0200:9005:0200 Adaptec Themisto (Jupiter)
|
||||||
9005:0286:9005:0800 Adaptec Callisto (Jupiter)
|
9005:0286:9005:0800 Adaptec Callisto (Jupiter)
|
||||||
|
@ -68,21 +67,32 @@ Supported Cards/Chipsets
|
||||||
9005:0285:17aa:0287 Legend S230 (Vulcan)
|
9005:0285:17aa:0287 Legend S230 (Vulcan)
|
||||||
9005:0285:9005:0290 IBM ServeRAID 7t (Jaguar)
|
9005:0285:9005:0290 IBM ServeRAID 7t (Jaguar)
|
||||||
9005:0285:1014:02F2 IBM ServeRAID 8i (AvonPark)
|
9005:0285:1014:02F2 IBM ServeRAID 8i (AvonPark)
|
||||||
9005:0285:1014:0312 IBM ServeRAID 8i (AvonParkLite)
|
|
||||||
9005:0286:1014:9540 IBM ServeRAID 8k/8k-l4 (AuroraLite)
|
9005:0286:1014:9540 IBM ServeRAID 8k/8k-l4 (AuroraLite)
|
||||||
9005:0286:1014:9580 IBM ServeRAID 8k/8k-l8 (Aurora)
|
9005:0286:1014:9580 IBM ServeRAID 8k/8k-l8 (Aurora)
|
||||||
9005:0286:1014:034d IBM ServeRAID 8s (Hurricane)
|
9005:0285:1014:034d IBM ServeRAID 8s (Marauder-E)
|
||||||
9005:0286:9005:029e ICP ICP9024R0 (Lancer)
|
9005:0286:9005:029e ICP ICP9024RO (Lancer)
|
||||||
9005:0286:9005:029f ICP ICP9014R0 (Lancer)
|
9005:0286:9005:029f ICP ICP9014RO (Lancer)
|
||||||
9005:0286:9005:02a0 ICP ICP9047MA (Lancer)
|
9005:0286:9005:02a0 ICP ICP9047MA (Lancer)
|
||||||
9005:0286:9005:02a1 ICP ICP9087MA (Lancer)
|
9005:0286:9005:02a1 ICP ICP9087MA (Lancer)
|
||||||
9005:0286:9005:02a3 ICP ICP5445AU (Hurricane44)
|
9005:0285:9005:02a4 ICP ICP9085LI (Marauder-X)
|
||||||
9005:0286:9005:02a4 ICP ICP9085LI (Marauder-X)
|
9005:0285:9005:02a5 ICP ICP5085BR (Marauder-E)
|
||||||
9005:0286:9005:02a5 ICP ICP5085BR (Marauder-E)
|
|
||||||
9005:0286:9005:02a6 ICP ICP9067MA (Intruder-6)
|
9005:0286:9005:02a6 ICP ICP9067MA (Intruder-6)
|
||||||
9005:0286:9005:02a9 ICP ICP5085AU (Hurricane80)
|
9005:0285:9005:02b2 ICP (Voodoo 8 internal 8 external)
|
||||||
9005:0286:9005:02aa ICP ICP5045AU (Hurricane40)
|
9005:0285:9005:02b8 ICP ICP5445SL (Voodoo44)
|
||||||
9005:0286:9005:02b4 ICP ICP5045AL (Hurricane40lm)
|
9005:0285:9005:02b9 ICP ICP5085SL (Voodoo80)
|
||||||
|
9005:0285:9005:02ba ICP ICP5805SL (Voodoo08)
|
||||||
|
9005:0285:9005:02bf ICP ICP5045BL (Marauder40LP)
|
||||||
|
9005:0285:9005:02c0 ICP ICP5085BL (Marauder80LP)
|
||||||
|
9005:0285:9005:02c8 ICP ICP5805BL (Marauder08ELP)
|
||||||
|
9005:0285:9005:02c1 ICP ICP5125BR (Marauder120)
|
||||||
|
9005:0285:9005:02c2 ICP ICP5165BR (Marauder160)
|
||||||
|
9005:0285:9005:02c5 ICP ICP5125SL (Voodoo120)
|
||||||
|
9005:0285:9005:02c6 ICP ICP5165SL (Voodoo160)
|
||||||
|
9005:0286:9005:02ab (Typhoon40)
|
||||||
|
9005:0286:9005:02ad (Aurora ARK)
|
||||||
|
9005:0286:9005:02ae (Aurora Lite ARK)
|
||||||
|
9005:0285:9005:02b0 (Sunrise Lake ARK)
|
||||||
|
9005:0285:9005:02b1 Adaptec (Voodoo 8 internal 8 external)
|
||||||
|
|
||||||
People
|
People
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
* For use with LSI Logic PCI chip/adapter(s)
|
* For use with LSI Logic PCI chip/adapter(s)
|
||||||
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
||||||
*
|
*
|
||||||
* Copyright (c) 1999-2005 LSI Logic Corporation
|
* Copyright (c) 1999-2007 LSI Logic Corporation
|
||||||
* (mailto:mpt_linux_developer@lsil.com)
|
* (mailto:mpt_linux_developer@lsil.com)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -73,6 +73,7 @@
|
||||||
MODULE_AUTHOR(MODULEAUTHOR);
|
MODULE_AUTHOR(MODULEAUTHOR);
|
||||||
MODULE_DESCRIPTION(my_NAME);
|
MODULE_DESCRIPTION(my_NAME);
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
MODULE_VERSION(my_VERSION);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cmd line parameters
|
* cmd line parameters
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
* LSIFC9xx/LSI409xx Fibre Channel
|
* LSIFC9xx/LSI409xx Fibre Channel
|
||||||
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
||||||
*
|
*
|
||||||
* Copyright (c) 1999-2005 LSI Logic Corporation
|
* Copyright (c) 1999-2007 LSI Logic Corporation
|
||||||
* (mailto:mpt_linux_developer@lsil.com)
|
* (mailto:mpt_linux_developer@lsil.com)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -72,11 +72,11 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef COPYRIGHT
|
#ifndef COPYRIGHT
|
||||||
#define COPYRIGHT "Copyright (c) 1999-2005 " MODULEAUTHOR
|
#define COPYRIGHT "Copyright (c) 1999-2007 " MODULEAUTHOR
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MPT_LINUX_VERSION_COMMON "3.04.02"
|
#define MPT_LINUX_VERSION_COMMON "3.04.03"
|
||||||
#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-3.04.02"
|
#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-3.04.03"
|
||||||
#define WHAT_MAGIC_STRING "@" "(" "#" ")"
|
#define WHAT_MAGIC_STRING "@" "(" "#" ")"
|
||||||
|
|
||||||
#define show_mptmod_ver(s,ver) \
|
#define show_mptmod_ver(s,ver) \
|
||||||
|
@ -1059,7 +1059,7 @@ extern int mpt_stm_index; /* needed by mptstm.c */
|
||||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
||||||
#endif /* } __KERNEL__ */
|
#endif /* } __KERNEL__ */
|
||||||
|
|
||||||
#if defined(__alpha__) || defined(__sparc_v9__) || defined(__ia64__) || defined(__x86_64__)
|
#if defined(__alpha__) || defined(__sparc_v9__) || defined(__ia64__) || defined(__x86_64__) || defined(__powerpc__)
|
||||||
#define CAST_U32_TO_PTR(x) ((void *)(u64)x)
|
#define CAST_U32_TO_PTR(x) ((void *)(u64)x)
|
||||||
#define CAST_PTR_TO_U32(x) ((u32)(u64)x)
|
#define CAST_PTR_TO_U32(x) ((u32)(u64)x)
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
* For use with LSI Logic PCI chip/adapters
|
* For use with LSI Logic PCI chip/adapters
|
||||||
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
||||||
*
|
*
|
||||||
* Copyright (c) 1999-2005 LSI Logic Corporation
|
* Copyright (c) 1999-2007 LSI Logic Corporation
|
||||||
* (mailto:mpt_linux_developer@lsil.com)
|
* (mailto:mpt_linux_developer@lsil.com)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -66,7 +66,7 @@
|
||||||
#include <scsi/scsi_host.h>
|
#include <scsi/scsi_host.h>
|
||||||
#include <scsi/scsi_tcq.h>
|
#include <scsi/scsi_tcq.h>
|
||||||
|
|
||||||
#define COPYRIGHT "Copyright (c) 1999-2005 LSI Logic Corporation"
|
#define COPYRIGHT "Copyright (c) 1999-2007 LSI Logic Corporation"
|
||||||
#define MODULEAUTHOR "LSI Logic Corporation"
|
#define MODULEAUTHOR "LSI Logic Corporation"
|
||||||
#include "mptbase.h"
|
#include "mptbase.h"
|
||||||
#include "mptctl.h"
|
#include "mptctl.h"
|
||||||
|
@ -79,6 +79,7 @@
|
||||||
MODULE_AUTHOR(MODULEAUTHOR);
|
MODULE_AUTHOR(MODULEAUTHOR);
|
||||||
MODULE_DESCRIPTION(my_NAME);
|
MODULE_DESCRIPTION(my_NAME);
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
MODULE_VERSION(my_VERSION);
|
||||||
|
|
||||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
* LSIFC9xx/LSI409xx Fibre Channel
|
* LSIFC9xx/LSI409xx Fibre Channel
|
||||||
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
||||||
*
|
*
|
||||||
* Copyright (c) 1999-2005 LSI Logic Corporation
|
* Copyright (c) 1999-2007 LSI Logic Corporation
|
||||||
* (mailto:mpt_linux_developer@lsil.com)
|
* (mailto:mpt_linux_developer@lsil.com)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* For use with LSI Logic PCI chip/adapter(s)
|
* For use with LSI Logic PCI chip/adapter(s)
|
||||||
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
||||||
*
|
*
|
||||||
* Copyright (c) 1999-2005 LSI Logic Corporation
|
* Copyright (c) 1999-2007 LSI Logic Corporation
|
||||||
* (mailto:mpt_linux_developer@lsil.com)
|
* (mailto:mpt_linux_developer@lsil.com)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -75,6 +75,7 @@
|
||||||
MODULE_AUTHOR(MODULEAUTHOR);
|
MODULE_AUTHOR(MODULEAUTHOR);
|
||||||
MODULE_DESCRIPTION(my_NAME);
|
MODULE_DESCRIPTION(my_NAME);
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
MODULE_VERSION(my_VERSION);
|
||||||
|
|
||||||
/* Command line args */
|
/* Command line args */
|
||||||
#define MPTFC_DEV_LOSS_TMO (60)
|
#define MPTFC_DEV_LOSS_TMO (60)
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
* For use with LSI Logic Fibre Channel PCI chip/adapters
|
* For use with LSI Logic Fibre Channel PCI chip/adapters
|
||||||
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
||||||
*
|
*
|
||||||
* Copyright (c) 2000-2005 LSI Logic Corporation
|
* Copyright (c) 2000-2007 LSI Logic Corporation
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
||||||
|
@ -56,9 +56,11 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
|
|
||||||
|
#define my_VERSION MPT_LINUX_VERSION_COMMON
|
||||||
#define MYNAM "mptlan"
|
#define MYNAM "mptlan"
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
MODULE_VERSION(my_VERSION);
|
||||||
|
|
||||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
* For use with LSI Logic Fibre Channel PCI chip/adapters
|
* For use with LSI Logic Fibre Channel PCI chip/adapters
|
||||||
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
||||||
*
|
*
|
||||||
* Copyright (c) 2000-2005 LSI Logic Corporation
|
* Copyright (c) 2000-2007 LSI Logic Corporation
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
* For use with LSI Logic PCI chip/adapter(s)
|
* For use with LSI Logic PCI chip/adapter(s)
|
||||||
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
||||||
*
|
*
|
||||||
* Copyright (c) 1999-2005 LSI Logic Corporation
|
* Copyright (c) 1999-2007 LSI Logic Corporation
|
||||||
* (mailto:mpt_linux_developer@lsil.com)
|
* (mailto:mpt_linux_developer@lsil.com)
|
||||||
* Copyright (c) 2005-2006 Dell
|
* Copyright (c) 2005-2007 Dell
|
||||||
*/
|
*/
|
||||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
||||||
/*
|
/*
|
||||||
|
@ -75,6 +75,7 @@
|
||||||
MODULE_AUTHOR(MODULEAUTHOR);
|
MODULE_AUTHOR(MODULEAUTHOR);
|
||||||
MODULE_DESCRIPTION(my_NAME);
|
MODULE_DESCRIPTION(my_NAME);
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
MODULE_VERSION(my_VERSION);
|
||||||
|
|
||||||
static int mpt_pt_clear;
|
static int mpt_pt_clear;
|
||||||
module_param(mpt_pt_clear, int, 0);
|
module_param(mpt_pt_clear, int, 0);
|
||||||
|
@ -245,7 +246,8 @@ static void mptsas_print_device_pg0(SasDevicePage0_t *pg0)
|
||||||
printk("Parent Handle=0x%X\n" ,le16_to_cpu(pg0->ParentDevHandle));
|
printk("Parent Handle=0x%X\n" ,le16_to_cpu(pg0->ParentDevHandle));
|
||||||
printk("Enclosure Handle=0x%X\n", le16_to_cpu(pg0->EnclosureHandle));
|
printk("Enclosure Handle=0x%X\n", le16_to_cpu(pg0->EnclosureHandle));
|
||||||
printk("Slot=0x%X\n", le16_to_cpu(pg0->Slot));
|
printk("Slot=0x%X\n", le16_to_cpu(pg0->Slot));
|
||||||
printk("SAS Address=0x%llX\n", le64_to_cpu(sas_address));
|
printk("SAS Address=0x%llX\n", (unsigned long long)
|
||||||
|
le64_to_cpu(sas_address));
|
||||||
printk("Target ID=0x%X\n", pg0->TargetID);
|
printk("Target ID=0x%X\n", pg0->TargetID);
|
||||||
printk("Bus=0x%X\n", pg0->Bus);
|
printk("Bus=0x%X\n", pg0->Bus);
|
||||||
/* The PhyNum field specifies the PHY number of the parent
|
/* The PhyNum field specifies the PHY number of the parent
|
||||||
|
@ -349,9 +351,9 @@ mptsas_port_delete(struct mptsas_portinfo_details * port_details)
|
||||||
phy_info = port_info->phy_info;
|
phy_info = port_info->phy_info;
|
||||||
|
|
||||||
dsaswideprintk((KERN_DEBUG "%s: [%p]: num_phys=%02d "
|
dsaswideprintk((KERN_DEBUG "%s: [%p]: num_phys=%02d "
|
||||||
"bitmask=0x%016llX\n",
|
"bitmask=0x%016llX\n", __FUNCTION__, port_details,
|
||||||
__FUNCTION__, port_details, port_details->num_phys,
|
port_details->num_phys, (unsigned long long)
|
||||||
port_details->phy_bitmask));
|
port_details->phy_bitmask));
|
||||||
|
|
||||||
for (i = 0; i < port_info->num_phys; i++, phy_info++) {
|
for (i = 0; i < port_info->num_phys; i++, phy_info++) {
|
||||||
if(phy_info->port_details != port_details)
|
if(phy_info->port_details != port_details)
|
||||||
|
@ -476,7 +478,7 @@ mptsas_setup_wide_ports(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info)
|
||||||
for (i = 0 ; i < port_info->num_phys ; i++, phy_info++) {
|
for (i = 0 ; i < port_info->num_phys ; i++, phy_info++) {
|
||||||
sas_address = phy_info->attached.sas_address;
|
sas_address = phy_info->attached.sas_address;
|
||||||
dsaswideprintk((KERN_DEBUG "phy_id=%d sas_address=0x%018llX\n",
|
dsaswideprintk((KERN_DEBUG "phy_id=%d sas_address=0x%018llX\n",
|
||||||
i, sas_address));
|
i, (unsigned long long)sas_address));
|
||||||
if (!sas_address)
|
if (!sas_address)
|
||||||
continue;
|
continue;
|
||||||
port_details = phy_info->port_details;
|
port_details = phy_info->port_details;
|
||||||
|
@ -495,8 +497,8 @@ mptsas_setup_wide_ports(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info)
|
||||||
(1 << phy_info->phy_id);
|
(1 << phy_info->phy_id);
|
||||||
phy_info->sas_port_add_phy=1;
|
phy_info->sas_port_add_phy=1;
|
||||||
dsaswideprintk((KERN_DEBUG "\t\tForming port\n\t\t"
|
dsaswideprintk((KERN_DEBUG "\t\tForming port\n\t\t"
|
||||||
"phy_id=%d sas_address=0x%018llX\n",
|
"phy_id=%d sas_address=0x%018llX\n",
|
||||||
i, sas_address));
|
i, (unsigned long long)sas_address));
|
||||||
phy_info->port_details = port_details;
|
phy_info->port_details = port_details;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -512,8 +514,9 @@ mptsas_setup_wide_ports(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info)
|
||||||
if (phy_info_cmp->port_details == port_details )
|
if (phy_info_cmp->port_details == port_details )
|
||||||
continue;
|
continue;
|
||||||
dsaswideprintk((KERN_DEBUG
|
dsaswideprintk((KERN_DEBUG
|
||||||
"\t\tphy_id=%d sas_address=0x%018llX\n",
|
"\t\tphy_id=%d sas_address=0x%018llX\n",
|
||||||
j, phy_info_cmp->attached.sas_address));
|
j, (unsigned long long)
|
||||||
|
phy_info_cmp->attached.sas_address));
|
||||||
if (phy_info_cmp->port_details) {
|
if (phy_info_cmp->port_details) {
|
||||||
port_details->rphy =
|
port_details->rphy =
|
||||||
mptsas_get_rphy(phy_info_cmp);
|
mptsas_get_rphy(phy_info_cmp);
|
||||||
|
@ -546,11 +549,10 @@ mptsas_setup_wide_ports(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info)
|
||||||
if (!port_details)
|
if (!port_details)
|
||||||
continue;
|
continue;
|
||||||
dsaswideprintk((KERN_DEBUG
|
dsaswideprintk((KERN_DEBUG
|
||||||
"%s: [%p]: phy_id=%02d num_phys=%02d "
|
"%s: [%p]: phy_id=%02d num_phys=%02d "
|
||||||
"bitmask=0x%016llX\n",
|
"bitmask=0x%016llX\n", __FUNCTION__,
|
||||||
__FUNCTION__,
|
port_details, i, port_details->num_phys,
|
||||||
port_details, i, port_details->num_phys,
|
(unsigned long long)port_details->phy_bitmask));
|
||||||
port_details->phy_bitmask));
|
|
||||||
dsaswideprintk((KERN_DEBUG"\t\tport = %p rphy=%p\n",
|
dsaswideprintk((KERN_DEBUG"\t\tport = %p rphy=%p\n",
|
||||||
port_details->port, port_details->rphy));
|
port_details->port, port_details->rphy));
|
||||||
}
|
}
|
||||||
|
@ -2079,8 +2081,10 @@ mptsas_persist_clear_table(struct work_struct *work)
|
||||||
static void
|
static void
|
||||||
mptsas_reprobe_lun(struct scsi_device *sdev, void *data)
|
mptsas_reprobe_lun(struct scsi_device *sdev, void *data)
|
||||||
{
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
sdev->no_uld_attach = data ? 1 : 0;
|
sdev->no_uld_attach = data ? 1 : 0;
|
||||||
scsi_device_reprobe(sdev);
|
rc = scsi_device_reprobe(sdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* For use with LSI Logic PCI chip/adapter(s)
|
* For use with LSI Logic PCI chip/adapter(s)
|
||||||
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
||||||
*
|
*
|
||||||
* Copyright (c) 1999-2005 LSI Logic Corporation
|
* Copyright (c) 1999-2007 LSI Logic Corporation
|
||||||
* (mailto:mpt_linux_developer@lsil.com)
|
* (mailto:mpt_linux_developer@lsil.com)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -76,6 +76,7 @@
|
||||||
MODULE_AUTHOR(MODULEAUTHOR);
|
MODULE_AUTHOR(MODULEAUTHOR);
|
||||||
MODULE_DESCRIPTION(my_NAME);
|
MODULE_DESCRIPTION(my_NAME);
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
MODULE_VERSION(my_VERSION);
|
||||||
|
|
||||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
||||||
|
|
||||||
|
@ -701,6 +702,17 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (ioc->bus_type == FC) {
|
||||||
|
/*
|
||||||
|
* The FC IOC may kill a request for variety of
|
||||||
|
* reasons, some of which may be recovered by a
|
||||||
|
* retry, some which are unlikely to be
|
||||||
|
* recovered. Return DID_ERROR instead of
|
||||||
|
* DID_RESET to permit retry of the command,
|
||||||
|
* just not an infinite number of them
|
||||||
|
*/
|
||||||
|
sc->result = DID_ERROR << 16;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2688,7 +2700,8 @@ mptscsih_initTarget(MPT_SCSI_HOST *hd, VirtTarget *vtarget,
|
||||||
struct scsi_device *sdev)
|
struct scsi_device *sdev)
|
||||||
{
|
{
|
||||||
dinitprintk((MYIOC_s_INFO_FMT "initTarget bus=%d id=%d lun=%d hd=%p\n",
|
dinitprintk((MYIOC_s_INFO_FMT "initTarget bus=%d id=%d lun=%d hd=%p\n",
|
||||||
hd->ioc->name, vtarget->bus_id, vtarget->target_id, lun, hd));
|
hd->ioc->name, vtarget->bus_id, vtarget->target_id,
|
||||||
|
sdev->lun, hd));
|
||||||
|
|
||||||
/* Is LUN supported? If so, upper 2 bits will be 0
|
/* Is LUN supported? If so, upper 2 bits will be 0
|
||||||
* in first byte of inquiry data.
|
* in first byte of inquiry data.
|
||||||
|
@ -2770,7 +2783,7 @@ mptscsih_setTargetNegoParms(MPT_SCSI_HOST *hd, VirtTarget *target,
|
||||||
else {
|
else {
|
||||||
factor = MPT_ULTRA320;
|
factor = MPT_ULTRA320;
|
||||||
if (scsi_device_qas(sdev)) {
|
if (scsi_device_qas(sdev)) {
|
||||||
ddvtprintk((KERN_INFO "Enabling QAS due to byte56=%02x on id=%d!\n", byte56, id));
|
ddvtprintk((KERN_INFO "Enabling QAS due to byte56=%02x on id=%d!\n", scsi_device_qas(sdev), id));
|
||||||
noQas = 0;
|
noQas = 0;
|
||||||
}
|
}
|
||||||
if (sdev->type == TYPE_TAPE &&
|
if (sdev->type == TYPE_TAPE &&
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
* LSIFC9xx/LSI409xx Fibre Channel
|
* LSIFC9xx/LSI409xx Fibre Channel
|
||||||
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
||||||
*
|
*
|
||||||
* Copyright (c) 1999-2005 LSI Logic Corporation
|
* Copyright (c) 1999-2007 LSI Logic Corporation
|
||||||
* (mailto:mpt_linux_developer@lsil.com)
|
* (mailto:mpt_linux_developer@lsil.com)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* For use with LSI Logic PCI chip/adapter(s)
|
* For use with LSI Logic PCI chip/adapter(s)
|
||||||
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
|
||||||
*
|
*
|
||||||
* Copyright (c) 1999-2005 LSI Logic Corporation
|
* Copyright (c) 1999-2007 LSI Logic Corporation
|
||||||
* (mailto:mpt_linux_developer@lsil.com)
|
* (mailto:mpt_linux_developer@lsil.com)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -77,6 +77,7 @@
|
||||||
MODULE_AUTHOR(MODULEAUTHOR);
|
MODULE_AUTHOR(MODULEAUTHOR);
|
||||||
MODULE_DESCRIPTION(my_NAME);
|
MODULE_DESCRIPTION(my_NAME);
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
MODULE_VERSION(my_VERSION);
|
||||||
|
|
||||||
/* Command line args */
|
/* Command line args */
|
||||||
static int mpt_saf_te = MPTSCSIH_SAF_TE;
|
static int mpt_saf_te = MPTSCSIH_SAF_TE;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
Arnaldo Carvalho de Melo <acme@conectiva.com.br>
|
Arnaldo Carvalho de Melo <acme@conectiva.com.br>
|
||||||
Brad Strand <linux@3ware.com>
|
Brad Strand <linux@3ware.com>
|
||||||
|
|
||||||
Copyright (C) 1999-2005 3ware Inc.
|
Copyright (C) 1999-2007 3ware Inc.
|
||||||
|
|
||||||
Kernel compatiblity By: Andre Hedrick <andre@suse.com>
|
Kernel compatiblity By: Andre Hedrick <andre@suse.com>
|
||||||
Non-Copyright (C) 2000 Andre Hedrick <andre@suse.com>
|
Non-Copyright (C) 2000 Andre Hedrick <andre@suse.com>
|
||||||
|
@ -191,6 +191,9 @@
|
||||||
before shutting down card.
|
before shutting down card.
|
||||||
Change to new 'change_queue_depth' api.
|
Change to new 'change_queue_depth' api.
|
||||||
Fix 'handled=1' ISR usage, remove bogus IRQ check.
|
Fix 'handled=1' ISR usage, remove bogus IRQ check.
|
||||||
|
1.26.02.002 - Free irq handler in __tw_shutdown().
|
||||||
|
Turn on RCD bit for caching mode page.
|
||||||
|
Serialize reset code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
@ -214,7 +217,7 @@
|
||||||
#include "3w-xxxx.h"
|
#include "3w-xxxx.h"
|
||||||
|
|
||||||
/* Globals */
|
/* Globals */
|
||||||
#define TW_DRIVER_VERSION "1.26.02.001"
|
#define TW_DRIVER_VERSION "1.26.02.002"
|
||||||
static TW_Device_Extension *tw_device_extension_list[TW_MAX_SLOT];
|
static TW_Device_Extension *tw_device_extension_list[TW_MAX_SLOT];
|
||||||
static int tw_device_extension_count = 0;
|
static int tw_device_extension_count = 0;
|
||||||
static int twe_major = -1;
|
static int twe_major = -1;
|
||||||
|
@ -226,7 +229,7 @@ MODULE_LICENSE("GPL");
|
||||||
MODULE_VERSION(TW_DRIVER_VERSION);
|
MODULE_VERSION(TW_DRIVER_VERSION);
|
||||||
|
|
||||||
/* Function prototypes */
|
/* Function prototypes */
|
||||||
static int tw_reset_device_extension(TW_Device_Extension *tw_dev, int ioctl_reset);
|
static int tw_reset_device_extension(TW_Device_Extension *tw_dev);
|
||||||
|
|
||||||
/* Functions */
|
/* Functions */
|
||||||
|
|
||||||
|
@ -984,24 +987,12 @@ static int tw_chrdev_ioctl(struct inode *inode, struct file *file, unsigned int
|
||||||
/* Now wait for the command to complete */
|
/* Now wait for the command to complete */
|
||||||
timeout = wait_event_timeout(tw_dev->ioctl_wqueue, tw_dev->chrdev_request_id == TW_IOCTL_CHRDEV_FREE, timeout);
|
timeout = wait_event_timeout(tw_dev->ioctl_wqueue, tw_dev->chrdev_request_id == TW_IOCTL_CHRDEV_FREE, timeout);
|
||||||
|
|
||||||
/* See if we reset while waiting for the ioctl to complete */
|
|
||||||
if (test_bit(TW_IN_RESET, &tw_dev->flags)) {
|
|
||||||
clear_bit(TW_IN_RESET, &tw_dev->flags);
|
|
||||||
retval = -ERESTARTSYS;
|
|
||||||
goto out2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We timed out, and didn't get an interrupt */
|
/* We timed out, and didn't get an interrupt */
|
||||||
if (tw_dev->chrdev_request_id != TW_IOCTL_CHRDEV_FREE) {
|
if (tw_dev->chrdev_request_id != TW_IOCTL_CHRDEV_FREE) {
|
||||||
/* Now we need to reset the board */
|
/* Now we need to reset the board */
|
||||||
printk(KERN_WARNING "3w-xxxx: scsi%d: Character ioctl (0x%x) timed out, resetting card.\n", tw_dev->host->host_no, cmd);
|
printk(KERN_WARNING "3w-xxxx: scsi%d: Character ioctl (0x%x) timed out, resetting card.\n", tw_dev->host->host_no, cmd);
|
||||||
retval = -EIO;
|
retval = -EIO;
|
||||||
spin_lock_irqsave(tw_dev->host->host_lock, flags);
|
if (tw_reset_device_extension(tw_dev)) {
|
||||||
tw_dev->state[request_id] = TW_S_COMPLETED;
|
|
||||||
tw_state_request_finish(tw_dev, request_id);
|
|
||||||
tw_dev->posted_request_count--;
|
|
||||||
spin_unlock_irqrestore(tw_dev->host->host_lock, flags);
|
|
||||||
if (tw_reset_device_extension(tw_dev, 1)) {
|
|
||||||
printk(KERN_WARNING "3w-xxxx: tw_chrdev_ioctl(): Reset failed for card %d.\n", tw_dev->host->host_no);
|
printk(KERN_WARNING "3w-xxxx: tw_chrdev_ioctl(): Reset failed for card %d.\n", tw_dev->host->host_no);
|
||||||
}
|
}
|
||||||
goto out2;
|
goto out2;
|
||||||
|
@ -1336,7 +1327,7 @@ static void tw_unmap_scsi_data(struct pci_dev *pdev, struct scsi_cmnd *cmd)
|
||||||
} /* End tw_unmap_scsi_data() */
|
} /* End tw_unmap_scsi_data() */
|
||||||
|
|
||||||
/* This function will reset a device extension */
|
/* This function will reset a device extension */
|
||||||
static int tw_reset_device_extension(TW_Device_Extension *tw_dev, int ioctl_reset)
|
static int tw_reset_device_extension(TW_Device_Extension *tw_dev)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
struct scsi_cmnd *srb;
|
struct scsi_cmnd *srb;
|
||||||
|
@ -1382,15 +1373,10 @@ static int tw_reset_device_extension(TW_Device_Extension *tw_dev, int ioctl_rese
|
||||||
printk(KERN_WARNING "3w-xxxx: scsi%d: Reset sequence failed.\n", tw_dev->host->host_no);
|
printk(KERN_WARNING "3w-xxxx: scsi%d: Reset sequence failed.\n", tw_dev->host->host_no);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
TW_ENABLE_AND_CLEAR_INTERRUPTS(tw_dev);
|
|
||||||
|
|
||||||
/* Wake up any ioctl that was pending before the reset */
|
TW_ENABLE_AND_CLEAR_INTERRUPTS(tw_dev);
|
||||||
if ((tw_dev->chrdev_request_id == TW_IOCTL_CHRDEV_FREE) || (ioctl_reset)) {
|
clear_bit(TW_IN_RESET, &tw_dev->flags);
|
||||||
clear_bit(TW_IN_RESET, &tw_dev->flags);
|
tw_dev->chrdev_request_id = TW_IOCTL_CHRDEV_FREE;
|
||||||
} else {
|
|
||||||
tw_dev->chrdev_request_id = TW_IOCTL_CHRDEV_FREE;
|
|
||||||
wake_up(&tw_dev->ioctl_wqueue);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
} /* End tw_reset_device_extension() */
|
} /* End tw_reset_device_extension() */
|
||||||
|
@ -1437,14 +1423,18 @@ static int tw_scsi_eh_reset(struct scsi_cmnd *SCpnt)
|
||||||
"WARNING: Command (0x%x) timed out, resetting card.\n",
|
"WARNING: Command (0x%x) timed out, resetting card.\n",
|
||||||
SCpnt->cmnd[0]);
|
SCpnt->cmnd[0]);
|
||||||
|
|
||||||
|
/* Make sure we are not issuing an ioctl or resetting from ioctl */
|
||||||
|
mutex_lock(&tw_dev->ioctl_lock);
|
||||||
|
|
||||||
/* Now reset the card and some of the device extension data */
|
/* Now reset the card and some of the device extension data */
|
||||||
if (tw_reset_device_extension(tw_dev, 0)) {
|
if (tw_reset_device_extension(tw_dev)) {
|
||||||
printk(KERN_WARNING "3w-xxxx: scsi%d: Reset failed.\n", tw_dev->host->host_no);
|
printk(KERN_WARNING "3w-xxxx: scsi%d: Reset failed.\n", tw_dev->host->host_no);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = SUCCESS;
|
retval = SUCCESS;
|
||||||
out:
|
out:
|
||||||
|
mutex_unlock(&tw_dev->ioctl_lock);
|
||||||
return retval;
|
return retval;
|
||||||
} /* End tw_scsi_eh_reset() */
|
} /* End tw_scsi_eh_reset() */
|
||||||
|
|
||||||
|
@ -1660,9 +1650,9 @@ static int tw_scsiop_mode_sense_complete(TW_Device_Extension *tw_dev, int reques
|
||||||
request_buffer[4] = 0x8; /* caching page */
|
request_buffer[4] = 0x8; /* caching page */
|
||||||
request_buffer[5] = 0xa; /* page length */
|
request_buffer[5] = 0xa; /* page length */
|
||||||
if (*flags & 0x1)
|
if (*flags & 0x1)
|
||||||
request_buffer[6] = 0x4; /* WCE on */
|
request_buffer[6] = 0x5; /* WCE on, RCD on */
|
||||||
else
|
else
|
||||||
request_buffer[6] = 0x0; /* WCE off */
|
request_buffer[6] = 0x1; /* WCE off, RCD on */
|
||||||
tw_transfer_internal(tw_dev, request_id, request_buffer,
|
tw_transfer_internal(tw_dev, request_id, request_buffer,
|
||||||
sizeof(request_buffer));
|
sizeof(request_buffer));
|
||||||
|
|
||||||
|
@ -2012,6 +2002,10 @@ static int tw_scsi_queue(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd
|
||||||
int retval = 1;
|
int retval = 1;
|
||||||
TW_Device_Extension *tw_dev = (TW_Device_Extension *)SCpnt->device->host->hostdata;
|
TW_Device_Extension *tw_dev = (TW_Device_Extension *)SCpnt->device->host->hostdata;
|
||||||
|
|
||||||
|
/* If we are resetting due to timed out ioctl, report as busy */
|
||||||
|
if (test_bit(TW_IN_RESET, &tw_dev->flags))
|
||||||
|
return SCSI_MLQUEUE_HOST_BUSY;
|
||||||
|
|
||||||
/* Save done function into Scsi_Cmnd struct */
|
/* Save done function into Scsi_Cmnd struct */
|
||||||
SCpnt->scsi_done = done;
|
SCpnt->scsi_done = done;
|
||||||
|
|
||||||
|
@ -2100,6 +2094,10 @@ static irqreturn_t tw_interrupt(int irq, void *dev_instance)
|
||||||
|
|
||||||
handled = 1;
|
handled = 1;
|
||||||
|
|
||||||
|
/* If we are resetting, bail */
|
||||||
|
if (test_bit(TW_IN_RESET, &tw_dev->flags))
|
||||||
|
goto tw_interrupt_bail;
|
||||||
|
|
||||||
/* Check controller for errors */
|
/* Check controller for errors */
|
||||||
if (tw_check_bits(status_reg_value)) {
|
if (tw_check_bits(status_reg_value)) {
|
||||||
dprintk(KERN_WARNING "3w-xxxx: tw_interrupt(): Unexpected bits.\n");
|
dprintk(KERN_WARNING "3w-xxxx: tw_interrupt(): Unexpected bits.\n");
|
||||||
|
@ -2276,6 +2274,9 @@ static void __tw_shutdown(TW_Device_Extension *tw_dev)
|
||||||
/* Disable interrupts */
|
/* Disable interrupts */
|
||||||
TW_DISABLE_INTERRUPTS(tw_dev);
|
TW_DISABLE_INTERRUPTS(tw_dev);
|
||||||
|
|
||||||
|
/* Free up the IRQ */
|
||||||
|
free_irq(tw_dev->tw_pci_dev->irq, tw_dev);
|
||||||
|
|
||||||
printk(KERN_WARNING "3w-xxxx: Shutting down host %d.\n", tw_dev->host->host_no);
|
printk(KERN_WARNING "3w-xxxx: Shutting down host %d.\n", tw_dev->host->host_no);
|
||||||
|
|
||||||
/* Tell the card we are shutting down */
|
/* Tell the card we are shutting down */
|
||||||
|
@ -2444,9 +2445,6 @@ static void tw_remove(struct pci_dev *pdev)
|
||||||
twe_major = -1;
|
twe_major = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Free up the IRQ */
|
|
||||||
free_irq(tw_dev->tw_pci_dev->irq, tw_dev);
|
|
||||||
|
|
||||||
/* Shutdown the card */
|
/* Shutdown the card */
|
||||||
__tw_shutdown(tw_dev);
|
__tw_shutdown(tw_dev);
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
Arnaldo Carvalho de Melo <acme@conectiva.com.br>
|
Arnaldo Carvalho de Melo <acme@conectiva.com.br>
|
||||||
Brad Strand <linux@3ware.com>
|
Brad Strand <linux@3ware.com>
|
||||||
|
|
||||||
Copyright (C) 1999-2005 3ware Inc.
|
Copyright (C) 1999-2007 3ware Inc.
|
||||||
|
|
||||||
Kernel compatiblity By: Andre Hedrick <andre@suse.com>
|
Kernel compatiblity By: Andre Hedrick <andre@suse.com>
|
||||||
Non-Copyright (C) 2000 Andre Hedrick <andre@suse.com>
|
Non-Copyright (C) 2000 Andre Hedrick <andre@suse.com>
|
||||||
|
|
|
@ -1303,7 +1303,7 @@ config SCSI_LPFC
|
||||||
|
|
||||||
config SCSI_SEAGATE
|
config SCSI_SEAGATE
|
||||||
tristate "Seagate ST-02 and Future Domain TMC-8xx SCSI support"
|
tristate "Seagate ST-02 and Future Domain TMC-8xx SCSI support"
|
||||||
depends on X86 && ISA && SCSI && BROKEN
|
depends on X86 && ISA && SCSI
|
||||||
---help---
|
---help---
|
||||||
These are 8-bit SCSI controllers; the ST-01 is also supported by
|
These are 8-bit SCSI controllers; the ST-01 is also supported by
|
||||||
this driver. It is explained in section 3.9 of the SCSI-HOWTO,
|
this driver. It is explained in section 3.9 of the SCSI-HOWTO,
|
||||||
|
|
|
@ -117,8 +117,8 @@ static struct pci_device_id aac_pci_tbl[] = {
|
||||||
{ 0x9005, 0x0286, 0x9005, 0x029b, 0, 0, 22 }, /* AAR-2820SA (Intruder) */
|
{ 0x9005, 0x0286, 0x9005, 0x029b, 0, 0, 22 }, /* AAR-2820SA (Intruder) */
|
||||||
{ 0x9005, 0x0286, 0x9005, 0x029c, 0, 0, 23 }, /* AAR-2620SA (Intruder) */
|
{ 0x9005, 0x0286, 0x9005, 0x029c, 0, 0, 23 }, /* AAR-2620SA (Intruder) */
|
||||||
{ 0x9005, 0x0286, 0x9005, 0x029d, 0, 0, 24 }, /* AAR-2420SA (Intruder) */
|
{ 0x9005, 0x0286, 0x9005, 0x029d, 0, 0, 24 }, /* AAR-2420SA (Intruder) */
|
||||||
{ 0x9005, 0x0286, 0x9005, 0x029e, 0, 0, 25 }, /* ICP9024R0 (Lancer) */
|
{ 0x9005, 0x0286, 0x9005, 0x029e, 0, 0, 25 }, /* ICP9024RO (Lancer) */
|
||||||
{ 0x9005, 0x0286, 0x9005, 0x029f, 0, 0, 26 }, /* ICP9014R0 (Lancer) */
|
{ 0x9005, 0x0286, 0x9005, 0x029f, 0, 0, 26 }, /* ICP9014RO (Lancer) */
|
||||||
{ 0x9005, 0x0286, 0x9005, 0x02a0, 0, 0, 27 }, /* ICP9047MA (Lancer) */
|
{ 0x9005, 0x0286, 0x9005, 0x02a0, 0, 0, 27 }, /* ICP9047MA (Lancer) */
|
||||||
{ 0x9005, 0x0286, 0x9005, 0x02a1, 0, 0, 28 }, /* ICP9087MA (Lancer) */
|
{ 0x9005, 0x0286, 0x9005, 0x02a1, 0, 0, 28 }, /* ICP9087MA (Lancer) */
|
||||||
{ 0x9005, 0x0286, 0x9005, 0x02a3, 0, 0, 29 }, /* ICP5445AU (Hurricane44) */
|
{ 0x9005, 0x0286, 0x9005, 0x02a3, 0, 0, 29 }, /* ICP5445AU (Hurricane44) */
|
||||||
|
@ -137,15 +137,15 @@ static struct pci_device_id aac_pci_tbl[] = {
|
||||||
{ 0x9005, 0x0285, 0x9005, 0x0294, 0, 0, 41 }, /* ESD SO-DIMM PCI-X SATA ZCR (Prowler) */
|
{ 0x9005, 0x0285, 0x9005, 0x0294, 0, 0, 41 }, /* ESD SO-DIMM PCI-X SATA ZCR (Prowler) */
|
||||||
{ 0x9005, 0x0285, 0x103C, 0x3227, 0, 0, 42 }, /* AAR-2610SA PCI SATA 6ch */
|
{ 0x9005, 0x0285, 0x103C, 0x3227, 0, 0, 42 }, /* AAR-2610SA PCI SATA 6ch */
|
||||||
{ 0x9005, 0x0285, 0x9005, 0x0296, 0, 0, 43 }, /* ASR-2240S (SabreExpress) */
|
{ 0x9005, 0x0285, 0x9005, 0x0296, 0, 0, 43 }, /* ASR-2240S (SabreExpress) */
|
||||||
{ 0x9005, 0x0285, 0x9005, 0x0297, 0, 0, 44 }, /* ASR-4005SAS */
|
{ 0x9005, 0x0285, 0x9005, 0x0297, 0, 0, 44 }, /* ASR-4005 */
|
||||||
{ 0x9005, 0x0285, 0x1014, 0x02F2, 0, 0, 45 }, /* IBM 8i (AvonPark) */
|
{ 0x9005, 0x0285, 0x1014, 0x02F2, 0, 0, 45 }, /* IBM 8i (AvonPark) */
|
||||||
{ 0x9005, 0x0285, 0x1014, 0x0312, 0, 0, 45 }, /* IBM 8i (AvonPark Lite) */
|
{ 0x9005, 0x0285, 0x1014, 0x0312, 0, 0, 45 }, /* IBM 8i (AvonPark Lite) */
|
||||||
{ 0x9005, 0x0286, 0x1014, 0x9580, 0, 0, 46 }, /* IBM 8k/8k-l8 (Aurora) */
|
{ 0x9005, 0x0286, 0x1014, 0x9580, 0, 0, 46 }, /* IBM 8k/8k-l8 (Aurora) */
|
||||||
{ 0x9005, 0x0286, 0x1014, 0x9540, 0, 0, 47 }, /* IBM 8k/8k-l4 (Aurora Lite) */
|
{ 0x9005, 0x0286, 0x1014, 0x9540, 0, 0, 47 }, /* IBM 8k/8k-l4 (Aurora Lite) */
|
||||||
{ 0x9005, 0x0285, 0x9005, 0x0298, 0, 0, 48 }, /* ASR-4000SAS (BlackBird) */
|
{ 0x9005, 0x0285, 0x9005, 0x0298, 0, 0, 48 }, /* ASR-4000 (BlackBird) */
|
||||||
{ 0x9005, 0x0285, 0x9005, 0x0299, 0, 0, 49 }, /* ASR-4800SAS (Marauder-X) */
|
{ 0x9005, 0x0285, 0x9005, 0x0299, 0, 0, 49 }, /* ASR-4800SAS (Marauder-X) */
|
||||||
{ 0x9005, 0x0285, 0x9005, 0x029a, 0, 0, 50 }, /* ASR-4805SAS (Marauder-E) */
|
{ 0x9005, 0x0285, 0x9005, 0x029a, 0, 0, 50 }, /* ASR-4805SAS (Marauder-E) */
|
||||||
{ 0x9005, 0x0286, 0x9005, 0x02a2, 0, 0, 51 }, /* ASR-3800SAS (Hurricane44) */
|
{ 0x9005, 0x0286, 0x9005, 0x02a2, 0, 0, 51 }, /* ASR-3800 (Hurricane44) */
|
||||||
|
|
||||||
{ 0x9005, 0x0285, 0x1028, 0x0287, 0, 0, 52 }, /* Perc 320/DC*/
|
{ 0x9005, 0x0285, 0x1028, 0x0287, 0, 0, 52 }, /* Perc 320/DC*/
|
||||||
{ 0x1011, 0x0046, 0x9005, 0x0365, 0, 0, 53 }, /* Adaptec 5400S (Mustang)*/
|
{ 0x1011, 0x0046, 0x9005, 0x0365, 0, 0, 53 }, /* Adaptec 5400S (Mustang)*/
|
||||||
|
@ -193,8 +193,8 @@ static struct aac_driver_ident aac_drivers[] = {
|
||||||
{ aac_rkt_init, "aacraid", "ADAPTEC ", "AAR-2820SA ", 1 }, /* AAR-2820SA (Intruder) */
|
{ aac_rkt_init, "aacraid", "ADAPTEC ", "AAR-2820SA ", 1 }, /* AAR-2820SA (Intruder) */
|
||||||
{ aac_rkt_init, "aacraid", "ADAPTEC ", "AAR-2620SA ", 1 }, /* AAR-2620SA (Intruder) */
|
{ aac_rkt_init, "aacraid", "ADAPTEC ", "AAR-2620SA ", 1 }, /* AAR-2620SA (Intruder) */
|
||||||
{ aac_rkt_init, "aacraid", "ADAPTEC ", "AAR-2420SA ", 1 }, /* AAR-2420SA (Intruder) */
|
{ aac_rkt_init, "aacraid", "ADAPTEC ", "AAR-2420SA ", 1 }, /* AAR-2420SA (Intruder) */
|
||||||
{ aac_rkt_init, "aacraid", "ICP ", "ICP9024R0 ", 2 }, /* ICP9024R0 (Lancer) */
|
{ aac_rkt_init, "aacraid", "ICP ", "ICP9024RO ", 2 }, /* ICP9024RO (Lancer) */
|
||||||
{ aac_rkt_init, "aacraid", "ICP ", "ICP9014R0 ", 1 }, /* ICP9014R0 (Lancer) */
|
{ aac_rkt_init, "aacraid", "ICP ", "ICP9014RO ", 1 }, /* ICP9014RO (Lancer) */
|
||||||
{ aac_rkt_init, "aacraid", "ICP ", "ICP9047MA ", 1 }, /* ICP9047MA (Lancer) */
|
{ aac_rkt_init, "aacraid", "ICP ", "ICP9047MA ", 1 }, /* ICP9047MA (Lancer) */
|
||||||
{ aac_rkt_init, "aacraid", "ICP ", "ICP9087MA ", 1 }, /* ICP9087MA (Lancer) */
|
{ aac_rkt_init, "aacraid", "ICP ", "ICP9087MA ", 1 }, /* ICP9087MA (Lancer) */
|
||||||
{ aac_rkt_init, "aacraid", "ICP ", "ICP5445AU ", 1 }, /* ICP5445AU (Hurricane44) */
|
{ aac_rkt_init, "aacraid", "ICP ", "ICP5445AU ", 1 }, /* ICP5445AU (Hurricane44) */
|
||||||
|
@ -212,14 +212,14 @@ static struct aac_driver_ident aac_drivers[] = {
|
||||||
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2026ZCR ", 1 }, /* ESD SO-DIMM PCI-X SATA ZCR (Prowler) */
|
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2026ZCR ", 1 }, /* ESD SO-DIMM PCI-X SATA ZCR (Prowler) */
|
||||||
{ aac_rx_init, "aacraid", "ADAPTEC ", "AAR-2610SA ", 1 }, /* SATA 6Ch (Bearcat) */
|
{ aac_rx_init, "aacraid", "ADAPTEC ", "AAR-2610SA ", 1 }, /* SATA 6Ch (Bearcat) */
|
||||||
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2240S ", 1 }, /* ASR-2240S (SabreExpress) */
|
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2240S ", 1 }, /* ASR-2240S (SabreExpress) */
|
||||||
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4005SAS ", 1 }, /* ASR-4005SAS */
|
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4005 ", 1 }, /* ASR-4005 */
|
||||||
{ aac_rx_init, "ServeRAID","IBM ", "ServeRAID 8i ", 1 }, /* IBM 8i (AvonPark) */
|
{ aac_rx_init, "ServeRAID","IBM ", "ServeRAID 8i ", 1 }, /* IBM 8i (AvonPark) */
|
||||||
{ aac_rkt_init, "ServeRAID","IBM ", "ServeRAID 8k-l8 ", 1 }, /* IBM 8k/8k-l8 (Aurora) */
|
{ aac_rkt_init, "ServeRAID","IBM ", "ServeRAID 8k-l8 ", 1 }, /* IBM 8k/8k-l8 (Aurora) */
|
||||||
{ aac_rkt_init, "ServeRAID","IBM ", "ServeRAID 8k-l4 ", 1 }, /* IBM 8k/8k-l4 (Aurora Lite) */
|
{ aac_rkt_init, "ServeRAID","IBM ", "ServeRAID 8k-l4 ", 1 }, /* IBM 8k/8k-l4 (Aurora Lite) */
|
||||||
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4000SAS ", 1 }, /* ASR-4000SAS (BlackBird & AvonPark) */
|
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4000 ", 1 }, /* ASR-4000 (BlackBird & AvonPark) */
|
||||||
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4800SAS ", 1 }, /* ASR-4800SAS (Marauder-X) */
|
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4800SAS ", 1 }, /* ASR-4800SAS (Marauder-X) */
|
||||||
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4805SAS ", 1 }, /* ASR-4805SAS (Marauder-E) */
|
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4805SAS ", 1 }, /* ASR-4805SAS (Marauder-E) */
|
||||||
{ aac_rkt_init, "aacraid", "ADAPTEC ", "ASR-3800SAS ", 1 }, /* ASR-3800SAS (Hurricane44) */
|
{ aac_rkt_init, "aacraid", "ADAPTEC ", "ASR-3800 ", 1 }, /* ASR-3800 (Hurricane44) */
|
||||||
|
|
||||||
{ aac_rx_init, "percraid", "DELL ", "PERC 320/DC ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG }, /* Perc 320/DC*/
|
{ aac_rx_init, "percraid", "DELL ", "PERC 320/DC ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG }, /* Perc 320/DC*/
|
||||||
{ aac_sa_init, "aacraid", "ADAPTEC ", "Adaptec 5400S ", 4, AAC_QUIRK_34SG }, /* Adaptec 5400S (Mustang)*/
|
{ aac_sa_init, "aacraid", "ADAPTEC ", "Adaptec 5400S ", 4, AAC_QUIRK_34SG }, /* Adaptec 5400S (Mustang)*/
|
||||||
|
|
|
@ -18215,6 +18215,7 @@ AdvInquiryHandling(
|
||||||
}
|
}
|
||||||
MODULE_LICENSE("Dual BSD/GPL");
|
MODULE_LICENSE("Dual BSD/GPL");
|
||||||
|
|
||||||
|
#ifdef CONFIG_PCI
|
||||||
/* PCI Devices supported by this driver */
|
/* PCI Devices supported by this driver */
|
||||||
static struct pci_device_id advansys_pci_tbl[] __devinitdata = {
|
static struct pci_device_id advansys_pci_tbl[] __devinitdata = {
|
||||||
{ PCI_VENDOR_ID_ASP, PCI_DEVICE_ID_ASP_1200A,
|
{ PCI_VENDOR_ID_ASP, PCI_DEVICE_ID_ASP_1200A,
|
||||||
|
@ -18232,4 +18233,4 @@ static struct pci_device_id advansys_pci_tbl[] __devinitdata = {
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(pci, advansys_pci_tbl);
|
MODULE_DEVICE_TABLE(pci, advansys_pci_tbl);
|
||||||
|
#endif /* CONFIG_PCI */
|
||||||
|
|
|
@ -749,7 +749,7 @@ static int iscsi_scsi_data_in(struct iscsi_conn *conn)
|
||||||
if (!offset)
|
if (!offset)
|
||||||
crypto_hash_update(
|
crypto_hash_update(
|
||||||
&tcp_conn->rx_hash,
|
&tcp_conn->rx_hash,
|
||||||
&sg[i], 1);
|
&sg[i], sg[i].length);
|
||||||
else
|
else
|
||||||
partial_sg_digest_update(
|
partial_sg_digest_update(
|
||||||
&tcp_conn->rx_hash,
|
&tcp_conn->rx_hash,
|
||||||
|
@ -1777,13 +1777,13 @@ iscsi_tcp_conn_create(struct iscsi_cls_session *cls_session, uint32_t conn_idx)
|
||||||
tcp_conn->tx_hash.tfm = crypto_alloc_hash("crc32c", 0,
|
tcp_conn->tx_hash.tfm = crypto_alloc_hash("crc32c", 0,
|
||||||
CRYPTO_ALG_ASYNC);
|
CRYPTO_ALG_ASYNC);
|
||||||
tcp_conn->tx_hash.flags = 0;
|
tcp_conn->tx_hash.flags = 0;
|
||||||
if (!tcp_conn->tx_hash.tfm)
|
if (IS_ERR(tcp_conn->tx_hash.tfm))
|
||||||
goto free_tcp_conn;
|
goto free_tcp_conn;
|
||||||
|
|
||||||
tcp_conn->rx_hash.tfm = crypto_alloc_hash("crc32c", 0,
|
tcp_conn->rx_hash.tfm = crypto_alloc_hash("crc32c", 0,
|
||||||
CRYPTO_ALG_ASYNC);
|
CRYPTO_ALG_ASYNC);
|
||||||
tcp_conn->rx_hash.flags = 0;
|
tcp_conn->rx_hash.flags = 0;
|
||||||
if (!tcp_conn->rx_hash.tfm)
|
if (IS_ERR(tcp_conn->rx_hash.tfm))
|
||||||
goto free_tx_tfm;
|
goto free_tx_tfm;
|
||||||
|
|
||||||
return cls_conn;
|
return cls_conn;
|
||||||
|
@ -2044,13 +2044,11 @@ iscsi_tcp_conn_get_param(struct iscsi_cls_conn *cls_conn,
|
||||||
sk = tcp_conn->sock->sk;
|
sk = tcp_conn->sock->sk;
|
||||||
if (sk->sk_family == PF_INET) {
|
if (sk->sk_family == PF_INET) {
|
||||||
inet = inet_sk(sk);
|
inet = inet_sk(sk);
|
||||||
len = sprintf(buf, "%u.%u.%u.%u\n",
|
len = sprintf(buf, NIPQUAD_FMT "\n",
|
||||||
NIPQUAD(inet->daddr));
|
NIPQUAD(inet->daddr));
|
||||||
} else {
|
} else {
|
||||||
np = inet6_sk(sk);
|
np = inet6_sk(sk);
|
||||||
len = sprintf(buf,
|
len = sprintf(buf, NIP6_FMT "\n", NIP6(np->daddr));
|
||||||
"%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x\n",
|
|
||||||
NIP6(np->daddr));
|
|
||||||
}
|
}
|
||||||
mutex_unlock(&conn->xmitmutex);
|
mutex_unlock(&conn->xmitmutex);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -260,7 +260,7 @@ static int iscsi_scsi_cmd_rsp(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rhdr->cmd_status == SAM_STAT_CHECK_CONDITION) {
|
if (rhdr->cmd_status == SAM_STAT_CHECK_CONDITION) {
|
||||||
int senselen;
|
uint16_t senselen;
|
||||||
|
|
||||||
if (datalen < 2) {
|
if (datalen < 2) {
|
||||||
invalid_datalen:
|
invalid_datalen:
|
||||||
|
@ -270,12 +270,12 @@ invalid_datalen:
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
senselen = (data[0] << 8) | data[1];
|
senselen = be16_to_cpu(*(uint16_t *)data);
|
||||||
if (datalen < senselen)
|
if (datalen < senselen)
|
||||||
goto invalid_datalen;
|
goto invalid_datalen;
|
||||||
|
|
||||||
memcpy(sc->sense_buffer, data + 2,
|
memcpy(sc->sense_buffer, data + 2,
|
||||||
min(senselen, SCSI_SENSE_BUFFERSIZE));
|
min_t(uint16_t, senselen, SCSI_SENSE_BUFFERSIZE));
|
||||||
debug_scsi("copied %d bytes of sense\n",
|
debug_scsi("copied %d bytes of sense\n",
|
||||||
min(senselen, SCSI_SENSE_BUFFERSIZE));
|
min(senselen, SCSI_SENSE_BUFFERSIZE));
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,6 +56,9 @@ lpfc_mem_alloc(struct lpfc_hba * phba)
|
||||||
|
|
||||||
pool->elements = kmalloc(sizeof(struct lpfc_dmabuf) *
|
pool->elements = kmalloc(sizeof(struct lpfc_dmabuf) *
|
||||||
LPFC_MBUF_POOL_SIZE, GFP_KERNEL);
|
LPFC_MBUF_POOL_SIZE, GFP_KERNEL);
|
||||||
|
if (!pool->elements)
|
||||||
|
goto fail_free_lpfc_mbuf_pool;
|
||||||
|
|
||||||
pool->max_count = 0;
|
pool->max_count = 0;
|
||||||
pool->current_count = 0;
|
pool->current_count = 0;
|
||||||
for ( i = 0; i < LPFC_MBUF_POOL_SIZE; i++) {
|
for ( i = 0; i < LPFC_MBUF_POOL_SIZE; i++) {
|
||||||
|
@ -82,10 +85,11 @@ lpfc_mem_alloc(struct lpfc_hba * phba)
|
||||||
fail_free_mbox_pool:
|
fail_free_mbox_pool:
|
||||||
mempool_destroy(phba->mbox_mem_pool);
|
mempool_destroy(phba->mbox_mem_pool);
|
||||||
fail_free_mbuf_pool:
|
fail_free_mbuf_pool:
|
||||||
while (--i)
|
while (i--)
|
||||||
pci_pool_free(phba->lpfc_mbuf_pool, pool->elements[i].virt,
|
pci_pool_free(phba->lpfc_mbuf_pool, pool->elements[i].virt,
|
||||||
pool->elements[i].phys);
|
pool->elements[i].phys);
|
||||||
kfree(pool->elements);
|
kfree(pool->elements);
|
||||||
|
fail_free_lpfc_mbuf_pool:
|
||||||
pci_pool_destroy(phba->lpfc_mbuf_pool);
|
pci_pool_destroy(phba->lpfc_mbuf_pool);
|
||||||
fail_free_dma_buf_pool:
|
fail_free_dma_buf_pool:
|
||||||
pci_pool_destroy(phba->lpfc_scsi_dma_buf_pool);
|
pci_pool_destroy(phba->lpfc_scsi_dma_buf_pool);
|
||||||
|
|
|
@ -13,8 +13,8 @@
|
||||||
* Version : v00.00.03.05
|
* Version : v00.00.03.05
|
||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
* Sreenivas Bagalkote <Sreenivas.Bagalkote@lsil.com>
|
* Sreenivas Bagalkote <Sreenivas.Bagalkote@lsi.com>
|
||||||
* Sumant Patro <Sumant.Patro@lsil.com>
|
* Sumant Patro <Sumant.Patro@lsi.com>
|
||||||
*
|
*
|
||||||
* List of supported controllers
|
* List of supported controllers
|
||||||
*
|
*
|
||||||
|
@ -45,7 +45,7 @@
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
MODULE_VERSION(MEGASAS_VERSION);
|
MODULE_VERSION(MEGASAS_VERSION);
|
||||||
MODULE_AUTHOR("sreenivas.bagalkote@lsil.com");
|
MODULE_AUTHOR("megaraidlinux@lsi.com");
|
||||||
MODULE_DESCRIPTION("LSI Logic MegaRAID SAS Driver");
|
MODULE_DESCRIPTION("LSI Logic MegaRAID SAS Driver");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1341,7 +1341,7 @@ qla1280_return_status(struct response * sts, struct scsi_cmnd *cp)
|
||||||
int host_status = DID_ERROR;
|
int host_status = DID_ERROR;
|
||||||
uint16_t comp_status = le16_to_cpu(sts->comp_status);
|
uint16_t comp_status = le16_to_cpu(sts->comp_status);
|
||||||
uint16_t state_flags = le16_to_cpu(sts->state_flags);
|
uint16_t state_flags = le16_to_cpu(sts->state_flags);
|
||||||
uint16_t residual_length = le32_to_cpu(sts->residual_length);
|
uint32_t residual_length = le32_to_cpu(sts->residual_length);
|
||||||
uint16_t scsi_status = le16_to_cpu(sts->scsi_status);
|
uint16_t scsi_status = le16_to_cpu(sts->scsi_status);
|
||||||
#if DEBUG_QLA1280_INTR
|
#if DEBUG_QLA1280_INTR
|
||||||
static char *reason[] = {
|
static char *reason[] = {
|
||||||
|
@ -1413,8 +1413,10 @@ qla1280_return_status(struct response * sts, struct scsi_cmnd *cp)
|
||||||
"scsi: Underflow detected - retrying "
|
"scsi: Underflow detected - retrying "
|
||||||
"command.\n");
|
"command.\n");
|
||||||
host_status = DID_ERROR;
|
host_status = DID_ERROR;
|
||||||
} else
|
} else {
|
||||||
|
cp->resid = residual_length;
|
||||||
host_status = DID_OK;
|
host_status = DID_OK;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -1602,6 +1602,7 @@ typedef struct fc_port {
|
||||||
|
|
||||||
#define CT_REJECT_RESPONSE 0x8001
|
#define CT_REJECT_RESPONSE 0x8001
|
||||||
#define CT_ACCEPT_RESPONSE 0x8002
|
#define CT_ACCEPT_RESPONSE 0x8002
|
||||||
|
#define CT_REASON_INVALID_COMMAND_CODE 0x01
|
||||||
#define CT_REASON_CANNOT_PERFORM 0x09
|
#define CT_REASON_CANNOT_PERFORM 0x09
|
||||||
#define CT_EXPL_ALREADY_REGISTERED 0x10
|
#define CT_EXPL_ALREADY_REGISTERED 0x10
|
||||||
|
|
||||||
|
@ -2079,6 +2080,7 @@ typedef struct scsi_qla_host {
|
||||||
uint32_t msi_enabled :1;
|
uint32_t msi_enabled :1;
|
||||||
uint32_t msix_enabled :1;
|
uint32_t msix_enabled :1;
|
||||||
uint32_t disable_serdes :1;
|
uint32_t disable_serdes :1;
|
||||||
|
uint32_t gpsc_supported :1;
|
||||||
} flags;
|
} flags;
|
||||||
|
|
||||||
atomic_t loop_state;
|
atomic_t loop_state;
|
||||||
|
|
|
@ -45,7 +45,6 @@ extern void qla2x00_update_fcports(scsi_qla_host_t *);
|
||||||
extern int qla2x00_abort_isp(scsi_qla_host_t *);
|
extern int qla2x00_abort_isp(scsi_qla_host_t *);
|
||||||
|
|
||||||
extern void qla2x00_update_fcport(scsi_qla_host_t *, fc_port_t *);
|
extern void qla2x00_update_fcport(scsi_qla_host_t *, fc_port_t *);
|
||||||
extern void qla2x00_reg_remote_port(scsi_qla_host_t *, fc_port_t *);
|
|
||||||
|
|
||||||
extern void qla2x00_alloc_fw_dump(scsi_qla_host_t *);
|
extern void qla2x00_alloc_fw_dump(scsi_qla_host_t *);
|
||||||
extern void qla2x00_try_to_stop_firmware(scsi_qla_host_t *);
|
extern void qla2x00_try_to_stop_firmware(scsi_qla_host_t *);
|
||||||
|
|
|
@ -127,8 +127,8 @@ qla2x00_chk_ms_status(scsi_qla_host_t *ha, ms_iocb_entry_t *ms_pkt,
|
||||||
ha->host_no, routine, ms_pkt->entry_status));
|
ha->host_no, routine, ms_pkt->entry_status));
|
||||||
} else {
|
} else {
|
||||||
if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
|
if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
|
||||||
comp_status =
|
comp_status = le16_to_cpu(
|
||||||
((struct ct_entry_24xx *)ms_pkt)->comp_status;
|
((struct ct_entry_24xx *)ms_pkt)->comp_status);
|
||||||
else
|
else
|
||||||
comp_status = le16_to_cpu(ms_pkt->status);
|
comp_status = le16_to_cpu(ms_pkt->status);
|
||||||
switch (comp_status) {
|
switch (comp_status) {
|
||||||
|
@ -143,6 +143,7 @@ qla2x00_chk_ms_status(scsi_qla_host_t *ha, ms_iocb_entry_t *ms_pkt,
|
||||||
DEBUG2_3(qla2x00_dump_buffer(
|
DEBUG2_3(qla2x00_dump_buffer(
|
||||||
(uint8_t *)&ct_rsp->header,
|
(uint8_t *)&ct_rsp->header,
|
||||||
sizeof(struct ct_rsp_hdr)));
|
sizeof(struct ct_rsp_hdr)));
|
||||||
|
rval = QLA_INVALID_COMMAND;
|
||||||
} else
|
} else
|
||||||
rval = QLA_SUCCESS;
|
rval = QLA_SUCCESS;
|
||||||
break;
|
break;
|
||||||
|
@ -1683,7 +1684,7 @@ qla2x00_gfpn_id(scsi_qla_host_t *ha, sw_info_t *list)
|
||||||
memset(list[i].fabric_port_name, 0, WWN_SIZE);
|
memset(list[i].fabric_port_name, 0, WWN_SIZE);
|
||||||
|
|
||||||
/* Prepare common MS IOCB */
|
/* Prepare common MS IOCB */
|
||||||
ms_pkt = qla2x00_prep_ms_iocb(ha, GFPN_ID_REQ_SIZE,
|
ms_pkt = ha->isp_ops.prep_ms_iocb(ha, GFPN_ID_REQ_SIZE,
|
||||||
GFPN_ID_RSP_SIZE);
|
GFPN_ID_RSP_SIZE);
|
||||||
|
|
||||||
/* Prepare CT request */
|
/* Prepare CT request */
|
||||||
|
@ -1784,6 +1785,8 @@ qla2x00_gpsc(scsi_qla_host_t *ha, sw_info_t *list)
|
||||||
|
|
||||||
if (!IS_QLA24XX(ha) && !IS_QLA54XX(ha))
|
if (!IS_QLA24XX(ha) && !IS_QLA54XX(ha))
|
||||||
return QLA_FUNCTION_FAILED;
|
return QLA_FUNCTION_FAILED;
|
||||||
|
if (!ha->flags.gpsc_supported)
|
||||||
|
return QLA_FUNCTION_FAILED;
|
||||||
|
|
||||||
rval = qla2x00_mgmt_svr_login(ha);
|
rval = qla2x00_mgmt_svr_login(ha);
|
||||||
if (rval)
|
if (rval)
|
||||||
|
@ -1813,8 +1816,19 @@ qla2x00_gpsc(scsi_qla_host_t *ha, sw_info_t *list)
|
||||||
/*EMPTY*/
|
/*EMPTY*/
|
||||||
DEBUG2_3(printk("scsi(%ld): GPSC issue IOCB "
|
DEBUG2_3(printk("scsi(%ld): GPSC issue IOCB "
|
||||||
"failed (%d).\n", ha->host_no, rval));
|
"failed (%d).\n", ha->host_no, rval));
|
||||||
} else if (qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp,
|
} else if ((rval = qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp,
|
||||||
"GPSC") != QLA_SUCCESS) {
|
"GPSC")) != QLA_SUCCESS) {
|
||||||
|
/* FM command unsupported? */
|
||||||
|
if (rval == QLA_INVALID_COMMAND &&
|
||||||
|
ct_rsp->header.reason_code ==
|
||||||
|
CT_REASON_INVALID_COMMAND_CODE) {
|
||||||
|
DEBUG2(printk("scsi(%ld): GPSC command "
|
||||||
|
"unsupported, disabling query...\n",
|
||||||
|
ha->host_no));
|
||||||
|
ha->flags.gpsc_supported = 0;
|
||||||
|
rval = QLA_FUNCTION_FAILED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
rval = QLA_FUNCTION_FAILED;
|
rval = QLA_FUNCTION_FAILED;
|
||||||
} else {
|
} else {
|
||||||
/* Save portname */
|
/* Save portname */
|
||||||
|
|
|
@ -2103,40 +2103,7 @@ qla2x00_iidma_fcport(scsi_qla_host_t *ha, fc_port_t *fcport)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
static void
|
||||||
* qla2x00_update_fcport
|
|
||||||
* Updates device on list.
|
|
||||||
*
|
|
||||||
* Input:
|
|
||||||
* ha = adapter block pointer.
|
|
||||||
* fcport = port structure pointer.
|
|
||||||
*
|
|
||||||
* Return:
|
|
||||||
* 0 - Success
|
|
||||||
* BIT_0 - error
|
|
||||||
*
|
|
||||||
* Context:
|
|
||||||
* Kernel context.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
qla2x00_update_fcport(scsi_qla_host_t *ha, fc_port_t *fcport)
|
|
||||||
{
|
|
||||||
fcport->ha = ha;
|
|
||||||
fcport->login_retry = 0;
|
|
||||||
fcport->port_login_retry_count = ha->port_down_retry_count *
|
|
||||||
PORT_RETRY_TIME;
|
|
||||||
atomic_set(&fcport->port_down_timer, ha->port_down_retry_count *
|
|
||||||
PORT_RETRY_TIME);
|
|
||||||
fcport->flags &= ~FCF_LOGIN_NEEDED;
|
|
||||||
|
|
||||||
qla2x00_iidma_fcport(ha, fcport);
|
|
||||||
|
|
||||||
atomic_set(&fcport->state, FCS_ONLINE);
|
|
||||||
|
|
||||||
qla2x00_reg_remote_port(ha, fcport);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
qla2x00_reg_remote_port(scsi_qla_host_t *ha, fc_port_t *fcport)
|
qla2x00_reg_remote_port(scsi_qla_host_t *ha, fc_port_t *fcport)
|
||||||
{
|
{
|
||||||
struct fc_rport_identifiers rport_ids;
|
struct fc_rport_identifiers rport_ids;
|
||||||
|
@ -2178,6 +2145,39 @@ qla2x00_reg_remote_port(scsi_qla_host_t *ha, fc_port_t *fcport)
|
||||||
fcport->os_target_id = rport->scsi_target_id;
|
fcport->os_target_id = rport->scsi_target_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* qla2x00_update_fcport
|
||||||
|
* Updates device on list.
|
||||||
|
*
|
||||||
|
* Input:
|
||||||
|
* ha = adapter block pointer.
|
||||||
|
* fcport = port structure pointer.
|
||||||
|
*
|
||||||
|
* Return:
|
||||||
|
* 0 - Success
|
||||||
|
* BIT_0 - error
|
||||||
|
*
|
||||||
|
* Context:
|
||||||
|
* Kernel context.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
qla2x00_update_fcport(scsi_qla_host_t *ha, fc_port_t *fcport)
|
||||||
|
{
|
||||||
|
fcport->ha = ha;
|
||||||
|
fcport->login_retry = 0;
|
||||||
|
fcport->port_login_retry_count = ha->port_down_retry_count *
|
||||||
|
PORT_RETRY_TIME;
|
||||||
|
atomic_set(&fcport->port_down_timer, ha->port_down_retry_count *
|
||||||
|
PORT_RETRY_TIME);
|
||||||
|
fcport->flags &= ~FCF_LOGIN_NEEDED;
|
||||||
|
|
||||||
|
qla2x00_iidma_fcport(ha, fcport);
|
||||||
|
|
||||||
|
atomic_set(&fcport->state, FCS_ONLINE);
|
||||||
|
|
||||||
|
qla2x00_reg_remote_port(ha, fcport);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* qla2x00_configure_fabric
|
* qla2x00_configure_fabric
|
||||||
* Setup SNS devices with loop ID's.
|
* Setup SNS devices with loop ID's.
|
||||||
|
@ -3476,9 +3476,11 @@ qla24xx_nvram_config(scsi_qla_host_t *ha)
|
||||||
|
|
||||||
/* Set host adapter parameters. */
|
/* Set host adapter parameters. */
|
||||||
ha->flags.disable_risc_code_load = 0;
|
ha->flags.disable_risc_code_load = 0;
|
||||||
ha->flags.enable_lip_reset = 1;
|
ha->flags.enable_lip_reset = 0;
|
||||||
ha->flags.enable_lip_full_login = 1;
|
ha->flags.enable_lip_full_login =
|
||||||
ha->flags.enable_target_reset = 1;
|
le32_to_cpu(nv->host_p) & BIT_10 ? 1: 0;
|
||||||
|
ha->flags.enable_target_reset =
|
||||||
|
le32_to_cpu(nv->host_p) & BIT_11 ? 1: 0;
|
||||||
ha->flags.enable_led_scheme = 0;
|
ha->flags.enable_led_scheme = 0;
|
||||||
ha->flags.disable_serdes = le32_to_cpu(nv->host_p) & BIT_5 ? 1: 0;
|
ha->flags.disable_serdes = le32_to_cpu(nv->host_p) & BIT_5 ? 1: 0;
|
||||||
|
|
||||||
|
|
|
@ -134,11 +134,11 @@ qla2300_intr_handler(int irq, void *dev_id)
|
||||||
if (stat & HSR_RISC_PAUSED) {
|
if (stat & HSR_RISC_PAUSED) {
|
||||||
hccr = RD_REG_WORD(®->hccr);
|
hccr = RD_REG_WORD(®->hccr);
|
||||||
if (hccr & (BIT_15 | BIT_13 | BIT_11 | BIT_8))
|
if (hccr & (BIT_15 | BIT_13 | BIT_11 | BIT_8))
|
||||||
qla_printk(KERN_INFO, ha,
|
qla_printk(KERN_INFO, ha, "Parity error -- "
|
||||||
"Parity error -- HCCR=%x.\n", hccr);
|
"HCCR=%x, Dumping firmware!\n", hccr);
|
||||||
else
|
else
|
||||||
qla_printk(KERN_INFO, ha,
|
qla_printk(KERN_INFO, ha, "RISC paused -- "
|
||||||
"RISC paused -- HCCR=%x.\n", hccr);
|
"HCCR=%x, Dumping firmware!\n", hccr);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Issue a "HARD" reset in order for the RISC
|
* Issue a "HARD" reset in order for the RISC
|
||||||
|
@ -147,6 +147,8 @@ qla2300_intr_handler(int irq, void *dev_id)
|
||||||
*/
|
*/
|
||||||
WRT_REG_WORD(®->hccr, HCCR_RESET_RISC);
|
WRT_REG_WORD(®->hccr, HCCR_RESET_RISC);
|
||||||
RD_REG_WORD(®->hccr);
|
RD_REG_WORD(®->hccr);
|
||||||
|
|
||||||
|
ha->isp_ops.fw_dump(ha, 1);
|
||||||
set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
|
set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
|
||||||
break;
|
break;
|
||||||
} else if ((stat & HSR_RISC_INT) == 0)
|
} else if ((stat & HSR_RISC_INT) == 0)
|
||||||
|
@ -475,6 +477,8 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb)
|
||||||
set_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
|
set_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
|
||||||
}
|
}
|
||||||
set_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags);
|
set_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags);
|
||||||
|
|
||||||
|
ha->flags.gpsc_supported = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MBA_CHG_IN_CONNECTION: /* Change in connection mode */
|
case MBA_CHG_IN_CONNECTION: /* Change in connection mode */
|
||||||
|
@ -1440,8 +1444,7 @@ qla24xx_intr_handler(int irq, void *dev_id)
|
||||||
|
|
||||||
qla_printk(KERN_INFO, ha, "RISC paused -- HCCR=%x, "
|
qla_printk(KERN_INFO, ha, "RISC paused -- HCCR=%x, "
|
||||||
"Dumping firmware!\n", hccr);
|
"Dumping firmware!\n", hccr);
|
||||||
qla24xx_fw_dump(ha, 1);
|
ha->isp_ops.fw_dump(ha, 1);
|
||||||
|
|
||||||
set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
|
set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
|
||||||
break;
|
break;
|
||||||
} else if ((stat & HSRX_RISC_INT) == 0)
|
} else if ((stat & HSRX_RISC_INT) == 0)
|
||||||
|
|
|
@ -1339,9 +1339,9 @@ qla2x00_lip_reset(scsi_qla_host_t *ha)
|
||||||
|
|
||||||
if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
|
if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
|
||||||
mcp->mb[0] = MBC_LIP_FULL_LOGIN;
|
mcp->mb[0] = MBC_LIP_FULL_LOGIN;
|
||||||
mcp->mb[1] = BIT_0;
|
mcp->mb[1] = BIT_6;
|
||||||
mcp->mb[2] = 0xff;
|
mcp->mb[2] = 0;
|
||||||
mcp->mb[3] = 0;
|
mcp->mb[3] = ha->loop_reset_delay;
|
||||||
mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
|
mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
|
||||||
} else {
|
} else {
|
||||||
mcp->mb[0] = MBC_LIP_RESET;
|
mcp->mb[0] = MBC_LIP_RESET;
|
||||||
|
@ -1823,8 +1823,8 @@ qla2x00_full_login_lip(scsi_qla_host_t *ha)
|
||||||
ha->host_no));
|
ha->host_no));
|
||||||
|
|
||||||
mcp->mb[0] = MBC_LIP_FULL_LOGIN;
|
mcp->mb[0] = MBC_LIP_FULL_LOGIN;
|
||||||
mcp->mb[1] = 0;
|
mcp->mb[1] = IS_QLA24XX(ha) || IS_QLA54XX(ha) ? BIT_3: 0;
|
||||||
mcp->mb[2] = 0xff;
|
mcp->mb[2] = 0;
|
||||||
mcp->mb[3] = 0;
|
mcp->mb[3] = 0;
|
||||||
mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
|
mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
|
||||||
mcp->in_mb = MBX_0;
|
mcp->in_mb = MBX_0;
|
||||||
|
@ -2486,7 +2486,7 @@ qla2x00_trace_control(scsi_qla_host_t *ha, uint16_t ctrl, dma_addr_t eft_dma,
|
||||||
mcp->mb[4] = LSW(MSD(eft_dma));
|
mcp->mb[4] = LSW(MSD(eft_dma));
|
||||||
mcp->mb[5] = MSW(MSD(eft_dma));
|
mcp->mb[5] = MSW(MSD(eft_dma));
|
||||||
mcp->mb[6] = buffers;
|
mcp->mb[6] = buffers;
|
||||||
mcp->mb[7] = buffers;
|
mcp->mb[7] = 0;
|
||||||
mcp->out_mb |= MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2;
|
mcp->out_mb |= MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2;
|
||||||
}
|
}
|
||||||
mcp->tov = 30;
|
mcp->tov = 30;
|
||||||
|
|
|
@ -1037,48 +1037,49 @@ eh_host_reset_lock:
|
||||||
static int
|
static int
|
||||||
qla2x00_loop_reset(scsi_qla_host_t *ha)
|
qla2x00_loop_reset(scsi_qla_host_t *ha)
|
||||||
{
|
{
|
||||||
int status = QLA_SUCCESS;
|
int ret;
|
||||||
struct fc_port *fcport;
|
struct fc_port *fcport;
|
||||||
|
|
||||||
if (ha->flags.enable_lip_reset) {
|
if (ha->flags.enable_lip_full_login) {
|
||||||
status = qla2x00_lip_reset(ha);
|
ret = qla2x00_full_login_lip(ha);
|
||||||
|
if (ret != QLA_SUCCESS) {
|
||||||
|
DEBUG2_3(printk("%s(%ld): bus_reset failed: "
|
||||||
|
"full_login_lip=%d.\n", __func__, ha->host_no,
|
||||||
|
ret));
|
||||||
|
}
|
||||||
|
atomic_set(&ha->loop_state, LOOP_DOWN);
|
||||||
|
atomic_set(&ha->loop_down_timer, LOOP_DOWN_TIME);
|
||||||
|
qla2x00_mark_all_devices_lost(ha, 0);
|
||||||
|
qla2x00_wait_for_loop_ready(ha);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status == QLA_SUCCESS && ha->flags.enable_target_reset) {
|
if (ha->flags.enable_lip_reset) {
|
||||||
|
ret = qla2x00_lip_reset(ha);
|
||||||
|
if (ret != QLA_SUCCESS) {
|
||||||
|
DEBUG2_3(printk("%s(%ld): bus_reset failed: "
|
||||||
|
"lip_reset=%d.\n", __func__, ha->host_no, ret));
|
||||||
|
}
|
||||||
|
qla2x00_wait_for_loop_ready(ha);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ha->flags.enable_target_reset) {
|
||||||
list_for_each_entry(fcport, &ha->fcports, list) {
|
list_for_each_entry(fcport, &ha->fcports, list) {
|
||||||
if (fcport->port_type != FCT_TARGET)
|
if (fcport->port_type != FCT_TARGET)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
status = qla2x00_device_reset(ha, fcport);
|
ret = qla2x00_device_reset(ha, fcport);
|
||||||
if (status != QLA_SUCCESS)
|
if (ret != QLA_SUCCESS) {
|
||||||
break;
|
DEBUG2_3(printk("%s(%ld): bus_reset failed: "
|
||||||
|
"target_reset=%d d_id=%x.\n", __func__,
|
||||||
|
ha->host_no, ret, fcport->d_id.b24));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status == QLA_SUCCESS &&
|
|
||||||
((!ha->flags.enable_target_reset &&
|
|
||||||
!ha->flags.enable_lip_reset) ||
|
|
||||||
ha->flags.enable_lip_full_login)) {
|
|
||||||
|
|
||||||
status = qla2x00_full_login_lip(ha);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Issue marker command only when we are going to start the I/O */
|
/* Issue marker command only when we are going to start the I/O */
|
||||||
ha->marker_needed = 1;
|
ha->marker_needed = 1;
|
||||||
|
|
||||||
if (status) {
|
return QLA_SUCCESS;
|
||||||
/* Empty */
|
|
||||||
DEBUG2_3(printk("%s(%ld): **** FAILED ****\n",
|
|
||||||
__func__,
|
|
||||||
ha->host_no));
|
|
||||||
} else {
|
|
||||||
/* Empty */
|
|
||||||
DEBUG3(printk("%s(%ld): exiting normally.\n",
|
|
||||||
__func__,
|
|
||||||
ha->host_no));
|
|
||||||
}
|
|
||||||
|
|
||||||
return(status);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1413,7 +1414,9 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||||
|
|
||||||
sht = &qla2x00_driver_template;
|
sht = &qla2x00_driver_template;
|
||||||
if (pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2422 ||
|
if (pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2422 ||
|
||||||
pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2432)
|
pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2432 ||
|
||||||
|
pdev->device == PCI_DEVICE_ID_QLOGIC_ISP5422 ||
|
||||||
|
pdev->device == PCI_DEVICE_ID_QLOGIC_ISP5432)
|
||||||
sht = &qla24xx_driver_template;
|
sht = &qla24xx_driver_template;
|
||||||
host = scsi_host_alloc(sht, sizeof(scsi_qla_host_t));
|
host = scsi_host_alloc(sht, sizeof(scsi_qla_host_t));
|
||||||
if (host == NULL) {
|
if (host == NULL) {
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
/*
|
/*
|
||||||
* Driver version
|
* Driver version
|
||||||
*/
|
*/
|
||||||
#define QLA2XXX_VERSION "8.01.07-k3"
|
#define QLA2XXX_VERSION "8.01.07-k4"
|
||||||
|
|
||||||
#define QLA_DRIVER_MAJOR_VER 8
|
#define QLA_DRIVER_MAJOR_VER 8
|
||||||
#define QLA_DRIVER_MINOR_VER 1
|
#define QLA_DRIVER_MINOR_VER 1
|
||||||
|
|
|
@ -133,12 +133,10 @@ struct async_scan_data {
|
||||||
/**
|
/**
|
||||||
* scsi_complete_async_scans - Wait for asynchronous scans to complete
|
* scsi_complete_async_scans - Wait for asynchronous scans to complete
|
||||||
*
|
*
|
||||||
* Asynchronous scans add themselves to the scanning_hosts list. Once
|
* When this function returns, any host which started scanning before
|
||||||
* that list is empty, we know that the scans are complete. Rather than
|
* this function was called will have finished its scan. Hosts which
|
||||||
* waking up periodically to check the state of the list, we pretend to be
|
* started scanning after this function was called may or may not have
|
||||||
* a scanning task by adding ourselves at the end of the list and going to
|
* finished.
|
||||||
* sleep. When the task before us wakes us up, we take ourselves off the
|
|
||||||
* list and return.
|
|
||||||
*/
|
*/
|
||||||
int scsi_complete_async_scans(void)
|
int scsi_complete_async_scans(void)
|
||||||
{
|
{
|
||||||
|
@ -171,6 +169,11 @@ int scsi_complete_async_scans(void)
|
||||||
|
|
||||||
spin_lock(&async_scan_lock);
|
spin_lock(&async_scan_lock);
|
||||||
list_del(&data->list);
|
list_del(&data->list);
|
||||||
|
if (!list_empty(&scanning_hosts)) {
|
||||||
|
struct async_scan_data *next = list_entry(scanning_hosts.next,
|
||||||
|
struct async_scan_data, list);
|
||||||
|
complete(&next->prev_finished);
|
||||||
|
}
|
||||||
done:
|
done:
|
||||||
spin_unlock(&async_scan_lock);
|
spin_unlock(&async_scan_lock);
|
||||||
|
|
||||||
|
@ -739,6 +742,14 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result,
|
||||||
sdev->no_uld_attach = 1;
|
sdev->no_uld_attach = 1;
|
||||||
|
|
||||||
switch (sdev->type = (inq_result[0] & 0x1f)) {
|
switch (sdev->type = (inq_result[0] & 0x1f)) {
|
||||||
|
case TYPE_RBC:
|
||||||
|
/* RBC devices can return SCSI-3 compliance and yet
|
||||||
|
* still not support REPORT LUNS, so make them act as
|
||||||
|
* BLIST_NOREPORTLUN unless BLIST_REPORTLUN2 is
|
||||||
|
* specifically set */
|
||||||
|
if ((*bflags & BLIST_REPORTLUN2) == 0)
|
||||||
|
*bflags |= BLIST_NOREPORTLUN;
|
||||||
|
/* fall through */
|
||||||
case TYPE_TAPE:
|
case TYPE_TAPE:
|
||||||
case TYPE_DISK:
|
case TYPE_DISK:
|
||||||
case TYPE_PRINTER:
|
case TYPE_PRINTER:
|
||||||
|
@ -749,11 +760,17 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result,
|
||||||
case TYPE_ENCLOSURE:
|
case TYPE_ENCLOSURE:
|
||||||
case TYPE_COMM:
|
case TYPE_COMM:
|
||||||
case TYPE_RAID:
|
case TYPE_RAID:
|
||||||
case TYPE_RBC:
|
|
||||||
sdev->writeable = 1;
|
sdev->writeable = 1;
|
||||||
break;
|
break;
|
||||||
case TYPE_WORM:
|
|
||||||
case TYPE_ROM:
|
case TYPE_ROM:
|
||||||
|
/* MMC devices can return SCSI-3 compliance and yet
|
||||||
|
* still not support REPORT LUNS, so make them act as
|
||||||
|
* BLIST_NOREPORTLUN unless BLIST_REPORTLUN2 is
|
||||||
|
* specifically set */
|
||||||
|
if ((*bflags & BLIST_REPORTLUN2) == 0)
|
||||||
|
*bflags |= BLIST_NOREPORTLUN;
|
||||||
|
/* fall through */
|
||||||
|
case TYPE_WORM:
|
||||||
sdev->writeable = 0;
|
sdev->writeable = 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -1416,7 +1416,7 @@ static __init int iscsi_transport_init(void)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
printk(KERN_INFO "Loading iSCSI transport class v%s.",
|
printk(KERN_INFO "Loading iSCSI transport class v%s.\n",
|
||||||
ISCSI_TRANSPORT_VERSION);
|
ISCSI_TRANSPORT_VERSION);
|
||||||
|
|
||||||
err = class_register(&iscsi_transport_class);
|
err = class_register(&iscsi_transport_class);
|
||||||
|
|
|
@ -122,7 +122,7 @@ static int spi_execute(struct scsi_device *sdev, const void *cmd,
|
||||||
if (!sshdr)
|
if (!sshdr)
|
||||||
sshdr = &sshdr_tmp;
|
sshdr = &sshdr_tmp;
|
||||||
|
|
||||||
if (scsi_normalize_sense(sense, sizeof(*sense),
|
if (scsi_normalize_sense(sense, SCSI_SENSE_BUFFERSIZE,
|
||||||
sshdr)
|
sshdr)
|
||||||
&& sshdr->sense_key == UNIT_ATTENTION)
|
&& sshdr->sense_key == UNIT_ATTENTION)
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -114,6 +114,7 @@
|
||||||
#define DPRINTK( when, msg... ) do { if ( (DEBUG & (when)) == (when) ) printk( msg ); } while (0)
|
#define DPRINTK( when, msg... ) do { if ( (DEBUG & (when)) == (when) ) printk( msg ); } while (0)
|
||||||
#else
|
#else
|
||||||
#define DPRINTK( when, msg... ) do { } while (0)
|
#define DPRINTK( when, msg... ) do { } while (0)
|
||||||
|
#define DEBUG 0
|
||||||
#endif
|
#endif
|
||||||
#define DANY( msg... ) DPRINTK( 0xffff, msg );
|
#define DANY( msg... ) DPRINTK( 0xffff, msg );
|
||||||
|
|
||||||
|
@ -523,7 +524,7 @@ int __init seagate_st0x_detect (struct scsi_host_template * tpnt)
|
||||||
#ifdef ARBITRATE
|
#ifdef ARBITRATE
|
||||||
" ARBITRATE"
|
" ARBITRATE"
|
||||||
#endif
|
#endif
|
||||||
#ifdef DEBUG
|
#if DEBUG
|
||||||
" DEBUG"
|
" DEBUG"
|
||||||
#endif
|
#endif
|
||||||
#ifdef FAST
|
#ifdef FAST
|
||||||
|
@ -733,7 +734,7 @@ static int internal_command (unsigned char target, unsigned char lun,
|
||||||
unsigned char *data = NULL;
|
unsigned char *data = NULL;
|
||||||
struct scatterlist *buffer = NULL;
|
struct scatterlist *buffer = NULL;
|
||||||
int clock, temp, nobuffs = 0, done = 0, len = 0;
|
int clock, temp, nobuffs = 0, done = 0, len = 0;
|
||||||
#ifdef DEBUG
|
#if DEBUG
|
||||||
int transfered = 0, phase = 0, newphase;
|
int transfered = 0, phase = 0, newphase;
|
||||||
#endif
|
#endif
|
||||||
register unsigned char status_read;
|
register unsigned char status_read;
|
||||||
|
|
|
@ -468,7 +468,7 @@ static int sr_block_ioctl(struct inode *inode, struct file *file, unsigned cmd,
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = cdrom_ioctl(file, &cd->cdi, inode, cmd, arg);
|
ret = cdrom_ioctl(file, &cd->cdi, inode, cmd, arg);
|
||||||
if (ret != ENOSYS)
|
if (ret != -ENOSYS)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue