2009-09-05 07:36:35 +05:30
/**
2015-07-04 04:12:33 +05:30
* Copyright ( C ) 2005 - 2015 Emulex
2009-09-05 07:36:35 +05:30
* All rights reserved .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation . The full GNU General
* Public License is included in this distribution in the file called COPYING .
*
2015-05-14 23:16:17 -07:00
* Written by : Jayamohan Kallickal ( jayamohan . kallickal @ avagotech . com )
2009-09-05 07:36:35 +05:30
*
* Contact Information :
2015-05-14 23:16:17 -07:00
* linux - drivers @ avagotech . com
2009-09-05 07:36:35 +05:30
*
2015-07-04 04:12:33 +05:30
* Emulex
2011-03-25 14:23:57 -07:00
* 3333 Susan Street
* Costa Mesa , CA 92626
2009-09-05 07:36:35 +05:30
*/
# ifndef _BEISCSI_MGMT_
# define _BEISCSI_MGMT_
2012-04-03 23:41:50 -05:00
# include <scsi/scsi_bsg_iscsi.h>
2009-09-05 07:36:35 +05:30
# include "be_iscsi.h"
# include "be_main.h"
2012-04-03 23:41:51 -05:00
# define IP_ACTION_ADD 0x01
# define IP_ACTION_DEL 0x02
# define IP_V6_LEN 16
# define IP_V4_LEN 4
2012-10-20 04:45:51 +05:30
/* UE Status and Mask register */
# define PCICFG_UE_STATUS_LOW 0xA0
# define PCICFG_UE_STATUS_HIGH 0xA4
# define PCICFG_UE_STATUS_MASK_LOW 0xA8
# define PCICFG_UE_STATUS_MASK_HI 0xAC
2009-09-05 07:36:35 +05:30
/**
* Pseudo amap definition in which each bit of the actual structure is defined
* as a byte : used to calculate offset / shift / mask of each field
*/
struct amap_mcc_sge {
u8 pa_lo [ 32 ] ; /* dword 0 */
u8 pa_hi [ 32 ] ; /* dword 1 */
u8 length [ 32 ] ; /* DWORD 2 */
} __packed ;
/**
* Pseudo amap definition in which each bit of the actual structure is defined
* as a byte : used to calculate offset / shift / mask of each field
*/
struct amap_mcc_wrb_payload {
union {
struct amap_mcc_sge sgl [ 19 ] ;
u8 embedded [ 59 * 32 ] ; /* DWORDS 57 to 115 */
} u ;
} __packed ;
/**
* Pseudo amap definition in which each bit of the actual structure is defined
* as a byte : used to calculate offset / shift / mask of each field
*/
struct amap_mcc_wrb {
u8 embedded ; /* DWORD 0 */
u8 rsvd0 [ 2 ] ; /* DWORD 0 */
u8 sge_count [ 5 ] ; /* DWORD 0 */
u8 rsvd1 [ 16 ] ; /* DWORD 0 */
u8 special [ 8 ] ; /* DWORD 0 */
u8 payload_length [ 32 ] ;
u8 tag [ 64 ] ; /* DWORD 2 */
u8 rsvd2 [ 32 ] ; /* DWORD 4 */
struct amap_mcc_wrb_payload payload ;
} ;
struct mcc_sge {
u32 pa_lo ; /* dword 0 */
u32 pa_hi ; /* dword 1 */
u32 length ; /* DWORD 2 */
} __packed ;
struct mcc_wrb_payload {
union {
struct mcc_sge sgl [ 19 ] ;
u32 embedded [ 59 ] ; /* DWORDS 57 to 115 */
} u ;
} __packed ;
# define MCC_WRB_EMBEDDED_MASK 0x00000001
struct mcc_wrb {
u32 dw [ 0 ] ; /* DWORD 0 */
u32 payload_length ;
u32 tag [ 2 ] ; /* DWORD 2 */
u32 rsvd2 [ 1 ] ; /* DWORD 4 */
struct mcc_wrb_payload payload ;
} ;
2010-07-22 04:17:16 +05:30
int mgmt_epfw_cleanup ( struct beiscsi_hba * phba , unsigned short chute ) ;
2010-07-22 04:27:47 +05:30
int mgmt_open_connection ( struct beiscsi_hba * phba ,
struct sockaddr * dst_addr ,
struct beiscsi_endpoint * beiscsi_ep ,
struct be_dma_mem * nonemb_cmd ) ;
2009-09-05 07:36:35 +05:30
2010-07-22 04:17:16 +05:30
unsigned int mgmt_upload_connection ( struct beiscsi_hba * phba ,
2009-09-05 07:36:35 +05:30
unsigned short cid ,
unsigned int upload_flag ) ;
2010-07-22 04:17:16 +05:30
unsigned int mgmt_invalidate_icds ( struct beiscsi_hba * phba ,
2010-02-20 08:02:39 +05:30
struct invalidate_command_table * inv_tbl ,
2010-07-22 04:27:47 +05:30
unsigned int num_invalidate , unsigned int cid ,
struct be_dma_mem * nonemb_cmd ) ;
2012-04-03 23:41:50 -05:00
unsigned int mgmt_vendor_specific_fw_cmd ( struct be_ctrl_info * ctrl ,
struct beiscsi_hba * phba ,
struct bsg_job * job ,
struct be_dma_mem * nonemb_cmd ) ;
2009-09-05 07:36:35 +05:30
2012-08-20 23:00:55 +05:30
# define BEISCSI_NO_RST_ISSUE 0
2009-09-05 07:36:35 +05:30
struct iscsi_invalidate_connection_params_in {
struct be_cmd_req_hdr hdr ;
unsigned int session_handle ;
unsigned short cid ;
unsigned short unused ;
unsigned short cleanup_type ;
unsigned short save_cfg ;
} __packed ;
struct iscsi_invalidate_connection_params_out {
unsigned int session_handle ;
unsigned short cid ;
unsigned short unused ;
} __packed ;
union iscsi_invalidate_connection_params {
struct iscsi_invalidate_connection_params_in request ;
struct iscsi_invalidate_connection_params_out response ;
} __packed ;
struct invalidate_commands_params_in {
struct be_cmd_req_hdr hdr ;
unsigned int ref_handle ;
unsigned int icd_count ;
struct invalidate_command_table table [ 128 ] ;
unsigned short cleanup_type ;
unsigned short unused ;
} __packed ;
struct invalidate_commands_params_out {
unsigned int ref_handle ;
unsigned int icd_count ;
unsigned int icd_status [ 128 ] ;
} __packed ;
union invalidate_commands_params {
struct invalidate_commands_params_in request ;
struct invalidate_commands_params_out response ;
} __packed ;
struct mgmt_hba_attributes {
2013-04-05 20:38:28 -07:00
u8 flashrom_version_string [ BEISCSI_VER_STRLEN ] ;
u8 manufacturer_name [ BEISCSI_VER_STRLEN ] ;
2009-09-05 07:36:35 +05:30
u32 supported_modes ;
u8 seeprom_version_lo ;
u8 seeprom_version_hi ;
u8 rsvd0 [ 2 ] ;
u32 fw_cmd_data_struct_version ;
u32 ep_fw_data_struct_version ;
2013-04-05 20:38:28 -07:00
u8 ncsi_version_string [ 12 ] ;
2009-09-05 07:36:35 +05:30
u32 default_extended_timeout ;
2013-04-05 20:38:28 -07:00
u8 controller_model_number [ BEISCSI_VER_STRLEN ] ;
2009-09-05 07:36:35 +05:30
u8 controller_description [ 64 ] ;
2013-04-05 20:38:28 -07:00
u8 controller_serial_number [ BEISCSI_VER_STRLEN ] ;
u8 ip_version_string [ BEISCSI_VER_STRLEN ] ;
u8 firmware_version_string [ BEISCSI_VER_STRLEN ] ;
u8 bios_version_string [ BEISCSI_VER_STRLEN ] ;
u8 redboot_version_string [ BEISCSI_VER_STRLEN ] ;
u8 driver_version_string [ BEISCSI_VER_STRLEN ] ;
u8 fw_on_flash_version_string [ BEISCSI_VER_STRLEN ] ;
2009-09-05 07:36:35 +05:30
u32 functionalities_supported ;
u16 max_cdblength ;
u8 asic_revision ;
u8 generational_guid [ 16 ] ;
u8 hba_port_count ;
u16 default_link_down_timeout ;
u8 iscsi_ver_min_max ;
u8 multifunction_device ;
u8 cache_valid ;
u8 hba_status ;
u8 max_domains_supported ;
u8 phy_port ;
u32 firmware_post_status ;
u32 hba_mtu [ 8 ] ;
2009-10-23 11:52:33 +05:30
u8 iscsi_features ;
2013-04-05 20:38:28 -07:00
u8 asic_generation ;
u8 future_u8 [ 2 ] ;
2009-10-23 11:52:33 +05:30
u32 future_u32 [ 3 ] ;
2009-09-05 07:36:35 +05:30
} __packed ;
struct mgmt_controller_attributes {
struct mgmt_hba_attributes hba_attribs ;
u16 pci_vendor_id ;
u16 pci_device_id ;
u16 pci_sub_vendor_id ;
u16 pci_sub_system_id ;
u8 pci_bus_number ;
u8 pci_device_number ;
u8 pci_function_number ;
u8 interface_type ;
u64 unique_identifier ;
u8 netfilters ;
u8 rsvd0 [ 3 ] ;
2013-04-05 20:38:28 -07:00
u32 future_u32 [ 4 ] ;
2009-09-05 07:36:35 +05:30
} __packed ;
struct be_mgmt_controller_attributes {
struct be_cmd_req_hdr hdr ;
struct mgmt_controller_attributes params ;
} __packed ;
struct be_mgmt_controller_attributes_resp {
struct be_cmd_resp_hdr hdr ;
struct mgmt_controller_attributes params ;
} __packed ;
2012-04-03 23:41:50 -05:00
struct be_bsg_vendor_cmd {
struct be_cmd_req_hdr hdr ;
unsigned short region ;
unsigned short offset ;
unsigned short sector ;
} __packed ;
2009-09-05 07:36:35 +05:30
/* configuration management */
# define GET_MGMT_CONTROLLER_WS(phba) (phba->pmgmt_ws)
/* MGMT CMD flags */
# define MGMT_CMDH_FREE (1<<0)
/* --- MGMT_ERROR_CODES --- */
/* Error Codes returned in the status field of the CMD response header */
# define MGMT_STATUS_SUCCESS 0 /* The CMD completed without errors */
# define MGMT_STATUS_FAILED 1 /* Error status in the Status field of */
/* the CMD_RESPONSE_HEADER */
# define ISCSI_GET_PDU_TEMPLATE_ADDRESS(pc, pa) {\
2012-04-03 23:41:38 -05:00
pa - > lo = phba - > init_mem [ ISCSI_MEM_GLOBAL_HEADER ] . mem_array [ 0 ] . \
2009-09-05 07:36:35 +05:30
bus_address . u . a32 . address_lo ; \
2012-04-03 23:41:38 -05:00
pa - > hi = phba - > init_mem [ ISCSI_MEM_GLOBAL_HEADER ] . mem_array [ 0 ] . \
2009-09-05 07:36:35 +05:30
bus_address . u . a32 . address_hi ; \
}
2012-04-03 23:41:50 -05:00
# define BEISCSI_WRITE_FLASH 0
# define BEISCSI_READ_FLASH 1
2009-09-05 07:36:35 +05:30
struct beiscsi_endpoint {
struct beiscsi_hba * phba ;
struct beiscsi_sess * sess ;
struct beiscsi_conn * conn ;
2010-01-05 05:05:34 +05:30
struct iscsi_endpoint * openiscsi_ep ;
2009-09-05 07:36:35 +05:30
unsigned short ip_type ;
char dst6_addr [ ISCSI_ADDRESS_BUF_LEN ] ;
unsigned long dst_addr ;
unsigned short ep_cid ;
unsigned int fw_handle ;
u16 dst_tcpport ;
u16 cid_vld ;
} ;
2010-07-22 04:17:16 +05:30
int mgmt_get_fw_config ( struct be_ctrl_info * ctrl ,
2009-09-05 07:36:35 +05:30
struct beiscsi_hba * phba ) ;
2010-07-22 04:17:16 +05:30
unsigned int mgmt_invalidate_connection ( struct beiscsi_hba * phba ,
2009-09-05 07:36:35 +05:30
struct beiscsi_endpoint * beiscsi_ep ,
unsigned short cid ,
unsigned short issue_reset ,
unsigned short savecfg_flag ) ;
2009-10-23 11:52:33 +05:30
2012-04-03 23:41:51 -05:00
int mgmt_set_ip ( struct beiscsi_hba * phba ,
struct iscsi_iface_param_info * ip_param ,
struct iscsi_iface_param_info * subnet_param ,
uint32_t boot_proto ) ;
unsigned int mgmt_get_boot_target ( struct beiscsi_hba * phba ) ;
2012-08-20 23:00:08 +05:30
unsigned int mgmt_reopen_session ( struct beiscsi_hba * phba ,
unsigned int reopen_type ,
unsigned sess_handle ) ;
2012-04-03 23:41:51 -05:00
unsigned int mgmt_get_session_info ( struct beiscsi_hba * phba ,
u32 boot_session_handle ,
struct be_dma_mem * nonemb_cmd ) ;
int mgmt_get_nic_conf ( struct beiscsi_hba * phba ,
struct be_cmd_get_nic_conf_resp * mac ) ;
int mgmt_get_if_info ( struct beiscsi_hba * phba , int ip_type ,
2013-09-28 15:35:56 -07:00
struct be_cmd_get_if_info_resp * * if_info ) ;
2012-04-03 23:41:51 -05:00
int mgmt_get_gateway ( struct beiscsi_hba * phba , int ip_type ,
struct be_cmd_get_def_gateway_resp * gateway ) ;
int mgmt_set_gateway ( struct beiscsi_hba * phba ,
struct iscsi_iface_param_info * gateway_param ) ;
2012-08-20 23:00:08 +05:30
int be_mgmt_get_boot_shandle ( struct beiscsi_hba * phba ,
unsigned int * s_handle ) ;
2012-08-20 23:00:43 +05:30
unsigned int mgmt_get_all_if_id ( struct beiscsi_hba * phba ) ;
int mgmt_set_vlan ( struct beiscsi_hba * phba , uint16_t vlan_tag ) ;
2012-10-20 04:42:25 +05:30
ssize_t beiscsi_drvr_ver_disp ( struct device * dev ,
struct device_attribute * attr , char * buf ) ;
2012-10-20 04:44:35 +05:30
2013-04-05 20:38:28 -07:00
ssize_t beiscsi_fw_ver_disp ( struct device * dev ,
struct device_attribute * attr , char * buf ) ;
2013-09-28 15:35:52 -07:00
ssize_t beiscsi_active_session_disp ( struct device * dev ,
struct device_attribute * attr , char * buf ) ;
2013-04-05 20:38:29 -07:00
2012-10-20 04:45:06 +05:30
ssize_t beiscsi_adap_family_disp ( struct device * dev ,
struct device_attribute * attr , char * buf ) ;
2013-09-28 15:35:52 -07:00
ssize_t beiscsi_free_session_disp ( struct device * dev ,
struct device_attribute * attr , char * buf ) ;
2013-09-28 15:35:53 -07:00
ssize_t beiscsi_phys_port_disp ( struct device * dev ,
struct device_attribute * attr , char * buf ) ;
2012-10-20 04:44:35 +05:30
void beiscsi_offload_cxn_v0 ( struct beiscsi_offload_params * params ,
struct wrb_handle * pwrb_handle ,
struct be_mem_descriptor * mem_descr ) ;
void beiscsi_offload_cxn_v2 ( struct beiscsi_offload_params * params ,
struct wrb_handle * pwrb_handle ) ;
2012-10-20 04:45:51 +05:30
void beiscsi_ue_detect ( struct beiscsi_hba * phba ) ;
2014-05-05 21:41:26 -04:00
int be_cmd_modify_eq_delay ( struct beiscsi_hba * phba ,
struct be_set_eqd * , int num ) ;
2012-10-20 04:44:35 +05:30
2015-04-25 08:18:13 +05:30
int beiscsi_logout_fw_sess ( struct beiscsi_hba * phba ,
uint32_t fw_sess_handle ) ;
2009-09-05 07:36:35 +05:30
# endif