d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/****************************************************************************
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * CDDL HEADER START
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * The contents of this file are subject to the terms of the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Common Development and Distribution License (the "License").
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You may not use this file except in compliance with the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * or http://www.opensolaris.org/os/licensing.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * See the License for the specific language governing permissions
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * and limitations under the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * When distributing Covered Code, include this CDDL HEADER in each
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * If applicable, add the following below this CDDL HEADER, with the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * fields enclosed by brackets "[]" replaced with your own identifying
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * information: Portions Copyright [yyyy] [name of copyright owner]
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * CDDL HEADER END
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Copyright 2014 QLogic Corporation
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * The contents of this file are subject to the terms of the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * QLogic End User License (the "License").
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You may not use this file except in compliance with the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You can obtain a copy of the License at
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * QLogic_End_User_Software_License.txt
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * See the License for the specific language governing permissions
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * and limitations under the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Name: bdn.h
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Description: BDN definitions
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Author: Yaniv Rosner
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ****************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef BDN_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct Codec_Info {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t version; /* Version of Codec */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi enum codec_location {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi e_None = 0,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi e_Here = 1,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi e_FRU_EEPROM = 2
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } loc; /* DEFAULT e-None */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t total_size; /* total size of Codec in bytes.Max size 32K (64K?)*/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t num_msg_segments; /* number of segments = total size / max message payload size */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MAX_CODEC_SIZE 0x8000
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CODEC_SEGMENT_SIZE 0x400
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define NUMBER_OF_SEGMENTS (MAX_CODEC_SIZE/CODEC_SEGMENT_SIZE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct codec_t {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t data[NUMBER_OF_SEGMENTS][CODEC_SEGMENT_SIZE];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef u32 bdn_cfg;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_CFG_SIZE_MASK 0x0000ffff
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_CFG_SIZE_OFFSET 0
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_CFG_STATE_MASK 0x00ff0000
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_CFG_STATE_OFFSET 16
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define BDN_CFG_STATE_ACTIVE 0x00010000
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define BDN_CFG_STATE_PENDING 0x00020000
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct bdn_fcoe_boot_target {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 wwpn;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 lUNID;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if 0
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MAX_FCOE_IBOOT_PORT_ID 8 /* @@@TBD - what's this ? */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MAX_IBOOT_TARGETS 8
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct bdn_fcoe_boot_next_dlr {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi bdn_cfg hdr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 fcoe_boot_enable;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 fcoe_cvid;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 fcoe_wwnn;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 n_port_id[MAX_FCOE_IBOOT_PORT_ID]; //Still Not sure how big the array is
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct fcoe_boot_target targets[MAX_IBOOT_TARGETS]; //Still Not sure how big the array is
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct bdn_fcoe_boot { // Main fcoe_iboot struct
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi fcoe_iboot_next_dlr next_dlr; // Hold substruct per each activation type
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct bdn_netport_now {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi bdn_cfg hdr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 enable_port;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 rsrv;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 num_pfs_min_bw;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 num_pfs_max_bw;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 min_bw[E2_FUNC_MAX]; /* 4 PFs in 2 port mode / 2 PFs in 4 port mode */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 max_bw[E2_FUNC_MAX]; /* 4 PFs in 2 port mode / 2 PFs in 4 port mode */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct bdn_netport_on_port_reset {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi bdn_cfg hdr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 link_config;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Same definitions as in PORT_HW_CFG_SPEED_CAPABILITY_D3_MASK */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_LINK_CONFIG_ADVERTISED_SPEED_MASK 0x0000ffff
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_LINK_CONFIG_ADVERTISED_SPEED_SHIFT 0
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Same definitions as PORT_FEATURE_FLOW_CONTROL_MASK */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_LINK_CONFIG_FLOW_CONTROL_MASK 0x00070000
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_LINK_CONFIG_FLOW_CONTROL_SHIFT 16
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_LINK_CONFIG_PFC_ENABLED_MASK 0x00080000
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_LINK_CONFIG_PFC_ENABLED_SHIFT 19
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_LINK_CONFIG_EEE_ENABLED_MASK 0x00100000
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_LINK_CONFIG_EEE_ENABLED_SHIFT 20
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct bdn_netport_next_os_boot {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi bdn_cfg hdr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 num_pfs;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 num_vf_per_pf[E2_FUNC_MAX];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct bdn_netport {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct bdn_netport_now now;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct bdn_netport_on_port_reset on_port_reset; /* On Port Reset */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct bdn_netport_next_os_boot next_os_boot; /* Next OS Boot */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CONNECTION_ID_LEN 16
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct bdn_flexfunc_now {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi bdn_cfg hdr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 connection_id[CONNECTION_ID_LEN];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 fnic_enabled;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 rsrv[3];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct bdn_flexfunc_next_os_boot {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi bdn_cfg hdr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 mac_addr[6];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 func_type;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 boot_mode;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct bdn_flex_func {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct bdn_flexfunc_now now;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct bdn_flexfunc_next_os_boot next_os_boot; /* Next OS Boot */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef PF_NUM_MAX
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define PF_NUM_MAX 8
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct bdn {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 size;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 uuid; // Unique identifer of the slot/chassis of the blade
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct Codec_Info codec_info;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct codec_t codec;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct bdn_netport netport[PORT_MAX * NVM_PATH_MAX];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct bdn_flex_func flexfunc[PF_NUM_MAX];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi //struct bdn_pxe_boot pxe_boot;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi //struct bdn_iscsi_boot iscsi_boot;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi //struct bdn_fcoe_boot fcoe_boot;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 crc;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiunion bdn_image {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct bdn bdn;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t rsrv[0x9000];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Expected BDN size is basically the offset of rsrv within the bdn structure */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_SIZE (sizeof(struct bdn))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_CODEC_INFO() (ASN1_P->bdn_addr + OFFSETOF(struct bdn, codec_info))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_CODEC_DATA() (ASN1_P->bdn_addr + OFFSETOF(struct bdn, codec))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_NETPORT_NOW(papo) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, netport[(papo.path << 1) + papo.port].now))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_NETPORT_ON_PORT_RESET(papo) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, netport[(papo.path << 1) + papo.port].on_port_reset))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_NETPORT_NEXT_OS_BOOT(papo) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, netport[(papo.path << 1) + papo.port].next_os_boot))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_FLEXFUNC_NOW(pf_num) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, flexfunc[pf_num].now))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_FLEXFUNC_NEXT_OS_BOOT(pf_num) (ASN1_P->bdn_addr + OFFSETOF(struct bdn, flexfunc[pf_num].next_os_boot))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BDN_CRC() (ASN1_P->bdn_addr + sizeof(union bdn_image))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*----------------------------------------------------------------------------
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * ------------------------------ Function Prototypes ------------------------
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * ---------------------------------------------------------------------------
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint bd_populate_os_reset_config(void);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint bd_populate_port_reset_config(int path, int port);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* BDN_H */