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