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 */ 10*53e353fcSPrabhakar Kushwaha #define DPNI_VER_MAJOR 6 11*53e353fcSPrabhakar Kushwaha #define DPNI_VER_MINOR 0 12a2a55e51SPrabhakar Kushwaha 13a2a55e51SPrabhakar Kushwaha /* Command IDs */ 14a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_OPEN 0x801 15a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_CLOSE 0x800 161ebbe4fcSPrabhakar Kushwaha #define DPNI_CMDID_CREATE 0x901 171ebbe4fcSPrabhakar 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 31*53e353fcSPrabhakar Kushwaha #define DPNI_CMDID_SET_ERRORS_BEHAVIOR 0x20B 32a2a55e51SPrabhakar Kushwaha 33a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_QDID 0x210 34a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_DATA_OFFSET 0x212 35a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_COUNTER 0x213 36a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_COUNTER 0x214 37a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_LINK_STATE 0x215 38a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_LINK_CFG 0x21A 39a2a55e51SPrabhakar Kushwaha 40a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_PRIM_MAC 0x224 41a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_PRIM_MAC 0x225 42a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_ADD_MAC_ADDR 0x226 43a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_REMOVE_MAC_ADDR 0x227 44a2a55e51SPrabhakar Kushwaha 45a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_TX_FLOW 0x236 46a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_FLOW 0x237 47a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_RX_FLOW 0x238 48a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_RX_FLOW 0x239 49*53e353fcSPrabhakar Kushwaha #define DPNI_CMDID_SET_TX_CONF 0x257 50*53e353fcSPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_CONF 0x258 51a2a55e51SPrabhakar Kushwaha 52a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 53a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_OPEN(cmd, dpni_id) \ 54a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, dpni_id) 55a2a55e51SPrabhakar Kushwaha 56*53e353fcSPrabhakar Kushwaha #define DPNI_PREP_EXTENDED_CFG(ext, cfg) \ 57*53e353fcSPrabhakar Kushwaha do { \ 58*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 0, 0, 16, uint16_t, cfg->tc_cfg[0].max_dist); \ 59*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 0, 16, 16, uint16_t, cfg->tc_cfg[0].max_fs_entries); \ 60*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 0, 32, 16, uint16_t, cfg->tc_cfg[1].max_dist); \ 61*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 0, 48, 16, uint16_t, cfg->tc_cfg[1].max_fs_entries); \ 62*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 1, 0, 16, uint16_t, cfg->tc_cfg[2].max_dist); \ 63*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 1, 16, 16, uint16_t, cfg->tc_cfg[2].max_fs_entries); \ 64*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 1, 32, 16, uint16_t, cfg->tc_cfg[3].max_dist); \ 65*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 1, 48, 16, uint16_t, cfg->tc_cfg[3].max_fs_entries); \ 66*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 2, 0, 16, uint16_t, cfg->tc_cfg[4].max_dist); \ 67*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 2, 16, 16, uint16_t, cfg->tc_cfg[4].max_fs_entries); \ 68*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 2, 32, 16, uint16_t, cfg->tc_cfg[5].max_dist); \ 69*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 2, 48, 16, uint16_t, cfg->tc_cfg[5].max_fs_entries); \ 70*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 3, 0, 16, uint16_t, cfg->tc_cfg[6].max_dist); \ 71*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 3, 16, 16, uint16_t, cfg->tc_cfg[6].max_fs_entries); \ 72*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 3, 32, 16, uint16_t, cfg->tc_cfg[7].max_dist); \ 73*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 3, 48, 16, uint16_t, cfg->tc_cfg[7].max_fs_entries); \ 74*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 4, 0, 16, uint16_t, \ 75*53e353fcSPrabhakar Kushwaha cfg->ipr_cfg.max_open_frames_ipv4); \ 76*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 4, 16, 16, uint16_t, \ 77*53e353fcSPrabhakar Kushwaha cfg->ipr_cfg.max_open_frames_ipv6); \ 78*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 4, 32, 16, uint16_t, \ 79*53e353fcSPrabhakar Kushwaha cfg->ipr_cfg.max_reass_frm_size); \ 80*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 5, 0, 16, uint16_t, \ 81*53e353fcSPrabhakar Kushwaha cfg->ipr_cfg.min_frag_size_ipv4); \ 82*53e353fcSPrabhakar Kushwaha MC_PREP_OP(ext, 5, 16, 16, uint16_t, \ 83*53e353fcSPrabhakar Kushwaha cfg->ipr_cfg.min_frag_size_ipv6); \ 84*53e353fcSPrabhakar Kushwaha } while (0) 85*53e353fcSPrabhakar Kushwaha 86*53e353fcSPrabhakar Kushwaha #define DPNI_EXT_EXTENDED_CFG(ext, cfg) \ 87*53e353fcSPrabhakar Kushwaha do { \ 88*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 0, 0, 16, uint16_t, cfg->tc_cfg[0].max_dist); \ 89*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 0, 16, 16, uint16_t, cfg->tc_cfg[0].max_fs_entries); \ 90*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 0, 32, 16, uint16_t, cfg->tc_cfg[1].max_dist); \ 91*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 0, 48, 16, uint16_t, cfg->tc_cfg[1].max_fs_entries); \ 92*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 1, 0, 16, uint16_t, cfg->tc_cfg[2].max_dist); \ 93*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 1, 16, 16, uint16_t, cfg->tc_cfg[2].max_fs_entries); \ 94*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 1, 32, 16, uint16_t, cfg->tc_cfg[3].max_dist); \ 95*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 1, 48, 16, uint16_t, cfg->tc_cfg[3].max_fs_entries); \ 96*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 2, 0, 16, uint16_t, cfg->tc_cfg[4].max_dist); \ 97*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 2, 16, 16, uint16_t, cfg->tc_cfg[4].max_fs_entries); \ 98*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 2, 32, 16, uint16_t, cfg->tc_cfg[5].max_dist); \ 99*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 2, 48, 16, uint16_t, cfg->tc_cfg[5].max_fs_entries); \ 100*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 3, 0, 16, uint16_t, cfg->tc_cfg[6].max_dist); \ 101*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 3, 16, 16, uint16_t, cfg->tc_cfg[6].max_fs_entries); \ 102*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 3, 32, 16, uint16_t, cfg->tc_cfg[7].max_dist); \ 103*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 3, 48, 16, uint16_t, cfg->tc_cfg[7].max_fs_entries); \ 104*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 4, 0, 16, uint16_t, \ 105*53e353fcSPrabhakar Kushwaha cfg->ipr_cfg.max_open_frames_ipv4); \ 106*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 4, 16, 16, uint16_t, \ 107*53e353fcSPrabhakar Kushwaha cfg->ipr_cfg.max_open_frames_ipv6); \ 108*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 4, 32, 16, uint16_t, \ 109*53e353fcSPrabhakar Kushwaha cfg->ipr_cfg.max_reass_frm_size); \ 110*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 5, 0, 16, uint16_t, \ 111*53e353fcSPrabhakar Kushwaha cfg->ipr_cfg.min_frag_size_ipv4); \ 112*53e353fcSPrabhakar Kushwaha MC_EXT_OP(ext, 5, 16, 16, uint16_t, \ 113*53e353fcSPrabhakar Kushwaha cfg->ipr_cfg.min_frag_size_ipv6); \ 114*53e353fcSPrabhakar Kushwaha } while (0) 115*53e353fcSPrabhakar Kushwaha 1161ebbe4fcSPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 1171ebbe4fcSPrabhakar Kushwaha #define DPNI_CMD_CREATE(cmd, cfg) \ 1181ebbe4fcSPrabhakar Kushwaha do { \ 1191ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 8, uint8_t, cfg->adv.max_tcs); \ 1201ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 8, 8, uint8_t, cfg->adv.max_senders); \ 1211ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 8, uint8_t, cfg->mac_addr[5]); \ 1221ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 24, 8, uint8_t, cfg->mac_addr[4]); \ 1231ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, cfg->mac_addr[3]); \ 1241ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 40, 8, uint8_t, cfg->mac_addr[2]); \ 1251ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 8, uint8_t, cfg->mac_addr[1]); \ 1261ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 56, 8, uint8_t, cfg->mac_addr[0]); \ 1271ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 32, uint32_t, cfg->adv.options); \ 1281ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, uint8_t, cfg->adv.max_unicast_filters); \ 1291ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, uint8_t, cfg->adv.max_multicast_filters); \ 1301ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, uint8_t, cfg->adv.max_vlan_filters); \ 1311ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, uint8_t, cfg->adv.max_qos_entries); \ 1321ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, uint8_t, cfg->adv.max_qos_key_size); \ 1331ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, uint8_t, cfg->adv.max_dist_key_size); \ 1341ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, enum net_prot, cfg->adv.start_hdr); \ 1351ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 48, 8, uint8_t, cfg->adv.max_policers); \ 1361ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 56, 8, uint8_t, cfg->adv.max_congestion_ctrl); \ 137*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 0, 64, uint64_t, cfg->adv.ext_cfg_iova); \ 1381ebbe4fcSPrabhakar Kushwaha } while (0) 139a2a55e51SPrabhakar Kushwaha 140a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 141a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_POOLS(cmd, cfg) \ 142a2a55e51SPrabhakar Kushwaha do { \ 143a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 8, uint8_t, cfg->num_dpbp); \ 144*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 8, 1, int, cfg->pools[0].backup_pool); \ 145*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 9, 1, int, cfg->pools[1].backup_pool); \ 146*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 10, 1, int, cfg->pools[2].backup_pool); \ 147*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 11, 1, int, cfg->pools[3].backup_pool); \ 148*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 12, 1, int, cfg->pools[4].backup_pool); \ 149*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 13, 1, int, cfg->pools[5].backup_pool); \ 150*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 14, 1, int, cfg->pools[6].backup_pool); \ 151*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 15, 1, int, cfg->pools[7].backup_pool); \ 152a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 32, int, cfg->pools[0].dpbp_id); \ 153a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 32, 16, uint16_t, cfg->pools[0].buffer_size);\ 154a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 32, int, cfg->pools[1].dpbp_id); \ 155a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 48, 16, uint16_t, cfg->pools[1].buffer_size);\ 156a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 32, int, cfg->pools[2].dpbp_id); \ 157a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 0, 16, uint16_t, cfg->pools[2].buffer_size);\ 158a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 32, int, cfg->pools[3].dpbp_id); \ 159a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 16, 16, uint16_t, cfg->pools[3].buffer_size);\ 160a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 32, int, cfg->pools[4].dpbp_id); \ 161a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 32, 16, uint16_t, cfg->pools[4].buffer_size);\ 162a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 32, int, cfg->pools[5].dpbp_id); \ 163a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 48, 16, uint16_t, cfg->pools[5].buffer_size);\ 164a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 32, int, cfg->pools[6].dpbp_id); \ 165a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 0, 16, uint16_t, cfg->pools[6].buffer_size);\ 166a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 0, 32, int, cfg->pools[7].dpbp_id); \ 167a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 16, 16, uint16_t, cfg->pools[7].buffer_size);\ 168a2a55e51SPrabhakar Kushwaha } while (0) 169a2a55e51SPrabhakar Kushwaha 170a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 171*53e353fcSPrabhakar Kushwaha #define DPNI_CMD_GET_ATTR(cmd, attr) \ 172*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 0, 64, uint64_t, attr->ext_cfg_iova) 173*53e353fcSPrabhakar Kushwaha 174*53e353fcSPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 175a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_ATTR(cmd, attr) \ 176a2a55e51SPrabhakar Kushwaha do { \ 177a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 32, int, attr->id);\ 178a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 8, uint8_t, attr->max_tcs); \ 179a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 40, 8, uint8_t, attr->max_senders); \ 180a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 48, 8, enum net_prot, attr->start_hdr); \ 1811f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 32, uint32_t, attr->options); \ 182a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 0, 8, uint8_t, attr->max_unicast_filters); \ 183a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 8, 8, uint8_t, attr->max_multicast_filters);\ 184a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 16, 8, uint8_t, attr->max_vlan_filters); \ 185a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 24, 8, uint8_t, attr->max_qos_entries); \ 186a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 32, 8, uint8_t, attr->max_qos_key_size); \ 187a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 40, 8, uint8_t, attr->max_dist_key_size); \ 1881f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 48, 8, uint8_t, attr->max_policers); \ 1891f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 56, 8, uint8_t, attr->max_congestion_ctrl); \ 190a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 32, 16, uint16_t, attr->version.major);\ 191a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 48, 16, uint16_t, attr->version.minor);\ 192a2a55e51SPrabhakar Kushwaha } while (0) 193a2a55e51SPrabhakar Kushwaha 194a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 195*53e353fcSPrabhakar Kushwaha #define DPNI_CMD_SET_ERRORS_BEHAVIOR(cmd, cfg) \ 196*53e353fcSPrabhakar Kushwaha do { \ 197*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, uint32_t, cfg->errors); \ 198*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 4, enum dpni_error_action, cfg->error_action); \ 199*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 36, 1, int, cfg->set_frame_annotation); \ 200*53e353fcSPrabhakar Kushwaha } while (0) 201*53e353fcSPrabhakar Kushwaha 202*53e353fcSPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 203a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_RX_BUFFER_LAYOUT(cmd, layout) \ 204a2a55e51SPrabhakar Kushwaha do { \ 205a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ 206a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ 207a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ 208a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ 209a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ 210a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ 211a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ 212a2a55e51SPrabhakar Kushwaha } while (0) 213a2a55e51SPrabhakar Kushwaha 214a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 215a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_RX_BUFFER_LAYOUT(cmd, layout) \ 216a2a55e51SPrabhakar Kushwaha do { \ 217a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ 218a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ 219a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 32, uint32_t, layout->options); \ 220a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ 221a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ 222a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ 223a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ 224a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ 225a2a55e51SPrabhakar Kushwaha } while (0) 226a2a55e51SPrabhakar Kushwaha 227a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 228a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_BUFFER_LAYOUT(cmd, layout) \ 229a2a55e51SPrabhakar Kushwaha do { \ 230a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ 231a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ 232a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ 233a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ 234a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ 235a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ 236a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ 237a2a55e51SPrabhakar Kushwaha } while (0) 238a2a55e51SPrabhakar Kushwaha 239a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 240a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_TX_BUFFER_LAYOUT(cmd, layout) \ 241a2a55e51SPrabhakar Kushwaha do { \ 242a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ 243a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ 244a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 32, uint32_t, layout->options); \ 245a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ 246a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ 247a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ 248a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ 249a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ 250a2a55e51SPrabhakar Kushwaha } while (0) 251a2a55e51SPrabhakar Kushwaha 252a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 253a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_CONF_BUFFER_LAYOUT(cmd, layout) \ 254a2a55e51SPrabhakar Kushwaha do { \ 255a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ 256a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ 257a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ 258a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ 259a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ 260a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ 261a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ 262a2a55e51SPrabhakar Kushwaha } while (0) 263a2a55e51SPrabhakar Kushwaha 264a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 265a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_TX_CONF_BUFFER_LAYOUT(cmd, layout) \ 266a2a55e51SPrabhakar Kushwaha do { \ 267a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ 268a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ 269a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 32, uint32_t, layout->options); \ 270a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ 271a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ 272a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ 273a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ 274a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ 275a2a55e51SPrabhakar Kushwaha } while (0) 276a2a55e51SPrabhakar Kushwaha 277a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 278a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_QDID(cmd, qdid) \ 279a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 16, uint16_t, qdid) 280a2a55e51SPrabhakar Kushwaha 281a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 282a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_DATA_OFFSET(cmd, data_offset) \ 283a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 16, uint16_t, data_offset) 284a2a55e51SPrabhakar Kushwaha 285a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 286a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_GET_COUNTER(cmd, counter) \ 287a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 16, enum dpni_counter, counter) 288a2a55e51SPrabhakar Kushwaha 289a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 290a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_COUNTER(cmd, value) \ 291a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 64, uint64_t, value) 292a2a55e51SPrabhakar Kushwaha 293a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 294a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_COUNTER(cmd, counter, value) \ 295a2a55e51SPrabhakar Kushwaha do { \ 296a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 16, enum dpni_counter, counter); \ 297a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 64, uint64_t, value); \ 298a2a55e51SPrabhakar Kushwaha } while (0) 299a2a55e51SPrabhakar Kushwaha 300a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 301a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_LINK_CFG(cmd, cfg) \ 302a2a55e51SPrabhakar Kushwaha do { \ 3031f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 32, uint32_t, cfg->rate);\ 304a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 64, uint64_t, cfg->options);\ 305a2a55e51SPrabhakar Kushwaha } while (0) 306a2a55e51SPrabhakar Kushwaha 307a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 308a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_LINK_STATE(cmd, state) \ 309a2a55e51SPrabhakar Kushwaha do { \ 310a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 1, int, state->up);\ 3111f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 32, uint32_t, state->rate);\ 312a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 0, 64, uint64_t, state->options);\ 313a2a55e51SPrabhakar Kushwaha } while (0) 314a2a55e51SPrabhakar Kushwaha 315a2a55e51SPrabhakar Kushwaha 316a2a55e51SPrabhakar Kushwaha 317a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 318a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_PRIMARY_MAC_ADDR(cmd, mac_addr) \ 319a2a55e51SPrabhakar Kushwaha do { \ 320a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 8, uint8_t, mac_addr[5]); \ 321a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 24, 8, uint8_t, mac_addr[4]); \ 322a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, mac_addr[3]); \ 323a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 40, 8, uint8_t, mac_addr[2]); \ 324a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 8, uint8_t, mac_addr[1]); \ 325a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 56, 8, uint8_t, mac_addr[0]); \ 326a2a55e51SPrabhakar Kushwaha } while (0) 327a2a55e51SPrabhakar Kushwaha 328a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 329a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_PRIMARY_MAC_ADDR(cmd, mac_addr) \ 330a2a55e51SPrabhakar Kushwaha do { \ 331a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 16, 8, uint8_t, mac_addr[5]); \ 332a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 24, 8, uint8_t, mac_addr[4]); \ 333a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 8, uint8_t, mac_addr[3]); \ 334a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 40, 8, uint8_t, mac_addr[2]); \ 335a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 48, 8, uint8_t, mac_addr[1]); \ 336a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 56, 8, uint8_t, mac_addr[0]); \ 337a2a55e51SPrabhakar Kushwaha } while (0) 338a2a55e51SPrabhakar Kushwaha 339a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 340a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_ADD_MAC_ADDR(cmd, mac_addr) \ 341a2a55e51SPrabhakar Kushwaha do { \ 342a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 8, uint8_t, mac_addr[5]); \ 343a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 24, 8, uint8_t, mac_addr[4]); \ 344a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, mac_addr[3]); \ 345a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 40, 8, uint8_t, mac_addr[2]); \ 346a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 8, uint8_t, mac_addr[1]); \ 347a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 56, 8, uint8_t, mac_addr[0]); \ 348a2a55e51SPrabhakar Kushwaha } while (0) 349a2a55e51SPrabhakar Kushwaha 350a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 351a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_REMOVE_MAC_ADDR(cmd, mac_addr) \ 352a2a55e51SPrabhakar Kushwaha do { \ 353a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 8, uint8_t, mac_addr[5]); \ 354a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 24, 8, uint8_t, mac_addr[4]); \ 355a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, mac_addr[3]); \ 356a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 40, 8, uint8_t, mac_addr[2]); \ 357a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 8, uint8_t, mac_addr[1]); \ 358a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 56, 8, uint8_t, mac_addr[0]); \ 359a2a55e51SPrabhakar Kushwaha } while (0) 360a2a55e51SPrabhakar Kushwaha 361a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 362a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_TX_FLOW(cmd, flow_id, cfg) \ 363a2a55e51SPrabhakar Kushwaha do { \ 364a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 43, 1, int, cfg->l3_chksum_gen);\ 365a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 44, 1, int, cfg->l4_chksum_gen);\ 366*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 45, 1, int, cfg->use_common_tx_conf_queue);\ 367a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id);\ 368a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 32, uint32_t, cfg->options);\ 369a2a55e51SPrabhakar Kushwaha } while (0) 370a2a55e51SPrabhakar Kushwaha 371a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 372a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_SET_TX_FLOW(cmd, flow_id) \ 373a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 48, 16, uint16_t, flow_id) 374a2a55e51SPrabhakar Kushwaha 375a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 376a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_GET_TX_FLOW(cmd, flow_id) \ 377a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id) 378a2a55e51SPrabhakar Kushwaha 379a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 380a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_FLOW(cmd, attr) \ 381a2a55e51SPrabhakar Kushwaha do { \ 382a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 43, 1, int, attr->l3_chksum_gen);\ 383a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 44, 1, int, attr->l4_chksum_gen);\ 384*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 45, 1, int, attr->use_common_tx_conf_queue);\ 385a2a55e51SPrabhakar Kushwaha } while (0) 386a2a55e51SPrabhakar Kushwaha 387a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 388a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_RX_FLOW(cmd, tc_id, flow_id, cfg) \ 389a2a55e51SPrabhakar Kushwaha do { \ 390a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, cfg->dest_cfg.dest_id); \ 391a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, cfg->dest_cfg.priority);\ 392a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 40, 2, enum dpni_dest, cfg->dest_cfg.dest_type);\ 39387457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 42, 1, int, cfg->order_preservation_en);\ 394a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id); \ 395a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 64, uint64_t, cfg->user_ctx); \ 396a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, uint8_t, tc_id); \ 397a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 32, uint32_t, cfg->options); \ 3981f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 4, enum dpni_flc_type, cfg->flc_cfg.flc_type); \ 3991f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 4, 4, enum dpni_stash_size, \ 4001f1c25c7SPrabhakar Kushwaha cfg->flc_cfg.frame_data_size);\ 4011f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 8, 4, enum dpni_stash_size, \ 4021f1c25c7SPrabhakar Kushwaha cfg->flc_cfg.flow_context_size);\ 4031f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 32, uint32_t, cfg->flc_cfg.options);\ 4041f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 0, 64, uint64_t, cfg->flc_cfg.flow_context);\ 405*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 0, 32, uint32_t, cfg->tail_drop_threshold); \ 406a2a55e51SPrabhakar Kushwaha } while (0) 407a2a55e51SPrabhakar Kushwaha 408a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 409a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_GET_RX_FLOW(cmd, tc_id, flow_id) \ 410a2a55e51SPrabhakar Kushwaha do { \ 411a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 8, uint8_t, tc_id); \ 412a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id); \ 413a2a55e51SPrabhakar Kushwaha } while (0) 414a2a55e51SPrabhakar Kushwaha 415a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 416a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_RX_FLOW(cmd, attr) \ 417a2a55e51SPrabhakar Kushwaha do { \ 418a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 32, int, attr->dest_cfg.dest_id); \ 419a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 8, uint8_t, attr->dest_cfg.priority);\ 420a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 40, 2, enum dpni_dest, attr->dest_cfg.dest_type); \ 421*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 42, 1, int, attr->order_preservation_en);\ 422a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 64, uint64_t, attr->user_ctx); \ 423*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 0, 32, uint32_t, attr->tail_drop_threshold); \ 424a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 32, 32, uint32_t, attr->fqid); \ 4251f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 0, 4, enum dpni_flc_type, attr->flc_cfg.flc_type); \ 4261f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 4, 4, enum dpni_stash_size, \ 4271f1c25c7SPrabhakar Kushwaha attr->flc_cfg.frame_data_size);\ 4281f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 8, 4, enum dpni_stash_size, \ 4291f1c25c7SPrabhakar Kushwaha attr->flc_cfg.flow_context_size);\ 4301f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 32, 32, uint32_t, attr->flc_cfg.options);\ 4311f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 0, 64, uint64_t, attr->flc_cfg.flow_context);\ 432a2a55e51SPrabhakar Kushwaha } while (0) 433a2a55e51SPrabhakar Kushwaha 434*53e353fcSPrabhakar Kushwaha #define DPNI_CMD_SET_TX_CONF(cmd, flow_id, cfg) \ 435*53e353fcSPrabhakar Kushwaha do { \ 436*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, cfg->queue_cfg.dest_cfg.priority); \ 437*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 40, 2, enum dpni_dest, \ 438*53e353fcSPrabhakar Kushwaha cfg->queue_cfg.dest_cfg.dest_type); \ 439*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 42, 1, int, cfg->errors_only); \ 440*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 46, 1, int, cfg->queue_cfg.order_preservation_en); \ 441*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id); \ 442*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 64, uint64_t, cfg->queue_cfg.user_ctx); \ 443*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 32, uint32_t, cfg->queue_cfg.options); \ 444*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 32, int, cfg->queue_cfg.dest_cfg.dest_id); \ 445*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 32, uint32_t, \ 446*53e353fcSPrabhakar Kushwaha cfg->queue_cfg.tail_drop_threshold); \ 447*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 0, 4, enum dpni_flc_type, \ 448*53e353fcSPrabhakar Kushwaha cfg->queue_cfg.flc_cfg.flc_type); \ 449*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 4, 4, enum dpni_stash_size, \ 450*53e353fcSPrabhakar Kushwaha cfg->queue_cfg.flc_cfg.frame_data_size); \ 451*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 8, 4, enum dpni_stash_size, \ 452*53e353fcSPrabhakar Kushwaha cfg->queue_cfg.flc_cfg.flow_context_size); \ 453*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 32, 32, uint32_t, cfg->queue_cfg.flc_cfg.options); \ 454*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 0, 64, uint64_t, \ 455*53e353fcSPrabhakar Kushwaha cfg->queue_cfg.flc_cfg.flow_context); \ 456*53e353fcSPrabhakar Kushwaha } while (0) 457*53e353fcSPrabhakar Kushwaha 458*53e353fcSPrabhakar Kushwaha #define DPNI_CMD_GET_TX_CONF(cmd, flow_id) \ 459*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id) 460*53e353fcSPrabhakar Kushwaha 461*53e353fcSPrabhakar Kushwaha #define DPNI_RSP_GET_TX_CONF(cmd, attr) \ 462*53e353fcSPrabhakar Kushwaha do { \ 463*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 8, uint8_t, \ 464*53e353fcSPrabhakar Kushwaha attr->queue_attr.dest_cfg.priority); \ 465*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 40, 2, enum dpni_dest, \ 466*53e353fcSPrabhakar Kushwaha attr->queue_attr.dest_cfg.dest_type); \ 467*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 42, 1, int, attr->errors_only); \ 468*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 46, 1, int, \ 469*53e353fcSPrabhakar Kushwaha attr->queue_attr.order_preservation_en); \ 470*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 64, uint64_t, attr->queue_attr.user_ctx); \ 471*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 32, 32, int, attr->queue_attr.dest_cfg.dest_id); \ 472*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 0, 32, uint32_t, \ 473*53e353fcSPrabhakar Kushwaha attr->queue_attr.tail_drop_threshold); \ 474*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 32, 32, uint32_t, attr->queue_attr.fqid); \ 475*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 0, 4, enum dpni_flc_type, \ 476*53e353fcSPrabhakar Kushwaha attr->queue_attr.flc_cfg.flc_type); \ 477*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 4, 4, enum dpni_stash_size, \ 478*53e353fcSPrabhakar Kushwaha attr->queue_attr.flc_cfg.frame_data_size); \ 479*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 8, 4, enum dpni_stash_size, \ 480*53e353fcSPrabhakar Kushwaha attr->queue_attr.flc_cfg.flow_context_size); \ 481*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 32, 32, uint32_t, attr->queue_attr.flc_cfg.options); \ 482*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 0, 64, uint64_t, \ 483*53e353fcSPrabhakar Kushwaha attr->queue_attr.flc_cfg.flow_context); \ 484*53e353fcSPrabhakar Kushwaha } while (0) 485*53e353fcSPrabhakar Kushwaha 486a2a55e51SPrabhakar Kushwaha enum net_prot { 487a2a55e51SPrabhakar Kushwaha NET_PROT_NONE = 0, 488a2a55e51SPrabhakar Kushwaha NET_PROT_PAYLOAD, 489a2a55e51SPrabhakar Kushwaha NET_PROT_ETH, 490a2a55e51SPrabhakar Kushwaha NET_PROT_VLAN, 491a2a55e51SPrabhakar Kushwaha NET_PROT_IPV4, 492a2a55e51SPrabhakar Kushwaha NET_PROT_IPV6, 493a2a55e51SPrabhakar Kushwaha NET_PROT_IP, 494a2a55e51SPrabhakar Kushwaha NET_PROT_TCP, 495a2a55e51SPrabhakar Kushwaha NET_PROT_UDP, 496a2a55e51SPrabhakar Kushwaha NET_PROT_UDP_LITE, 497a2a55e51SPrabhakar Kushwaha NET_PROT_IPHC, 498a2a55e51SPrabhakar Kushwaha NET_PROT_SCTP, 499a2a55e51SPrabhakar Kushwaha NET_PROT_SCTP_CHUNK_DATA, 500a2a55e51SPrabhakar Kushwaha NET_PROT_PPPOE, 501a2a55e51SPrabhakar Kushwaha NET_PROT_PPP, 502a2a55e51SPrabhakar Kushwaha NET_PROT_PPPMUX, 503a2a55e51SPrabhakar Kushwaha NET_PROT_PPPMUX_SUBFRM, 504a2a55e51SPrabhakar Kushwaha NET_PROT_L2TPV2, 505a2a55e51SPrabhakar Kushwaha NET_PROT_L2TPV3_CTRL, 506a2a55e51SPrabhakar Kushwaha NET_PROT_L2TPV3_SESS, 507a2a55e51SPrabhakar Kushwaha NET_PROT_LLC, 508a2a55e51SPrabhakar Kushwaha NET_PROT_LLC_SNAP, 509a2a55e51SPrabhakar Kushwaha NET_PROT_NLPID, 510a2a55e51SPrabhakar Kushwaha NET_PROT_SNAP, 511a2a55e51SPrabhakar Kushwaha NET_PROT_MPLS, 512a2a55e51SPrabhakar Kushwaha NET_PROT_IPSEC_AH, 513a2a55e51SPrabhakar Kushwaha NET_PROT_IPSEC_ESP, 514a2a55e51SPrabhakar Kushwaha NET_PROT_UDP_ENC_ESP, /* RFC 3948 */ 515a2a55e51SPrabhakar Kushwaha NET_PROT_MACSEC, 516a2a55e51SPrabhakar Kushwaha NET_PROT_GRE, 517a2a55e51SPrabhakar Kushwaha NET_PROT_MINENCAP, 518a2a55e51SPrabhakar Kushwaha NET_PROT_DCCP, 519a2a55e51SPrabhakar Kushwaha NET_PROT_ICMP, 520a2a55e51SPrabhakar Kushwaha NET_PROT_IGMP, 521a2a55e51SPrabhakar Kushwaha NET_PROT_ARP, 522a2a55e51SPrabhakar Kushwaha NET_PROT_CAPWAP_DATA, 523a2a55e51SPrabhakar Kushwaha NET_PROT_CAPWAP_CTRL, 524a2a55e51SPrabhakar Kushwaha NET_PROT_RFC2684, 525a2a55e51SPrabhakar Kushwaha NET_PROT_ICMPV6, 526a2a55e51SPrabhakar Kushwaha NET_PROT_FCOE, 527a2a55e51SPrabhakar Kushwaha NET_PROT_FIP, 528a2a55e51SPrabhakar Kushwaha NET_PROT_ISCSI, 529a2a55e51SPrabhakar Kushwaha NET_PROT_GTP, 530a2a55e51SPrabhakar Kushwaha NET_PROT_USER_DEFINED_L2, 531a2a55e51SPrabhakar Kushwaha NET_PROT_USER_DEFINED_L3, 532a2a55e51SPrabhakar Kushwaha NET_PROT_USER_DEFINED_L4, 533a2a55e51SPrabhakar Kushwaha NET_PROT_USER_DEFINED_L5, 534a2a55e51SPrabhakar Kushwaha NET_PROT_USER_DEFINED_SHIM1, 535a2a55e51SPrabhakar Kushwaha NET_PROT_USER_DEFINED_SHIM2, 536a2a55e51SPrabhakar Kushwaha 537a2a55e51SPrabhakar Kushwaha NET_PROT_DUMMY_LAST 538a2a55e51SPrabhakar Kushwaha }; 539a2a55e51SPrabhakar Kushwaha 5401f1c25c7SPrabhakar Kushwaha /** 5411f1c25c7SPrabhakar Kushwaha * Data Path Network Interface API 542a2a55e51SPrabhakar Kushwaha * Contains initialization APIs and runtime control APIs for DPNI 543a2a55e51SPrabhakar Kushwaha */ 544a2a55e51SPrabhakar Kushwaha 545a2a55e51SPrabhakar Kushwaha struct fsl_mc_io; 546a2a55e51SPrabhakar Kushwaha 547a2a55e51SPrabhakar Kushwaha /* General DPNI macros */ 548a2a55e51SPrabhakar Kushwaha 549a2a55e51SPrabhakar Kushwaha /* Maximum number of traffic classes */ 550a2a55e51SPrabhakar Kushwaha #define DPNI_MAX_TC 8 551a2a55e51SPrabhakar Kushwaha /* Maximum number of buffer pools per DPNI */ 552a2a55e51SPrabhakar Kushwaha #define DPNI_MAX_DPBP 8 553a2a55e51SPrabhakar Kushwaha 554a2a55e51SPrabhakar Kushwaha /* All traffic classes considered; see dpni_set_rx_flow() */ 555a2a55e51SPrabhakar Kushwaha #define DPNI_ALL_TCS (uint8_t)(-1) 556a2a55e51SPrabhakar Kushwaha /* All flows within traffic class considered; see dpni_set_rx_flow() */ 557a2a55e51SPrabhakar Kushwaha #define DPNI_ALL_TC_FLOWS (uint16_t)(-1) 558a2a55e51SPrabhakar Kushwaha /* Generate new flow ID; see dpni_set_tx_flow() */ 559a2a55e51SPrabhakar Kushwaha #define DPNI_NEW_FLOW_ID (uint16_t)(-1) 560*53e353fcSPrabhakar Kushwaha /* use for common tx-conf queue; see dpni_set_tx_conf_<x>() */ 561*53e353fcSPrabhakar Kushwaha #define DPNI_COMMON_TX_CONF (uint16_t)(-1) 562a2a55e51SPrabhakar Kushwaha 563a2a55e51SPrabhakar Kushwaha /** 564a2a55e51SPrabhakar Kushwaha * dpni_open() - Open a control session for the specified object 565a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 56687457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 567a2a55e51SPrabhakar Kushwaha * @dpni_id: DPNI unique ID 568a2a55e51SPrabhakar Kushwaha * @token: Returned token; use in subsequent API calls 569a2a55e51SPrabhakar Kushwaha * 570a2a55e51SPrabhakar Kushwaha * This function can be used to open a control session for an 571a2a55e51SPrabhakar Kushwaha * already created object; an object may have been declared in 572a2a55e51SPrabhakar Kushwaha * the DPL or by calling the dpni_create() function. 573a2a55e51SPrabhakar Kushwaha * This function returns a unique authentication token, 574a2a55e51SPrabhakar Kushwaha * associated with the specific object ID and the specific MC 575a2a55e51SPrabhakar Kushwaha * portal; this token must be used in all subsequent commands for 576a2a55e51SPrabhakar Kushwaha * this specific object. 577a2a55e51SPrabhakar Kushwaha * 578a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 579a2a55e51SPrabhakar Kushwaha */ 58087457d11SPrabhakar Kushwaha int dpni_open(struct fsl_mc_io *mc_io, 58187457d11SPrabhakar Kushwaha uint32_t cmd_flags, 58287457d11SPrabhakar Kushwaha int dpni_id, 58387457d11SPrabhakar Kushwaha uint16_t *token); 584a2a55e51SPrabhakar Kushwaha 585a2a55e51SPrabhakar Kushwaha /** 586a2a55e51SPrabhakar Kushwaha * dpni_close() - Close the control session of the object 587a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 58887457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 589a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 590a2a55e51SPrabhakar Kushwaha * 591a2a55e51SPrabhakar Kushwaha * After this function is called, no further operations are 592a2a55e51SPrabhakar Kushwaha * allowed on the object without opening a new control session. 593a2a55e51SPrabhakar Kushwaha * 594a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 595a2a55e51SPrabhakar Kushwaha */ 59687457d11SPrabhakar Kushwaha int dpni_close(struct fsl_mc_io *mc_io, 59787457d11SPrabhakar Kushwaha uint32_t cmd_flags, 59887457d11SPrabhakar Kushwaha uint16_t token); 599a2a55e51SPrabhakar Kushwaha 6001ebbe4fcSPrabhakar Kushwaha /* DPNI configuration options */ 6011ebbe4fcSPrabhakar Kushwaha 6021ebbe4fcSPrabhakar Kushwaha /** 6031ebbe4fcSPrabhakar Kushwaha * Allow different distribution key profiles for different traffic classes; 6041ebbe4fcSPrabhakar Kushwaha * if not set, a single key profile is assumed 6051ebbe4fcSPrabhakar Kushwaha */ 6061ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_ALLOW_DIST_KEY_PER_TC 0x00000001 6071ebbe4fcSPrabhakar Kushwaha 6081ebbe4fcSPrabhakar Kushwaha /** 6091ebbe4fcSPrabhakar Kushwaha * Disable all non-error transmit confirmation; error frames are reported 6101ebbe4fcSPrabhakar Kushwaha * back to a common Tx error queue 6111ebbe4fcSPrabhakar Kushwaha */ 6121ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_TX_CONF_DISABLED 0x00000002 6131ebbe4fcSPrabhakar Kushwaha 6141ebbe4fcSPrabhakar Kushwaha /* Disable per-sender private Tx confirmation/error queue */ 6151ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_PRIVATE_TX_CONF_ERROR_DISABLED 0x00000004 6161ebbe4fcSPrabhakar Kushwaha 6171ebbe4fcSPrabhakar Kushwaha /** 6181ebbe4fcSPrabhakar Kushwaha * Support distribution based on hashed key; 6191ebbe4fcSPrabhakar Kushwaha * allows statistical distribution over receive queues in a traffic class 6201ebbe4fcSPrabhakar Kushwaha */ 6211ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_DIST_HASH 0x00000010 6221ebbe4fcSPrabhakar Kushwaha 6231ebbe4fcSPrabhakar Kushwaha /** 6241ebbe4fcSPrabhakar Kushwaha * Support distribution based on flow steering; 6251ebbe4fcSPrabhakar Kushwaha * allows explicit control of distribution over receive queues in a traffic 6261ebbe4fcSPrabhakar Kushwaha * class 6271ebbe4fcSPrabhakar Kushwaha */ 6281ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_DIST_FS 0x00000020 6291ebbe4fcSPrabhakar Kushwaha 6301ebbe4fcSPrabhakar Kushwaha /* Unicast filtering support */ 6311ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_UNICAST_FILTER 0x00000080 6321ebbe4fcSPrabhakar Kushwaha /* Multicast filtering support */ 6331ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_MULTICAST_FILTER 0x00000100 6341ebbe4fcSPrabhakar Kushwaha /* VLAN filtering support */ 6351ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_VLAN_FILTER 0x00000200 6361ebbe4fcSPrabhakar Kushwaha /* Support IP reassembly on received packets */ 6371ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_IPR 0x00000800 6381ebbe4fcSPrabhakar Kushwaha /* Support IP fragmentation on transmitted packets */ 6391ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_IPF 0x00001000 6401ebbe4fcSPrabhakar Kushwaha /* VLAN manipulation support */ 6411ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_VLAN_MANIPULATION 0x00010000 6421ebbe4fcSPrabhakar Kushwaha /* Support masking of QoS lookup keys */ 6431ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_QOS_MASK_SUPPORT 0x00020000 6441ebbe4fcSPrabhakar Kushwaha /* Support masking of Flow Steering lookup keys */ 6451ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_FS_MASK_SUPPORT 0x00040000 6461ebbe4fcSPrabhakar Kushwaha 647a2a55e51SPrabhakar Kushwaha /** 648*53e353fcSPrabhakar Kushwaha * struct dpni_extended_cfg - Structure representing extended DPNI configuration 649*53e353fcSPrabhakar Kushwaha * @tc_cfg: TCs configuration 650*53e353fcSPrabhakar Kushwaha * @ipr_cfg: IP reassembly configuration 651*53e353fcSPrabhakar Kushwaha */ 652*53e353fcSPrabhakar Kushwaha struct dpni_extended_cfg { 653*53e353fcSPrabhakar Kushwaha /** 654*53e353fcSPrabhakar Kushwaha * struct tc_cfg - TC configuration 655*53e353fcSPrabhakar Kushwaha * @max_dist: Maximum distribution size for Rx traffic class; 656*53e353fcSPrabhakar Kushwaha * supported values: 1,2,3,4,6,7,8,12,14,16,24,28,32,48,56,64,96, 657*53e353fcSPrabhakar Kushwaha * 112,128,192,224,256,384,448,512,768,896,1024; 658*53e353fcSPrabhakar Kushwaha * value '0' will be treated as '1'. 659*53e353fcSPrabhakar Kushwaha * other unsupported values will be round down to the nearest 660*53e353fcSPrabhakar Kushwaha * supported value. 661*53e353fcSPrabhakar Kushwaha * @max_fs_entries: Maximum FS entries for Rx traffic class; 662*53e353fcSPrabhakar Kushwaha * '0' means no support for this TC; 663*53e353fcSPrabhakar Kushwaha */ 664*53e353fcSPrabhakar Kushwaha struct { 665*53e353fcSPrabhakar Kushwaha uint16_t max_dist; 666*53e353fcSPrabhakar Kushwaha uint16_t max_fs_entries; 667*53e353fcSPrabhakar Kushwaha } tc_cfg[DPNI_MAX_TC]; 668*53e353fcSPrabhakar Kushwaha /** 669*53e353fcSPrabhakar Kushwaha * struct ipr_cfg - Structure representing IP reassembly configuration 670a2a55e51SPrabhakar Kushwaha * @max_reass_frm_size: Maximum size of the reassembled frame 671a2a55e51SPrabhakar Kushwaha * @min_frag_size_ipv4: Minimum fragment size of IPv4 fragments 672a2a55e51SPrabhakar Kushwaha * @min_frag_size_ipv6: Minimum fragment size of IPv6 fragments 673*53e353fcSPrabhakar Kushwaha * @max_open_frames_ipv4: Maximum concurrent IPv4 packets in reassembly 674*53e353fcSPrabhakar Kushwaha * process 675*53e353fcSPrabhakar Kushwaha * @max_open_frames_ipv6: Maximum concurrent IPv6 packets in reassembly 676*53e353fcSPrabhakar Kushwaha * process 677a2a55e51SPrabhakar Kushwaha */ 678*53e353fcSPrabhakar Kushwaha struct { 679a2a55e51SPrabhakar Kushwaha uint16_t max_reass_frm_size; 680a2a55e51SPrabhakar Kushwaha uint16_t min_frag_size_ipv4; 681a2a55e51SPrabhakar Kushwaha uint16_t min_frag_size_ipv6; 682a2a55e51SPrabhakar Kushwaha uint16_t max_open_frames_ipv4; 683a2a55e51SPrabhakar Kushwaha uint16_t max_open_frames_ipv6; 684*53e353fcSPrabhakar Kushwaha } ipr_cfg; 685a2a55e51SPrabhakar Kushwaha }; 686a2a55e51SPrabhakar Kushwaha 687a2a55e51SPrabhakar Kushwaha /** 688*53e353fcSPrabhakar Kushwaha * dpni_prepare_extended_cfg() - function prepare extended parameters 689*53e353fcSPrabhakar Kushwaha * @cfg: extended structure 690*53e353fcSPrabhakar Kushwaha * @ext_cfg_buf: Zeroed 256 bytes of memory before mapping it to DMA 691*53e353fcSPrabhakar Kushwaha * 692*53e353fcSPrabhakar Kushwaha * This function has to be called before dpni_create() 693*53e353fcSPrabhakar Kushwaha */ 694*53e353fcSPrabhakar Kushwaha int dpni_prepare_extended_cfg(const struct dpni_extended_cfg *cfg, 695*53e353fcSPrabhakar Kushwaha uint8_t *ext_cfg_buf); 696*53e353fcSPrabhakar Kushwaha 697*53e353fcSPrabhakar Kushwaha /** 6981ebbe4fcSPrabhakar Kushwaha * struct dpni_cfg - Structure representing DPNI configuration 6991ebbe4fcSPrabhakar Kushwaha * @mac_addr: Primary MAC address 7001ebbe4fcSPrabhakar Kushwaha * @adv: Advanced parameters; default is all zeros; 7011ebbe4fcSPrabhakar Kushwaha * use this structure to change default settings 7021ebbe4fcSPrabhakar Kushwaha */ 7031ebbe4fcSPrabhakar Kushwaha struct dpni_cfg { 7041ebbe4fcSPrabhakar Kushwaha uint8_t mac_addr[6]; 7051ebbe4fcSPrabhakar Kushwaha /** 7061ebbe4fcSPrabhakar Kushwaha * struct adv - Advanced parameters 7071ebbe4fcSPrabhakar Kushwaha * @options: Mask of available options; use 'DPNI_OPT_<X>' values 7081ebbe4fcSPrabhakar Kushwaha * @start_hdr: Selects the packet starting header for parsing; 7091ebbe4fcSPrabhakar Kushwaha * 'NET_PROT_NONE' is treated as default: 'NET_PROT_ETH' 7101ebbe4fcSPrabhakar Kushwaha * @max_senders: Maximum number of different senders; used as the number 7111ebbe4fcSPrabhakar Kushwaha * of dedicated Tx flows; Non-power-of-2 values are rounded 7121ebbe4fcSPrabhakar Kushwaha * up to the next power-of-2 value as hardware demands it; 7131ebbe4fcSPrabhakar Kushwaha * '0' will be treated as '1' 7141ebbe4fcSPrabhakar Kushwaha * @max_tcs: Maximum number of traffic classes (for both Tx and Rx); 7151ebbe4fcSPrabhakar Kushwaha * '0' will e treated as '1' 7161ebbe4fcSPrabhakar Kushwaha * @max_unicast_filters: Maximum number of unicast filters; 7171ebbe4fcSPrabhakar Kushwaha * '0' is treated as '16' 7181ebbe4fcSPrabhakar Kushwaha * @max_multicast_filters: Maximum number of multicast filters; 7191ebbe4fcSPrabhakar Kushwaha * '0' is treated as '64' 7201ebbe4fcSPrabhakar Kushwaha * @max_qos_entries: if 'max_tcs > 1', declares the maximum entries in 7211ebbe4fcSPrabhakar Kushwaha * the QoS table; '0' is treated as '64' 7221ebbe4fcSPrabhakar Kushwaha * @max_qos_key_size: Maximum key size for the QoS look-up; 7231ebbe4fcSPrabhakar Kushwaha * '0' is treated as '24' which is enough for IPv4 7241ebbe4fcSPrabhakar Kushwaha * 5-tuple 7251ebbe4fcSPrabhakar Kushwaha * @max_dist_key_size: Maximum key size for the distribution; 7261ebbe4fcSPrabhakar Kushwaha * '0' is treated as '24' which is enough for IPv4 5-tuple 7271ebbe4fcSPrabhakar Kushwaha * @max_policers: Maximum number of policers; 7281ebbe4fcSPrabhakar Kushwaha * should be between '0' and max_tcs 7291ebbe4fcSPrabhakar Kushwaha * @max_congestion_ctrl: Maximum number of congestion control groups 7301ebbe4fcSPrabhakar Kushwaha * (CGs); covers early drop and congestion notification 731*53e353fcSPrabhakar Kushwaha * requirements; 732*53e353fcSPrabhakar Kushwaha * should be between '0' and ('max_tcs' + 'max_senders') 733*53e353fcSPrabhakar Kushwaha * @ext_cfg_iova: I/O virtual address of 256 bytes DMA-able memory 734*53e353fcSPrabhakar Kushwaha * filled with the extended configuration by calling 735*53e353fcSPrabhakar Kushwaha * dpni_prepare_extended_cfg() 7361ebbe4fcSPrabhakar Kushwaha */ 7371ebbe4fcSPrabhakar Kushwaha struct { 7381ebbe4fcSPrabhakar Kushwaha uint32_t options; 7391ebbe4fcSPrabhakar Kushwaha enum net_prot start_hdr; 7401ebbe4fcSPrabhakar Kushwaha uint8_t max_senders; 7411ebbe4fcSPrabhakar Kushwaha uint8_t max_tcs; 7421ebbe4fcSPrabhakar Kushwaha uint8_t max_unicast_filters; 7431ebbe4fcSPrabhakar Kushwaha uint8_t max_multicast_filters; 7441ebbe4fcSPrabhakar Kushwaha uint8_t max_vlan_filters; 7451ebbe4fcSPrabhakar Kushwaha uint8_t max_qos_entries; 7461ebbe4fcSPrabhakar Kushwaha uint8_t max_qos_key_size; 7471ebbe4fcSPrabhakar Kushwaha uint8_t max_dist_key_size; 7481ebbe4fcSPrabhakar Kushwaha uint8_t max_policers; 7491ebbe4fcSPrabhakar Kushwaha uint8_t max_congestion_ctrl; 750*53e353fcSPrabhakar Kushwaha uint64_t ext_cfg_iova; 7511ebbe4fcSPrabhakar Kushwaha } adv; 7521ebbe4fcSPrabhakar Kushwaha }; 7531ebbe4fcSPrabhakar Kushwaha 7541ebbe4fcSPrabhakar Kushwaha /** 7551ebbe4fcSPrabhakar Kushwaha * dpni_create() - Create the DPNI object 7561ebbe4fcSPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 7571ebbe4fcSPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 7581ebbe4fcSPrabhakar Kushwaha * @cfg: Configuration structure 7591ebbe4fcSPrabhakar Kushwaha * @token: Returned token; use in subsequent API calls 7601ebbe4fcSPrabhakar Kushwaha * 7611ebbe4fcSPrabhakar Kushwaha * Create the DPNI object, allocate required resources and 7621ebbe4fcSPrabhakar Kushwaha * perform required initialization. 7631ebbe4fcSPrabhakar Kushwaha * 7641ebbe4fcSPrabhakar Kushwaha * The object can be created either by declaring it in the 7651ebbe4fcSPrabhakar Kushwaha * DPL file, or by calling this function. 7661ebbe4fcSPrabhakar Kushwaha * 7671ebbe4fcSPrabhakar Kushwaha * This function returns a unique authentication token, 7681ebbe4fcSPrabhakar Kushwaha * associated with the specific object ID and the specific MC 7691ebbe4fcSPrabhakar Kushwaha * portal; this token must be used in all subsequent calls to 7701ebbe4fcSPrabhakar Kushwaha * this specific object. For objects that are created using the 7711ebbe4fcSPrabhakar Kushwaha * DPL file, call dpni_open() function to get an authentication 7721ebbe4fcSPrabhakar Kushwaha * token first. 7731ebbe4fcSPrabhakar Kushwaha * 7741ebbe4fcSPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 7751ebbe4fcSPrabhakar Kushwaha */ 7761ebbe4fcSPrabhakar Kushwaha int dpni_create(struct fsl_mc_io *mc_io, 7771ebbe4fcSPrabhakar Kushwaha uint32_t cmd_flags, 7781ebbe4fcSPrabhakar Kushwaha const struct dpni_cfg *cfg, 7791ebbe4fcSPrabhakar Kushwaha uint16_t *token); 7801ebbe4fcSPrabhakar Kushwaha 7811ebbe4fcSPrabhakar Kushwaha /** 7821ebbe4fcSPrabhakar Kushwaha * dpni_destroy() - Destroy the DPNI object and release all its resources. 7831ebbe4fcSPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 7841ebbe4fcSPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 7851ebbe4fcSPrabhakar Kushwaha * @token: Token of DPNI object 7861ebbe4fcSPrabhakar Kushwaha * 7871ebbe4fcSPrabhakar Kushwaha * Return: '0' on Success; error code otherwise. 7881ebbe4fcSPrabhakar Kushwaha */ 7891ebbe4fcSPrabhakar Kushwaha int dpni_destroy(struct fsl_mc_io *mc_io, 7901ebbe4fcSPrabhakar Kushwaha uint32_t cmd_flags, 7911ebbe4fcSPrabhakar Kushwaha uint16_t token); 7921ebbe4fcSPrabhakar Kushwaha 7931ebbe4fcSPrabhakar Kushwaha /** 794a2a55e51SPrabhakar Kushwaha * struct dpni_pools_cfg - Structure representing buffer pools configuration 795a2a55e51SPrabhakar Kushwaha * @num_dpbp: Number of DPBPs 796a2a55e51SPrabhakar Kushwaha * @pools: Array of buffer pools parameters; The number of valid entries 797a2a55e51SPrabhakar Kushwaha * must match 'num_dpbp' value 798a2a55e51SPrabhakar Kushwaha */ 799a2a55e51SPrabhakar Kushwaha struct dpni_pools_cfg { 800a2a55e51SPrabhakar Kushwaha uint8_t num_dpbp; 801a2a55e51SPrabhakar Kushwaha /** 802a2a55e51SPrabhakar Kushwaha * struct pools - Buffer pools parameters 803a2a55e51SPrabhakar Kushwaha * @dpbp_id: DPBP object ID 804a2a55e51SPrabhakar Kushwaha * @buffer_size: Buffer size 80587457d11SPrabhakar Kushwaha * @backup_pool: Backup pool 806a2a55e51SPrabhakar Kushwaha */ 807a2a55e51SPrabhakar Kushwaha struct { 808a2a55e51SPrabhakar Kushwaha int dpbp_id; 809a2a55e51SPrabhakar Kushwaha uint16_t buffer_size; 81087457d11SPrabhakar Kushwaha int backup_pool; 811a2a55e51SPrabhakar Kushwaha } pools[DPNI_MAX_DPBP]; 812a2a55e51SPrabhakar Kushwaha }; 813a2a55e51SPrabhakar Kushwaha 814a2a55e51SPrabhakar Kushwaha /** 815a2a55e51SPrabhakar Kushwaha * dpni_set_pools() - Set buffer pools configuration 816a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 81787457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 818a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 819a2a55e51SPrabhakar Kushwaha * @cfg: Buffer pools configuration 820a2a55e51SPrabhakar Kushwaha * 821a2a55e51SPrabhakar Kushwaha * mandatory for DPNI operation 822a2a55e51SPrabhakar Kushwaha * warning:Allowed only when DPNI is disabled 823a2a55e51SPrabhakar Kushwaha * 824a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 825a2a55e51SPrabhakar Kushwaha */ 826a2a55e51SPrabhakar Kushwaha int dpni_set_pools(struct fsl_mc_io *mc_io, 82787457d11SPrabhakar Kushwaha uint32_t cmd_flags, 828a2a55e51SPrabhakar Kushwaha uint16_t token, 829a2a55e51SPrabhakar Kushwaha const struct dpni_pools_cfg *cfg); 830a2a55e51SPrabhakar Kushwaha 831a2a55e51SPrabhakar Kushwaha /** 832a2a55e51SPrabhakar Kushwaha * dpni_enable() - Enable the DPNI, allow sending and receiving frames. 833a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 83487457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 835a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 836a2a55e51SPrabhakar Kushwaha * 837a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 838a2a55e51SPrabhakar Kushwaha */ 83987457d11SPrabhakar Kushwaha int dpni_enable(struct fsl_mc_io *mc_io, 84087457d11SPrabhakar Kushwaha uint32_t cmd_flags, 84187457d11SPrabhakar Kushwaha uint16_t token); 842a2a55e51SPrabhakar Kushwaha 843a2a55e51SPrabhakar Kushwaha /** 844a2a55e51SPrabhakar Kushwaha * dpni_disable() - Disable the DPNI, stop sending and receiving frames. 845a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 84687457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 847a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 848a2a55e51SPrabhakar Kushwaha * 849a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 850a2a55e51SPrabhakar Kushwaha */ 85187457d11SPrabhakar Kushwaha int dpni_disable(struct fsl_mc_io *mc_io, 85287457d11SPrabhakar Kushwaha uint32_t cmd_flags, 85387457d11SPrabhakar Kushwaha uint16_t token); 854a2a55e51SPrabhakar Kushwaha 855a2a55e51SPrabhakar Kushwaha 856a2a55e51SPrabhakar Kushwaha /** 85787457d11SPrabhakar Kushwaha * dpni_reset() - Reset the DPNI, returns the object to initial state. 858a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 85987457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 860a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 861a2a55e51SPrabhakar Kushwaha * 862a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 863a2a55e51SPrabhakar Kushwaha */ 86487457d11SPrabhakar Kushwaha int dpni_reset(struct fsl_mc_io *mc_io, 86587457d11SPrabhakar Kushwaha uint32_t cmd_flags, 86687457d11SPrabhakar Kushwaha uint16_t token); 867a2a55e51SPrabhakar Kushwaha 868a2a55e51SPrabhakar Kushwaha /** 869a2a55e51SPrabhakar Kushwaha * struct dpni_attr - Structure representing DPNI attributes 870a2a55e51SPrabhakar Kushwaha * @id: DPNI object ID 871a2a55e51SPrabhakar Kushwaha * @version: DPNI version 872a2a55e51SPrabhakar Kushwaha * @start_hdr: Indicates the packet starting header for parsing 873a2a55e51SPrabhakar Kushwaha * @options: Mask of available options; reflects the value as was given in 874a2a55e51SPrabhakar Kushwaha * object's creation 875a2a55e51SPrabhakar Kushwaha * @max_senders: Maximum number of different senders; used as the number 876a2a55e51SPrabhakar Kushwaha * of dedicated Tx flows; 877a2a55e51SPrabhakar Kushwaha * @max_tcs: Maximum number of traffic classes (for both Tx and Rx) 878a2a55e51SPrabhakar Kushwaha * @max_unicast_filters: Maximum number of unicast filters 879a2a55e51SPrabhakar Kushwaha * @max_multicast_filters: Maximum number of multicast filters 880a2a55e51SPrabhakar Kushwaha * @max_vlan_filters: Maximum number of VLAN filters 881a2a55e51SPrabhakar Kushwaha * @max_qos_entries: if 'max_tcs > 1', declares the maximum entries in QoS table 882a2a55e51SPrabhakar Kushwaha * @max_qos_key_size: Maximum key size for the QoS look-up 883a2a55e51SPrabhakar Kushwaha * @max_dist_key_size: Maximum key size for the distribution look-up 8841f1c25c7SPrabhakar Kushwaha * @max_policers: Maximum number of policers; 8851f1c25c7SPrabhakar Kushwaha * @max_congestion_ctrl: Maximum number of congestion control groups (CGs); 886*53e353fcSPrabhakar Kushwaha * @ext_cfg_iova: I/O virtual address of 256 bytes DMA-able memory; 887*53e353fcSPrabhakar Kushwaha * call dpni_extract_extended_cfg() to extract the extended configuration 888a2a55e51SPrabhakar Kushwaha */ 889a2a55e51SPrabhakar Kushwaha struct dpni_attr { 890a2a55e51SPrabhakar Kushwaha int id; 891a2a55e51SPrabhakar Kushwaha /** 892a2a55e51SPrabhakar Kushwaha * struct version - DPNI version 893a2a55e51SPrabhakar Kushwaha * @major: DPNI major version 894a2a55e51SPrabhakar Kushwaha * @minor: DPNI minor version 895a2a55e51SPrabhakar Kushwaha */ 896a2a55e51SPrabhakar Kushwaha struct { 897a2a55e51SPrabhakar Kushwaha uint16_t major; 898a2a55e51SPrabhakar Kushwaha uint16_t minor; 899a2a55e51SPrabhakar Kushwaha } version; 900a2a55e51SPrabhakar Kushwaha enum net_prot start_hdr; 9011f1c25c7SPrabhakar Kushwaha uint32_t options; 902a2a55e51SPrabhakar Kushwaha uint8_t max_senders; 903a2a55e51SPrabhakar Kushwaha uint8_t max_tcs; 904a2a55e51SPrabhakar Kushwaha uint8_t max_unicast_filters; 905a2a55e51SPrabhakar Kushwaha uint8_t max_multicast_filters; 906a2a55e51SPrabhakar Kushwaha uint8_t max_vlan_filters; 907a2a55e51SPrabhakar Kushwaha uint8_t max_qos_entries; 908a2a55e51SPrabhakar Kushwaha uint8_t max_qos_key_size; 909a2a55e51SPrabhakar Kushwaha uint8_t max_dist_key_size; 9101f1c25c7SPrabhakar Kushwaha uint8_t max_policers; 9111f1c25c7SPrabhakar Kushwaha uint8_t max_congestion_ctrl; 912*53e353fcSPrabhakar Kushwaha uint64_t ext_cfg_iova; 913a2a55e51SPrabhakar Kushwaha }; 9141f1c25c7SPrabhakar Kushwaha 915a2a55e51SPrabhakar Kushwaha /** 916a2a55e51SPrabhakar Kushwaha * dpni_get_attributes() - Retrieve DPNI attributes. 91787457d11SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 91887457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 919a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 920*53e353fcSPrabhakar Kushwaha * @attr: Object's attributes 921a2a55e51SPrabhakar Kushwaha * 922a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 923a2a55e51SPrabhakar Kushwaha */ 924a2a55e51SPrabhakar Kushwaha int dpni_get_attributes(struct fsl_mc_io *mc_io, 92587457d11SPrabhakar Kushwaha uint32_t cmd_flags, 926a2a55e51SPrabhakar Kushwaha uint16_t token, 927a2a55e51SPrabhakar Kushwaha struct dpni_attr *attr); 928a2a55e51SPrabhakar Kushwaha 929*53e353fcSPrabhakar Kushwaha /** 930*53e353fcSPrabhakar Kushwaha * dpni_extract_extended_cfg() - extract the extended parameters 931*53e353fcSPrabhakar Kushwaha * @cfg: extended structure 932*53e353fcSPrabhakar Kushwaha * @ext_cfg_buf: 256 bytes of DMA-able memory 933*53e353fcSPrabhakar Kushwaha * 934*53e353fcSPrabhakar Kushwaha * This function has to be called after dpni_get_attributes() 935*53e353fcSPrabhakar Kushwaha */ 936*53e353fcSPrabhakar Kushwaha int dpni_extract_extended_cfg(struct dpni_extended_cfg *cfg, 937*53e353fcSPrabhakar Kushwaha const uint8_t *ext_cfg_buf); 938*53e353fcSPrabhakar Kushwaha 939*53e353fcSPrabhakar Kushwaha /** 940*53e353fcSPrabhakar Kushwaha * DPNI errors 941*53e353fcSPrabhakar Kushwaha */ 942*53e353fcSPrabhakar Kushwaha 943*53e353fcSPrabhakar Kushwaha /** 944*53e353fcSPrabhakar Kushwaha * Extract out of frame header error 945*53e353fcSPrabhakar Kushwaha */ 946*53e353fcSPrabhakar Kushwaha #define DPNI_ERROR_EOFHE 0x00020000 947*53e353fcSPrabhakar Kushwaha /** 948*53e353fcSPrabhakar Kushwaha * Frame length error 949*53e353fcSPrabhakar Kushwaha */ 950*53e353fcSPrabhakar Kushwaha #define DPNI_ERROR_FLE 0x00002000 951*53e353fcSPrabhakar Kushwaha /** 952*53e353fcSPrabhakar Kushwaha * Frame physical error 953*53e353fcSPrabhakar Kushwaha */ 954*53e353fcSPrabhakar Kushwaha #define DPNI_ERROR_FPE 0x00001000 955*53e353fcSPrabhakar Kushwaha /** 956*53e353fcSPrabhakar Kushwaha * Parsing header error 957*53e353fcSPrabhakar Kushwaha */ 958*53e353fcSPrabhakar Kushwaha #define DPNI_ERROR_PHE 0x00000020 959*53e353fcSPrabhakar Kushwaha /** 960*53e353fcSPrabhakar Kushwaha * Parser L3 checksum error 961*53e353fcSPrabhakar Kushwaha */ 962*53e353fcSPrabhakar Kushwaha #define DPNI_ERROR_L3CE 0x00000004 963*53e353fcSPrabhakar Kushwaha /** 964*53e353fcSPrabhakar Kushwaha * Parser L3 checksum error 965*53e353fcSPrabhakar Kushwaha */ 966*53e353fcSPrabhakar Kushwaha #define DPNI_ERROR_L4CE 0x00000001 967*53e353fcSPrabhakar Kushwaha 968*53e353fcSPrabhakar Kushwaha /** 969*53e353fcSPrabhakar Kushwaha * enum dpni_error_action - Defines DPNI behavior for errors 970*53e353fcSPrabhakar Kushwaha * @DPNI_ERROR_ACTION_DISCARD: Discard the frame 971*53e353fcSPrabhakar Kushwaha * @DPNI_ERROR_ACTION_CONTINUE: Continue with the normal flow 972*53e353fcSPrabhakar Kushwaha * @DPNI_ERROR_ACTION_SEND_TO_ERROR_QUEUE: Send the frame to the error queue 973*53e353fcSPrabhakar Kushwaha */ 974*53e353fcSPrabhakar Kushwaha enum dpni_error_action { 975*53e353fcSPrabhakar Kushwaha DPNI_ERROR_ACTION_DISCARD = 0, 976*53e353fcSPrabhakar Kushwaha DPNI_ERROR_ACTION_CONTINUE = 1, 977*53e353fcSPrabhakar Kushwaha DPNI_ERROR_ACTION_SEND_TO_ERROR_QUEUE = 2 978*53e353fcSPrabhakar Kushwaha }; 979*53e353fcSPrabhakar Kushwaha 980*53e353fcSPrabhakar Kushwaha /** 981*53e353fcSPrabhakar Kushwaha * struct dpni_error_cfg - Structure representing DPNI errors treatment 982*53e353fcSPrabhakar Kushwaha * @errors: Errors mask; use 'DPNI_ERROR__<X> 983*53e353fcSPrabhakar Kushwaha * @error_action: The desired action for the errors mask 984*53e353fcSPrabhakar Kushwaha * @set_frame_annotation: Set to '1' to mark the errors in frame annotation 985*53e353fcSPrabhakar Kushwaha * status (FAS); relevant only for the non-discard action 986*53e353fcSPrabhakar Kushwaha */ 987*53e353fcSPrabhakar Kushwaha struct dpni_error_cfg { 988*53e353fcSPrabhakar Kushwaha uint32_t errors; 989*53e353fcSPrabhakar Kushwaha enum dpni_error_action error_action; 990*53e353fcSPrabhakar Kushwaha int set_frame_annotation; 991*53e353fcSPrabhakar Kushwaha }; 992*53e353fcSPrabhakar Kushwaha 993*53e353fcSPrabhakar Kushwaha /** 994*53e353fcSPrabhakar Kushwaha * dpni_set_errors_behavior() - Set errors behavior 995*53e353fcSPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 996*53e353fcSPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 997*53e353fcSPrabhakar Kushwaha * @token: Token of DPNI object 998*53e353fcSPrabhakar Kushwaha * @cfg: Errors configuration 999*53e353fcSPrabhakar Kushwaha * 1000*53e353fcSPrabhakar Kushwaha * this function may be called numerous times with different 1001*53e353fcSPrabhakar Kushwaha * error masks 1002*53e353fcSPrabhakar Kushwaha * 1003*53e353fcSPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1004*53e353fcSPrabhakar Kushwaha */ 1005*53e353fcSPrabhakar Kushwaha int dpni_set_errors_behavior(struct fsl_mc_io *mc_io, 1006*53e353fcSPrabhakar Kushwaha uint32_t cmd_flags, 1007*53e353fcSPrabhakar Kushwaha uint16_t token, 1008*53e353fcSPrabhakar Kushwaha struct dpni_error_cfg *cfg); 1009*53e353fcSPrabhakar Kushwaha 1010a2a55e51SPrabhakar Kushwaha /* DPNI buffer layout modification options */ 1011a2a55e51SPrabhakar Kushwaha 1012a2a55e51SPrabhakar Kushwaha /* Select to modify the time-stamp setting */ 1013a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_TIMESTAMP 0x00000001 1014a2a55e51SPrabhakar Kushwaha /* Select to modify the parser-result setting; not applicable for Tx */ 1015a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_PARSER_RESULT 0x00000002 1016a2a55e51SPrabhakar Kushwaha /* Select to modify the frame-status setting */ 1017a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_FRAME_STATUS 0x00000004 1018a2a55e51SPrabhakar Kushwaha /* Select to modify the private-data-size setting */ 1019a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_PRIVATE_DATA_SIZE 0x00000008 1020a2a55e51SPrabhakar Kushwaha /* Select to modify the data-alignment setting */ 1021a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_DATA_ALIGN 0x00000010 1022a2a55e51SPrabhakar Kushwaha /* Select to modify the data-head-room setting */ 1023a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_DATA_HEAD_ROOM 0x00000020 1024a2a55e51SPrabhakar Kushwaha /*!< Select to modify the data-tail-room setting */ 1025a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_DATA_TAIL_ROOM 0x00000040 1026a2a55e51SPrabhakar Kushwaha 1027a2a55e51SPrabhakar Kushwaha /** 1028a2a55e51SPrabhakar Kushwaha * struct dpni_buffer_layout - Structure representing DPNI buffer layout 1029a2a55e51SPrabhakar Kushwaha * @options: Flags representing the suggested modifications to the buffer 1030a2a55e51SPrabhakar Kushwaha * layout; Use any combination of 'DPNI_BUF_LAYOUT_OPT_<X>' flags 1031a2a55e51SPrabhakar Kushwaha * @pass_timestamp: Pass timestamp value 1032a2a55e51SPrabhakar Kushwaha * @pass_parser_result: Pass parser results 1033a2a55e51SPrabhakar Kushwaha * @pass_frame_status: Pass frame status 1034a2a55e51SPrabhakar Kushwaha * @private_data_size: Size kept for private data (in bytes) 1035a2a55e51SPrabhakar Kushwaha * @data_align: Data alignment 1036a2a55e51SPrabhakar Kushwaha * @data_head_room: Data head room 1037a2a55e51SPrabhakar Kushwaha * @data_tail_room: Data tail room 1038a2a55e51SPrabhakar Kushwaha */ 1039a2a55e51SPrabhakar Kushwaha struct dpni_buffer_layout { 1040a2a55e51SPrabhakar Kushwaha uint32_t options; 1041a2a55e51SPrabhakar Kushwaha int pass_timestamp; 1042a2a55e51SPrabhakar Kushwaha int pass_parser_result; 1043a2a55e51SPrabhakar Kushwaha int pass_frame_status; 1044a2a55e51SPrabhakar Kushwaha uint16_t private_data_size; 1045a2a55e51SPrabhakar Kushwaha uint16_t data_align; 1046a2a55e51SPrabhakar Kushwaha uint16_t data_head_room; 1047a2a55e51SPrabhakar Kushwaha uint16_t data_tail_room; 1048a2a55e51SPrabhakar Kushwaha }; 1049a2a55e51SPrabhakar Kushwaha 1050a2a55e51SPrabhakar Kushwaha /** 1051a2a55e51SPrabhakar Kushwaha * dpni_get_rx_buffer_layout() - Retrieve Rx buffer layout attributes. 1052a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 105387457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1054a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1055a2a55e51SPrabhakar Kushwaha * @layout: Returns buffer layout attributes 1056a2a55e51SPrabhakar Kushwaha * 1057a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1058a2a55e51SPrabhakar Kushwaha */ 1059a2a55e51SPrabhakar Kushwaha int dpni_get_rx_buffer_layout(struct fsl_mc_io *mc_io, 106087457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1061a2a55e51SPrabhakar Kushwaha uint16_t token, 1062a2a55e51SPrabhakar Kushwaha struct dpni_buffer_layout *layout); 10631f1c25c7SPrabhakar Kushwaha 1064a2a55e51SPrabhakar Kushwaha /** 1065a2a55e51SPrabhakar Kushwaha * dpni_set_rx_buffer_layout() - Set Rx buffer layout 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 * @layout: Buffer layout configuration 1070a2a55e51SPrabhakar Kushwaha * 1071a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1072a2a55e51SPrabhakar Kushwaha * 1073a2a55e51SPrabhakar Kushwaha * @warning Allowed only when DPNI is disabled 1074a2a55e51SPrabhakar Kushwaha */ 1075a2a55e51SPrabhakar Kushwaha int dpni_set_rx_buffer_layout(struct fsl_mc_io *mc_io, 107687457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1077a2a55e51SPrabhakar Kushwaha uint16_t token, 1078a2a55e51SPrabhakar Kushwaha const struct dpni_buffer_layout *layout); 1079a2a55e51SPrabhakar Kushwaha 1080a2a55e51SPrabhakar Kushwaha /** 1081a2a55e51SPrabhakar Kushwaha * dpni_get_tx_buffer_layout() - Retrieve Tx buffer layout attributes. 1082a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 108387457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1084a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1085a2a55e51SPrabhakar Kushwaha * @layout: Returns buffer layout attributes 1086a2a55e51SPrabhakar Kushwaha * 1087a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1088a2a55e51SPrabhakar Kushwaha */ 1089a2a55e51SPrabhakar Kushwaha int dpni_get_tx_buffer_layout(struct fsl_mc_io *mc_io, 109087457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1091a2a55e51SPrabhakar Kushwaha uint16_t token, 1092a2a55e51SPrabhakar Kushwaha struct dpni_buffer_layout *layout); 1093a2a55e51SPrabhakar Kushwaha 1094a2a55e51SPrabhakar Kushwaha /** 10951f1c25c7SPrabhakar Kushwaha * dpni_set_tx_buffer_layout() - Set Tx buffer layout configuration. 10961f1c25c7SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 109787457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 10981f1c25c7SPrabhakar Kushwaha * @token: Token of DPNI object 10991f1c25c7SPrabhakar Kushwaha * @layout: Buffer layout configuration 1100a2a55e51SPrabhakar Kushwaha * 11011f1c25c7SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1102a2a55e51SPrabhakar Kushwaha * 1103a2a55e51SPrabhakar Kushwaha * @warning Allowed only when DPNI is disabled 1104a2a55e51SPrabhakar Kushwaha */ 1105a2a55e51SPrabhakar Kushwaha int dpni_set_tx_buffer_layout(struct fsl_mc_io *mc_io, 110687457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1107a2a55e51SPrabhakar Kushwaha uint16_t token, 1108a2a55e51SPrabhakar Kushwaha const struct dpni_buffer_layout *layout); 11091f1c25c7SPrabhakar Kushwaha 1110a2a55e51SPrabhakar Kushwaha /** 1111a2a55e51SPrabhakar Kushwaha * dpni_get_tx_conf_buffer_layout() - Retrieve Tx confirmation buffer layout 1112a2a55e51SPrabhakar Kushwaha * attributes. 1113a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 111487457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1115a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1116a2a55e51SPrabhakar Kushwaha * @layout: Returns buffer layout attributes 1117a2a55e51SPrabhakar Kushwaha * 1118a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1119a2a55e51SPrabhakar Kushwaha */ 1120a2a55e51SPrabhakar Kushwaha int dpni_get_tx_conf_buffer_layout(struct fsl_mc_io *mc_io, 112187457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1122a2a55e51SPrabhakar Kushwaha uint16_t token, 1123a2a55e51SPrabhakar Kushwaha struct dpni_buffer_layout *layout); 11241f1c25c7SPrabhakar Kushwaha 1125a2a55e51SPrabhakar Kushwaha /** 1126a2a55e51SPrabhakar Kushwaha * dpni_set_tx_conf_buffer_layout() - Set Tx confirmation buffer layout 1127a2a55e51SPrabhakar Kushwaha * configuration. 1128a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 112987457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1130a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1131a2a55e51SPrabhakar Kushwaha * @layout: Buffer layout configuration 1132a2a55e51SPrabhakar Kushwaha * 1133a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1134a2a55e51SPrabhakar Kushwaha * 1135a2a55e51SPrabhakar Kushwaha * @warning Allowed only when DPNI is disabled 1136a2a55e51SPrabhakar Kushwaha */ 1137a2a55e51SPrabhakar Kushwaha int dpni_set_tx_conf_buffer_layout(struct fsl_mc_io *mc_io, 113887457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1139a2a55e51SPrabhakar Kushwaha uint16_t token, 1140a2a55e51SPrabhakar Kushwaha const struct dpni_buffer_layout *layout); 11411f1c25c7SPrabhakar Kushwaha 1142a2a55e51SPrabhakar Kushwaha /** 11431f1c25c7SPrabhakar Kushwaha * dpni_get_qdid() - Get the Queuing Destination ID (QDID) that should be used 11441f1c25c7SPrabhakar Kushwaha * for enqueue operations 1145a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 114687457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1147a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 11481f1c25c7SPrabhakar Kushwaha * @qdid: Returned virtual QDID value that should be used as an argument 11491f1c25c7SPrabhakar Kushwaha * in all enqueue operations 1150a2a55e51SPrabhakar Kushwaha * 1151a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1152a2a55e51SPrabhakar Kushwaha */ 115387457d11SPrabhakar Kushwaha int dpni_get_qdid(struct fsl_mc_io *mc_io, 115487457d11SPrabhakar Kushwaha uint32_t cmd_flags, 115587457d11SPrabhakar Kushwaha uint16_t token, 115687457d11SPrabhakar Kushwaha uint16_t *qdid); 1157a2a55e51SPrabhakar Kushwaha 1158a2a55e51SPrabhakar Kushwaha /** 1159a2a55e51SPrabhakar Kushwaha * dpni_get_tx_data_offset() - Get the Tx data offset (from start of buffer) 1160a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 116187457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1162a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1163a2a55e51SPrabhakar Kushwaha * @data_offset: Tx data offset (from start of buffer) 1164a2a55e51SPrabhakar Kushwaha * 1165a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1166a2a55e51SPrabhakar Kushwaha */ 1167a2a55e51SPrabhakar Kushwaha int dpni_get_tx_data_offset(struct fsl_mc_io *mc_io, 116887457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1169a2a55e51SPrabhakar Kushwaha uint16_t token, 1170a2a55e51SPrabhakar Kushwaha uint16_t *data_offset); 1171a2a55e51SPrabhakar Kushwaha 1172a2a55e51SPrabhakar Kushwaha /** 1173a2a55e51SPrabhakar Kushwaha * enum dpni_counter - DPNI counter types 1174a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_FRAME: Counts ingress frames 1175a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_BYTE: Counts ingress bytes 1176a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_FRAME_DROP: Counts ingress frames dropped due to explicit 1177a2a55e51SPrabhakar Kushwaha * 'drop' setting 1178a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_FRAME_DISCARD: Counts ingress frames discarded due to errors 1179a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_MCAST_FRAME: Counts ingress multicast frames 1180a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_MCAST_BYTE: Counts ingress multicast bytes 1181a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_BCAST_FRAME: Counts ingress broadcast frames 1182a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_BCAST_BYTES: Counts ingress broadcast bytes 1183a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_EGR_FRAME: Counts egress frames 1184a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_EGR_BYTE: Counts egress bytes 1185a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_EGR_FRAME_DISCARD: Counts egress frames discarded due to errors 1186a2a55e51SPrabhakar Kushwaha */ 1187a2a55e51SPrabhakar Kushwaha enum dpni_counter { 1188a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_FRAME = 0x0, 1189a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_BYTE = 0x1, 1190a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_FRAME_DROP = 0x2, 1191a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_FRAME_DISCARD = 0x3, 1192a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_MCAST_FRAME = 0x4, 1193a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_MCAST_BYTE = 0x5, 1194a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_BCAST_FRAME = 0x6, 1195a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_BCAST_BYTES = 0x7, 1196a2a55e51SPrabhakar Kushwaha DPNI_CNT_EGR_FRAME = 0x8, 1197a2a55e51SPrabhakar Kushwaha DPNI_CNT_EGR_BYTE = 0x9, 1198a2a55e51SPrabhakar Kushwaha DPNI_CNT_EGR_FRAME_DISCARD = 0xa 1199a2a55e51SPrabhakar Kushwaha }; 1200a2a55e51SPrabhakar Kushwaha 1201a2a55e51SPrabhakar Kushwaha /** 1202a2a55e51SPrabhakar Kushwaha * dpni_get_counter() - Read a specific DPNI counter 1203a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 120487457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1205a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1206a2a55e51SPrabhakar Kushwaha * @counter: The requested counter 1207a2a55e51SPrabhakar Kushwaha * @value: Returned counter's current value 1208a2a55e51SPrabhakar Kushwaha * 1209a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1210a2a55e51SPrabhakar Kushwaha */ 1211a2a55e51SPrabhakar Kushwaha int dpni_get_counter(struct fsl_mc_io *mc_io, 121287457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1213a2a55e51SPrabhakar Kushwaha uint16_t token, 1214a2a55e51SPrabhakar Kushwaha enum dpni_counter counter, 1215a2a55e51SPrabhakar Kushwaha uint64_t *value); 1216a2a55e51SPrabhakar Kushwaha 1217a2a55e51SPrabhakar Kushwaha /** 1218a2a55e51SPrabhakar Kushwaha * dpni_set_counter() - Set (or clear) a specific DPNI counter 1219a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 122087457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1221a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1222a2a55e51SPrabhakar Kushwaha * @counter: The requested counter 1223a2a55e51SPrabhakar Kushwaha * @value: New counter value; typically pass '0' for resetting 1224a2a55e51SPrabhakar Kushwaha * the counter. 1225a2a55e51SPrabhakar Kushwaha * 1226a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1227a2a55e51SPrabhakar Kushwaha */ 1228a2a55e51SPrabhakar Kushwaha int dpni_set_counter(struct fsl_mc_io *mc_io, 122987457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1230a2a55e51SPrabhakar Kushwaha uint16_t token, 1231a2a55e51SPrabhakar Kushwaha enum dpni_counter counter, 1232a2a55e51SPrabhakar Kushwaha uint64_t value); 12331f1c25c7SPrabhakar Kushwaha 12341f1c25c7SPrabhakar Kushwaha /* Enable auto-negotiation */ 12351f1c25c7SPrabhakar Kushwaha #define DPNI_LINK_OPT_AUTONEG 0x0000000000000001ULL 12361f1c25c7SPrabhakar Kushwaha /* Enable half-duplex mode */ 12371f1c25c7SPrabhakar Kushwaha #define DPNI_LINK_OPT_HALF_DUPLEX 0x0000000000000002ULL 12381f1c25c7SPrabhakar Kushwaha /* Enable pause frames */ 12391f1c25c7SPrabhakar Kushwaha #define DPNI_LINK_OPT_PAUSE 0x0000000000000004ULL 12401f1c25c7SPrabhakar Kushwaha /* Enable a-symmetric pause frames */ 12411f1c25c7SPrabhakar Kushwaha #define DPNI_LINK_OPT_ASYM_PAUSE 0x0000000000000008ULL 12421f1c25c7SPrabhakar Kushwaha 1243a2a55e51SPrabhakar Kushwaha /** 1244a2a55e51SPrabhakar Kushwaha * struct - Structure representing DPNI link configuration 1245a2a55e51SPrabhakar Kushwaha * @rate: Rate 1246a2a55e51SPrabhakar Kushwaha * @options: Mask of available options; use 'DPNI_LINK_OPT_<X>' values 1247a2a55e51SPrabhakar Kushwaha */ 1248a2a55e51SPrabhakar Kushwaha struct dpni_link_cfg { 12491f1c25c7SPrabhakar Kushwaha uint32_t rate; 1250a2a55e51SPrabhakar Kushwaha uint64_t options; 1251a2a55e51SPrabhakar Kushwaha }; 1252a2a55e51SPrabhakar Kushwaha 1253a2a55e51SPrabhakar Kushwaha /** 1254a2a55e51SPrabhakar Kushwaha * dpni_set_link_cfg() - set the link configuration. 1255a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 125687457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1257a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1258a2a55e51SPrabhakar Kushwaha * @cfg: Link configuration 1259a2a55e51SPrabhakar Kushwaha * 1260a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1261a2a55e51SPrabhakar Kushwaha */ 1262a2a55e51SPrabhakar Kushwaha int dpni_set_link_cfg(struct fsl_mc_io *mc_io, 126387457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1264a2a55e51SPrabhakar Kushwaha uint16_t token, 12651f1c25c7SPrabhakar Kushwaha const struct dpni_link_cfg *cfg); 1266a2a55e51SPrabhakar Kushwaha 1267a2a55e51SPrabhakar Kushwaha /** 1268a2a55e51SPrabhakar Kushwaha * struct dpni_link_state - Structure representing DPNI link state 1269a2a55e51SPrabhakar Kushwaha * @rate: Rate 1270a2a55e51SPrabhakar Kushwaha * @options: Mask of available options; use 'DPNI_LINK_OPT_<X>' values 1271a2a55e51SPrabhakar Kushwaha * @up: Link state; '0' for down, '1' for up 1272a2a55e51SPrabhakar Kushwaha */ 1273a2a55e51SPrabhakar Kushwaha struct dpni_link_state { 12741f1c25c7SPrabhakar Kushwaha uint32_t rate; 1275a2a55e51SPrabhakar Kushwaha uint64_t options; 1276a2a55e51SPrabhakar Kushwaha int up; 1277a2a55e51SPrabhakar Kushwaha }; 1278a2a55e51SPrabhakar Kushwaha 1279a2a55e51SPrabhakar Kushwaha /** 1280a2a55e51SPrabhakar Kushwaha * dpni_get_link_state() - Return the link state (either up or down) 1281a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 128287457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1283a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1284a2a55e51SPrabhakar Kushwaha * @state: Returned link state; 1285a2a55e51SPrabhakar Kushwaha * 1286a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1287a2a55e51SPrabhakar Kushwaha */ 1288a2a55e51SPrabhakar Kushwaha int dpni_get_link_state(struct fsl_mc_io *mc_io, 128987457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1290a2a55e51SPrabhakar Kushwaha uint16_t token, 1291a2a55e51SPrabhakar Kushwaha struct dpni_link_state *state); 1292a2a55e51SPrabhakar Kushwaha 1293a2a55e51SPrabhakar Kushwaha /** 1294a2a55e51SPrabhakar Kushwaha * dpni_set_primary_mac_addr() - Set the primary MAC address 1295a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 129687457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1297a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1298a2a55e51SPrabhakar Kushwaha * @mac_addr: MAC address to set as primary address 1299a2a55e51SPrabhakar Kushwaha * 1300a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1301a2a55e51SPrabhakar Kushwaha */ 1302a2a55e51SPrabhakar Kushwaha int dpni_set_primary_mac_addr(struct fsl_mc_io *mc_io, 130387457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1304a2a55e51SPrabhakar Kushwaha uint16_t token, 1305a2a55e51SPrabhakar Kushwaha const uint8_t mac_addr[6]); 13061f1c25c7SPrabhakar Kushwaha 1307a2a55e51SPrabhakar Kushwaha /** 1308a2a55e51SPrabhakar Kushwaha * dpni_get_primary_mac_addr() - Get the primary MAC address 1309a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 131087457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1311a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1312a2a55e51SPrabhakar Kushwaha * @mac_addr: Returned MAC address 1313a2a55e51SPrabhakar Kushwaha * 1314a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1315a2a55e51SPrabhakar Kushwaha */ 1316a2a55e51SPrabhakar Kushwaha int dpni_get_primary_mac_addr(struct fsl_mc_io *mc_io, 131787457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1318a2a55e51SPrabhakar Kushwaha uint16_t token, 1319a2a55e51SPrabhakar Kushwaha uint8_t mac_addr[6]); 13201f1c25c7SPrabhakar Kushwaha 1321a2a55e51SPrabhakar Kushwaha /** 1322a2a55e51SPrabhakar Kushwaha * dpni_add_mac_addr() - Add MAC address filter 1323a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 132487457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1325a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1326a2a55e51SPrabhakar Kushwaha * @mac_addr: MAC address to add 1327a2a55e51SPrabhakar Kushwaha * 1328a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1329a2a55e51SPrabhakar Kushwaha */ 1330a2a55e51SPrabhakar Kushwaha int dpni_add_mac_addr(struct fsl_mc_io *mc_io, 133187457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1332a2a55e51SPrabhakar Kushwaha uint16_t token, 1333a2a55e51SPrabhakar Kushwaha const uint8_t mac_addr[6]); 1334a2a55e51SPrabhakar Kushwaha 1335a2a55e51SPrabhakar Kushwaha /** 1336a2a55e51SPrabhakar Kushwaha * dpni_remove_mac_addr() - Remove MAC address filter 1337a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 133887457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1339a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1340a2a55e51SPrabhakar Kushwaha * @mac_addr: MAC address to remove 1341a2a55e51SPrabhakar Kushwaha * 1342a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1343a2a55e51SPrabhakar Kushwaha */ 1344a2a55e51SPrabhakar Kushwaha int dpni_remove_mac_addr(struct fsl_mc_io *mc_io, 134587457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1346a2a55e51SPrabhakar Kushwaha uint16_t token, 1347a2a55e51SPrabhakar Kushwaha const uint8_t mac_addr[6]); 1348a2a55e51SPrabhakar Kushwaha 1349a2a55e51SPrabhakar Kushwaha /** 1350a2a55e51SPrabhakar Kushwaha * enum dpni_dest - DPNI destination types 13511f1c25c7SPrabhakar Kushwaha * @DPNI_DEST_NONE: Unassigned destination; The queue is set in parked mode and 1352a2a55e51SPrabhakar Kushwaha * does not generate FQDAN notifications; user is expected to 1353a2a55e51SPrabhakar Kushwaha * dequeue from the queue based on polling or other user-defined 1354a2a55e51SPrabhakar Kushwaha * method 1355a2a55e51SPrabhakar Kushwaha * @DPNI_DEST_DPIO: The queue is set in schedule mode and generates FQDAN 1356a2a55e51SPrabhakar Kushwaha * notifications to the specified DPIO; user is expected to dequeue 1357a2a55e51SPrabhakar Kushwaha * from the queue only after notification is received 1358a2a55e51SPrabhakar Kushwaha * @DPNI_DEST_DPCON: The queue is set in schedule mode and does not generate 1359a2a55e51SPrabhakar Kushwaha * FQDAN notifications, but is connected to the specified DPCON 1360a2a55e51SPrabhakar Kushwaha * object; user is expected to dequeue from the DPCON channel 1361a2a55e51SPrabhakar Kushwaha */ 1362a2a55e51SPrabhakar Kushwaha enum dpni_dest { 1363a2a55e51SPrabhakar Kushwaha DPNI_DEST_NONE = 0, 1364a2a55e51SPrabhakar Kushwaha DPNI_DEST_DPIO = 1, 1365a2a55e51SPrabhakar Kushwaha DPNI_DEST_DPCON = 2 1366a2a55e51SPrabhakar Kushwaha }; 1367a2a55e51SPrabhakar Kushwaha 1368a2a55e51SPrabhakar Kushwaha /** 1369a2a55e51SPrabhakar Kushwaha * struct dpni_dest_cfg - Structure representing DPNI destination parameters 1370a2a55e51SPrabhakar Kushwaha * @dest_type: Destination type 1371a2a55e51SPrabhakar Kushwaha * @dest_id: Either DPIO ID or DPCON ID, depending on the destination type 1372a2a55e51SPrabhakar Kushwaha * @priority: Priority selection within the DPIO or DPCON channel; valid values 1373a2a55e51SPrabhakar Kushwaha * are 0-1 or 0-7, depending on the number of priorities in that 1374a2a55e51SPrabhakar Kushwaha * channel; not relevant for 'DPNI_DEST_NONE' option 1375a2a55e51SPrabhakar Kushwaha */ 1376a2a55e51SPrabhakar Kushwaha struct dpni_dest_cfg { 1377a2a55e51SPrabhakar Kushwaha enum dpni_dest dest_type; 1378a2a55e51SPrabhakar Kushwaha int dest_id; 1379a2a55e51SPrabhakar Kushwaha uint8_t priority; 1380a2a55e51SPrabhakar Kushwaha }; 1381a2a55e51SPrabhakar Kushwaha 13821f1c25c7SPrabhakar Kushwaha /** 13831f1c25c7SPrabhakar Kushwaha * enum dpni_flc_type - DPNI FLC types 13841f1c25c7SPrabhakar Kushwaha * @DPNI_FLC_USER_DEFINED: select the FLC to be used for user defined value 13851f1c25c7SPrabhakar Kushwaha * @DPNI_FLC_STASH: select the FLC to be used for stash control 13861f1c25c7SPrabhakar Kushwaha */ 13871f1c25c7SPrabhakar Kushwaha enum dpni_flc_type { 13881f1c25c7SPrabhakar Kushwaha DPNI_FLC_USER_DEFINED = 0, 13891f1c25c7SPrabhakar Kushwaha DPNI_FLC_STASH = 1, 13901f1c25c7SPrabhakar Kushwaha }; 13911f1c25c7SPrabhakar Kushwaha 13921f1c25c7SPrabhakar Kushwaha /** 13931f1c25c7SPrabhakar Kushwaha * enum dpni_stash_size - DPNI FLC stashing size 13941f1c25c7SPrabhakar Kushwaha * @DPNI_STASH_SIZE_0B: no stash 13951f1c25c7SPrabhakar Kushwaha * @DPNI_STASH_SIZE_64B: stashes 64 bytes 13961f1c25c7SPrabhakar Kushwaha * @DPNI_STASH_SIZE_128B: stashes 128 bytes 13971f1c25c7SPrabhakar Kushwaha * @DPNI_STASH_SIZE_192B: stashes 192 bytes 13981f1c25c7SPrabhakar Kushwaha */ 13991f1c25c7SPrabhakar Kushwaha enum dpni_stash_size { 14001f1c25c7SPrabhakar Kushwaha DPNI_STASH_SIZE_0B = 0, 14011f1c25c7SPrabhakar Kushwaha DPNI_STASH_SIZE_64B = 1, 14021f1c25c7SPrabhakar Kushwaha DPNI_STASH_SIZE_128B = 2, 14031f1c25c7SPrabhakar Kushwaha DPNI_STASH_SIZE_192B = 3, 14041f1c25c7SPrabhakar Kushwaha }; 14051f1c25c7SPrabhakar Kushwaha 14061f1c25c7SPrabhakar Kushwaha /* DPNI FLC stash options */ 14071f1c25c7SPrabhakar Kushwaha 14081f1c25c7SPrabhakar Kushwaha /* stashes the whole annotation area (up to 192 bytes) */ 14091f1c25c7SPrabhakar Kushwaha #define DPNI_FLC_STASH_FRAME_ANNOTATION 0x00000001 14101f1c25c7SPrabhakar Kushwaha 14111f1c25c7SPrabhakar Kushwaha /** 14121f1c25c7SPrabhakar Kushwaha * struct dpni_flc_cfg - Structure representing DPNI FLC configuration 14131f1c25c7SPrabhakar Kushwaha * @flc_type: FLC type 14141f1c25c7SPrabhakar Kushwaha * @options: Mask of available options; 14151f1c25c7SPrabhakar Kushwaha * use 'DPNI_FLC_STASH_<X>' values 14161f1c25c7SPrabhakar Kushwaha * @frame_data_size: Size of frame data to be stashed 14171f1c25c7SPrabhakar Kushwaha * @flow_context_size: Size of flow context to be stashed 14181f1c25c7SPrabhakar Kushwaha * @flow_context: 1. In case flc_type is 'DPNI_FLC_USER_DEFINED': 14191f1c25c7SPrabhakar Kushwaha * this value will be provided in the frame descriptor 14201f1c25c7SPrabhakar Kushwaha * (FD[FLC]) 14211f1c25c7SPrabhakar Kushwaha * 2. In case flc_type is 'DPNI_FLC_STASH': 14221f1c25c7SPrabhakar Kushwaha * this value will be I/O virtual address of the 14231f1c25c7SPrabhakar Kushwaha * flow-context; 14241f1c25c7SPrabhakar Kushwaha * Must be cacheline-aligned and DMA-able memory 14251f1c25c7SPrabhakar Kushwaha */ 14261f1c25c7SPrabhakar Kushwaha struct dpni_flc_cfg { 14271f1c25c7SPrabhakar Kushwaha enum dpni_flc_type flc_type; 14281f1c25c7SPrabhakar Kushwaha uint32_t options; 14291f1c25c7SPrabhakar Kushwaha enum dpni_stash_size frame_data_size; 14301f1c25c7SPrabhakar Kushwaha enum dpni_stash_size flow_context_size; 14311f1c25c7SPrabhakar Kushwaha uint64_t flow_context; 14321f1c25c7SPrabhakar Kushwaha }; 14331f1c25c7SPrabhakar Kushwaha 1434a2a55e51SPrabhakar Kushwaha /* DPNI queue modification options */ 1435a2a55e51SPrabhakar Kushwaha 1436a2a55e51SPrabhakar Kushwaha /* Select to modify the user's context associated with the queue */ 1437a2a55e51SPrabhakar Kushwaha #define DPNI_QUEUE_OPT_USER_CTX 0x00000001 1438a2a55e51SPrabhakar Kushwaha /* Select to modify the queue's destination */ 1439a2a55e51SPrabhakar Kushwaha #define DPNI_QUEUE_OPT_DEST 0x00000002 14401f1c25c7SPrabhakar Kushwaha /** Select to modify the flow-context parameters; 14411f1c25c7SPrabhakar Kushwaha * not applicable for Tx-conf/Err queues as the FD comes from the user 14421f1c25c7SPrabhakar Kushwaha */ 14431f1c25c7SPrabhakar Kushwaha #define DPNI_QUEUE_OPT_FLC 0x00000004 144487457d11SPrabhakar Kushwaha /* Select to modify the queue's order preservation */ 144587457d11SPrabhakar Kushwaha #define DPNI_QUEUE_OPT_ORDER_PRESERVATION 0x00000008 1446*53e353fcSPrabhakar Kushwaha /* Select to modify the queue's tail-drop threshold */ 1447*53e353fcSPrabhakar Kushwaha #define DPNI_QUEUE_OPT_TAILDROP_THRESHOLD 0x00000010 1448a2a55e51SPrabhakar Kushwaha 1449a2a55e51SPrabhakar Kushwaha /** 1450a2a55e51SPrabhakar Kushwaha * struct dpni_queue_cfg - Structure representing queue configuration 1451a2a55e51SPrabhakar Kushwaha * @options: Flags representing the suggested modifications to the queue; 1452a2a55e51SPrabhakar Kushwaha * Use any combination of 'DPNI_QUEUE_OPT_<X>' flags 1453a2a55e51SPrabhakar Kushwaha * @user_ctx: User context value provided in the frame descriptor of each 1454a2a55e51SPrabhakar Kushwaha * dequeued frame; valid only if 'DPNI_QUEUE_OPT_USER_CTX' 1455a2a55e51SPrabhakar Kushwaha * is contained in 'options' 1456a2a55e51SPrabhakar Kushwaha * @dest_cfg: Queue destination parameters; 1457a2a55e51SPrabhakar Kushwaha * valid only if 'DPNI_QUEUE_OPT_DEST' is contained in 'options' 14581f1c25c7SPrabhakar Kushwaha * @flc_cfg: Flow context configuration; in case the TC's distribution 14591f1c25c7SPrabhakar Kushwaha * is either NONE or HASH the FLC's settings of flow#0 are used. 14601f1c25c7SPrabhakar Kushwaha * in the case of FS (flow-steering) the flow's FLC settings 14611f1c25c7SPrabhakar Kushwaha * are used. 14621f1c25c7SPrabhakar Kushwaha * valid only if 'DPNI_QUEUE_OPT_FLC' is contained in 'options' 146387457d11SPrabhakar Kushwaha * @order_preservation_en: enable/disable order preservation; 146487457d11SPrabhakar Kushwaha * valid only if 'DPNI_QUEUE_OPT_ORDER_PRESERVATION' is contained 146587457d11SPrabhakar Kushwaha * in 'options' 1466*53e353fcSPrabhakar Kushwaha * @tail_drop_threshold: set the queue's tail drop threshold in bytes; 1467*53e353fcSPrabhakar Kushwaha * '0' value disable the threshold; maximum value is 0xE000000; 1468*53e353fcSPrabhakar Kushwaha * valid only if 'DPNI_QUEUE_OPT_TAILDROP_THRESHOLD' is contained 1469*53e353fcSPrabhakar Kushwaha * in 'options' 1470a2a55e51SPrabhakar Kushwaha */ 1471a2a55e51SPrabhakar Kushwaha struct dpni_queue_cfg { 1472a2a55e51SPrabhakar Kushwaha uint32_t options; 1473a2a55e51SPrabhakar Kushwaha uint64_t user_ctx; 1474a2a55e51SPrabhakar Kushwaha struct dpni_dest_cfg dest_cfg; 14751f1c25c7SPrabhakar Kushwaha struct dpni_flc_cfg flc_cfg; 147687457d11SPrabhakar Kushwaha int order_preservation_en; 1477*53e353fcSPrabhakar Kushwaha uint32_t tail_drop_threshold; 1478a2a55e51SPrabhakar Kushwaha }; 1479a2a55e51SPrabhakar Kushwaha 1480a2a55e51SPrabhakar Kushwaha /** 1481a2a55e51SPrabhakar Kushwaha * struct dpni_queue_attr - Structure representing queue attributes 1482a2a55e51SPrabhakar Kushwaha * @user_ctx: User context value provided in the frame descriptor of each 1483a2a55e51SPrabhakar Kushwaha * dequeued frame 1484a2a55e51SPrabhakar Kushwaha * @dest_cfg: Queue destination configuration 14851f1c25c7SPrabhakar Kushwaha * @flc_cfg: Flow context configuration 148687457d11SPrabhakar Kushwaha * @order_preservation_en: enable/disable order preservation 1487*53e353fcSPrabhakar Kushwaha * @tail_drop_threshold: queue's tail drop threshold in bytes; 1488a2a55e51SPrabhakar Kushwaha * @fqid: Virtual fqid value to be used for dequeue operations 1489a2a55e51SPrabhakar Kushwaha */ 1490a2a55e51SPrabhakar Kushwaha struct dpni_queue_attr { 1491a2a55e51SPrabhakar Kushwaha uint64_t user_ctx; 1492a2a55e51SPrabhakar Kushwaha struct dpni_dest_cfg dest_cfg; 14931f1c25c7SPrabhakar Kushwaha struct dpni_flc_cfg flc_cfg; 149487457d11SPrabhakar Kushwaha int order_preservation_en; 1495*53e353fcSPrabhakar Kushwaha uint32_t tail_drop_threshold; 1496a2a55e51SPrabhakar Kushwaha uint32_t fqid; 1497a2a55e51SPrabhakar Kushwaha }; 1498a2a55e51SPrabhakar Kushwaha 1499a2a55e51SPrabhakar Kushwaha /* DPNI Tx flow modification options */ 1500a2a55e51SPrabhakar Kushwaha 1501a2a55e51SPrabhakar Kushwaha /* Select to modify the settings for dedicate Tx confirmation/error */ 1502a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_TX_CONF_ERROR 0x00000001 1503a2a55e51SPrabhakar Kushwaha /*!< Select to modify the L3 checksum generation setting */ 1504a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_L3_CHKSUM_GEN 0x00000010 1505a2a55e51SPrabhakar Kushwaha /*!< Select to modify the L4 checksum generation setting */ 1506a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_L4_CHKSUM_GEN 0x00000020 1507a2a55e51SPrabhakar Kushwaha 1508a2a55e51SPrabhakar Kushwaha /** 1509a2a55e51SPrabhakar Kushwaha * struct dpni_tx_flow_cfg - Structure representing Tx flow configuration 1510a2a55e51SPrabhakar Kushwaha * @options: Flags representing the suggested modifications to the Tx flow; 1511a2a55e51SPrabhakar Kushwaha * Use any combination 'DPNI_TX_FLOW_OPT_<X>' flags 1512*53e353fcSPrabhakar Kushwaha * @use_common_tx_conf_queue: Set to '1' to use the common (default) Tx 1513*53e353fcSPrabhakar Kushwaha * confirmation and error queue; Set to '0' to use the private 1514*53e353fcSPrabhakar Kushwaha * Tx confirmation and error queue; valid only if 1515*53e353fcSPrabhakar Kushwaha * 'DPNI_OPT_PRIVATE_TX_CONF_ERROR_DISABLED' wasn't set at DPNI creation 1516*53e353fcSPrabhakar Kushwaha * and 'DPNI_TX_FLOW_OPT_TX_CONF_ERROR' is contained in 'options' 1517a2a55e51SPrabhakar Kushwaha * @l3_chksum_gen: Set to '1' to enable L3 checksum generation; '0' to disable; 1518*53e353fcSPrabhakar Kushwaha * valid only if 'DPNI_TX_FLOW_OPT_L3_CHKSUM_GEN' is contained in 'options' 1519a2a55e51SPrabhakar Kushwaha * @l4_chksum_gen: Set to '1' to enable L4 checksum generation; '0' to disable; 1520*53e353fcSPrabhakar Kushwaha * valid only if 'DPNI_TX_FLOW_OPT_L4_CHKSUM_GEN' is contained in 'options' 1521a2a55e51SPrabhakar Kushwaha */ 1522a2a55e51SPrabhakar Kushwaha struct dpni_tx_flow_cfg { 1523a2a55e51SPrabhakar Kushwaha uint32_t options; 1524*53e353fcSPrabhakar Kushwaha int use_common_tx_conf_queue; 1525a2a55e51SPrabhakar Kushwaha int l3_chksum_gen; 1526a2a55e51SPrabhakar Kushwaha int l4_chksum_gen; 1527a2a55e51SPrabhakar Kushwaha }; 1528a2a55e51SPrabhakar Kushwaha 1529a2a55e51SPrabhakar Kushwaha /** 1530a2a55e51SPrabhakar Kushwaha * dpni_set_tx_flow() - Set Tx flow configuration 1531a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 153287457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1533a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1534a2a55e51SPrabhakar Kushwaha * @flow_id: Provides (or returns) the sender's flow ID; 1535*53e353fcSPrabhakar Kushwaha * for each new sender set (*flow_id) to 'DPNI_NEW_FLOW_ID' to generate 1536*53e353fcSPrabhakar Kushwaha * a new flow_id; this ID should be used as the QDBIN argument 1537a2a55e51SPrabhakar Kushwaha * in enqueue operations 1538a2a55e51SPrabhakar Kushwaha * @cfg: Tx flow configuration 1539a2a55e51SPrabhakar Kushwaha * 1540a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1541a2a55e51SPrabhakar Kushwaha */ 1542a2a55e51SPrabhakar Kushwaha int dpni_set_tx_flow(struct fsl_mc_io *mc_io, 154387457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1544a2a55e51SPrabhakar Kushwaha uint16_t token, 1545a2a55e51SPrabhakar Kushwaha uint16_t *flow_id, 1546a2a55e51SPrabhakar Kushwaha const struct dpni_tx_flow_cfg *cfg); 1547a2a55e51SPrabhakar Kushwaha 1548a2a55e51SPrabhakar Kushwaha /** 1549a2a55e51SPrabhakar Kushwaha * struct dpni_tx_flow_attr - Structure representing Tx flow attributes 1550*53e353fcSPrabhakar Kushwaha * @use_common_tx_conf_queue: '1' if using common (default) Tx confirmation and 1551*53e353fcSPrabhakar Kushwaha * error queue; '0' if using private Tx confirmation and error queue 1552a2a55e51SPrabhakar Kushwaha * @l3_chksum_gen: '1' if L3 checksum generation is enabled; '0' if disabled 1553a2a55e51SPrabhakar Kushwaha * @l4_chksum_gen: '1' if L4 checksum generation is enabled; '0' if disabled 1554a2a55e51SPrabhakar Kushwaha */ 1555a2a55e51SPrabhakar Kushwaha struct dpni_tx_flow_attr { 1556*53e353fcSPrabhakar Kushwaha int use_common_tx_conf_queue; 1557a2a55e51SPrabhakar Kushwaha int l3_chksum_gen; 1558a2a55e51SPrabhakar Kushwaha int l4_chksum_gen; 1559a2a55e51SPrabhakar Kushwaha }; 1560a2a55e51SPrabhakar Kushwaha 1561a2a55e51SPrabhakar Kushwaha /** 1562a2a55e51SPrabhakar Kushwaha * dpni_get_tx_flow() - Get Tx flow attributes 1563a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 156487457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1565a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1566a2a55e51SPrabhakar Kushwaha * @flow_id: The sender's flow ID, as returned by the 1567a2a55e51SPrabhakar Kushwaha * dpni_set_tx_flow() function 1568a2a55e51SPrabhakar Kushwaha * @attr: Returned Tx flow attributes 1569a2a55e51SPrabhakar Kushwaha * 1570a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1571a2a55e51SPrabhakar Kushwaha */ 1572a2a55e51SPrabhakar Kushwaha int dpni_get_tx_flow(struct fsl_mc_io *mc_io, 157387457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1574a2a55e51SPrabhakar Kushwaha uint16_t token, 1575a2a55e51SPrabhakar Kushwaha uint16_t flow_id, 1576a2a55e51SPrabhakar Kushwaha struct dpni_tx_flow_attr *attr); 1577a2a55e51SPrabhakar Kushwaha 1578a2a55e51SPrabhakar Kushwaha /** 1579*53e353fcSPrabhakar Kushwaha * struct dpni_tx_conf_cfg - Structure representing Tx conf configuration 1580*53e353fcSPrabhakar Kushwaha * @errors_only: Set to '1' to report back only error frames; 1581*53e353fcSPrabhakar Kushwaha * Set to '0' to confirm transmission/error for all transmitted frames; 1582*53e353fcSPrabhakar Kushwaha * @queue_cfg: Queue configuration 1583*53e353fcSPrabhakar Kushwaha */ 1584*53e353fcSPrabhakar Kushwaha struct dpni_tx_conf_cfg { 1585*53e353fcSPrabhakar Kushwaha int errors_only; 1586*53e353fcSPrabhakar Kushwaha struct dpni_queue_cfg queue_cfg; 1587*53e353fcSPrabhakar Kushwaha }; 1588*53e353fcSPrabhakar Kushwaha 1589*53e353fcSPrabhakar Kushwaha /** 1590*53e353fcSPrabhakar Kushwaha * dpni_set_tx_conf() - Set Tx confirmation and error queue configuration 1591*53e353fcSPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 1592*53e353fcSPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1593*53e353fcSPrabhakar Kushwaha * @token: Token of DPNI object 1594*53e353fcSPrabhakar Kushwaha * @flow_id: The sender's flow ID, as returned by the 1595*53e353fcSPrabhakar Kushwaha * dpni_set_tx_flow() function; 1596*53e353fcSPrabhakar Kushwaha * use 'DPNI_COMMON_TX_CONF' for common tx-conf 1597*53e353fcSPrabhakar Kushwaha * @cfg: Queue configuration 1598*53e353fcSPrabhakar Kushwaha * 1599*53e353fcSPrabhakar Kushwaha * If either 'DPNI_OPT_TX_CONF_DISABLED' or 1600*53e353fcSPrabhakar Kushwaha * 'DPNI_OPT_PRIVATE_TX_CONF_ERROR_DISABLED' were selected at DPNI creation, 1601*53e353fcSPrabhakar Kushwaha * this function can ONLY be used with 'flow_id == DPNI_COMMON_TX_CONF'; 1602*53e353fcSPrabhakar Kushwaha * i.e. only serve the common tx-conf-err queue; 1603*53e353fcSPrabhakar Kushwaha * if 'DPNI_OPT_TX_CONF_DISABLED' was selected, only error frames are reported 1604*53e353fcSPrabhakar Kushwaha * back - successfully transmitted frames are not confirmed. Otherwise, all 1605*53e353fcSPrabhakar Kushwaha * transmitted frames are sent for confirmation. 1606*53e353fcSPrabhakar Kushwaha * 1607*53e353fcSPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1608*53e353fcSPrabhakar Kushwaha */ 1609*53e353fcSPrabhakar Kushwaha int dpni_set_tx_conf(struct fsl_mc_io *mc_io, 1610*53e353fcSPrabhakar Kushwaha uint32_t cmd_flags, 1611*53e353fcSPrabhakar Kushwaha uint16_t token, 1612*53e353fcSPrabhakar Kushwaha uint16_t flow_id, 1613*53e353fcSPrabhakar Kushwaha const struct dpni_tx_conf_cfg *cfg); 1614*53e353fcSPrabhakar Kushwaha 1615*53e353fcSPrabhakar Kushwaha /** 1616*53e353fcSPrabhakar Kushwaha * struct dpni_tx_conf_attr - Structure representing Tx conf attributes 1617*53e353fcSPrabhakar Kushwaha * @errors_only: '1' if only error frames are reported back; '0' if all 1618*53e353fcSPrabhakar Kushwaha * transmitted frames are confirmed 1619*53e353fcSPrabhakar Kushwaha * @queue_attr: Queue attributes 1620*53e353fcSPrabhakar Kushwaha */ 1621*53e353fcSPrabhakar Kushwaha struct dpni_tx_conf_attr { 1622*53e353fcSPrabhakar Kushwaha int errors_only; 1623*53e353fcSPrabhakar Kushwaha struct dpni_queue_attr queue_attr; 1624*53e353fcSPrabhakar Kushwaha }; 1625*53e353fcSPrabhakar Kushwaha 1626*53e353fcSPrabhakar Kushwaha /** 1627*53e353fcSPrabhakar Kushwaha * dpni_get_tx_conf() - Get Tx confirmation and error queue attributes 1628*53e353fcSPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 1629*53e353fcSPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1630*53e353fcSPrabhakar Kushwaha * @token: Token of DPNI object 1631*53e353fcSPrabhakar Kushwaha * @flow_id: The sender's flow ID, as returned by the 1632*53e353fcSPrabhakar Kushwaha * dpni_set_tx_flow() function; 1633*53e353fcSPrabhakar Kushwaha * use 'DPNI_COMMON_TX_CONF' for common tx-conf 1634*53e353fcSPrabhakar Kushwaha * @attr: Returned tx-conf attributes 1635*53e353fcSPrabhakar Kushwaha * 1636*53e353fcSPrabhakar Kushwaha * If either 'DPNI_OPT_TX_CONF_DISABLED' or 1637*53e353fcSPrabhakar Kushwaha * 'DPNI_OPT_PRIVATE_TX_CONF_ERROR_DISABLED' were selected at DPNI creation, 1638*53e353fcSPrabhakar Kushwaha * this function can ONLY be used with 'flow_id == DPNI_COMMON_TX_CONF'; 1639*53e353fcSPrabhakar Kushwaha * i.e. only serve the common tx-conf-err queue; 1640*53e353fcSPrabhakar Kushwaha * 1641*53e353fcSPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1642*53e353fcSPrabhakar Kushwaha */ 1643*53e353fcSPrabhakar Kushwaha int dpni_get_tx_conf(struct fsl_mc_io *mc_io, 1644*53e353fcSPrabhakar Kushwaha uint32_t cmd_flags, 1645*53e353fcSPrabhakar Kushwaha uint16_t token, 1646*53e353fcSPrabhakar Kushwaha uint16_t flow_id, 1647*53e353fcSPrabhakar Kushwaha struct dpni_tx_conf_attr *attr); 1648*53e353fcSPrabhakar Kushwaha /** 1649a2a55e51SPrabhakar Kushwaha * dpni_set_rx_flow() - Set Rx flow configuration 1650a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 165187457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1652a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1653a2a55e51SPrabhakar Kushwaha * @tc_id: Traffic class selection (0-7); 1654a2a55e51SPrabhakar Kushwaha * use 'DPNI_ALL_TCS' to set all TCs and all flows 165587457d11SPrabhakar Kushwaha * @flow_id: Rx flow id within the traffic class; use 1656a2a55e51SPrabhakar Kushwaha * 'DPNI_ALL_TC_FLOWS' to set all flows within 1657a2a55e51SPrabhakar Kushwaha * this tc_id; ignored if tc_id is set to 1658a2a55e51SPrabhakar Kushwaha * 'DPNI_ALL_TCS'; 1659a2a55e51SPrabhakar Kushwaha * @cfg: Rx flow configuration 1660a2a55e51SPrabhakar Kushwaha * 1661a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1662a2a55e51SPrabhakar Kushwaha */ 1663a2a55e51SPrabhakar Kushwaha int dpni_set_rx_flow(struct fsl_mc_io *mc_io, 166487457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1665a2a55e51SPrabhakar Kushwaha uint16_t token, 1666a2a55e51SPrabhakar Kushwaha uint8_t tc_id, 1667a2a55e51SPrabhakar Kushwaha uint16_t flow_id, 1668a2a55e51SPrabhakar Kushwaha const struct dpni_queue_cfg *cfg); 1669a2a55e51SPrabhakar Kushwaha 1670a2a55e51SPrabhakar Kushwaha /** 1671a2a55e51SPrabhakar Kushwaha * dpni_get_rx_flow() - Get Rx flow attributes 1672a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 167387457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1674a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1675a2a55e51SPrabhakar Kushwaha * @tc_id: Traffic class selection (0-7) 1676a2a55e51SPrabhakar Kushwaha * @flow_id: Rx flow id within the traffic class 1677a2a55e51SPrabhakar Kushwaha * @attr: Returned Rx flow attributes 1678a2a55e51SPrabhakar Kushwaha * 1679a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1680a2a55e51SPrabhakar Kushwaha */ 1681a2a55e51SPrabhakar Kushwaha int dpni_get_rx_flow(struct fsl_mc_io *mc_io, 168287457d11SPrabhakar Kushwaha uint32_t cmd_flags, 1683a2a55e51SPrabhakar Kushwaha uint16_t token, 1684a2a55e51SPrabhakar Kushwaha uint8_t tc_id, 1685a2a55e51SPrabhakar Kushwaha uint16_t flow_id, 1686a2a55e51SPrabhakar Kushwaha struct dpni_queue_attr *attr); 1687a2a55e51SPrabhakar Kushwaha 1688a2a55e51SPrabhakar Kushwaha #endif /* _FSL_DPNI_H */ 1689