/* Copyright (c) 2017,2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and * only 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. * * This file contain content copied from Synopsis driver, * provided under the license below */ /* ========================================================================= * The Synopsys DWC ETHER QOS Software Driver and documentation (hereinafter * "Software") is an unsupported proprietary work of Synopsys, Inc. unless * otherwise expressly agreed to in writing between Synopsys and you. * * The Software IS NOT an item of Licensed Software or Licensed Product under * any End User Software License Agreement or Agreement for Licensed Product * with Synopsys or any supplement thereto. Permission is hereby granted, * free of charge, to any person obtaining a copy of this software annotated * with this license and the Software, to deal in the Software without * restriction, including without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell copies of the Software, * and to permit persons to whom the Software is furnished to do so, subject * to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * ========================================================================= */ #ifndef __DWC_ETH_QOS_YAPPHDR_H__ #define __DWC_ETH_QOS_YAPPHDR_H__ #define DWC_ETH_QOS_MAX_TX_QUEUE_CNT 8 #define DWC_ETH_QOS_MAX_RX_QUEUE_CNT 8 //#define CONFIG_PPS_OUTPUT // for PPS Output /* Private IOCTL for handling device specific task */ #define DWC_ETH_QOS_PRV_IOCTL SIOCDEVPRIVATE #define DWC_ETH_QOS_PRV_IOCTL_IPA SIOCDEVPRIVATE+1 /* IOCTL cmd to eMAC to register the RX/TX properties with VLAN hdr*/ enum{ DWC_ETH_QOS_IPA_VLAN_DISABLE_CMD= 0, DWC_ETH_QOS_IPA_VLAN_ENABLE_CMD=1, }; #define DWC_ETH_QOS_POWERUP_MAGIC_CMD 1 #define DWC_ETH_QOS_POWERDOWN_MAGIC_CMD 2 #define DWC_ETH_QOS_POWERUP_REMOTE_WAKEUP_CMD 3 #define DWC_ETH_QOS_POWERDOWN_REMOTE_WAKEUP_CMD 4 /* for TX and RX threshold configures */ #define DWC_ETH_QOS_RX_THRESHOLD_CMD 5 #define DWC_ETH_QOS_TX_THRESHOLD_CMD 6 /* for TX and RX Store and Forward mode configures */ #define DWC_ETH_QOS_RSF_CMD 7 #define DWC_ETH_QOS_TSF_CMD 8 /* for TX DMA Operate on Second Frame mode configures */ #define DWC_ETH_QOS_OSF_CMD 9 /* for TX and RX PBL configures */ #define DWC_ETH_QOS_TX_PBL_CMD 10 #define DWC_ETH_QOS_RX_PBL_CMD 11 /* INCR and INCRX mode */ #define DWC_ETH_QOS_INCR_INCRX_CMD 12 /* for MAC Double VLAN Processing config */ #define DWC_ETH_QOS_DVLAN_TX_PROCESSING_CMD 13 #define DWC_ETH_QOS_DVLAN_RX_PROCESSING_CMD 14 #define DWC_ETH_QOS_SVLAN_CMD 15 /* Manju: Remove the below defines */ /* RX/TX VLAN */ /* #define DWC_ETH_QOS_RX_OUTER_VLAN_STRIPPING_CMD 13 */ /* #define DWC_ETH_QOS_RX_INNER_VLAN_STRIPPING_CMD 14 */ /* #define DWC_ETH_QOS_TX_VLAN_DESC_CMD 15 */ /* #define DWC_ETH_QOS_TX_VLAN_REG_CMD 16 */ /* SA on TX */ #define DWC_ETH_QOS_SA0_DESC_CMD 17 #define DWC_ETH_QOS_SA1_DESC_CMD 18 #define DWC_ETH_QOS_SA0_REG_CMD 19 #define DWC_ETH_QOS_SA1_REG_CMD 20 /* CONTEX desc setup control */ #define DWC_ETH_QOS_SETUP_CONTEXT_DESCRIPTOR 21 /* Packet generation */ #define DWC_ETH_QOS_PG_TEST 22 /* TX/RX channel/queue count */ #define DWC_ETH_QOS_GET_TX_QCNT 23 #define DWC_ETH_QOS_GET_RX_QCNT 24 /* Line speed */ #define DWC_ETH_QOS_GET_CONNECTED_SPEED 25 /* DCB/AVB algorithm */ #define DWC_ETH_QOS_DCB_ALGORITHM 26 #define DWC_ETH_QOS_AVB_ALGORITHM 27 /* RX split header */ #define DWC_ETH_QOS_RX_SPLIT_HDR_CMD 28 /* L3/L4 filter */ #define DWC_ETH_QOS_L3_L4_FILTER_CMD 29 /* IPv4/6 and TCP/UDP filtering */ #define DWC_ETH_QOS_IPV4_FILTERING_CMD 30 #define DWC_ETH_QOS_IPV6_FILTERING_CMD 31 #define DWC_ETH_QOS_UDP_FILTERING_CMD 32 #define DWC_ETH_QOS_TCP_FILTERING_CMD 33 /* VLAN filtering */ #define DWC_ETH_QOS_VLAN_FILTERING_CMD 34 /* L2 DA filtering */ #define DWC_ETH_QOS_L2_DA_FILTERING_CMD 35 /* ARP Offload */ #define DWC_ETH_QOS_ARP_OFFLOAD_CMD 36 /* for AXI PBL configures */ #define DWC_ETH_QOS_AXI_PBL_CMD 37 /* for AXI Write Outstanding Request Limit configures */ #define DWC_ETH_QOS_AXI_WORL_CMD 38 /* for AXI Read Outstanding Request Limit configures */ #define DWC_ETH_QOS_AXI_RORL_CMD 39 /* for MAC LOOPBACK configuration */ #define DWC_ETH_QOS_MAC_LOOPBACK_MODE_CMD 40 /* PFC(Priority Based Flow Control) mode */ #define DWC_ETH_QOS_PFC_CMD 41 /* for PTP OFFLOADING configuration */ #define DWC_ETH_QOS_PTPOFFLOADING_CMD 42 /* To configure PPS output */ #ifdef CONFIG_PPS_OUTPUT #define DWC_ETH_QOS_CONFIG_PTPCLK_CMD 43 #define DWC_ETH_QOS_CONFIG_PPSOUT_CMD 44 #endif #define DWC_ETH_QOS_RWK_FILTER_LENGTH 8 /* List of command errors driver can set */ #define DWC_ETH_QOS_NO_HW_SUPPORT -1 #define DWC_ETH_QOS_CONFIG_FAIL -3 #define DWC_ETH_QOS_CONFIG_SUCCESS 0 /* RX THRESHOLD operations */ #define DWC_ETH_QOS_RX_THRESHOLD_32 0x1 #define DWC_ETH_QOS_RX_THRESHOLD_64 0x0 #define DWC_ETH_QOS_RX_THRESHOLD_96 0x2 #define DWC_ETH_QOS_RX_THRESHOLD_128 0x3 /* TX THRESHOLD operations */ #define DWC_ETH_QOS_TX_THRESHOLD_32 0x1 #define DWC_ETH_QOS_TX_THRESHOLD_64 0x0 #define DWC_ETH_QOS_TX_THRESHOLD_96 0x2 #define DWC_ETH_QOS_TX_THRESHOLD_128 0x3 #define DWC_ETH_QOS_TX_THRESHOLD_192 0x4 #define DWC_ETH_QOS_TX_THRESHOLD_256 0x5 #define DWC_ETH_QOS_TX_THRESHOLD_384 0x6 #define DWC_ETH_QOS_TX_THRESHOLD_512 0x7 /* TX and RX Store and Forward Mode operations */ #define DWC_ETH_QOS_RSF_DISABLE 0x0 #define DWC_ETH_QOS_RSF_ENABLE 0x1 #define DWC_ETH_QOS_TSF_DISABLE 0x0 #define DWC_ETH_QOS_TSF_ENABLE 0x1 /* TX DMA Operate on Second Frame operations */ #define DWC_ETH_QOS_OSF_DISABLE 0x0 #define DWC_ETH_QOS_OSF_ENABLE 0x1 /* INCR and INCRX mode */ #define DWC_ETH_QOS_INCR_ENABLE 0x1 #define DWC_ETH_QOS_INCRX_ENABLE 0x0 /* TX and RX PBL operations */ #define DWC_ETH_QOS_PBL_1 1 #define DWC_ETH_QOS_PBL_2 2 #define DWC_ETH_QOS_PBL_4 4 #define DWC_ETH_QOS_PBL_8 8 #define DWC_ETH_QOS_PBL_16 16 #define DWC_ETH_QOS_PBL_32 32 #define DWC_ETH_QOS_PBL_64 64 /* 8 x 8 */ #define DWC_ETH_QOS_PBL_128 128 /* 8 x 16 */ #define DWC_ETH_QOS_PBL_256 256 /* 8 x 32 */ /* AXI operations */ #define DWC_ETH_QOS_AXI_PBL_4 0x2 #define DWC_ETH_QOS_AXI_PBL_8 0x6 #define DWC_ETH_QOS_AXI_PBL_16 0xE #define DWC_ETH_QOS_AXI_PBL_32 0x1E #define DWC_ETH_QOS_AXI_PBL_64 0x3E #define DWC_ETH_QOS_AXI_PBL_128 0x7E #define DWC_ETH_QOS_AXI_PBL_256 0xFE #define DWC_ETH_QOS_MAX_AXI_WORL 31 #define DWC_ETH_QOS_MAX_AXI_RORL 31 /* RX VLAN operations */ /* Do not strip VLAN tag from received pkt */ #define DWC_ETH_QOS_RX_NO_VLAN_STRIP 0x0 /* Strip VLAN tag if received pkt pass VLAN filter */ #define DWC_ETH_QOS_RX_VLAN_STRIP_IF_FILTER_PASS 0x1 /* Strip VLAN tag if received pkt fial VLAN filter */ #define DWC_ETH_QOS_RX_VLAN_STRIP_IF_FILTER_FAIL 0x2 /* Strip VALN tag always from received pkt */ #define DWC_ETH_QOS_RX_VLAN_STRIP_ALWAYS 0x3 /* TX VLAN operations */ /* Do not add a VLAN tag dring pkt transmission */ #define DWC_ETH_QOS_TX_VLAN_TAG_NONE 0x0 /* Remove the VLAN tag from the pkt before transmission */ #define DWC_ETH_QOS_TX_VLAN_TAG_DELETE 0x1 /* Insert the VLAN tag into pkt to be transmitted */ #define DWC_ETH_QOS_TX_VLAN_TAG_INSERT 0x2 /* Replace the VLAN tag into pkt to be transmitted */ #define DWC_ETH_QOS_TX_VLAN_TAG_REPLACE 0x3 /* RX split header operations */ #define DWC_ETH_QOS_RX_SPLIT_HDR_DISABLE 0x0 #define DWC_ETH_QOS_RX_SPLIT_HDR_ENABLE 0x1 /* L3/L4 filter operations */ #define DWC_ETH_QOS_L3_L4_FILTER_DISABLE 0x0 #define DWC_ETH_QOS_L3_L4_FILTER_ENABLE 0x1 /* Loopback mode */ #define DWC_ETH_QOS_MAC_LOOPBACK_DISABLE 0x0 #define DWC_ETH_QOS_MAC_LOOPBACK_ENABLE 0x1 /* PFC(Priority Based Flow Control) mode */ #define DWC_ETH_QOS_PFC_DISABLE 0x0 #define DWC_ETH_QOS_PFC_ENABLE 0x1 #define DWC_ETH_QOS_MAC0REG 0 #define DWC_ETH_QOS_MAC1REG 1 #define DWC_ETH_QOS_SA0_NONE ((DWC_ETH_QOS_MAC0REG << 2) | 0) /* Do not include the SA */ #define DWC_ETH_QOS_SA0_DESC_INSERT ((DWC_ETH_QOS_MAC0REG << 2) | 1) /* Include/Insert the SA with value given in MAC Addr 0 Reg */ #define DWC_ETH_QOS_SA0_DESC_REPLACE ((DWC_ETH_QOS_MAC0REG << 2) | 2) /* Replace the SA with the value given in MAC Addr 0 Reg */ #define DWC_ETH_QOS_SA0_REG_INSERT ((DWC_ETH_QOS_MAC0REG << 2) | 2) /* Include/Insert the SA with value given in MAC Addr 0 Reg */ #define DWC_ETH_QOS_SA0_REG_REPLACE ((DWC_ETH_QOS_MAC0REG << 2) | 3) /* Replace the SA with the value given in MAC Addr 0 Reg */ #define DWC_ETH_QOS_SA1_NONE ((DWC_ETH_QOS_MAC1REG << 2) | 0) /* Do not include the SA */ #define DWC_ETH_QOS_SA1_DESC_INSERT ((DWC_ETH_QOS_MAC1REG << 2) | 1) /* Include/Insert the SA with value given in MAC Addr 1 Reg */ #define DWC_ETH_QOS_SA1_DESC_REPLACE ((DWC_ETH_QOS_MAC1REG << 2) | 2) /* Replace the SA with the value given in MAC Addr 1 Reg */ #define DWC_ETH_QOS_SA1_REG_INSERT ((DWC_ETH_QOS_MAC1REG << 2) | 2) /* Include/Insert the SA with value given in MAC Addr 1 Reg */ #define DWC_ETH_QOS_SA1_REG_REPLACE ((DWC_ETH_QOS_MAC1REG << 2) | 3) /* Replace the SA with the value given in MAC Addr 1 Reg */ #define DWC_ETH_QOS_MAX_WFQ_WEIGHT 0X7FFF /* value for bandwidth calculation */ #define DWC_ETH_QOS_MAX_INT_FRAME_SIZE (1024 * 16) typedef enum { EDWC_ETH_QOS_DMA_TX_FP = 0, EDWC_ETH_QOS_DMA_TX_WSP = 1, EDWC_ETH_QOS_DMA_TX_WRR = 2, } e_DWC_ETH_QOS_dma_tx_arb_algo; typedef enum { EDWC_ETH_QOS_DCB_WRR = 0, EDWC_ETH_QOS_DCB_WFQ = 1, EDWC_ETH_QOS_DCB_DWRR = 2, EDWC_ETH_QOS_DCB_SP = 3, } e_DWC_ETH_QOS_dcb_algorithm; typedef enum { EDWC_ETH_QOS_AVB_SP = 0, EDWC_ETH_QOS_AVB_CBS = 1, } e_DWC_ETH_QOS_avb_algorithm; typedef enum { EDWC_ETH_QOS_QDISABLED = 0x0, EDWC_ETH_QOS_QAVB, EDWC_ETH_QOS_QDCB, EDWC_ETH_QOS_QGENERIC } EDWC_ETH_QOS_QUEUE_OPERATING_MODE; /* common data structure between driver and application for * sharing info through ioctl * */ struct ifr_data_struct { unsigned int flags; unsigned int qinx; /* dma channel no to be configured */ unsigned int cmd; unsigned int context_setup; unsigned int connected_speed; unsigned int rwk_filter_values[DWC_ETH_QOS_RWK_FILTER_LENGTH]; unsigned int rwk_filter_length; int command_error; int test_done; void *ptr; }; struct ifr_data_struct_ipa { unsigned int chInx_tx_ipa; unsigned int chInx_rx_ipa; unsigned int cmd; unsigned short vlan_id; }; struct DWC_ETH_QOS_dcb_algorithm { unsigned int qinx; unsigned int algorithm; unsigned int weight; EDWC_ETH_QOS_QUEUE_OPERATING_MODE op_mode; }; struct DWC_ETH_QOS_avb_algorithm_params { unsigned int idle_slope; unsigned int send_slope; unsigned int hi_credit; unsigned int low_credit; }; struct DWC_ETH_QOS_avb_algorithm { unsigned int qinx; unsigned int algorithm; unsigned int cc; struct DWC_ETH_QOS_avb_algorithm_params speed100params; struct DWC_ETH_QOS_avb_algorithm_params speed1000params; EDWC_ETH_QOS_QUEUE_OPERATING_MODE op_mode; }; struct DWC_ETH_QOS_l3_l4_filter { /* 0, 1,2,3,4,5,6 or 7*/ unsigned int filter_no; /* 0 - disable and 1 - enable */ int filter_enb_dis; /* 0 - src addr/port and 1- dst addr/port match */ int src_dst_addr_match; /* 0 - perfect and 1 - inverse match filtering */ int perfect_inverse_match; /* To hold source/destination IPv4 addresses */ unsigned char ip4_addr[4]; /* holds single IPv6 addresses */ unsigned short ip6_addr[8]; /* TCP/UDP src/dst port number */ unsigned short port_no; }; struct DWC_ETH_QOS_vlan_filter { /* 0 - disable and 1 - enable */ int filter_enb_dis; /* 0 - perfect and 1 - hash filtering */ int perfect_hash; /* 0 - perfect and 1 - inverse matching */ int perfect_inverse_match; }; struct DWC_ETH_QOS_l2_da_filter { /* 0 - perfect and 1 - hash filtering */ int perfect_hash; /* 0 - perfect and 1 - inverse matching */ int perfect_inverse_match; }; struct DWC_ETH_QOS_arp_offload { unsigned char ip_addr[4]; }; #define DWC_ETH_QOS_VIA_REG 0 #define DWC_ETH_QOS_VIA_DESC 1 /* for MAC Double VLAN Processing config */ #define DWC_ETH_QOS_DVLAN_OUTER (1) #define DWC_ETH_QOS_DVLAN_INNER (1 << 1) #define DWC_ETH_QOS_DVLAN_BOTH (DWC_ETH_QOS_DVLAN_OUTER | DWC_ETH_QOS_DVLAN_INNER) #define DWC_ETH_QOS_DVLAN_NONE 0 #define DWC_ETH_QOS_DVLAN_DELETE 1 #define DWC_ETH_QOS_DVLAN_INSERT 2 #define DWC_ETH_QOS_DVLAN_REPLACE 3 #define DWC_ETH_QOS_DVLAN_DISABLE 0 #define DWC_ETH_QOS_DVLAN_ENABLE 1 struct DWC_ETH_QOS_config_dvlan { int inner_vlan_tag; int outer_vlan_tag; /* op_type will be * 0/1/2/3 for none/delet/insert/replace respectively * */ int op_type; /* in_out will be * 1/2/3 for outer/inner/both respectively. * */ int in_out; /* 0 for via registers and 1 for via descriptor */ int via_reg_or_desc; }; /* for PTP offloading configuration */ #define DWC_ETH_QOS_PTP_OFFLOADING_DISABLE 0 #define DWC_ETH_QOS_PTP_OFFLOADING_ENABLE 1 #define DWC_ETH_QOS_PTP_ORDINARY_SLAVE 1 #define DWC_ETH_QOS_PTP_ORDINARY_MASTER 2 #define DWC_ETH_QOS_PTP_TRASPARENT_SLAVE 3 #define DWC_ETH_QOS_PTP_TRASPARENT_MASTER 4 #define DWC_ETH_QOS_PTP_PEER_TO_PEER_TRANSPARENT 5 struct DWC_ETH_QOS_config_ptpoffloading { int en_dis; int mode; int domain_num; int mc_uc; }; #ifdef CONFIG_PPS_OUTPUT struct ETH_PPS_Config { unsigned int ptpclk_freq; unsigned int ppsout_freq; unsigned int ppsout_ch; unsigned int ppsout_duty; unsigned int ppsout_start; }; #endif #ifdef DWC_ETH_QOS_CONFIG_PGTEST /* uncomment below macro to enable application * to record all run reports to file */ /* #define PGTEST_LOGFILE */ /* TX DMA CHANNEL Weights */ #define DWC_ETH_QOS_TX_CH_WEIGHT1 0x0 #define DWC_ETH_QOS_TX_CH_WEIGHT2 0x1 #define DWC_ETH_QOS_TX_CH_WEIGHT3 0x2 #define DWC_ETH_QOS_TX_CH_WEIGHT4 0x3 #define DWC_ETH_QOS_TX_CH_WEIGHT5 0x4 #define DWC_ETH_QOS_TX_CH_WEIGHT6 0x5 #define DWC_ETH_QOS_TX_CH_WEIGHT7 0x6 #define DWC_ETH_QOS_TX_CH_WEIGHT8 0x7 /* PG test sub commands macro's */ #define DWC_ETH_QOS_PG_SET_CONFIG 0x1 #define DWC_ETH_QOS_PG_CONFIG_HW 0x2 #define DWC_ETH_QOS_PG_RUN_TEST 0x3 #define DWC_ETH_QOS_PG_GET_RESULT 0x4 #define DWC_ETH_QOS_PG_TEST_DONE 0x5 /* DMA channel bandwidth allocation parameters */ struct DWC_ETH_QOS_pg_user_ch_input { unsigned char ch_arb_weight; /* Channel weights(1/2/3/4/5/6/7/8) for arbitration */ unsigned int ch_fr_size; /* Channel Frame size */ unsigned char ch_bw_alloc; /* The percentage bandwidth allocation for ch */ unsigned char ch_use_slot_no_check; /* Should Ch use slot number checking ? */ unsigned char ch_use_adv_slot_no_check; unsigned char ch_slot_count_to_use; /* How many slot used to report pg bits per slot value */ unsigned char ch_use_credit_shape; /* Should Ch use Credid shape algorithm for traffic shaping ? */ unsigned char CH_CREDITCONTROL; /* Sould Ch use Credit Control algorithm for traffic shaping ? */ unsigned char ch_tx_desc_slot_no_start; unsigned char ch_tx_desc_slot_no_skip; unsigned char ch_operating_mode; unsigned long CH_AVGBITS; unsigned long CH_AVGBITS_INTERRUPT_COUNT; unsigned char ch_avb_algorithm; unsigned char ch_debug_mode; /* enable/disable debug mode */ unsigned int ch_max_tx_frame_cnt; /* maximum pkts to be sent on this channel, can be used for debug purpose */ }; struct DWC_ETH_QOS_pg_user_input { unsigned char duration_of_exp; /* enable bits for DMA. bit0=>ch0, bit1=>ch1, bit2=>ch2 */ unsigned char dma_ch_en; unsigned char ch_tx_rx_arb_scheme; /* Should Ch use Weighted RR policy with Rx:Tx/Tx:Rx or Fixed Priority */ unsigned char ch_use_tx_high_prio; /* Should Ch Tx have High priority over Rx */ unsigned char ch_tx_rx_prio_ratio; /* For RR what is the ratio between Tx:Rx/Rx:Tx */ unsigned char dma_tx_arb_algo; /* Refer DMA Mode register TAA field */ unsigned char queue_dcb_algorithm; unsigned char mac_lb_mode; /* 0 => No MAC Loopback; 1 => MAC Loopback On */ unsigned int speed_100M_1G; /* 0 => No MAC Loopback; 1 => MAC Loopback On */ struct DWC_ETH_QOS_pg_user_ch_input ch_input[DWC_ETH_QOS_MAX_TX_QUEUE_CNT]; }; #define copy_pg_ch_input_members(to, from) do { \ (to)->interrupt_prints = (from)->interrupt_prints; \ (to)->tx_interrupts = (from)->tx_interrupts; \ (to)->ch_arb_weight = (from)->ch_arb_weight; \ (to)->ch_queue_weight = (from)->ch_queue_weight; \ (to)->ch_bw = (from)->ch_bw; \ (to)->ch_frame_size = (from)->ch_frame_size; \ (to)->CH_ENABLESLOTCHECK = (from)->CH_ENABLESLOTCHECK; \ (to)->CH_ENABLEADVSLOTCHECK = (from)->CH_ENABLEADVSLOTCHECK; \ (to)->ch_avb_algorithm = (from)->ch_avb_algorithm; \ (to)->CH_SLOTCOUNT = (from)->CH_SLOTCOUNT; \ (to)->CH_AVGBITS = (from)->CH_AVGBITS; \ (to)->CH_AVGBITS_INTERRUPT_COUNT = (from)->CH_AVGBITS_INTERRUPT_COUNT; \ (to)->CH_CREDITCONTROL = (from)->CH_CREDITCONTROL; \ (to)->ch_tx_desc_slot_no_start = (from)->ch_tx_desc_slot_no_start; \ (to)->ch_tx_desc_slot_no_skip = (from)->ch_tx_desc_slot_no_skip; \ (to)->CH_SENDSLOPE = (from)->CH_SENDSLOPE; \ (to)->CH_IDLESLOPE = (from)->CH_IDLESLOPE; \ (to)->CH_HICREDIT = (from)->CH_HICREDIT; \ (to)->CH_LOCREDIT = (from)->CH_LOCREDIT; \ (to)->CH_FRAMECOUNTTX = (from)->CH_FRAMECOUNTTX; \ (to)->CH_FRAMECOUNTRX = (from)->CH_FRAMECOUNTRX; \ (to)->ch_operating_mode = (from)->ch_operating_mode; \ (to)->ch_debug_mode = (from)->ch_debug_mode;\ (to)->ch_max_tx_frame_cnt = (from)->ch_max_tx_frame_cnt;\ } while (0) struct DWC_ETH_QOS_pg_ch_input { unsigned int interrupt_prints; unsigned int tx_interrupts; unsigned char ch_arb_weight; unsigned int ch_queue_weight; unsigned char ch_bw; unsigned int ch_frame_size; unsigned char CH_ENABLESLOTCHECK; /* Enable checking of slot numbers programmed in the Tx Desc */ unsigned char CH_ENABLEADVSLOTCHECK; /* When Set Data fetched for current slot and for next 2 slots in advance When reset data fetched for current slot and in advance for next slot*/ unsigned char ch_avb_algorithm; unsigned char CH_SLOTCOUNT; /* Over which transmiteed bits per slot needs to be computed (Only for Credit based shaping) */ unsigned long CH_AVGBITS; unsigned long CH_AVGBITS_INTERRUPT_COUNT; unsigned char CH_CREDITCONTROL; /* Will be zero (Not used) */ unsigned char ch_tx_desc_slot_no_start; unsigned char ch_tx_desc_slot_no_skip; unsigned int CH_SENDSLOPE; unsigned int CH_IDLESLOPE; unsigned int CH_HICREDIT; unsigned int CH_LOCREDIT; unsigned long CH_FRAMECOUNTTX; /* No of Frames Transmitted on Channel 1 */ unsigned long CH_FRAMECOUNTRX; /* No of Frames Received on Channel 1 */ unsigned char ch_operating_mode; unsigned char ch_debug_mode; /* enable/disable debug mode */ unsigned int ch_max_tx_frame_cnt; /* maximum pkts to be sent on this channel, can be used for debug purpose */ unsigned int ch_desc_prepare; /* max packets which will be reprepared in Tx-interrupt do not copy contents to app-copy, only driver should use this variable*/ }; #define COPY_PGSTRUCT_MEMBERS(to, from) do { \ (to)->CH_SELMASK = (from)->CH_SELMASK; \ (to)->DURATIONOFEXP = (from)->DURATIONOFEXP; \ (to)->PRIOTAGFORAV = (from)->PRIOTAGFORAV; \ (to)->queue_dcb_algorithm = (from)->queue_dcb_algorithm; \ (to)->ch_tx_rx_arb_scheme = (from)->ch_tx_rx_arb_scheme; \ (to)->ch_use_tx_high_prio = (from)->ch_use_tx_high_prio; \ (to)->ch_tx_rx_prio_ratio = (from)->ch_tx_rx_prio_ratio; \ (to)->dma_tx_arb_algo = (from)->dma_tx_arb_algo; \ (to)->mac_lb_mode = (from)->mac_lb_mode; \ } while (0) struct DWC_ETH_QOS_PGSTRUCT { /* This gives which DMA channel is enabled and which is disabled * Bit0 for Ch0 * Bit1 for Ch1 * Bit2 for Ch2 and so on * Bit7 for Ch7 * */ unsigned char CH_SELMASK; /* Duration for which experiment should be conducted in minutes - Default 2 Minutes */ unsigned char DURATIONOFEXP; /* Used when more than One channel enabled in Rx path (Not Used) * for only CH1 Enabled: * Frames sith Priority > Value programmed, frames sent to CH1 * Frames with priority < Value programmed are sent to CH0 * * For both CH1 and CH2 Enabled: * Frames sith Priority > Value programmed, frames sent to CH2 * Frames with priority < Value programmed are sent to CH * */ unsigned char PRIOTAGFORAV; unsigned char queue_dcb_algorithm; unsigned char ch_tx_rx_arb_scheme; /* Should Ch use Weighted RR policy with Rx:Tx/Tx:Rx or Fixed Priority */ unsigned char ch_use_tx_high_prio; /* Should Ch Tx have High priority over Rx */ unsigned char ch_tx_rx_prio_ratio; /* For RR what is the ratio between Tx:Rx/Rx:Tx */ unsigned char dma_tx_arb_algo; /* Refer DMA Mode register TAA field */ unsigned char mac_lb_mode; /* 0 => No MAC Loopback; 1 => MAC Loopback On */ unsigned int speed_100M_1G; struct DWC_ETH_QOS_pg_ch_input pg_ch_input[DWC_ETH_QOS_MAX_TX_QUEUE_CNT]; unsigned char channel_running[DWC_ETH_QOS_MAX_TX_QUEUE_CNT]; }; #endif /* end of DWC_ETH_QOS_CONFIG_PGTEST */ #endif