1a2a55e51SPrabhakar Kushwaha /* 2a2a55e51SPrabhakar Kushwaha * Copyright (C) 2013-2015 Freescale Semiconductor 3a2a55e51SPrabhakar Kushwaha * 4a2a55e51SPrabhakar Kushwaha * SPDX-License-Identifier: GPL-2.0+ 5a2a55e51SPrabhakar Kushwaha */ 6a2a55e51SPrabhakar Kushwaha #ifndef _FSL_DPNI_H 7a2a55e51SPrabhakar Kushwaha #define _FSL_DPNI_H 8a2a55e51SPrabhakar Kushwaha 9a2a55e51SPrabhakar Kushwaha /* DPNI Version */ 101f1c25c7SPrabhakar Kushwaha #define DPNI_VER_MAJOR 5 1187457d11SPrabhakar Kushwaha #define DPNI_VER_MINOR 1 12a2a55e51SPrabhakar Kushwaha 13a2a55e51SPrabhakar Kushwaha /* Command IDs */ 14a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_OPEN 0x801 15a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_CLOSE 0x800 16*1ebbe4fcSPrabhakar Kushwaha #define DPNI_CMDID_CREATE 0x901 17*1ebbe4fcSPrabhakar Kushwaha #define DPNI_CMDID_DESTROY 0x900 18a2a55e51SPrabhakar Kushwaha 19a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_ENABLE 0x002 20a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_DISABLE 0x003 21a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_ATTR 0x004 22a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_RESET 0x005 23a2a55e51SPrabhakar Kushwaha 24a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_POOLS 0x200 25a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_RX_BUFFER_LAYOUT 0x201 26a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_RX_BUFFER_LAYOUT 0x202 27a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_BUFFER_LAYOUT 0x203 28a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_TX_BUFFER_LAYOUT 0x204 29a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_TX_CONF_BUFFER_LAYOUT 0x205 30a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_CONF_BUFFER_LAYOUT 0x206 31a2a55e51SPrabhakar Kushwaha 32a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_QDID 0x210 33a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_DATA_OFFSET 0x212 34a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_COUNTER 0x213 35a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_COUNTER 0x214 36a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_LINK_STATE 0x215 37a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_LINK_CFG 0x21A 38a2a55e51SPrabhakar Kushwaha 39a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_PRIM_MAC 0x224 40a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_PRIM_MAC 0x225 41a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_ADD_MAC_ADDR 0x226 42a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_REMOVE_MAC_ADDR 0x227 43a2a55e51SPrabhakar Kushwaha 44a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_TX_FLOW 0x236 45a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_FLOW 0x237 46a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_RX_FLOW 0x238 47a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_RX_FLOW 0x239 48a2a55e51SPrabhakar Kushwaha 49a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 50a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_OPEN(cmd, dpni_id) \ 51a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, dpni_id) 52a2a55e51SPrabhakar Kushwaha 53*1ebbe4fcSPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 54*1ebbe4fcSPrabhakar Kushwaha #define DPNI_CMD_CREATE(cmd, cfg) \ 55*1ebbe4fcSPrabhakar Kushwaha do { \ 56*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 8, uint8_t, cfg->adv.max_tcs); \ 57*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 8, 8, uint8_t, cfg->adv.max_senders); \ 58*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 8, uint8_t, cfg->mac_addr[5]); \ 59*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 24, 8, uint8_t, cfg->mac_addr[4]); \ 60*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, cfg->mac_addr[3]); \ 61*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 40, 8, uint8_t, cfg->mac_addr[2]); \ 62*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 8, uint8_t, cfg->mac_addr[1]); \ 63*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 56, 8, uint8_t, cfg->mac_addr[0]); \ 64*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 32, uint32_t, cfg->adv.options); \ 65*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, uint8_t, cfg->adv.max_unicast_filters); \ 66*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, uint8_t, cfg->adv.max_multicast_filters); \ 67*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, uint8_t, cfg->adv.max_vlan_filters); \ 68*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, uint8_t, cfg->adv.max_qos_entries); \ 69*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, uint8_t, cfg->adv.max_qos_key_size); \ 70*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, uint8_t, cfg->adv.max_dist_key_size); \ 71*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, enum net_prot, cfg->adv.start_hdr); \ 72*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 8, uint8_t, cfg->adv.max_dist_per_tc[0]); \ 73*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 8, 8, uint8_t, cfg->adv.max_dist_per_tc[1]); \ 74*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 16, 8, uint8_t, cfg->adv.max_dist_per_tc[2]); \ 75*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 24, 8, uint8_t, cfg->adv.max_dist_per_tc[3]); \ 76*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 8, uint8_t, cfg->adv.max_dist_per_tc[4]); \ 77*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 40, 8, uint8_t, cfg->adv.max_dist_per_tc[5]); \ 78*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 48, 8, uint8_t, cfg->adv.max_dist_per_tc[6]); \ 79*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 56, 8, uint8_t, cfg->adv.max_dist_per_tc[7]); \ 80*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 0, 16, uint16_t, \ 81*1ebbe4fcSPrabhakar Kushwaha cfg->adv.ipr_cfg.max_reass_frm_size); \ 82*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 16, 16, uint16_t, \ 83*1ebbe4fcSPrabhakar Kushwaha cfg->adv.ipr_cfg.min_frag_size_ipv4); \ 84*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 32, 16, uint16_t, \ 85*1ebbe4fcSPrabhakar Kushwaha cfg->adv.ipr_cfg.min_frag_size_ipv6); \ 86*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 48, 8, uint8_t, cfg->adv.max_policers); \ 87*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 56, 8, uint8_t, cfg->adv.max_congestion_ctrl); \ 88*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 0, 16, uint16_t, \ 89*1ebbe4fcSPrabhakar Kushwaha cfg->adv.ipr_cfg.max_open_frames_ipv4); \ 90*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 16, 16, uint16_t, \ 91*1ebbe4fcSPrabhakar Kushwaha cfg->adv.ipr_cfg.max_open_frames_ipv6); \ 92*1ebbe4fcSPrabhakar Kushwaha } while (0) 93a2a55e51SPrabhakar Kushwaha 94a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 95a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_POOLS(cmd, cfg) \ 96a2a55e51SPrabhakar Kushwaha do { \ 97a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 8, uint8_t, cfg->num_dpbp); \ 98a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 32, int, cfg->pools[0].dpbp_id); \ 99a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 32, 16, uint16_t, cfg->pools[0].buffer_size);\ 100a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 32, int, cfg->pools[1].dpbp_id); \ 101a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 48, 16, uint16_t, cfg->pools[1].buffer_size);\ 102a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 32, int, cfg->pools[2].dpbp_id); \ 103a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 0, 16, uint16_t, cfg->pools[2].buffer_size);\ 104a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 32, int, cfg->pools[3].dpbp_id); \ 105a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 16, 16, uint16_t, cfg->pools[3].buffer_size);\ 106a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 32, int, cfg->pools[4].dpbp_id); \ 107a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 32, 16, uint16_t, cfg->pools[4].buffer_size);\ 108a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 32, int, cfg->pools[5].dpbp_id); \ 109a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 48, 16, uint16_t, cfg->pools[5].buffer_size);\ 110a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 32, int, cfg->pools[6].dpbp_id); \ 111a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 0, 16, uint16_t, cfg->pools[6].buffer_size);\ 112a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 0, 32, int, cfg->pools[7].dpbp_id); \ 113a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 16, 16, uint16_t, cfg->pools[7].buffer_size);\ 114a2a55e51SPrabhakar Kushwaha } while (0) 115a2a55e51SPrabhakar Kushwaha 116a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 117a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_ATTR(cmd, attr) \ 118a2a55e51SPrabhakar Kushwaha do { \ 119a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 32, int, attr->id);\ 120a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 8, uint8_t, attr->max_tcs); \ 121a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 40, 8, uint8_t, attr->max_senders); \ 122a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 48, 8, enum net_prot, attr->start_hdr); \ 1231f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 32, uint32_t, attr->options); \ 124a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 0, 8, uint8_t, attr->max_unicast_filters); \ 125a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 8, 8, uint8_t, attr->max_multicast_filters);\ 126a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 16, 8, uint8_t, attr->max_vlan_filters); \ 127a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 24, 8, uint8_t, attr->max_qos_entries); \ 128a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 32, 8, uint8_t, attr->max_qos_key_size); \ 129a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 40, 8, uint8_t, attr->max_dist_key_size); \ 130a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 0, 8, uint8_t, attr->max_dist_per_tc[0]); \ 131a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 8, 8, uint8_t, attr->max_dist_per_tc[1]); \ 132a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 16, 8, uint8_t, attr->max_dist_per_tc[2]); \ 133a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 24, 8, uint8_t, attr->max_dist_per_tc[3]); \ 134a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 32, 8, uint8_t, attr->max_dist_per_tc[4]); \ 135a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 40, 8, uint8_t, attr->max_dist_per_tc[5]); \ 136a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 48, 8, uint8_t, attr->max_dist_per_tc[6]); \ 137a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 56, 8, uint8_t, attr->max_dist_per_tc[7]); \ 138a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 0, 16, uint16_t, \ 139a2a55e51SPrabhakar Kushwaha attr->ipr_cfg.max_reass_frm_size); \ 140a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 16, 16, uint16_t, \ 141a2a55e51SPrabhakar Kushwaha attr->ipr_cfg.min_frag_size_ipv4); \ 142a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 32, 16, uint16_t, \ 143a2a55e51SPrabhakar Kushwaha attr->ipr_cfg.min_frag_size_ipv6);\ 1441f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 48, 8, uint8_t, attr->max_policers); \ 1451f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 56, 8, uint8_t, attr->max_congestion_ctrl); \ 146a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 0, 16, uint16_t, \ 147a2a55e51SPrabhakar Kushwaha attr->ipr_cfg.max_open_frames_ipv4); \ 148a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 16, 16, uint16_t, \ 149a2a55e51SPrabhakar Kushwaha attr->ipr_cfg.max_open_frames_ipv6); \ 150a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 32, 16, uint16_t, attr->version.major);\ 151a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 48, 16, uint16_t, attr->version.minor);\ 152a2a55e51SPrabhakar Kushwaha } while (0) 153a2a55e51SPrabhakar Kushwaha 154a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 155a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_RX_BUFFER_LAYOUT(cmd, layout) \ 156a2a55e51SPrabhakar Kushwaha do { \ 157a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ 158a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ 159a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ 160a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ 161a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ 162a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ 163a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ 164a2a55e51SPrabhakar Kushwaha } while (0) 165a2a55e51SPrabhakar Kushwaha 166a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 167a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_RX_BUFFER_LAYOUT(cmd, layout) \ 168a2a55e51SPrabhakar Kushwaha do { \ 169a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ 170a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ 171a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 32, uint32_t, layout->options); \ 172a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ 173a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ 174a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ 175a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ 176a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ 177a2a55e51SPrabhakar Kushwaha } while (0) 178a2a55e51SPrabhakar Kushwaha 179a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 180a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_BUFFER_LAYOUT(cmd, layout) \ 181a2a55e51SPrabhakar Kushwaha do { \ 182a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ 183a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ 184a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ 185a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ 186a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ 187a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ 188a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ 189a2a55e51SPrabhakar Kushwaha } while (0) 190a2a55e51SPrabhakar Kushwaha 191a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 192a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_TX_BUFFER_LAYOUT(cmd, layout) \ 193a2a55e51SPrabhakar Kushwaha do { \ 194a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ 195a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ 196a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 32, uint32_t, layout->options); \ 197a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ 198a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ 199a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ 200a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ 201a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ 202a2a55e51SPrabhakar Kushwaha } while (0) 203a2a55e51SPrabhakar Kushwaha 204a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 205a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_CONF_BUFFER_LAYOUT(cmd, layout) \ 206a2a55e51SPrabhakar Kushwaha do { \ 207a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ 208a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ 209a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ 210a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ 211a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ 212a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ 213a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ 214a2a55e51SPrabhakar Kushwaha } while (0) 215a2a55e51SPrabhakar Kushwaha 216a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 217a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_TX_CONF_BUFFER_LAYOUT(cmd, layout) \ 218a2a55e51SPrabhakar Kushwaha do { \ 219a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ 220a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ 221a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 32, uint32_t, layout->options); \ 222a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ 223a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ 224a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ 225a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ 226a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ 227a2a55e51SPrabhakar Kushwaha } while (0) 228a2a55e51SPrabhakar Kushwaha 229a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 230a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_QDID(cmd, qdid) \ 231a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 16, uint16_t, qdid) 232a2a55e51SPrabhakar Kushwaha 233a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 234a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_DATA_OFFSET(cmd, data_offset) \ 235a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 16, uint16_t, data_offset) 236a2a55e51SPrabhakar Kushwaha 237a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 238a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_GET_COUNTER(cmd, counter) \ 239a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 16, enum dpni_counter, counter) 240a2a55e51SPrabhakar Kushwaha 241a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 242a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_COUNTER(cmd, value) \ 243a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 64, uint64_t, value) 244a2a55e51SPrabhakar Kushwaha 245a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 246a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_COUNTER(cmd, counter, value) \ 247a2a55e51SPrabhakar Kushwaha do { \ 248a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 16, enum dpni_counter, counter); \ 249a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 64, uint64_t, value); \ 250a2a55e51SPrabhakar Kushwaha } while (0) 251a2a55e51SPrabhakar Kushwaha 252a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 253a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_LINK_CFG(cmd, cfg) \ 254a2a55e51SPrabhakar Kushwaha do { \ 2551f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 32, uint32_t, cfg->rate);\ 256a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 64, uint64_t, cfg->options);\ 257a2a55e51SPrabhakar Kushwaha } while (0) 258a2a55e51SPrabhakar Kushwaha 259a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 260a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_LINK_STATE(cmd, state) \ 261a2a55e51SPrabhakar Kushwaha do { \ 262a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 1, int, state->up);\ 2631f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 32, uint32_t, state->rate);\ 264a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 0, 64, uint64_t, state->options);\ 265a2a55e51SPrabhakar Kushwaha } while (0) 266a2a55e51SPrabhakar Kushwaha 267a2a55e51SPrabhakar Kushwaha 268a2a55e51SPrabhakar Kushwaha 269a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 270a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_PRIMARY_MAC_ADDR(cmd, mac_addr) \ 271a2a55e51SPrabhakar Kushwaha do { \ 272a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 8, uint8_t, mac_addr[5]); \ 273a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 24, 8, uint8_t, mac_addr[4]); \ 274a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, mac_addr[3]); \ 275a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 40, 8, uint8_t, mac_addr[2]); \ 276a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 8, uint8_t, mac_addr[1]); \ 277a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 56, 8, uint8_t, mac_addr[0]); \ 278a2a55e51SPrabhakar Kushwaha } while (0) 279a2a55e51SPrabhakar Kushwaha 280a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 281a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_PRIMARY_MAC_ADDR(cmd, mac_addr) \ 282a2a55e51SPrabhakar Kushwaha do { \ 283a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 16, 8, uint8_t, mac_addr[5]); \ 284a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 24, 8, uint8_t, mac_addr[4]); \ 285a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 8, uint8_t, mac_addr[3]); \ 286a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 40, 8, uint8_t, mac_addr[2]); \ 287a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 48, 8, uint8_t, mac_addr[1]); \ 288a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 56, 8, uint8_t, mac_addr[0]); \ 289a2a55e51SPrabhakar Kushwaha } while (0) 290a2a55e51SPrabhakar Kushwaha 291a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 292a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_ADD_MAC_ADDR(cmd, mac_addr) \ 293a2a55e51SPrabhakar Kushwaha do { \ 294a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 8, uint8_t, mac_addr[5]); \ 295a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 24, 8, uint8_t, mac_addr[4]); \ 296a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, mac_addr[3]); \ 297a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 40, 8, uint8_t, mac_addr[2]); \ 298a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 8, uint8_t, mac_addr[1]); \ 299a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 56, 8, uint8_t, mac_addr[0]); \ 300a2a55e51SPrabhakar Kushwaha } while (0) 301a2a55e51SPrabhakar Kushwaha 302a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 303a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_REMOVE_MAC_ADDR(cmd, mac_addr) \ 304a2a55e51SPrabhakar Kushwaha do { \ 305a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 8, uint8_t, mac_addr[5]); \ 306a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 24, 8, uint8_t, mac_addr[4]); \ 307a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, mac_addr[3]); \ 308a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 40, 8, uint8_t, mac_addr[2]); \ 309a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 8, uint8_t, mac_addr[1]); \ 310a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 56, 8, uint8_t, mac_addr[0]); \ 311a2a55e51SPrabhakar Kushwaha } while (0) 312a2a55e51SPrabhakar Kushwaha 313a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 314a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_TX_FLOW(cmd, flow_id, cfg) \ 315a2a55e51SPrabhakar Kushwaha do { \ 316a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, \ 317a2a55e51SPrabhakar Kushwaha cfg->conf_err_cfg.queue_cfg.dest_cfg.dest_id);\ 318a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, \ 319a2a55e51SPrabhakar Kushwaha cfg->conf_err_cfg.queue_cfg.dest_cfg.priority);\ 320a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 40, 2, enum dpni_dest, \ 321a2a55e51SPrabhakar Kushwaha cfg->conf_err_cfg.queue_cfg.dest_cfg.dest_type);\ 322a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 42, 1, int, cfg->conf_err_cfg.errors_only);\ 323a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 43, 1, int, cfg->l3_chksum_gen);\ 324a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 44, 1, int, cfg->l4_chksum_gen);\ 325a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 45, 1, int, \ 326a2a55e51SPrabhakar Kushwaha cfg->conf_err_cfg.use_default_queue);\ 327a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id);\ 328a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 64, uint64_t, \ 329a2a55e51SPrabhakar Kushwaha cfg->conf_err_cfg.queue_cfg.user_ctx);\ 330a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 32, uint32_t, cfg->options);\ 331a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 32, uint32_t, \ 332a2a55e51SPrabhakar Kushwaha cfg->conf_err_cfg.queue_cfg.options);\ 333a2a55e51SPrabhakar Kushwaha } while (0) 334a2a55e51SPrabhakar Kushwaha 335a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 336a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_SET_TX_FLOW(cmd, flow_id) \ 337a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 48, 16, uint16_t, flow_id) 338a2a55e51SPrabhakar Kushwaha 339a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 340a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_GET_TX_FLOW(cmd, flow_id) \ 341a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id) 342a2a55e51SPrabhakar Kushwaha 343a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 344a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_FLOW(cmd, attr) \ 345a2a55e51SPrabhakar Kushwaha do { \ 346a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 32, int, \ 347a2a55e51SPrabhakar Kushwaha attr->conf_err_attr.queue_attr.dest_cfg.dest_id);\ 348a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 8, uint8_t, \ 349a2a55e51SPrabhakar Kushwaha attr->conf_err_attr.queue_attr.dest_cfg.priority);\ 350a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 40, 2, enum dpni_dest, \ 351a2a55e51SPrabhakar Kushwaha attr->conf_err_attr.queue_attr.dest_cfg.dest_type);\ 352a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 42, 1, int, attr->conf_err_attr.errors_only);\ 353a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 43, 1, int, attr->l3_chksum_gen);\ 354a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 44, 1, int, attr->l4_chksum_gen);\ 355a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 45, 1, int, \ 356a2a55e51SPrabhakar Kushwaha attr->conf_err_attr.use_default_queue);\ 357a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 64, uint64_t, \ 358a2a55e51SPrabhakar Kushwaha attr->conf_err_attr.queue_attr.user_ctx);\ 359a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 32, 32, uint32_t, \ 360a2a55e51SPrabhakar Kushwaha attr->conf_err_attr.queue_attr.fqid);\ 361a2a55e51SPrabhakar Kushwaha } while (0) 362a2a55e51SPrabhakar Kushwaha 363a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 364a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_RX_FLOW(cmd, tc_id, flow_id, cfg) \ 365a2a55e51SPrabhakar Kushwaha do { \ 366a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, cfg->dest_cfg.dest_id); \ 367a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, cfg->dest_cfg.priority);\ 368a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 40, 2, enum dpni_dest, cfg->dest_cfg.dest_type);\ 36987457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 42, 1, int, cfg->order_preservation_en);\ 370a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id); \ 371a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 64, uint64_t, cfg->user_ctx); \ 372a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, uint8_t, tc_id); \ 373a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 32, uint32_t, cfg->options); \ 3741f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 4, enum dpni_flc_type, cfg->flc_cfg.flc_type); \ 3751f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 4, 4, enum dpni_stash_size, \ 3761f1c25c7SPrabhakar Kushwaha cfg->flc_cfg.frame_data_size);\ 3771f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 8, 4, enum dpni_stash_size, \ 3781f1c25c7SPrabhakar Kushwaha cfg->flc_cfg.flow_context_size);\ 3791f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 32, uint32_t, cfg->flc_cfg.options);\ 3801f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 0, 64, uint64_t, cfg->flc_cfg.flow_context);\ 381a2a55e51SPrabhakar Kushwaha } while (0) 382a2a55e51SPrabhakar Kushwaha 383a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 384a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_GET_RX_FLOW(cmd, tc_id, flow_id) \ 385a2a55e51SPrabhakar Kushwaha do { \ 386a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 8, uint8_t, tc_id); \ 387a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id); \ 388a2a55e51SPrabhakar Kushwaha } while (0) 389a2a55e51SPrabhakar Kushwaha 390a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 391a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_RX_FLOW(cmd, attr) \ 392a2a55e51SPrabhakar Kushwaha do { \ 393a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 32, int, attr->dest_cfg.dest_id); \ 394a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 8, uint8_t, attr->dest_cfg.priority);\ 395a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 40, 2, enum dpni_dest, attr->dest_cfg.dest_type); \ 39687457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 42, 1, int, attr->order_preservation_en);\ 397a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 64, uint64_t, attr->user_ctx); \ 398a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 32, 32, uint32_t, attr->fqid); \ 3991f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 0, 4, enum dpni_flc_type, attr->flc_cfg.flc_type); \ 4001f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 4, 4, enum dpni_stash_size, \ 4011f1c25c7SPrabhakar Kushwaha attr->flc_cfg.frame_data_size);\ 4021f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 8, 4, enum dpni_stash_size, \ 4031f1c25c7SPrabhakar Kushwaha attr->flc_cfg.flow_context_size);\ 4041f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 32, 32, uint32_t, attr->flc_cfg.options);\ 4051f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 0, 64, uint64_t, attr->flc_cfg.flow_context);\ 406a2a55e51SPrabhakar Kushwaha } while (0) 407a2a55e51SPrabhakar Kushwaha 408a2a55e51SPrabhakar Kushwaha enum net_prot { 409a2a55e51SPrabhakar Kushwaha NET_PROT_NONE = 0, 410a2a55e51SPrabhakar Kushwaha NET_PROT_PAYLOAD, 411a2a55e51SPrabhakar Kushwaha NET_PROT_ETH, 412a2a55e51SPrabhakar Kushwaha NET_PROT_VLAN, 413a2a55e51SPrabhakar Kushwaha NET_PROT_IPV4, 414a2a55e51SPrabhakar Kushwaha NET_PROT_IPV6, 415a2a55e51SPrabhakar Kushwaha NET_PROT_IP, 416a2a55e51SPrabhakar Kushwaha NET_PROT_TCP, 417a2a55e51SPrabhakar Kushwaha NET_PROT_UDP, 418a2a55e51SPrabhakar Kushwaha NET_PROT_UDP_LITE, 419a2a55e51SPrabhakar Kushwaha NET_PROT_IPHC, 420a2a55e51SPrabhakar Kushwaha NET_PROT_SCTP, 421a2a55e51SPrabhakar Kushwaha NET_PROT_SCTP_CHUNK_DATA, 422a2a55e51SPrabhakar Kushwaha NET_PROT_PPPOE, 423a2a55e51SPrabhakar Kushwaha NET_PROT_PPP, 424a2a55e51SPrabhakar Kushwaha NET_PROT_PPPMUX, 425a2a55e51SPrabhakar Kushwaha NET_PROT_PPPMUX_SUBFRM, 426a2a55e51SPrabhakar Kushwaha NET_PROT_L2TPV2, 427a2a55e51SPrabhakar Kushwaha NET_PROT_L2TPV3_CTRL, 428a2a55e51SPrabhakar Kushwaha NET_PROT_L2TPV3_SESS, 429a2a55e51SPrabhakar Kushwaha NET_PROT_LLC, 430a2a55e51SPrabhakar Kushwaha NET_PROT_LLC_SNAP, 431a2a55e51SPrabhakar Kushwaha NET_PROT_NLPID, 432a2a55e51SPrabhakar Kushwaha NET_PROT_SNAP, 433a2a55e51SPrabhakar Kushwaha NET_PROT_MPLS, 434a2a55e51SPrabhakar Kushwaha NET_PROT_IPSEC_AH, 435a2a55e51SPrabhakar Kushwaha NET_PROT_IPSEC_ESP, 436a2a55e51SPrabhakar Kushwaha NET_PROT_UDP_ENC_ESP, /* RFC 3948 */ 437a2a55e51SPrabhakar Kushwaha NET_PROT_MACSEC, 438a2a55e51SPrabhakar Kushwaha NET_PROT_GRE, 439a2a55e51SPrabhakar Kushwaha NET_PROT_MINENCAP, 440a2a55e51SPrabhakar Kushwaha NET_PROT_DCCP, 441a2a55e51SPrabhakar Kushwaha NET_PROT_ICMP, 442a2a55e51SPrabhakar Kushwaha NET_PROT_IGMP, 443a2a55e51SPrabhakar Kushwaha NET_PROT_ARP, 444a2a55e51SPrabhakar Kushwaha NET_PROT_CAPWAP_DATA, 445a2a55e51SPrabhakar Kushwaha NET_PROT_CAPWAP_CTRL, 446a2a55e51SPrabhakar Kushwaha NET_PROT_RFC2684, 447a2a55e51SPrabhakar Kushwaha NET_PROT_ICMPV6, 448a2a55e51SPrabhakar Kushwaha NET_PROT_FCOE, 449a2a55e51SPrabhakar Kushwaha NET_PROT_FIP, 450a2a55e51SPrabhakar Kushwaha NET_PROT_ISCSI, 451a2a55e51SPrabhakar Kushwaha NET_PROT_GTP, 452a2a55e51SPrabhakar Kushwaha NET_PROT_USER_DEFINED_L2, 453a2a55e51SPrabhakar Kushwaha NET_PROT_USER_DEFINED_L3, 454a2a55e51SPrabhakar Kushwaha NET_PROT_USER_DEFINED_L4, 455a2a55e51SPrabhakar Kushwaha NET_PROT_USER_DEFINED_L5, 456a2a55e51SPrabhakar Kushwaha NET_PROT_USER_DEFINED_SHIM1, 457a2a55e51SPrabhakar Kushwaha NET_PROT_USER_DEFINED_SHIM2, 458a2a55e51SPrabhakar Kushwaha 459a2a55e51SPrabhakar Kushwaha NET_PROT_DUMMY_LAST 460a2a55e51SPrabhakar Kushwaha }; 461a2a55e51SPrabhakar Kushwaha 4621f1c25c7SPrabhakar Kushwaha /** 4631f1c25c7SPrabhakar Kushwaha * Data Path Network Interface API 464a2a55e51SPrabhakar Kushwaha * Contains initialization APIs and runtime control APIs for DPNI 465a2a55e51SPrabhakar Kushwaha */ 466a2a55e51SPrabhakar Kushwaha 467a2a55e51SPrabhakar Kushwaha struct fsl_mc_io; 468a2a55e51SPrabhakar Kushwaha 469a2a55e51SPrabhakar Kushwaha /* General DPNI macros */ 470a2a55e51SPrabhakar Kushwaha 471a2a55e51SPrabhakar Kushwaha /* Maximum number of traffic classes */ 472a2a55e51SPrabhakar Kushwaha #define DPNI_MAX_TC 8 473a2a55e51SPrabhakar Kushwaha /* Maximum number of buffer pools per DPNI */ 474a2a55e51SPrabhakar Kushwaha #define DPNI_MAX_DPBP 8 475a2a55e51SPrabhakar Kushwaha 476a2a55e51SPrabhakar Kushwaha /* All traffic classes considered; see dpni_set_rx_flow() */ 477a2a55e51SPrabhakar Kushwaha #define DPNI_ALL_TCS (uint8_t)(-1) 478a2a55e51SPrabhakar Kushwaha /* All flows within traffic class considered; see dpni_set_rx_flow() */ 479a2a55e51SPrabhakar Kushwaha #define DPNI_ALL_TC_FLOWS (uint16_t)(-1) 480a2a55e51SPrabhakar Kushwaha /* Generate new flow ID; see dpni_set_tx_flow() */ 481a2a55e51SPrabhakar Kushwaha #define DPNI_NEW_FLOW_ID (uint16_t)(-1) 482a2a55e51SPrabhakar Kushwaha 483a2a55e51SPrabhakar Kushwaha /** 484a2a55e51SPrabhakar Kushwaha * dpni_open() - Open a control session for the specified object 485a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 48687457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 487a2a55e51SPrabhakar Kushwaha * @dpni_id: DPNI unique ID 488a2a55e51SPrabhakar Kushwaha * @token: Returned token; use in subsequent API calls 489a2a55e51SPrabhakar Kushwaha * 490a2a55e51SPrabhakar Kushwaha * This function can be used to open a control session for an 491a2a55e51SPrabhakar Kushwaha * already created object; an object may have been declared in 492a2a55e51SPrabhakar Kushwaha * the DPL or by calling the dpni_create() function. 493a2a55e51SPrabhakar Kushwaha * This function returns a unique authentication token, 494a2a55e51SPrabhakar Kushwaha * associated with the specific object ID and the specific MC 495a2a55e51SPrabhakar Kushwaha * portal; this token must be used in all subsequent commands for 496a2a55e51SPrabhakar Kushwaha * this specific object. 497a2a55e51SPrabhakar Kushwaha * 498a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 499a2a55e51SPrabhakar Kushwaha */ 50087457d11SPrabhakar Kushwaha int dpni_open(struct fsl_mc_io *mc_io, 50187457d11SPrabhakar Kushwaha uint32_t cmd_flags, 50287457d11SPrabhakar Kushwaha int dpni_id, 50387457d11SPrabhakar Kushwaha uint16_t *token); 504a2a55e51SPrabhakar Kushwaha 505a2a55e51SPrabhakar Kushwaha /** 506a2a55e51SPrabhakar Kushwaha * dpni_close() - Close the control session of the object 507a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 50887457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 509a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 510a2a55e51SPrabhakar Kushwaha * 511a2a55e51SPrabhakar Kushwaha * After this function is called, no further operations are 512a2a55e51SPrabhakar Kushwaha * allowed on the object without opening a new control session. 513a2a55e51SPrabhakar Kushwaha * 514a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 515a2a55e51SPrabhakar Kushwaha */ 51687457d11SPrabhakar Kushwaha int dpni_close(struct fsl_mc_io *mc_io, 51787457d11SPrabhakar Kushwaha uint32_t cmd_flags, 51887457d11SPrabhakar Kushwaha uint16_t token); 519a2a55e51SPrabhakar Kushwaha 520*1ebbe4fcSPrabhakar Kushwaha /* DPNI configuration options */ 521*1ebbe4fcSPrabhakar Kushwaha 522*1ebbe4fcSPrabhakar Kushwaha /** 523*1ebbe4fcSPrabhakar Kushwaha * Allow different distribution key profiles for different traffic classes; 524*1ebbe4fcSPrabhakar Kushwaha * if not set, a single key profile is assumed 525*1ebbe4fcSPrabhakar Kushwaha */ 526*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_ALLOW_DIST_KEY_PER_TC 0x00000001 527*1ebbe4fcSPrabhakar Kushwaha 528*1ebbe4fcSPrabhakar Kushwaha /** 529*1ebbe4fcSPrabhakar Kushwaha * Disable all non-error transmit confirmation; error frames are reported 530*1ebbe4fcSPrabhakar Kushwaha * back to a common Tx error queue 531*1ebbe4fcSPrabhakar Kushwaha */ 532*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_TX_CONF_DISABLED 0x00000002 533*1ebbe4fcSPrabhakar Kushwaha 534*1ebbe4fcSPrabhakar Kushwaha /* Disable per-sender private Tx confirmation/error queue */ 535*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_PRIVATE_TX_CONF_ERROR_DISABLED 0x00000004 536*1ebbe4fcSPrabhakar Kushwaha 537*1ebbe4fcSPrabhakar Kushwaha /** 538*1ebbe4fcSPrabhakar Kushwaha * Support distribution based on hashed key; 539*1ebbe4fcSPrabhakar Kushwaha * allows statistical distribution over receive queues in a traffic class 540*1ebbe4fcSPrabhakar Kushwaha */ 541*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_DIST_HASH 0x00000010 542*1ebbe4fcSPrabhakar Kushwaha 543*1ebbe4fcSPrabhakar Kushwaha /** 544*1ebbe4fcSPrabhakar Kushwaha * Support distribution based on flow steering; 545*1ebbe4fcSPrabhakar Kushwaha * allows explicit control of distribution over receive queues in a traffic 546*1ebbe4fcSPrabhakar Kushwaha * class 547*1ebbe4fcSPrabhakar Kushwaha */ 548*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_DIST_FS 0x00000020 549*1ebbe4fcSPrabhakar Kushwaha 550*1ebbe4fcSPrabhakar Kushwaha /* Unicast filtering support */ 551*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_UNICAST_FILTER 0x00000080 552*1ebbe4fcSPrabhakar Kushwaha /* Multicast filtering support */ 553*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_MULTICAST_FILTER 0x00000100 554*1ebbe4fcSPrabhakar Kushwaha /* VLAN filtering support */ 555*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_VLAN_FILTER 0x00000200 556*1ebbe4fcSPrabhakar Kushwaha /* Support IP reassembly on received packets */ 557*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_IPR 0x00000800 558*1ebbe4fcSPrabhakar Kushwaha /* Support IP fragmentation on transmitted packets */ 559*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_IPF 0x00001000 560*1ebbe4fcSPrabhakar Kushwaha /* VLAN manipulation support */ 561*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_VLAN_MANIPULATION 0x00010000 562*1ebbe4fcSPrabhakar Kushwaha /* Support masking of QoS lookup keys */ 563*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_QOS_MASK_SUPPORT 0x00020000 564*1ebbe4fcSPrabhakar Kushwaha /* Support masking of Flow Steering lookup keys */ 565*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_FS_MASK_SUPPORT 0x00040000 566*1ebbe4fcSPrabhakar Kushwaha 567a2a55e51SPrabhakar Kushwaha /** 568a2a55e51SPrabhakar Kushwaha * struct dpni_ipr_cfg - Structure representing IP reassembly configuration 569a2a55e51SPrabhakar Kushwaha * @max_reass_frm_size: Maximum size of the reassembled frame 570a2a55e51SPrabhakar Kushwaha * @min_frag_size_ipv4: Minimum fragment size of IPv4 fragments 571a2a55e51SPrabhakar Kushwaha * @min_frag_size_ipv6: Minimum fragment size of IPv6 fragments 572a2a55e51SPrabhakar Kushwaha * @max_open_frames_ipv4: Maximum concurrent IPv4 packets in reassembly process 573a2a55e51SPrabhakar Kushwaha * @max_open_frames_ipv6: Maximum concurrent IPv6 packets in reassembly process 574a2a55e51SPrabhakar Kushwaha */ 575a2a55e51SPrabhakar Kushwaha struct dpni_ipr_cfg { 576a2a55e51SPrabhakar Kushwaha uint16_t max_reass_frm_size; 577a2a55e51SPrabhakar Kushwaha uint16_t min_frag_size_ipv4; 578a2a55e51SPrabhakar Kushwaha uint16_t min_frag_size_ipv6; 579a2a55e51SPrabhakar Kushwaha uint16_t max_open_frames_ipv4; 580a2a55e51SPrabhakar Kushwaha uint16_t max_open_frames_ipv6; 581a2a55e51SPrabhakar Kushwaha }; 582a2a55e51SPrabhakar Kushwaha 583a2a55e51SPrabhakar Kushwaha /** 584*1ebbe4fcSPrabhakar Kushwaha * struct dpni_cfg - Structure representing DPNI configuration 585*1ebbe4fcSPrabhakar Kushwaha * @mac_addr: Primary MAC address 586*1ebbe4fcSPrabhakar Kushwaha * @adv: Advanced parameters; default is all zeros; 587*1ebbe4fcSPrabhakar Kushwaha * use this structure to change default settings 588*1ebbe4fcSPrabhakar Kushwaha */ 589*1ebbe4fcSPrabhakar Kushwaha struct dpni_cfg { 590*1ebbe4fcSPrabhakar Kushwaha uint8_t mac_addr[6]; 591*1ebbe4fcSPrabhakar Kushwaha /** 592*1ebbe4fcSPrabhakar Kushwaha * struct adv - Advanced parameters 593*1ebbe4fcSPrabhakar Kushwaha * @options: Mask of available options; use 'DPNI_OPT_<X>' values 594*1ebbe4fcSPrabhakar Kushwaha * @start_hdr: Selects the packet starting header for parsing; 595*1ebbe4fcSPrabhakar Kushwaha * 'NET_PROT_NONE' is treated as default: 'NET_PROT_ETH' 596*1ebbe4fcSPrabhakar Kushwaha * @max_senders: Maximum number of different senders; used as the number 597*1ebbe4fcSPrabhakar Kushwaha * of dedicated Tx flows; Non-power-of-2 values are rounded 598*1ebbe4fcSPrabhakar Kushwaha * up to the next power-of-2 value as hardware demands it; 599*1ebbe4fcSPrabhakar Kushwaha * '0' will be treated as '1' 600*1ebbe4fcSPrabhakar Kushwaha * @max_tcs: Maximum number of traffic classes (for both Tx and Rx); 601*1ebbe4fcSPrabhakar Kushwaha * '0' will e treated as '1' 602*1ebbe4fcSPrabhakar Kushwaha * @max_dist_per_tc: Maximum distribution size per Rx traffic class; 603*1ebbe4fcSPrabhakar Kushwaha * Must be set to the required value minus 1; 604*1ebbe4fcSPrabhakar Kushwaha * i.e. 0->1, 1->2, ... ,255->256; 605*1ebbe4fcSPrabhakar Kushwaha * Non-power-of-2 values are rounded up to the next 606*1ebbe4fcSPrabhakar Kushwaha * power-of-2 value as hardware demands it 607*1ebbe4fcSPrabhakar Kushwaha * @max_unicast_filters: Maximum number of unicast filters; 608*1ebbe4fcSPrabhakar Kushwaha * '0' is treated as '16' 609*1ebbe4fcSPrabhakar Kushwaha * @max_multicast_filters: Maximum number of multicast filters; 610*1ebbe4fcSPrabhakar Kushwaha * '0' is treated as '64' 611*1ebbe4fcSPrabhakar Kushwaha * @max_qos_entries: if 'max_tcs > 1', declares the maximum entries in 612*1ebbe4fcSPrabhakar Kushwaha * the QoS table; '0' is treated as '64' 613*1ebbe4fcSPrabhakar Kushwaha * @max_qos_key_size: Maximum key size for the QoS look-up; 614*1ebbe4fcSPrabhakar Kushwaha * '0' is treated as '24' which is enough for IPv4 615*1ebbe4fcSPrabhakar Kushwaha * 5-tuple 616*1ebbe4fcSPrabhakar Kushwaha * @max_dist_key_size: Maximum key size for the distribution; 617*1ebbe4fcSPrabhakar Kushwaha * '0' is treated as '24' which is enough for IPv4 5-tuple 618*1ebbe4fcSPrabhakar Kushwaha * @max_policers: Maximum number of policers; 619*1ebbe4fcSPrabhakar Kushwaha * should be between '0' and max_tcs 620*1ebbe4fcSPrabhakar Kushwaha * @max_congestion_ctrl: Maximum number of congestion control groups 621*1ebbe4fcSPrabhakar Kushwaha * (CGs); covers early drop and congestion notification 622*1ebbe4fcSPrabhakar Kushwaha * requirements for traffic classes; 623*1ebbe4fcSPrabhakar Kushwaha * should be between '0' and max_tcs 624*1ebbe4fcSPrabhakar Kushwaha * @ipr_cfg: IP reassembly configuration 625*1ebbe4fcSPrabhakar Kushwaha */ 626*1ebbe4fcSPrabhakar Kushwaha struct { 627*1ebbe4fcSPrabhakar Kushwaha uint32_t options; 628*1ebbe4fcSPrabhakar Kushwaha enum net_prot start_hdr; 629*1ebbe4fcSPrabhakar Kushwaha uint8_t max_senders; 630*1ebbe4fcSPrabhakar Kushwaha uint8_t max_tcs; 631*1ebbe4fcSPrabhakar Kushwaha uint8_t max_dist_per_tc[DPNI_MAX_TC]; 632*1ebbe4fcSPrabhakar Kushwaha uint8_t max_unicast_filters; 633*1ebbe4fcSPrabhakar Kushwaha uint8_t max_multicast_filters; 634*1ebbe4fcSPrabhakar Kushwaha uint8_t max_vlan_filters; 635*1ebbe4fcSPrabhakar Kushwaha uint8_t max_qos_entries; 636*1ebbe4fcSPrabhakar Kushwaha uint8_t max_qos_key_size; 637*1ebbe4fcSPrabhakar Kushwaha uint8_t max_dist_key_size; 638*1ebbe4fcSPrabhakar Kushwaha uint8_t max_policers; 639*1ebbe4fcSPrabhakar Kushwaha uint8_t max_congestion_ctrl; 640*1ebbe4fcSPrabhakar Kushwaha struct dpni_ipr_cfg ipr_cfg; 641*1ebbe4fcSPrabhakar Kushwaha } adv; 642*1ebbe4fcSPrabhakar Kushwaha }; 643*1ebbe4fcSPrabhakar Kushwaha 644*1ebbe4fcSPrabhakar Kushwaha /** 645*1ebbe4fcSPrabhakar Kushwaha * dpni_create() - Create the DPNI object 646*1ebbe4fcSPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 647*1ebbe4fcSPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 648*1ebbe4fcSPrabhakar Kushwaha * @cfg: Configuration structure 649*1ebbe4fcSPrabhakar Kushwaha * @token: Returned token; use in subsequent API calls 650*1ebbe4fcSPrabhakar Kushwaha * 651*1ebbe4fcSPrabhakar Kushwaha * Create the DPNI object, allocate required resources and 652*1ebbe4fcSPrabhakar Kushwaha * perform required initialization. 653*1ebbe4fcSPrabhakar Kushwaha * 654*1ebbe4fcSPrabhakar Kushwaha * The object can be created either by declaring it in the 655*1ebbe4fcSPrabhakar Kushwaha * DPL file, or by calling this function. 656*1ebbe4fcSPrabhakar Kushwaha * 657*1ebbe4fcSPrabhakar Kushwaha * This function returns a unique authentication token, 658*1ebbe4fcSPrabhakar Kushwaha * associated with the specific object ID and the specific MC 659*1ebbe4fcSPrabhakar Kushwaha * portal; this token must be used in all subsequent calls to 660*1ebbe4fcSPrabhakar Kushwaha * this specific object. For objects that are created using the 661*1ebbe4fcSPrabhakar Kushwaha * DPL file, call dpni_open() function to get an authentication 662*1ebbe4fcSPrabhakar Kushwaha * token first. 663*1ebbe4fcSPrabhakar Kushwaha * 664*1ebbe4fcSPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 665*1ebbe4fcSPrabhakar Kushwaha */ 666*1ebbe4fcSPrabhakar Kushwaha int dpni_create(struct fsl_mc_io *mc_io, 667*1ebbe4fcSPrabhakar Kushwaha uint32_t cmd_flags, 668*1ebbe4fcSPrabhakar Kushwaha const struct dpni_cfg *cfg, 669*1ebbe4fcSPrabhakar Kushwaha uint16_t *token); 670*1ebbe4fcSPrabhakar Kushwaha 671*1ebbe4fcSPrabhakar Kushwaha /** 672*1ebbe4fcSPrabhakar Kushwaha * dpni_destroy() - Destroy the DPNI object and release all its resources. 673*1ebbe4fcSPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 674*1ebbe4fcSPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 675*1ebbe4fcSPrabhakar Kushwaha * @token: Token of DPNI object 676*1ebbe4fcSPrabhakar Kushwaha * 677*1ebbe4fcSPrabhakar Kushwaha * Return: '0' on Success; error code otherwise. 678*1ebbe4fcSPrabhakar Kushwaha */ 679*1ebbe4fcSPrabhakar Kushwaha int dpni_destroy(struct fsl_mc_io *mc_io, 680*1ebbe4fcSPrabhakar Kushwaha uint32_t cmd_flags, 681*1ebbe4fcSPrabhakar Kushwaha uint16_t token); 682*1ebbe4fcSPrabhakar Kushwaha 683*1ebbe4fcSPrabhakar Kushwaha /** 684a2a55e51SPrabhakar Kushwaha * struct dpni_pools_cfg - Structure representing buffer pools configuration 685a2a55e51SPrabhakar Kushwaha * @num_dpbp: Number of DPBPs 686a2a55e51SPrabhakar Kushwaha * @pools: Array of buffer pools parameters; The number of valid entries 687a2a55e51SPrabhakar Kushwaha * must match 'num_dpbp' value 688a2a55e51SPrabhakar Kushwaha */ 689a2a55e51SPrabhakar Kushwaha struct dpni_pools_cfg { 690a2a55e51SPrabhakar Kushwaha uint8_t num_dpbp; 691a2a55e51SPrabhakar Kushwaha /** 692a2a55e51SPrabhakar Kushwaha * struct pools - Buffer pools parameters 693a2a55e51SPrabhakar Kushwaha * @dpbp_id: DPBP object ID 694a2a55e51SPrabhakar Kushwaha * @buffer_size: Buffer size 69587457d11SPrabhakar Kushwaha * @backup_pool: Backup pool 696a2a55e51SPrabhakar Kushwaha */ 697a2a55e51SPrabhakar Kushwaha struct { 698a2a55e51SPrabhakar Kushwaha int dpbp_id; 699a2a55e51SPrabhakar Kushwaha uint16_t buffer_size; 70087457d11SPrabhakar Kushwaha int backup_pool; 701a2a55e51SPrabhakar Kushwaha } pools[DPNI_MAX_DPBP]; 702a2a55e51SPrabhakar Kushwaha }; 703a2a55e51SPrabhakar Kushwaha 704a2a55e51SPrabhakar Kushwaha /** 705a2a55e51SPrabhakar Kushwaha * dpni_set_pools() - Set buffer pools configuration 706a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 70787457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 708a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 709a2a55e51SPrabhakar Kushwaha * @cfg: Buffer pools configuration 710a2a55e51SPrabhakar Kushwaha * 711a2a55e51SPrabhakar Kushwaha * mandatory for DPNI operation 712a2a55e51SPrabhakar Kushwaha * warning:Allowed only when DPNI is disabled 713a2a55e51SPrabhakar Kushwaha * 714a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 715a2a55e51SPrabhakar Kushwaha */ 716a2a55e51SPrabhakar Kushwaha int dpni_set_pools(struct fsl_mc_io *mc_io, 71787457d11SPrabhakar Kushwaha uint32_t cmd_flags, 718a2a55e51SPrabhakar Kushwaha uint16_t token, 719a2a55e51SPrabhakar Kushwaha const struct dpni_pools_cfg *cfg); 720a2a55e51SPrabhakar Kushwaha 721a2a55e51SPrabhakar Kushwaha /** 722a2a55e51SPrabhakar Kushwaha * dpni_enable() - Enable the DPNI, allow sending and receiving frames. 723a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 72487457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 725a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 726a2a55e51SPrabhakar Kushwaha * 727a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 728a2a55e51SPrabhakar Kushwaha */ 72987457d11SPrabhakar Kushwaha int dpni_enable(struct fsl_mc_io *mc_io, 73087457d11SPrabhakar Kushwaha uint32_t cmd_flags, 73187457d11SPrabhakar Kushwaha uint16_t token); 732a2a55e51SPrabhakar Kushwaha 733a2a55e51SPrabhakar Kushwaha /** 734a2a55e51SPrabhakar Kushwaha * dpni_disable() - Disable the DPNI, stop sending and receiving frames. 735a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 73687457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 737a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 738a2a55e51SPrabhakar Kushwaha * 739a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 740a2a55e51SPrabhakar Kushwaha */ 74187457d11SPrabhakar Kushwaha int dpni_disable(struct fsl_mc_io *mc_io, 74287457d11SPrabhakar Kushwaha uint32_t cmd_flags, 74387457d11SPrabhakar Kushwaha uint16_t token); 744a2a55e51SPrabhakar Kushwaha 745a2a55e51SPrabhakar Kushwaha 746a2a55e51SPrabhakar Kushwaha /** 74787457d11SPrabhakar Kushwaha * dpni_reset() - Reset the DPNI, returns the object to initial state. 748a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 74987457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 750a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 751a2a55e51SPrabhakar Kushwaha * 752a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 753a2a55e51SPrabhakar Kushwaha */ 75487457d11SPrabhakar Kushwaha int dpni_reset(struct fsl_mc_io *mc_io, 75587457d11SPrabhakar Kushwaha uint32_t cmd_flags, 75687457d11SPrabhakar Kushwaha uint16_t token); 757a2a55e51SPrabhakar Kushwaha 758a2a55e51SPrabhakar Kushwaha /** 759a2a55e51SPrabhakar Kushwaha * struct dpni_attr - Structure representing DPNI attributes 760a2a55e51SPrabhakar Kushwaha * @id: DPNI object ID 761a2a55e51SPrabhakar Kushwaha * @version: DPNI version 762a2a55e51SPrabhakar Kushwaha * @start_hdr: Indicates the packet starting header for parsing 763a2a55e51SPrabhakar Kushwaha * @options: Mask of available options; reflects the value as was given in 764a2a55e51SPrabhakar Kushwaha * object's creation 765a2a55e51SPrabhakar Kushwaha * @max_senders: Maximum number of different senders; used as the number 766a2a55e51SPrabhakar Kushwaha * of dedicated Tx flows; 767a2a55e51SPrabhakar Kushwaha * @max_tcs: Maximum number of traffic classes (for both Tx and Rx) 768a2a55e51SPrabhakar Kushwaha * @max_dist_per_tc: Maximum distribution size per Rx traffic class; 769a2a55e51SPrabhakar Kushwaha * Set to the required value minus 1 770a2a55e51SPrabhakar Kushwaha * @max_unicast_filters: Maximum number of unicast filters 771a2a55e51SPrabhakar Kushwaha * @max_multicast_filters: Maximum number of multicast filters 772a2a55e51SPrabhakar Kushwaha * @max_vlan_filters: Maximum number of VLAN filters 773a2a55e51SPrabhakar Kushwaha * @max_qos_entries: if 'max_tcs > 1', declares the maximum entries in QoS table 774a2a55e51SPrabhakar Kushwaha * @max_qos_key_size: Maximum key size for the QoS look-up 775a2a55e51SPrabhakar Kushwaha * @max_dist_key_size: Maximum key size for the distribution look-up 7761f1c25c7SPrabhakar Kushwaha * @max_policers: Maximum number of policers; 7771f1c25c7SPrabhakar Kushwaha * @max_congestion_ctrl: Maximum number of congestion control groups (CGs); 778a2a55e51SPrabhakar Kushwaha * @ipr_cfg: IP reassembly configuration 779a2a55e51SPrabhakar Kushwaha */ 780a2a55e51SPrabhakar Kushwaha struct dpni_attr { 781a2a55e51SPrabhakar Kushwaha int id; 782a2a55e51SPrabhakar Kushwaha /** 783a2a55e51SPrabhakar Kushwaha * struct version - DPNI version 784a2a55e51SPrabhakar Kushwaha * @major: DPNI major version 785a2a55e51SPrabhakar Kushwaha * @minor: DPNI minor version 786a2a55e51SPrabhakar Kushwaha */ 787a2a55e51SPrabhakar Kushwaha struct { 788a2a55e51SPrabhakar Kushwaha uint16_t major; 789a2a55e51SPrabhakar Kushwaha uint16_t minor; 790a2a55e51SPrabhakar Kushwaha } version; 791a2a55e51SPrabhakar Kushwaha enum net_prot start_hdr; 7921f1c25c7SPrabhakar Kushwaha uint32_t options; 793a2a55e51SPrabhakar Kushwaha uint8_t max_senders; 794a2a55e51SPrabhakar Kushwaha uint8_t max_tcs; 795a2a55e51SPrabhakar Kushwaha uint8_t max_dist_per_tc[DPNI_MAX_TC]; 796a2a55e51SPrabhakar Kushwaha uint8_t max_unicast_filters; 797a2a55e51SPrabhakar Kushwaha uint8_t max_multicast_filters; 798a2a55e51SPrabhakar Kushwaha uint8_t max_vlan_filters; 799a2a55e51SPrabhakar Kushwaha uint8_t max_qos_entries; 800a2a55e51SPrabhakar Kushwaha uint8_t max_qos_key_size; 801a2a55e51SPrabhakar Kushwaha uint8_t max_dist_key_size; 8021f1c25c7SPrabhakar Kushwaha uint8_t max_policers; 8031f1c25c7SPrabhakar Kushwaha uint8_t max_congestion_ctrl; 804a2a55e51SPrabhakar Kushwaha struct dpni_ipr_cfg ipr_cfg; 805a2a55e51SPrabhakar Kushwaha }; 8061f1c25c7SPrabhakar Kushwaha 807a2a55e51SPrabhakar Kushwaha /** 808a2a55e51SPrabhakar Kushwaha * dpni_get_attributes() - Retrieve DPNI attributes. 80987457d11SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 81087457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 811a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 812a2a55e51SPrabhakar Kushwaha * @attr: Returned object's attributes 813a2a55e51SPrabhakar Kushwaha * 814a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 815a2a55e51SPrabhakar Kushwaha */ 816a2a55e51SPrabhakar Kushwaha int dpni_get_attributes(struct fsl_mc_io *mc_io, 81787457d11SPrabhakar Kushwaha uint32_t cmd_flags, 818a2a55e51SPrabhakar Kushwaha uint16_t token, 819a2a55e51SPrabhakar Kushwaha struct dpni_attr *attr); 820a2a55e51SPrabhakar Kushwaha 821a2a55e51SPrabhakar Kushwaha /* DPNI buffer layout modification options */ 822a2a55e51SPrabhakar Kushwaha 823a2a55e51SPrabhakar Kushwaha /* Select to modify the time-stamp setting */ 824a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_TIMESTAMP 0x00000001 825a2a55e51SPrabhakar Kushwaha /* Select to modify the parser-result setting; not applicable for Tx */ 826a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_PARSER_RESULT 0x00000002 827a2a55e51SPrabhakar Kushwaha /* Select to modify the frame-status setting */ 828a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_FRAME_STATUS 0x00000004 829a2a55e51SPrabhakar Kushwaha /* Select to modify the private-data-size setting */ 830a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_PRIVATE_DATA_SIZE 0x00000008 831a2a55e51SPrabhakar Kushwaha /* Select to modify the data-alignment setting */ 832a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_DATA_ALIGN 0x00000010 833a2a55e51SPrabhakar Kushwaha /* Select to modify the data-head-room setting */ 834a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_DATA_HEAD_ROOM 0x00000020 835a2a55e51SPrabhakar Kushwaha /*!< Select to modify the data-tail-room setting */ 836a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_DATA_TAIL_ROOM 0x00000040 837a2a55e51SPrabhakar Kushwaha 838a2a55e51SPrabhakar Kushwaha /** 839a2a55e51SPrabhakar Kushwaha * struct dpni_buffer_layout - Structure representing DPNI buffer layout 840a2a55e51SPrabhakar Kushwaha * @options: Flags representing the suggested modifications to the buffer 841a2a55e51SPrabhakar Kushwaha * layout; Use any combination of 'DPNI_BUF_LAYOUT_OPT_<X>' flags 842a2a55e51SPrabhakar Kushwaha * @pass_timestamp: Pass timestamp value 843a2a55e51SPrabhakar Kushwaha * @pass_parser_result: Pass parser results 844a2a55e51SPrabhakar Kushwaha * @pass_frame_status: Pass frame status 845a2a55e51SPrabhakar Kushwaha * @private_data_size: Size kept for private data (in bytes) 846a2a55e51SPrabhakar Kushwaha * @data_align: Data alignment 847a2a55e51SPrabhakar Kushwaha * @data_head_room: Data head room 848a2a55e51SPrabhakar Kushwaha * @data_tail_room: Data tail room 849a2a55e51SPrabhakar Kushwaha */ 850a2a55e51SPrabhakar Kushwaha struct dpni_buffer_layout { 851a2a55e51SPrabhakar Kushwaha uint32_t options; 852a2a55e51SPrabhakar Kushwaha int pass_timestamp; 853a2a55e51SPrabhakar Kushwaha int pass_parser_result; 854a2a55e51SPrabhakar Kushwaha int pass_frame_status; 855a2a55e51SPrabhakar Kushwaha uint16_t private_data_size; 856a2a55e51SPrabhakar Kushwaha uint16_t data_align; 857a2a55e51SPrabhakar Kushwaha uint16_t data_head_room; 858a2a55e51SPrabhakar Kushwaha uint16_t data_tail_room; 859a2a55e51SPrabhakar Kushwaha }; 860a2a55e51SPrabhakar Kushwaha 861a2a55e51SPrabhakar Kushwaha /** 862a2a55e51SPrabhakar Kushwaha * dpni_get_rx_buffer_layout() - Retrieve Rx buffer layout attributes. 863a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 86487457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 865a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 866a2a55e51SPrabhakar Kushwaha * @layout: Returns buffer layout attributes 867a2a55e51SPrabhakar Kushwaha * 868a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 869a2a55e51SPrabhakar Kushwaha */ 870a2a55e51SPrabhakar Kushwaha int dpni_get_rx_buffer_layout(struct fsl_mc_io *mc_io, 87187457d11SPrabhakar Kushwaha uint32_t cmd_flags, 872a2a55e51SPrabhakar Kushwaha uint16_t token, 873a2a55e51SPrabhakar Kushwaha struct dpni_buffer_layout *layout); 8741f1c25c7SPrabhakar Kushwaha 875a2a55e51SPrabhakar Kushwaha /** 876a2a55e51SPrabhakar Kushwaha * dpni_set_rx_buffer_layout() - Set Rx buffer layout configuration. 877a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 87887457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 879a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 880a2a55e51SPrabhakar Kushwaha * @layout: Buffer layout configuration 881a2a55e51SPrabhakar Kushwaha * 882a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 883a2a55e51SPrabhakar Kushwaha * 884a2a55e51SPrabhakar Kushwaha * @warning Allowed only when DPNI is disabled 885a2a55e51SPrabhakar Kushwaha */ 886a2a55e51SPrabhakar Kushwaha int dpni_set_rx_buffer_layout(struct fsl_mc_io *mc_io, 88787457d11SPrabhakar Kushwaha uint32_t cmd_flags, 888a2a55e51SPrabhakar Kushwaha uint16_t token, 889a2a55e51SPrabhakar Kushwaha const struct dpni_buffer_layout *layout); 890a2a55e51SPrabhakar Kushwaha 891a2a55e51SPrabhakar Kushwaha /** 892a2a55e51SPrabhakar Kushwaha * dpni_get_tx_buffer_layout() - Retrieve Tx buffer layout attributes. 893a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 89487457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 895a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 896a2a55e51SPrabhakar Kushwaha * @layout: Returns buffer layout attributes 897a2a55e51SPrabhakar Kushwaha * 898a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 899a2a55e51SPrabhakar Kushwaha */ 900a2a55e51SPrabhakar Kushwaha int dpni_get_tx_buffer_layout(struct fsl_mc_io *mc_io, 90187457d11SPrabhakar Kushwaha uint32_t cmd_flags, 902a2a55e51SPrabhakar Kushwaha uint16_t token, 903a2a55e51SPrabhakar Kushwaha struct dpni_buffer_layout *layout); 904a2a55e51SPrabhakar Kushwaha 905a2a55e51SPrabhakar Kushwaha /** 9061f1c25c7SPrabhakar Kushwaha * dpni_set_tx_buffer_layout() - Set Tx buffer layout configuration. 9071f1c25c7SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 90887457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 9091f1c25c7SPrabhakar Kushwaha * @token: Token of DPNI object 9101f1c25c7SPrabhakar Kushwaha * @layout: Buffer layout configuration 911a2a55e51SPrabhakar Kushwaha * 9121f1c25c7SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 913a2a55e51SPrabhakar Kushwaha * 914a2a55e51SPrabhakar Kushwaha * @warning Allowed only when DPNI is disabled 915a2a55e51SPrabhakar Kushwaha */ 916a2a55e51SPrabhakar Kushwaha int dpni_set_tx_buffer_layout(struct fsl_mc_io *mc_io, 91787457d11SPrabhakar Kushwaha uint32_t cmd_flags, 918a2a55e51SPrabhakar Kushwaha uint16_t token, 919a2a55e51SPrabhakar Kushwaha const struct dpni_buffer_layout *layout); 9201f1c25c7SPrabhakar Kushwaha 921a2a55e51SPrabhakar Kushwaha /** 922a2a55e51SPrabhakar Kushwaha * dpni_get_tx_conf_buffer_layout() - Retrieve Tx confirmation buffer layout 923a2a55e51SPrabhakar Kushwaha * attributes. 924a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 92587457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 926a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 927a2a55e51SPrabhakar Kushwaha * @layout: Returns buffer layout attributes 928a2a55e51SPrabhakar Kushwaha * 929a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 930a2a55e51SPrabhakar Kushwaha */ 931a2a55e51SPrabhakar Kushwaha int dpni_get_tx_conf_buffer_layout(struct fsl_mc_io *mc_io, 93287457d11SPrabhakar Kushwaha uint32_t cmd_flags, 933a2a55e51SPrabhakar Kushwaha uint16_t token, 934a2a55e51SPrabhakar Kushwaha struct dpni_buffer_layout *layout); 9351f1c25c7SPrabhakar Kushwaha 936a2a55e51SPrabhakar Kushwaha /** 937a2a55e51SPrabhakar Kushwaha * dpni_set_tx_conf_buffer_layout() - Set Tx confirmation buffer layout 938a2a55e51SPrabhakar Kushwaha * configuration. 939a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 94087457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 941a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 942a2a55e51SPrabhakar Kushwaha * @layout: Buffer layout configuration 943a2a55e51SPrabhakar Kushwaha * 944a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 945a2a55e51SPrabhakar Kushwaha * 946a2a55e51SPrabhakar Kushwaha * @warning Allowed only when DPNI is disabled 947a2a55e51SPrabhakar Kushwaha */ 948a2a55e51SPrabhakar Kushwaha int dpni_set_tx_conf_buffer_layout(struct fsl_mc_io *mc_io, 94987457d11SPrabhakar Kushwaha uint32_t cmd_flags, 950a2a55e51SPrabhakar Kushwaha uint16_t token, 951a2a55e51SPrabhakar Kushwaha const struct dpni_buffer_layout *layout); 9521f1c25c7SPrabhakar Kushwaha 953a2a55e51SPrabhakar Kushwaha /** 9541f1c25c7SPrabhakar Kushwaha * dpni_get_qdid() - Get the Queuing Destination ID (QDID) that should be used 9551f1c25c7SPrabhakar Kushwaha * for enqueue operations 956a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 95787457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 958a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 9591f1c25c7SPrabhakar Kushwaha * @qdid: Returned virtual QDID value that should be used as an argument 9601f1c25c7SPrabhakar Kushwaha * in all enqueue operations 961a2a55e51SPrabhakar Kushwaha * 962a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 963a2a55e51SPrabhakar Kushwaha */ 96487457d11SPrabhakar Kushwaha int dpni_get_qdid(struct fsl_mc_io *mc_io, 96587457d11SPrabhakar Kushwaha uint32_t cmd_flags, 96687457d11SPrabhakar Kushwaha uint16_t token, 96787457d11SPrabhakar Kushwaha uint16_t *qdid); 968a2a55e51SPrabhakar Kushwaha 969a2a55e51SPrabhakar Kushwaha /** 970a2a55e51SPrabhakar Kushwaha * dpni_get_tx_data_offset() - Get the Tx data offset (from start of buffer) 971a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 97287457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 973a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 974a2a55e51SPrabhakar Kushwaha * @data_offset: Tx data offset (from start of buffer) 975a2a55e51SPrabhakar Kushwaha * 976a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 977a2a55e51SPrabhakar Kushwaha */ 978a2a55e51SPrabhakar Kushwaha int dpni_get_tx_data_offset(struct fsl_mc_io *mc_io, 97987457d11SPrabhakar Kushwaha uint32_t cmd_flags, 980a2a55e51SPrabhakar Kushwaha uint16_t token, 981a2a55e51SPrabhakar Kushwaha uint16_t *data_offset); 982a2a55e51SPrabhakar Kushwaha 983a2a55e51SPrabhakar Kushwaha /** 984a2a55e51SPrabhakar Kushwaha * enum dpni_counter - DPNI counter types 985a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_FRAME: Counts ingress frames 986a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_BYTE: Counts ingress bytes 987a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_FRAME_DROP: Counts ingress frames dropped due to explicit 988a2a55e51SPrabhakar Kushwaha * 'drop' setting 989a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_FRAME_DISCARD: Counts ingress frames discarded due to errors 990a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_MCAST_FRAME: Counts ingress multicast frames 991a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_MCAST_BYTE: Counts ingress multicast bytes 992a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_BCAST_FRAME: Counts ingress broadcast frames 993a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_BCAST_BYTES: Counts ingress broadcast bytes 994a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_EGR_FRAME: Counts egress frames 995a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_EGR_BYTE: Counts egress bytes 996a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_EGR_FRAME_DISCARD: Counts egress frames discarded due to errors 997a2a55e51SPrabhakar Kushwaha */ 998a2a55e51SPrabhakar Kushwaha enum dpni_counter { 999a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_FRAME = 0x0, 1000a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_BYTE = 0x1, 1001a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_FRAME_DROP = 0x2, 1002a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_FRAME_DISCARD = 0x3, 1003a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_MCAST_FRAME = 0x4, 1004a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_MCAST_BYTE = 0x5, 1005a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_BCAST_FRAME = 0x6, 1006a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_BCAST_BYTES = 0x7, 1007a2a55e51SPrabhakar Kushwaha DPNI_CNT_EGR_FRAME = 0x8, 1008a2a55e51SPrabhakar Kushwaha DPNI_CNT_EGR_BYTE = 0x9, 1009a2a55e51SPrabhakar Kushwaha DPNI_CNT_EGR_FRAME_DISCARD = 0xa 1010a2a55e51SPrabhakar Kushwaha }; 1011a2a55e51SPrabhakar Kushwaha 1012a2a55e51SPrabhakar Kushwaha /** 1013a2a55e51SPrabhakar Kushwaha * dpni_get_counter() - Read a specific DPNI counter 1014a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 101587457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1016a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1017a2a55e51SPrabhakar Kushwaha * @counter: The requested counter 1018a2a55e51SPrabhakar Kushwaha * @value: Returned counter's current value 1019a2a55e51SPrabhakar Kushwaha * 1020a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1021a2a55e51SPrabhakar Kushwaha */ 1022a2a55e51SPrabhakar Kushwaha int dpni_get_counter(struct fsl_mc_io *mc_io, 102387457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1024a2a55e51SPrabhakar Kushwaha uint16_t token, 1025a2a55e51SPrabhakar Kushwaha enum dpni_counter counter, 1026a2a55e51SPrabhakar Kushwaha uint64_t *value); 1027a2a55e51SPrabhakar Kushwaha 1028a2a55e51SPrabhakar Kushwaha /** 1029a2a55e51SPrabhakar Kushwaha * dpni_set_counter() - Set (or clear) a specific DPNI counter 1030a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 103187457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1032a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1033a2a55e51SPrabhakar Kushwaha * @counter: The requested counter 1034a2a55e51SPrabhakar Kushwaha * @value: New counter value; typically pass '0' for resetting 1035a2a55e51SPrabhakar Kushwaha * the counter. 1036a2a55e51SPrabhakar Kushwaha * 1037a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1038a2a55e51SPrabhakar Kushwaha */ 1039a2a55e51SPrabhakar Kushwaha int dpni_set_counter(struct fsl_mc_io *mc_io, 104087457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1041a2a55e51SPrabhakar Kushwaha uint16_t token, 1042a2a55e51SPrabhakar Kushwaha enum dpni_counter counter, 1043a2a55e51SPrabhakar Kushwaha uint64_t value); 10441f1c25c7SPrabhakar Kushwaha 10451f1c25c7SPrabhakar Kushwaha /* Enable auto-negotiation */ 10461f1c25c7SPrabhakar Kushwaha #define DPNI_LINK_OPT_AUTONEG 0x0000000000000001ULL 10471f1c25c7SPrabhakar Kushwaha /* Enable half-duplex mode */ 10481f1c25c7SPrabhakar Kushwaha #define DPNI_LINK_OPT_HALF_DUPLEX 0x0000000000000002ULL 10491f1c25c7SPrabhakar Kushwaha /* Enable pause frames */ 10501f1c25c7SPrabhakar Kushwaha #define DPNI_LINK_OPT_PAUSE 0x0000000000000004ULL 10511f1c25c7SPrabhakar Kushwaha /* Enable a-symmetric pause frames */ 10521f1c25c7SPrabhakar Kushwaha #define DPNI_LINK_OPT_ASYM_PAUSE 0x0000000000000008ULL 10531f1c25c7SPrabhakar Kushwaha 1054a2a55e51SPrabhakar Kushwaha /** 1055a2a55e51SPrabhakar Kushwaha * struct - Structure representing DPNI link configuration 1056a2a55e51SPrabhakar Kushwaha * @rate: Rate 1057a2a55e51SPrabhakar Kushwaha * @options: Mask of available options; use 'DPNI_LINK_OPT_<X>' values 1058a2a55e51SPrabhakar Kushwaha */ 1059a2a55e51SPrabhakar Kushwaha struct dpni_link_cfg { 10601f1c25c7SPrabhakar Kushwaha uint32_t rate; 1061a2a55e51SPrabhakar Kushwaha uint64_t options; 1062a2a55e51SPrabhakar Kushwaha }; 1063a2a55e51SPrabhakar Kushwaha 1064a2a55e51SPrabhakar Kushwaha /** 1065a2a55e51SPrabhakar Kushwaha * dpni_set_link_cfg() - set the link configuration. 1066a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 106787457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1068a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1069a2a55e51SPrabhakar Kushwaha * @cfg: Link configuration 1070a2a55e51SPrabhakar Kushwaha * 1071a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1072a2a55e51SPrabhakar Kushwaha */ 1073a2a55e51SPrabhakar Kushwaha int dpni_set_link_cfg(struct fsl_mc_io *mc_io, 107487457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1075a2a55e51SPrabhakar Kushwaha uint16_t token, 10761f1c25c7SPrabhakar Kushwaha const struct dpni_link_cfg *cfg); 1077a2a55e51SPrabhakar Kushwaha 1078a2a55e51SPrabhakar Kushwaha /** 1079a2a55e51SPrabhakar Kushwaha * struct dpni_link_state - Structure representing DPNI link state 1080a2a55e51SPrabhakar Kushwaha * @rate: Rate 1081a2a55e51SPrabhakar Kushwaha * @options: Mask of available options; use 'DPNI_LINK_OPT_<X>' values 1082a2a55e51SPrabhakar Kushwaha * @up: Link state; '0' for down, '1' for up 1083a2a55e51SPrabhakar Kushwaha */ 1084a2a55e51SPrabhakar Kushwaha struct dpni_link_state { 10851f1c25c7SPrabhakar Kushwaha uint32_t rate; 1086a2a55e51SPrabhakar Kushwaha uint64_t options; 1087a2a55e51SPrabhakar Kushwaha int up; 1088a2a55e51SPrabhakar Kushwaha }; 1089a2a55e51SPrabhakar Kushwaha 1090a2a55e51SPrabhakar Kushwaha /** 1091a2a55e51SPrabhakar Kushwaha * dpni_get_link_state() - Return the link state (either up or down) 1092a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 109387457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1094a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1095a2a55e51SPrabhakar Kushwaha * @state: Returned link state; 1096a2a55e51SPrabhakar Kushwaha * 1097a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1098a2a55e51SPrabhakar Kushwaha */ 1099a2a55e51SPrabhakar Kushwaha int dpni_get_link_state(struct fsl_mc_io *mc_io, 110087457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1101a2a55e51SPrabhakar Kushwaha uint16_t token, 1102a2a55e51SPrabhakar Kushwaha struct dpni_link_state *state); 1103a2a55e51SPrabhakar Kushwaha 1104a2a55e51SPrabhakar Kushwaha /** 1105a2a55e51SPrabhakar Kushwaha * dpni_set_primary_mac_addr() - Set the primary MAC address 1106a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 110787457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1108a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1109a2a55e51SPrabhakar Kushwaha * @mac_addr: MAC address to set as primary address 1110a2a55e51SPrabhakar Kushwaha * 1111a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1112a2a55e51SPrabhakar Kushwaha */ 1113a2a55e51SPrabhakar Kushwaha int dpni_set_primary_mac_addr(struct fsl_mc_io *mc_io, 111487457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1115a2a55e51SPrabhakar Kushwaha uint16_t token, 1116a2a55e51SPrabhakar Kushwaha const uint8_t mac_addr[6]); 11171f1c25c7SPrabhakar Kushwaha 1118a2a55e51SPrabhakar Kushwaha /** 1119a2a55e51SPrabhakar Kushwaha * dpni_get_primary_mac_addr() - Get the primary MAC address 1120a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 112187457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1122a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1123a2a55e51SPrabhakar Kushwaha * @mac_addr: Returned MAC address 1124a2a55e51SPrabhakar Kushwaha * 1125a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1126a2a55e51SPrabhakar Kushwaha */ 1127a2a55e51SPrabhakar Kushwaha int dpni_get_primary_mac_addr(struct fsl_mc_io *mc_io, 112887457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1129a2a55e51SPrabhakar Kushwaha uint16_t token, 1130a2a55e51SPrabhakar Kushwaha uint8_t mac_addr[6]); 11311f1c25c7SPrabhakar Kushwaha 1132a2a55e51SPrabhakar Kushwaha /** 1133a2a55e51SPrabhakar Kushwaha * dpni_add_mac_addr() - Add MAC address filter 1134a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 113587457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1136a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1137a2a55e51SPrabhakar Kushwaha * @mac_addr: MAC address to add 1138a2a55e51SPrabhakar Kushwaha * 1139a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1140a2a55e51SPrabhakar Kushwaha */ 1141a2a55e51SPrabhakar Kushwaha int dpni_add_mac_addr(struct fsl_mc_io *mc_io, 114287457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1143a2a55e51SPrabhakar Kushwaha uint16_t token, 1144a2a55e51SPrabhakar Kushwaha const uint8_t mac_addr[6]); 1145a2a55e51SPrabhakar Kushwaha 1146a2a55e51SPrabhakar Kushwaha /** 1147a2a55e51SPrabhakar Kushwaha * dpni_remove_mac_addr() - Remove MAC address filter 1148a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 114987457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1150a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1151a2a55e51SPrabhakar Kushwaha * @mac_addr: MAC address to remove 1152a2a55e51SPrabhakar Kushwaha * 1153a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1154a2a55e51SPrabhakar Kushwaha */ 1155a2a55e51SPrabhakar Kushwaha int dpni_remove_mac_addr(struct fsl_mc_io *mc_io, 115687457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1157a2a55e51SPrabhakar Kushwaha uint16_t token, 1158a2a55e51SPrabhakar Kushwaha const uint8_t mac_addr[6]); 1159a2a55e51SPrabhakar Kushwaha 1160a2a55e51SPrabhakar Kushwaha /** 1161a2a55e51SPrabhakar Kushwaha * enum dpni_dest - DPNI destination types 11621f1c25c7SPrabhakar Kushwaha * @DPNI_DEST_NONE: Unassigned destination; The queue is set in parked mode and 1163a2a55e51SPrabhakar Kushwaha * does not generate FQDAN notifications; user is expected to 1164a2a55e51SPrabhakar Kushwaha * dequeue from the queue based on polling or other user-defined 1165a2a55e51SPrabhakar Kushwaha * method 1166a2a55e51SPrabhakar Kushwaha * @DPNI_DEST_DPIO: The queue is set in schedule mode and generates FQDAN 1167a2a55e51SPrabhakar Kushwaha * notifications to the specified DPIO; user is expected to dequeue 1168a2a55e51SPrabhakar Kushwaha * from the queue only after notification is received 1169a2a55e51SPrabhakar Kushwaha * @DPNI_DEST_DPCON: The queue is set in schedule mode and does not generate 1170a2a55e51SPrabhakar Kushwaha * FQDAN notifications, but is connected to the specified DPCON 1171a2a55e51SPrabhakar Kushwaha * object; user is expected to dequeue from the DPCON channel 1172a2a55e51SPrabhakar Kushwaha */ 1173a2a55e51SPrabhakar Kushwaha enum dpni_dest { 1174a2a55e51SPrabhakar Kushwaha DPNI_DEST_NONE = 0, 1175a2a55e51SPrabhakar Kushwaha DPNI_DEST_DPIO = 1, 1176a2a55e51SPrabhakar Kushwaha DPNI_DEST_DPCON = 2 1177a2a55e51SPrabhakar Kushwaha }; 1178a2a55e51SPrabhakar Kushwaha 1179a2a55e51SPrabhakar Kushwaha /** 1180a2a55e51SPrabhakar Kushwaha * struct dpni_dest_cfg - Structure representing DPNI destination parameters 1181a2a55e51SPrabhakar Kushwaha * @dest_type: Destination type 1182a2a55e51SPrabhakar Kushwaha * @dest_id: Either DPIO ID or DPCON ID, depending on the destination type 1183a2a55e51SPrabhakar Kushwaha * @priority: Priority selection within the DPIO or DPCON channel; valid values 1184a2a55e51SPrabhakar Kushwaha * are 0-1 or 0-7, depending on the number of priorities in that 1185a2a55e51SPrabhakar Kushwaha * channel; not relevant for 'DPNI_DEST_NONE' option 1186a2a55e51SPrabhakar Kushwaha */ 1187a2a55e51SPrabhakar Kushwaha struct dpni_dest_cfg { 1188a2a55e51SPrabhakar Kushwaha enum dpni_dest dest_type; 1189a2a55e51SPrabhakar Kushwaha int dest_id; 1190a2a55e51SPrabhakar Kushwaha uint8_t priority; 1191a2a55e51SPrabhakar Kushwaha }; 1192a2a55e51SPrabhakar Kushwaha 11931f1c25c7SPrabhakar Kushwaha /** 11941f1c25c7SPrabhakar Kushwaha * enum dpni_flc_type - DPNI FLC types 11951f1c25c7SPrabhakar Kushwaha * @DPNI_FLC_USER_DEFINED: select the FLC to be used for user defined value 11961f1c25c7SPrabhakar Kushwaha * @DPNI_FLC_STASH: select the FLC to be used for stash control 11971f1c25c7SPrabhakar Kushwaha */ 11981f1c25c7SPrabhakar Kushwaha enum dpni_flc_type { 11991f1c25c7SPrabhakar Kushwaha DPNI_FLC_USER_DEFINED = 0, 12001f1c25c7SPrabhakar Kushwaha DPNI_FLC_STASH = 1, 12011f1c25c7SPrabhakar Kushwaha }; 12021f1c25c7SPrabhakar Kushwaha 12031f1c25c7SPrabhakar Kushwaha /** 12041f1c25c7SPrabhakar Kushwaha * enum dpni_stash_size - DPNI FLC stashing size 12051f1c25c7SPrabhakar Kushwaha * @DPNI_STASH_SIZE_0B: no stash 12061f1c25c7SPrabhakar Kushwaha * @DPNI_STASH_SIZE_64B: stashes 64 bytes 12071f1c25c7SPrabhakar Kushwaha * @DPNI_STASH_SIZE_128B: stashes 128 bytes 12081f1c25c7SPrabhakar Kushwaha * @DPNI_STASH_SIZE_192B: stashes 192 bytes 12091f1c25c7SPrabhakar Kushwaha */ 12101f1c25c7SPrabhakar Kushwaha enum dpni_stash_size { 12111f1c25c7SPrabhakar Kushwaha DPNI_STASH_SIZE_0B = 0, 12121f1c25c7SPrabhakar Kushwaha DPNI_STASH_SIZE_64B = 1, 12131f1c25c7SPrabhakar Kushwaha DPNI_STASH_SIZE_128B = 2, 12141f1c25c7SPrabhakar Kushwaha DPNI_STASH_SIZE_192B = 3, 12151f1c25c7SPrabhakar Kushwaha }; 12161f1c25c7SPrabhakar Kushwaha 12171f1c25c7SPrabhakar Kushwaha /* DPNI FLC stash options */ 12181f1c25c7SPrabhakar Kushwaha 12191f1c25c7SPrabhakar Kushwaha /* stashes the whole annotation area (up to 192 bytes) */ 12201f1c25c7SPrabhakar Kushwaha #define DPNI_FLC_STASH_FRAME_ANNOTATION 0x00000001 12211f1c25c7SPrabhakar Kushwaha 12221f1c25c7SPrabhakar Kushwaha /** 12231f1c25c7SPrabhakar Kushwaha * struct dpni_flc_cfg - Structure representing DPNI FLC configuration 12241f1c25c7SPrabhakar Kushwaha * @flc_type: FLC type 12251f1c25c7SPrabhakar Kushwaha * @options: Mask of available options; 12261f1c25c7SPrabhakar Kushwaha * use 'DPNI_FLC_STASH_<X>' values 12271f1c25c7SPrabhakar Kushwaha * @frame_data_size: Size of frame data to be stashed 12281f1c25c7SPrabhakar Kushwaha * @flow_context_size: Size of flow context to be stashed 12291f1c25c7SPrabhakar Kushwaha * @flow_context: 1. In case flc_type is 'DPNI_FLC_USER_DEFINED': 12301f1c25c7SPrabhakar Kushwaha * this value will be provided in the frame descriptor 12311f1c25c7SPrabhakar Kushwaha * (FD[FLC]) 12321f1c25c7SPrabhakar Kushwaha * 2. In case flc_type is 'DPNI_FLC_STASH': 12331f1c25c7SPrabhakar Kushwaha * this value will be I/O virtual address of the 12341f1c25c7SPrabhakar Kushwaha * flow-context; 12351f1c25c7SPrabhakar Kushwaha * Must be cacheline-aligned and DMA-able memory 12361f1c25c7SPrabhakar Kushwaha */ 12371f1c25c7SPrabhakar Kushwaha struct dpni_flc_cfg { 12381f1c25c7SPrabhakar Kushwaha enum dpni_flc_type flc_type; 12391f1c25c7SPrabhakar Kushwaha uint32_t options; 12401f1c25c7SPrabhakar Kushwaha enum dpni_stash_size frame_data_size; 12411f1c25c7SPrabhakar Kushwaha enum dpni_stash_size flow_context_size; 12421f1c25c7SPrabhakar Kushwaha uint64_t flow_context; 12431f1c25c7SPrabhakar Kushwaha }; 12441f1c25c7SPrabhakar Kushwaha 1245a2a55e51SPrabhakar Kushwaha /* DPNI queue modification options */ 1246a2a55e51SPrabhakar Kushwaha 1247a2a55e51SPrabhakar Kushwaha /* Select to modify the user's context associated with the queue */ 1248a2a55e51SPrabhakar Kushwaha #define DPNI_QUEUE_OPT_USER_CTX 0x00000001 1249a2a55e51SPrabhakar Kushwaha /* Select to modify the queue's destination */ 1250a2a55e51SPrabhakar Kushwaha #define DPNI_QUEUE_OPT_DEST 0x00000002 12511f1c25c7SPrabhakar Kushwaha /** Select to modify the flow-context parameters; 12521f1c25c7SPrabhakar Kushwaha * not applicable for Tx-conf/Err queues as the FD comes from the user 12531f1c25c7SPrabhakar Kushwaha */ 12541f1c25c7SPrabhakar Kushwaha #define DPNI_QUEUE_OPT_FLC 0x00000004 125587457d11SPrabhakar Kushwaha /* Select to modify the queue's order preservation */ 125687457d11SPrabhakar Kushwaha #define DPNI_QUEUE_OPT_ORDER_PRESERVATION 0x00000008 1257a2a55e51SPrabhakar Kushwaha 1258a2a55e51SPrabhakar Kushwaha /** 1259a2a55e51SPrabhakar Kushwaha * struct dpni_queue_cfg - Structure representing queue configuration 1260a2a55e51SPrabhakar Kushwaha * @options: Flags representing the suggested modifications to the queue; 1261a2a55e51SPrabhakar Kushwaha * Use any combination of 'DPNI_QUEUE_OPT_<X>' flags 1262a2a55e51SPrabhakar Kushwaha * @user_ctx: User context value provided in the frame descriptor of each 1263a2a55e51SPrabhakar Kushwaha * dequeued frame; valid only if 'DPNI_QUEUE_OPT_USER_CTX' 1264a2a55e51SPrabhakar Kushwaha * is contained in 'options' 1265a2a55e51SPrabhakar Kushwaha * @dest_cfg: Queue destination parameters; 1266a2a55e51SPrabhakar Kushwaha * valid only if 'DPNI_QUEUE_OPT_DEST' is contained in 'options' 12671f1c25c7SPrabhakar Kushwaha * @flc_cfg: Flow context configuration; in case the TC's distribution 12681f1c25c7SPrabhakar Kushwaha * is either NONE or HASH the FLC's settings of flow#0 are used. 12691f1c25c7SPrabhakar Kushwaha * in the case of FS (flow-steering) the flow's FLC settings 12701f1c25c7SPrabhakar Kushwaha * are used. 12711f1c25c7SPrabhakar Kushwaha * valid only if 'DPNI_QUEUE_OPT_FLC' is contained in 'options' 127287457d11SPrabhakar Kushwaha * @order_preservation_en: enable/disable order preservation; 127387457d11SPrabhakar Kushwaha * valid only if 'DPNI_QUEUE_OPT_ORDER_PRESERVATION' is contained 127487457d11SPrabhakar Kushwaha * in 'options' 1275a2a55e51SPrabhakar Kushwaha */ 1276a2a55e51SPrabhakar Kushwaha struct dpni_queue_cfg { 1277a2a55e51SPrabhakar Kushwaha uint32_t options; 1278a2a55e51SPrabhakar Kushwaha uint64_t user_ctx; 1279a2a55e51SPrabhakar Kushwaha struct dpni_dest_cfg dest_cfg; 12801f1c25c7SPrabhakar Kushwaha struct dpni_flc_cfg flc_cfg; 128187457d11SPrabhakar Kushwaha int order_preservation_en; 1282a2a55e51SPrabhakar Kushwaha }; 1283a2a55e51SPrabhakar Kushwaha 1284a2a55e51SPrabhakar Kushwaha /** 1285a2a55e51SPrabhakar Kushwaha * struct dpni_queue_attr - Structure representing queue attributes 1286a2a55e51SPrabhakar Kushwaha * @user_ctx: User context value provided in the frame descriptor of each 1287a2a55e51SPrabhakar Kushwaha * dequeued frame 1288a2a55e51SPrabhakar Kushwaha * @dest_cfg: Queue destination configuration 12891f1c25c7SPrabhakar Kushwaha * @flc_cfg: Flow context configuration 129087457d11SPrabhakar Kushwaha * @order_preservation_en: enable/disable order preservation 1291a2a55e51SPrabhakar Kushwaha * @fqid: Virtual fqid value to be used for dequeue operations 1292a2a55e51SPrabhakar Kushwaha */ 1293a2a55e51SPrabhakar Kushwaha struct dpni_queue_attr { 1294a2a55e51SPrabhakar Kushwaha uint64_t user_ctx; 1295a2a55e51SPrabhakar Kushwaha struct dpni_dest_cfg dest_cfg; 12961f1c25c7SPrabhakar Kushwaha struct dpni_flc_cfg flc_cfg; 129787457d11SPrabhakar Kushwaha int order_preservation_en; 1298a2a55e51SPrabhakar Kushwaha uint32_t fqid; 1299a2a55e51SPrabhakar Kushwaha }; 1300a2a55e51SPrabhakar Kushwaha 1301a2a55e51SPrabhakar Kushwaha /* DPNI Tx flow modification options */ 1302a2a55e51SPrabhakar Kushwaha 1303a2a55e51SPrabhakar Kushwaha /* Select to modify the settings for dedicate Tx confirmation/error */ 1304a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_TX_CONF_ERROR 0x00000001 1305a2a55e51SPrabhakar Kushwaha /*!< Select to modify the Tx confirmation and/or error setting */ 1306a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_ONLY_TX_ERROR 0x00000002 1307a2a55e51SPrabhakar Kushwaha /*!< Select to modify the queue configuration */ 1308a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_QUEUE 0x00000004 1309a2a55e51SPrabhakar Kushwaha /*!< Select to modify the L3 checksum generation setting */ 1310a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_L3_CHKSUM_GEN 0x00000010 1311a2a55e51SPrabhakar Kushwaha /*!< Select to modify the L4 checksum generation setting */ 1312a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_L4_CHKSUM_GEN 0x00000020 1313a2a55e51SPrabhakar Kushwaha 1314a2a55e51SPrabhakar Kushwaha /** 1315a2a55e51SPrabhakar Kushwaha * struct dpni_tx_flow_cfg - Structure representing Tx flow configuration 1316a2a55e51SPrabhakar Kushwaha * @options: Flags representing the suggested modifications to the Tx flow; 1317a2a55e51SPrabhakar Kushwaha * Use any combination 'DPNI_TX_FLOW_OPT_<X>' flags 1318a2a55e51SPrabhakar Kushwaha * @conf_err_cfg: Tx confirmation and error configuration; these settings are 1319a2a55e51SPrabhakar Kushwaha * ignored if 'DPNI_OPT_PRIVATE_TX_CONF_ERROR_DISABLED' was set at 1320a2a55e51SPrabhakar Kushwaha * DPNI creation 1321a2a55e51SPrabhakar Kushwaha * @l3_chksum_gen: Set to '1' to enable L3 checksum generation; '0' to disable; 1322a2a55e51SPrabhakar Kushwaha * valid only if 'DPNI_TX_FLOW_OPT_L3_CHKSUM_GEN' is contained in 1323a2a55e51SPrabhakar Kushwaha * 'options' 1324a2a55e51SPrabhakar Kushwaha * @l4_chksum_gen: Set to '1' to enable L4 checksum generation; '0' to disable; 1325a2a55e51SPrabhakar Kushwaha * valid only if 'DPNI_TX_FLOW_OPT_L4_CHKSUM_GEN' is contained in 1326a2a55e51SPrabhakar Kushwaha * 'options' 1327a2a55e51SPrabhakar Kushwaha */ 1328a2a55e51SPrabhakar Kushwaha struct dpni_tx_flow_cfg { 1329a2a55e51SPrabhakar Kushwaha uint32_t options; 1330a2a55e51SPrabhakar Kushwaha /** 1331a2a55e51SPrabhakar Kushwaha * struct cnf_err_cfg - Tx confirmation and error configuration 1332a2a55e51SPrabhakar Kushwaha * @use_default_queue: Set to '1' to use the common (default) Tx 1333a2a55e51SPrabhakar Kushwaha * confirmation and error queue; Set to '0' to use the 1334a2a55e51SPrabhakar Kushwaha * private Tx confirmation and error queue; valid only if 1335a2a55e51SPrabhakar Kushwaha * 'DPNI_TX_FLOW_OPT_TX_CONF_ERROR' is contained in 1336a2a55e51SPrabhakar Kushwaha * 'options' 1337a2a55e51SPrabhakar Kushwaha * @errors_only: Set to '1' to report back only error frames; 1338a2a55e51SPrabhakar Kushwaha * Set to '0' to confirm transmission/error for all 1339a2a55e51SPrabhakar Kushwaha * transmitted frames; 1340a2a55e51SPrabhakar Kushwaha * valid only if 'DPNI_TX_FLOW_OPT_ONLY_TX_ERROR' is 1341a2a55e51SPrabhakar Kushwaha * contained in 'options' and 'use_default_queue = 0'; 1342a2a55e51SPrabhakar Kushwaha * @queue_cfg: Queue configuration; valid only if 1343a2a55e51SPrabhakar Kushwaha * 'DPNI_TX_FLOW_OPT_QUEUE' is contained in 'options' 1344a2a55e51SPrabhakar Kushwaha */ 1345a2a55e51SPrabhakar Kushwaha struct { 1346a2a55e51SPrabhakar Kushwaha int use_default_queue; 1347a2a55e51SPrabhakar Kushwaha int errors_only; 1348a2a55e51SPrabhakar Kushwaha struct dpni_queue_cfg queue_cfg; 1349a2a55e51SPrabhakar Kushwaha } conf_err_cfg; 1350a2a55e51SPrabhakar Kushwaha int l3_chksum_gen; 1351a2a55e51SPrabhakar Kushwaha int l4_chksum_gen; 1352a2a55e51SPrabhakar Kushwaha }; 1353a2a55e51SPrabhakar Kushwaha 1354a2a55e51SPrabhakar Kushwaha /** 1355a2a55e51SPrabhakar Kushwaha * dpni_set_tx_flow() - Set Tx flow configuration 1356a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 135787457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1358a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1359a2a55e51SPrabhakar Kushwaha * @flow_id: Provides (or returns) the sender's flow ID; 1360a2a55e51SPrabhakar Kushwaha * for each new sender set (*flow_id) to 1361a2a55e51SPrabhakar Kushwaha * 'DPNI_NEW_FLOW_ID' to generate a new flow_id; 1362a2a55e51SPrabhakar Kushwaha * this ID should be used as the QDBIN argument 1363a2a55e51SPrabhakar Kushwaha * in enqueue operations 1364a2a55e51SPrabhakar Kushwaha * @cfg: Tx flow configuration 1365a2a55e51SPrabhakar Kushwaha * 1366a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1367a2a55e51SPrabhakar Kushwaha */ 1368a2a55e51SPrabhakar Kushwaha int dpni_set_tx_flow(struct fsl_mc_io *mc_io, 136987457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1370a2a55e51SPrabhakar Kushwaha uint16_t token, 1371a2a55e51SPrabhakar Kushwaha uint16_t *flow_id, 1372a2a55e51SPrabhakar Kushwaha const struct dpni_tx_flow_cfg *cfg); 1373a2a55e51SPrabhakar Kushwaha 1374a2a55e51SPrabhakar Kushwaha /** 1375a2a55e51SPrabhakar Kushwaha * struct dpni_tx_flow_attr - Structure representing Tx flow attributes 1376a2a55e51SPrabhakar Kushwaha * @conf_err_attr: Tx confirmation and error attributes 1377a2a55e51SPrabhakar Kushwaha * @l3_chksum_gen: '1' if L3 checksum generation is enabled; '0' if disabled 1378a2a55e51SPrabhakar Kushwaha * @l4_chksum_gen: '1' if L4 checksum generation is enabled; '0' if disabled 1379a2a55e51SPrabhakar Kushwaha */ 1380a2a55e51SPrabhakar Kushwaha struct dpni_tx_flow_attr { 1381a2a55e51SPrabhakar Kushwaha /** 1382a2a55e51SPrabhakar Kushwaha * struct conf_err_attr - Tx confirmation and error attributes 1383a2a55e51SPrabhakar Kushwaha * @use_default_queue: '1' if using common (default) Tx confirmation and 1384a2a55e51SPrabhakar Kushwaha * error queue; 1385a2a55e51SPrabhakar Kushwaha * '0' if using private Tx confirmation and error 1386a2a55e51SPrabhakar Kushwaha * queue 1387a2a55e51SPrabhakar Kushwaha * @errors_only: '1' if only error frames are reported back; '0' if all 1388a2a55e51SPrabhakar Kushwaha * transmitted frames are confirmed 1389a2a55e51SPrabhakar Kushwaha * @queue_attr: Queue attributes 1390a2a55e51SPrabhakar Kushwaha */ 1391a2a55e51SPrabhakar Kushwaha struct { 1392a2a55e51SPrabhakar Kushwaha int use_default_queue; 1393a2a55e51SPrabhakar Kushwaha int errors_only; 1394a2a55e51SPrabhakar Kushwaha struct dpni_queue_attr queue_attr; 1395a2a55e51SPrabhakar Kushwaha } conf_err_attr; 1396a2a55e51SPrabhakar Kushwaha int l3_chksum_gen; 1397a2a55e51SPrabhakar Kushwaha int l4_chksum_gen; 1398a2a55e51SPrabhakar Kushwaha }; 1399a2a55e51SPrabhakar Kushwaha 1400a2a55e51SPrabhakar Kushwaha /** 1401a2a55e51SPrabhakar Kushwaha * dpni_get_tx_flow() - Get Tx flow attributes 1402a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 140387457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1404a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1405a2a55e51SPrabhakar Kushwaha * @flow_id: The sender's flow ID, as returned by the 1406a2a55e51SPrabhakar Kushwaha * dpni_set_tx_flow() function 1407a2a55e51SPrabhakar Kushwaha * @attr: Returned Tx flow attributes 1408a2a55e51SPrabhakar Kushwaha * 1409a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1410a2a55e51SPrabhakar Kushwaha */ 1411a2a55e51SPrabhakar Kushwaha int dpni_get_tx_flow(struct fsl_mc_io *mc_io, 141287457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1413a2a55e51SPrabhakar Kushwaha uint16_t token, 1414a2a55e51SPrabhakar Kushwaha uint16_t flow_id, 1415a2a55e51SPrabhakar Kushwaha struct dpni_tx_flow_attr *attr); 1416a2a55e51SPrabhakar Kushwaha 1417a2a55e51SPrabhakar Kushwaha /** 1418a2a55e51SPrabhakar Kushwaha * dpni_set_rx_flow() - Set Rx flow configuration 1419a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 142087457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1421a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1422a2a55e51SPrabhakar Kushwaha * @tc_id: Traffic class selection (0-7); 1423a2a55e51SPrabhakar Kushwaha * use 'DPNI_ALL_TCS' to set all TCs and all flows 142487457d11SPrabhakar Kushwaha * @flow_id: Rx flow id within the traffic class; use 1425a2a55e51SPrabhakar Kushwaha * 'DPNI_ALL_TC_FLOWS' to set all flows within 1426a2a55e51SPrabhakar Kushwaha * this tc_id; ignored if tc_id is set to 1427a2a55e51SPrabhakar Kushwaha * 'DPNI_ALL_TCS'; 1428a2a55e51SPrabhakar Kushwaha * @cfg: Rx flow configuration 1429a2a55e51SPrabhakar Kushwaha * 1430a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1431a2a55e51SPrabhakar Kushwaha */ 1432a2a55e51SPrabhakar Kushwaha int dpni_set_rx_flow(struct fsl_mc_io *mc_io, 143387457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1434a2a55e51SPrabhakar Kushwaha uint16_t token, 1435a2a55e51SPrabhakar Kushwaha uint8_t tc_id, 1436a2a55e51SPrabhakar Kushwaha uint16_t flow_id, 1437a2a55e51SPrabhakar Kushwaha const struct dpni_queue_cfg *cfg); 1438a2a55e51SPrabhakar Kushwaha 1439a2a55e51SPrabhakar Kushwaha /** 1440a2a55e51SPrabhakar Kushwaha * dpni_get_rx_flow() - Get Rx flow attributes 1441a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 144287457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1443a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1444a2a55e51SPrabhakar Kushwaha * @tc_id: Traffic class selection (0-7) 1445a2a55e51SPrabhakar Kushwaha * @flow_id: Rx flow id within the traffic class 1446a2a55e51SPrabhakar Kushwaha * @attr: Returned Rx flow attributes 1447a2a55e51SPrabhakar Kushwaha * 1448a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1449a2a55e51SPrabhakar Kushwaha */ 1450a2a55e51SPrabhakar Kushwaha int dpni_get_rx_flow(struct fsl_mc_io *mc_io, 145187457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1452a2a55e51SPrabhakar Kushwaha uint16_t token, 1453a2a55e51SPrabhakar Kushwaha uint8_t tc_id, 1454a2a55e51SPrabhakar Kushwaha uint16_t flow_id, 1455a2a55e51SPrabhakar Kushwaha struct dpni_queue_attr *attr); 1456a2a55e51SPrabhakar Kushwaha 1457a2a55e51SPrabhakar Kushwaha #endif /* _FSL_DPNI_H */ 1458