vm.h (5226B)
1 /* 2 * 3 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 4 * 5 * Copyright 2007-2019 Broadcom Inc. All rights reserved. 6 */ 7 #ifndef _SOC_VM_H 8 #define _SOC_VM_H 9 10 #include <shared/bitop.h> 11 12 13 #define VM_FLOW_INIT(unit) \ 14 if (VM_FLOW_USED(unit) == NULL) { return SOC_E_INIT; } 15 #define VM_FLOW_ID(unit, id) \ 16 if (id < 0 || id >= VM_FLOW_SIZE(unit)) { return SOC_E_PARAM; } 17 18 #define VM_FLOW_ID_GET_FROM_HEAD 0 19 #define VM_FLOW_ID_GET_FROM_TAIL 1 20 #define VM_FLOW_ID_GET_CPU_DEFAULT 2 21 22 23 #define VM_RANGER_INIT(unit) \ 24 if (VM_RANGER_USED(unit) == NULL) { return SOC_E_INIT; } 25 26 /* ram type */ 27 typedef enum drv_vm_ram_e { 28 DRV_VM_RAM_IVM_KEY_DATA = 1, 29 DRV_VM_RAM_IVM_KEY_MASK, 30 DRV_VM_RAM_IVM_ACT, 31 DRV_VM_RAM_IVM_ALL, 32 DRV_VM_RAM_IVM = DRV_VM_RAM_IVM_ALL, 33 34 DRV_VM_RAM_EVM_KEY_DATA, 35 DRV_VM_RAM_EVM_KEY_MASK, 36 DRV_VM_RAM_EVM_ACT, 37 DRV_VM_RAM_EVM_ALL, 38 DRV_VM_RAM_EVM = DRV_VM_RAM_EVM_ALL 39 }drv_vm_ram_t; 40 41 /* qualify set */ 42 typedef enum drv_vm_qualify_e { 43 DRV_VM_QUAL_IVM_PORT_PROFILE, /* Ingress Port Profile */ 44 DRV_VM_QUAL_IVM_PORT_ID, /* Ingress Port ID */ 45 DRV_VM_QUAL_IVM_INGRESS_STAG_STAUS, /* Ingress STag Status */ 46 DRV_VM_QUAL_IVM_INGRESS_CTAG_STAUS, /* Ingress CTag Status */ 47 DRV_VM_QUAL_IVM_INGRESS_SVID, /* Ingress SVID */ 48 DRV_VM_QUAL_IVM_INGRESS_CVID, /* Ingress CVID */ 49 DRV_VM_QUAL_IVM_INGRESS_CVID_RANGE, /* Ingress CVID Range */ 50 DRV_VM_QUAL_IVM_INGRESS_SPCP, /* Ingress SPCP */ 51 DRV_VM_QUAL_IVM_INGRESS_CPCP, /* Ingress CPCP */ 52 DRV_VM_QUAL_IVM_INGRESS_FRAME_TYPE, /* Ingress Frame Type */ 53 DRV_VM_QUAL_IVM_INGRESS_ETHER_TYPE, /* Ingress Ether Type */ 54 55 DRV_VM_QUAL_EVM_INGRESS_PORT_ID, /* Ingress Port ID */ 56 DRV_VM_QUAL_EVM_INGRESS_VPORT_ID, /* Ingress VPort ID */ 57 DRV_VM_QUAL_EVM_FLOW_ID, /* Flow ID */ 58 DRV_VM_QUAL_EVM_EGRESS_PORT_ID, /* Egress Port ID */ 59 DRV_VM_QUAL_EVM_EGRESS_VPORT_ID, /* Egress VPort ID */ 60 61 DRV_VM_QUAL_INVALID, 62 DRV_VM_QUAL_COUNT 63 }drv_vm_qual_t; 64 65 /* field set */ 66 typedef enum drv_vm_field_e { 67 /* IVM Key */ 68 DRV_VM_FIELD_IVM_VALID, 69 DRV_VM_FIELD_IVM_INGRESS_PORT_PROFILE, 70 DRV_VM_FIELD_IVM_INGRESS_PORT_ID, 71 DRV_VM_FIELD_IVM_INGRESS_STAG_STAUS, 72 DRV_VM_FIELD_IVM_INGRESS_CTAG_STATUS, 73 DRV_VM_FIELD_IVM_INGRESS_SVID, 74 DRV_VM_FIELD_IVM_INGRESS_CVID, 75 DRV_VM_FIELD_IVM_INGRESS_CVID_RANGE, 76 DRV_VM_FIELD_IVM_INGRESS_SPCP, 77 DRV_VM_FIELD_IVM_INGRESS_CPCP, 78 DRV_VM_FIELD_IVM_FRAME_TYPE, 79 DRV_VM_FIELD_IVM_ETHER_TYPE, 80 DRV_VM_FIELD_IVM_RESERVED, 81 82 /* EVM Key */ 83 DRV_VM_FIELD_EVM_VALID, 84 DRV_VM_FIELD_EVM_INGRESS_PORT_ID, 85 DRV_VM_FIELD_EVM_INGRESS_VPORT_ID, 86 DRV_VM_FIELD_EVM_FLOW_ID, 87 DRV_VM_FIELD_EVM_EGRESS_PORT_ID, 88 DRV_VM_FIELD_EVM_EGRESS_VPORT_ID, 89 90 /* IVM Action */ 91 DRV_VM_FIELD_IVM_SPCP_MARKING_POLICY, 92 DRV_VM_FIELD_IVM_CPCP_MARKING_POLICY, 93 DRV_VM_FIELD_IVM_VLAN_ID, 94 DRV_VM_FIELD_IVM_FLOW_ID, 95 DRV_VM_FIELD_IVM_VPORT_ID, 96 DRV_VM_FIELD_IVM_VPORT_SPCP, 97 DRV_VM_FIELD_IVM_VPORT_CPCP, 98 DRV_VM_FIELD_IVM_VPORT_DP, 99 DRV_VM_FIELD_IVM_VPORT_TC, 100 101 /* EVMAction */ 102 DRV_VM_FIELD_EVM_STAG_ACT, 103 DRV_VM_FIELD_EVM_CTAG_ACT, 104 DRV_VM_FIELD_EVM_NEW_SVID, 105 DRV_VM_FIELD_EVM_NEW_CVID, 106 DRV_VM_FIELD_EVM_OUTER_PCP_REPLACE, 107 DRV_VM_FIELD_EVM_NEW_OUTER_PCP, 108 DRV_VM_FIELD_EVM_INNER_PCP_REPLACE, 109 DRV_VM_FIELD_EVM_NEW_INNER_PCP, 110 111 DRV_VM_FIELD_COUNT 112 }drv_vm_field_t; 113 114 /* action type */ 115 typedef enum drv_vm_action_e { 116 DRV_VM_ACT_IVM_SPCP_MARKING_POLICY = 1, 117 DRV_VM_ACT_IVM_CPCP_MARKING_POLICY, 118 DRV_VM_ACT_IVM_VLAN_ID, 119 DRV_VM_ACT_IVM_FLOW_ID, 120 DRV_VM_ACT_IVM_VPORT_ID, 121 DRV_VM_ACT_IVM_VPORT_SPCP, 122 DRV_VM_ACT_IVM_VPORT_CPCP, 123 DRV_VM_ACT_IVM_VPORT_DP, 124 DRV_VM_ACT_IVM_VPORT_TC, 125 126 DRV_VM_ACT_EVM_STAG, 127 DRV_VM_ACT_EVM_CTAG, 128 DRV_VM_ACT_EVM_NEW_SVID, 129 DRV_VM_ACT_EVM_NEW_CVID, 130 131 DRV_VM_ACT_EVM_OUTER_PCP_REPLACE, 132 DRV_VM_ACT_EVM_NEW_OUTER_PCP, 133 DRV_VM_ACT_EVM_INNER_PCP_REPLACE, 134 DRV_VM_ACT_EVM_NEW_INNER_PCP, 135 136 DRV_VM_ACT_COUNT 137 }drv_vm_action_t; 138 139 /* Parameters for IVM action SPCP/CPCP marking policy. */ 140 typedef enum drv_vm_action_pcp_mark_e { 141 DRV_VM_ACTION_PCP_MARK_MAPPED, 142 DRV_VM_ACTION_PCP_MARK_INGRESS_INNER_PCP, 143 DRV_VM_ACTION_PCP_MARK_INGRESS_OUTER_PCP, 144 DRV_VM_ACTION_PCP_MARK_PORT_DEFAULT, 145 146 DRV_VM_ACTION_PCP_MARK_COUNT 147 }drv_vm_action_pcp_mark_t; 148 149 /* Parameters for EVM action STag/CTag. */ 150 typedef enum drv_vm_action_tag_policy_e { 151 DRV_VM_ACTION_TAG_AS_RECEIVED, 152 DRV_VM_ACTION_TAG_AS_NORMALIZED, 153 DRV_VM_ACTION_TAG_AS_COPY, 154 DRV_VM_ACTION_TAG_AS_REMOVE, 155 DRV_VM_ACTION_TAG_AS_REPLACE, 156 157 DRV_VM_ACTION_TAG_COUNT 158 }drv_vm_action_tag_policy_t; 159 160 /* driver ivm entry format */ 161 typedef struct drv_vm_entry_s { 162 uint32 id; 163 uint32 prio; 164 uint32 key_data[2]; 165 uint32 key_mask[2]; 166 uint32 act_data[2]; 167 SHR_BITDCL w[_SHR_BITDCLSIZE(DRV_VM_QUAL_COUNT)]; 168 169 }drv_vm_entry_t; 170 171 172 #endif /* _SOC_VM_H */ 173 174