1fd75b91dSJack F Vogel /****************************************************************************** 27282444bSPedro F. Giffuni SPDX-License-Identifier: BSD-3-Clause 3fd75b91dSJack F Vogel 48455e365SKevin Bowling Copyright (c) 2001-2020, Intel Corporation 5fd75b91dSJack F Vogel All rights reserved. 6fd75b91dSJack F Vogel 7fd75b91dSJack F Vogel Redistribution and use in source and binary forms, with or without 8fd75b91dSJack F Vogel modification, are permitted provided that the following conditions are met: 9fd75b91dSJack F Vogel 10fd75b91dSJack F Vogel 1. Redistributions of source code must retain the above copyright notice, 11fd75b91dSJack F Vogel this list of conditions and the following disclaimer. 12fd75b91dSJack F Vogel 13fd75b91dSJack F Vogel 2. Redistributions in binary form must reproduce the above copyright 14fd75b91dSJack F Vogel notice, this list of conditions and the following disclaimer in the 15fd75b91dSJack F Vogel documentation and/or other materials provided with the distribution. 16fd75b91dSJack F Vogel 17fd75b91dSJack F Vogel 3. Neither the name of the Intel Corporation nor the names of its 18fd75b91dSJack F Vogel contributors may be used to endorse or promote products derived from 19fd75b91dSJack F Vogel this software without specific prior written permission. 20fd75b91dSJack F Vogel 21fd75b91dSJack F Vogel THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22fd75b91dSJack F Vogel AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23fd75b91dSJack F Vogel IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24fd75b91dSJack F Vogel ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 25fd75b91dSJack F Vogel LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26fd75b91dSJack F Vogel CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27fd75b91dSJack F Vogel SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28fd75b91dSJack F Vogel INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29fd75b91dSJack F Vogel CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30fd75b91dSJack F Vogel ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31fd75b91dSJack F Vogel POSSIBILITY OF SUCH DAMAGE. 32fd75b91dSJack F Vogel 33fd75b91dSJack F Vogel ******************************************************************************/ 34fd75b91dSJack F Vogel 35fd75b91dSJack F Vogel #ifndef _IXGBE_DCB_H_ 36fd75b91dSJack F Vogel #define _IXGBE_DCB_H_ 37fd75b91dSJack F Vogel 38fd75b91dSJack F Vogel #include "ixgbe_type.h" 39fd75b91dSJack F Vogel 40fd75b91dSJack F Vogel /* DCB defines */ 41fd75b91dSJack F Vogel /* DCB credit calculation defines */ 42fd75b91dSJack F Vogel #define IXGBE_DCB_CREDIT_QUANTUM 64 43*1b80ac6fSRadoslaw Tyl #define IXGBE_DCB_MAX_CREDIT_REFILL 511 /* 0x1FF * 64B = 32704B */ 44fd75b91dSJack F Vogel #define IXGBE_DCB_MAX_TSO_SIZE (32 * 1024) /* Max TSO pkt size in DCB*/ 45*1b80ac6fSRadoslaw Tyl #define IXGBE_DCB_MAX_CREDIT 4095 /* Maximum credit supported: 256KB * 1024 / 64B */ 46fd75b91dSJack F Vogel 47fd75b91dSJack F Vogel /* 513 for 32KB TSO packet */ 48fd75b91dSJack F Vogel #define IXGBE_DCB_MIN_TSO_CREDIT \ 49fd75b91dSJack F Vogel ((IXGBE_DCB_MAX_TSO_SIZE / IXGBE_DCB_CREDIT_QUANTUM) + 1) 50fd75b91dSJack F Vogel 51fd75b91dSJack F Vogel /* DCB configuration defines */ 52fd75b91dSJack F Vogel #define IXGBE_DCB_MAX_USER_PRIORITY 8 53fd75b91dSJack F Vogel #define IXGBE_DCB_MAX_BW_GROUP 8 54fd75b91dSJack F Vogel #define IXGBE_DCB_BW_PERCENT 100 55fd75b91dSJack F Vogel 56fd75b91dSJack F Vogel #define IXGBE_DCB_TX_CONFIG 0 57fd75b91dSJack F Vogel #define IXGBE_DCB_RX_CONFIG 1 58fd75b91dSJack F Vogel 59fd75b91dSJack F Vogel /* DCB capability defines */ 60fd75b91dSJack F Vogel #define IXGBE_DCB_PG_SUPPORT 0x00000001 61fd75b91dSJack F Vogel #define IXGBE_DCB_PFC_SUPPORT 0x00000002 62fd75b91dSJack F Vogel #define IXGBE_DCB_BCN_SUPPORT 0x00000004 63fd75b91dSJack F Vogel #define IXGBE_DCB_UP2TC_SUPPORT 0x00000008 64fd75b91dSJack F Vogel #define IXGBE_DCB_GSP_SUPPORT 0x00000010 65fd75b91dSJack F Vogel 66fd75b91dSJack F Vogel struct ixgbe_dcb_support { 67fd75b91dSJack F Vogel u32 capabilities; /* DCB capabilities */ 68fd75b91dSJack F Vogel 69fd75b91dSJack F Vogel /* Each bit represents a number of TCs configurable in the hw. 70fd75b91dSJack F Vogel * If 8 traffic classes can be configured, the value is 0x80. */ 71fd75b91dSJack F Vogel u8 traffic_classes; 72fd75b91dSJack F Vogel u8 pfc_traffic_classes; 73fd75b91dSJack F Vogel }; 74fd75b91dSJack F Vogel 75fd75b91dSJack F Vogel enum ixgbe_dcb_tsa { 76fd75b91dSJack F Vogel ixgbe_dcb_tsa_ets = 0, 77fd75b91dSJack F Vogel ixgbe_dcb_tsa_group_strict_cee, 78fd75b91dSJack F Vogel ixgbe_dcb_tsa_strict 79fd75b91dSJack F Vogel }; 80fd75b91dSJack F Vogel 81fd75b91dSJack F Vogel /* Traffic class bandwidth allocation per direction */ 82fd75b91dSJack F Vogel struct ixgbe_dcb_tc_path { 83fd75b91dSJack F Vogel u8 bwg_id; /* Bandwidth Group (BWG) ID */ 84fd75b91dSJack F Vogel u8 bwg_percent; /* % of BWG's bandwidth */ 85fd75b91dSJack F Vogel u8 link_percent; /* % of link bandwidth */ 86fd75b91dSJack F Vogel u8 up_to_tc_bitmap; /* User Priority to Traffic Class mapping */ 87fd75b91dSJack F Vogel u16 data_credits_refill; /* Credit refill amount in 64B granularity */ 88fd75b91dSJack F Vogel u16 data_credits_max; /* Max credits for a configured packet buffer 89fd75b91dSJack F Vogel * in 64B granularity.*/ 90fd75b91dSJack F Vogel enum ixgbe_dcb_tsa tsa; /* Link or Group Strict Priority */ 91fd75b91dSJack F Vogel }; 92fd75b91dSJack F Vogel 93fd75b91dSJack F Vogel enum ixgbe_dcb_pfc { 94fd75b91dSJack F Vogel ixgbe_dcb_pfc_disabled = 0, 95fd75b91dSJack F Vogel ixgbe_dcb_pfc_enabled, 96fd75b91dSJack F Vogel ixgbe_dcb_pfc_enabled_txonly, 97fd75b91dSJack F Vogel ixgbe_dcb_pfc_enabled_rxonly 98fd75b91dSJack F Vogel }; 99fd75b91dSJack F Vogel 100fd75b91dSJack F Vogel /* Traffic class configuration */ 101fd75b91dSJack F Vogel struct ixgbe_dcb_tc_config { 102fd75b91dSJack F Vogel struct ixgbe_dcb_tc_path path[2]; /* One each for Tx/Rx */ 103fd75b91dSJack F Vogel enum ixgbe_dcb_pfc pfc; /* Class based flow control setting */ 104fd75b91dSJack F Vogel 105fd75b91dSJack F Vogel u16 desc_credits_max; /* For Tx Descriptor arbitration */ 106fd75b91dSJack F Vogel u8 tc; /* Traffic class (TC) */ 107fd75b91dSJack F Vogel }; 108fd75b91dSJack F Vogel 109fd75b91dSJack F Vogel enum ixgbe_dcb_pba { 110fd75b91dSJack F Vogel /* PBA[0-7] each use 64KB FIFO */ 111fd75b91dSJack F Vogel ixgbe_dcb_pba_equal = PBA_STRATEGY_EQUAL, 112fd75b91dSJack F Vogel /* PBA[0-3] each use 80KB, PBA[4-7] each use 48KB */ 113fd75b91dSJack F Vogel ixgbe_dcb_pba_80_48 = PBA_STRATEGY_WEIGHTED 114fd75b91dSJack F Vogel }; 115fd75b91dSJack F Vogel 116fd75b91dSJack F Vogel struct ixgbe_dcb_num_tcs { 117fd75b91dSJack F Vogel u8 pg_tcs; 118fd75b91dSJack F Vogel u8 pfc_tcs; 119fd75b91dSJack F Vogel }; 120fd75b91dSJack F Vogel 121fd75b91dSJack F Vogel struct ixgbe_dcb_config { 122fd75b91dSJack F Vogel struct ixgbe_dcb_tc_config tc_config[IXGBE_DCB_MAX_TRAFFIC_CLASS]; 123fd75b91dSJack F Vogel struct ixgbe_dcb_support support; 124fd75b91dSJack F Vogel struct ixgbe_dcb_num_tcs num_tcs; 125fd75b91dSJack F Vogel u8 bw_percentage[2][IXGBE_DCB_MAX_BW_GROUP]; /* One each for Tx/Rx */ 126fd75b91dSJack F Vogel bool pfc_mode_enable; 127fd75b91dSJack F Vogel bool round_robin_enable; 128fd75b91dSJack F Vogel 129fd75b91dSJack F Vogel enum ixgbe_dcb_pba rx_pba_cfg; 130fd75b91dSJack F Vogel 131fd75b91dSJack F Vogel u32 dcb_cfg_version; /* Not used...OS-specific? */ 132fd75b91dSJack F Vogel u32 link_speed; /* For bandwidth allocation validation purpose */ 133fd75b91dSJack F Vogel bool vt_mode; 134fd75b91dSJack F Vogel }; 135fd75b91dSJack F Vogel 136fd75b91dSJack F Vogel /* DCB driver APIs */ 137fd75b91dSJack F Vogel 138fd75b91dSJack F Vogel /* DCB rule checking */ 139fd75b91dSJack F Vogel s32 ixgbe_dcb_check_config_cee(struct ixgbe_dcb_config *); 140fd75b91dSJack F Vogel 141fd75b91dSJack F Vogel /* DCB credits calculation */ 142fd75b91dSJack F Vogel s32 ixgbe_dcb_calculate_tc_credits(u8 *, u16 *, u16 *, int); 143fd75b91dSJack F Vogel s32 ixgbe_dcb_calculate_tc_credits_cee(struct ixgbe_hw *, 144fd75b91dSJack F Vogel struct ixgbe_dcb_config *, u32, u8); 145fd75b91dSJack F Vogel 146fd75b91dSJack F Vogel /* DCB PFC */ 147fd75b91dSJack F Vogel s32 ixgbe_dcb_config_pfc(struct ixgbe_hw *, u8, u8 *); 148fd75b91dSJack F Vogel s32 ixgbe_dcb_config_pfc_cee(struct ixgbe_hw *, struct ixgbe_dcb_config *); 149fd75b91dSJack F Vogel 150fd75b91dSJack F Vogel /* DCB stats */ 151fd75b91dSJack F Vogel s32 ixgbe_dcb_config_tc_stats(struct ixgbe_hw *); 152fd75b91dSJack F Vogel s32 ixgbe_dcb_get_tc_stats(struct ixgbe_hw *, struct ixgbe_hw_stats *, u8); 153fd75b91dSJack F Vogel s32 ixgbe_dcb_get_pfc_stats(struct ixgbe_hw *, struct ixgbe_hw_stats *, u8); 154fd75b91dSJack F Vogel 155fd75b91dSJack F Vogel /* DCB config arbiters */ 156fd75b91dSJack F Vogel s32 ixgbe_dcb_config_tx_desc_arbiter_cee(struct ixgbe_hw *, 157fd75b91dSJack F Vogel struct ixgbe_dcb_config *); 158fd75b91dSJack F Vogel s32 ixgbe_dcb_config_tx_data_arbiter_cee(struct ixgbe_hw *, 159fd75b91dSJack F Vogel struct ixgbe_dcb_config *); 160fd75b91dSJack F Vogel s32 ixgbe_dcb_config_rx_arbiter_cee(struct ixgbe_hw *, 161fd75b91dSJack F Vogel struct ixgbe_dcb_config *); 162fd75b91dSJack F Vogel 163fd75b91dSJack F Vogel /* DCB unpack routines */ 164fd75b91dSJack F Vogel void ixgbe_dcb_unpack_pfc_cee(struct ixgbe_dcb_config *, u8 *, u8 *); 165fd75b91dSJack F Vogel void ixgbe_dcb_unpack_refill_cee(struct ixgbe_dcb_config *, int, u16 *); 166fd75b91dSJack F Vogel void ixgbe_dcb_unpack_max_cee(struct ixgbe_dcb_config *, u16 *); 167fd75b91dSJack F Vogel void ixgbe_dcb_unpack_bwgid_cee(struct ixgbe_dcb_config *, int, u8 *); 168fd75b91dSJack F Vogel void ixgbe_dcb_unpack_tsa_cee(struct ixgbe_dcb_config *, int, u8 *); 169fd75b91dSJack F Vogel void ixgbe_dcb_unpack_map_cee(struct ixgbe_dcb_config *, int, u8 *); 170fd75b91dSJack F Vogel u8 ixgbe_dcb_get_tc_from_up(struct ixgbe_dcb_config *, int, u8); 171fd75b91dSJack F Vogel 172fd75b91dSJack F Vogel /* DCB initialization */ 173fd75b91dSJack F Vogel s32 ixgbe_dcb_hw_config(struct ixgbe_hw *, u16 *, u16 *, u8 *, u8 *, u8 *); 174fd75b91dSJack F Vogel s32 ixgbe_dcb_hw_config_cee(struct ixgbe_hw *, struct ixgbe_dcb_config *); 175fd75b91dSJack F Vogel #endif /* _IXGBE_DCB_H_ */ 176