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) 67struct dpdmux_cmd_open { 68 uint32_t dpdmux_id; 69}; 70 71struct 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 85struct 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 94struct dpdmux_rsp_is_enabled { 95 uint8_t en; 96}; 97 98struct 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 113struct 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 122struct dpdmux_cmd_if_set_accepted_frames { 123 uint16_t if_id; 124 uint8_t frames_options; 125}; 126 127struct dpdmux_cmd_if { 128 uint16_t if_id; 129}; 130 131struct 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 139struct 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 152struct dpdmux_cmd_if_get_counter { 153 uint16_t if_id; 154 uint8_t counter_type; 155}; 156 157struct dpdmux_rsp_if_get_counter { 158 uint64_t pad; 159 uint64_t counter; 160}; 161 162struct 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 173struct 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 181struct 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 194struct dpdmux_rsp_get_api_version { 195 uint16_t major; 196 uint16_t minor; 197}; 198 199struct dpdmux_set_custom_key { 200 uint64_t pad[6]; 201 uint64_t key_cfg_iova; 202}; 203 204struct 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 213struct 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