134ff6846SIoana Radulescu /* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */ 234ff6846SIoana Radulescu /* Copyright 2013-2016 Freescale Semiconductor Inc. 334ff6846SIoana Radulescu * Copyright 2016 NXP 434ff6846SIoana Radulescu */ 534ff6846SIoana Radulescu #ifndef _FSL_DPNI_CMD_H 634ff6846SIoana Radulescu #define _FSL_DPNI_CMD_H 734ff6846SIoana Radulescu 834ff6846SIoana Radulescu #include "dpni.h" 934ff6846SIoana Radulescu 1034ff6846SIoana Radulescu /* DPNI Version */ 1134ff6846SIoana Radulescu #define DPNI_VER_MAJOR 7 1234ff6846SIoana Radulescu #define DPNI_VER_MINOR 0 1334ff6846SIoana Radulescu #define DPNI_CMD_BASE_VERSION 1 14*72e27c38SIoana Ciornei #define DPNI_CMD_2ND_VERSION 2 1534ff6846SIoana Radulescu #define DPNI_CMD_ID_OFFSET 4 1634ff6846SIoana Radulescu 1734ff6846SIoana Radulescu #define DPNI_CMD(id) (((id) << DPNI_CMD_ID_OFFSET) | DPNI_CMD_BASE_VERSION) 18*72e27c38SIoana Ciornei #define DPNI_CMD_V2(id) (((id) << DPNI_CMD_ID_OFFSET) | DPNI_CMD_2ND_VERSION) 1934ff6846SIoana Radulescu 2034ff6846SIoana Radulescu #define DPNI_CMDID_OPEN DPNI_CMD(0x801) 2134ff6846SIoana Radulescu #define DPNI_CMDID_CLOSE DPNI_CMD(0x800) 2234ff6846SIoana Radulescu #define DPNI_CMDID_CREATE DPNI_CMD(0x901) 2334ff6846SIoana Radulescu #define DPNI_CMDID_DESTROY DPNI_CMD(0x900) 2434ff6846SIoana Radulescu #define DPNI_CMDID_GET_API_VERSION DPNI_CMD(0xa01) 2534ff6846SIoana Radulescu 2634ff6846SIoana Radulescu #define DPNI_CMDID_ENABLE DPNI_CMD(0x002) 2734ff6846SIoana Radulescu #define DPNI_CMDID_DISABLE DPNI_CMD(0x003) 2834ff6846SIoana Radulescu #define DPNI_CMDID_GET_ATTR DPNI_CMD(0x004) 2934ff6846SIoana Radulescu #define DPNI_CMDID_RESET DPNI_CMD(0x005) 3034ff6846SIoana Radulescu #define DPNI_CMDID_IS_ENABLED DPNI_CMD(0x006) 3134ff6846SIoana Radulescu 3234ff6846SIoana Radulescu #define DPNI_CMDID_SET_IRQ DPNI_CMD(0x010) 3334ff6846SIoana Radulescu #define DPNI_CMDID_GET_IRQ DPNI_CMD(0x011) 3434ff6846SIoana Radulescu #define DPNI_CMDID_SET_IRQ_ENABLE DPNI_CMD(0x012) 3534ff6846SIoana Radulescu #define DPNI_CMDID_GET_IRQ_ENABLE DPNI_CMD(0x013) 3634ff6846SIoana Radulescu #define DPNI_CMDID_SET_IRQ_MASK DPNI_CMD(0x014) 3734ff6846SIoana Radulescu #define DPNI_CMDID_GET_IRQ_MASK DPNI_CMD(0x015) 3834ff6846SIoana Radulescu #define DPNI_CMDID_GET_IRQ_STATUS DPNI_CMD(0x016) 3934ff6846SIoana Radulescu #define DPNI_CMDID_CLEAR_IRQ_STATUS DPNI_CMD(0x017) 4034ff6846SIoana Radulescu 4134ff6846SIoana Radulescu #define DPNI_CMDID_SET_POOLS DPNI_CMD(0x200) 4234ff6846SIoana Radulescu #define DPNI_CMDID_SET_ERRORS_BEHAVIOR DPNI_CMD(0x20B) 4334ff6846SIoana Radulescu 4434ff6846SIoana Radulescu #define DPNI_CMDID_GET_QDID DPNI_CMD(0x210) 4534ff6846SIoana Radulescu #define DPNI_CMDID_GET_TX_DATA_OFFSET DPNI_CMD(0x212) 4634ff6846SIoana Radulescu #define DPNI_CMDID_GET_LINK_STATE DPNI_CMD(0x215) 4734ff6846SIoana Radulescu #define DPNI_CMDID_SET_MAX_FRAME_LENGTH DPNI_CMD(0x216) 4834ff6846SIoana Radulescu #define DPNI_CMDID_GET_MAX_FRAME_LENGTH DPNI_CMD(0x217) 4934ff6846SIoana Radulescu #define DPNI_CMDID_SET_LINK_CFG DPNI_CMD(0x21A) 50*72e27c38SIoana Ciornei #define DPNI_CMDID_SET_TX_SHAPING DPNI_CMD_V2(0x21B) 5134ff6846SIoana Radulescu 5234ff6846SIoana Radulescu #define DPNI_CMDID_SET_MCAST_PROMISC DPNI_CMD(0x220) 5334ff6846SIoana Radulescu #define DPNI_CMDID_GET_MCAST_PROMISC DPNI_CMD(0x221) 5434ff6846SIoana Radulescu #define DPNI_CMDID_SET_UNICAST_PROMISC DPNI_CMD(0x222) 5534ff6846SIoana Radulescu #define DPNI_CMDID_GET_UNICAST_PROMISC DPNI_CMD(0x223) 5634ff6846SIoana Radulescu #define DPNI_CMDID_SET_PRIM_MAC DPNI_CMD(0x224) 5734ff6846SIoana Radulescu #define DPNI_CMDID_GET_PRIM_MAC DPNI_CMD(0x225) 5834ff6846SIoana Radulescu #define DPNI_CMDID_ADD_MAC_ADDR DPNI_CMD(0x226) 5934ff6846SIoana Radulescu #define DPNI_CMDID_REMOVE_MAC_ADDR DPNI_CMD(0x227) 6034ff6846SIoana Radulescu #define DPNI_CMDID_CLR_MAC_FILTERS DPNI_CMD(0x228) 6134ff6846SIoana Radulescu 6234ff6846SIoana Radulescu #define DPNI_CMDID_SET_RX_TC_DIST DPNI_CMD(0x235) 6334ff6846SIoana Radulescu 646aa90fe2SIoana Radulescu #define DPNI_CMDID_SET_QOS_TBL DPNI_CMD(0x240) 656aa90fe2SIoana Radulescu #define DPNI_CMDID_ADD_QOS_ENT DPNI_CMD(0x241) 666aa90fe2SIoana Radulescu #define DPNI_CMDID_REMOVE_QOS_ENT DPNI_CMD(0x242) 676aa90fe2SIoana Radulescu #define DPNI_CMDID_CLR_QOS_TBL DPNI_CMD(0x243) 6834ff6846SIoana Radulescu #define DPNI_CMDID_ADD_FS_ENT DPNI_CMD(0x244) 6934ff6846SIoana Radulescu #define DPNI_CMDID_REMOVE_FS_ENT DPNI_CMD(0x245) 7034ff6846SIoana Radulescu #define DPNI_CMDID_CLR_FS_ENT DPNI_CMD(0x246) 7134ff6846SIoana Radulescu 7234ff6846SIoana Radulescu #define DPNI_CMDID_GET_STATISTICS DPNI_CMD(0x25D) 7334ff6846SIoana Radulescu #define DPNI_CMDID_GET_QUEUE DPNI_CMD(0x25F) 7434ff6846SIoana Radulescu #define DPNI_CMDID_SET_QUEUE DPNI_CMD(0x260) 7534ff6846SIoana Radulescu #define DPNI_CMDID_GET_TAILDROP DPNI_CMD(0x261) 7634ff6846SIoana Radulescu #define DPNI_CMDID_SET_TAILDROP DPNI_CMD(0x262) 7734ff6846SIoana Radulescu 7834ff6846SIoana Radulescu #define DPNI_CMDID_GET_PORT_MAC_ADDR DPNI_CMD(0x263) 7934ff6846SIoana Radulescu 8034ff6846SIoana Radulescu #define DPNI_CMDID_GET_BUFFER_LAYOUT DPNI_CMD(0x264) 8134ff6846SIoana Radulescu #define DPNI_CMDID_SET_BUFFER_LAYOUT DPNI_CMD(0x265) 8234ff6846SIoana Radulescu 8334ff6846SIoana Radulescu #define DPNI_CMDID_SET_TX_CONFIRMATION_MODE DPNI_CMD(0x266) 8434ff6846SIoana Radulescu #define DPNI_CMDID_SET_CONGESTION_NOTIFICATION DPNI_CMD(0x267) 8534ff6846SIoana Radulescu #define DPNI_CMDID_GET_CONGESTION_NOTIFICATION DPNI_CMD(0x268) 8634ff6846SIoana Radulescu #define DPNI_CMDID_SET_EARLY_DROP DPNI_CMD(0x269) 8734ff6846SIoana Radulescu #define DPNI_CMDID_GET_EARLY_DROP DPNI_CMD(0x26A) 8834ff6846SIoana Radulescu #define DPNI_CMDID_GET_OFFLOAD DPNI_CMD(0x26B) 8934ff6846SIoana Radulescu #define DPNI_CMDID_SET_OFFLOAD DPNI_CMD(0x26C) 9034ff6846SIoana Radulescu 914aaaf9b9SIoana Radulescu #define DPNI_CMDID_SET_RX_FS_DIST DPNI_CMD(0x273) 92df85aeb9SIoana Radulescu #define DPNI_CMDID_SET_RX_HASH_DIST DPNI_CMD(0x274) 938eb3cef8SIoana Radulescu #define DPNI_CMDID_GET_LINK_CFG DPNI_CMD(0x278) 94df85aeb9SIoana Radulescu 9534ff6846SIoana Radulescu /* Macros for accessing command fields smaller than 1byte */ 9634ff6846SIoana Radulescu #define DPNI_MASK(field) \ 9734ff6846SIoana Radulescu GENMASK(DPNI_##field##_SHIFT + DPNI_##field##_SIZE - 1, \ 9834ff6846SIoana Radulescu DPNI_##field##_SHIFT) 9934ff6846SIoana Radulescu 10034ff6846SIoana Radulescu #define dpni_set_field(var, field, val) \ 10134ff6846SIoana Radulescu ((var) |= (((val) << DPNI_##field##_SHIFT) & DPNI_MASK(field))) 10234ff6846SIoana Radulescu #define dpni_get_field(var, field) \ 10334ff6846SIoana Radulescu (((var) & DPNI_MASK(field)) >> DPNI_##field##_SHIFT) 10434ff6846SIoana Radulescu 10534ff6846SIoana Radulescu struct dpni_cmd_open { 10634ff6846SIoana Radulescu __le32 dpni_id; 10734ff6846SIoana Radulescu }; 10834ff6846SIoana Radulescu 10934ff6846SIoana Radulescu #define DPNI_BACKUP_POOL(val, order) (((val) & 0x1) << (order)) 11034ff6846SIoana Radulescu struct dpni_cmd_set_pools { 11134ff6846SIoana Radulescu /* cmd word 0 */ 11234ff6846SIoana Radulescu u8 num_dpbp; 11334ff6846SIoana Radulescu u8 backup_pool_mask; 11434ff6846SIoana Radulescu __le16 pad; 11534ff6846SIoana Radulescu /* cmd word 0..4 */ 11634ff6846SIoana Radulescu __le32 dpbp_id[DPNI_MAX_DPBP]; 11734ff6846SIoana Radulescu /* cmd word 4..6 */ 11834ff6846SIoana Radulescu __le16 buffer_size[DPNI_MAX_DPBP]; 11934ff6846SIoana Radulescu }; 12034ff6846SIoana Radulescu 12134ff6846SIoana Radulescu /* The enable indication is always the least significant bit */ 12234ff6846SIoana Radulescu #define DPNI_ENABLE_SHIFT 0 12334ff6846SIoana Radulescu #define DPNI_ENABLE_SIZE 1 12434ff6846SIoana Radulescu 12534ff6846SIoana Radulescu struct dpni_rsp_is_enabled { 12634ff6846SIoana Radulescu u8 enabled; 12734ff6846SIoana Radulescu }; 12834ff6846SIoana Radulescu 12934ff6846SIoana Radulescu struct dpni_rsp_get_irq { 13034ff6846SIoana Radulescu /* response word 0 */ 13134ff6846SIoana Radulescu __le32 irq_val; 13234ff6846SIoana Radulescu __le32 pad; 13334ff6846SIoana Radulescu /* response word 1 */ 13434ff6846SIoana Radulescu __le64 irq_addr; 13534ff6846SIoana Radulescu /* response word 2 */ 13634ff6846SIoana Radulescu __le32 irq_num; 13734ff6846SIoana Radulescu __le32 type; 13834ff6846SIoana Radulescu }; 13934ff6846SIoana Radulescu 14034ff6846SIoana Radulescu struct dpni_cmd_set_irq_enable { 14134ff6846SIoana Radulescu u8 enable; 14234ff6846SIoana Radulescu u8 pad[3]; 14334ff6846SIoana Radulescu u8 irq_index; 14434ff6846SIoana Radulescu }; 14534ff6846SIoana Radulescu 14634ff6846SIoana Radulescu struct dpni_cmd_get_irq_enable { 14734ff6846SIoana Radulescu __le32 pad; 14834ff6846SIoana Radulescu u8 irq_index; 14934ff6846SIoana Radulescu }; 15034ff6846SIoana Radulescu 15134ff6846SIoana Radulescu struct dpni_rsp_get_irq_enable { 15234ff6846SIoana Radulescu u8 enabled; 15334ff6846SIoana Radulescu }; 15434ff6846SIoana Radulescu 15534ff6846SIoana Radulescu struct dpni_cmd_set_irq_mask { 15634ff6846SIoana Radulescu __le32 mask; 15734ff6846SIoana Radulescu u8 irq_index; 15834ff6846SIoana Radulescu }; 15934ff6846SIoana Radulescu 16034ff6846SIoana Radulescu struct dpni_cmd_get_irq_mask { 16134ff6846SIoana Radulescu __le32 pad; 16234ff6846SIoana Radulescu u8 irq_index; 16334ff6846SIoana Radulescu }; 16434ff6846SIoana Radulescu 16534ff6846SIoana Radulescu struct dpni_rsp_get_irq_mask { 16634ff6846SIoana Radulescu __le32 mask; 16734ff6846SIoana Radulescu }; 16834ff6846SIoana Radulescu 16934ff6846SIoana Radulescu struct dpni_cmd_get_irq_status { 17034ff6846SIoana Radulescu __le32 status; 17134ff6846SIoana Radulescu u8 irq_index; 17234ff6846SIoana Radulescu }; 17334ff6846SIoana Radulescu 17434ff6846SIoana Radulescu struct dpni_rsp_get_irq_status { 17534ff6846SIoana Radulescu __le32 status; 17634ff6846SIoana Radulescu }; 17734ff6846SIoana Radulescu 17834ff6846SIoana Radulescu struct dpni_cmd_clear_irq_status { 17934ff6846SIoana Radulescu __le32 status; 18034ff6846SIoana Radulescu u8 irq_index; 18134ff6846SIoana Radulescu }; 18234ff6846SIoana Radulescu 18334ff6846SIoana Radulescu struct dpni_rsp_get_attr { 18434ff6846SIoana Radulescu /* response word 0 */ 18534ff6846SIoana Radulescu __le32 options; 18634ff6846SIoana Radulescu u8 num_queues; 18734ff6846SIoana Radulescu u8 num_tcs; 18834ff6846SIoana Radulescu u8 mac_filter_entries; 18934ff6846SIoana Radulescu u8 pad0; 19034ff6846SIoana Radulescu /* response word 1 */ 19134ff6846SIoana Radulescu u8 vlan_filter_entries; 19234ff6846SIoana Radulescu u8 pad1; 19334ff6846SIoana Radulescu u8 qos_entries; 19434ff6846SIoana Radulescu u8 pad2; 19534ff6846SIoana Radulescu __le16 fs_entries; 19634ff6846SIoana Radulescu __le16 pad3; 19734ff6846SIoana Radulescu /* response word 2 */ 19834ff6846SIoana Radulescu u8 qos_key_size; 19934ff6846SIoana Radulescu u8 fs_key_size; 20034ff6846SIoana Radulescu __le16 wriop_version; 20134ff6846SIoana Radulescu }; 20234ff6846SIoana Radulescu 20334ff6846SIoana Radulescu #define DPNI_ERROR_ACTION_SHIFT 0 20434ff6846SIoana Radulescu #define DPNI_ERROR_ACTION_SIZE 4 20534ff6846SIoana Radulescu #define DPNI_FRAME_ANN_SHIFT 4 20634ff6846SIoana Radulescu #define DPNI_FRAME_ANN_SIZE 1 20734ff6846SIoana Radulescu 20834ff6846SIoana Radulescu struct dpni_cmd_set_errors_behavior { 20934ff6846SIoana Radulescu __le32 errors; 21034ff6846SIoana Radulescu /* from least significant bit: error_action:4, set_frame_annotation:1 */ 21134ff6846SIoana Radulescu u8 flags; 21234ff6846SIoana Radulescu }; 21334ff6846SIoana Radulescu 21434ff6846SIoana Radulescu /* There are 3 separate commands for configuring Rx, Tx and Tx confirmation 21534ff6846SIoana Radulescu * buffer layouts, but they all share the same parameters. 21634ff6846SIoana Radulescu * If one of the functions changes, below structure needs to be split. 21734ff6846SIoana Radulescu */ 21834ff6846SIoana Radulescu 21934ff6846SIoana Radulescu #define DPNI_PASS_TS_SHIFT 0 22034ff6846SIoana Radulescu #define DPNI_PASS_TS_SIZE 1 22134ff6846SIoana Radulescu #define DPNI_PASS_PR_SHIFT 1 22234ff6846SIoana Radulescu #define DPNI_PASS_PR_SIZE 1 22334ff6846SIoana Radulescu #define DPNI_PASS_FS_SHIFT 2 22434ff6846SIoana Radulescu #define DPNI_PASS_FS_SIZE 1 22534ff6846SIoana Radulescu 22634ff6846SIoana Radulescu struct dpni_cmd_get_buffer_layout { 22734ff6846SIoana Radulescu u8 qtype; 22834ff6846SIoana Radulescu }; 22934ff6846SIoana Radulescu 23034ff6846SIoana Radulescu struct dpni_rsp_get_buffer_layout { 23134ff6846SIoana Radulescu /* response word 0 */ 23234ff6846SIoana Radulescu u8 pad0[6]; 23334ff6846SIoana Radulescu /* from LSB: pass_timestamp:1, parser_result:1, frame_status:1 */ 23434ff6846SIoana Radulescu u8 flags; 23534ff6846SIoana Radulescu u8 pad1; 23634ff6846SIoana Radulescu /* response word 1 */ 23734ff6846SIoana Radulescu __le16 private_data_size; 23834ff6846SIoana Radulescu __le16 data_align; 23934ff6846SIoana Radulescu __le16 head_room; 24034ff6846SIoana Radulescu __le16 tail_room; 24134ff6846SIoana Radulescu }; 24234ff6846SIoana Radulescu 24334ff6846SIoana Radulescu struct dpni_cmd_set_buffer_layout { 24434ff6846SIoana Radulescu /* cmd word 0 */ 24534ff6846SIoana Radulescu u8 qtype; 24634ff6846SIoana Radulescu u8 pad0[3]; 24734ff6846SIoana Radulescu __le16 options; 24834ff6846SIoana Radulescu /* from LSB: pass_timestamp:1, parser_result:1, frame_status:1 */ 24934ff6846SIoana Radulescu u8 flags; 25034ff6846SIoana Radulescu u8 pad1; 25134ff6846SIoana Radulescu /* cmd word 1 */ 25234ff6846SIoana Radulescu __le16 private_data_size; 25334ff6846SIoana Radulescu __le16 data_align; 25434ff6846SIoana Radulescu __le16 head_room; 25534ff6846SIoana Radulescu __le16 tail_room; 25634ff6846SIoana Radulescu }; 25734ff6846SIoana Radulescu 25834ff6846SIoana Radulescu struct dpni_cmd_set_offload { 25934ff6846SIoana Radulescu u8 pad[3]; 26034ff6846SIoana Radulescu u8 dpni_offload; 26134ff6846SIoana Radulescu __le32 config; 26234ff6846SIoana Radulescu }; 26334ff6846SIoana Radulescu 26434ff6846SIoana Radulescu struct dpni_cmd_get_offload { 26534ff6846SIoana Radulescu u8 pad[3]; 26634ff6846SIoana Radulescu u8 dpni_offload; 26734ff6846SIoana Radulescu }; 26834ff6846SIoana Radulescu 26934ff6846SIoana Radulescu struct dpni_rsp_get_offload { 27034ff6846SIoana Radulescu __le32 pad; 27134ff6846SIoana Radulescu __le32 config; 27234ff6846SIoana Radulescu }; 27334ff6846SIoana Radulescu 27434ff6846SIoana Radulescu struct dpni_cmd_get_qdid { 27534ff6846SIoana Radulescu u8 qtype; 27634ff6846SIoana Radulescu }; 27734ff6846SIoana Radulescu 27834ff6846SIoana Radulescu struct dpni_rsp_get_qdid { 27934ff6846SIoana Radulescu __le16 qdid; 28034ff6846SIoana Radulescu }; 28134ff6846SIoana Radulescu 28234ff6846SIoana Radulescu struct dpni_rsp_get_tx_data_offset { 28334ff6846SIoana Radulescu __le16 data_offset; 28434ff6846SIoana Radulescu }; 28534ff6846SIoana Radulescu 28634ff6846SIoana Radulescu struct dpni_cmd_get_statistics { 28734ff6846SIoana Radulescu u8 page_number; 28834ff6846SIoana Radulescu }; 28934ff6846SIoana Radulescu 29034ff6846SIoana Radulescu struct dpni_rsp_get_statistics { 29134ff6846SIoana Radulescu __le64 counter[DPNI_STATISTICS_CNT]; 29234ff6846SIoana Radulescu }; 29334ff6846SIoana Radulescu 2948eb3cef8SIoana Radulescu struct dpni_cmd_link_cfg { 29534ff6846SIoana Radulescu /* cmd word 0 */ 29634ff6846SIoana Radulescu __le64 pad0; 29734ff6846SIoana Radulescu /* cmd word 1 */ 29834ff6846SIoana Radulescu __le32 rate; 29934ff6846SIoana Radulescu __le32 pad1; 30034ff6846SIoana Radulescu /* cmd word 2 */ 30134ff6846SIoana Radulescu __le64 options; 30234ff6846SIoana Radulescu }; 30334ff6846SIoana Radulescu 30434ff6846SIoana Radulescu #define DPNI_LINK_STATE_SHIFT 0 30534ff6846SIoana Radulescu #define DPNI_LINK_STATE_SIZE 1 30634ff6846SIoana Radulescu 30734ff6846SIoana Radulescu struct dpni_rsp_get_link_state { 30834ff6846SIoana Radulescu /* response word 0 */ 30934ff6846SIoana Radulescu __le32 pad0; 31034ff6846SIoana Radulescu /* from LSB: up:1 */ 31134ff6846SIoana Radulescu u8 flags; 31234ff6846SIoana Radulescu u8 pad1[3]; 31334ff6846SIoana Radulescu /* response word 1 */ 31434ff6846SIoana Radulescu __le32 rate; 31534ff6846SIoana Radulescu __le32 pad2; 31634ff6846SIoana Radulescu /* response word 2 */ 31734ff6846SIoana Radulescu __le64 options; 31834ff6846SIoana Radulescu }; 31934ff6846SIoana Radulescu 32034ff6846SIoana Radulescu struct dpni_cmd_set_max_frame_length { 32134ff6846SIoana Radulescu __le16 max_frame_length; 32234ff6846SIoana Radulescu }; 32334ff6846SIoana Radulescu 32434ff6846SIoana Radulescu struct dpni_rsp_get_max_frame_length { 32534ff6846SIoana Radulescu __le16 max_frame_length; 32634ff6846SIoana Radulescu }; 32734ff6846SIoana Radulescu 32834ff6846SIoana Radulescu struct dpni_cmd_set_multicast_promisc { 32934ff6846SIoana Radulescu u8 enable; 33034ff6846SIoana Radulescu }; 33134ff6846SIoana Radulescu 33234ff6846SIoana Radulescu struct dpni_rsp_get_multicast_promisc { 33334ff6846SIoana Radulescu u8 enabled; 33434ff6846SIoana Radulescu }; 33534ff6846SIoana Radulescu 33634ff6846SIoana Radulescu struct dpni_cmd_set_unicast_promisc { 33734ff6846SIoana Radulescu u8 enable; 33834ff6846SIoana Radulescu }; 33934ff6846SIoana Radulescu 34034ff6846SIoana Radulescu struct dpni_rsp_get_unicast_promisc { 34134ff6846SIoana Radulescu u8 enabled; 34234ff6846SIoana Radulescu }; 34334ff6846SIoana Radulescu 34434ff6846SIoana Radulescu struct dpni_cmd_set_primary_mac_addr { 34534ff6846SIoana Radulescu __le16 pad; 34634ff6846SIoana Radulescu u8 mac_addr[6]; 34734ff6846SIoana Radulescu }; 34834ff6846SIoana Radulescu 34934ff6846SIoana Radulescu struct dpni_rsp_get_primary_mac_addr { 35034ff6846SIoana Radulescu __le16 pad; 35134ff6846SIoana Radulescu u8 mac_addr[6]; 35234ff6846SIoana Radulescu }; 35334ff6846SIoana Radulescu 35434ff6846SIoana Radulescu struct dpni_rsp_get_port_mac_addr { 35534ff6846SIoana Radulescu __le16 pad; 35634ff6846SIoana Radulescu u8 mac_addr[6]; 35734ff6846SIoana Radulescu }; 35834ff6846SIoana Radulescu 35934ff6846SIoana Radulescu struct dpni_cmd_add_mac_addr { 36034ff6846SIoana Radulescu __le16 pad; 36134ff6846SIoana Radulescu u8 mac_addr[6]; 36234ff6846SIoana Radulescu }; 36334ff6846SIoana Radulescu 36434ff6846SIoana Radulescu struct dpni_cmd_remove_mac_addr { 36534ff6846SIoana Radulescu __le16 pad; 36634ff6846SIoana Radulescu u8 mac_addr[6]; 36734ff6846SIoana Radulescu }; 36834ff6846SIoana Radulescu 36934ff6846SIoana Radulescu #define DPNI_UNICAST_FILTERS_SHIFT 0 37034ff6846SIoana Radulescu #define DPNI_UNICAST_FILTERS_SIZE 1 37134ff6846SIoana Radulescu #define DPNI_MULTICAST_FILTERS_SHIFT 1 37234ff6846SIoana Radulescu #define DPNI_MULTICAST_FILTERS_SIZE 1 37334ff6846SIoana Radulescu 37434ff6846SIoana Radulescu struct dpni_cmd_clear_mac_filters { 37534ff6846SIoana Radulescu /* from LSB: unicast:1, multicast:1 */ 37634ff6846SIoana Radulescu u8 flags; 37734ff6846SIoana Radulescu }; 37834ff6846SIoana Radulescu 37934ff6846SIoana Radulescu #define DPNI_DIST_MODE_SHIFT 0 38034ff6846SIoana Radulescu #define DPNI_DIST_MODE_SIZE 4 38134ff6846SIoana Radulescu #define DPNI_MISS_ACTION_SHIFT 4 38234ff6846SIoana Radulescu #define DPNI_MISS_ACTION_SIZE 4 38334ff6846SIoana Radulescu 38434ff6846SIoana Radulescu struct dpni_cmd_set_rx_tc_dist { 38534ff6846SIoana Radulescu /* cmd word 0 */ 38634ff6846SIoana Radulescu __le16 dist_size; 38734ff6846SIoana Radulescu u8 tc_id; 38834ff6846SIoana Radulescu /* from LSB: dist_mode:4, miss_action:4 */ 38934ff6846SIoana Radulescu u8 flags; 39034ff6846SIoana Radulescu __le16 pad0; 39134ff6846SIoana Radulescu __le16 default_flow_id; 39234ff6846SIoana Radulescu /* cmd word 1..5 */ 39334ff6846SIoana Radulescu __le64 pad1[5]; 39434ff6846SIoana Radulescu /* cmd word 6 */ 39534ff6846SIoana Radulescu __le64 key_cfg_iova; 39634ff6846SIoana Radulescu }; 39734ff6846SIoana Radulescu 39834ff6846SIoana Radulescu /* dpni_set_rx_tc_dist extension (structure of the DMA-able memory at 39934ff6846SIoana Radulescu * key_cfg_iova) 40034ff6846SIoana Radulescu */ 40134ff6846SIoana Radulescu struct dpni_mask_cfg { 40234ff6846SIoana Radulescu u8 mask; 40334ff6846SIoana Radulescu u8 offset; 40434ff6846SIoana Radulescu }; 40534ff6846SIoana Radulescu 40634ff6846SIoana Radulescu #define DPNI_EFH_TYPE_SHIFT 0 40734ff6846SIoana Radulescu #define DPNI_EFH_TYPE_SIZE 4 40834ff6846SIoana Radulescu #define DPNI_EXTRACT_TYPE_SHIFT 0 40934ff6846SIoana Radulescu #define DPNI_EXTRACT_TYPE_SIZE 4 41034ff6846SIoana Radulescu 41134ff6846SIoana Radulescu struct dpni_dist_extract { 41234ff6846SIoana Radulescu /* word 0 */ 41334ff6846SIoana Radulescu u8 prot; 41434ff6846SIoana Radulescu /* EFH type stored in the 4 least significant bits */ 41534ff6846SIoana Radulescu u8 efh_type; 41634ff6846SIoana Radulescu u8 size; 41734ff6846SIoana Radulescu u8 offset; 41834ff6846SIoana Radulescu __le32 field; 41934ff6846SIoana Radulescu /* word 1 */ 42034ff6846SIoana Radulescu u8 hdr_index; 42134ff6846SIoana Radulescu u8 constant; 42234ff6846SIoana Radulescu u8 num_of_repeats; 42334ff6846SIoana Radulescu u8 num_of_byte_masks; 42434ff6846SIoana Radulescu /* Extraction type is stored in the 4 LSBs */ 42534ff6846SIoana Radulescu u8 extract_type; 42634ff6846SIoana Radulescu u8 pad[3]; 42734ff6846SIoana Radulescu /* word 2 */ 42834ff6846SIoana Radulescu struct dpni_mask_cfg masks[4]; 42934ff6846SIoana Radulescu }; 43034ff6846SIoana Radulescu 43134ff6846SIoana Radulescu struct dpni_ext_set_rx_tc_dist { 43234ff6846SIoana Radulescu /* extension word 0 */ 43334ff6846SIoana Radulescu u8 num_extracts; 43434ff6846SIoana Radulescu u8 pad[7]; 43534ff6846SIoana Radulescu /* words 1..25 */ 43634ff6846SIoana Radulescu struct dpni_dist_extract extracts[DPKG_MAX_NUM_OF_EXTRACTS]; 43734ff6846SIoana Radulescu }; 43834ff6846SIoana Radulescu 43934ff6846SIoana Radulescu struct dpni_cmd_get_queue { 44034ff6846SIoana Radulescu u8 qtype; 44134ff6846SIoana Radulescu u8 tc; 44234ff6846SIoana Radulescu u8 index; 44334ff6846SIoana Radulescu }; 44434ff6846SIoana Radulescu 44534ff6846SIoana Radulescu #define DPNI_DEST_TYPE_SHIFT 0 44634ff6846SIoana Radulescu #define DPNI_DEST_TYPE_SIZE 4 44734ff6846SIoana Radulescu #define DPNI_STASH_CTRL_SHIFT 6 44834ff6846SIoana Radulescu #define DPNI_STASH_CTRL_SIZE 1 44934ff6846SIoana Radulescu #define DPNI_HOLD_ACTIVE_SHIFT 7 45034ff6846SIoana Radulescu #define DPNI_HOLD_ACTIVE_SIZE 1 45134ff6846SIoana Radulescu 45234ff6846SIoana Radulescu struct dpni_rsp_get_queue { 45334ff6846SIoana Radulescu /* response word 0 */ 45434ff6846SIoana Radulescu __le64 pad0; 45534ff6846SIoana Radulescu /* response word 1 */ 45634ff6846SIoana Radulescu __le32 dest_id; 45734ff6846SIoana Radulescu __le16 pad1; 45834ff6846SIoana Radulescu u8 dest_prio; 45934ff6846SIoana Radulescu /* From LSB: dest_type:4, pad:2, flc_stash_ctrl:1, hold_active:1 */ 46034ff6846SIoana Radulescu u8 flags; 46134ff6846SIoana Radulescu /* response word 2 */ 46234ff6846SIoana Radulescu __le64 flc; 46334ff6846SIoana Radulescu /* response word 3 */ 46434ff6846SIoana Radulescu __le64 user_context; 46534ff6846SIoana Radulescu /* response word 4 */ 46634ff6846SIoana Radulescu __le32 fqid; 46734ff6846SIoana Radulescu __le16 qdbin; 46834ff6846SIoana Radulescu }; 46934ff6846SIoana Radulescu 47034ff6846SIoana Radulescu struct dpni_cmd_set_queue { 47134ff6846SIoana Radulescu /* cmd word 0 */ 47234ff6846SIoana Radulescu u8 qtype; 47334ff6846SIoana Radulescu u8 tc; 47434ff6846SIoana Radulescu u8 index; 47534ff6846SIoana Radulescu u8 options; 47634ff6846SIoana Radulescu __le32 pad0; 47734ff6846SIoana Radulescu /* cmd word 1 */ 47834ff6846SIoana Radulescu __le32 dest_id; 47934ff6846SIoana Radulescu __le16 pad1; 48034ff6846SIoana Radulescu u8 dest_prio; 48134ff6846SIoana Radulescu u8 flags; 48234ff6846SIoana Radulescu /* cmd word 2 */ 48334ff6846SIoana Radulescu __le64 flc; 48434ff6846SIoana Radulescu /* cmd word 3 */ 48534ff6846SIoana Radulescu __le64 user_context; 48634ff6846SIoana Radulescu }; 48734ff6846SIoana Radulescu 48834ff6846SIoana Radulescu struct dpni_cmd_set_taildrop { 48934ff6846SIoana Radulescu /* cmd word 0 */ 49034ff6846SIoana Radulescu u8 congestion_point; 49134ff6846SIoana Radulescu u8 qtype; 49234ff6846SIoana Radulescu u8 tc; 49334ff6846SIoana Radulescu u8 index; 49434ff6846SIoana Radulescu __le32 pad0; 49534ff6846SIoana Radulescu /* cmd word 1 */ 49634ff6846SIoana Radulescu /* Only least significant bit is relevant */ 49734ff6846SIoana Radulescu u8 enable; 49834ff6846SIoana Radulescu u8 pad1; 49934ff6846SIoana Radulescu u8 units; 50034ff6846SIoana Radulescu u8 pad2; 50134ff6846SIoana Radulescu __le32 threshold; 50234ff6846SIoana Radulescu }; 50334ff6846SIoana Radulescu 50434ff6846SIoana Radulescu struct dpni_cmd_get_taildrop { 50534ff6846SIoana Radulescu u8 congestion_point; 50634ff6846SIoana Radulescu u8 qtype; 50734ff6846SIoana Radulescu u8 tc; 50834ff6846SIoana Radulescu u8 index; 50934ff6846SIoana Radulescu }; 51034ff6846SIoana Radulescu 51134ff6846SIoana Radulescu struct dpni_rsp_get_taildrop { 51234ff6846SIoana Radulescu /* cmd word 0 */ 51334ff6846SIoana Radulescu __le64 pad0; 51434ff6846SIoana Radulescu /* cmd word 1 */ 51534ff6846SIoana Radulescu /* only least significant bit is relevant */ 51634ff6846SIoana Radulescu u8 enable; 51734ff6846SIoana Radulescu u8 pad1; 51834ff6846SIoana Radulescu u8 units; 51934ff6846SIoana Radulescu u8 pad2; 52034ff6846SIoana Radulescu __le32 threshold; 52134ff6846SIoana Radulescu }; 52234ff6846SIoana Radulescu 52334ff6846SIoana Radulescu struct dpni_rsp_get_api_version { 52434ff6846SIoana Radulescu __le16 major; 52534ff6846SIoana Radulescu __le16 minor; 52634ff6846SIoana Radulescu }; 52734ff6846SIoana Radulescu 5284aaaf9b9SIoana Radulescu #define DPNI_RX_FS_DIST_ENABLE_SHIFT 0 5294aaaf9b9SIoana Radulescu #define DPNI_RX_FS_DIST_ENABLE_SIZE 1 5304aaaf9b9SIoana Radulescu struct dpni_cmd_set_rx_fs_dist { 5314aaaf9b9SIoana Radulescu __le16 dist_size; 5324aaaf9b9SIoana Radulescu u8 enable; 5334aaaf9b9SIoana Radulescu u8 tc; 5344aaaf9b9SIoana Radulescu __le16 miss_flow_id; 5354aaaf9b9SIoana Radulescu __le16 pad; 5364aaaf9b9SIoana Radulescu __le64 key_cfg_iova; 5374aaaf9b9SIoana Radulescu }; 5384aaaf9b9SIoana Radulescu 539df85aeb9SIoana Radulescu #define DPNI_RX_HASH_DIST_ENABLE_SHIFT 0 540df85aeb9SIoana Radulescu #define DPNI_RX_HASH_DIST_ENABLE_SIZE 1 541df85aeb9SIoana Radulescu struct dpni_cmd_set_rx_hash_dist { 542df85aeb9SIoana Radulescu __le16 dist_size; 543df85aeb9SIoana Radulescu u8 enable; 544df85aeb9SIoana Radulescu u8 tc; 545df85aeb9SIoana Radulescu __le32 pad; 546df85aeb9SIoana Radulescu __le64 key_cfg_iova; 547df85aeb9SIoana Radulescu }; 548df85aeb9SIoana Radulescu 549afb90dbbSIoana Radulescu struct dpni_cmd_add_fs_entry { 550afb90dbbSIoana Radulescu /* cmd word 0 */ 551afb90dbbSIoana Radulescu __le16 options; 552afb90dbbSIoana Radulescu u8 tc_id; 553afb90dbbSIoana Radulescu u8 key_size; 554afb90dbbSIoana Radulescu __le16 index; 555afb90dbbSIoana Radulescu __le16 flow_id; 556afb90dbbSIoana Radulescu /* cmd word 1 */ 557afb90dbbSIoana Radulescu __le64 key_iova; 558afb90dbbSIoana Radulescu /* cmd word 2 */ 559afb90dbbSIoana Radulescu __le64 mask_iova; 560afb90dbbSIoana Radulescu /* cmd word 3 */ 561afb90dbbSIoana Radulescu __le64 flc; 562afb90dbbSIoana Radulescu }; 563afb90dbbSIoana Radulescu 564afb90dbbSIoana Radulescu struct dpni_cmd_remove_fs_entry { 565afb90dbbSIoana Radulescu /* cmd word 0 */ 566afb90dbbSIoana Radulescu __le16 pad0; 567afb90dbbSIoana Radulescu u8 tc_id; 568afb90dbbSIoana Radulescu u8 key_size; 569afb90dbbSIoana Radulescu __le32 pad1; 570afb90dbbSIoana Radulescu /* cmd word 1 */ 571afb90dbbSIoana Radulescu __le64 key_iova; 572afb90dbbSIoana Radulescu /* cmd word 2 */ 573afb90dbbSIoana Radulescu __le64 mask_iova; 574afb90dbbSIoana Radulescu }; 575afb90dbbSIoana Radulescu 5766aa90fe2SIoana Radulescu #define DPNI_DISCARD_ON_MISS_SHIFT 0 5776aa90fe2SIoana Radulescu #define DPNI_DISCARD_ON_MISS_SIZE 1 5786aa90fe2SIoana Radulescu 5796aa90fe2SIoana Radulescu struct dpni_cmd_set_qos_table { 5806aa90fe2SIoana Radulescu __le32 pad; 5816aa90fe2SIoana Radulescu u8 default_tc; 5826aa90fe2SIoana Radulescu /* only the LSB */ 5836aa90fe2SIoana Radulescu u8 discard_on_miss; 5846aa90fe2SIoana Radulescu __le16 pad1[21]; 5856aa90fe2SIoana Radulescu __le64 key_cfg_iova; 5866aa90fe2SIoana Radulescu }; 5876aa90fe2SIoana Radulescu 5886aa90fe2SIoana Radulescu struct dpni_cmd_add_qos_entry { 5896aa90fe2SIoana Radulescu __le16 pad; 5906aa90fe2SIoana Radulescu u8 tc_id; 5916aa90fe2SIoana Radulescu u8 key_size; 5926aa90fe2SIoana Radulescu __le16 index; 5936aa90fe2SIoana Radulescu __le16 pad1; 5946aa90fe2SIoana Radulescu __le64 key_iova; 5956aa90fe2SIoana Radulescu __le64 mask_iova; 5966aa90fe2SIoana Radulescu }; 5976aa90fe2SIoana Radulescu 5986aa90fe2SIoana Radulescu struct dpni_cmd_remove_qos_entry { 5996aa90fe2SIoana Radulescu u8 pad[3]; 6006aa90fe2SIoana Radulescu u8 key_size; 6016aa90fe2SIoana Radulescu __le32 pad1; 6026aa90fe2SIoana Radulescu __le64 key_iova; 6036aa90fe2SIoana Radulescu __le64 mask_iova; 6046aa90fe2SIoana Radulescu }; 6056aa90fe2SIoana Radulescu 606f395b69fSIoana Ciornei #define DPNI_DEST_TYPE_SHIFT 0 607f395b69fSIoana Ciornei #define DPNI_DEST_TYPE_SIZE 4 608f395b69fSIoana Ciornei #define DPNI_CONG_UNITS_SHIFT 4 609f395b69fSIoana Ciornei #define DPNI_CONG_UNITS_SIZE 2 610f395b69fSIoana Ciornei 611f395b69fSIoana Ciornei struct dpni_cmd_set_congestion_notification { 612f395b69fSIoana Ciornei /* cmd word 0 */ 613f395b69fSIoana Ciornei u8 qtype; 614f395b69fSIoana Ciornei u8 tc; 615f395b69fSIoana Ciornei u8 pad[6]; 616f395b69fSIoana Ciornei /* cmd word 1 */ 617f395b69fSIoana Ciornei __le32 dest_id; 618f395b69fSIoana Ciornei __le16 notification_mode; 619f395b69fSIoana Ciornei u8 dest_priority; 620f395b69fSIoana Ciornei /* from LSB: dest_type: 4 units:2 */ 621f395b69fSIoana Ciornei u8 type_units; 622f395b69fSIoana Ciornei /* cmd word 2 */ 623f395b69fSIoana Ciornei __le64 message_iova; 624f395b69fSIoana Ciornei /* cmd word 3 */ 625f395b69fSIoana Ciornei __le64 message_ctx; 626f395b69fSIoana Ciornei /* cmd word 4 */ 627f395b69fSIoana Ciornei __le32 threshold_entry; 628f395b69fSIoana Ciornei __le32 threshold_exit; 629f395b69fSIoana Ciornei }; 630f395b69fSIoana Ciornei 63139344a89SIoana Ciornei #define DPNI_COUPLED_SHIFT 0 63239344a89SIoana Ciornei #define DPNI_COUPLED_SIZE 1 63339344a89SIoana Ciornei 63439344a89SIoana Ciornei struct dpni_cmd_set_tx_shaping { 63539344a89SIoana Ciornei __le16 tx_cr_max_burst_size; 63639344a89SIoana Ciornei __le16 tx_er_max_burst_size; 63739344a89SIoana Ciornei __le32 pad; 63839344a89SIoana Ciornei __le32 tx_cr_rate_limit; 63939344a89SIoana Ciornei __le32 tx_er_rate_limit; 64039344a89SIoana Ciornei /* from LSB: coupled:1 */ 64139344a89SIoana Ciornei u8 coupled; 64239344a89SIoana Ciornei }; 64339344a89SIoana Ciornei 64434ff6846SIoana Radulescu #endif /* _FSL_DPNI_CMD_H */ 645