/*
* Timeout timer counts in seconds
*/
-#define PORT_RETRY_TIME 2
+#define PORT_RETRY_TIME 1
#define LOOP_DOWN_TIMEOUT 60
#define LOOP_DOWN_TIME 255 /* 240 */
#define LOOP_DOWN_RESET (LOOP_DOWN_TIME - 30)
struct list_head list;
struct scsi_qla_host *ha; /* HA the SP is queued on */
+ struct fc_port *fcport;
struct scsi_cmnd *cmd; /* Linux SCSI command pkt */
/* Request state */
uint16_t state;
- /* Target/LUN queue pointers. */
- struct os_tgt *tgt_queue; /* ptr to visible ha's target */
- struct os_lun *lun_queue; /* ptr to visible ha's lun */
- struct fc_lun *fclun; /* FC LUN context pointer. */
-
/* Timing counts. */
unsigned long e_start; /* Start of extend timeout */
unsigned long r_start; /* Start of request */
rpt_lun_lst_t list;
} rpt_lun_cmd_rsp_t;
-/*
- * SCSI Target Queue structure
- */
-typedef struct os_tgt {
- struct os_lun *olun[MAX_LUNS]; /* LUN context pointer. */
- struct fc_port *fcport;
- unsigned long flags;
- uint8_t port_down_retry_count;
- uint32_t down_timer;
- struct scsi_qla_host *ha;
-
- /* Persistent binding information */
- port_id_t d_id;
- uint8_t node_name[WWN_SIZE];
- uint8_t port_name[WWN_SIZE];
-} os_tgt_t;
-
-/*
- * SCSI Target Queue flags
- */
-#define TQF_ONLINE 0 /* Device online to OS. */
-#define TQF_SUSPENDED 1
-#define TQF_RETRY_CMDS 2
-
-/*
- * SCSI LUN Queue structure
- */
-typedef struct os_lun {
- struct fc_lun *fclun; /* FC LUN context pointer. */
- spinlock_t q_lock; /* Lun Lock */
-
- unsigned long q_flag;
-#define LUN_MPIO_RESET_CNTS 1 /* Lun */
-#define LUN_MPIO_BUSY 2 /* Lun is changing paths */
-#define LUN_EXEC_DELAYED 7 /* Lun execution is delayed */
-
- u_long q_timeout; /* total command timeouts */
- atomic_t q_timer; /* suspend timer */
- uint32_t q_count; /* current count */
- uint32_t q_max; /* maxmum count lun can be suspended */
- uint8_t q_state; /* lun State */
-#define LUN_STATE_READY 1 /* lun is ready for i/o */
-#define LUN_STATE_RUN 2 /* lun has a timer running */
-#define LUN_STATE_WAIT 3 /* lun is suspended */
-#define LUN_STATE_TIMEOUT 4 /* lun has timed out */
-
- u_long io_cnt; /* total xfer count since boot */
- u_long out_cnt; /* total outstanding IO count */
- u_long w_cnt; /* total writes */
- u_long r_cnt; /* total reads */
- u_long avg_time; /* */
-} os_lun_t;
-
-
-/* LUN BitMask structure definition, array of 32bit words,
- * 1 bit per lun. When bit == 1, the lun is masked.
- * Most significant bit of mask[0] is lun 0, bit 24 is lun 7.
- */
-typedef struct lun_bit_mask {
- /* Must allocate at least enough bits to accomodate all LUNs */
-#if ((MAX_FIBRE_LUNS & 0x7) == 0)
- uint8_t mask[MAX_FIBRE_LUNS >> 3];
-#else
- uint8_t mask[(MAX_FIBRE_LUNS + 8) >> 3];
-#endif
-} lun_bit_mask_t;
-
/*
* Fibre channel port type.
*/
*/
typedef struct fc_port {
struct list_head list;
- struct list_head fcluns;
-
struct scsi_qla_host *ha;
struct scsi_qla_host *vis_ha; /* only used when suspending lun */
atomic_t state;
uint32_t flags;
- os_tgt_t *tgt_queue;
- uint16_t os_target_id;
+ unsigned int os_target_id;
uint16_t iodesc_idx_sent;
uint8_t mp_byte; /* multi-path byte (not used) */
uint8_t cur_path; /* current path id */
- lun_bit_mask_t lun_mask;
+ struct fc_rport *rport;
} fc_port_t;
/*
/* No loop ID flag. */
#define FC_NO_LOOP_ID 0x1000
-/*
- * Fibre channel LUN structure.
- */
-typedef struct fc_lun {
- struct list_head list;
-
- fc_port_t *fcport;
- fc_port_t *o_fcport;
- uint16_t lun;
- atomic_t state;
- uint8_t device_type;
-
- uint8_t max_path_retries;
- uint32_t flags;
-} fc_lun_t;
-
-#define FLF_VISIBLE_LUN BIT_0
-#define FLF_ACTIVE_LUN BIT_1
-
/*
* FC-CT interface
*
uint32_t current_outstanding_cmd;
srb_t *status_srb; /* Status continuation entry. */
- /*
- * Need to hold the list_lock with irq's disabled in order to access
- * the following list.
- *
- * This list_lock is of lower priority than the host_lock.
- */
- spinlock_t list_lock ____cacheline_aligned;
- /* lock to guard lists which
- * hold srb_t's */
- struct list_head retry_queue; /* watchdog queue */
- struct list_head done_queue; /* job on done queue */
- struct list_head failover_queue; /* failover list link. */
- struct list_head scsi_retry_queue; /* SCSI retry queue */
- struct list_head pending_queue; /* SCSI command pending queue */
-
- unsigned long done_q_cnt;
- unsigned long pending_in_q;
- uint32_t retry_q_cnt;
- uint32_t scsi_retry_q_cnt;
- uint32_t failover_cnt;
-
unsigned long last_irq_cpu; /* cpu where we got our last irq */
uint16_t revision;
struct io_descriptor io_descriptors[MAX_IO_DESCRIPTORS];
uint16_t iodesc_signature;
- /* OS target queue pointers. */
- os_tgt_t *otgt[MAX_FIBRE_DEVICES];
-
/* RSCN queue. */
uint32_t rscn_queue[MAX_RSCN_COUNT];
uint8_t rscn_in_ptr;
#define LOOP_RDY(ha) (!LOOP_NOT_READY(ha))
#define TGT_Q(ha, t) (ha->otgt[t])
-#define LUN_Q(ha, t, l) (TGT_Q(ha, t)->olun[l])
-#define GET_LU_Q(ha, t, l) ((TGT_Q(ha,t) != NULL)? TGT_Q(ha, t)->olun[l] : NULL)
#define to_qla_host(x) ((scsi_qla_host_t *) (x)->hostdata)
#include "qla_gbl.h"
#include "qla_dbg.h"
#include "qla_inline.h"
-#include "qla_listops.h"
/*
* String arrays