xref: /openbmc/linux/drivers/scsi/be2iscsi/be_mgmt.h (revision 6e9ef509)
16e9ef509SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2942b7654SJitendra Bhivare /*
30172dc65SJitendra Bhivare  * Copyright 2017 Broadcom. All Rights Reserved.
4942b7654SJitendra Bhivare  * The term "Broadcom" refers to Broadcom Limited and/or its subsidiaries.
56733b39aSJayamohan Kallickal  *
66733b39aSJayamohan Kallickal  * Contact Information:
760f36e04SJitendra Bhivare  * linux-drivers@broadcom.com
86733b39aSJayamohan Kallickal  */
96733b39aSJayamohan Kallickal 
106733b39aSJayamohan Kallickal #ifndef _BEISCSI_MGMT_
116733b39aSJayamohan Kallickal #define _BEISCSI_MGMT_
126733b39aSJayamohan Kallickal 
13ffce3e2eSJayamohan Kallickal #include <scsi/scsi_bsg_iscsi.h>
146733b39aSJayamohan Kallickal #include "be_iscsi.h"
156733b39aSJayamohan Kallickal #include "be_main.h"
166733b39aSJayamohan Kallickal 
170e43895eSMike Christie #define IP_ACTION_ADD	0x01
180e43895eSMike Christie #define IP_ACTION_DEL	0x02
190e43895eSMike Christie 
200e43895eSMike Christie #define IP_V6_LEN	16
210e43895eSMike Christie #define IP_V4_LEN	4
220e43895eSMike Christie 
237a158003SJohn Soni Jose /* UE Status and Mask register */
247a158003SJohn Soni Jose #define PCICFG_UE_STATUS_LOW            0xA0
257a158003SJohn Soni Jose #define PCICFG_UE_STATUS_HIGH           0xA4
267a158003SJohn Soni Jose #define PCICFG_UE_STATUS_MASK_LOW       0xA8
277a158003SJohn Soni Jose #define PCICFG_UE_STATUS_MASK_HI        0xAC
287a158003SJohn Soni Jose 
293cbb7a74SJayamohan Kallickal int mgmt_open_connection(struct beiscsi_hba *phba,
303cbb7a74SJayamohan Kallickal 			 struct sockaddr *dst_addr,
313cbb7a74SJayamohan Kallickal 			 struct beiscsi_endpoint *beiscsi_ep,
323cbb7a74SJayamohan Kallickal 			 struct be_dma_mem *nonemb_cmd);
336733b39aSJayamohan Kallickal 
34ffce3e2eSJayamohan Kallickal unsigned int mgmt_vendor_specific_fw_cmd(struct be_ctrl_info *ctrl,
35ffce3e2eSJayamohan Kallickal 					 struct beiscsi_hba *phba,
36ffce3e2eSJayamohan Kallickal 					 struct bsg_job *job,
37ffce3e2eSJayamohan Kallickal 					 struct be_dma_mem *nonemb_cmd);
386733b39aSJayamohan Kallickal 
39f3505013SJitendra Bhivare #define BE_INVLDT_CMD_TBL_SZ	128
40f3505013SJitendra Bhivare struct invldt_cmd_tbl {
41f3505013SJitendra Bhivare 	unsigned short icd;
42f3505013SJitendra Bhivare 	unsigned short cid;
43f3505013SJitendra Bhivare } __packed;
44f3505013SJitendra Bhivare 
45f3505013SJitendra Bhivare struct invldt_cmds_params_in {
466733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
476733b39aSJayamohan Kallickal 	unsigned int ref_handle;
486733b39aSJayamohan Kallickal 	unsigned int icd_count;
49f3505013SJitendra Bhivare 	struct invldt_cmd_tbl table[BE_INVLDT_CMD_TBL_SZ];
506733b39aSJayamohan Kallickal 	unsigned short cleanup_type;
516733b39aSJayamohan Kallickal 	unsigned short unused;
526733b39aSJayamohan Kallickal } __packed;
536733b39aSJayamohan Kallickal 
54f3505013SJitendra Bhivare struct invldt_cmds_params_out {
55f3505013SJitendra Bhivare 	struct be_cmd_resp_hdr hdr;
566733b39aSJayamohan Kallickal 	unsigned int ref_handle;
576733b39aSJayamohan Kallickal 	unsigned int icd_count;
58f3505013SJitendra Bhivare 	unsigned int icd_status[BE_INVLDT_CMD_TBL_SZ];
596733b39aSJayamohan Kallickal } __packed;
606733b39aSJayamohan Kallickal 
61f3505013SJitendra Bhivare union be_invldt_cmds_params {
62f3505013SJitendra Bhivare 	struct invldt_cmds_params_in request;
63f3505013SJitendra Bhivare 	struct invldt_cmds_params_out response;
646733b39aSJayamohan Kallickal } __packed;
656733b39aSJayamohan Kallickal 
666733b39aSJayamohan Kallickal struct mgmt_hba_attributes {
6722661e25SJayamohan Kallickal 	u8 flashrom_version_string[BEISCSI_VER_STRLEN];
6822661e25SJayamohan Kallickal 	u8 manufacturer_name[BEISCSI_VER_STRLEN];
696733b39aSJayamohan Kallickal 	u32 supported_modes;
706733b39aSJayamohan Kallickal 	u8 seeprom_version_lo;
716733b39aSJayamohan Kallickal 	u8 seeprom_version_hi;
726733b39aSJayamohan Kallickal 	u8 rsvd0[2];
736733b39aSJayamohan Kallickal 	u32 fw_cmd_data_struct_version;
746733b39aSJayamohan Kallickal 	u32 ep_fw_data_struct_version;
7522661e25SJayamohan Kallickal 	u8 ncsi_version_string[12];
766733b39aSJayamohan Kallickal 	u32 default_extended_timeout;
7722661e25SJayamohan Kallickal 	u8 controller_model_number[BEISCSI_VER_STRLEN];
786733b39aSJayamohan Kallickal 	u8 controller_description[64];
7922661e25SJayamohan Kallickal 	u8 controller_serial_number[BEISCSI_VER_STRLEN];
8022661e25SJayamohan Kallickal 	u8 ip_version_string[BEISCSI_VER_STRLEN];
8122661e25SJayamohan Kallickal 	u8 firmware_version_string[BEISCSI_VER_STRLEN];
8222661e25SJayamohan Kallickal 	u8 bios_version_string[BEISCSI_VER_STRLEN];
8322661e25SJayamohan Kallickal 	u8 redboot_version_string[BEISCSI_VER_STRLEN];
8422661e25SJayamohan Kallickal 	u8 driver_version_string[BEISCSI_VER_STRLEN];
8522661e25SJayamohan Kallickal 	u8 fw_on_flash_version_string[BEISCSI_VER_STRLEN];
866733b39aSJayamohan Kallickal 	u32 functionalities_supported;
876733b39aSJayamohan Kallickal 	u16 max_cdblength;
886733b39aSJayamohan Kallickal 	u8 asic_revision;
896733b39aSJayamohan Kallickal 	u8 generational_guid[16];
906733b39aSJayamohan Kallickal 	u8 hba_port_count;
916733b39aSJayamohan Kallickal 	u16 default_link_down_timeout;
926733b39aSJayamohan Kallickal 	u8 iscsi_ver_min_max;
936733b39aSJayamohan Kallickal 	u8 multifunction_device;
946733b39aSJayamohan Kallickal 	u8 cache_valid;
956733b39aSJayamohan Kallickal 	u8 hba_status;
966733b39aSJayamohan Kallickal 	u8 max_domains_supported;
976733b39aSJayamohan Kallickal 	u8 phy_port;
986733b39aSJayamohan Kallickal 	u32 firmware_post_status;
996733b39aSJayamohan Kallickal 	u32 hba_mtu[8];
100bfead3b2SJayamohan Kallickal 	u8 iscsi_features;
10122661e25SJayamohan Kallickal 	u8 asic_generation;
10222661e25SJayamohan Kallickal 	u8 future_u8[2];
103bfead3b2SJayamohan Kallickal 	u32 future_u32[3];
1046733b39aSJayamohan Kallickal } __packed;
1056733b39aSJayamohan Kallickal 
1066733b39aSJayamohan Kallickal struct mgmt_controller_attributes {
1076733b39aSJayamohan Kallickal 	struct mgmt_hba_attributes hba_attribs;
1086733b39aSJayamohan Kallickal 	u16 pci_vendor_id;
1096733b39aSJayamohan Kallickal 	u16 pci_device_id;
1106733b39aSJayamohan Kallickal 	u16 pci_sub_vendor_id;
1116733b39aSJayamohan Kallickal 	u16 pci_sub_system_id;
1126733b39aSJayamohan Kallickal 	u8 pci_bus_number;
1136733b39aSJayamohan Kallickal 	u8 pci_device_number;
1146733b39aSJayamohan Kallickal 	u8 pci_function_number;
1156733b39aSJayamohan Kallickal 	u8 interface_type;
1166733b39aSJayamohan Kallickal 	u64 unique_identifier;
1176733b39aSJayamohan Kallickal 	u8 netfilters;
1186733b39aSJayamohan Kallickal 	u8 rsvd0[3];
11922661e25SJayamohan Kallickal 	u32 future_u32[4];
1206733b39aSJayamohan Kallickal } __packed;
1216733b39aSJayamohan Kallickal 
1226733b39aSJayamohan Kallickal struct be_mgmt_controller_attributes {
1236733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
1246733b39aSJayamohan Kallickal 	struct mgmt_controller_attributes params;
1256733b39aSJayamohan Kallickal } __packed;
1266733b39aSJayamohan Kallickal 
1276733b39aSJayamohan Kallickal struct be_mgmt_controller_attributes_resp {
1286733b39aSJayamohan Kallickal 	struct be_cmd_resp_hdr hdr;
1296733b39aSJayamohan Kallickal 	struct mgmt_controller_attributes params;
1306733b39aSJayamohan Kallickal } __packed;
1316733b39aSJayamohan Kallickal 
132ffce3e2eSJayamohan Kallickal struct be_bsg_vendor_cmd {
133ffce3e2eSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
134ffce3e2eSJayamohan Kallickal 	unsigned short region;
135ffce3e2eSJayamohan Kallickal 	unsigned short offset;
136ffce3e2eSJayamohan Kallickal 	unsigned short sector;
137ffce3e2eSJayamohan Kallickal } __packed;
138ffce3e2eSJayamohan Kallickal 
1396733b39aSJayamohan Kallickal /* configuration management */
1406733b39aSJayamohan Kallickal 
1416733b39aSJayamohan Kallickal #define GET_MGMT_CONTROLLER_WS(phba)    (phba->pmgmt_ws)
1426733b39aSJayamohan Kallickal 
1436733b39aSJayamohan Kallickal #define ISCSI_GET_PDU_TEMPLATE_ADDRESS(pc, pa) {\
1446733b39aSJayamohan Kallickal 	pa->lo = phba->init_mem[ISCSI_MEM_GLOBAL_HEADER].mem_array[0].\
1456733b39aSJayamohan Kallickal 					bus_address.u.a32.address_lo;  \
1466733b39aSJayamohan Kallickal 	pa->hi = phba->init_mem[ISCSI_MEM_GLOBAL_HEADER].mem_array[0].\
1476733b39aSJayamohan Kallickal 					bus_address.u.a32.address_hi;  \
1486733b39aSJayamohan Kallickal }
1496733b39aSJayamohan Kallickal 
150ffce3e2eSJayamohan Kallickal #define BEISCSI_WRITE_FLASH 0
151ffce3e2eSJayamohan Kallickal #define BEISCSI_READ_FLASH 1
152ffce3e2eSJayamohan Kallickal 
1536733b39aSJayamohan Kallickal struct beiscsi_endpoint {
1546733b39aSJayamohan Kallickal 	struct beiscsi_hba *phba;
1556733b39aSJayamohan Kallickal 	struct beiscsi_conn *conn;
156c2462288SJayamohan Kallickal 	struct iscsi_endpoint *openiscsi_ep;
1576733b39aSJayamohan Kallickal 	unsigned short ip_type;
1586733b39aSJayamohan Kallickal 	char dst6_addr[ISCSI_ADDRESS_BUF_LEN];
1596733b39aSJayamohan Kallickal 	unsigned long dst_addr;
1606733b39aSJayamohan Kallickal 	unsigned short ep_cid;
1616733b39aSJayamohan Kallickal 	unsigned int fw_handle;
1626733b39aSJayamohan Kallickal 	u16 dst_tcpport;
1636733b39aSJayamohan Kallickal 	u16 cid_vld;
1646733b39aSJayamohan Kallickal };
1656733b39aSJayamohan Kallickal 
16698713216SJitendra Bhivare int beiscsi_mgmt_invalidate_icds(struct beiscsi_hba *phba,
16798713216SJitendra Bhivare 				 struct invldt_cmd_tbl *inv_tbl,
16898713216SJitendra Bhivare 				 unsigned int nents);
169bfead3b2SJayamohan Kallickal 
1704788e732SJitendra Bhivare int beiscsi_get_initiator_name(struct beiscsi_hba *phba, char *name, bool cfg);
171c5905bf8SJitendra Bhivare 
1720152a7e9SJitendra Bhivare int beiscsi_if_en_dhcp(struct beiscsi_hba *phba, u32 ip_type);
1730152a7e9SJitendra Bhivare 
1740152a7e9SJitendra Bhivare int beiscsi_if_en_static(struct beiscsi_hba *phba, u32 ip_type,
1750152a7e9SJitendra Bhivare 			 u8 *ip, u8 *subnet);
1760e43895eSMike Christie 
177480195c2SJitendra Bhivare int beiscsi_if_set_gw(struct beiscsi_hba *phba, u32 ip_type, u8 *gw);
178480195c2SJitendra Bhivare 
179480195c2SJitendra Bhivare int beiscsi_if_get_gw(struct beiscsi_hba *phba, u32 ip_type,
180480195c2SJitendra Bhivare 		      struct be_cmd_get_def_gateway_resp *resp);
181480195c2SJitendra Bhivare 
1820e43895eSMike Christie int mgmt_get_nic_conf(struct beiscsi_hba *phba,
1830e43895eSMike Christie 		      struct be_cmd_get_nic_conf_resp *mac);
1840e43895eSMike Christie 
18596b48b92SJitendra Bhivare int beiscsi_if_get_info(struct beiscsi_hba *phba, int ip_type,
1861f536d49SJayamohan Kallickal 			struct be_cmd_get_if_info_resp **if_info);
1870e43895eSMike Christie 
188c5bf8889SJitendra Bhivare unsigned int beiscsi_if_get_handle(struct beiscsi_hba *phba);
1896f72238eSJohn Soni Jose 
190db02aea9SJitendra Bhivare int beiscsi_if_set_vlan(struct beiscsi_hba *phba, uint16_t vlan_tag);
1915cac7596SJohn Soni Jose 
19250a4b824SJitendra Bhivare unsigned int beiscsi_boot_logout_sess(struct beiscsi_hba *phba);
19350a4b824SJitendra Bhivare 
19450a4b824SJitendra Bhivare unsigned int beiscsi_boot_reopen_sess(struct beiscsi_hba *phba);
19550a4b824SJitendra Bhivare 
19650a4b824SJitendra Bhivare unsigned int beiscsi_boot_get_sinfo(struct beiscsi_hba *phba);
19750a4b824SJitendra Bhivare 
19850a4b824SJitendra Bhivare unsigned int __beiscsi_boot_get_shandle(struct beiscsi_hba *phba, int async);
19950a4b824SJitendra Bhivare 
20050a4b824SJitendra Bhivare int beiscsi_boot_get_shandle(struct beiscsi_hba *phba, unsigned int *s_handle);
20150a4b824SJitendra Bhivare 
2025cac7596SJohn Soni Jose ssize_t beiscsi_drvr_ver_disp(struct device *dev,
2035cac7596SJohn Soni Jose 			       struct device_attribute *attr, char *buf);
204acb9693cSJohn Soni Jose 
20522661e25SJayamohan Kallickal ssize_t beiscsi_fw_ver_disp(struct device *dev,
20622661e25SJayamohan Kallickal 			     struct device_attribute *attr, char *buf);
20722661e25SJayamohan Kallickal 
2086103c1f7SJayamohan Kallickal ssize_t beiscsi_active_session_disp(struct device *dev,
2097ad4dfe1SJayamohan Kallickal 				     struct device_attribute *attr, char *buf);
2107ad4dfe1SJayamohan Kallickal 
21126000db7SJohn Soni Jose ssize_t beiscsi_adap_family_disp(struct device *dev,
21226000db7SJohn Soni Jose 				  struct device_attribute *attr, char *buf);
21326000db7SJohn Soni Jose 
2146103c1f7SJayamohan Kallickal 
2156103c1f7SJayamohan Kallickal ssize_t beiscsi_free_session_disp(struct device *dev,
2166103c1f7SJayamohan Kallickal 				   struct device_attribute *attr, char *buf);
2176103c1f7SJayamohan Kallickal 
218d3fea9afSJayamohan Kallickal ssize_t beiscsi_phys_port_disp(struct device *dev,
219d3fea9afSJayamohan Kallickal 				struct device_attribute *attr, char *buf);
220d3fea9afSJayamohan Kallickal 
221acb9693cSJohn Soni Jose void beiscsi_offload_cxn_v0(struct beiscsi_offload_params *params,
222acb9693cSJohn Soni Jose 			     struct wrb_handle *pwrb_handle,
223340c99e9SJohn Soni Jose 			     struct be_mem_descriptor *mem_descr,
224340c99e9SJohn Soni Jose 			     struct hwi_wrb_context *pwrb_context);
225acb9693cSJohn Soni Jose 
226acb9693cSJohn Soni Jose void beiscsi_offload_cxn_v2(struct beiscsi_offload_params *params,
227340c99e9SJohn Soni Jose 			     struct wrb_handle *pwrb_handle,
228340c99e9SJohn Soni Jose 			     struct hwi_wrb_context *pwrb_context);
229340c99e9SJohn Soni Jose 
23049fc5152SJitendra Bhivare unsigned int beiscsi_invalidate_cxn(struct beiscsi_hba *phba,
23149fc5152SJitendra Bhivare 				    struct beiscsi_endpoint *beiscsi_ep);
23249fc5152SJitendra Bhivare 
23349fc5152SJitendra Bhivare unsigned int beiscsi_upload_cxn(struct beiscsi_hba *phba,
23449fc5152SJitendra Bhivare 				struct beiscsi_endpoint *beiscsi_ep);
23549fc5152SJitendra Bhivare 
23673af08e1SJayamohan Kallickal int be_cmd_modify_eq_delay(struct beiscsi_hba *phba,
23773af08e1SJayamohan Kallickal 			 struct be_set_eqd *, int num);
238acb9693cSJohn Soni Jose 
2393f4134c1SJohn Soni Jose int beiscsi_logout_fw_sess(struct beiscsi_hba *phba,
2403f4134c1SJohn Soni Jose 			    uint32_t fw_sess_handle);
2413f4134c1SJohn Soni Jose 
2426733b39aSJayamohan Kallickal #endif
243