You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (54 commits) [SCSI] Initial Commit of qla4xxx [SCSI] raid class: handle component-add errors [SCSI] SCSI megaraid_sas: handle thrown errors [SCSI] SCSI aic94xx: handle sysfs errors [SCSI] SCSI st: fix error handling in module init, sysfs [SCSI] SCSI sd: fix module init/exit error handling [SCSI] SCSI osst: add error handling to module init, sysfs [SCSI] scsi: remove hosts.h [SCSI] scsi: Scsi_Cmnd convertion in aic7xxx_old.c [SCSI] megaraid_sas: sets ioctl timeout and updates version,changelog [SCSI] megaraid_sas: adds tasklet for cmd completion [SCSI] megaraid_sas: prints pending cmds before setting hw_crit_error [SCSI] megaraid_sas: function pointer for disable interrupt [SCSI] megaraid_sas: frame count optimization [SCSI] megaraid_sas: FW transition and q size changes [SCSI] qla2xxx: Update version number to 8.01.07-k2. [SCSI] qla2xxx: Stall mid-layer error handlers while rport is blocked. [SCSI] qla2xxx: Add MODULE_FIRMWARE tags. [SCSI] qla2xxx: Add support for host port state FC transport attribute. [SCSI] qla2xxx: Add support for fabric name FC transport attribute. ...
This commit is contained in:
@@ -1,4 +1,49 @@
|
||||
|
||||
1 Release Date : Mon Oct 02 11:21:32 PDT 2006 - Sumant Patro <Sumant.Patro@lsil.com>
|
||||
2 Current Version : 00.00.03.05
|
||||
3 Older Version : 00.00.03.04
|
||||
|
||||
i. PCI_DEVICE macro used
|
||||
|
||||
Convert the pci_device_id-table of the megaraid_sas-driver to the PCI_DEVICE-macro, to safe some lines.
|
||||
|
||||
- Henrik Kretzschmar <henne@nachtwindheim.de>
|
||||
ii. All compiler warnings removed
|
||||
iii. megasas_ctrl_info struct reverted to 3.02 release
|
||||
iv. Default value of megasas_dbg_lvl set to 0
|
||||
v. Removing in megasas_exit the sysfs entry created for megasas_dbg_lvl
|
||||
vi. In megasas_teardown_frame_pool(), cmd->frame was passed instead of
|
||||
cmd->sense to pci_pool_free. Fixed. Bug was pointed out by
|
||||
Eric Sesterhenn
|
||||
|
||||
1 Release Date : Wed Sep 13 14:22:51 PDT 2006 - Sumant Patro <Sumant.Patro@lsil.com>
|
||||
2 Current Version : 00.00.03.04
|
||||
3 Older Version : 00.00.03.03
|
||||
|
||||
i. Added Reboot notify
|
||||
ii. Reduced by 1 max cmds sent to FW from Driver to make the reply_q_sz same
|
||||
as Max Cmds FW can support
|
||||
|
||||
1 Release Date : Tue Aug 22 16:33:14 PDT 2006 - Sumant Patro <Sumant.Patro@lsil.com>
|
||||
2 Current Version : 00.00.03.03
|
||||
3 Older Version : 00.00.03.02
|
||||
|
||||
i. Send stop adapter to FW & Dump pending FW cmds before declaring adapter dead.
|
||||
New varible added to set dbg level.
|
||||
ii. Disable interrupt made as fn pointer as they are different for 1068 / 1078
|
||||
iii. Frame count optimization. Main frame can contain 2 SGE for 64 bit SGLs and
|
||||
3 SGE for 32 bit SGL
|
||||
iv. Tasklet added for cmd completion
|
||||
v. If FW in operational state before firing INIT, now we send RESET Flag to FW instead of just READY. This is used to do soft reset.
|
||||
vi. megasas_ctrl_prop structure updated (based on FW struct)
|
||||
vii. Added print : FW now in Ready State during initialization
|
||||
|
||||
1 Release Date : Sun Aug 06 22:49:52 PDT 2006 - Sumant Patro <Sumant.Patro@lsil.com>
|
||||
2 Current Version : 00.00.03.02
|
||||
3 Older Version : 00.00.03.01
|
||||
|
||||
i. Added FW tranistion state for Hotplug scenario
|
||||
|
||||
1 Release Date : Sun May 14 22:49:52 PDT 2006 - Sumant Patro <Sumant.Patro@lsil.com>
|
||||
2 Current Version : 00.00.03.01
|
||||
3 Older Version : 00.00.02.04
|
||||
|
||||
@@ -6,13 +6,4 @@
|
||||
#include <linux/version.h>
|
||||
#include <scsi/scsi_device.h>
|
||||
|
||||
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,6))
|
||||
static int inline scsi_device_online(struct scsi_device *sdev)
|
||||
{
|
||||
return sdev->online;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*}-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
||||
#endif /* _LINUX_COMPAT_H */
|
||||
|
||||
@@ -2211,7 +2211,7 @@ static int __init twa_init(void)
|
||||
{
|
||||
printk(KERN_WARNING "3ware 9000 Storage Controller device driver for Linux v%s.\n", TW_DRIVER_VERSION);
|
||||
|
||||
return pci_module_init(&twa_driver);
|
||||
return pci_register_driver(&twa_driver);
|
||||
} /* End twa_init() */
|
||||
|
||||
/* This function is called on driver exit */
|
||||
|
||||
@@ -2486,7 +2486,7 @@ static int __init tw_init(void)
|
||||
{
|
||||
printk(KERN_WARNING "3ware Storage Controller device driver for Linux v%s.\n", TW_DRIVER_VERSION);
|
||||
|
||||
return pci_module_init(&tw_driver);
|
||||
return pci_register_driver(&tw_driver);
|
||||
} /* End tw_init() */
|
||||
|
||||
/* This function is called on driver exit */
|
||||
|
||||
@@ -74,7 +74,7 @@ static char *tw_aen_string[] = {
|
||||
[0x00D] = "ERROR: Logical unit deleted: Unit #",
|
||||
[0x00F] = "WARNING: SMART threshold exceeded: Port #",
|
||||
[0x021] = "WARNING: ATA UDMA downgrade: Port #",
|
||||
[0x021] = "WARNING: ATA UDMA upgrade: Port #",
|
||||
[0x022] = "WARNING: ATA UDMA upgrade: Port #",
|
||||
[0x023] = "WARNING: Sector repair occurred: Port #",
|
||||
[0x024] = "ERROR: SBUF integrity check failure",
|
||||
[0x025] = "ERROR: Lost cached write: Port #",
|
||||
|
||||
@@ -1016,7 +1016,7 @@ config SCSI_SYM53C8XX_MMIO
|
||||
|
||||
config SCSI_IPR
|
||||
tristate "IBM Power Linux RAID adapter support"
|
||||
depends on PCI && SCSI
|
||||
depends on PCI && SCSI && ATA
|
||||
select FW_LOADER
|
||||
---help---
|
||||
This driver supports the IBM Power Linux family RAID adapters.
|
||||
@@ -1246,6 +1246,7 @@ config SCSI_QLOGICPTI
|
||||
module will be called qlogicpti.
|
||||
|
||||
source "drivers/scsi/qla2xxx/Kconfig"
|
||||
source "drivers/scsi/qla4xxx/Kconfig"
|
||||
|
||||
config SCSI_LPFC
|
||||
tristate "Emulex LightPulse Fibre Channel Support"
|
||||
@@ -1262,8 +1263,8 @@ config SCSI_SEAGATE
|
||||
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,
|
||||
available from <http://www.tldp.org/docs.html#howto>. If it
|
||||
doesn't work out of the box, you may have to change some settings in
|
||||
<file:drivers/scsi/seagate.h>.
|
||||
doesn't work out of the box, you may have to change some macros at
|
||||
compiletime, which are described in <file:drivers/scsi/seagate.c>.
|
||||
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called seagate.
|
||||
|
||||
@@ -84,6 +84,7 @@ obj-$(CONFIG_SCSI_QLOGIC_FAS) += qlogicfas408.o qlogicfas.o
|
||||
obj-$(CONFIG_PCMCIA_QLOGIC) += qlogicfas408.o
|
||||
obj-$(CONFIG_SCSI_QLOGIC_1280) += qla1280.o
|
||||
obj-$(CONFIG_SCSI_QLA_FC) += qla2xxx/
|
||||
obj-$(CONFIG_SCSI_QLA_ISCSI) += qla4xxx/
|
||||
obj-$(CONFIG_SCSI_LPFC) += lpfc/
|
||||
obj-$(CONFIG_SCSI_PAS16) += pas16.o
|
||||
obj-$(CONFIG_SCSI_SEAGATE) += seagate.o
|
||||
|
||||
@@ -1187,7 +1187,7 @@ static struct pci_driver inia100_pci_driver = {
|
||||
|
||||
static int __init inia100_init(void)
|
||||
{
|
||||
return pci_module_init(&inia100_pci_driver);
|
||||
return pci_register_driver(&inia100_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit inia100_exit(void)
|
||||
|
||||
@@ -527,7 +527,8 @@ ahd_inw(struct ahd_softc *ahd, u_int port)
|
||||
* or have other side effects when the low byte is
|
||||
* read.
|
||||
*/
|
||||
return ((ahd_inb(ahd, port+1) << 8) | ahd_inb(ahd, port));
|
||||
uint16_t r = ahd_inb(ahd, port+1) << 8;
|
||||
return r | ahd_inb(ahd, port);
|
||||
}
|
||||
|
||||
static __inline void
|
||||
|
||||
@@ -198,7 +198,7 @@ ahd_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
int
|
||||
ahd_linux_pci_init(void)
|
||||
{
|
||||
return (pci_module_init(&aic79xx_pci_driver));
|
||||
return pci_register_driver(&aic79xx_pci_driver);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -300,7 +300,8 @@ ahc_fetch_transinfo(struct ahc_softc *ahc, char channel, u_int our_id,
|
||||
static __inline uint16_t
|
||||
ahc_inw(struct ahc_softc *ahc, u_int port)
|
||||
{
|
||||
return ((ahc_inb(ahc, port+1) << 8) | ahc_inb(ahc, port));
|
||||
uint16_t r = ahc_inb(ahc, port+1) << 8;
|
||||
return r | ahc_inb(ahc, port);
|
||||
}
|
||||
|
||||
static __inline void
|
||||
|
||||
@@ -246,8 +246,7 @@ ahc_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
int
|
||||
ahc_linux_pci_init(void)
|
||||
{
|
||||
/* Translate error or zero return into zero or one */
|
||||
return pci_module_init(&aic7xxx_pci_driver) ? 0 : 1;
|
||||
return pci_register_driver(&aic7xxx_pci_driver);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
+141
-151
@@ -780,24 +780,26 @@ typedef enum {
|
||||
} ahc_bugs;
|
||||
|
||||
struct aic7xxx_scb {
|
||||
struct aic7xxx_hwscb *hscb; /* corresponding hardware scb */
|
||||
Scsi_Cmnd *cmd; /* Scsi_Cmnd for this scb */
|
||||
struct aic7xxx_scb *q_next; /* next scb in queue */
|
||||
volatile scb_flag_type flags; /* current state of scb */
|
||||
struct hw_scatterlist *sg_list; /* SG list in adapter format */
|
||||
unsigned char tag_action;
|
||||
unsigned char sg_count;
|
||||
unsigned char *sense_cmd; /*
|
||||
* Allocate 6 characters for
|
||||
* sense command.
|
||||
*/
|
||||
unsigned char *cmnd;
|
||||
unsigned int sg_length; /* We init this during buildscb so we
|
||||
* don't have to calculate anything
|
||||
* during underflow/overflow/stat code
|
||||
*/
|
||||
void *kmalloc_ptr;
|
||||
struct aic7xxx_scb_dma *scb_dma;
|
||||
struct aic7xxx_hwscb *hscb; /* corresponding hardware scb */
|
||||
struct scsi_cmnd *cmd; /* scsi_cmnd for this scb */
|
||||
struct aic7xxx_scb *q_next; /* next scb in queue */
|
||||
volatile scb_flag_type flags; /* current state of scb */
|
||||
struct hw_scatterlist *sg_list; /* SG list in adapter format */
|
||||
unsigned char tag_action;
|
||||
unsigned char sg_count;
|
||||
unsigned char *sense_cmd; /*
|
||||
* Allocate 6 characters for
|
||||
* sense command.
|
||||
*/
|
||||
unsigned char *cmnd;
|
||||
unsigned int sg_length; /*
|
||||
* We init this during
|
||||
* buildscb so we don't have
|
||||
* to calculate anything during
|
||||
* underflow/overflow/stat code
|
||||
*/
|
||||
void *kmalloc_ptr;
|
||||
struct aic7xxx_scb_dma *scb_dma;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -918,79 +920,77 @@ struct aic7xxx_host {
|
||||
* We are grouping things here....first, items that get either read or
|
||||
* written with nearly every interrupt
|
||||
*/
|
||||
volatile long flags;
|
||||
ahc_feature features; /* chip features */
|
||||
unsigned long base; /* card base address */
|
||||
volatile unsigned char __iomem *maddr; /* memory mapped address */
|
||||
unsigned long isr_count; /* Interrupt count */
|
||||
unsigned long spurious_int;
|
||||
scb_data_type *scb_data;
|
||||
struct aic7xxx_cmd_queue {
|
||||
Scsi_Cmnd *head;
|
||||
Scsi_Cmnd *tail;
|
||||
} completeq;
|
||||
volatile long flags;
|
||||
ahc_feature features; /* chip features */
|
||||
unsigned long base; /* card base address */
|
||||
volatile unsigned char __iomem *maddr; /* memory mapped address */
|
||||
unsigned long isr_count; /* Interrupt count */
|
||||
unsigned long spurious_int;
|
||||
scb_data_type *scb_data;
|
||||
struct aic7xxx_cmd_queue {
|
||||
struct scsi_cmnd *head;
|
||||
struct scsi_cmnd *tail;
|
||||
} completeq;
|
||||
|
||||
/*
|
||||
* Things read/written on nearly every entry into aic7xxx_queue()
|
||||
*/
|
||||
volatile scb_queue_type waiting_scbs;
|
||||
unsigned char unpause; /* unpause value for HCNTRL */
|
||||
unsigned char pause; /* pause value for HCNTRL */
|
||||
volatile unsigned char qoutfifonext;
|
||||
volatile unsigned char activescbs; /* active scbs */
|
||||
volatile unsigned char max_activescbs;
|
||||
volatile unsigned char qinfifonext;
|
||||
volatile unsigned char *untagged_scbs;
|
||||
volatile unsigned char *qoutfifo;
|
||||
volatile unsigned char *qinfifo;
|
||||
/*
|
||||
* Things read/written on nearly every entry into aic7xxx_queue()
|
||||
*/
|
||||
volatile scb_queue_type waiting_scbs;
|
||||
unsigned char unpause; /* unpause value for HCNTRL */
|
||||
unsigned char pause; /* pause value for HCNTRL */
|
||||
volatile unsigned char qoutfifonext;
|
||||
volatile unsigned char activescbs; /* active scbs */
|
||||
volatile unsigned char max_activescbs;
|
||||
volatile unsigned char qinfifonext;
|
||||
volatile unsigned char *untagged_scbs;
|
||||
volatile unsigned char *qoutfifo;
|
||||
volatile unsigned char *qinfifo;
|
||||
|
||||
unsigned char dev_last_queue_full[MAX_TARGETS];
|
||||
unsigned char dev_last_queue_full_count[MAX_TARGETS];
|
||||
unsigned short ultraenb; /* Gets downloaded to card as a
|
||||
bitmap */
|
||||
unsigned short discenable; /* Gets downloaded to card as a
|
||||
bitmap */
|
||||
transinfo_type user[MAX_TARGETS];
|
||||
unsigned char dev_last_queue_full[MAX_TARGETS];
|
||||
unsigned char dev_last_queue_full_count[MAX_TARGETS];
|
||||
unsigned short ultraenb; /* Gets downloaded to card as a bitmap */
|
||||
unsigned short discenable; /* Gets downloaded to card as a bitmap */
|
||||
transinfo_type user[MAX_TARGETS];
|
||||
|
||||
unsigned char msg_buf[13]; /* The message for the target */
|
||||
unsigned char msg_type;
|
||||
unsigned char msg_buf[13]; /* The message for the target */
|
||||
unsigned char msg_type;
|
||||
#define MSG_TYPE_NONE 0x00
|
||||
#define MSG_TYPE_INITIATOR_MSGOUT 0x01
|
||||
#define MSG_TYPE_INITIATOR_MSGIN 0x02
|
||||
unsigned char msg_len; /* Length of message */
|
||||
unsigned char msg_index; /* Index into msg_buf array */
|
||||
unsigned char msg_len; /* Length of message */
|
||||
unsigned char msg_index; /* Index into msg_buf array */
|
||||
|
||||
|
||||
/*
|
||||
* We put the less frequently used host structure items after the more
|
||||
* frequently used items to try and ease the burden on the cache subsystem.
|
||||
* These entries are not *commonly* accessed, whereas the preceding entries
|
||||
* are accessed very often.
|
||||
*/
|
||||
|
||||
unsigned int irq; /* IRQ for this adapter */
|
||||
int instance; /* aic7xxx instance number */
|
||||
int scsi_id; /* host adapter SCSI ID */
|
||||
int scsi_id_b; /* channel B for twin adapters */
|
||||
unsigned int bios_address;
|
||||
int board_name_index;
|
||||
unsigned short bios_control; /* bios control - SEEPROM */
|
||||
unsigned short adapter_control; /* adapter control - SEEPROM */
|
||||
struct pci_dev *pdev;
|
||||
unsigned char pci_bus;
|
||||
unsigned char pci_device_fn;
|
||||
struct seeprom_config sc;
|
||||
unsigned short sc_type;
|
||||
unsigned short sc_size;
|
||||
struct aic7xxx_host *next; /* allow for multiple IRQs */
|
||||
struct Scsi_Host *host; /* pointer to scsi host */
|
||||
struct list_head aic_devs; /* all aic_dev structs on host */
|
||||
int host_no; /* SCSI host number */
|
||||
unsigned long mbase; /* I/O memory address */
|
||||
ahc_chip chip; /* chip type */
|
||||
ahc_bugs bugs;
|
||||
dma_addr_t fifo_dma; /* DMA handle for fifo arrays */
|
||||
/*
|
||||
* We put the less frequently used host structure items
|
||||
* after the more frequently used items to try and ease
|
||||
* the burden on the cache subsystem.
|
||||
* These entries are not *commonly* accessed, whereas
|
||||
* the preceding entries are accessed very often.
|
||||
*/
|
||||
|
||||
unsigned int irq; /* IRQ for this adapter */
|
||||
int instance; /* aic7xxx instance number */
|
||||
int scsi_id; /* host adapter SCSI ID */
|
||||
int scsi_id_b; /* channel B for twin adapters */
|
||||
unsigned int bios_address;
|
||||
int board_name_index;
|
||||
unsigned short bios_control; /* bios control - SEEPROM */
|
||||
unsigned short adapter_control; /* adapter control - SEEPROM */
|
||||
struct pci_dev *pdev;
|
||||
unsigned char pci_bus;
|
||||
unsigned char pci_device_fn;
|
||||
struct seeprom_config sc;
|
||||
unsigned short sc_type;
|
||||
unsigned short sc_size;
|
||||
struct aic7xxx_host *next; /* allow for multiple IRQs */
|
||||
struct Scsi_Host *host; /* pointer to scsi host */
|
||||
struct list_head aic_devs; /* all aic_dev structs on host */
|
||||
int host_no; /* SCSI host number */
|
||||
unsigned long mbase; /* I/O memory address */
|
||||
ahc_chip chip; /* chip type */
|
||||
ahc_bugs bugs;
|
||||
dma_addr_t fifo_dma; /* DMA handle for fifo arrays */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -1271,7 +1271,7 @@ static void aic7xxx_set_syncrate(struct aic7xxx_host *p,
|
||||
static void aic7xxx_set_width(struct aic7xxx_host *p, int target, int channel,
|
||||
int lun, unsigned int width, unsigned int type,
|
||||
struct aic_dev_data *aic_dev);
|
||||
static void aic7xxx_panic_abort(struct aic7xxx_host *p, Scsi_Cmnd *cmd);
|
||||
static void aic7xxx_panic_abort(struct aic7xxx_host *p, struct scsi_cmnd *cmd);
|
||||
static void aic7xxx_print_card(struct aic7xxx_host *p);
|
||||
static void aic7xxx_print_scratch_ram(struct aic7xxx_host *p);
|
||||
static void aic7xxx_print_sequencer(struct aic7xxx_host *p, int downloaded);
|
||||
@@ -2626,7 +2626,7 @@ aic7xxx_allocate_scb(struct aic7xxx_host *p)
|
||||
* we're finished. This function queues the completed commands.
|
||||
*-F*************************************************************************/
|
||||
static void
|
||||
aic7xxx_queue_cmd_complete(struct aic7xxx_host *p, Scsi_Cmnd *cmd)
|
||||
aic7xxx_queue_cmd_complete(struct aic7xxx_host *p, struct scsi_cmnd *cmd)
|
||||
{
|
||||
aic7xxx_position(cmd) = SCB_LIST_NULL;
|
||||
cmd->host_scribble = (char *)p->completeq.head;
|
||||
@@ -2640,18 +2640,16 @@ aic7xxx_queue_cmd_complete(struct aic7xxx_host *p, Scsi_Cmnd *cmd)
|
||||
* Description:
|
||||
* Process the completed command queue.
|
||||
*-F*************************************************************************/
|
||||
static void
|
||||
aic7xxx_done_cmds_complete(struct aic7xxx_host *p)
|
||||
static void aic7xxx_done_cmds_complete(struct aic7xxx_host *p)
|
||||
{
|
||||
Scsi_Cmnd *cmd;
|
||||
|
||||
while (p->completeq.head != NULL)
|
||||
{
|
||||
cmd = p->completeq.head;
|
||||
p->completeq.head = (Scsi_Cmnd *)cmd->host_scribble;
|
||||
cmd->host_scribble = NULL;
|
||||
cmd->scsi_done(cmd);
|
||||
}
|
||||
struct scsi_cmnd *cmd;
|
||||
|
||||
while (p->completeq.head != NULL) {
|
||||
cmd = p->completeq.head;
|
||||
p->completeq.head = (struct scsi_Cmnd *) cmd->host_scribble;
|
||||
cmd->host_scribble = NULL;
|
||||
cmd->scsi_done(cmd);
|
||||
}
|
||||
}
|
||||
|
||||
/*+F*************************************************************************
|
||||
@@ -2687,11 +2685,11 @@ aic7xxx_free_scb(struct aic7xxx_host *p, struct aic7xxx_scb *scb)
|
||||
static void
|
||||
aic7xxx_done(struct aic7xxx_host *p, struct aic7xxx_scb *scb)
|
||||
{
|
||||
Scsi_Cmnd *cmd = scb->cmd;
|
||||
struct aic_dev_data *aic_dev = cmd->device->hostdata;
|
||||
int tindex = TARGET_INDEX(cmd);
|
||||
struct aic7xxx_scb *scbp;
|
||||
unsigned char queue_depth;
|
||||
struct scsi_cmnd *cmd = scb->cmd;
|
||||
struct aic_dev_data *aic_dev = cmd->device->hostdata;
|
||||
int tindex = TARGET_INDEX(cmd);
|
||||
struct aic7xxx_scb *scbp;
|
||||
unsigned char queue_depth;
|
||||
|
||||
if (cmd->use_sg > 1)
|
||||
{
|
||||
@@ -2891,7 +2889,7 @@ aic7xxx_done(struct aic7xxx_host *p, struct aic7xxx_scb *scb)
|
||||
* aic7xxx_run_done_queue
|
||||
*
|
||||
* Description:
|
||||
* Calls the aic7xxx_done() for the Scsi_Cmnd of each scb in the
|
||||
* Calls the aic7xxx_done() for the scsi_cmnd of each scb in the
|
||||
* aborted list, and adds each scb to the free list. If complete
|
||||
* is TRUE, we also process the commands complete list.
|
||||
*-F*************************************************************************/
|
||||
@@ -3826,9 +3824,9 @@ aic7xxx_construct_wdtr(struct aic7xxx_host *p, unsigned char bus_width)
|
||||
static void
|
||||
aic7xxx_calculate_residual (struct aic7xxx_host *p, struct aic7xxx_scb *scb)
|
||||
{
|
||||
struct aic7xxx_hwscb *hscb;
|
||||
Scsi_Cmnd *cmd;
|
||||
int actual, i;
|
||||
struct aic7xxx_hwscb *hscb;
|
||||
struct scsi_cmnd *cmd;
|
||||
int actual, i;
|
||||
|
||||
cmd = scb->cmd;
|
||||
hscb = scb->hscb;
|
||||
@@ -4219,20 +4217,20 @@ aic7xxx_handle_seqint(struct aic7xxx_host *p, unsigned char intstat)
|
||||
|
||||
case BAD_STATUS:
|
||||
{
|
||||
unsigned char scb_index;
|
||||
struct aic7xxx_hwscb *hscb;
|
||||
Scsi_Cmnd *cmd;
|
||||
unsigned char scb_index;
|
||||
struct aic7xxx_hwscb *hscb;
|
||||
struct scsi_cmnd *cmd;
|
||||
|
||||
/* The sequencer will notify us when a command has an error that
|
||||
* would be of interest to the kernel. This allows us to leave
|
||||
* the sequencer running in the common case of command completes
|
||||
* without error. The sequencer will have DMA'd the SCB back
|
||||
* up to us, so we can reference the drivers SCB array.
|
||||
*
|
||||
* Set the default return value to 0 indicating not to send
|
||||
* sense. The sense code will change this if needed and this
|
||||
* reduces code duplication.
|
||||
*/
|
||||
/* The sequencer will notify us when a command has an error that
|
||||
* would be of interest to the kernel. This allows us to leave
|
||||
* the sequencer running in the common case of command completes
|
||||
* without error. The sequencer will have DMA'd the SCB back
|
||||
* up to us, so we can reference the drivers SCB array.
|
||||
*
|
||||
* Set the default return value to 0 indicating not to send
|
||||
* sense. The sense code will change this if needed and this
|
||||
* reduces code duplication.
|
||||
*/
|
||||
aic_outb(p, 0, RETURN_1);
|
||||
scb_index = aic_inb(p, SCB_TAG);
|
||||
if (scb_index > p->scb_data->numscbs)
|
||||
@@ -5800,9 +5798,9 @@ aic7xxx_handle_scsiint(struct aic7xxx_host *p, unsigned char intstat)
|
||||
}
|
||||
else if ((status & SELTO) != 0)
|
||||
{
|
||||
unsigned char scbptr;
|
||||
unsigned char nextscb;
|
||||
Scsi_Cmnd *cmd;
|
||||
unsigned char scbptr;
|
||||
unsigned char nextscb;
|
||||
struct scsi_cmnd *cmd;
|
||||
|
||||
scbptr = aic_inb(p, WAITING_SCBH);
|
||||
if (scbptr > p->scb_data->maxhscbs)
|
||||
@@ -5941,11 +5939,11 @@ aic7xxx_handle_scsiint(struct aic7xxx_host *p, unsigned char intstat)
|
||||
/*
|
||||
* Determine the bus phase and queue an appropriate message.
|
||||
*/
|
||||
char *phase;
|
||||
Scsi_Cmnd *cmd;
|
||||
unsigned char mesg_out = MSG_NOOP;
|
||||
unsigned char lastphase = aic_inb(p, LASTPHASE);
|
||||
unsigned char sstat2 = aic_inb(p, SSTAT2);
|
||||
char *phase;
|
||||
struct scsi_cmnd *cmd;
|
||||
unsigned char mesg_out = MSG_NOOP;
|
||||
unsigned char lastphase = aic_inb(p, LASTPHASE);
|
||||
unsigned char sstat2 = aic_inb(p, SSTAT2);
|
||||
|
||||
cmd = scb->cmd;
|
||||
switch (lastphase)
|
||||
@@ -6248,10 +6246,10 @@ aic7xxx_check_scbs(struct aic7xxx_host *p, char *buffer)
|
||||
static void
|
||||
aic7xxx_handle_command_completion_intr(struct aic7xxx_host *p)
|
||||
{
|
||||
struct aic7xxx_scb *scb = NULL;
|
||||
struct aic_dev_data *aic_dev;
|
||||
Scsi_Cmnd *cmd;
|
||||
unsigned char scb_index, tindex;
|
||||
struct aic7xxx_scb *scb = NULL;
|
||||
struct aic_dev_data *aic_dev;
|
||||
struct scsi_cmnd *cmd;
|
||||
unsigned char scb_index, tindex;
|
||||
|
||||
#ifdef AIC7XXX_VERBOSE_DEBUGGING
|
||||
if( (p->isr_count < 16) && (aic7xxx_verbose > 0xffff) )
|
||||
@@ -10131,9 +10129,8 @@ skip_pci_controller:
|
||||
* Description:
|
||||
* Build a SCB.
|
||||
*-F*************************************************************************/
|
||||
static void
|
||||
aic7xxx_buildscb(struct aic7xxx_host *p, Scsi_Cmnd *cmd,
|
||||
struct aic7xxx_scb *scb)
|
||||
static void aic7xxx_buildscb(struct aic7xxx_host *p, struct scsi_cmnd *cmd,
|
||||
struct aic7xxx_scb *scb)
|
||||
{
|
||||
unsigned short mask;
|
||||
struct aic7xxx_hwscb *hscb;
|
||||
@@ -10285,8 +10282,7 @@ aic7xxx_buildscb(struct aic7xxx_host *p, Scsi_Cmnd *cmd,
|
||||
* Description:
|
||||
* Queue a SCB to the controller.
|
||||
*-F*************************************************************************/
|
||||
static int
|
||||
aic7xxx_queue(Scsi_Cmnd *cmd, void (*fn)(Scsi_Cmnd *))
|
||||
static int aic7xxx_queue(struct scsi_cmnd *cmd, void (*fn)(struct scsi_cmnd *))
|
||||
{
|
||||
struct aic7xxx_host *p;
|
||||
struct aic7xxx_scb *scb;
|
||||
@@ -10319,11 +10315,11 @@ aic7xxx_queue(Scsi_Cmnd *cmd, void (*fn)(Scsi_Cmnd *))
|
||||
}
|
||||
scb->cmd = cmd;
|
||||
|
||||
/*
|
||||
* Make sure the Scsi_Cmnd pointer is saved, the struct it points to
|
||||
* is set up properly, and the parity error flag is reset, then send
|
||||
* the SCB to the sequencer and watch the fun begin.
|
||||
*/
|
||||
/*
|
||||
* Make sure the scsi_cmnd pointer is saved, the struct it points to
|
||||
* is set up properly, and the parity error flag is reset, then send
|
||||
* the SCB to the sequencer and watch the fun begin.
|
||||
*/
|
||||
aic7xxx_position(cmd) = scb->hscb->tag;
|
||||
cmd->scsi_done = fn;
|
||||
cmd->result = DID_OK;
|
||||
@@ -10356,8 +10352,7 @@ aic7xxx_queue(Scsi_Cmnd *cmd, void (*fn)(Scsi_Cmnd *))
|
||||
* aborted, then we will reset the channel and have all devices renegotiate.
|
||||
* Returns an enumerated type that indicates the status of the operation.
|
||||
*-F*************************************************************************/
|
||||
static int
|
||||
__aic7xxx_bus_device_reset(Scsi_Cmnd *cmd)
|
||||
static int __aic7xxx_bus_device_reset(struct scsi_cmnd *cmd)
|
||||
{
|
||||
struct aic7xxx_host *p;
|
||||
struct aic7xxx_scb *scb;
|
||||
@@ -10550,8 +10545,7 @@ __aic7xxx_bus_device_reset(Scsi_Cmnd *cmd)
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
static int
|
||||
aic7xxx_bus_device_reset(Scsi_Cmnd *cmd)
|
||||
static int aic7xxx_bus_device_reset(struct scsi_cmnd *cmd)
|
||||
{
|
||||
int rc;
|
||||
|
||||
@@ -10570,8 +10564,7 @@ aic7xxx_bus_device_reset(Scsi_Cmnd *cmd)
|
||||
* Description:
|
||||
* Abort the current SCSI command(s).
|
||||
*-F*************************************************************************/
|
||||
static void
|
||||
aic7xxx_panic_abort(struct aic7xxx_host *p, Scsi_Cmnd *cmd)
|
||||
static void aic7xxx_panic_abort(struct aic7xxx_host *p, struct scsi_cmnd *cmd)
|
||||
{
|
||||
|
||||
printk("aic7xxx driver version %s\n", AIC7XXX_C_VERSION);
|
||||
@@ -10595,8 +10588,7 @@ aic7xxx_panic_abort(struct aic7xxx_host *p, Scsi_Cmnd *cmd)
|
||||
* Description:
|
||||
* Abort the current SCSI command(s).
|
||||
*-F*************************************************************************/
|
||||
static int
|
||||
__aic7xxx_abort(Scsi_Cmnd *cmd)
|
||||
static int __aic7xxx_abort(struct scsi_cmnd *cmd)
|
||||
{
|
||||
struct aic7xxx_scb *scb = NULL;
|
||||
struct aic7xxx_host *p;
|
||||
@@ -10813,8 +10805,7 @@ success:
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
static int
|
||||
aic7xxx_abort(Scsi_Cmnd *cmd)
|
||||
static int aic7xxx_abort(struct scsi_cmnd *cmd)
|
||||
{
|
||||
int rc;
|
||||
|
||||
@@ -10836,8 +10827,7 @@ aic7xxx_abort(Scsi_Cmnd *cmd)
|
||||
* DEVICE RESET message - on the offending target before pulling
|
||||
* the SCSI bus reset line.
|
||||
*-F*************************************************************************/
|
||||
static int
|
||||
aic7xxx_reset(Scsi_Cmnd *cmd)
|
||||
static int aic7xxx_reset(struct scsi_cmnd *cmd)
|
||||
{
|
||||
struct aic7xxx_scb *scb;
|
||||
struct aic7xxx_host *p;
|
||||
|
||||
@@ -28,6 +28,7 @@ config SCSI_AIC94XX
|
||||
tristate "Adaptec AIC94xx SAS/SATA support"
|
||||
depends on PCI
|
||||
select SCSI_SAS_LIBSAS
|
||||
select FW_LOADER
|
||||
help
|
||||
This driver supports Adaptec's SAS/SATA 3Gb/s 64 bit PCI-X
|
||||
AIC94xx chip based host adapters.
|
||||
|
||||
@@ -309,11 +309,29 @@ static ssize_t asd_show_dev_pcba_sn(struct device *dev,
|
||||
}
|
||||
static DEVICE_ATTR(pcba_sn, S_IRUGO, asd_show_dev_pcba_sn, NULL);
|
||||
|
||||
static void asd_create_dev_attrs(struct asd_ha_struct *asd_ha)
|
||||
static int asd_create_dev_attrs(struct asd_ha_struct *asd_ha)
|
||||
{
|
||||
device_create_file(&asd_ha->pcidev->dev, &dev_attr_revision);
|
||||
device_create_file(&asd_ha->pcidev->dev, &dev_attr_bios_build);
|
||||
device_create_file(&asd_ha->pcidev->dev, &dev_attr_pcba_sn);
|
||||
int err;
|
||||
|
||||
err = device_create_file(&asd_ha->pcidev->dev, &dev_attr_revision);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = device_create_file(&asd_ha->pcidev->dev, &dev_attr_bios_build);
|
||||
if (err)
|
||||
goto err_rev;
|
||||
|
||||
err = device_create_file(&asd_ha->pcidev->dev, &dev_attr_pcba_sn);
|
||||
if (err)
|
||||
goto err_biosb;
|
||||
|
||||
return 0;
|
||||
|
||||
err_biosb:
|
||||
device_remove_file(&asd_ha->pcidev->dev, &dev_attr_bios_build);
|
||||
err_rev:
|
||||
device_remove_file(&asd_ha->pcidev->dev, &dev_attr_revision);
|
||||
return err;
|
||||
}
|
||||
|
||||
static void asd_remove_dev_attrs(struct asd_ha_struct *asd_ha)
|
||||
@@ -645,7 +663,9 @@ static int __devinit asd_pci_probe(struct pci_dev *dev,
|
||||
}
|
||||
ASD_DPRINTK("escbs posted\n");
|
||||
|
||||
asd_create_dev_attrs(asd_ha);
|
||||
err = asd_create_dev_attrs(asd_ha);
|
||||
if (err)
|
||||
goto Err_dev_attrs;
|
||||
|
||||
err = asd_register_sas_ha(asd_ha);
|
||||
if (err)
|
||||
@@ -668,6 +688,7 @@ Err_en_phys:
|
||||
asd_unregister_sas_ha(asd_ha);
|
||||
Err_reg_sas:
|
||||
asd_remove_dev_attrs(asd_ha);
|
||||
Err_dev_attrs:
|
||||
Err_escbs:
|
||||
asd_disable_ints(asd_ha);
|
||||
free_irq(dev->irq, asd_ha);
|
||||
@@ -754,9 +775,9 @@ static ssize_t asd_version_show(struct device_driver *driver, char *buf)
|
||||
}
|
||||
static DRIVER_ATTR(version, S_IRUGO, asd_version_show, NULL);
|
||||
|
||||
static void asd_create_driver_attrs(struct device_driver *driver)
|
||||
static int asd_create_driver_attrs(struct device_driver *driver)
|
||||
{
|
||||
driver_create_file(driver, &driver_attr_version);
|
||||
return driver_create_file(driver, &driver_attr_version);
|
||||
}
|
||||
|
||||
static void asd_remove_driver_attrs(struct device_driver *driver)
|
||||
@@ -834,10 +855,14 @@ static int __init aic94xx_init(void)
|
||||
if (err)
|
||||
goto out_release_transport;
|
||||
|
||||
asd_create_driver_attrs(&aic94xx_pci_driver.driver);
|
||||
err = asd_create_driver_attrs(&aic94xx_pci_driver.driver);
|
||||
if (err)
|
||||
goto out_unregister_pcidrv;
|
||||
|
||||
return err;
|
||||
|
||||
out_unregister_pcidrv:
|
||||
pci_unregister_driver(&aic94xx_pci_driver);
|
||||
out_release_transport:
|
||||
sas_release_transport(aic94xx_transport_template);
|
||||
out_destroy_caches:
|
||||
|
||||
@@ -194,7 +194,8 @@
|
||||
unsigned int sdtr_period = SDTR_PERIOD;
|
||||
unsigned int sdtr_size = SDTR_SIZE;
|
||||
|
||||
static void acornscsi_done(AS_Host *host, Scsi_Cmnd **SCpntp, unsigned int result);
|
||||
static void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp,
|
||||
unsigned int result);
|
||||
static int acornscsi_reconnect_finish(AS_Host *host);
|
||||
static void acornscsi_dma_cleanup(AS_Host *host);
|
||||
static void acornscsi_abortcmd(AS_Host *host, unsigned char tag);
|
||||
@@ -712,7 +713,7 @@ static
|
||||
intr_ret_t acornscsi_kick(AS_Host *host)
|
||||
{
|
||||
int from_queue = 0;
|
||||
Scsi_Cmnd *SCpnt;
|
||||
struct scsi_cmnd *SCpnt;
|
||||
|
||||
/* first check to see if a command is waiting to be executed */
|
||||
SCpnt = host->origSCpnt;
|
||||
@@ -796,15 +797,15 @@ intr_ret_t acornscsi_kick(AS_Host *host)
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: void acornscsi_done(AS_Host *host, Scsi_Cmnd **SCpntp, unsigned int result)
|
||||
* Function: void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp, unsigned int result)
|
||||
* Purpose : complete processing for command
|
||||
* Params : host - interface that completed
|
||||
* result - driver byte of result
|
||||
*/
|
||||
static
|
||||
void acornscsi_done(AS_Host *host, Scsi_Cmnd **SCpntp, unsigned int result)
|
||||
static void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp,
|
||||
unsigned int result)
|
||||
{
|
||||
Scsi_Cmnd *SCpnt = *SCpntp;
|
||||
struct scsi_cmnd *SCpnt = *SCpntp;
|
||||
|
||||
/* clean up */
|
||||
sbic_arm_write(host->scsi.io_port, SBIC_SOURCEID, SOURCEID_ER | SOURCEID_DSP);
|
||||
@@ -1318,7 +1319,7 @@ acornscsi_write_pio(AS_Host *host, char *bytes, int *ptr, int len, unsigned int
|
||||
static void
|
||||
acornscsi_sendcommand(AS_Host *host)
|
||||
{
|
||||
Scsi_Cmnd *SCpnt = host->SCpnt;
|
||||
struct scsi_cmnd *SCpnt = host->SCpnt;
|
||||
|
||||
sbic_arm_write(host->scsi.io_port, SBIC_TRANSCNTH, 0);
|
||||
sbic_arm_writenext(host->scsi.io_port, 0);
|
||||
@@ -1693,7 +1694,7 @@ void acornscsi_message(AS_Host *host)
|
||||
acornscsi_sbic_issuecmd(host, CMND_ASSERTATN);
|
||||
msgqueue_addmsg(&host->scsi.msgs, 1, ABORT);
|
||||
} else {
|
||||
Scsi_Cmnd *SCpnt = host->SCpnt;
|
||||
struct scsi_cmnd *SCpnt = host->SCpnt;
|
||||
|
||||
acornscsi_dma_cleanup(host);
|
||||
|
||||
@@ -2509,13 +2510,14 @@ acornscsi_intr(int irq, void *dev_id, struct pt_regs *regs)
|
||||
*/
|
||||
|
||||
/*
|
||||
* Function : acornscsi_queuecmd(Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *))
|
||||
* Function : acornscsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
|
||||
* Purpose : queues a SCSI command
|
||||
* Params : cmd - SCSI command
|
||||
* done - function called on completion, with pointer to command descriptor
|
||||
* Returns : 0, or < 0 on error.
|
||||
*/
|
||||
int acornscsi_queuecmd(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
|
||||
int acornscsi_queuecmd(struct scsi_cmnd *SCpnt,
|
||||
void (*done)(struct scsi_cmnd *))
|
||||
{
|
||||
AS_Host *host = (AS_Host *)SCpnt->device->host->hostdata;
|
||||
|
||||
@@ -2565,17 +2567,18 @@ int acornscsi_queuecmd(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
|
||||
}
|
||||
|
||||
/*
|
||||
* Prototype: void acornscsi_reportstatus(Scsi_Cmnd **SCpntp1, Scsi_Cmnd **SCpntp2, int result)
|
||||
* Prototype: void acornscsi_reportstatus(struct scsi_cmnd **SCpntp1, struct scsi_cmnd **SCpntp2, int result)
|
||||
* Purpose : pass a result to *SCpntp1, and check if *SCpntp1 = *SCpntp2
|
||||
* Params : SCpntp1 - pointer to command to return
|
||||
* SCpntp2 - pointer to command to check
|
||||
* result - result to pass back to mid-level done function
|
||||
* Returns : *SCpntp2 = NULL if *SCpntp1 is the same command structure as *SCpntp2.
|
||||
*/
|
||||
static inline
|
||||
void acornscsi_reportstatus(Scsi_Cmnd **SCpntp1, Scsi_Cmnd **SCpntp2, int result)
|
||||
static inline void acornscsi_reportstatus(struct scsi_cmnd **SCpntp1,
|
||||
struct scsi_cmnd **SCpntp2,
|
||||
int result)
|
||||
{
|
||||
Scsi_Cmnd *SCpnt = *SCpntp1;
|
||||
struct scsi_cmnd *SCpnt = *SCpntp1;
|
||||
|
||||
if (SCpnt) {
|
||||
*SCpntp1 = NULL;
|
||||
@@ -2591,13 +2594,12 @@ void acornscsi_reportstatus(Scsi_Cmnd **SCpntp1, Scsi_Cmnd **SCpntp2, int result
|
||||
enum res_abort { res_not_running, res_success, res_success_clear, res_snooze };
|
||||
|
||||
/*
|
||||
* Prototype: enum res acornscsi_do_abort(Scsi_Cmnd *SCpnt)
|
||||
* Prototype: enum res acornscsi_do_abort(struct scsi_cmnd *SCpnt)
|
||||
* Purpose : abort a command on this host
|
||||
* Params : SCpnt - command to abort
|
||||
* Returns : our abort status
|
||||
*/
|
||||
static enum res_abort
|
||||
acornscsi_do_abort(AS_Host *host, Scsi_Cmnd *SCpnt)
|
||||
static enum res_abort acornscsi_do_abort(AS_Host *host, struct scsi_cmnd *SCpnt)
|
||||
{
|
||||
enum res_abort res = res_not_running;
|
||||
|
||||
@@ -2684,12 +2686,12 @@ acornscsi_do_abort(AS_Host *host, Scsi_Cmnd *SCpnt)
|
||||
}
|
||||
|
||||
/*
|
||||
* Prototype: int acornscsi_abort(Scsi_Cmnd *SCpnt)
|
||||
* Prototype: int acornscsi_abort(struct scsi_cmnd *SCpnt)
|
||||
* Purpose : abort a command on this host
|
||||
* Params : SCpnt - command to abort
|
||||
* Returns : one of SCSI_ABORT_ macros
|
||||
*/
|
||||
int acornscsi_abort(Scsi_Cmnd *SCpnt)
|
||||
int acornscsi_abort(struct scsi_cmnd *SCpnt)
|
||||
{
|
||||
AS_Host *host = (AS_Host *) SCpnt->device->host->hostdata;
|
||||
int result;
|
||||
@@ -2770,16 +2772,16 @@ int acornscsi_abort(Scsi_Cmnd *SCpnt)
|
||||
}
|
||||
|
||||
/*
|
||||
* Prototype: int acornscsi_reset(Scsi_Cmnd *SCpnt, unsigned int reset_flags)
|
||||
* Prototype: int acornscsi_reset(struct scsi_cmnd *SCpnt, unsigned int reset_flags)
|
||||
* Purpose : reset a command on this host/reset this host
|
||||
* Params : SCpnt - command causing reset
|
||||
* result - what type of reset to perform
|
||||
* Returns : one of SCSI_RESET_ macros
|
||||
*/
|
||||
int acornscsi_reset(Scsi_Cmnd *SCpnt, unsigned int reset_flags)
|
||||
int acornscsi_reset(struct scsi_cmnd *SCpnt, unsigned int reset_flags)
|
||||
{
|
||||
AS_Host *host = (AS_Host *)SCpnt->device->host->hostdata;
|
||||
Scsi_Cmnd *SCptr;
|
||||
AS_Host *host = (AS_Host *)SCpnt->device->host->hostdata;
|
||||
struct scsi_cmnd *SCptr;
|
||||
|
||||
host->stats.resets += 1;
|
||||
|
||||
|
||||
@@ -277,8 +277,8 @@ struct status_entry {
|
||||
typedef struct acornscsi_hostdata {
|
||||
/* miscellaneous */
|
||||
struct Scsi_Host *host; /* host */
|
||||
Scsi_Cmnd *SCpnt; /* currently processing command */
|
||||
Scsi_Cmnd *origSCpnt; /* original connecting command */
|
||||
struct scsi_cmnd *SCpnt; /* currently processing command */
|
||||
struct scsi_cmnd *origSCpnt; /* original connecting command */
|
||||
|
||||
/* driver information */
|
||||
struct {
|
||||
|
||||
+27
-23
@@ -297,8 +297,8 @@ fas216_do_log(FAS216_Info *info, char target, char *fmt, va_list ap)
|
||||
printk("scsi%d.%c: %s", info->host->host_no, target, buf);
|
||||
}
|
||||
|
||||
static void
|
||||
fas216_log_command(FAS216_Info *info, int level, Scsi_Cmnd *SCpnt, char *fmt, ...)
|
||||
static void fas216_log_command(FAS216_Info *info, int level,
|
||||
struct scsi_cmnd *SCpnt, char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
@@ -1662,7 +1662,7 @@ irqreturn_t fas216_intr(FAS216_Info *info)
|
||||
return handled;
|
||||
}
|
||||
|
||||
static void __fas216_start_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
|
||||
static void __fas216_start_command(FAS216_Info *info, struct scsi_cmnd *SCpnt)
|
||||
{
|
||||
int tot_msglen;
|
||||
|
||||
@@ -1754,7 +1754,7 @@ static int parity_test(FAS216_Info *info, int target)
|
||||
return info->device[target].parity_check;
|
||||
}
|
||||
|
||||
static void fas216_start_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
|
||||
static void fas216_start_command(FAS216_Info *info, struct scsi_cmnd *SCpnt)
|
||||
{
|
||||
int disconnect_ok;
|
||||
|
||||
@@ -1808,7 +1808,7 @@ static void fas216_start_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
|
||||
__fas216_start_command(info, SCpnt);
|
||||
}
|
||||
|
||||
static void fas216_allocate_tag(FAS216_Info *info, Scsi_Cmnd *SCpnt)
|
||||
static void fas216_allocate_tag(FAS216_Info *info, struct scsi_cmnd *SCpnt)
|
||||
{
|
||||
#ifdef SCSI2_TAG
|
||||
/*
|
||||
@@ -1842,7 +1842,8 @@ static void fas216_allocate_tag(FAS216_Info *info, Scsi_Cmnd *SCpnt)
|
||||
}
|
||||
}
|
||||
|
||||
static void fas216_do_bus_device_reset(FAS216_Info *info, Scsi_Cmnd *SCpnt)
|
||||
static void fas216_do_bus_device_reset(FAS216_Info *info,
|
||||
struct scsi_cmnd *SCpnt)
|
||||
{
|
||||
struct message *msg;
|
||||
|
||||
@@ -1890,7 +1891,7 @@ static void fas216_do_bus_device_reset(FAS216_Info *info, Scsi_Cmnd *SCpnt)
|
||||
*/
|
||||
static void fas216_kick(FAS216_Info *info)
|
||||
{
|
||||
Scsi_Cmnd *SCpnt = NULL;
|
||||
struct scsi_cmnd *SCpnt = NULL;
|
||||
#define TYPE_OTHER 0
|
||||
#define TYPE_RESET 1
|
||||
#define TYPE_QUEUE 2
|
||||
@@ -1978,8 +1979,8 @@ static void fas216_kick(FAS216_Info *info)
|
||||
/*
|
||||
* Clean up from issuing a BUS DEVICE RESET message to a device.
|
||||
*/
|
||||
static void
|
||||
fas216_devicereset_done(FAS216_Info *info, Scsi_Cmnd *SCpnt, unsigned int result)
|
||||
static void fas216_devicereset_done(FAS216_Info *info, struct scsi_cmnd *SCpnt,
|
||||
unsigned int result)
|
||||
{
|
||||
fas216_log(info, LOG_ERROR, "fas216 device reset complete");
|
||||
|
||||
@@ -1996,8 +1997,8 @@ fas216_devicereset_done(FAS216_Info *info, Scsi_Cmnd *SCpnt, unsigned int result
|
||||
*
|
||||
* Finish processing automatic request sense command
|
||||
*/
|
||||
static void
|
||||
fas216_rq_sns_done(FAS216_Info *info, Scsi_Cmnd *SCpnt, unsigned int result)
|
||||
static void fas216_rq_sns_done(FAS216_Info *info, struct scsi_cmnd *SCpnt,
|
||||
unsigned int result)
|
||||
{
|
||||
fas216_log_target(info, LOG_CONNECT, SCpnt->device->id,
|
||||
"request sense complete, result=0x%04x%02x%02x",
|
||||
@@ -2030,7 +2031,7 @@ fas216_rq_sns_done(FAS216_Info *info, Scsi_Cmnd *SCpnt, unsigned int result)
|
||||
* Finish processing of standard command
|
||||
*/
|
||||
static void
|
||||
fas216_std_done(FAS216_Info *info, Scsi_Cmnd *SCpnt, unsigned int result)
|
||||
fas216_std_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, unsigned int result)
|
||||
{
|
||||
info->stats.fins += 1;
|
||||
|
||||
@@ -2142,8 +2143,8 @@ request_sense:
|
||||
*/
|
||||
static void fas216_done(FAS216_Info *info, unsigned int result)
|
||||
{
|
||||
void (*fn)(FAS216_Info *, Scsi_Cmnd *, unsigned int);
|
||||
Scsi_Cmnd *SCpnt;
|
||||
void (*fn)(FAS216_Info *, struct scsi_cmnd *, unsigned int);
|
||||
struct scsi_cmnd *SCpnt;
|
||||
unsigned long flags;
|
||||
|
||||
fas216_checkmagic(info);
|
||||
@@ -2182,7 +2183,7 @@ static void fas216_done(FAS216_Info *info, unsigned int result)
|
||||
info->device[SCpnt->device->id].parity_check = 0;
|
||||
clear_bit(SCpnt->device->id * 8 + SCpnt->device->lun, info->busyluns);
|
||||
|
||||
fn = (void (*)(FAS216_Info *, Scsi_Cmnd *, unsigned int))SCpnt->host_scribble;
|
||||
fn = (void (*)(FAS216_Info *, struct scsi_cmnd *, unsigned int))SCpnt->host_scribble;
|
||||
fn(info, SCpnt, result);
|
||||
|
||||
if (info->scsi.irq != NO_IRQ) {
|
||||
@@ -2207,7 +2208,8 @@ no_command:
|
||||
* Returns: 0 on success, else error.
|
||||
* Notes: io_request_lock is held, interrupts are disabled.
|
||||
*/
|
||||
int fas216_queue_command(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
|
||||
int fas216_queue_command(struct scsi_cmnd *SCpnt,
|
||||
void (*done)(struct scsi_cmnd *))
|
||||
{
|
||||
FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
|
||||
int result;
|
||||
@@ -2254,7 +2256,7 @@ int fas216_queue_command(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
|
||||
*
|
||||
* Trigger restart of a waiting thread in fas216_command
|
||||
*/
|
||||
static void fas216_internal_done(Scsi_Cmnd *SCpnt)
|
||||
static void fas216_internal_done(struct scsi_cmnd *SCpnt)
|
||||
{
|
||||
FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
|
||||
|
||||
@@ -2271,7 +2273,8 @@ static void fas216_internal_done(Scsi_Cmnd *SCpnt)
|
||||
* Returns: scsi result code.
|
||||
* Notes: io_request_lock is held, interrupts are disabled.
|
||||
*/
|
||||
int fas216_noqueue_command(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
|
||||
int fas216_noqueue_command(struct scsi_cmnd *SCpnt,
|
||||
void (*done)(struct scsi_cmnd *))
|
||||
{
|
||||
FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
|
||||
|
||||
@@ -2350,7 +2353,8 @@ enum res_find {
|
||||
* Decide how to abort a command.
|
||||
* Returns: abort status
|
||||
*/
|
||||
static enum res_find fas216_find_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
|
||||
static enum res_find fas216_find_command(FAS216_Info *info,
|
||||
struct scsi_cmnd *SCpnt)
|
||||
{
|
||||
enum res_find res = res_failed;
|
||||
|
||||
@@ -2417,7 +2421,7 @@ static enum res_find fas216_find_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
|
||||
* Returns: FAILED if unable to abort
|
||||
* Notes: io_request_lock is taken, and irqs are disabled
|
||||
*/
|
||||
int fas216_eh_abort(Scsi_Cmnd *SCpnt)
|
||||
int fas216_eh_abort(struct scsi_cmnd *SCpnt)
|
||||
{
|
||||
FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
|
||||
int result = FAILED;
|
||||
@@ -2474,7 +2478,7 @@ int fas216_eh_abort(Scsi_Cmnd *SCpnt)
|
||||
* Notes: We won't be re-entered, so we'll only have one device
|
||||
* reset on the go at one time.
|
||||
*/
|
||||
int fas216_eh_device_reset(Scsi_Cmnd *SCpnt)
|
||||
int fas216_eh_device_reset(struct scsi_cmnd *SCpnt)
|
||||
{
|
||||
FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
|
||||
unsigned long flags;
|
||||
@@ -2555,7 +2559,7 @@ int fas216_eh_device_reset(Scsi_Cmnd *SCpnt)
|
||||
* Returns: FAILED if unable to reset.
|
||||
* Notes: Further commands are blocked.
|
||||
*/
|
||||
int fas216_eh_bus_reset(Scsi_Cmnd *SCpnt)
|
||||
int fas216_eh_bus_reset(struct scsi_cmnd *SCpnt)
|
||||
{
|
||||
FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
|
||||
unsigned long flags;
|
||||
@@ -2655,7 +2659,7 @@ static void fas216_init_chip(FAS216_Info *info)
|
||||
* Returns: FAILED if unable to reset.
|
||||
* Notes: io_request_lock is taken, and irqs are disabled
|
||||
*/
|
||||
int fas216_eh_host_reset(Scsi_Cmnd *SCpnt)
|
||||
int fas216_eh_host_reset(struct scsi_cmnd *SCpnt)
|
||||
{
|
||||
FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
|
||||
|
||||
|
||||
+19
-17
@@ -218,11 +218,11 @@ typedef struct {
|
||||
unsigned long magic_start;
|
||||
spinlock_t host_lock;
|
||||
struct Scsi_Host *host; /* host */
|
||||
Scsi_Cmnd *SCpnt; /* currently processing command */
|
||||
Scsi_Cmnd *origSCpnt; /* original connecting command */
|
||||
Scsi_Cmnd *reqSCpnt; /* request sense command */
|
||||
Scsi_Cmnd *rstSCpnt; /* reset command */
|
||||
Scsi_Cmnd *pending_SCpnt[8]; /* per-device pending commands */
|
||||
struct scsi_cmnd *SCpnt; /* currently processing command */
|
||||
struct scsi_cmnd *origSCpnt; /* original connecting command */
|
||||
struct scsi_cmnd *reqSCpnt; /* request sense command */
|
||||
struct scsi_cmnd *rstSCpnt; /* reset command */
|
||||
struct scsi_cmnd *pending_SCpnt[8]; /* per-device pending commands */
|
||||
int next_pending; /* next pending device */
|
||||
|
||||
/*
|
||||
@@ -328,21 +328,23 @@ extern int fas216_init (struct Scsi_Host *instance);
|
||||
*/
|
||||
extern int fas216_add (struct Scsi_Host *instance, struct device *dev);
|
||||
|
||||
/* Function: int fas216_queue_command (Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
|
||||
/* Function: int fas216_queue_command(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))
|
||||
* Purpose : queue a command for adapter to process.
|
||||
* Params : SCpnt - Command to queue
|
||||
* done - done function to call once command is complete
|
||||
* Returns : 0 - success, else error
|
||||
*/
|
||||
extern int fas216_queue_command (Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
|
||||
extern int fas216_queue_command(struct scsi_cmnd *,
|
||||
void (*done)(struct scsi_cmnd *));
|
||||
|
||||
/* Function: int fas216_noqueue_command (Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
|
||||
/* Function: int fas216_noqueue_command(istruct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))
|
||||
* Purpose : queue a command for adapter to process, and process it to completion.
|
||||
* Params : SCpnt - Command to queue
|
||||
* done - done function to call once command is complete
|
||||
* Returns : 0 - success, else error
|
||||
*/
|
||||
extern int fas216_noqueue_command (Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
|
||||
extern int fas216_noqueue_command(struct scsi_cmnd *,
|
||||
void (*done)(struct scsi_cmnd *));
|
||||
|
||||
/* Function: irqreturn_t fas216_intr (FAS216_Info *info)
|
||||
* Purpose : handle interrupts from the interface to progress a command
|
||||
@@ -363,32 +365,32 @@ extern int fas216_print_host(FAS216_Info *info, char *buffer);
|
||||
extern int fas216_print_stats(FAS216_Info *info, char *buffer);
|
||||
extern int fas216_print_devices(FAS216_Info *info, char *buffer);
|
||||
|
||||
/* Function: int fas216_eh_abort(Scsi_Cmnd *SCpnt)
|
||||
/* Function: int fas216_eh_abort(struct scsi_cmnd *SCpnt)
|
||||
* Purpose : abort this command
|
||||
* Params : SCpnt - command to abort
|
||||
* Returns : FAILED if unable to abort
|
||||
*/
|
||||
extern int fas216_eh_abort(Scsi_Cmnd *SCpnt);
|
||||
extern int fas216_eh_abort(struct scsi_cmnd *SCpnt);
|
||||
|
||||
/* Function: int fas216_eh_device_reset(Scsi_Cmnd *SCpnt)
|
||||
/* Function: int fas216_eh_device_reset(struct scsi_cmnd *SCpnt)
|
||||
* Purpose : Reset the device associated with this command
|
||||
* Params : SCpnt - command specifing device to reset
|
||||
* Returns : FAILED if unable to reset
|
||||
*/
|
||||
extern int fas216_eh_device_reset(Scsi_Cmnd *SCpnt);
|
||||
extern int fas216_eh_device_reset(struct scsi_cmnd *SCpnt);
|
||||
|
||||
/* Function: int fas216_eh_bus_reset(Scsi_Cmnd *SCpnt)
|
||||
/* Function: int fas216_eh_bus_reset(struct scsi_cmnd *SCpnt)
|
||||
* Purpose : Reset the complete bus associated with this command
|
||||
* Params : SCpnt - command specifing bus to reset
|
||||
* Returns : FAILED if unable to reset
|
||||
*/
|
||||
extern int fas216_eh_bus_reset(Scsi_Cmnd *SCpnt);
|
||||
extern int fas216_eh_bus_reset(struct scsi_cmnd *SCpnt);
|
||||
|
||||
/* Function: int fas216_eh_host_reset(Scsi_Cmnd *SCpnt)
|
||||
/* Function: int fas216_eh_host_reset(struct scsi_cmnd *SCpnt)
|
||||
* Purpose : Reset the host associated with this command
|
||||
* Params : SCpnt - command specifing host to reset
|
||||
* Returns : FAILED if unable to reset
|
||||
*/
|
||||
extern int fas216_eh_host_reset(Scsi_Cmnd *SCpnt);
|
||||
extern int fas216_eh_host_reset(struct scsi_cmnd *SCpnt);
|
||||
|
||||
#endif /* FAS216_H */
|
||||
|
||||
+19
-18
@@ -29,7 +29,7 @@
|
||||
|
||||
typedef struct queue_entry {
|
||||
struct list_head list;
|
||||
Scsi_Cmnd *SCpnt;
|
||||
struct scsi_cmnd *SCpnt;
|
||||
#ifdef DEBUG
|
||||
unsigned long magic;
|
||||
#endif
|
||||
@@ -96,14 +96,14 @@ void queue_free (Queue_t *queue)
|
||||
|
||||
|
||||
/*
|
||||
* Function: int queue_add_cmd(Queue_t *queue, Scsi_Cmnd *SCpnt, int head)
|
||||
* Function: int __queue_add(Queue_t *queue, struct scsi_cmnd *SCpnt, int head)
|
||||
* Purpose : Add a new command onto a queue, adding REQUEST_SENSE to head.
|
||||
* Params : queue - destination queue
|
||||
* SCpnt - command to add
|
||||
* head - add command to head of queue
|
||||
* Returns : 0 on error, !0 on success
|
||||
*/
|
||||
int __queue_add(Queue_t *queue, Scsi_Cmnd *SCpnt, int head)
|
||||
int __queue_add(Queue_t *queue, struct scsi_cmnd *SCpnt, int head)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct list_head *l;
|
||||
@@ -134,7 +134,7 @@ empty:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static Scsi_Cmnd *__queue_remove(Queue_t *queue, struct list_head *ent)
|
||||
static struct scsi_cmnd *__queue_remove(Queue_t *queue, struct list_head *ent)
|
||||
{
|
||||
QE_t *q;
|
||||
|
||||
@@ -152,17 +152,17 @@ static Scsi_Cmnd *__queue_remove(Queue_t *queue, struct list_head *ent)
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: Scsi_Cmnd *queue_remove_exclude (queue, exclude)
|
||||
* Function: struct scsi_cmnd *queue_remove_exclude (queue, exclude)
|
||||
* Purpose : remove a SCSI command from a queue
|
||||
* Params : queue - queue to remove command from
|
||||
* exclude - bit array of target&lun which is busy
|
||||
* Returns : Scsi_Cmnd if successful (and a reference), or NULL if no command available
|
||||
* Returns : struct scsi_cmnd if successful (and a reference), or NULL if no command available
|
||||
*/
|
||||
Scsi_Cmnd *queue_remove_exclude(Queue_t *queue, unsigned long *exclude)
|
||||
struct scsi_cmnd *queue_remove_exclude(Queue_t *queue, unsigned long *exclude)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct list_head *l;
|
||||
Scsi_Cmnd *SCpnt = NULL;
|
||||
struct scsi_cmnd *SCpnt = NULL;
|
||||
|
||||
spin_lock_irqsave(&queue->queue_lock, flags);
|
||||
list_for_each(l, &queue->head) {
|
||||
@@ -178,15 +178,15 @@ Scsi_Cmnd *queue_remove_exclude(Queue_t *queue, unsigned long *exclude)
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: Scsi_Cmnd *queue_remove (queue)
|
||||
* Function: struct scsi_cmnd *queue_remove (queue)
|
||||
* Purpose : removes first SCSI command from a queue
|
||||
* Params : queue - queue to remove command from
|
||||
* Returns : Scsi_Cmnd if successful (and a reference), or NULL if no command available
|
||||
* Returns : struct scsi_cmnd if successful (and a reference), or NULL if no command available
|
||||
*/
|
||||
Scsi_Cmnd *queue_remove(Queue_t *queue)
|
||||
struct scsi_cmnd *queue_remove(Queue_t *queue)
|
||||
{
|
||||
unsigned long flags;
|
||||
Scsi_Cmnd *SCpnt = NULL;
|
||||
struct scsi_cmnd *SCpnt = NULL;
|
||||
|
||||
spin_lock_irqsave(&queue->queue_lock, flags);
|
||||
if (!list_empty(&queue->head))
|
||||
@@ -197,19 +197,20 @@ Scsi_Cmnd *queue_remove(Queue_t *queue)
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: Scsi_Cmnd *queue_remove_tgtluntag (queue, target, lun, tag)
|
||||
* Function: struct scsi_cmnd *queue_remove_tgtluntag (queue, target, lun, tag)
|
||||
* Purpose : remove a SCSI command from the queue for a specified target/lun/tag
|
||||
* Params : queue - queue to remove command from
|
||||
* target - target that we want
|
||||
* lun - lun on device
|
||||
* tag - tag on device
|
||||
* Returns : Scsi_Cmnd if successful, or NULL if no command satisfies requirements
|
||||
* Returns : struct scsi_cmnd if successful, or NULL if no command satisfies requirements
|
||||
*/
|
||||
Scsi_Cmnd *queue_remove_tgtluntag (Queue_t *queue, int target, int lun, int tag)
|
||||
struct scsi_cmnd *queue_remove_tgtluntag(Queue_t *queue, int target, int lun,
|
||||
int tag)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct list_head *l;
|
||||
Scsi_Cmnd *SCpnt = NULL;
|
||||
struct scsi_cmnd *SCpnt = NULL;
|
||||
|
||||
spin_lock_irqsave(&queue->queue_lock, flags);
|
||||
list_for_each(l, &queue->head) {
|
||||
@@ -275,13 +276,13 @@ int queue_probetgtlun (Queue_t *queue, int target, int lun)
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: int queue_remove_cmd(Queue_t *queue, Scsi_Cmnd *SCpnt)
|
||||
* Function: int queue_remove_cmd(Queue_t *queue, struct scsi_cmnd *SCpnt)
|
||||
* Purpose : remove a specific command from the queues
|
||||
* Params : queue - queue to look in
|
||||
* SCpnt - command to find
|
||||
* Returns : 0 if not found
|
||||
*/
|
||||
int queue_remove_cmd(Queue_t *queue, Scsi_Cmnd *SCpnt)
|
||||
int queue_remove_cmd(Queue_t *queue, struct scsi_cmnd *SCpnt)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct list_head *l;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user