#ifndef BDN_H
#define BDN_H
#if 0
typedef u32 bdn_cfg;
#define BDN_CFG_SIZE_MASK 0x0000ffff
#define BDN_CFG_SIZE_OFFSET 0
#define BDN_CFG_STATE_MASK 0x00ff0000
#define BDN_CFG_STATE_OFFSET 16
#define BDN_CFG_STATE_ACTIVE 0x00010000
#define BDN_CFG_STATE_PENDING 0x00020000
#define BDN_CFG_STATE_DEFAULT 0x00040000
#define SERVER_DESCRIPTION_MAX_LENGTH 64
struct server_descrip {
u8 len;
u8 str[SERVER_DESCRIPTION_MAX_LENGTH];
};
#define SERVER_UUID_LENGTH 36
struct server_uuid {
u8 len;
u8 str[SERVER_UUID_LENGTH];
};
#define GENERALIZED_TIME_MAX_SIZE 16
struct generalized_time {
u8 len;
u8 time_str[GENERALIZED_TIME_MAX_SIZE];
};
#define CONNECTION_ID_LENGTH 16
#define SLOT_TYPE_NUM_MAX_LENGTH 32
struct slot_type_num {
u8 len;
u8 str[SLOT_TYPE_NUM_MAX_LENGTH];
};
#define ILO_MGMT_MAX_NUM_OF_ADDR 3
#define ILO_MGMT_ADDR_MAX_LENGTH 16
struct iLO_mgmt_addr {
u8 num_of_add;
u8 len_of_add[ILO_MGMT_MAX_NUM_OF_ADDR];
u8 str[ILO_MGMT_MAX_NUM_OF_ADDR][ILO_MGMT_ADDR_MAX_LENGTH];
};
#define ENCLOSURE_ID_LENGTH 36
struct enclosure_id {
u8 len;
u8 str[ENCLOSURE_ID_LENGTH];
u8 res[3];
};
struct base_dev_next_os {
u8 reset_2_factory;
u8 res[3];
};
struct base_dev_now {
u8 one_view_config;
u8 res[3];
};
struct base_dev {
struct base_dev_now now;
struct base_dev_next_os next_os;
};
struct server_info {
u8 optional_bitmap;
#define SERVER_INFO_ILO_MGMT_VLAN_PRESENT (1<<0)
#define SERVER_INFO_DATA_TIMESTAMP_PRESENT (1<<1)
#define SERVER_INFO_ENCLOSURE_ID_PRESENT (1<<2)
struct server_descrip server_descrip;
struct server_uuid server_uuid;
struct slot_type_num slot_type_num;
struct iLO_mgmt_addr iLO_mgmt_addr;
u16 iLO_mgmt_vlan;
struct generalized_time data_timestamp;
};
struct Codec_Info {
u32 version;
enum codec_location {
e_None = 0,
e_Here = 1,
e_FRU_EEPROM = 2
} loc;
u16 total_size;
u16 num_msg_segments;
};
#define MAX_CODEC_SIZE 0x8000
#define CODEC_SEGMENT_SIZE 0x400
#define NUMBER_OF_SEGMENTS (MAX_CODEC_SIZE/CODEC_SEGMENT_SIZE)
struct codec_t {
u8 data[NUMBER_OF_SEGMENTS][CODEC_SEGMENT_SIZE];
};
struct bdn_netport_now {
bdn_cfg hdr;
u8 enable_port;
u8 enable_diag;
u8 num_pfs_min_bw;
u8 num_pfs_max_bw;
u8 min_bw[MCP_GLOB_FUNC_MAX];
u8 max_bw[MCP_GLOB_FUNC_MAX];
};
struct bdn_netport_on_port_reset {
bdn_cfg hdr;
u32 link_config;
#define BDN_LINK_CONFIG_ADVERTISED_SPEED_MASK 0x0000ffff
#define BDN_LINK_CONFIG_ADVERTISED_SPEED_SHIFT 0
#define BDN_LINK_CONFIG_FLOW_CONTROL_MASK 0x00070000
#define BDN_LINK_CONFIG_FLOW_CONTROL_SHIFT 16
#define BDN_LINK_CONFIG_PFC_ENABLED_MASK 0x00080000
#define BDN_LINK_CONFIG_PFC_ENABLED_SHIFT 19
#define BDN_LINK_CONFIG_EEE_ENABLED_MASK 0x00100000
#define BDN_LINK_CONFIG_EEE_ENABLED_SHIFT 20
};
struct bdn_netport_next_os_boot {
bdn_cfg hdr;
u8 num_pfs;
u8 num_vf_per_pf[MCP_GLOB_FUNC_MAX];
};
struct bdn_netport_diag_ctrl {
bdn_cfg hdr;
u8 port_reset;
u8 local_loopback;
u8 remote_loopback;
u8 rsrv[1];
};
struct bdn_netport {
struct bdn_netport_now now;
struct bdn_netport_on_port_reset on_port_reset;
struct bdn_netport_next_os_boot next_os_boot;
struct bdn_netport_diag_ctrl diag_ctrl;
};
#define CONNECTION_ID_LEN 16
struct bdn_flexfunc_now {
bdn_cfg hdr;
u8 connection_id[CONNECTION_ID_LEN];
u8 fnic_enabled;
u8 rsrv[3];
};
struct bdn_flexfunc_next_os_boot {
bdn_cfg hdr;
u32 optional_bitmap;
#define FLEXFUNC_CFG_NEXT_OS_C2S_PCP_MAP_PRESENT (1<<0)
#define FLEXFUNC_CFG_NEXT_OS_PORT_ASSIGNMENT_PRESENT (1<<1)
#define FLEXFUNC_CFG_NEXT_OS_EMB_LAG_PRESENT (1<<2)
u8 mac_addr[6];
u8 func_type;
u8 boot_mode;
u8 c_2_s_pcp_map[9];
u16 mtu_size;
u8 rsrv[1];
};
struct bdn_flex_func_diag_ctrl {
bdn_cfg hdr;
u8 enable_wol;
u8 rsrv[3];
};
struct bdn_flex_func {
struct bdn_flexfunc_now now;
struct bdn_flexfunc_next_os_boot next_os_boot;
struct bdn_flex_func_diag_ctrl diag_ctrl;
};
#define FC_NPIV_WWPN_SIZE 8
#define FC_NPIV_WWNN_SIZE 8
struct bdn_npiv_settings {
u8 npiv_wwpn[FC_NPIV_WWPN_SIZE];
u8 npiv_wwnn[FC_NPIV_WWNN_SIZE];
};
struct bdn_fc_npiv_cfg {
u32 hdr;
u32 num_of_npiv;
};
#define MAX_NUMBER_NPIV 64
struct bdn_fc_npiv_tbl {
struct bdn_fc_npiv_cfg fc_npiv_cfg;
struct bdn_npiv_settings settings[MAX_NUMBER_NPIV];
};
struct bdn_fc_npiv {
struct bdn_fc_npiv_tbl now;
};
struct bdn_iscsi_initiator_cfg {
u32 optional_bitmap;
#define ISCSI_INITIATOR_ROUTE_PRESENT (1<<0)
#define ISCSI_INITIATOR_PRIMARY_DNS_PRESENT (1<<1)
#define ISCSI_INITIATOR_SECONDARY_DNS_PRESENT (1<<2)
u8 name[232];
u8 ip_add[16];
u8 netmask[16];
u8 route[16];
u8 primary_dns[16];
u8 secondary_dns[16];
};
struct bdn_iscsi_target_params {
u32 optional_bitmap;
#define ISCSI_TARGET_LLMNR_ENABLE_PRESENT (1<<0)
#define ISCSI_TARGET_ROUTE_ADV_ENABLE_PRESENT (1<<1)
#define ISCSI_TARGET_IPV2_PRESENT (1<<2)
u8 name[232];
u32 lun;
u8 ip_addr[16];
u32 tcp_port;
u8 ip_addr_2[16];
u32 tcp_port_2;
u32 llmnr_en;
u32 route_adv_en;
};
struct bdn_iscsi_authentication {
u32 optional_bitmap;
#define ISCSI_AUTH_CHAP_USERNAME_PRESENT (1<<0)
#define ISCSI_AUTH_CHAP_SECRET_PRESENT (1<<1)
#define ISCSI_AUTH_MUTUAL_USERNAME_PRESENT (1<<2)
#define ISCSI_AUTH_MUTUAL_SECRET_PRESENT (1<<3)
u32 auth_meth;
u8 username[232];
u8 secret[16];
u32 secret_len;
u8 mutual_username[232];
u8 mutual_secret[16];
u32 mutual_secret_len;
};
struct bdn_iscsi_boot_cfg {
u32 optional_bitmap;
#define ISCSI_CFG_CVID_PRESENT (1<<0)
#define ISCSI_CFG_DNS_VIA_DHCP_PRESENT (1<<1)
#define ISCSI_CFG_TARGET_INFO_DHCP_PRESENT (1<<2)
#define ISCSI_CFG_INITIATOR_PRESENT (1<<3)
#define ISCSI_CFG_TARGET_PRESENT (1<<4)
#define ISCSI_CFG_DHCP_VENDOR_ID_PRESENT (1<<5)
#define ISCSI_CFG_AUTH_PRESENT (1<<6)
#define ISCSI_AUTH_HEADER_DIGEST_FLAG_PRESENT (1<<7)
#define ISCSI_AUTH_DATA_DIGEST_FLAG_PRESENT (1<<8)
bdn_cfg hdr;
u32 cvid;
u32 ip_add_type;
u32 dns_via_dhcp;
u32 target_via_dhcp;
u8 dhcp_vendor_id[32];
u32 head_digest_flag_en;
u32 data_digest_flag_en;
};
struct bdn_iscsi_boot_next_dlr {
struct bdn_iscsi_boot_cfg cfg;
struct bdn_iscsi_initiator_cfg initiator_cfg;
struct bdn_iscsi_target_params target_params;
struct bdn_iscsi_authentication authentication;
};
struct bdn_iscsi_boot {
struct bdn_iscsi_boot_next_dlr next_dlr;
};
#define FCOE_TARGETS_WWPN_SIZE 8
#define FCOE_TARGETS_LUN_SIZE 8
struct bdn_fcoe_targets {
u8 wwpn[FCOE_TARGETS_WWPN_SIZE];
u8 lun_id[FCOE_TARGETS_LUN_SIZE];
};
struct bdn_fcoe_boot_cfg {
u32 optional_bitmap;
#define FCOE_CFG_CVID_PRESENT (1<<0)
#define FCOE_BASE_WWNN_PRESENT (1<<1)
#define FCOE_WWPN_PRESENT (1<<2)
bdn_cfg hdr;
u32 cvid;
u8 base_wwnn[FCOE_TARGETS_WWPN_SIZE];
u8 wwpn[FCOE_TARGETS_WWPN_SIZE];
u32 num_of_fcoe_targets;
};
struct bdn_fcoe_boot_next_dlr {
struct bdn_fcoe_boot_cfg cfg;
struct bdn_fcoe_targets fcoe_targets[8];
};
struct bdn_fcoe_boot {
struct bdn_fcoe_boot_next_dlr next_dlr;
};
#ifndef PF_NUM_MAX
#define PF_NUM_MAX 8
#endif
struct bdn_ncsi_next_dlr {
bdn_cfg hdr;
u32 ncsi_scid;
};
struct bdn_ncsi {
struct bdn_ncsi_next_dlr bdn_ncsi_next_dlr;
};
#define MAX_CCT_SIZE 64
#define VALID_RPP_SIGNATURE 0x69616853
struct rpp_sum_stc {
u32 hash;
u32 num;
};
struct digest_stc {
u8 type;
u8 inst;
u16 digest;
};
struct bdn_rapid_respon_stc {
u32 sig;
struct rpp_sum_stc rpp_sum;
u8 num_of_cct;
u8 res[3];
struct digest_stc cct[MAX_CCT_SIZE];
#ifdef CONFIG_SUPPORT_SCI
struct digest_stc sci[MAX_CCT_SIZE];
#endif
};
struct bdn {
u32 size;
struct base_dev base_dev;
struct server_info server_info;
struct bdn_netport netport[MCP_GLOB_PORT_MAX * MCP_GLOB_PATH_MAX];
struct bdn_flex_func flexfunc[PF_NUM_MAX];
struct bdn_fc_npiv fc_npiv[MCP_GLOB_PORT_MAX * MCP_GLOB_PATH_MAX];
struct bdn_iscsi_boot iscsi_boot[MCP_GLOB_PORT_MAX * MCP_GLOB_PATH_MAX];
struct bdn_fcoe_boot fcoe_boot[MCP_GLOB_PORT_MAX * MCP_GLOB_PATH_MAX];
struct bdn_ncsi ncsi;
struct bdn_rapid_respon_stc rpp_stc;
struct enclosure_id serv_info_enc_id;
u32 crc;
};
union bdn_image {
struct bdn bdn;
u8 rsrv[0x9000];
};
#define BDN_SIZE (sizeof(struct bdn))
#define BDN_SERVER_INFO() (ASN1_P->bdn_addr + OFFSETOF(struct bdn, server_info))
#define BDN_BASE_DEV_NEXT_OS() (ASN1_P->bdn_addr + OFFSETOF(struct bdn, base_dev.next_os))
#define BDN_BASE_DEV_NOW() (ASN1_P->bdn_addr + OFFSETOF(struct bdn, base_dev.now))
#define BDN_NETPORT_NOW(papo) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, netport[(papo.path << 1) + papo.port].now))
#define BDN_NETPORT_ON_PORT_RESET(papo) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, netport[(papo.path << 1) + papo.port].on_port_reset))
#define BDN_NETPORT_NEXT_OS_BOOT(papo) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, netport[(papo.path << 1) + papo.port].next_os_boot))
#define BDN_NETPORT_DIAG_CTRL(papo) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, netport[(papo.path << 1) + papo.port].diag_ctrl))
#define BDN_FLEXFUNC_NOW(pf_num) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, flexfunc[pf_num].now))
#define BDN_FLEXFUNC_NEXT_OS_BOOT(pf_num) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, flexfunc[pf_num].next_os_boot))
#define BDN_FLEXFUNC_DIAG_CTRL(pf_num) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, flexfunc[pf_num].diag_ctrl))
#define BDN_FC_NPIV_NOW(papo) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, fc_npiv[(papo.path << 1) + papo.port].now))
#define BDN_FC_NPIV_NOW_CFG(papo) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, fc_npiv[(papo.path << 1) + papo.port].now.fc_npiv_cfg))
#define BDN_FC_NPIV_NOW_SETTINGS(papo, idx) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, fc_npiv[(papo.path << 1) + papo.port].now.settings[idx]))
#define BDN_ISCSI_BOOT_NEXT_DLR_CFG(papo) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, iscsi_boot[(papo.path << 1) + papo.port].next_dlr.cfg))
#define BDN_ISCSI_BOOT_NEXT_DLR_INITIATOR(papo) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, iscsi_boot[(papo.path << 1) + papo.port].next_dlr.initiator_cfg))
#define BDN_ISCSI_BOOT_NEXT_DLR_TARGET(papo) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, iscsi_boot[(papo.path << 1) + papo.port].next_dlr.target_params))
#define BDN_ISCSI_BOOT_NEXT_DLR_AUTHENTICATION(papo) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, iscsi_boot[(papo.path << 1) + papo.port].next_dlr.authentication))
#define BDN_FCOE_BOOT_NEXT_DLR_CFG(papo) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, fcoe_boot[(papo.path << 1) + papo.port].next_dlr.cfg))
#define BDN_FCOE_BOOT_NEXT_DLR_TARGET(papo, idx) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, fcoe_boot[(papo.path << 1) + papo.port].next_dlr.fcoe_targets[idx]))
#define BDN_NCSI_NEXT_DLR() (ASN1_P->bdn_addr + OFFSETOF(struct bdn, ncsi.bdn_ncsi_next_dlr))
#define BDN_RAPID_RESPONSE (ASN1_P->bdn_addr + OFFSETOF(struct bdn, rpp_stc))
#define BDN_SERV_INFO_ENC_ID() (ASN1_P->bdn_addr + OFFSETOF(struct bdn, serv_info_enc_id))
#define BDN_CRC() (ASN1_P->bdn_addr + sizeof(union bdn_image))
#endif
#define BDN_SIZE_IMAGE_MAX (0x9000)
#define BDN_SIZE_OF_MAC (6)
#define BDN_SIZE_OF_WWN (8)
#define BDN_SIZE_OF_IPV4 (4)
#define BDN_SIZE_OF_IPV6 (16)
#define BDN_DIR_MAX (8)
#define BDN_SIZE_OF_PF_PER_PORT (16)
#define BDN_SIZE_OF_CONNECTION_ID (16)
#define BDN_SIZE_OF_C2SPCP_MAP (9)
#define BDN_SIZE_OF_ISCSI_NAME (236)
#define BDN_SIZE_OF_ISCSI_SEC (16)
#define BDN_SIZE_OF_FCOE_TARGETS (8)
#define BDN_SIZE_OF_FCOE_LUN_ID (8)
#define BDN_SIZE_OF_DHCP_VENDOR_ID (32)
#define BDN_SIZE_OF_SERV_DESC (64)
#define BDN_SIZE_OF_SERV_UUID (36)
#define BDN_SIZE_OF_SERV_SLOT (32)
#define BDN_NUM_OF_ILO_ADDR (3)
#define BDN_SIZE_OF_ILO_ADDR (16)
#define BDN_SIZE_OF_SERV_TIME (20)
#define BDN_SIZE_OF_ENCLOSURE_ID (36)
#define BDN_CCT_MAX_SIZE (64)
#define BDN_SCI_MAX_SIZE (64)
struct bdn_dir {
u16 offset;
u16 length;
};
#define BDN_DIR_CFG_NOW (0)
#define BDN_DIR_CFG_NEXT_FLR (1)
#define BDN_DIR_CFG_PORT_RESET (2)
#define BDN_DIR_CFG_NEXT_DLR (3)
#define BDN_DIR_CFG_NEXT_OS_BOOT (4)
#define BDN_DIR_CFG_NEXT_PWR_CYC (5)
#define BDN_DIR_CFG_DIAG_CTRL (6)
typedef u32 bdn_cfg_state;
#define BDN_CFG_STATE_MASK 0x000000ff
#define BDN_CFG_STATE_OFFSET 0
#define BDN_CFG_STATE_NA 0x00000000
#define BDN_CFG_STATE_ACTIVE 0x00000001
#define BDN_CFG_STATE_PENDING 0x00000002
#define BDN_CFG_STATE_DEFAULT 0x00000004
#define BDN_CFG_STATE_IS(x, y) ((((x)->state & BDN_CFG_STATE_MASK) >> BDN_CFG_STATE_OFFSET) == BDN_CFG_STATE_##y)
#define BDN_OPTIONAL_SET(x, y) (x)->optional |= (1 << (y))
#define BDN_OPTIONAL_CHECK(x, y) ((x)->optional & (1 << (y)))
struct bdn_base_now {
bdn_cfg_state state;
u32 optional;
u32 rsv:24,
dci_mgmt:8;
u32 rsrv;
};
struct bdn_base_osb {
bdn_cfg_state state;
u32 optional;
u32 rsv:31,
reset_2_factory:1;
u32 rsrv;
};
struct bdn_base {
struct bdn_dir dir[BDN_DIR_MAX];
struct bdn_base_now now;
struct bdn_base_osb osb;
};
struct bdn_nport_now {
bdn_cfg_state state;
u32 optional;
#define BDN_NETPORT_NOW_OPT_MIN_BW (0)
#define BDN_NETPORT_NOW_OPT_MAX_BW (1)
u32 rsv:14,
enable_port:1,
enable_diag:1,
num_pfs_min_bw:8,
num_pfs_max_bw:8;
u8 min_bw[BDN_SIZE_OF_PF_PER_PORT];
u8 max_bw[BDN_SIZE_OF_PF_PER_PORT];
u32 rsrv;
};
struct bdn_nport_plr {
bdn_cfg_state state;
u32 optional;
#define BDN_NETPORT_RESET_OPT_ADV_SPEED (0)
#define BDN_NETPORT_RESET_OPT_FLOW_CTRL (1)
#define BDN_NETPORT_RESET_OPT_EEE_ENABLE (2)
u32 rsv:11,
eee_enable:1,
flow_ctrl:4,
adv_speed:16;
u32 rsrv;
};
struct bdn_nport_osb {
bdn_cfg_state state;
u32 optional;
#define BDN_NETPORT_BOOT_OPT_NUM_VF (0)
#define BDN_NETPORT_BOOT_OPT_NPIV_ENABLE (1)
u32 rsv:23,
npiv_enable:1,
num_pfs:8;
u8 num_vfs[BDN_SIZE_OF_PF_PER_PORT];
u32 rsrv;
};
struct bdn_nport_dgn {
bdn_cfg_state state;
u32 optional;
u32 rsv:29,
port_reset:1,
local_loopback:1,
remote_loopback:1;
u32 rsrv;
};
struct bdn_nport {
struct bdn_dir dir[BDN_DIR_MAX];
struct bdn_nport_now now;
struct bdn_nport_plr plr;
struct bdn_nport_osb osb;
struct bdn_nport_dgn dgn;
};
struct bdn_flex_now {
bdn_cfg_state state;
u32 optional;
u8 connection_id[BDN_SIZE_OF_CONNECTION_ID];
u32 rsv:31,
fnic_enabled:1;
u32 rsrv;
};
struct bdn_flex_dlr {
bdn_cfg_state state;
u32 optional;
#define BDN_FLEXFUNC_DLR_OPT_FC_WWNN (0)
#define BDN_FLEXFUNC_DLR_OPT_FC_WWPN (1)
u8 fc_wwnn[BDN_SIZE_OF_WWN];
u8 fc_wwpn[BDN_SIZE_OF_WWN];
u32 rsrv[2];
};
struct bdn_flex_osb {
bdn_cfg_state state;
u32 optional;
#define BDN_FLEXFUNC_BOOT_OPT_C2SPCP_MAP (0)
#define BDN_FLEXFUNC_BOOT_OPT_PORT_ASSIGNMENT (1)
#define BDN_FLEXFUNC_BOOT_OPT_EMB_LAG (2)
#define BDN_FLEXFUNC_BOOT_OPT_MTU_SIZE (3)
#define BDN_FLEXFUNC_BOOT_OPT_OVER_MTU (4)
u8 mac_addr[BDN_SIZE_OF_MAC];
u8 c_2_s_pcp_map[BDN_SIZE_OF_C2SPCP_MAP];
u8 func_type;
u32 rsv:2,
valid_mac_addr:1,
override_mtu:1,
boot_mode:4,
port_assign:4,
emb_lag:4,
mtu_size:16;
u32 rsrv;
};
struct bdn_flex_dgn {
bdn_cfg_state state;
u32 optional;
u32 rsv:31,
enable_wol:1;
u32 rsrv;
};
struct bdn_flex {
struct bdn_dir dir[BDN_DIR_MAX];
struct bdn_flex_now now;
struct bdn_flex_dlr dlr;
struct bdn_flex_osb osb;
struct bdn_flex_dgn dgn;
};
struct bdn_npiv_dlr {
bdn_cfg_state state;
u32 optional;
struct dci_fc_npiv_tbl npiv_tbl;
};
struct bdn_npiv {
struct bdn_dir dir[BDN_DIR_MAX];
struct bdn_npiv_dlr dlr;
};
struct bdn_iscsi_init {
u32 rsv:21,
opt_route:1,
opt_pri_dns:1,
opt_sec_dns:1,
name_size:8;
u8 ip_add[BDN_SIZE_OF_IPV6];
u8 netmask[BDN_SIZE_OF_IPV6];
u8 route[BDN_SIZE_OF_IPV6];
u8 primary_dns[BDN_SIZE_OF_IPV6];
u8 secondary_dns[BDN_SIZE_OF_IPV6];
u8 name[BDN_SIZE_OF_ISCSI_NAME];
};
struct bdn_iscsi_trgt {
u32 optional;
#define BDN_ISCSI_TARGET_OPT_LLMNR_ENABLE (0)
#define BDN_ISCSI_TARGET_OPT_ROUTE_ADV_ENABLE (1)
u32 rsv:21,
opt_ip2:1,
llmnr_en:1,
route_adv_en:1,
name_size:8;
u32 lun;
u16 tcpport;
u16 tcpport2;
u8 ip[BDN_SIZE_OF_IPV6];
u8 ip2[BDN_SIZE_OF_IPV6];
u8 name[BDN_SIZE_OF_ISCSI_NAME];
u32 rsrv;
};
struct bdn_iscsi_auth {
u32 rsv:2,
c_sec_size:6,
auth_method:2,
m_sec_size:6,
c_name_size:8,
m_name_size:8;
u8 chap_username[BDN_SIZE_OF_ISCSI_NAME];
u8 chap_secret[BDN_SIZE_OF_ISCSI_SEC];
u8 mutual_username[BDN_SIZE_OF_ISCSI_NAME];
u8 mutual_secret[BDN_SIZE_OF_ISCSI_SEC];
u32 rsrv;
};
struct bdn_iboot_dlr {
bdn_cfg_state state;
u32 optional;
#define BDN_ISCSI_BOOT_OPT_CVID (0)
#define BDN_ISCSI_BOOT_OPT_INITIATOR (1)
#define BDN_ISCSI_BOOT_OPT_TARGET (2)
#define BDN_ISCSI_BOOT_OPT_AUTH (3)
#define BDN_ISCSI_BOOT_OPT_HEAD_DIGEST_EN (4)
#define BDN_ISCSI_BOOT_OPT_DATA_DIGEST_EN (5)
u32 rsv:4,
initiator_dhcp:1,
target_dhcp:1,
head_digest_en:1,
data_digest_en:1,
dhcp_vendor_id_size:8,
ip_type:4,
cvid:12;
u8 dhcp_vendor_id[BDN_SIZE_OF_DHCP_VENDOR_ID];
u32 rsrv;
struct bdn_iscsi_init init;
struct bdn_iscsi_trgt trgt;
struct bdn_iscsi_auth auth;
};
struct bdn_iboot {
struct bdn_dir dir[BDN_DIR_MAX];
struct bdn_iboot_dlr dlr;
};
struct bdn_fcoe_trgt {
u8 wwpn[BDN_SIZE_OF_WWN];
u8 lunid[BDN_SIZE_OF_FCOE_LUN_ID];
};
struct bdn_fboot_dlr {
bdn_cfg_state state;
u32 optional;
u32 rsv:24,
num_of_targets:4;
struct bdn_fcoe_trgt trgt[BDN_SIZE_OF_FCOE_TARGETS];
u32 rsrv;
};
struct bdn_fboot {
struct bdn_dir dir[BDN_DIR_MAX];
struct bdn_fboot_dlr dlr;
};
struct bdn_ncsi_dlr {
bdn_cfg_state state;
u32 optional;
u32 ncsi_scid:12,
rsv:20;
u32 rsv2;
};
struct bdn_ncsi {
struct bdn_dir dir[BDN_DIR_MAX];
struct bdn_ncsi_dlr dlr;
};
struct bdn_serv {
bdn_cfg_state state;
u32 optional;
#define BDN_SERV_INFO_OPT_ILO_VLAN (0)
#define BDN_SERV_INFO_OPT_TIMESTAMP (1)
#define BDN_SERV_INFO_OPT_ENCLOSURE (2)
u16 ilo_vlan;
u8 serv_desc_size;
u8 serv_uuid_size;
u8 slot_info_size;
u8 timestamp_size;
u8 enclosure_size;
u8 ilo_addr_num;
u8 ilo_addr_size[BDN_NUM_OF_ILO_ADDR];
u8 crc8;
u8 serv_desc[BDN_SIZE_OF_SERV_DESC];
u8 serv_uuid[BDN_SIZE_OF_SERV_UUID];
u8 slot_info[BDN_SIZE_OF_SERV_SLOT];
u8 ilo_addr[BDN_NUM_OF_ILO_ADDR][BDN_SIZE_OF_ILO_ADDR];
u8 timestamp[BDN_SIZE_OF_SERV_TIME];
u8 enclosure[BDN_SIZE_OF_ENCLOSURE_ID];
};
struct bdn_rrp_digest {
u8 object;
u8 index;
u16 digest;
};
struct bdn_rrp {
bdn_cfg_state state;
u32 optional;
#define BDN_RRP_OPT_CCT (0)
#define BDN_RRP_OPT_SCI (1)
u32 hash;
u32 num_cct:8,
num_sci:8,
rsv:16;
struct bdn_rrp_digest cct[BDN_CCT_MAX_SIZE];
struct bdn_rrp_digest sci[BDN_SCI_MAX_SIZE];
};
struct bdn_head {
u32 signature;
#define BDN_HEAD_SIGN_SHIFT (8)
#define BDN_HEAD_SIGN_MASK (0xffffff << BDN_HEAD_SIGN_SHIFT)
#define BDN_HEAD_SIGN_VALID (((u32)'B' << 16) | ((u32)'D' << 8) | 'N')
#define BDN_HEAD_SIGN_VER_SHIFT (0)
#define BDN_HEAD_SIGN_VER_MASK (0xff << BDN_HEAD_SIGN_VER_SHIFT)
#define BDN_HEAD_SIGN_VER_CURRENT (1)
#define BDN_HEAD_SIGN_CURRENT ((BDN_HEAD_SIGN_VALID << BDN_HEAD_SIGN_SHIFT) | (BDN_HEAD_SIGN_VER_CURRENT << BDN_HEAD_SIGN_VER_SHIFT))
u32 num_port:8,
num_func:8,
rsrv_bit:16;
struct bdn_dir glob;
struct bdn_dir port;
struct bdn_dir func;
u32 rsrv[3];
};
struct bdn_glob {
#define BDN_DIR_GLOB_SERV_INFO 0
#define BDN_DIR_GLOB_BASE_DEV 1
#define BDN_DIR_GLOB_NCSI 2
#define BDN_DIR_GLOB_RRP 3
struct bdn_dir dir[BDN_DIR_MAX];
struct bdn_serv serv;
struct bdn_base base;
struct bdn_ncsi ncsi;
struct bdn_rrp rrp;
u32 rsrv[8];
};
struct bdn_port {
#define BDN_DIR_PORT_NETPORT 0
#define BDN_DIR_PORT_FC_NPIV 1
#define BDN_DIR_PORT_ISCSI_BOOT 2
#define BDN_DIR_PORT_FCOE_BOOT 3
struct bdn_dir dir[BDN_DIR_MAX];
struct bdn_nport port;
struct bdn_npiv npiv;
struct bdn_iboot iboot;
struct bdn_fboot fboot;
};
struct bdn_func {
#define BDN_DIR_FUNC_FLEX_FUNC 0
struct bdn_dir dir[BDN_DIR_MAX];
struct bdn_flex flex;
u32 rsrv[4];
};
struct bdn {
struct bdn_head head;
struct bdn_glob glob;
struct bdn_port port[MCP_GLOB_PORT_MAX];
struct bdn_func func[MCP_GLOB_FUNC_MAX];
};
#define BDN_OFFSET_GLOB(x) (OFFSETOF(struct bdn, glob.x) & 0xffff)
#define BDN_OFFSET_BASE(x) (OFFSETOF(struct bdn, glob.base.x) & 0xffff)
#define BDN_OFFSET_NCSI(x) (OFFSETOF(struct bdn, glob.ncsi.x) & 0xffff)
#define BDN_OFFSET_PORT(x, y) (OFFSETOF(struct bdn, port[(x)].y) & 0xffff)
#define BDN_OFFSET_NPORT(x, y) (OFFSETOF(struct bdn, port[(x)].port.y) & 0xffff)
#define BDN_OFFSET_NPIV(x, y) (OFFSETOF(struct bdn, port[(x)].npiv.y) & 0xffff)
#define BDN_OFFSET_IBOOT(x, y) (OFFSETOF(struct bdn, port[(x)].iboot.y) & 0xffff)
#define BDN_OFFSET_FBOOT(x, y) (OFFSETOF(struct bdn, port[(x)].fboot.y) & 0xffff)
#define BDN_OFFSET_FUNC(x, y) (OFFSETOF(struct bdn, func[(x)].y) & 0xffff)
#define BDN_OFFSET_FLEX(x, y) (OFFSETOF(struct bdn, func[(x)].flex.y) & 0xffff)
#define BDN_OFFSET_CRC (BDN_SIZE_IMAGE_MAX - 4)
union bdn_image {
struct bdn bdn;
u8_t rsrv[BDN_SIZE_IMAGE_MAX];
};
#endif