/* * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. * All rights reserved * www.brocade.com * * bfa_defs_cee.h Interface declarations between host based * BFAL and DCBX/LLDP module in Firmware * * Linux driver for Brocade Fibre Channel Host Bus Adapter. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License (GPL) Version 2 as * published by the Free Software Foundation * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. */ #ifndef __BFA_DEFS_CEE_H__ #define __BFA_DEFS_CEE_H__ #include #include #include #pragma pack(1) #define BFA_CEE_LLDP_MAX_STRING_LEN (128) /* FIXME: this is coming from the protocol spec. Can the host & apps share the protocol .h files ? */ #define BFA_CEE_LLDP_SYS_CAP_OTHER 0x0001 #define BFA_CEE_LLDP_SYS_CAP_REPEATER 0x0002 #define BFA_CEE_LLDP_SYS_CAP_MAC_BRIDGE 0x0004 #define BFA_CEE_LLDP_SYS_CAP_WLAN_AP 0x0008 #define BFA_CEE_LLDP_SYS_CAP_ROUTER 0x0010 #define BFA_CEE_LLDP_SYS_CAP_TELEPHONE 0x0020 #define BFA_CEE_LLDP_SYS_CAP_DOCSIS_CD 0x0040 #define BFA_CEE_LLDP_SYS_CAP_STATION 0x0080 #define BFA_CEE_LLDP_SYS_CAP_CVLAN 0x0100 #define BFA_CEE_LLDP_SYS_CAP_SVLAN 0x0200 #define BFA_CEE_LLDP_SYS_CAP_TPMR 0x0400 /* LLDP string type */ struct bfa_cee_lldp_str_s { u8 sub_type; u8 len; u8 rsvd[2]; u8 value[BFA_CEE_LLDP_MAX_STRING_LEN]; }; /* LLDP parameters */ struct bfa_cee_lldp_cfg_s { struct bfa_cee_lldp_str_s chassis_id; struct bfa_cee_lldp_str_s port_id; struct bfa_cee_lldp_str_s port_desc; struct bfa_cee_lldp_str_s sys_name; struct bfa_cee_lldp_str_s sys_desc; struct bfa_cee_lldp_str_s mgmt_addr; u16 time_to_interval; u16 enabled_system_cap; }; enum bfa_cee_dcbx_version_e { DCBX_PROTOCOL_PRECEE = 1, DCBX_PROTOCOL_CEE = 2, }; enum bfa_cee_lls_e { CEE_LLS_DOWN_NO_TLV = 0, /* LLS is down because the TLV not sent by * the peer */ CEE_LLS_DOWN = 1, /* LLS is down as advertised by the peer */ CEE_LLS_UP = 2, }; /* CEE/DCBX parameters */ struct bfa_cee_dcbx_cfg_s { u8 pgid[8]; u8 pg_percentage[8]; u8 pfc_enabled; /* bitmap of priorties with PFC enabled */ u8 fcoe_user_priority; /* bitmap of priorities used for FcoE * traffic */ u8 dcbx_version; /* operating version:CEE or preCEE */ u8 lls_fcoe; /* FCoE Logical Link Status */ u8 lls_lan; /* LAN Logical Link Status */ u8 rsvd[3]; }; /* CEE status */ /* Making this to tri-state for the benefit of port list command */ enum bfa_cee_status_e { CEE_PHY_DOWN = 0, CEE_PHY_UP = 1, CEE_UP = 2, }; /* CEE Query */ struct bfa_cee_attr_s { u8 cee_status; u8 error_reason; struct bfa_cee_lldp_cfg_s lldp_remote; struct bfa_cee_dcbx_cfg_s dcbx_remote; mac_t src_mac; u8 link_speed; u8 filler[3]; }; /* LLDP/DCBX/CEE Statistics */ struct bfa_cee_lldp_stats_s { u32 frames_transmitted; u32 frames_aged_out; u32 frames_discarded; u32 frames_in_error; u32 frames_rcvd; u32 tlvs_discarded; u32 tlvs_unrecognized; }; struct bfa_cee_dcbx_stats_s { u32 subtlvs_unrecognized; u32 negotiation_failed; u32 remote_cfg_changed; u32 tlvs_received; u32 tlvs_invalid; u32 seqno; u32 ackno; u32 recvd_seqno; u32 recvd_ackno; }; struct bfa_cee_cfg_stats_s { u32 cee_status_down; u32 cee_status_up; u32 cee_hw_cfg_changed; u32 recvd_invalid_cfg; }; struct bfa_cee_stats_s { struct bfa_cee_lldp_stats_s lldp_stats; struct bfa_cee_dcbx_stats_s dcbx_stats; struct bfa_cee_cfg_stats_s cfg_stats; }; #pragma pack() #endif /* __BFA_DEFS_CEE_H__ */