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