1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* Atlantic Network Driver 3 * Copyright (C) 2020 Marvell International Ltd. 4 */ 5 6 #ifndef HW_ATL2_INTERNAL_H 7 #define HW_ATL2_INTERNAL_H 8 9 #include "hw_atl2_utils.h" 10 11 #define HW_ATL2_MTU_JUMBO 16352U 12 #define HW_ATL2_MTU 1514U 13 14 #define HW_ATL2_TX_RINGS 4U 15 #define HW_ATL2_RX_RINGS 4U 16 17 #define HW_ATL2_RINGS_MAX 32U 18 #define HW_ATL2_TXD_SIZE (16U) 19 #define HW_ATL2_RXD_SIZE (16U) 20 21 #define HW_ATL2_MAC_UC 0U 22 #define HW_ATL2_MAC_MIN 1U 23 #define HW_ATL2_MAC_MAX 38U 24 25 /* interrupts */ 26 #define HW_ATL2_ERR_INT 8U 27 #define HW_ATL2_INT_MASK (0xFFFFFFFFU) 28 29 #define HW_ATL2_TXBUF_MAX 128U 30 #define HW_ATL2_RXBUF_MAX 192U 31 32 #define HW_ATL2_RSS_REDIRECTION_MAX 64U 33 34 #define HW_ATL2_TC_MAX 1U 35 #define HW_ATL2_RSS_MAX 8U 36 37 #define HW_ATL2_MIN_RXD \ 38 (ALIGN(AQ_CFG_SKB_FRAGS_MAX + 1U, AQ_HW_RXD_MULTIPLE)) 39 #define HW_ATL2_MIN_TXD \ 40 (ALIGN(AQ_CFG_SKB_FRAGS_MAX + 1U, AQ_HW_TXD_MULTIPLE)) 41 42 #define HW_ATL2_MAX_RXD 8184U 43 #define HW_ATL2_MAX_TXD 8184U 44 45 #define HW_ATL2_FW_SM_ACT_RSLVR 0x3U 46 47 #define HW_ATL2_RPF_TAG_UC_OFFSET 0x0 48 #define HW_ATL2_RPF_TAG_ALLMC_OFFSET 0x6 49 #define HW_ATL2_RPF_TAG_ET_OFFSET 0x7 50 #define HW_ATL2_RPF_TAG_VLAN_OFFSET 0xA 51 #define HW_ATL2_RPF_TAG_UNTAG_OFFSET 0xE 52 #define HW_ATL2_RPF_TAG_L3_V4_OFFSET 0xF 53 #define HW_ATL2_RPF_TAG_L3_V6_OFFSET 0x12 54 #define HW_ATL2_RPF_TAG_L4_OFFSET 0x15 55 #define HW_ATL2_RPF_TAG_L4_FLEX_OFFSET 0x18 56 #define HW_ATL2_RPF_TAG_FLEX_OFFSET 0x1B 57 #define HW_ATL2_RPF_TAG_PCP_OFFSET 0x1D 58 59 #define HW_ATL2_RPF_TAG_UC_MASK (0x0000003F << HW_ATL2_RPF_TAG_UC_OFFSET) 60 #define HW_ATL2_RPF_TAG_ALLMC_MASK (0x00000001 << HW_ATL2_RPF_TAG_ALLMC_OFFSET) 61 #define HW_ATL2_RPF_TAG_UNTAG_MASK (0x00000001 << HW_ATL2_RPF_TAG_UNTAG_OFFSET) 62 #define HW_ATL2_RPF_TAG_VLAN_MASK (0x0000000F << HW_ATL2_RPF_TAG_VLAN_OFFSET) 63 #define HW_ATL2_RPF_TAG_ET_MASK (0x00000007 << HW_ATL2_RPF_TAG_ET_OFFSET) 64 #define HW_ATL2_RPF_TAG_L3_V4_MASK (0x00000007 << HW_ATL2_RPF_TAG_L3_V4_OFFSET) 65 #define HW_ATL2_RPF_TAG_L3_V6_MASK (0x00000007 << HW_ATL2_RPF_TAG_L3_V6_OFFSET) 66 #define HW_ATL2_RPF_TAG_L4_MASK (0x00000007 << HW_ATL2_RPF_TAG_L4_OFFSET) 67 #define HW_ATL2_RPF_TAG_PCP_MASK (0x00000007 << HW_ATL2_RPF_TAG_PCP_OFFSET) 68 69 #define HW_ATL2_RPF_TAG_BASE_UC BIT(HW_ATL2_RPF_TAG_UC_OFFSET) 70 #define HW_ATL2_RPF_TAG_BASE_ALLMC BIT(HW_ATL2_RPF_TAG_ALLMC_OFFSET) 71 #define HW_ATL2_RPF_TAG_BASE_UNTAG BIT(HW_ATL2_RPF_TAG_UNTAG_OFFSET) 72 #define HW_ATL2_RPF_TAG_BASE_VLAN BIT(HW_ATL2_RPF_TAG_VLAN_OFFSET) 73 74 enum HW_ATL2_RPF_ART_INDEX { 75 HW_ATL2_RPF_L2_PROMISC_OFF_INDEX, 76 HW_ATL2_RPF_VLAN_PROMISC_OFF_INDEX, 77 HW_ATL2_RPF_L3L4_USER_INDEX = 8, 78 HW_ATL2_RPF_ET_PCP_USER_INDEX = HW_ATL2_RPF_L3L4_USER_INDEX + 16, 79 HW_ATL2_RPF_VLAN_USER_INDEX = HW_ATL2_RPF_ET_PCP_USER_INDEX + 16, 80 HW_ATL2_RPF_PCP_TO_TC_INDEX = HW_ATL2_RPF_VLAN_USER_INDEX + 81 HW_ATL_VLAN_MAX_FILTERS, 82 HW_ATL2_RPF_VLAN_INDEX = HW_ATL2_RPF_PCP_TO_TC_INDEX + 83 AQ_CFG_TCS_MAX, 84 HW_ATL2_RPF_MAC_INDEX, 85 HW_ATL2_RPF_ALLMC_INDEX, 86 HW_ATL2_RPF_UNTAG_INDEX, 87 HW_ATL2_RPF_VLAN_PROMISC_ON_INDEX, 88 HW_ATL2_RPF_L2_PROMISC_ON_INDEX, 89 }; 90 91 #define HW_ATL2_ACTION(ACTION, RSS, INDEX, VALID) \ 92 ((((ACTION) & 0x3U) << 8) | \ 93 (((RSS) & 0x1U) << 7) | \ 94 (((INDEX) & 0x3FU) << 2) | \ 95 (((VALID) & 0x1U) << 0)) 96 97 #define HW_ATL2_ACTION_DROP HW_ATL2_ACTION(0, 0, 0, 1) 98 #define HW_ATL2_ACTION_DISABLE HW_ATL2_ACTION(0, 0, 0, 0) 99 #define HW_ATL2_ACTION_ASSIGN_QUEUE(QUEUE) HW_ATL2_ACTION(1, 0, (QUEUE), 1) 100 #define HW_ATL2_ACTION_ASSIGN_TC(TC) HW_ATL2_ACTION(1, 1, (TC), 1) 101 102 enum HW_ATL2_RPF_RSS_HASH_TYPE { 103 HW_ATL2_RPF_RSS_HASH_TYPE_NONE = 0, 104 HW_ATL2_RPF_RSS_HASH_TYPE_IPV4 = BIT(0), 105 HW_ATL2_RPF_RSS_HASH_TYPE_IPV4_TCP = BIT(1), 106 HW_ATL2_RPF_RSS_HASH_TYPE_IPV4_UDP = BIT(2), 107 HW_ATL2_RPF_RSS_HASH_TYPE_IPV6 = BIT(3), 108 HW_ATL2_RPF_RSS_HASH_TYPE_IPV6_TCP = BIT(4), 109 HW_ATL2_RPF_RSS_HASH_TYPE_IPV6_UDP = BIT(5), 110 HW_ATL2_RPF_RSS_HASH_TYPE_IPV6_EX = BIT(6), 111 HW_ATL2_RPF_RSS_HASH_TYPE_IPV6_EX_TCP = BIT(7), 112 HW_ATL2_RPF_RSS_HASH_TYPE_IPV6_EX_UDP = BIT(8), 113 HW_ATL2_RPF_RSS_HASH_TYPE_ALL = HW_ATL2_RPF_RSS_HASH_TYPE_IPV4 | 114 HW_ATL2_RPF_RSS_HASH_TYPE_IPV4_TCP | 115 HW_ATL2_RPF_RSS_HASH_TYPE_IPV4_UDP | 116 HW_ATL2_RPF_RSS_HASH_TYPE_IPV6 | 117 HW_ATL2_RPF_RSS_HASH_TYPE_IPV6_TCP | 118 HW_ATL2_RPF_RSS_HASH_TYPE_IPV6_UDP | 119 HW_ATL2_RPF_RSS_HASH_TYPE_IPV6_EX | 120 HW_ATL2_RPF_RSS_HASH_TYPE_IPV6_EX_TCP | 121 HW_ATL2_RPF_RSS_HASH_TYPE_IPV6_EX_UDP, 122 }; 123 124 #define HW_ATL_RSS_DISABLED 0x00000000U 125 #define HW_ATL_RSS_ENABLED_3INDEX_BITS 0xB3333333U 126 127 #define HW_ATL_MCAST_FLT_ANY_TO_HOST 0x00010FFFU 128 129 struct hw_atl2_priv { 130 struct statistics_s last_stats; 131 unsigned int art_base_index; 132 }; 133 134 #endif /* HW_ATL2_INTERNAL_H */ 135