1*a2a55e51SPrabhakar Kushwaha /* 2*a2a55e51SPrabhakar Kushwaha * Copyright (C) 2013-2015 Freescale Semiconductor 3*a2a55e51SPrabhakar Kushwaha * 4*a2a55e51SPrabhakar Kushwaha * SPDX-License-Identifier: GPL-2.0+ 5*a2a55e51SPrabhakar Kushwaha */ 6*a2a55e51SPrabhakar Kushwaha #ifndef _FSL_DPNI_H 7*a2a55e51SPrabhakar Kushwaha #define _FSL_DPNI_H 8*a2a55e51SPrabhakar Kushwaha 9*a2a55e51SPrabhakar Kushwaha /* DPNI Version */ 10*a2a55e51SPrabhakar Kushwaha #define DPNI_VER_MAJOR 4 11*a2a55e51SPrabhakar Kushwaha #define DPNI_VER_MINOR 0 12*a2a55e51SPrabhakar Kushwaha 13*a2a55e51SPrabhakar Kushwaha /* Command IDs */ 14*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_OPEN 0x801 15*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_CLOSE 0x800 16*a2a55e51SPrabhakar Kushwaha 17*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_ENABLE 0x002 18*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_DISABLE 0x003 19*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_ATTR 0x004 20*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_RESET 0x005 21*a2a55e51SPrabhakar Kushwaha 22*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_POOLS 0x200 23*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_RX_BUFFER_LAYOUT 0x201 24*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_RX_BUFFER_LAYOUT 0x202 25*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_BUFFER_LAYOUT 0x203 26*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_TX_BUFFER_LAYOUT 0x204 27*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_TX_CONF_BUFFER_LAYOUT 0x205 28*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_CONF_BUFFER_LAYOUT 0x206 29*a2a55e51SPrabhakar Kushwaha 30*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_QDID 0x210 31*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_DATA_OFFSET 0x212 32*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_COUNTER 0x213 33*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_COUNTER 0x214 34*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_LINK_STATE 0x215 35*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_LINK_CFG 0x21A 36*a2a55e51SPrabhakar Kushwaha 37*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_PRIM_MAC 0x224 38*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_PRIM_MAC 0x225 39*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_ADD_MAC_ADDR 0x226 40*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_REMOVE_MAC_ADDR 0x227 41*a2a55e51SPrabhakar Kushwaha 42*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_TX_FLOW 0x236 43*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_FLOW 0x237 44*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_RX_FLOW 0x238 45*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_RX_FLOW 0x239 46*a2a55e51SPrabhakar Kushwaha 47*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 48*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_OPEN(cmd, dpni_id) \ 49*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, dpni_id) 50*a2a55e51SPrabhakar Kushwaha 51*a2a55e51SPrabhakar Kushwaha 52*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 53*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_POOLS(cmd, cfg) \ 54*a2a55e51SPrabhakar Kushwaha do { \ 55*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 8, uint8_t, cfg->num_dpbp); \ 56*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 32, int, cfg->pools[0].dpbp_id); \ 57*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 32, 16, uint16_t, cfg->pools[0].buffer_size);\ 58*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 32, int, cfg->pools[1].dpbp_id); \ 59*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 48, 16, uint16_t, cfg->pools[1].buffer_size);\ 60*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 32, int, cfg->pools[2].dpbp_id); \ 61*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 0, 16, uint16_t, cfg->pools[2].buffer_size);\ 62*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 32, int, cfg->pools[3].dpbp_id); \ 63*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 16, 16, uint16_t, cfg->pools[3].buffer_size);\ 64*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 32, int, cfg->pools[4].dpbp_id); \ 65*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 32, 16, uint16_t, cfg->pools[4].buffer_size);\ 66*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 32, int, cfg->pools[5].dpbp_id); \ 67*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 48, 16, uint16_t, cfg->pools[5].buffer_size);\ 68*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 32, int, cfg->pools[6].dpbp_id); \ 69*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 0, 16, uint16_t, cfg->pools[6].buffer_size);\ 70*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 0, 32, int, cfg->pools[7].dpbp_id); \ 71*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 16, 16, uint16_t, cfg->pools[7].buffer_size);\ 72*a2a55e51SPrabhakar Kushwaha } while (0) 73*a2a55e51SPrabhakar Kushwaha 74*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 75*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_ATTR(cmd, attr) \ 76*a2a55e51SPrabhakar Kushwaha do { \ 77*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 32, int, attr->id);\ 78*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 8, uint8_t, attr->max_tcs); \ 79*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 40, 8, uint8_t, attr->max_senders); \ 80*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 48, 8, enum net_prot, attr->start_hdr); \ 81*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 64, uint64_t, attr->options); \ 82*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 0, 8, uint8_t, attr->max_unicast_filters); \ 83*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 8, 8, uint8_t, attr->max_multicast_filters);\ 84*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 16, 8, uint8_t, attr->max_vlan_filters); \ 85*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 24, 8, uint8_t, attr->max_qos_entries); \ 86*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 32, 8, uint8_t, attr->max_qos_key_size); \ 87*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 40, 8, uint8_t, attr->max_dist_key_size); \ 88*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 0, 8, uint8_t, attr->max_dist_per_tc[0]); \ 89*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 8, 8, uint8_t, attr->max_dist_per_tc[1]); \ 90*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 16, 8, uint8_t, attr->max_dist_per_tc[2]); \ 91*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 24, 8, uint8_t, attr->max_dist_per_tc[3]); \ 92*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 32, 8, uint8_t, attr->max_dist_per_tc[4]); \ 93*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 40, 8, uint8_t, attr->max_dist_per_tc[5]); \ 94*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 48, 8, uint8_t, attr->max_dist_per_tc[6]); \ 95*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 56, 8, uint8_t, attr->max_dist_per_tc[7]); \ 96*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 0, 16, uint16_t, \ 97*a2a55e51SPrabhakar Kushwaha attr->ipr_cfg.max_reass_frm_size); \ 98*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 16, 16, uint16_t, \ 99*a2a55e51SPrabhakar Kushwaha attr->ipr_cfg.min_frag_size_ipv4); \ 100*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 32, 16, uint16_t, \ 101*a2a55e51SPrabhakar Kushwaha attr->ipr_cfg.min_frag_size_ipv6); \ 102*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 0, 16, uint16_t, \ 103*a2a55e51SPrabhakar Kushwaha attr->ipr_cfg.max_open_frames_ipv4); \ 104*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 16, 16, uint16_t, \ 105*a2a55e51SPrabhakar Kushwaha attr->ipr_cfg.max_open_frames_ipv6); \ 106*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 32, 16, uint16_t, attr->version.major);\ 107*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 48, 16, uint16_t, attr->version.minor);\ 108*a2a55e51SPrabhakar Kushwaha } while (0) 109*a2a55e51SPrabhakar Kushwaha 110*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 111*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_RX_BUFFER_LAYOUT(cmd, layout) \ 112*a2a55e51SPrabhakar Kushwaha do { \ 113*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ 114*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ 115*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ 116*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ 117*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ 118*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ 119*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ 120*a2a55e51SPrabhakar Kushwaha } while (0) 121*a2a55e51SPrabhakar Kushwaha 122*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 123*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_RX_BUFFER_LAYOUT(cmd, layout) \ 124*a2a55e51SPrabhakar Kushwaha do { \ 125*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ 126*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ 127*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 32, uint32_t, layout->options); \ 128*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ 129*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ 130*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ 131*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ 132*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ 133*a2a55e51SPrabhakar Kushwaha } while (0) 134*a2a55e51SPrabhakar Kushwaha 135*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 136*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_BUFFER_LAYOUT(cmd, layout) \ 137*a2a55e51SPrabhakar Kushwaha do { \ 138*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ 139*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ 140*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ 141*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ 142*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ 143*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ 144*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ 145*a2a55e51SPrabhakar Kushwaha } while (0) 146*a2a55e51SPrabhakar Kushwaha 147*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 148*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_TX_BUFFER_LAYOUT(cmd, layout) \ 149*a2a55e51SPrabhakar Kushwaha do { \ 150*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ 151*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ 152*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 32, uint32_t, layout->options); \ 153*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ 154*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ 155*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ 156*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ 157*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ 158*a2a55e51SPrabhakar Kushwaha } while (0) 159*a2a55e51SPrabhakar Kushwaha 160*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 161*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_CONF_BUFFER_LAYOUT(cmd, layout) \ 162*a2a55e51SPrabhakar Kushwaha do { \ 163*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ 164*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ 165*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ 166*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ 167*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ 168*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ 169*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ 170*a2a55e51SPrabhakar Kushwaha } while (0) 171*a2a55e51SPrabhakar Kushwaha 172*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 173*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_TX_CONF_BUFFER_LAYOUT(cmd, layout) \ 174*a2a55e51SPrabhakar Kushwaha do { \ 175*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ 176*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ 177*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 32, uint32_t, layout->options); \ 178*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ 179*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ 180*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ 181*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ 182*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ 183*a2a55e51SPrabhakar Kushwaha } while (0) 184*a2a55e51SPrabhakar Kushwaha 185*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 186*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_QDID(cmd, qdid) \ 187*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 16, uint16_t, qdid) 188*a2a55e51SPrabhakar Kushwaha 189*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 190*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_DATA_OFFSET(cmd, data_offset) \ 191*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 16, uint16_t, data_offset) 192*a2a55e51SPrabhakar Kushwaha 193*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 194*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_GET_COUNTER(cmd, counter) \ 195*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 16, enum dpni_counter, counter) 196*a2a55e51SPrabhakar Kushwaha 197*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 198*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_COUNTER(cmd, value) \ 199*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 64, uint64_t, value) 200*a2a55e51SPrabhakar Kushwaha 201*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 202*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_COUNTER(cmd, counter, value) \ 203*a2a55e51SPrabhakar Kushwaha do { \ 204*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 16, enum dpni_counter, counter); \ 205*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 64, uint64_t, value); \ 206*a2a55e51SPrabhakar Kushwaha } while (0) 207*a2a55e51SPrabhakar Kushwaha 208*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 209*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_LINK_CFG(cmd, cfg) \ 210*a2a55e51SPrabhakar Kushwaha do { \ 211*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 64, uint64_t, cfg->rate);\ 212*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 64, uint64_t, cfg->options);\ 213*a2a55e51SPrabhakar Kushwaha } while (0) 214*a2a55e51SPrabhakar Kushwaha 215*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 216*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_LINK_STATE(cmd, state) \ 217*a2a55e51SPrabhakar Kushwaha do { \ 218*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 1, int, state->up);\ 219*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 64, uint64_t, state->rate);\ 220*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 0, 64, uint64_t, state->options);\ 221*a2a55e51SPrabhakar Kushwaha } while (0) 222*a2a55e51SPrabhakar Kushwaha 223*a2a55e51SPrabhakar Kushwaha 224*a2a55e51SPrabhakar Kushwaha 225*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 226*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_PRIMARY_MAC_ADDR(cmd, mac_addr) \ 227*a2a55e51SPrabhakar Kushwaha do { \ 228*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 8, uint8_t, mac_addr[5]); \ 229*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 24, 8, uint8_t, mac_addr[4]); \ 230*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, mac_addr[3]); \ 231*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 40, 8, uint8_t, mac_addr[2]); \ 232*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 8, uint8_t, mac_addr[1]); \ 233*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 56, 8, uint8_t, mac_addr[0]); \ 234*a2a55e51SPrabhakar Kushwaha } while (0) 235*a2a55e51SPrabhakar Kushwaha 236*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 237*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_PRIMARY_MAC_ADDR(cmd, mac_addr) \ 238*a2a55e51SPrabhakar Kushwaha do { \ 239*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 16, 8, uint8_t, mac_addr[5]); \ 240*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 24, 8, uint8_t, mac_addr[4]); \ 241*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 8, uint8_t, mac_addr[3]); \ 242*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 40, 8, uint8_t, mac_addr[2]); \ 243*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 48, 8, uint8_t, mac_addr[1]); \ 244*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 56, 8, uint8_t, mac_addr[0]); \ 245*a2a55e51SPrabhakar Kushwaha } while (0) 246*a2a55e51SPrabhakar Kushwaha 247*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 248*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_ADD_MAC_ADDR(cmd, mac_addr) \ 249*a2a55e51SPrabhakar Kushwaha do { \ 250*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 8, uint8_t, mac_addr[5]); \ 251*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 24, 8, uint8_t, mac_addr[4]); \ 252*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, mac_addr[3]); \ 253*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 40, 8, uint8_t, mac_addr[2]); \ 254*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 8, uint8_t, mac_addr[1]); \ 255*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 56, 8, uint8_t, mac_addr[0]); \ 256*a2a55e51SPrabhakar Kushwaha } while (0) 257*a2a55e51SPrabhakar Kushwaha 258*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 259*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_REMOVE_MAC_ADDR(cmd, mac_addr) \ 260*a2a55e51SPrabhakar Kushwaha do { \ 261*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 8, uint8_t, mac_addr[5]); \ 262*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 24, 8, uint8_t, mac_addr[4]); \ 263*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, mac_addr[3]); \ 264*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 40, 8, uint8_t, mac_addr[2]); \ 265*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 8, uint8_t, mac_addr[1]); \ 266*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 56, 8, uint8_t, mac_addr[0]); \ 267*a2a55e51SPrabhakar Kushwaha } while (0) 268*a2a55e51SPrabhakar Kushwaha 269*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 270*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_TX_FLOW(cmd, flow_id, cfg) \ 271*a2a55e51SPrabhakar Kushwaha do { \ 272*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, \ 273*a2a55e51SPrabhakar Kushwaha cfg->conf_err_cfg.queue_cfg.dest_cfg.dest_id);\ 274*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, \ 275*a2a55e51SPrabhakar Kushwaha cfg->conf_err_cfg.queue_cfg.dest_cfg.priority);\ 276*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 40, 2, enum dpni_dest, \ 277*a2a55e51SPrabhakar Kushwaha cfg->conf_err_cfg.queue_cfg.dest_cfg.dest_type);\ 278*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 42, 1, int, cfg->conf_err_cfg.errors_only);\ 279*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 43, 1, int, cfg->l3_chksum_gen);\ 280*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 44, 1, int, cfg->l4_chksum_gen);\ 281*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 45, 1, int, \ 282*a2a55e51SPrabhakar Kushwaha cfg->conf_err_cfg.use_default_queue);\ 283*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id);\ 284*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 64, uint64_t, \ 285*a2a55e51SPrabhakar Kushwaha cfg->conf_err_cfg.queue_cfg.user_ctx);\ 286*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 32, uint32_t, cfg->options);\ 287*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 32, uint32_t, \ 288*a2a55e51SPrabhakar Kushwaha cfg->conf_err_cfg.queue_cfg.options);\ 289*a2a55e51SPrabhakar Kushwaha } while (0) 290*a2a55e51SPrabhakar Kushwaha 291*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 292*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_SET_TX_FLOW(cmd, flow_id) \ 293*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 48, 16, uint16_t, flow_id) 294*a2a55e51SPrabhakar Kushwaha 295*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 296*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_GET_TX_FLOW(cmd, flow_id) \ 297*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id) 298*a2a55e51SPrabhakar Kushwaha 299*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 300*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_FLOW(cmd, attr) \ 301*a2a55e51SPrabhakar Kushwaha do { \ 302*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 32, int, \ 303*a2a55e51SPrabhakar Kushwaha attr->conf_err_attr.queue_attr.dest_cfg.dest_id);\ 304*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 8, uint8_t, \ 305*a2a55e51SPrabhakar Kushwaha attr->conf_err_attr.queue_attr.dest_cfg.priority);\ 306*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 40, 2, enum dpni_dest, \ 307*a2a55e51SPrabhakar Kushwaha attr->conf_err_attr.queue_attr.dest_cfg.dest_type);\ 308*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 42, 1, int, attr->conf_err_attr.errors_only);\ 309*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 43, 1, int, attr->l3_chksum_gen);\ 310*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 44, 1, int, attr->l4_chksum_gen);\ 311*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 45, 1, int, \ 312*a2a55e51SPrabhakar Kushwaha attr->conf_err_attr.use_default_queue);\ 313*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 64, uint64_t, \ 314*a2a55e51SPrabhakar Kushwaha attr->conf_err_attr.queue_attr.user_ctx);\ 315*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 32, 32, uint32_t, \ 316*a2a55e51SPrabhakar Kushwaha attr->conf_err_attr.queue_attr.fqid);\ 317*a2a55e51SPrabhakar Kushwaha } while (0) 318*a2a55e51SPrabhakar Kushwaha 319*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 320*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_RX_FLOW(cmd, tc_id, flow_id, cfg) \ 321*a2a55e51SPrabhakar Kushwaha do { \ 322*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, cfg->dest_cfg.dest_id); \ 323*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, cfg->dest_cfg.priority);\ 324*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 40, 2, enum dpni_dest, cfg->dest_cfg.dest_type);\ 325*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id); \ 326*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 64, uint64_t, cfg->user_ctx); \ 327*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, uint8_t, tc_id); \ 328*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 32, uint32_t, cfg->options); \ 329*a2a55e51SPrabhakar Kushwaha } while (0) 330*a2a55e51SPrabhakar Kushwaha 331*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 332*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_GET_RX_FLOW(cmd, tc_id, flow_id) \ 333*a2a55e51SPrabhakar Kushwaha do { \ 334*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 8, uint8_t, tc_id); \ 335*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id); \ 336*a2a55e51SPrabhakar Kushwaha } while (0) 337*a2a55e51SPrabhakar Kushwaha 338*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 339*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_RX_FLOW(cmd, attr) \ 340*a2a55e51SPrabhakar Kushwaha do { \ 341*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 32, int, attr->dest_cfg.dest_id); \ 342*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 8, uint8_t, attr->dest_cfg.priority);\ 343*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 40, 2, enum dpni_dest, attr->dest_cfg.dest_type); \ 344*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 64, uint64_t, attr->user_ctx); \ 345*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 32, 32, uint32_t, attr->fqid); \ 346*a2a55e51SPrabhakar Kushwaha } while (0) 347*a2a55e51SPrabhakar Kushwaha 348*a2a55e51SPrabhakar Kushwaha enum net_prot { 349*a2a55e51SPrabhakar Kushwaha NET_PROT_NONE = 0, 350*a2a55e51SPrabhakar Kushwaha NET_PROT_PAYLOAD, 351*a2a55e51SPrabhakar Kushwaha NET_PROT_ETH, 352*a2a55e51SPrabhakar Kushwaha NET_PROT_VLAN, 353*a2a55e51SPrabhakar Kushwaha NET_PROT_IPV4, 354*a2a55e51SPrabhakar Kushwaha NET_PROT_IPV6, 355*a2a55e51SPrabhakar Kushwaha NET_PROT_IP, 356*a2a55e51SPrabhakar Kushwaha NET_PROT_TCP, 357*a2a55e51SPrabhakar Kushwaha NET_PROT_UDP, 358*a2a55e51SPrabhakar Kushwaha NET_PROT_UDP_LITE, 359*a2a55e51SPrabhakar Kushwaha NET_PROT_IPHC, 360*a2a55e51SPrabhakar Kushwaha NET_PROT_SCTP, 361*a2a55e51SPrabhakar Kushwaha NET_PROT_SCTP_CHUNK_DATA, 362*a2a55e51SPrabhakar Kushwaha NET_PROT_PPPOE, 363*a2a55e51SPrabhakar Kushwaha NET_PROT_PPP, 364*a2a55e51SPrabhakar Kushwaha NET_PROT_PPPMUX, 365*a2a55e51SPrabhakar Kushwaha NET_PROT_PPPMUX_SUBFRM, 366*a2a55e51SPrabhakar Kushwaha NET_PROT_L2TPV2, 367*a2a55e51SPrabhakar Kushwaha NET_PROT_L2TPV3_CTRL, 368*a2a55e51SPrabhakar Kushwaha NET_PROT_L2TPV3_SESS, 369*a2a55e51SPrabhakar Kushwaha NET_PROT_LLC, 370*a2a55e51SPrabhakar Kushwaha NET_PROT_LLC_SNAP, 371*a2a55e51SPrabhakar Kushwaha NET_PROT_NLPID, 372*a2a55e51SPrabhakar Kushwaha NET_PROT_SNAP, 373*a2a55e51SPrabhakar Kushwaha NET_PROT_MPLS, 374*a2a55e51SPrabhakar Kushwaha NET_PROT_IPSEC_AH, 375*a2a55e51SPrabhakar Kushwaha NET_PROT_IPSEC_ESP, 376*a2a55e51SPrabhakar Kushwaha NET_PROT_UDP_ENC_ESP, /* RFC 3948 */ 377*a2a55e51SPrabhakar Kushwaha NET_PROT_MACSEC, 378*a2a55e51SPrabhakar Kushwaha NET_PROT_GRE, 379*a2a55e51SPrabhakar Kushwaha NET_PROT_MINENCAP, 380*a2a55e51SPrabhakar Kushwaha NET_PROT_DCCP, 381*a2a55e51SPrabhakar Kushwaha NET_PROT_ICMP, 382*a2a55e51SPrabhakar Kushwaha NET_PROT_IGMP, 383*a2a55e51SPrabhakar Kushwaha NET_PROT_ARP, 384*a2a55e51SPrabhakar Kushwaha NET_PROT_CAPWAP_DATA, 385*a2a55e51SPrabhakar Kushwaha NET_PROT_CAPWAP_CTRL, 386*a2a55e51SPrabhakar Kushwaha NET_PROT_RFC2684, 387*a2a55e51SPrabhakar Kushwaha NET_PROT_ICMPV6, 388*a2a55e51SPrabhakar Kushwaha NET_PROT_FCOE, 389*a2a55e51SPrabhakar Kushwaha NET_PROT_FIP, 390*a2a55e51SPrabhakar Kushwaha NET_PROT_ISCSI, 391*a2a55e51SPrabhakar Kushwaha NET_PROT_GTP, 392*a2a55e51SPrabhakar Kushwaha NET_PROT_USER_DEFINED_L2, 393*a2a55e51SPrabhakar Kushwaha NET_PROT_USER_DEFINED_L3, 394*a2a55e51SPrabhakar Kushwaha NET_PROT_USER_DEFINED_L4, 395*a2a55e51SPrabhakar Kushwaha NET_PROT_USER_DEFINED_L5, 396*a2a55e51SPrabhakar Kushwaha NET_PROT_USER_DEFINED_SHIM1, 397*a2a55e51SPrabhakar Kushwaha NET_PROT_USER_DEFINED_SHIM2, 398*a2a55e51SPrabhakar Kushwaha 399*a2a55e51SPrabhakar Kushwaha NET_PROT_DUMMY_LAST 400*a2a55e51SPrabhakar Kushwaha }; 401*a2a55e51SPrabhakar Kushwaha 402*a2a55e51SPrabhakar Kushwaha /* Data Path Network Interface API 403*a2a55e51SPrabhakar Kushwaha * Contains initialization APIs and runtime control APIs for DPNI 404*a2a55e51SPrabhakar Kushwaha */ 405*a2a55e51SPrabhakar Kushwaha 406*a2a55e51SPrabhakar Kushwaha struct fsl_mc_io; 407*a2a55e51SPrabhakar Kushwaha 408*a2a55e51SPrabhakar Kushwaha /* General DPNI macros */ 409*a2a55e51SPrabhakar Kushwaha 410*a2a55e51SPrabhakar Kushwaha /* Maximum number of traffic classes */ 411*a2a55e51SPrabhakar Kushwaha #define DPNI_MAX_TC 8 412*a2a55e51SPrabhakar Kushwaha /* Maximum number of buffer pools per DPNI */ 413*a2a55e51SPrabhakar Kushwaha #define DPNI_MAX_DPBP 8 414*a2a55e51SPrabhakar Kushwaha 415*a2a55e51SPrabhakar Kushwaha /* All traffic classes considered; see dpni_set_rx_flow() */ 416*a2a55e51SPrabhakar Kushwaha #define DPNI_ALL_TCS (uint8_t)(-1) 417*a2a55e51SPrabhakar Kushwaha /* All flows within traffic class considered; see dpni_set_rx_flow() */ 418*a2a55e51SPrabhakar Kushwaha #define DPNI_ALL_TC_FLOWS (uint16_t)(-1) 419*a2a55e51SPrabhakar Kushwaha /* Generate new flow ID; see dpni_set_tx_flow() */ 420*a2a55e51SPrabhakar Kushwaha #define DPNI_NEW_FLOW_ID (uint16_t)(-1) 421*a2a55e51SPrabhakar Kushwaha 422*a2a55e51SPrabhakar Kushwaha /** 423*a2a55e51SPrabhakar Kushwaha * dpni_open() - Open a control session for the specified object 424*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 425*a2a55e51SPrabhakar Kushwaha * @dpni_id: DPNI unique ID 426*a2a55e51SPrabhakar Kushwaha * @token: Returned token; use in subsequent API calls 427*a2a55e51SPrabhakar Kushwaha * 428*a2a55e51SPrabhakar Kushwaha * This function can be used to open a control session for an 429*a2a55e51SPrabhakar Kushwaha * already created object; an object may have been declared in 430*a2a55e51SPrabhakar Kushwaha * the DPL or by calling the dpni_create() function. 431*a2a55e51SPrabhakar Kushwaha * This function returns a unique authentication token, 432*a2a55e51SPrabhakar Kushwaha * associated with the specific object ID and the specific MC 433*a2a55e51SPrabhakar Kushwaha * portal; this token must be used in all subsequent commands for 434*a2a55e51SPrabhakar Kushwaha * this specific object. 435*a2a55e51SPrabhakar Kushwaha * 436*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 437*a2a55e51SPrabhakar Kushwaha */ 438*a2a55e51SPrabhakar Kushwaha int dpni_open(struct fsl_mc_io *mc_io, int dpni_id, uint16_t *token); 439*a2a55e51SPrabhakar Kushwaha 440*a2a55e51SPrabhakar Kushwaha /** 441*a2a55e51SPrabhakar Kushwaha * dpni_close() - Close the control session of the object 442*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 443*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 444*a2a55e51SPrabhakar Kushwaha * 445*a2a55e51SPrabhakar Kushwaha * After this function is called, no further operations are 446*a2a55e51SPrabhakar Kushwaha * allowed on the object without opening a new control session. 447*a2a55e51SPrabhakar Kushwaha * 448*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 449*a2a55e51SPrabhakar Kushwaha */ 450*a2a55e51SPrabhakar Kushwaha int dpni_close(struct fsl_mc_io *mc_io, uint16_t token); 451*a2a55e51SPrabhakar Kushwaha 452*a2a55e51SPrabhakar Kushwaha /** 453*a2a55e51SPrabhakar Kushwaha * struct dpni_ipr_cfg - Structure representing IP reassembly configuration 454*a2a55e51SPrabhakar Kushwaha * @max_reass_frm_size: Maximum size of the reassembled frame 455*a2a55e51SPrabhakar Kushwaha * @min_frag_size_ipv4: Minimum fragment size of IPv4 fragments 456*a2a55e51SPrabhakar Kushwaha * @min_frag_size_ipv6: Minimum fragment size of IPv6 fragments 457*a2a55e51SPrabhakar Kushwaha * @max_open_frames_ipv4: Maximum concurrent IPv4 packets in reassembly process 458*a2a55e51SPrabhakar Kushwaha * @max_open_frames_ipv6: Maximum concurrent IPv6 packets in reassembly process 459*a2a55e51SPrabhakar Kushwaha */ 460*a2a55e51SPrabhakar Kushwaha struct dpni_ipr_cfg { 461*a2a55e51SPrabhakar Kushwaha uint16_t max_reass_frm_size; 462*a2a55e51SPrabhakar Kushwaha uint16_t min_frag_size_ipv4; 463*a2a55e51SPrabhakar Kushwaha uint16_t min_frag_size_ipv6; 464*a2a55e51SPrabhakar Kushwaha uint16_t max_open_frames_ipv4; 465*a2a55e51SPrabhakar Kushwaha uint16_t max_open_frames_ipv6; 466*a2a55e51SPrabhakar Kushwaha }; 467*a2a55e51SPrabhakar Kushwaha 468*a2a55e51SPrabhakar Kushwaha /** 469*a2a55e51SPrabhakar Kushwaha * struct dpni_pools_cfg - Structure representing buffer pools configuration 470*a2a55e51SPrabhakar Kushwaha * @num_dpbp: Number of DPBPs 471*a2a55e51SPrabhakar Kushwaha * @pools: Array of buffer pools parameters; The number of valid entries 472*a2a55e51SPrabhakar Kushwaha * must match 'num_dpbp' value 473*a2a55e51SPrabhakar Kushwaha */ 474*a2a55e51SPrabhakar Kushwaha struct dpni_pools_cfg { 475*a2a55e51SPrabhakar Kushwaha uint8_t num_dpbp; 476*a2a55e51SPrabhakar Kushwaha /** 477*a2a55e51SPrabhakar Kushwaha * struct pools - Buffer pools parameters 478*a2a55e51SPrabhakar Kushwaha * @dpbp_id: DPBP object ID 479*a2a55e51SPrabhakar Kushwaha * @buffer_size: Buffer size 480*a2a55e51SPrabhakar Kushwaha */ 481*a2a55e51SPrabhakar Kushwaha struct { 482*a2a55e51SPrabhakar Kushwaha int dpbp_id; 483*a2a55e51SPrabhakar Kushwaha uint16_t buffer_size; 484*a2a55e51SPrabhakar Kushwaha } pools[DPNI_MAX_DPBP]; 485*a2a55e51SPrabhakar Kushwaha }; 486*a2a55e51SPrabhakar Kushwaha 487*a2a55e51SPrabhakar Kushwaha /** 488*a2a55e51SPrabhakar Kushwaha * dpni_set_pools() - Set buffer pools configuration 489*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 490*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 491*a2a55e51SPrabhakar Kushwaha * @cfg: Buffer pools configuration 492*a2a55e51SPrabhakar Kushwaha * 493*a2a55e51SPrabhakar Kushwaha * mandatory for DPNI operation 494*a2a55e51SPrabhakar Kushwaha * warning:Allowed only when DPNI is disabled 495*a2a55e51SPrabhakar Kushwaha * 496*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 497*a2a55e51SPrabhakar Kushwaha */ 498*a2a55e51SPrabhakar Kushwaha int dpni_set_pools(struct fsl_mc_io *mc_io, 499*a2a55e51SPrabhakar Kushwaha uint16_t token, 500*a2a55e51SPrabhakar Kushwaha const struct dpni_pools_cfg *cfg); 501*a2a55e51SPrabhakar Kushwaha 502*a2a55e51SPrabhakar Kushwaha /** 503*a2a55e51SPrabhakar Kushwaha * dpni_enable() - Enable the DPNI, allow sending and receiving frames. 504*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 505*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 506*a2a55e51SPrabhakar Kushwaha * 507*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 508*a2a55e51SPrabhakar Kushwaha */ 509*a2a55e51SPrabhakar Kushwaha int dpni_enable(struct fsl_mc_io *mc_io, uint16_t token); 510*a2a55e51SPrabhakar Kushwaha 511*a2a55e51SPrabhakar Kushwaha /** 512*a2a55e51SPrabhakar Kushwaha * dpni_disable() - Disable the DPNI, stop sending and receiving frames. 513*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 514*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 515*a2a55e51SPrabhakar Kushwaha * 516*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 517*a2a55e51SPrabhakar Kushwaha */ 518*a2a55e51SPrabhakar Kushwaha int dpni_disable(struct fsl_mc_io *mc_io, uint16_t token); 519*a2a55e51SPrabhakar Kushwaha 520*a2a55e51SPrabhakar Kushwaha 521*a2a55e51SPrabhakar Kushwaha /** 522*a2a55e51SPrabhakar Kushwaha * @dpni_reset() - Reset the DPNI, returns the object to initial state. 523*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 524*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 525*a2a55e51SPrabhakar Kushwaha * 526*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 527*a2a55e51SPrabhakar Kushwaha */ 528*a2a55e51SPrabhakar Kushwaha int dpni_reset(struct fsl_mc_io *mc_io, uint16_t token); 529*a2a55e51SPrabhakar Kushwaha 530*a2a55e51SPrabhakar Kushwaha /** 531*a2a55e51SPrabhakar Kushwaha * struct dpni_attr - Structure representing DPNI attributes 532*a2a55e51SPrabhakar Kushwaha * @id: DPNI object ID 533*a2a55e51SPrabhakar Kushwaha * @version: DPNI version 534*a2a55e51SPrabhakar Kushwaha * @start_hdr: Indicates the packet starting header for parsing 535*a2a55e51SPrabhakar Kushwaha * @options: Mask of available options; reflects the value as was given in 536*a2a55e51SPrabhakar Kushwaha * object's creation 537*a2a55e51SPrabhakar Kushwaha * @max_senders: Maximum number of different senders; used as the number 538*a2a55e51SPrabhakar Kushwaha * of dedicated Tx flows; 539*a2a55e51SPrabhakar Kushwaha * @max_tcs: Maximum number of traffic classes (for both Tx and Rx) 540*a2a55e51SPrabhakar Kushwaha * @max_dist_per_tc: Maximum distribution size per Rx traffic class; 541*a2a55e51SPrabhakar Kushwaha * Set to the required value minus 1 542*a2a55e51SPrabhakar Kushwaha * @max_unicast_filters: Maximum number of unicast filters 543*a2a55e51SPrabhakar Kushwaha * @max_multicast_filters: Maximum number of multicast filters 544*a2a55e51SPrabhakar Kushwaha * @max_vlan_filters: Maximum number of VLAN filters 545*a2a55e51SPrabhakar Kushwaha * @max_qos_entries: if 'max_tcs > 1', declares the maximum entries in QoS table 546*a2a55e51SPrabhakar Kushwaha * @max_qos_key_size: Maximum key size for the QoS look-up 547*a2a55e51SPrabhakar Kushwaha * @max_dist_key_size: Maximum key size for the distribution look-up 548*a2a55e51SPrabhakar Kushwaha * @ipr_cfg: IP reassembly configuration 549*a2a55e51SPrabhakar Kushwaha */ 550*a2a55e51SPrabhakar Kushwaha struct dpni_attr { 551*a2a55e51SPrabhakar Kushwaha int id; 552*a2a55e51SPrabhakar Kushwaha /** 553*a2a55e51SPrabhakar Kushwaha * struct version - DPNI version 554*a2a55e51SPrabhakar Kushwaha * @major: DPNI major version 555*a2a55e51SPrabhakar Kushwaha * @minor: DPNI minor version 556*a2a55e51SPrabhakar Kushwaha */ 557*a2a55e51SPrabhakar Kushwaha struct { 558*a2a55e51SPrabhakar Kushwaha uint16_t major; 559*a2a55e51SPrabhakar Kushwaha uint16_t minor; 560*a2a55e51SPrabhakar Kushwaha } version; 561*a2a55e51SPrabhakar Kushwaha enum net_prot start_hdr; 562*a2a55e51SPrabhakar Kushwaha uint64_t options; 563*a2a55e51SPrabhakar Kushwaha uint8_t max_senders; 564*a2a55e51SPrabhakar Kushwaha uint8_t max_tcs; 565*a2a55e51SPrabhakar Kushwaha uint8_t max_dist_per_tc[DPNI_MAX_TC]; 566*a2a55e51SPrabhakar Kushwaha uint8_t max_unicast_filters; 567*a2a55e51SPrabhakar Kushwaha uint8_t max_multicast_filters; 568*a2a55e51SPrabhakar Kushwaha uint8_t max_vlan_filters; 569*a2a55e51SPrabhakar Kushwaha uint8_t max_qos_entries; 570*a2a55e51SPrabhakar Kushwaha uint8_t max_qos_key_size; 571*a2a55e51SPrabhakar Kushwaha uint8_t max_dist_key_size; 572*a2a55e51SPrabhakar Kushwaha struct dpni_ipr_cfg ipr_cfg; 573*a2a55e51SPrabhakar Kushwaha }; 574*a2a55e51SPrabhakar Kushwaha /** 575*a2a55e51SPrabhakar Kushwaha * dpni_get_attributes() - Retrieve DPNI attributes. 576*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O objec 577*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 578*a2a55e51SPrabhakar Kushwaha * @attr: Returned object's attributes 579*a2a55e51SPrabhakar Kushwaha * 580*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 581*a2a55e51SPrabhakar Kushwaha */ 582*a2a55e51SPrabhakar Kushwaha int dpni_get_attributes(struct fsl_mc_io *mc_io, 583*a2a55e51SPrabhakar Kushwaha uint16_t token, 584*a2a55e51SPrabhakar Kushwaha struct dpni_attr *attr); 585*a2a55e51SPrabhakar Kushwaha 586*a2a55e51SPrabhakar Kushwaha /* DPNI buffer layout modification options */ 587*a2a55e51SPrabhakar Kushwaha 588*a2a55e51SPrabhakar Kushwaha /* Select to modify the time-stamp setting */ 589*a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_TIMESTAMP 0x00000001 590*a2a55e51SPrabhakar Kushwaha /* Select to modify the parser-result setting; not applicable for Tx */ 591*a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_PARSER_RESULT 0x00000002 592*a2a55e51SPrabhakar Kushwaha /* Select to modify the frame-status setting */ 593*a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_FRAME_STATUS 0x00000004 594*a2a55e51SPrabhakar Kushwaha /* Select to modify the private-data-size setting */ 595*a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_PRIVATE_DATA_SIZE 0x00000008 596*a2a55e51SPrabhakar Kushwaha /* Select to modify the data-alignment setting */ 597*a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_DATA_ALIGN 0x00000010 598*a2a55e51SPrabhakar Kushwaha /* Select to modify the data-head-room setting */ 599*a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_DATA_HEAD_ROOM 0x00000020 600*a2a55e51SPrabhakar Kushwaha /*!< Select to modify the data-tail-room setting */ 601*a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_DATA_TAIL_ROOM 0x00000040 602*a2a55e51SPrabhakar Kushwaha 603*a2a55e51SPrabhakar Kushwaha /** 604*a2a55e51SPrabhakar Kushwaha * struct dpni_buffer_layout - Structure representing DPNI buffer layout 605*a2a55e51SPrabhakar Kushwaha * @options: Flags representing the suggested modifications to the buffer 606*a2a55e51SPrabhakar Kushwaha * layout; Use any combination of 'DPNI_BUF_LAYOUT_OPT_<X>' flags 607*a2a55e51SPrabhakar Kushwaha * @pass_timestamp: Pass timestamp value 608*a2a55e51SPrabhakar Kushwaha * @pass_parser_result: Pass parser results 609*a2a55e51SPrabhakar Kushwaha * @pass_frame_status: Pass frame status 610*a2a55e51SPrabhakar Kushwaha * @private_data_size: Size kept for private data (in bytes) 611*a2a55e51SPrabhakar Kushwaha * @data_align: Data alignment 612*a2a55e51SPrabhakar Kushwaha * @data_head_room: Data head room 613*a2a55e51SPrabhakar Kushwaha * @data_tail_room: Data tail room 614*a2a55e51SPrabhakar Kushwaha */ 615*a2a55e51SPrabhakar Kushwaha struct dpni_buffer_layout { 616*a2a55e51SPrabhakar Kushwaha uint32_t options; 617*a2a55e51SPrabhakar Kushwaha int pass_timestamp; 618*a2a55e51SPrabhakar Kushwaha int pass_parser_result; 619*a2a55e51SPrabhakar Kushwaha int pass_frame_status; 620*a2a55e51SPrabhakar Kushwaha uint16_t private_data_size; 621*a2a55e51SPrabhakar Kushwaha uint16_t data_align; 622*a2a55e51SPrabhakar Kushwaha uint16_t data_head_room; 623*a2a55e51SPrabhakar Kushwaha uint16_t data_tail_room; 624*a2a55e51SPrabhakar Kushwaha }; 625*a2a55e51SPrabhakar Kushwaha 626*a2a55e51SPrabhakar Kushwaha /** 627*a2a55e51SPrabhakar Kushwaha * dpni_get_rx_buffer_layout() - Retrieve Rx buffer layout attributes. 628*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 629*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 630*a2a55e51SPrabhakar Kushwaha * @layout: Returns buffer layout attributes 631*a2a55e51SPrabhakar Kushwaha * 632*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 633*a2a55e51SPrabhakar Kushwaha */ 634*a2a55e51SPrabhakar Kushwaha int dpni_get_rx_buffer_layout(struct fsl_mc_io *mc_io, 635*a2a55e51SPrabhakar Kushwaha uint16_t token, 636*a2a55e51SPrabhakar Kushwaha struct dpni_buffer_layout *layout); 637*a2a55e51SPrabhakar Kushwaha /** 638*a2a55e51SPrabhakar Kushwaha * dpni_set_rx_buffer_layout() - Set Rx buffer layout configuration. 639*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 640*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 641*a2a55e51SPrabhakar Kushwaha * @layout: Buffer layout configuration 642*a2a55e51SPrabhakar Kushwaha * 643*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 644*a2a55e51SPrabhakar Kushwaha * 645*a2a55e51SPrabhakar Kushwaha * @warning Allowed only when DPNI is disabled 646*a2a55e51SPrabhakar Kushwaha */ 647*a2a55e51SPrabhakar Kushwaha int dpni_set_rx_buffer_layout(struct fsl_mc_io *mc_io, 648*a2a55e51SPrabhakar Kushwaha uint16_t token, 649*a2a55e51SPrabhakar Kushwaha const struct dpni_buffer_layout *layout); 650*a2a55e51SPrabhakar Kushwaha 651*a2a55e51SPrabhakar Kushwaha /** 652*a2a55e51SPrabhakar Kushwaha * dpni_get_tx_buffer_layout() - Retrieve Tx buffer layout attributes. 653*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 654*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 655*a2a55e51SPrabhakar Kushwaha * @layout: Returns buffer layout attributes 656*a2a55e51SPrabhakar Kushwaha * 657*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 658*a2a55e51SPrabhakar Kushwaha */ 659*a2a55e51SPrabhakar Kushwaha int dpni_get_tx_buffer_layout(struct fsl_mc_io *mc_io, 660*a2a55e51SPrabhakar Kushwaha uint16_t token, 661*a2a55e51SPrabhakar Kushwaha struct dpni_buffer_layout *layout); 662*a2a55e51SPrabhakar Kushwaha 663*a2a55e51SPrabhakar Kushwaha /** 664*a2a55e51SPrabhakar Kushwaha * @brief Set Tx buffer layout configuration. 665*a2a55e51SPrabhakar Kushwaha * 666*a2a55e51SPrabhakar Kushwaha * @param[in] mc_io Pointer to MC portal's I/O object 667*a2a55e51SPrabhakar Kushwaha * @param[in] token Token of DPNI object 668*a2a55e51SPrabhakar Kushwaha * @param[in] layout Buffer layout configuration 669*a2a55e51SPrabhakar Kushwaha * 670*a2a55e51SPrabhakar Kushwaha * @returns '0' on Success; Error code otherwise. 671*a2a55e51SPrabhakar Kushwaha * 672*a2a55e51SPrabhakar Kushwaha * @warning Allowed only when DPNI is disabled 673*a2a55e51SPrabhakar Kushwaha */ 674*a2a55e51SPrabhakar Kushwaha int dpni_set_tx_buffer_layout(struct fsl_mc_io *mc_io, 675*a2a55e51SPrabhakar Kushwaha uint16_t token, 676*a2a55e51SPrabhakar Kushwaha const struct dpni_buffer_layout *layout); 677*a2a55e51SPrabhakar Kushwaha /** 678*a2a55e51SPrabhakar Kushwaha * dpni_get_tx_conf_buffer_layout() - Retrieve Tx confirmation buffer layout 679*a2a55e51SPrabhakar Kushwaha * attributes. 680*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 681*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 682*a2a55e51SPrabhakar Kushwaha * @layout: Returns buffer layout attributes 683*a2a55e51SPrabhakar Kushwaha * 684*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 685*a2a55e51SPrabhakar Kushwaha */ 686*a2a55e51SPrabhakar Kushwaha int dpni_get_tx_conf_buffer_layout(struct fsl_mc_io *mc_io, 687*a2a55e51SPrabhakar Kushwaha uint16_t token, 688*a2a55e51SPrabhakar Kushwaha struct dpni_buffer_layout *layout); 689*a2a55e51SPrabhakar Kushwaha /** 690*a2a55e51SPrabhakar Kushwaha * dpni_set_tx_conf_buffer_layout() - Set Tx confirmation buffer layout 691*a2a55e51SPrabhakar Kushwaha * configuration. 692*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 693*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 694*a2a55e51SPrabhakar Kushwaha * @layout: Buffer layout configuration 695*a2a55e51SPrabhakar Kushwaha * 696*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 697*a2a55e51SPrabhakar Kushwaha * 698*a2a55e51SPrabhakar Kushwaha * @warning Allowed only when DPNI is disabled 699*a2a55e51SPrabhakar Kushwaha */ 700*a2a55e51SPrabhakar Kushwaha int dpni_set_tx_conf_buffer_layout(struct fsl_mc_io *mc_io, 701*a2a55e51SPrabhakar Kushwaha uint16_t token, 702*a2a55e51SPrabhakar Kushwaha const struct dpni_buffer_layout *layout); 703*a2a55e51SPrabhakar Kushwaha /** 704*a2a55e51SPrabhakar Kushwaha * dpni_get_spid() - Get the AIOP storage profile ID associated with the DPNI 705*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 706*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 707*a2a55e51SPrabhakar Kushwaha * @spid: Returned aiop storage-profile ID 708*a2a55e51SPrabhakar Kushwaha * 709*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 710*a2a55e51SPrabhakar Kushwaha * 711*a2a55e51SPrabhakar Kushwaha * @warning Only relevant for DPNI that belongs to AIOP container. 712*a2a55e51SPrabhakar Kushwaha */ 713*a2a55e51SPrabhakar Kushwaha int dpni_get_qdid(struct fsl_mc_io *mc_io, uint16_t token, uint16_t *qdid); 714*a2a55e51SPrabhakar Kushwaha 715*a2a55e51SPrabhakar Kushwaha /** 716*a2a55e51SPrabhakar Kushwaha * dpni_get_tx_data_offset() - Get the Tx data offset (from start of buffer) 717*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 718*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 719*a2a55e51SPrabhakar Kushwaha * @data_offset: Tx data offset (from start of buffer) 720*a2a55e51SPrabhakar Kushwaha * 721*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 722*a2a55e51SPrabhakar Kushwaha */ 723*a2a55e51SPrabhakar Kushwaha int dpni_get_tx_data_offset(struct fsl_mc_io *mc_io, 724*a2a55e51SPrabhakar Kushwaha uint16_t token, 725*a2a55e51SPrabhakar Kushwaha uint16_t *data_offset); 726*a2a55e51SPrabhakar Kushwaha 727*a2a55e51SPrabhakar Kushwaha /** 728*a2a55e51SPrabhakar Kushwaha * enum dpni_counter - DPNI counter types 729*a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_FRAME: Counts ingress frames 730*a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_BYTE: Counts ingress bytes 731*a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_FRAME_DROP: Counts ingress frames dropped due to explicit 732*a2a55e51SPrabhakar Kushwaha * 'drop' setting 733*a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_FRAME_DISCARD: Counts ingress frames discarded due to errors 734*a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_MCAST_FRAME: Counts ingress multicast frames 735*a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_MCAST_BYTE: Counts ingress multicast bytes 736*a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_BCAST_FRAME: Counts ingress broadcast frames 737*a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_ING_BCAST_BYTES: Counts ingress broadcast bytes 738*a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_EGR_FRAME: Counts egress frames 739*a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_EGR_BYTE: Counts egress bytes 740*a2a55e51SPrabhakar Kushwaha * @DPNI_CNT_EGR_FRAME_DISCARD: Counts egress frames discarded due to errors 741*a2a55e51SPrabhakar Kushwaha */ 742*a2a55e51SPrabhakar Kushwaha enum dpni_counter { 743*a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_FRAME = 0x0, 744*a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_BYTE = 0x1, 745*a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_FRAME_DROP = 0x2, 746*a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_FRAME_DISCARD = 0x3, 747*a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_MCAST_FRAME = 0x4, 748*a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_MCAST_BYTE = 0x5, 749*a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_BCAST_FRAME = 0x6, 750*a2a55e51SPrabhakar Kushwaha DPNI_CNT_ING_BCAST_BYTES = 0x7, 751*a2a55e51SPrabhakar Kushwaha DPNI_CNT_EGR_FRAME = 0x8, 752*a2a55e51SPrabhakar Kushwaha DPNI_CNT_EGR_BYTE = 0x9, 753*a2a55e51SPrabhakar Kushwaha DPNI_CNT_EGR_FRAME_DISCARD = 0xa 754*a2a55e51SPrabhakar Kushwaha }; 755*a2a55e51SPrabhakar Kushwaha 756*a2a55e51SPrabhakar Kushwaha /** 757*a2a55e51SPrabhakar Kushwaha * dpni_get_counter() - Read a specific DPNI counter 758*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 759*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 760*a2a55e51SPrabhakar Kushwaha * @counter: The requested counter 761*a2a55e51SPrabhakar Kushwaha * @value: Returned counter's current value 762*a2a55e51SPrabhakar Kushwaha * 763*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 764*a2a55e51SPrabhakar Kushwaha */ 765*a2a55e51SPrabhakar Kushwaha int dpni_get_counter(struct fsl_mc_io *mc_io, 766*a2a55e51SPrabhakar Kushwaha uint16_t token, 767*a2a55e51SPrabhakar Kushwaha enum dpni_counter counter, 768*a2a55e51SPrabhakar Kushwaha uint64_t *value); 769*a2a55e51SPrabhakar Kushwaha 770*a2a55e51SPrabhakar Kushwaha /** 771*a2a55e51SPrabhakar Kushwaha * dpni_set_counter() - Set (or clear) a specific DPNI counter 772*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 773*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 774*a2a55e51SPrabhakar Kushwaha * @counter: The requested counter 775*a2a55e51SPrabhakar Kushwaha * @value: New counter value; typically pass '0' for resetting 776*a2a55e51SPrabhakar Kushwaha * the counter. 777*a2a55e51SPrabhakar Kushwaha * 778*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 779*a2a55e51SPrabhakar Kushwaha */ 780*a2a55e51SPrabhakar Kushwaha int dpni_set_counter(struct fsl_mc_io *mc_io, 781*a2a55e51SPrabhakar Kushwaha uint16_t token, 782*a2a55e51SPrabhakar Kushwaha enum dpni_counter counter, 783*a2a55e51SPrabhakar Kushwaha uint64_t value); 784*a2a55e51SPrabhakar Kushwaha /** 785*a2a55e51SPrabhakar Kushwaha * struct - Structure representing DPNI link configuration 786*a2a55e51SPrabhakar Kushwaha * @rate: Rate 787*a2a55e51SPrabhakar Kushwaha * @options: Mask of available options; use 'DPNI_LINK_OPT_<X>' values 788*a2a55e51SPrabhakar Kushwaha */ 789*a2a55e51SPrabhakar Kushwaha struct dpni_link_cfg { 790*a2a55e51SPrabhakar Kushwaha uint64_t rate; 791*a2a55e51SPrabhakar Kushwaha uint64_t options; 792*a2a55e51SPrabhakar Kushwaha }; 793*a2a55e51SPrabhakar Kushwaha 794*a2a55e51SPrabhakar Kushwaha /** 795*a2a55e51SPrabhakar Kushwaha * dpni_set_link_cfg() - set the link configuration. 796*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 797*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 798*a2a55e51SPrabhakar Kushwaha * @cfg: Link configuration 799*a2a55e51SPrabhakar Kushwaha * 800*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 801*a2a55e51SPrabhakar Kushwaha */ 802*a2a55e51SPrabhakar Kushwaha int dpni_set_link_cfg(struct fsl_mc_io *mc_io, 803*a2a55e51SPrabhakar Kushwaha uint16_t token, 804*a2a55e51SPrabhakar Kushwaha struct dpni_link_cfg *cfg); 805*a2a55e51SPrabhakar Kushwaha 806*a2a55e51SPrabhakar Kushwaha /** 807*a2a55e51SPrabhakar Kushwaha * struct dpni_link_state - Structure representing DPNI link state 808*a2a55e51SPrabhakar Kushwaha * @rate: Rate 809*a2a55e51SPrabhakar Kushwaha * @options: Mask of available options; use 'DPNI_LINK_OPT_<X>' values 810*a2a55e51SPrabhakar Kushwaha * @up: Link state; '0' for down, '1' for up 811*a2a55e51SPrabhakar Kushwaha */ 812*a2a55e51SPrabhakar Kushwaha struct dpni_link_state { 813*a2a55e51SPrabhakar Kushwaha uint64_t rate; 814*a2a55e51SPrabhakar Kushwaha uint64_t options; 815*a2a55e51SPrabhakar Kushwaha int up; 816*a2a55e51SPrabhakar Kushwaha }; 817*a2a55e51SPrabhakar Kushwaha 818*a2a55e51SPrabhakar Kushwaha /** 819*a2a55e51SPrabhakar Kushwaha * dpni_get_link_state() - Return the link state (either up or down) 820*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 821*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 822*a2a55e51SPrabhakar Kushwaha * @state: Returned link state; 823*a2a55e51SPrabhakar Kushwaha * 824*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 825*a2a55e51SPrabhakar Kushwaha */ 826*a2a55e51SPrabhakar Kushwaha int dpni_get_link_state(struct fsl_mc_io *mc_io, 827*a2a55e51SPrabhakar Kushwaha uint16_t token, 828*a2a55e51SPrabhakar Kushwaha struct dpni_link_state *state); 829*a2a55e51SPrabhakar Kushwaha 830*a2a55e51SPrabhakar Kushwaha /** 831*a2a55e51SPrabhakar Kushwaha * dpni_set_primary_mac_addr() - Set the primary MAC address 832*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 833*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 834*a2a55e51SPrabhakar Kushwaha * @mac_addr: MAC address to set as primary address 835*a2a55e51SPrabhakar Kushwaha * 836*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 837*a2a55e51SPrabhakar Kushwaha */ 838*a2a55e51SPrabhakar Kushwaha int dpni_set_primary_mac_addr(struct fsl_mc_io *mc_io, 839*a2a55e51SPrabhakar Kushwaha uint16_t token, 840*a2a55e51SPrabhakar Kushwaha const uint8_t mac_addr[6]); 841*a2a55e51SPrabhakar Kushwaha /** 842*a2a55e51SPrabhakar Kushwaha * dpni_get_primary_mac_addr() - Get the primary MAC address 843*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 844*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 845*a2a55e51SPrabhakar Kushwaha * @mac_addr: Returned MAC address 846*a2a55e51SPrabhakar Kushwaha * 847*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 848*a2a55e51SPrabhakar Kushwaha */ 849*a2a55e51SPrabhakar Kushwaha int dpni_get_primary_mac_addr(struct fsl_mc_io *mc_io, 850*a2a55e51SPrabhakar Kushwaha uint16_t token, 851*a2a55e51SPrabhakar Kushwaha uint8_t mac_addr[6]); 852*a2a55e51SPrabhakar Kushwaha /** 853*a2a55e51SPrabhakar Kushwaha * dpni_add_mac_addr() - Add MAC address filter 854*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 855*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 856*a2a55e51SPrabhakar Kushwaha * @mac_addr: MAC address to add 857*a2a55e51SPrabhakar Kushwaha * 858*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 859*a2a55e51SPrabhakar Kushwaha */ 860*a2a55e51SPrabhakar Kushwaha int dpni_add_mac_addr(struct fsl_mc_io *mc_io, 861*a2a55e51SPrabhakar Kushwaha uint16_t token, 862*a2a55e51SPrabhakar Kushwaha const uint8_t mac_addr[6]); 863*a2a55e51SPrabhakar Kushwaha 864*a2a55e51SPrabhakar Kushwaha /** 865*a2a55e51SPrabhakar Kushwaha * dpni_remove_mac_addr() - Remove MAC address filter 866*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 867*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 868*a2a55e51SPrabhakar Kushwaha * @mac_addr: MAC address to remove 869*a2a55e51SPrabhakar Kushwaha * 870*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 871*a2a55e51SPrabhakar Kushwaha */ 872*a2a55e51SPrabhakar Kushwaha int dpni_remove_mac_addr(struct fsl_mc_io *mc_io, 873*a2a55e51SPrabhakar Kushwaha uint16_t token, 874*a2a55e51SPrabhakar Kushwaha const uint8_t mac_addr[6]); 875*a2a55e51SPrabhakar Kushwaha 876*a2a55e51SPrabhakar Kushwaha /** 877*a2a55e51SPrabhakar Kushwaha * enum dpni_dest - DPNI destination types 878*a2a55e51SPrabhakar Kushwaha * DPNI_DEST_NONE: Unassigned destination; The queue is set in parked mode and 879*a2a55e51SPrabhakar Kushwaha * does not generate FQDAN notifications; user is expected to 880*a2a55e51SPrabhakar Kushwaha * dequeue from the queue based on polling or other user-defined 881*a2a55e51SPrabhakar Kushwaha * method 882*a2a55e51SPrabhakar Kushwaha * @DPNI_DEST_DPIO: The queue is set in schedule mode and generates FQDAN 883*a2a55e51SPrabhakar Kushwaha * notifications to the specified DPIO; user is expected to dequeue 884*a2a55e51SPrabhakar Kushwaha * from the queue only after notification is received 885*a2a55e51SPrabhakar Kushwaha * @DPNI_DEST_DPCON: The queue is set in schedule mode and does not generate 886*a2a55e51SPrabhakar Kushwaha * FQDAN notifications, but is connected to the specified DPCON 887*a2a55e51SPrabhakar Kushwaha * object; user is expected to dequeue from the DPCON channel 888*a2a55e51SPrabhakar Kushwaha */ 889*a2a55e51SPrabhakar Kushwaha enum dpni_dest { 890*a2a55e51SPrabhakar Kushwaha DPNI_DEST_NONE = 0, 891*a2a55e51SPrabhakar Kushwaha DPNI_DEST_DPIO = 1, 892*a2a55e51SPrabhakar Kushwaha DPNI_DEST_DPCON = 2 893*a2a55e51SPrabhakar Kushwaha }; 894*a2a55e51SPrabhakar Kushwaha 895*a2a55e51SPrabhakar Kushwaha /** 896*a2a55e51SPrabhakar Kushwaha * struct dpni_dest_cfg - Structure representing DPNI destination parameters 897*a2a55e51SPrabhakar Kushwaha * @dest_type: Destination type 898*a2a55e51SPrabhakar Kushwaha * @dest_id: Either DPIO ID or DPCON ID, depending on the destination type 899*a2a55e51SPrabhakar Kushwaha * @priority: Priority selection within the DPIO or DPCON channel; valid values 900*a2a55e51SPrabhakar Kushwaha * are 0-1 or 0-7, depending on the number of priorities in that 901*a2a55e51SPrabhakar Kushwaha * channel; not relevant for 'DPNI_DEST_NONE' option 902*a2a55e51SPrabhakar Kushwaha */ 903*a2a55e51SPrabhakar Kushwaha struct dpni_dest_cfg { 904*a2a55e51SPrabhakar Kushwaha enum dpni_dest dest_type; 905*a2a55e51SPrabhakar Kushwaha int dest_id; 906*a2a55e51SPrabhakar Kushwaha uint8_t priority; 907*a2a55e51SPrabhakar Kushwaha }; 908*a2a55e51SPrabhakar Kushwaha 909*a2a55e51SPrabhakar Kushwaha /* DPNI queue modification options */ 910*a2a55e51SPrabhakar Kushwaha 911*a2a55e51SPrabhakar Kushwaha /* Select to modify the user's context associated with the queue */ 912*a2a55e51SPrabhakar Kushwaha #define DPNI_QUEUE_OPT_USER_CTX 0x00000001 913*a2a55e51SPrabhakar Kushwaha /* Select to modify the queue's destination */ 914*a2a55e51SPrabhakar Kushwaha #define DPNI_QUEUE_OPT_DEST 0x00000002 915*a2a55e51SPrabhakar Kushwaha 916*a2a55e51SPrabhakar Kushwaha /** 917*a2a55e51SPrabhakar Kushwaha * struct dpni_queue_cfg - Structure representing queue configuration 918*a2a55e51SPrabhakar Kushwaha * @options: Flags representing the suggested modifications to the queue; 919*a2a55e51SPrabhakar Kushwaha * Use any combination of 'DPNI_QUEUE_OPT_<X>' flags 920*a2a55e51SPrabhakar Kushwaha * @user_ctx: User context value provided in the frame descriptor of each 921*a2a55e51SPrabhakar Kushwaha * dequeued frame; valid only if 'DPNI_QUEUE_OPT_USER_CTX' 922*a2a55e51SPrabhakar Kushwaha * is contained in 'options' 923*a2a55e51SPrabhakar Kushwaha * @dest_cfg: Queue destination parameters; 924*a2a55e51SPrabhakar Kushwaha * valid only if 'DPNI_QUEUE_OPT_DEST' is contained in 'options' 925*a2a55e51SPrabhakar Kushwaha */ 926*a2a55e51SPrabhakar Kushwaha struct dpni_queue_cfg { 927*a2a55e51SPrabhakar Kushwaha uint32_t options; 928*a2a55e51SPrabhakar Kushwaha uint64_t user_ctx; 929*a2a55e51SPrabhakar Kushwaha struct dpni_dest_cfg dest_cfg; 930*a2a55e51SPrabhakar Kushwaha }; 931*a2a55e51SPrabhakar Kushwaha 932*a2a55e51SPrabhakar Kushwaha /** 933*a2a55e51SPrabhakar Kushwaha * struct dpni_queue_attr - Structure representing queue attributes 934*a2a55e51SPrabhakar Kushwaha * @user_ctx: User context value provided in the frame descriptor of each 935*a2a55e51SPrabhakar Kushwaha * dequeued frame 936*a2a55e51SPrabhakar Kushwaha * @dest_cfg: Queue destination configuration 937*a2a55e51SPrabhakar Kushwaha * @fqid: Virtual fqid value to be used for dequeue operations 938*a2a55e51SPrabhakar Kushwaha */ 939*a2a55e51SPrabhakar Kushwaha struct dpni_queue_attr { 940*a2a55e51SPrabhakar Kushwaha uint64_t user_ctx; 941*a2a55e51SPrabhakar Kushwaha struct dpni_dest_cfg dest_cfg; 942*a2a55e51SPrabhakar Kushwaha uint32_t fqid; 943*a2a55e51SPrabhakar Kushwaha }; 944*a2a55e51SPrabhakar Kushwaha 945*a2a55e51SPrabhakar Kushwaha /* DPNI Tx flow modification options */ 946*a2a55e51SPrabhakar Kushwaha 947*a2a55e51SPrabhakar Kushwaha /* Select to modify the settings for dedicate Tx confirmation/error */ 948*a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_TX_CONF_ERROR 0x00000001 949*a2a55e51SPrabhakar Kushwaha /*!< Select to modify the Tx confirmation and/or error setting */ 950*a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_ONLY_TX_ERROR 0x00000002 951*a2a55e51SPrabhakar Kushwaha /*!< Select to modify the queue configuration */ 952*a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_QUEUE 0x00000004 953*a2a55e51SPrabhakar Kushwaha /*!< Select to modify the L3 checksum generation setting */ 954*a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_L3_CHKSUM_GEN 0x00000010 955*a2a55e51SPrabhakar Kushwaha /*!< Select to modify the L4 checksum generation setting */ 956*a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_L4_CHKSUM_GEN 0x00000020 957*a2a55e51SPrabhakar Kushwaha 958*a2a55e51SPrabhakar Kushwaha /** 959*a2a55e51SPrabhakar Kushwaha * struct dpni_tx_flow_cfg - Structure representing Tx flow configuration 960*a2a55e51SPrabhakar Kushwaha * @options: Flags representing the suggested modifications to the Tx flow; 961*a2a55e51SPrabhakar Kushwaha * Use any combination 'DPNI_TX_FLOW_OPT_<X>' flags 962*a2a55e51SPrabhakar Kushwaha * @conf_err_cfg: Tx confirmation and error configuration; these settings are 963*a2a55e51SPrabhakar Kushwaha * ignored if 'DPNI_OPT_PRIVATE_TX_CONF_ERROR_DISABLED' was set at 964*a2a55e51SPrabhakar Kushwaha * DPNI creation 965*a2a55e51SPrabhakar Kushwaha * @l3_chksum_gen: Set to '1' to enable L3 checksum generation; '0' to disable; 966*a2a55e51SPrabhakar Kushwaha * valid only if 'DPNI_TX_FLOW_OPT_L3_CHKSUM_GEN' is contained in 967*a2a55e51SPrabhakar Kushwaha * 'options' 968*a2a55e51SPrabhakar Kushwaha * @l4_chksum_gen: Set to '1' to enable L4 checksum generation; '0' to disable; 969*a2a55e51SPrabhakar Kushwaha * valid only if 'DPNI_TX_FLOW_OPT_L4_CHKSUM_GEN' is contained in 970*a2a55e51SPrabhakar Kushwaha * 'options' 971*a2a55e51SPrabhakar Kushwaha */ 972*a2a55e51SPrabhakar Kushwaha struct dpni_tx_flow_cfg { 973*a2a55e51SPrabhakar Kushwaha uint32_t options; 974*a2a55e51SPrabhakar Kushwaha /** 975*a2a55e51SPrabhakar Kushwaha * struct cnf_err_cfg - Tx confirmation and error configuration 976*a2a55e51SPrabhakar Kushwaha * @use_default_queue: Set to '1' to use the common (default) Tx 977*a2a55e51SPrabhakar Kushwaha * confirmation and error queue; Set to '0' to use the 978*a2a55e51SPrabhakar Kushwaha * private Tx confirmation and error queue; valid only if 979*a2a55e51SPrabhakar Kushwaha * 'DPNI_TX_FLOW_OPT_TX_CONF_ERROR' is contained in 980*a2a55e51SPrabhakar Kushwaha * 'options' 981*a2a55e51SPrabhakar Kushwaha * @errors_only: Set to '1' to report back only error frames; 982*a2a55e51SPrabhakar Kushwaha * Set to '0' to confirm transmission/error for all 983*a2a55e51SPrabhakar Kushwaha * transmitted frames; 984*a2a55e51SPrabhakar Kushwaha * valid only if 'DPNI_TX_FLOW_OPT_ONLY_TX_ERROR' is 985*a2a55e51SPrabhakar Kushwaha * contained in 'options' and 'use_default_queue = 0'; 986*a2a55e51SPrabhakar Kushwaha * @queue_cfg: Queue configuration; valid only if 987*a2a55e51SPrabhakar Kushwaha * 'DPNI_TX_FLOW_OPT_QUEUE' is contained in 'options' 988*a2a55e51SPrabhakar Kushwaha */ 989*a2a55e51SPrabhakar Kushwaha struct { 990*a2a55e51SPrabhakar Kushwaha int use_default_queue; 991*a2a55e51SPrabhakar Kushwaha int errors_only; 992*a2a55e51SPrabhakar Kushwaha struct dpni_queue_cfg queue_cfg; 993*a2a55e51SPrabhakar Kushwaha } conf_err_cfg; 994*a2a55e51SPrabhakar Kushwaha int l3_chksum_gen; 995*a2a55e51SPrabhakar Kushwaha int l4_chksum_gen; 996*a2a55e51SPrabhakar Kushwaha }; 997*a2a55e51SPrabhakar Kushwaha 998*a2a55e51SPrabhakar Kushwaha /** 999*a2a55e51SPrabhakar Kushwaha * dpni_set_tx_flow() - Set Tx flow configuration 1000*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 1001*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1002*a2a55e51SPrabhakar Kushwaha * @flow_id: Provides (or returns) the sender's flow ID; 1003*a2a55e51SPrabhakar Kushwaha * for each new sender set (*flow_id) to 1004*a2a55e51SPrabhakar Kushwaha * 'DPNI_NEW_FLOW_ID' to generate a new flow_id; 1005*a2a55e51SPrabhakar Kushwaha * this ID should be used as the QDBIN argument 1006*a2a55e51SPrabhakar Kushwaha * in enqueue operations 1007*a2a55e51SPrabhakar Kushwaha * @cfg: Tx flow configuration 1008*a2a55e51SPrabhakar Kushwaha * 1009*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1010*a2a55e51SPrabhakar Kushwaha */ 1011*a2a55e51SPrabhakar Kushwaha int dpni_set_tx_flow(struct fsl_mc_io *mc_io, 1012*a2a55e51SPrabhakar Kushwaha uint16_t token, 1013*a2a55e51SPrabhakar Kushwaha uint16_t *flow_id, 1014*a2a55e51SPrabhakar Kushwaha const struct dpni_tx_flow_cfg *cfg); 1015*a2a55e51SPrabhakar Kushwaha 1016*a2a55e51SPrabhakar Kushwaha /** 1017*a2a55e51SPrabhakar Kushwaha * struct dpni_tx_flow_attr - Structure representing Tx flow attributes 1018*a2a55e51SPrabhakar Kushwaha * @conf_err_attr: Tx confirmation and error attributes 1019*a2a55e51SPrabhakar Kushwaha * @l3_chksum_gen: '1' if L3 checksum generation is enabled; '0' if disabled 1020*a2a55e51SPrabhakar Kushwaha * @l4_chksum_gen: '1' if L4 checksum generation is enabled; '0' if disabled 1021*a2a55e51SPrabhakar Kushwaha */ 1022*a2a55e51SPrabhakar Kushwaha struct dpni_tx_flow_attr { 1023*a2a55e51SPrabhakar Kushwaha /** 1024*a2a55e51SPrabhakar Kushwaha * struct conf_err_attr - Tx confirmation and error attributes 1025*a2a55e51SPrabhakar Kushwaha * @use_default_queue: '1' if using common (default) Tx confirmation and 1026*a2a55e51SPrabhakar Kushwaha * error queue; 1027*a2a55e51SPrabhakar Kushwaha * '0' if using private Tx confirmation and error 1028*a2a55e51SPrabhakar Kushwaha * queue 1029*a2a55e51SPrabhakar Kushwaha * @errors_only: '1' if only error frames are reported back; '0' if all 1030*a2a55e51SPrabhakar Kushwaha * transmitted frames are confirmed 1031*a2a55e51SPrabhakar Kushwaha * @queue_attr: Queue attributes 1032*a2a55e51SPrabhakar Kushwaha */ 1033*a2a55e51SPrabhakar Kushwaha struct { 1034*a2a55e51SPrabhakar Kushwaha int use_default_queue; 1035*a2a55e51SPrabhakar Kushwaha int errors_only; 1036*a2a55e51SPrabhakar Kushwaha struct dpni_queue_attr queue_attr; 1037*a2a55e51SPrabhakar Kushwaha } conf_err_attr; 1038*a2a55e51SPrabhakar Kushwaha int l3_chksum_gen; 1039*a2a55e51SPrabhakar Kushwaha int l4_chksum_gen; 1040*a2a55e51SPrabhakar Kushwaha }; 1041*a2a55e51SPrabhakar Kushwaha 1042*a2a55e51SPrabhakar Kushwaha /** 1043*a2a55e51SPrabhakar Kushwaha * dpni_get_tx_flow() - Get Tx flow attributes 1044*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 1045*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1046*a2a55e51SPrabhakar Kushwaha * @flow_id: The sender's flow ID, as returned by the 1047*a2a55e51SPrabhakar Kushwaha * dpni_set_tx_flow() function 1048*a2a55e51SPrabhakar Kushwaha * @attr: Returned Tx flow attributes 1049*a2a55e51SPrabhakar Kushwaha * 1050*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1051*a2a55e51SPrabhakar Kushwaha */ 1052*a2a55e51SPrabhakar Kushwaha int dpni_get_tx_flow(struct fsl_mc_io *mc_io, 1053*a2a55e51SPrabhakar Kushwaha uint16_t token, 1054*a2a55e51SPrabhakar Kushwaha uint16_t flow_id, 1055*a2a55e51SPrabhakar Kushwaha struct dpni_tx_flow_attr *attr); 1056*a2a55e51SPrabhakar Kushwaha 1057*a2a55e51SPrabhakar Kushwaha /** 1058*a2a55e51SPrabhakar Kushwaha * dpni_set_rx_flow() - Set Rx flow configuration 1059*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 1060*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1061*a2a55e51SPrabhakar Kushwaha * @tc_id: Traffic class selection (0-7); 1062*a2a55e51SPrabhakar Kushwaha * use 'DPNI_ALL_TCS' to set all TCs and all flows 1063*a2a55e51SPrabhakar Kushwaha * @flow_id Rx flow id within the traffic class; use 1064*a2a55e51SPrabhakar Kushwaha * 'DPNI_ALL_TC_FLOWS' to set all flows within 1065*a2a55e51SPrabhakar Kushwaha * this tc_id; ignored if tc_id is set to 1066*a2a55e51SPrabhakar Kushwaha * 'DPNI_ALL_TCS'; 1067*a2a55e51SPrabhakar Kushwaha * @cfg: Rx flow configuration 1068*a2a55e51SPrabhakar Kushwaha * 1069*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1070*a2a55e51SPrabhakar Kushwaha */ 1071*a2a55e51SPrabhakar Kushwaha int dpni_set_rx_flow(struct fsl_mc_io *mc_io, 1072*a2a55e51SPrabhakar Kushwaha uint16_t token, 1073*a2a55e51SPrabhakar Kushwaha uint8_t tc_id, 1074*a2a55e51SPrabhakar Kushwaha uint16_t flow_id, 1075*a2a55e51SPrabhakar Kushwaha const struct dpni_queue_cfg *cfg); 1076*a2a55e51SPrabhakar Kushwaha 1077*a2a55e51SPrabhakar Kushwaha /** 1078*a2a55e51SPrabhakar Kushwaha * dpni_get_rx_flow() - Get Rx flow attributes 1079*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 1080*a2a55e51SPrabhakar Kushwaha * @token: Token of DPNI object 1081*a2a55e51SPrabhakar Kushwaha * @tc_id: Traffic class selection (0-7) 1082*a2a55e51SPrabhakar Kushwaha * @flow_id: Rx flow id within the traffic class 1083*a2a55e51SPrabhakar Kushwaha * @attr: Returned Rx flow attributes 1084*a2a55e51SPrabhakar Kushwaha * 1085*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1086*a2a55e51SPrabhakar Kushwaha */ 1087*a2a55e51SPrabhakar Kushwaha int dpni_get_rx_flow(struct fsl_mc_io *mc_io, 1088*a2a55e51SPrabhakar Kushwaha uint16_t token, 1089*a2a55e51SPrabhakar Kushwaha uint8_t tc_id, 1090*a2a55e51SPrabhakar Kushwaha uint16_t flow_id, 1091*a2a55e51SPrabhakar Kushwaha struct dpni_queue_attr *attr); 1092*a2a55e51SPrabhakar Kushwaha 1093*a2a55e51SPrabhakar Kushwaha #endif /* _FSL_DPNI_H */ 1094