qla2xxx: Add framework for async fabric discovery
Currently code performs a full scan of the fabric for every RSCN. Its an expensive process in a noisy large SAN. This patch optimizes expensive fabric discovery process by scanning switch for the affected port when RSCN is received. Currently Initiator Mode code makes login/logout decision without knowledge of target mode. This causes driver and firmware to go out-of-sync. This framework synchronizes both initiator mode personality and target mode personality in making login/logout decision. This patch adds following capabilities in the driver - Send Notification Acknowledgement asynchronously. - Update session/fcport state asynchronously. - Create a session or fcport struct asynchronously. - Send GNL asynchronously. The command will ask FW to provide a list of FC Port entries FW knows about. - Send GPDB asynchronously. The command will ask FW to provide detail data of an FC Port FW knows about or perform ADISC to verify the state of the session. - Send GPNID asynchronously. The command will ask switch to provide WWPN for provided NPort ID. - Send GPSC asynchronously. The command will ask switch to provide registered port speed for provided WWPN. - Send GIDPN asynchronously. The command will ask the switch to provide Nport ID for provided WWPN. - In driver unload path, schedule all session for deletion and wait for deletion to complete before allowing driver unload to proceed. Signed-off-by: Quinn Tran <quinn.tran@cavium.com> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com> [ bvanassche: fixed spelling in patch description ] Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
committed by
Nicholas Bellinger
parent
5d964837c6
commit
726b854870
@@ -72,6 +72,37 @@ struct port_database_24xx {
|
||||
uint8_t reserved_3[24];
|
||||
};
|
||||
|
||||
/*
|
||||
* MB 75h returns a list of DB entries similar to port_database_24xx(64B).
|
||||
* However, in this case it returns 1st 40 bytes.
|
||||
*/
|
||||
struct get_name_list_extended {
|
||||
__le16 flags;
|
||||
u8 current_login_state;
|
||||
u8 last_login_state;
|
||||
u8 hard_address[3];
|
||||
u8 reserved_1;
|
||||
u8 port_id[3];
|
||||
u8 sequence_id;
|
||||
__le16 port_timer;
|
||||
__le16 nport_handle; /* N_PORT handle. */
|
||||
__le16 receive_data_size;
|
||||
__le16 reserved_2;
|
||||
|
||||
/* PRLI SVC Param are Big endian */
|
||||
u8 prli_svc_param_word_0[2]; /* Bits 15-0 of word 0 */
|
||||
u8 prli_svc_param_word_3[2]; /* Bits 15-0 of word 3 */
|
||||
u8 port_name[WWN_SIZE];
|
||||
u8 node_name[WWN_SIZE];
|
||||
};
|
||||
|
||||
/* MB 75h: This is the short version of the database */
|
||||
struct get_name_list {
|
||||
u8 port_node_name[WWN_SIZE]; /* B7 most sig, B0 least sig */
|
||||
__le16 nport_handle;
|
||||
u8 reserved;
|
||||
};
|
||||
|
||||
struct vp_database_24xx {
|
||||
uint16_t vp_status;
|
||||
uint8_t options;
|
||||
|
||||
Reference in New Issue
Block a user