1 /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0) 2 * 3 * Copyright 2013-2016 Freescale Semiconductor Inc. 4 * Copyright 2018-2021 NXP 5 * 6 */ 7 #ifndef _FSL_DPDMUX_CMD_H 8 #define _FSL_DPDMUX_CMD_H 9 10 /* DPDMUX Version */ 11 #define DPDMUX_VER_MAJOR 6 12 #define DPDMUX_VER_MINOR 9 13 14 #define DPDMUX_CMD_BASE_VERSION 1 15 #define DPDMUX_CMD_VERSION_2 2 16 #define DPDMUX_CMD_VERSION_3 3 17 #define DPDMUX_CMD_VERSION_4 4 18 #define DPDMUX_CMD_ID_OFFSET 4 19 20 #define DPDMUX_CMD(id) (((id) << DPDMUX_CMD_ID_OFFSET) |\ 21 DPDMUX_CMD_BASE_VERSION) 22 #define DPDMUX_CMD_V2(id) (((id) << DPDMUX_CMD_ID_OFFSET) | \ 23 DPDMUX_CMD_VERSION_2) 24 #define DPDMUX_CMD_V3(id) (((id) << DPDMUX_CMD_ID_OFFSET) |\ 25 DPDMUX_CMD_VERSION_3) 26 #define DPDMUX_CMD_V4(id) (((id) << DPDMUX_CMD_ID_OFFSET) |\ 27 DPDMUX_CMD_VERSION_4) 28 29 /* Command IDs */ 30 #define DPDMUX_CMDID_CLOSE DPDMUX_CMD(0x800) 31 #define DPDMUX_CMDID_OPEN DPDMUX_CMD(0x806) 32 #define DPDMUX_CMDID_CREATE DPDMUX_CMD_V4(0x906) 33 #define DPDMUX_CMDID_DESTROY DPDMUX_CMD(0x986) 34 #define DPDMUX_CMDID_GET_API_VERSION DPDMUX_CMD(0xa06) 35 36 #define DPDMUX_CMDID_ENABLE DPDMUX_CMD(0x002) 37 #define DPDMUX_CMDID_DISABLE DPDMUX_CMD(0x003) 38 #define DPDMUX_CMDID_GET_ATTR DPDMUX_CMD_V3(0x004) 39 #define DPDMUX_CMDID_RESET DPDMUX_CMD(0x005) 40 #define DPDMUX_CMDID_IS_ENABLED DPDMUX_CMD(0x006) 41 #define DPDMUX_CMDID_SET_MAX_FRAME_LENGTH DPDMUX_CMD(0x0a1) 42 #define DPDMUX_CMDID_GET_MAX_FRAME_LENGTH DPDMUX_CMD(0x0a2) 43 44 #define DPDMUX_CMDID_UL_RESET_COUNTERS DPDMUX_CMD(0x0a3) 45 46 #define DPDMUX_CMDID_IF_SET_ACCEPTED_FRAMES DPDMUX_CMD(0x0a7) 47 #define DPDMUX_CMDID_IF_GET_ATTR DPDMUX_CMD(0x0a8) 48 #define DPDMUX_CMDID_IF_ENABLE DPDMUX_CMD(0x0a9) 49 #define DPDMUX_CMDID_IF_DISABLE DPDMUX_CMD(0x0aa) 50 51 #define DPDMUX_CMDID_IF_ADD_L2_RULE DPDMUX_CMD(0x0b0) 52 #define DPDMUX_CMDID_IF_REMOVE_L2_RULE DPDMUX_CMD(0x0b1) 53 #define DPDMUX_CMDID_IF_GET_COUNTER DPDMUX_CMD(0x0b2) 54 #define DPDMUX_CMDID_IF_SET_LINK_CFG DPDMUX_CMD_V2(0x0b3) 55 #define DPDMUX_CMDID_IF_GET_LINK_STATE DPDMUX_CMD_V2(0x0b4) 56 57 #define DPDMUX_CMDID_SET_CUSTOM_KEY DPDMUX_CMD(0x0b5) 58 #define DPDMUX_CMDID_ADD_CUSTOM_CLS_ENTRY DPDMUX_CMD_V2(0x0b6) 59 #define DPDMUX_CMDID_REMOVE_CUSTOM_CLS_ENTRY DPDMUX_CMD(0x0b7) 60 61 #define DPDMUX_CMDID_IF_SET_DEFAULT DPDMUX_CMD(0x0b8) 62 #define DPDMUX_CMDID_IF_GET_DEFAULT DPDMUX_CMD(0x0b9) 63 64 #define DPDMUX_CMDID_SET_RESETABLE DPDMUX_CMD(0x0ba) 65 #define DPDMUX_CMDID_GET_RESETABLE DPDMUX_CMD(0x0bb) 66 #define DPDMUX_CMDID_SET_ERRORS_BEHAVIOR DPDMUX_CMD(0x0bf) 67 68 #define DPDMUX_MASK(field) \ 69 GENMASK(DPDMUX_##field##_SHIFT + DPDMUX_##field##_SIZE - 1, \ 70 DPDMUX_##field##_SHIFT) 71 #define dpdmux_set_field(var, field, val) \ 72 ((var) |= (((val) << DPDMUX_##field##_SHIFT) & DPDMUX_MASK(field))) 73 #define dpdmux_get_field(var, field) \ 74 (((var) & DPDMUX_MASK(field)) >> DPDMUX_##field##_SHIFT) 75 76 #pragma pack(push, 1) 77 struct dpdmux_cmd_open { 78 uint32_t dpdmux_id; 79 }; 80 81 struct dpdmux_cmd_create { 82 uint8_t method; 83 uint8_t manip; 84 uint16_t num_ifs; 85 uint16_t default_if; 86 uint16_t pad; 87 88 uint16_t adv_max_dmat_entries; 89 uint16_t adv_max_mc_groups; 90 uint16_t adv_max_vlan_ids; 91 uint16_t mem_size; 92 93 uint64_t options; 94 }; 95 96 struct dpdmux_cmd_destroy { 97 uint32_t dpdmux_id; 98 }; 99 100 #define DPDMUX_ENABLE_SHIFT 0 101 #define DPDMUX_ENABLE_SIZE 1 102 #define DPDMUX_IS_DEFAULT_SHIFT 1 103 #define DPDMUX_IS_DEFAULT_SIZE 1 104 105 struct dpdmux_rsp_is_enabled { 106 uint8_t en; 107 }; 108 109 struct dpdmux_rsp_get_attr { 110 uint8_t method; 111 uint8_t manip; 112 uint16_t num_ifs; 113 uint16_t mem_size; 114 uint16_t default_if; 115 116 uint64_t pad1; 117 118 uint32_t id; 119 uint32_t pad2; 120 121 uint64_t options; 122 uint16_t max_dmat_entries; 123 uint16_t max_mc_groups; 124 uint16_t max_vlan_ids; 125 }; 126 127 struct dpdmux_cmd_set_max_frame_length { 128 uint16_t max_frame_length; 129 }; 130 131 struct dpdmux_cmd_get_max_frame_len { 132 uint16_t if_id; 133 }; 134 135 struct dpdmux_rsp_get_max_frame_len { 136 uint16_t max_len; 137 }; 138 139 #define DPDMUX_ACCEPTED_FRAMES_TYPE_SHIFT 0 140 #define DPDMUX_ACCEPTED_FRAMES_TYPE_SIZE 4 141 #define DPDMUX_UNACCEPTED_FRAMES_ACTION_SHIFT 4 142 #define DPDMUX_UNACCEPTED_FRAMES_ACTION_SIZE 4 143 144 struct dpdmux_cmd_if_set_accepted_frames { 145 uint16_t if_id; 146 uint8_t frames_options; 147 }; 148 149 struct dpdmux_cmd_if { 150 uint16_t if_id; 151 }; 152 153 struct dpdmux_rsp_if_get_attr { 154 uint8_t pad[3]; 155 uint8_t enabled; 156 uint8_t pad1[3]; 157 uint8_t accepted_frames_type; 158 uint32_t rate; 159 }; 160 161 struct dpdmux_cmd_if_l2_rule { 162 uint16_t if_id; 163 uint8_t mac_addr5; 164 uint8_t mac_addr4; 165 uint8_t mac_addr3; 166 uint8_t mac_addr2; 167 uint8_t mac_addr1; 168 uint8_t mac_addr0; 169 170 uint32_t pad; 171 uint16_t vlan_id; 172 }; 173 174 struct dpdmux_cmd_if_get_counter { 175 uint16_t if_id; 176 uint8_t counter_type; 177 }; 178 179 struct dpdmux_rsp_if_get_counter { 180 uint64_t pad; 181 uint64_t counter; 182 }; 183 184 struct dpdmux_cmd_if_set_link_cfg { 185 uint16_t if_id; 186 uint16_t pad[3]; 187 188 uint32_t rate; 189 uint32_t pad1; 190 191 uint64_t options; 192 uint64_t advertising; 193 }; 194 195 struct dpdmux_cmd_if_get_link_state { 196 uint16_t if_id; 197 }; 198 199 #define DPDMUX_UP_SHIFT 0 200 #define DPDMUX_UP_SIZE 1 201 #define DPDMUX_STATE_VALID_SHIFT 1 202 #define DPDMUX_STATE_VALID_SIZE 1 203 struct dpdmux_rsp_if_get_link_state { 204 uint32_t pad; 205 uint8_t up; 206 uint8_t pad1[3]; 207 208 uint32_t rate; 209 uint32_t pad2; 210 211 uint64_t options; 212 uint64_t supported; 213 uint64_t advertising; 214 }; 215 216 struct dpdmux_rsp_get_api_version { 217 uint16_t major; 218 uint16_t minor; 219 }; 220 221 struct dpdmux_set_custom_key { 222 uint64_t pad[6]; 223 uint64_t key_cfg_iova; 224 }; 225 226 struct dpdmux_cmd_add_custom_cls_entry { 227 uint8_t pad[3]; 228 uint8_t key_size; 229 uint16_t entry_index; 230 uint16_t dest_if; 231 uint64_t key_iova; 232 uint64_t mask_iova; 233 }; 234 235 struct dpdmux_cmd_remove_custom_cls_entry { 236 uint8_t pad[3]; 237 uint8_t key_size; 238 uint32_t pad1; 239 uint64_t key_iova; 240 uint64_t mask_iova; 241 }; 242 243 #define DPDMUX_SKIP_RESET_FLAGS_SHIFT 0 244 #define DPDMUX_SKIP_RESET_FLAGS_SIZE 3 245 246 struct dpdmux_cmd_set_skip_reset_flags { 247 uint8_t skip_reset_flags; 248 }; 249 250 struct dpdmux_rsp_get_skip_reset_flags { 251 uint8_t skip_reset_flags; 252 }; 253 254 #define DPDMUX_ERROR_ACTION_SHIFT 0 255 #define DPDMUX_ERROR_ACTION_SIZE 4 256 257 struct dpdmux_cmd_set_errors_behavior { 258 uint32_t errors; 259 uint16_t flags; 260 uint16_t if_id; 261 }; 262 263 #pragma pack(pop) 264 #endif /* _FSL_DPDMUX_CMD_H */ 265