diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/fsl-mc/fsl_dpbp.h | 62 | ||||
-rw-r--r-- | include/fsl-mc/fsl_dpio.h | 64 | ||||
-rw-r--r-- | include/fsl-mc/fsl_dpmac.h | 69 | ||||
-rw-r--r-- | include/fsl-mc/fsl_dpni.h | 1065 | ||||
-rw-r--r-- | include/fsl-mc/fsl_dprc.h | 79 | ||||
-rw-r--r-- | include/fsl-mc/fsl_mc_cmd.h | 50 | ||||
-rw-r--r-- | include/fsl-mc/fsl_mc_private.h | 8 |
7 files changed, 553 insertions, 844 deletions
diff --git a/include/fsl-mc/fsl_dpbp.h b/include/fsl-mc/fsl_dpbp.h index b1ad46ee45..5401e861f0 100644 --- a/include/fsl-mc/fsl_dpbp.h +++ b/include/fsl-mc/fsl_dpbp.h @@ -1,8 +1,8 @@ /* * Freescale Layerscape MC I/O wrapper * - * Copyright (C) 2013-2015 Freescale Semiconductor, Inc. - * Author: German Rivera <German.Rivera@freescale.com> + * Copyright (C) 2013-2016 Freescale Semiconductor, Inc. + * Copyright 2017 NXP * * SPDX-License-Identifier: GPL-2.0+ */ @@ -14,19 +14,21 @@ #define __FSL_DPBP_H /* DPBP Version */ -#define DPBP_VER_MAJOR 2 -#define DPBP_VER_MINOR 2 +#define DPBP_VER_MAJOR 3 +#define DPBP_VER_MINOR 3 /* Command IDs */ -#define DPBP_CMDID_CLOSE 0x800 -#define DPBP_CMDID_OPEN 0x804 -#define DPBP_CMDID_CREATE 0x904 -#define DPBP_CMDID_DESTROY 0x900 - -#define DPBP_CMDID_ENABLE 0x002 -#define DPBP_CMDID_DISABLE 0x003 -#define DPBP_CMDID_GET_ATTR 0x004 -#define DPBP_CMDID_RESET 0x005 +#define DPBP_CMDID_CLOSE 0x8001 +#define DPBP_CMDID_OPEN 0x8041 +#define DPBP_CMDID_CREATE 0x9041 +#define DPBP_CMDID_DESTROY 0x9841 +#define DPBP_CMDID_GET_API_VERSION 0xa041 + +#define DPBP_CMDID_ENABLE 0x0021 +#define DPBP_CMDID_DISABLE 0x0031 +#define DPBP_CMDID_GET_ATTR 0x0041 +#define DPBP_CMDID_RESET 0x0051 +#define DPBP_CMDID_IS_ENABLED 0x0061 /* cmd, param, offset, width, type, arg_name */ #define DPBP_CMD_OPEN(cmd, dpbp_id) \ @@ -37,8 +39,6 @@ do { \ MC_RSP_OP(cmd, 0, 16, 16, uint16_t, attr->bpid); \ MC_RSP_OP(cmd, 0, 32, 32, int, attr->id);\ - MC_RSP_OP(cmd, 1, 0, 16, uint16_t, attr->version.major);\ - MC_RSP_OP(cmd, 1, 16, 16, uint16_t, attr->version.minor);\ } while (0) /* Data Path Buffer Pool API @@ -114,9 +114,10 @@ struct dpbp_cfg { * Return: '0' on Success; Error code otherwise. */ int dpbp_create(struct fsl_mc_io *mc_io, + uint16_t dprc_token, uint32_t cmd_flags, const struct dpbp_cfg *cfg, - uint16_t *token); + uint32_t *obj_id); /** * dpbp_destroy() - Destroy the DPBP object and release all its resources. @@ -127,8 +128,9 @@ int dpbp_create(struct fsl_mc_io *mc_io, * Return: '0' on Success; error code otherwise. */ int dpbp_destroy(struct fsl_mc_io *mc_io, + uint16_t dprc_token, uint32_t cmd_flags, - uint16_t token); + uint32_t obj_id); /** * dpbp_enable() - Enable the DPBP. @@ -189,16 +191,7 @@ int dpbp_reset(struct fsl_mc_io *mc_io, * acquire/release operations on buffers */ struct dpbp_attr { - int id; - /** - * struct version - Structure representing DPBP version - * @major: DPBP major version - * @minor: DPBP minor version - */ - struct { - uint16_t major; - uint16_t minor; - } version; + uint32_t id; uint16_t bpid; }; @@ -217,6 +210,21 @@ int dpbp_get_attributes(struct fsl_mc_io *mc_io, uint16_t token, struct dpbp_attr *attr); +/** + * dpbp_get_api_version - Retrieve DPBP Major and Minor version info. + * + * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' + * @major_ver: DPBP major version + * @minor_ver: DPBP minor version + * + * Return: '0' on Success; Error code otherwise. + */ +int dpbp_get_api_version(struct fsl_mc_io *mc_io, + u32 cmd_flags, + u16 *major_ver, + u16 *minor_ver); + /** @} */ #endif /* __FSL_DPBP_H */ diff --git a/include/fsl-mc/fsl_dpio.h b/include/fsl-mc/fsl_dpio.h index d8c458fb4f..86251e222f 100644 --- a/include/fsl-mc/fsl_dpio.h +++ b/include/fsl-mc/fsl_dpio.h @@ -1,5 +1,6 @@ /* - * Copyright (C) 2013-2015 Freescale Semiconductor + * Copyright (C) 2013-2016 Freescale Semiconductor + * Copyright 2017 NXP * * SPDX-License-Identifier: GPL-2.0+ */ @@ -8,19 +9,20 @@ #define _FSL_DPIO_H /* DPIO Version */ -#define DPIO_VER_MAJOR 3 +#define DPIO_VER_MAJOR 4 #define DPIO_VER_MINOR 2 /* Command IDs */ -#define DPIO_CMDID_CLOSE 0x800 -#define DPIO_CMDID_OPEN 0x803 -#define DPIO_CMDID_CREATE 0x903 -#define DPIO_CMDID_DESTROY 0x900 +#define DPIO_CMDID_CLOSE 0x8001 +#define DPIO_CMDID_OPEN 0x8031 +#define DPIO_CMDID_CREATE 0x9031 +#define DPIO_CMDID_DESTROY 0x9831 +#define DPIO_CMDID_GET_API_VERSION 0xa031 -#define DPIO_CMDID_ENABLE 0x002 -#define DPIO_CMDID_DISABLE 0x003 -#define DPIO_CMDID_GET_ATTR 0x004 -#define DPIO_CMDID_RESET 0x005 +#define DPIO_CMDID_ENABLE 0x0021 +#define DPIO_CMDID_DISABLE 0x0031 +#define DPIO_CMDID_GET_ATTR 0x0041 +#define DPIO_CMDID_RESET 0x0051 /* cmd, param, offset, width, type, arg_name */ #define DPIO_CMD_OPEN(cmd, dpio_id) \ @@ -43,8 +45,6 @@ do { \ MC_RSP_OP(cmd, 0, 56, 4, enum dpio_channel_mode, attr->channel_mode);\ MC_RSP_OP(cmd, 1, 0, 64, uint64_t, attr->qbman_portal_ce_offset);\ MC_RSP_OP(cmd, 2, 0, 64, uint64_t, attr->qbman_portal_ci_offset);\ - MC_RSP_OP(cmd, 3, 0, 16, uint16_t, attr->version.major);\ - MC_RSP_OP(cmd, 3, 16, 16, uint16_t, attr->version.minor);\ MC_RSP_OP(cmd, 3, 32, 32, uint32_t, attr->qbman_version);\ } while (0) @@ -73,7 +73,7 @@ struct fsl_mc_io; */ int dpio_open(struct fsl_mc_io *mc_io, uint32_t cmd_flags, - int dpio_id, + uint32_t dpio_id, uint16_t *token); /** @@ -114,9 +114,10 @@ struct dpio_cfg { /** * dpio_create() - Create the DPIO object. * @mc_io: Pointer to MC portal's I/O object + * @token: Authentication token. * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @cfg: Configuration structure - * @token: Returned token; use in subsequent API calls + * @obj_id: Returned obj_id; use in subsequent API calls * * Create the DPIO object, allocate required resources and * perform required initialization. @@ -134,21 +135,24 @@ struct dpio_cfg { * Return: '0' on Success; Error code otherwise. */ int dpio_create(struct fsl_mc_io *mc_io, + uint16_t token, uint32_t cmd_flags, const struct dpio_cfg *cfg, - uint16_t *token); + uint32_t *obj_id); /** * dpio_destroy() - Destroy the DPIO object and release all its resources. * @mc_io: Pointer to MC portal's I/O object + * @token: Authentication token. * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' - * @token: Token of DPIO object + * @obj_id: Object ID of DPIO * * Return: '0' on Success; Error code otherwise */ int dpio_destroy(struct fsl_mc_io *mc_io, + uint16_t token, uint32_t cmd_flags, - uint16_t token); + uint32_t obj_id); /** * dpio_enable() - Enable the DPIO, allow I/O portal operations. @@ -199,16 +203,7 @@ int dpio_reset(struct fsl_mc_io *mc_io, * @qbman_version: QBMAN version */ struct dpio_attr { - int id; - /** - * struct version - DPIO version - * @major: DPIO major version - * @minor: DPIO minor version - */ - struct { - uint16_t major; - uint16_t minor; - } version; + uint32_t id; uint64_t qbman_portal_ce_offset; uint64_t qbman_portal_ci_offset; uint16_t qbman_portal_id; @@ -231,4 +226,19 @@ int dpio_get_attributes(struct fsl_mc_io *mc_io, uint16_t token, struct dpio_attr *attr); +/** + * dpio_get_api_version - Retrieve DPIO Major and Minor version info. + * + * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' + * @major_ver: DPIO major version + * @minor_ver: DPIO minor version + * + * Return: '0' on Success; Error code otherwise. + */ +int dpio_get_api_version(struct fsl_mc_io *mc_io, + u32 cmd_flags, + u16 *major_ver, + u16 *minor_ver); + #endif /* _FSL_DPIO_H */ diff --git a/include/fsl-mc/fsl_dpmac.h b/include/fsl-mc/fsl_dpmac.h index 296f3aed24..36a5cca69c 100644 --- a/include/fsl-mc/fsl_dpmac.h +++ b/include/fsl-mc/fsl_dpmac.h @@ -1,7 +1,8 @@ /* * Freescale Layerscape MC I/O wrapper * - * Copyright (C) 2015 Freescale Semiconductor, Inc. + * Copyright (C) 2015-2016 Freescale Semiconductor, Inc. + * Copyright 2017 NXP * Author: Prabhakar Kushwaha <prabhakar@freescale.com> * * SPDX-License-Identifier: GPL-2.0+ @@ -11,27 +12,28 @@ #define __FSL_DPMAC_H /* DPMAC Version */ -#define DPMAC_VER_MAJOR 3 +#define DPMAC_VER_MAJOR 4 #define DPMAC_VER_MINOR 2 /* Command IDs */ -#define DPMAC_CMDID_CLOSE 0x800 -#define DPMAC_CMDID_OPEN 0x80c -#define DPMAC_CMDID_CREATE 0x90c -#define DPMAC_CMDID_DESTROY 0x900 +#define DPMAC_CMDID_CLOSE 0x8001 +#define DPMAC_CMDID_OPEN 0x80c1 +#define DPMAC_CMDID_CREATE 0x90c1 +#define DPMAC_CMDID_DESTROY 0x98c1 +#define DPMAC_CMDID_GET_API_VERSION 0xa0c1 -#define DPMAC_CMDID_GET_ATTR 0x004 -#define DPMAC_CMDID_RESET 0x005 +#define DPMAC_CMDID_GET_ATTR 0x0041 +#define DPMAC_CMDID_RESET 0x0051 -#define DPMAC_CMDID_MDIO_READ 0x0c0 -#define DPMAC_CMDID_MDIO_WRITE 0x0c1 -#define DPMAC_CMDID_GET_LINK_CFG 0x0c2 -#define DPMAC_CMDID_SET_LINK_STATE 0x0c3 -#define DPMAC_CMDID_GET_COUNTER 0x0c4 +#define DPMAC_CMDID_MDIO_READ 0x0c01 +#define DPMAC_CMDID_MDIO_WRITE 0x0c11 +#define DPMAC_CMDID_GET_LINK_CFG 0x0c21 +#define DPMAC_CMDID_SET_LINK_STATE 0x0c31 +#define DPMAC_CMDID_GET_COUNTER 0x0c41 /* cmd, param, offset, width, type, arg_name */ #define DPMAC_CMD_CREATE(cmd, cfg) \ - MC_CMD_OP(cmd, 0, 0, 32, int, cfg->mac_id) + MC_CMD_OP(cmd, 0, 0, 16, uint16_t, cfg->mac_id) /* cmd, param, offset, width, type, arg_name */ #define DPMAC_CMD_OPEN(cmd, dpmac_id) \ @@ -42,8 +44,6 @@ do { \ MC_RSP_OP(cmd, 0, 0, 32, int, attr->phy_id);\ MC_RSP_OP(cmd, 0, 32, 32, int, attr->id);\ - MC_RSP_OP(cmd, 1, 0, 16, uint16_t, attr->version.major);\ - MC_RSP_OP(cmd, 1, 16, 16, uint16_t, attr->version.minor);\ MC_RSP_OP(cmd, 1, 32, 8, enum dpmac_link_type, attr->link_type);\ MC_RSP_OP(cmd, 1, 40, 8, enum dpmac_eth_if, attr->eth_if);\ MC_RSP_OP(cmd, 2, 0, 32, uint32_t, attr->max_rate);\ @@ -85,7 +85,7 @@ do { \ /* cmd, param, offset, width, type, arg_name */ #define DPMAC_CMD_GET_COUNTER(cmd, type) \ - MC_CMD_OP(cmd, 0, 0, 8, enum dpmac_counter, type) + MC_CMD_OP(cmd, 1, 0, 64, enum dpmac_counter, type) /* cmd, param, offset, width, type, arg_name */ #define DPMAC_RSP_GET_COUNTER(cmd, counter) \ @@ -187,9 +187,10 @@ struct dpmac_cfg { /** * dpmac_create() - Create the DPMAC object. * @mc_io: Pointer to MC portal's I/O object + * @token: Authentication token. * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @cfg: Configuration structure - * @token: Returned token; use in subsequent API calls + * @obj_id: Returned obj_id; use in subsequent API calls * * Create the DPMAC object, allocate required resources and * perform required initialization. @@ -206,21 +207,24 @@ struct dpmac_cfg { * Return: '0' on Success; Error code otherwise. */ int dpmac_create(struct fsl_mc_io *mc_io, + uint16_t token, uint32_t cmd_flags, const struct dpmac_cfg *cfg, - uint16_t *token); + uint32_t *obj_id); /** * dpmac_destroy() - Destroy the DPMAC object and release all its resources. * @mc_io: Pointer to MC portal's I/O object + * @token: Authentication token. * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' - * @token: Token of DPMAC object + * @obj_id: DPMAC object id * * Return: '0' on Success; error code otherwise. */ int dpmac_destroy(struct fsl_mc_io *mc_io, + uint16_t token, uint32_t cmd_flags, - uint16_t token); + uint32_t obj_id); /* DPMAC IRQ Index and Events */ @@ -246,15 +250,6 @@ struct dpmac_attr { enum dpmac_link_type link_type; enum dpmac_eth_if eth_if; uint32_t max_rate; - /** - * struct version - Structure representing DPMAC version - * @major: DPMAC major version - * @minor: DPMAC minor version - */ - struct { - uint16_t major; - uint16_t minor; - } version; }; /** @@ -464,5 +459,19 @@ int dpmac_get_counter(struct fsl_mc_io *mc_io, uint16_t token, enum dpmac_counter type, uint64_t *counter); +/** + * dpmac_get_api_version - Retrieve DPMAC Major and Minor version info. + * + * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' + * @major_ver: DPMAC major version + * @minor_ver: DPMAC minor version + * + * Return: '0' on Success; Error code otherwise. + */ +int dpmac_get_api_version(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t *major_ver, + uint16_t *minor_ver); #endif /* __FSL_DPMAC_H */ diff --git a/include/fsl-mc/fsl_dpni.h b/include/fsl-mc/fsl_dpni.h index f396dc304f..5b80b6f8e0 100644 --- a/include/fsl-mc/fsl_dpni.h +++ b/include/fsl-mc/fsl_dpni.h @@ -1,5 +1,6 @@ /* - * Copyright (C) 2013-2015 Freescale Semiconductor + * Copyright (C) 2013-2016 Freescale Semiconductor + * Copyright 2017 NXP * * SPDX-License-Identifier: GPL-2.0+ */ @@ -7,134 +8,80 @@ #define _FSL_DPNI_H /* DPNI Version */ -#define DPNI_VER_MAJOR 6 -#define DPNI_VER_MINOR 0 +#define DPNI_VER_MAJOR 7 +#define DPNI_VER_MINOR 3 /* Command IDs */ -#define DPNI_CMDID_OPEN 0x801 -#define DPNI_CMDID_CLOSE 0x800 -#define DPNI_CMDID_CREATE 0x901 -#define DPNI_CMDID_DESTROY 0x900 - -#define DPNI_CMDID_ENABLE 0x002 -#define DPNI_CMDID_DISABLE 0x003 -#define DPNI_CMDID_GET_ATTR 0x004 -#define DPNI_CMDID_RESET 0x005 - -#define DPNI_CMDID_SET_POOLS 0x200 -#define DPNI_CMDID_GET_RX_BUFFER_LAYOUT 0x201 -#define DPNI_CMDID_SET_RX_BUFFER_LAYOUT 0x202 -#define DPNI_CMDID_GET_TX_BUFFER_LAYOUT 0x203 -#define DPNI_CMDID_SET_TX_BUFFER_LAYOUT 0x204 -#define DPNI_CMDID_SET_TX_CONF_BUFFER_LAYOUT 0x205 -#define DPNI_CMDID_GET_TX_CONF_BUFFER_LAYOUT 0x206 -#define DPNI_CMDID_SET_ERRORS_BEHAVIOR 0x20B - -#define DPNI_CMDID_GET_QDID 0x210 -#define DPNI_CMDID_GET_TX_DATA_OFFSET 0x212 -#define DPNI_CMDID_GET_COUNTER 0x213 -#define DPNI_CMDID_SET_COUNTER 0x214 -#define DPNI_CMDID_GET_LINK_STATE 0x215 -#define DPNI_CMDID_SET_LINK_CFG 0x21A - -#define DPNI_CMDID_SET_PRIM_MAC 0x224 -#define DPNI_CMDID_GET_PRIM_MAC 0x225 -#define DPNI_CMDID_ADD_MAC_ADDR 0x226 -#define DPNI_CMDID_REMOVE_MAC_ADDR 0x227 - -#define DPNI_CMDID_SET_TX_FLOW 0x236 -#define DPNI_CMDID_GET_TX_FLOW 0x237 -#define DPNI_CMDID_SET_RX_FLOW 0x238 -#define DPNI_CMDID_GET_RX_FLOW 0x239 -#define DPNI_CMDID_SET_TX_CONF 0x257 -#define DPNI_CMDID_GET_TX_CONF 0x258 +#define DPNI_CMDID_OPEN 0x8011 +#define DPNI_CMDID_CLOSE 0x8001 +#define DPNI_CMDID_CREATE 0x9011 +#define DPNI_CMDID_DESTROY 0x9811 +#define DPNI_CMDID_GET_API_VERSION 0xa011 + +#define DPNI_CMDID_ENABLE 0x0021 +#define DPNI_CMDID_DISABLE 0x0031 +#define DPNI_CMDID_GET_ATTR 0x0041 +#define DPNI_CMDID_RESET 0x0051 + +#define DPNI_CMDID_SET_POOLS 0x2002 +#define DPNI_CMDID_SET_BUFFER_LAYOUT 0x2651 +#define DPNI_CMDID_GET_BUFFER_LAYOUT 0x2641 +#define DPNI_CMDID_SET_ERRORS_BEHAVIOR 0x20B1 + +#define DPNI_CMDID_GET_QDID 0x2101 +#define DPNI_CMDID_GET_TX_DATA_OFFSET 0x2121 +#define DPNI_CMDID_GET_LINK_STATE 0x2151 +#define DPNI_CMDID_SET_LINK_CFG 0x21A1 + +#define DPNI_CMDID_SET_PRIM_MAC 0x2241 +#define DPNI_CMDID_GET_PRIM_MAC 0x2251 +#define DPNI_CMDID_ADD_MAC_ADDR 0x2261 +#define DPNI_CMDID_REMOVE_MAC_ADDR 0x2271 + +#define DPNI_CMDID_GET_STATISTICS 0x25D1 +#define DPNI_CMDID_RESET_STATISTICS 0x25E1 +#define DPNI_CMDID_GET_QUEUE 0x25F1 +#define DPNI_CMDID_SET_QUEUE 0x2601 +#define DPNI_CMDID_SET_TX_CONFIRMATION_MODE 0x2661 /* cmd, param, offset, width, type, arg_name */ #define DPNI_CMD_OPEN(cmd, dpni_id) \ MC_CMD_OP(cmd, 0, 0, 32, int, dpni_id) -#define DPNI_PREP_EXTENDED_CFG(ext, cfg) \ +/* cmd, param, offset, width, type, arg_name */ +#define DPNI_PREP_CFG(param, cfg) \ do { \ - MC_PREP_OP(ext, 0, 0, 16, uint16_t, cfg->tc_cfg[0].max_dist); \ - MC_PREP_OP(ext, 0, 16, 16, uint16_t, cfg->tc_cfg[0].max_fs_entries); \ - MC_PREP_OP(ext, 0, 32, 16, uint16_t, cfg->tc_cfg[1].max_dist); \ - MC_PREP_OP(ext, 0, 48, 16, uint16_t, cfg->tc_cfg[1].max_fs_entries); \ - MC_PREP_OP(ext, 1, 0, 16, uint16_t, cfg->tc_cfg[2].max_dist); \ - MC_PREP_OP(ext, 1, 16, 16, uint16_t, cfg->tc_cfg[2].max_fs_entries); \ - MC_PREP_OP(ext, 1, 32, 16, uint16_t, cfg->tc_cfg[3].max_dist); \ - MC_PREP_OP(ext, 1, 48, 16, uint16_t, cfg->tc_cfg[3].max_fs_entries); \ - MC_PREP_OP(ext, 2, 0, 16, uint16_t, cfg->tc_cfg[4].max_dist); \ - MC_PREP_OP(ext, 2, 16, 16, uint16_t, cfg->tc_cfg[4].max_fs_entries); \ - MC_PREP_OP(ext, 2, 32, 16, uint16_t, cfg->tc_cfg[5].max_dist); \ - MC_PREP_OP(ext, 2, 48, 16, uint16_t, cfg->tc_cfg[5].max_fs_entries); \ - MC_PREP_OP(ext, 3, 0, 16, uint16_t, cfg->tc_cfg[6].max_dist); \ - MC_PREP_OP(ext, 3, 16, 16, uint16_t, cfg->tc_cfg[6].max_fs_entries); \ - MC_PREP_OP(ext, 3, 32, 16, uint16_t, cfg->tc_cfg[7].max_dist); \ - MC_PREP_OP(ext, 3, 48, 16, uint16_t, cfg->tc_cfg[7].max_fs_entries); \ - MC_PREP_OP(ext, 4, 0, 16, uint16_t, \ - cfg->ipr_cfg.max_open_frames_ipv4); \ - MC_PREP_OP(ext, 4, 16, 16, uint16_t, \ - cfg->ipr_cfg.max_open_frames_ipv6); \ - MC_PREP_OP(ext, 4, 32, 16, uint16_t, \ - cfg->ipr_cfg.max_reass_frm_size); \ - MC_PREP_OP(ext, 5, 0, 16, uint16_t, \ - cfg->ipr_cfg.min_frag_size_ipv4); \ - MC_PREP_OP(ext, 5, 16, 16, uint16_t, \ - cfg->ipr_cfg.min_frag_size_ipv6); \ + MC_PREP_OP(param, 0, 0, 32, uint16_t, cfg->adv.options); \ + MC_PREP_OP(param, 0, 32, 8, uint16_t, cfg->adv.num_queues); \ + MC_PREP_OP(param, 0, 40, 8, uint16_t, cfg->adv.num_tcs); \ + MC_PREP_OP(param, 0, 48, 8, uint16_t, cfg->adv.mac_entries); \ + MC_PREP_OP(param, 1, 0, 8, uint16_t, cfg->adv.vlan_entries); \ + MC_PREP_OP(param, 1, 16, 8, uint16_t, cfg->adv.qos_entries); \ + MC_PREP_OP(param, 1, 32, 16, uint16_t, cfg->adv.fs_entries); \ } while (0) -#define DPNI_EXT_EXTENDED_CFG(ext, cfg) \ +/* cmd, param, offset, width, type, arg_name */ +#define DPNI_EXT_CFG(param, cfg) \ do { \ - MC_EXT_OP(ext, 0, 0, 16, uint16_t, cfg->tc_cfg[0].max_dist); \ - MC_EXT_OP(ext, 0, 16, 16, uint16_t, cfg->tc_cfg[0].max_fs_entries); \ - MC_EXT_OP(ext, 0, 32, 16, uint16_t, cfg->tc_cfg[1].max_dist); \ - MC_EXT_OP(ext, 0, 48, 16, uint16_t, cfg->tc_cfg[1].max_fs_entries); \ - MC_EXT_OP(ext, 1, 0, 16, uint16_t, cfg->tc_cfg[2].max_dist); \ - MC_EXT_OP(ext, 1, 16, 16, uint16_t, cfg->tc_cfg[2].max_fs_entries); \ - MC_EXT_OP(ext, 1, 32, 16, uint16_t, cfg->tc_cfg[3].max_dist); \ - MC_EXT_OP(ext, 1, 48, 16, uint16_t, cfg->tc_cfg[3].max_fs_entries); \ - MC_EXT_OP(ext, 2, 0, 16, uint16_t, cfg->tc_cfg[4].max_dist); \ - MC_EXT_OP(ext, 2, 16, 16, uint16_t, cfg->tc_cfg[4].max_fs_entries); \ - MC_EXT_OP(ext, 2, 32, 16, uint16_t, cfg->tc_cfg[5].max_dist); \ - MC_EXT_OP(ext, 2, 48, 16, uint16_t, cfg->tc_cfg[5].max_fs_entries); \ - MC_EXT_OP(ext, 3, 0, 16, uint16_t, cfg->tc_cfg[6].max_dist); \ - MC_EXT_OP(ext, 3, 16, 16, uint16_t, cfg->tc_cfg[6].max_fs_entries); \ - MC_EXT_OP(ext, 3, 32, 16, uint16_t, cfg->tc_cfg[7].max_dist); \ - MC_EXT_OP(ext, 3, 48, 16, uint16_t, cfg->tc_cfg[7].max_fs_entries); \ - MC_EXT_OP(ext, 4, 0, 16, uint16_t, \ - cfg->ipr_cfg.max_open_frames_ipv4); \ - MC_EXT_OP(ext, 4, 16, 16, uint16_t, \ - cfg->ipr_cfg.max_open_frames_ipv6); \ - MC_EXT_OP(ext, 4, 32, 16, uint16_t, \ - cfg->ipr_cfg.max_reass_frm_size); \ - MC_EXT_OP(ext, 5, 0, 16, uint16_t, \ - cfg->ipr_cfg.min_frag_size_ipv4); \ - MC_EXT_OP(ext, 5, 16, 16, uint16_t, \ - cfg->ipr_cfg.min_frag_size_ipv6); \ + MC_EXT_OP(param, 0, 0, 32, uint16_t, cfg->adv.options); \ + MC_EXT_OP(param, 0, 32, 8, uint16_t, cfg->adv.num_queues); \ + MC_EXT_OP(param, 0, 40, 8, uint16_t, cfg->adv.num_tcs); \ + MC_EXT_OP(param, 0, 48, 8, uint16_t, cfg->adv.mac_entries); \ + MC_EXT_OP(param, 1, 0, 8, uint16_t, cfg->adv.vlan_entries); \ + MC_EXT_OP(param, 1, 16, 8, uint16_t, cfg->adv.qos_entries); \ + MC_EXT_OP(param, 1, 32, 16, uint16_t, cfg->adv.fs_entries); \ } while (0) /* cmd, param, offset, width, type, arg_name */ #define DPNI_CMD_CREATE(cmd, cfg) \ do { \ - MC_CMD_OP(cmd, 0, 0, 8, uint8_t, cfg->adv.max_tcs); \ - MC_CMD_OP(cmd, 0, 8, 8, uint8_t, cfg->adv.max_senders); \ - MC_CMD_OP(cmd, 0, 16, 8, uint8_t, cfg->mac_addr[5]); \ - MC_CMD_OP(cmd, 0, 24, 8, uint8_t, cfg->mac_addr[4]); \ - MC_CMD_OP(cmd, 0, 32, 8, uint8_t, cfg->mac_addr[3]); \ - MC_CMD_OP(cmd, 0, 40, 8, uint8_t, cfg->mac_addr[2]); \ - MC_CMD_OP(cmd, 0, 48, 8, uint8_t, cfg->mac_addr[1]); \ - MC_CMD_OP(cmd, 0, 56, 8, uint8_t, cfg->mac_addr[0]); \ - MC_CMD_OP(cmd, 1, 0, 32, uint32_t, cfg->adv.options); \ - MC_CMD_OP(cmd, 2, 0, 8, uint8_t, cfg->adv.max_unicast_filters); \ - MC_CMD_OP(cmd, 2, 8, 8, uint8_t, cfg->adv.max_multicast_filters); \ - MC_CMD_OP(cmd, 2, 16, 8, uint8_t, cfg->adv.max_vlan_filters); \ - MC_CMD_OP(cmd, 2, 24, 8, uint8_t, cfg->adv.max_qos_entries); \ - MC_CMD_OP(cmd, 2, 32, 8, uint8_t, cfg->adv.max_qos_key_size); \ - MC_CMD_OP(cmd, 2, 48, 8, uint8_t, cfg->adv.max_dist_key_size); \ - MC_CMD_OP(cmd, 2, 56, 8, enum net_prot, cfg->adv.start_hdr); \ - MC_CMD_OP(cmd, 4, 48, 8, uint8_t, cfg->adv.max_policers); \ - MC_CMD_OP(cmd, 4, 56, 8, uint8_t, cfg->adv.max_congestion_ctrl); \ - MC_CMD_OP(cmd, 5, 0, 64, uint64_t, cfg->adv.ext_cfg_iova); \ + MC_CMD_OP(cmd, 0, 0, 32, uint32_t, cfg->adv.options); \ + MC_CMD_OP(cmd, 0, 32, 8, uint8_t, cfg->adv.num_queues); \ + MC_CMD_OP(cmd, 0, 40, 8, uint8_t, cfg->adv.num_tcs); \ + MC_CMD_OP(cmd, 0, 48, 8, uint8_t, cfg->adv.mac_entries); \ + MC_CMD_OP(cmd, 1, 0, 8, uint8_t, cfg->adv.vlan_entries); \ + MC_CMD_OP(cmd, 1, 16, 8, uint8_t, cfg->adv.qos_entries); \ + MC_CMD_OP(cmd, 1, 32, 16, uint8_t, cfg->adv.fs_entries); \ } while (0) /* cmd, param, offset, width, type, arg_name */ @@ -168,27 +115,18 @@ do { \ } while (0) /* cmd, param, offset, width, type, arg_name */ -#define DPNI_CMD_GET_ATTR(cmd, attr) \ - MC_CMD_OP(cmd, 6, 0, 64, uint64_t, attr->ext_cfg_iova) - -/* cmd, param, offset, width, type, arg_name */ #define DPNI_RSP_GET_ATTR(cmd, attr) \ do { \ - MC_RSP_OP(cmd, 0, 0, 32, int, attr->id);\ - MC_RSP_OP(cmd, 0, 32, 8, uint8_t, attr->max_tcs); \ - MC_RSP_OP(cmd, 0, 40, 8, uint8_t, attr->max_senders); \ - MC_RSP_OP(cmd, 0, 48, 8, enum net_prot, attr->start_hdr); \ - MC_RSP_OP(cmd, 1, 0, 32, uint32_t, attr->options); \ - MC_RSP_OP(cmd, 2, 0, 8, uint8_t, attr->max_unicast_filters); \ - MC_RSP_OP(cmd, 2, 8, 8, uint8_t, attr->max_multicast_filters);\ - MC_RSP_OP(cmd, 2, 16, 8, uint8_t, attr->max_vlan_filters); \ - MC_RSP_OP(cmd, 2, 24, 8, uint8_t, attr->max_qos_entries); \ - MC_RSP_OP(cmd, 2, 32, 8, uint8_t, attr->max_qos_key_size); \ - MC_RSP_OP(cmd, 2, 40, 8, uint8_t, attr->max_dist_key_size); \ - MC_RSP_OP(cmd, 4, 48, 8, uint8_t, attr->max_policers); \ - MC_RSP_OP(cmd, 4, 56, 8, uint8_t, attr->max_congestion_ctrl); \ - MC_RSP_OP(cmd, 5, 32, 16, uint16_t, attr->version.major);\ - MC_RSP_OP(cmd, 5, 48, 16, uint16_t, attr->version.minor);\ + MC_RSP_OP(cmd, 0, 0, 32, int, attr->options);\ + MC_RSP_OP(cmd, 0, 32, 8, uint8_t, attr->max_num_queues); \ + MC_RSP_OP(cmd, 0, 40, 8, uint8_t, attr->max_num_tcs); \ + MC_RSP_OP(cmd, 0, 48, 8, uint8_t, attr->max_mac_entries); \ + MC_RSP_OP(cmd, 1, 0, 8, uint8_t, attr->max_vlan_entries); \ + MC_RSP_OP(cmd, 1, 16, 8, uint8_t, attr->max_qos_entries); \ + MC_RSP_OP(cmd, 1, 32, 16, uint16_t, attr->max_fs_entries); \ + MC_RSP_OP(cmd, 2, 0, 8, uint8_t, attr->max_qos_key_size); \ + MC_RSP_OP(cmd, 2, 8, 8, uint8_t, attr->max_fs_key_size); \ + MC_RSP_OP(cmd, 2, 16, 16, uint16_t, attr->wriop_version); \ } while (0) /* cmd, param, offset, width, type, arg_name */ @@ -200,78 +138,17 @@ do { \ } while (0) /* cmd, param, offset, width, type, arg_name */ -#define DPNI_RSP_GET_RX_BUFFER_LAYOUT(cmd, layout) \ -do { \ - MC_RSP_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ - MC_RSP_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ - MC_RSP_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ - MC_RSP_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ - MC_RSP_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ - MC_RSP_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ - MC_RSP_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ -} while (0) - -/* cmd, param, offset, width, type, arg_name */ -#define DPNI_CMD_SET_RX_BUFFER_LAYOUT(cmd, layout) \ -do { \ - MC_CMD_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ - MC_CMD_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ - MC_CMD_OP(cmd, 0, 32, 32, uint32_t, layout->options); \ - MC_CMD_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ - MC_CMD_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ - MC_CMD_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ - MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ - MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ -} while (0) - -/* cmd, param, offset, width, type, arg_name */ -#define DPNI_RSP_GET_TX_BUFFER_LAYOUT(cmd, layout) \ -do { \ - MC_RSP_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ - MC_RSP_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ - MC_RSP_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ - MC_RSP_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ - MC_RSP_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ - MC_RSP_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ - MC_RSP_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ -} while (0) - -/* cmd, param, offset, width, type, arg_name */ -#define DPNI_CMD_SET_TX_BUFFER_LAYOUT(cmd, layout) \ -do { \ - MC_CMD_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ - MC_CMD_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ - MC_CMD_OP(cmd, 0, 32, 32, uint32_t, layout->options); \ - MC_CMD_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ - MC_CMD_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ - MC_CMD_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ - MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ - MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ -} while (0) - -/* cmd, param, offset, width, type, arg_name */ -#define DPNI_RSP_GET_TX_CONF_BUFFER_LAYOUT(cmd, layout) \ -do { \ - MC_RSP_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ - MC_RSP_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ - MC_RSP_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ - MC_RSP_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ - MC_RSP_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ - MC_RSP_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ - MC_RSP_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ -} while (0) - -/* cmd, param, offset, width, type, arg_name */ -#define DPNI_CMD_SET_TX_CONF_BUFFER_LAYOUT(cmd, layout) \ +#define DPNI_CMD_SET_BUFFER_LAYOUT(cmd, layout, queue) \ do { \ - MC_CMD_OP(cmd, 0, 0, 16, uint16_t, layout->private_data_size); \ - MC_CMD_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \ - MC_CMD_OP(cmd, 0, 32, 32, uint32_t, layout->options); \ - MC_CMD_OP(cmd, 1, 0, 1, int, layout->pass_timestamp); \ - MC_CMD_OP(cmd, 1, 1, 1, int, layout->pass_parser_result); \ - MC_CMD_OP(cmd, 1, 2, 1, int, layout->pass_frame_status); \ - MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \ - MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \ + MC_CMD_OP(cmd, 0, 0, 8, enum dpni_queue_type, queue); \ + MC_CMD_OP(cmd, 1, 0, 16, uint16_t, layout->private_data_size); \ + MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_align); \ + MC_CMD_OP(cmd, 0, 32, 16, uint16_t, layout->options); \ + MC_CMD_OP(cmd, 0, 48, 1, int, layout->pass_timestamp); \ + MC_CMD_OP(cmd, 0, 49, 1, int, layout->pass_parser_result); \ + MC_CMD_OP(cmd, 0, 50, 1, int, layout->pass_frame_status); \ + MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_head_room); \ + MC_CMD_OP(cmd, 1, 48, 16, uint16_t, layout->data_tail_room); \ } while (0) /* cmd, param, offset, width, type, arg_name */ @@ -283,21 +160,6 @@ do { \ MC_RSP_OP(cmd, 0, 0, 16, uint16_t, data_offset) /* cmd, param, offset, width, type, arg_name */ -#define DPNI_CMD_GET_COUNTER(cmd, counter) \ - MC_CMD_OP(cmd, 0, 0, 16, enum dpni_counter, counter) - -/* cmd, param, offset, width, type, arg_name */ -#define DPNI_RSP_GET_COUNTER(cmd, value) \ - MC_RSP_OP(cmd, 1, 0, 64, uint64_t, value) - -/* cmd, param, offset, width, type, arg_name */ -#define DPNI_CMD_SET_COUNTER(cmd, counter, value) \ -do { \ - MC_CMD_OP(cmd, 0, 0, 16, enum dpni_counter, counter); \ - MC_CMD_OP(cmd, 1, 0, 64, uint64_t, value); \ -} while (0) - -/* cmd, param, offset, width, type, arg_name */ #define DPNI_CMD_SET_LINK_CFG(cmd, cfg) \ do { \ MC_CMD_OP(cmd, 1, 0, 32, uint32_t, cfg->rate);\ @@ -358,129 +220,54 @@ do { \ MC_CMD_OP(cmd, 0, 56, 8, uint8_t, mac_addr[0]); \ } while (0) -/* cmd, param, offset, width, type, arg_name */ -#define DPNI_CMD_SET_TX_FLOW(cmd, flow_id, cfg) \ +#define DPNI_CMD_GET_QUEUE(cmd, type, tc, index) \ do { \ - MC_CMD_OP(cmd, 0, 43, 1, int, cfg->l3_chksum_gen);\ - MC_CMD_OP(cmd, 0, 44, 1, int, cfg->l4_chksum_gen);\ - MC_CMD_OP(cmd, 0, 45, 1, int, cfg->use_common_tx_conf_queue);\ - MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id);\ - MC_CMD_OP(cmd, 2, 0, 32, uint32_t, cfg->options);\ + MC_CMD_OP(cmd, 0, 0, 8, enum dpni_queue_type, type); \ + MC_CMD_OP(cmd, 0, 8, 8, uint8_t, tc); \ + MC_CMD_OP(cmd, 0, 16, 8, uint8_t, index); \ } while (0) -/* cmd, param, offset, width, type, arg_name */ -#define DPNI_RSP_SET_TX_FLOW(cmd, flow_id) \ - MC_RSP_OP(cmd, 0, 48, 16, uint16_t, flow_id) - -/* cmd, param, offset, width, type, arg_name */ -#define DPNI_CMD_GET_TX_FLOW(cmd, flow_id) \ - MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id) - -/* cmd, param, offset, width, type, arg_name */ -#define DPNI_RSP_GET_TX_FLOW(cmd, attr) \ +#define DPNI_RSP_GET_QUEUE(cmd, queue) \ do { \ - MC_RSP_OP(cmd, 0, 43, 1, int, attr->l3_chksum_gen);\ - MC_RSP_OP(cmd, 0, 44, 1, int, attr->l4_chksum_gen);\ - MC_RSP_OP(cmd, 0, 45, 1, int, attr->use_common_tx_conf_queue);\ + MC_RSP_OP(cmd, 1, 0, 32, uint32_t, (queue)->destination.id); \ + MC_RSP_OP(cmd, 1, 56, 4, enum dpni_dest, (queue)->destination.type); \ + MC_RSP_OP(cmd, 1, 62, 1, char, (queue)->destination.stash_ctrl); \ + MC_RSP_OP(cmd, 1, 63, 1, char, (queue)->destination.hold_active); \ + MC_RSP_OP(cmd, 2, 0, 64, uint64_t, (queue)->flc); \ + MC_RSP_OP(cmd, 3, 0, 64, uint64_t, (queue)->user_context); \ + MC_RSP_OP(cmd, 4, 0, 32, uint32_t, (queue)->fqid); \ + MC_RSP_OP(cmd, 4, 32, 16, uint16_t, (queue)->qdbin); \ } while (0) -/* cmd, param, offset, width, type, arg_name */ -#define DPNI_CMD_SET_RX_FLOW(cmd, tc_id, flow_id, cfg) \ +#define DPNI_CMD_SET_QUEUE(cmd, type, tc, index, queue) \ do { \ - MC_CMD_OP(cmd, 0, 0, 32, int, cfg->dest_cfg.dest_id); \ - MC_CMD_OP(cmd, 0, 32, 8, uint8_t, cfg->dest_cfg.priority);\ - MC_CMD_OP(cmd, 0, 40, 2, enum dpni_dest, cfg->dest_cfg.dest_type);\ - MC_CMD_OP(cmd, 0, 42, 1, int, cfg->order_preservation_en);\ - MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id); \ - MC_CMD_OP(cmd, 1, 0, 64, uint64_t, cfg->user_ctx); \ - MC_CMD_OP(cmd, 2, 16, 8, uint8_t, tc_id); \ - MC_CMD_OP(cmd, 2, 32, 32, uint32_t, cfg->options); \ - MC_CMD_OP(cmd, 3, 0, 4, enum dpni_flc_type, cfg->flc_cfg.flc_type); \ - MC_CMD_OP(cmd, 3, 4, 4, enum dpni_stash_size, \ - cfg->flc_cfg.frame_data_size);\ - MC_CMD_OP(cmd, 3, 8, 4, enum dpni_stash_size, \ - cfg->flc_cfg.flow_context_size);\ - MC_CMD_OP(cmd, 3, 32, 32, uint32_t, cfg->flc_cfg.options);\ - MC_CMD_OP(cmd, 4, 0, 64, uint64_t, cfg->flc_cfg.flow_context);\ - MC_CMD_OP(cmd, 5, 0, 32, uint32_t, cfg->tail_drop_threshold); \ + MC_CMD_OP(cmd, 0, 0, 8, enum dpni_queue_type, type); \ + MC_CMD_OP(cmd, 0, 8, 8, uint8_t, tc); \ + MC_CMD_OP(cmd, 0, 16, 8, uint8_t, index); \ + MC_CMD_OP(cmd, 0, 24, 8, uint8_t, (queue)->options); \ + MC_CMD_OP(cmd, 1, 0, 32, uint32_t, (queue)->destination.id); \ + MC_CMD_OP(cmd, 1, 56, 4, enum dpni_dest, (queue)->destination.type); \ + MC_CMD_OP(cmd, 1, 62, 1, char, (queue)->destination.stash_ctrl); \ + MC_CMD_OP(cmd, 1, 63, 1, char, (queue)->destination.hold_active); \ + MC_CMD_OP(cmd, 1, 0, 32, uint32_t, (queue)->destination.id); \ + MC_CMD_OP(cmd, 2, 0, 64, uint64_t, (queue)->flc); \ + MC_CMD_OP(cmd, 3, 0, 64, uint64_t, (queue)->user_context); \ } while (0) -/* cmd, param, offset, width, type, arg_name */ -#define DPNI_CMD_GET_RX_FLOW(cmd, tc_id, flow_id) \ -do { \ - MC_CMD_OP(cmd, 0, 16, 8, uint8_t, tc_id); \ - MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id); \ -} while (0) +/* cmd, param, offset, width, type, arg_name */ +#define DPNI_CMD_GET_STATISTICS(cmd, page) \ + MC_CMD_OP(cmd, 0, 0, 8, uint8_t, page) /* cmd, param, offset, width, type, arg_name */ -#define DPNI_RSP_GET_RX_FLOW(cmd, attr) \ +#define DPNI_RSP_GET_STATISTICS(cmd, stat) \ do { \ - MC_RSP_OP(cmd, 0, 0, 32, int, attr->dest_cfg.dest_id); \ - MC_RSP_OP(cmd, 0, 32, 8, uint8_t, attr->dest_cfg.priority);\ - MC_RSP_OP(cmd, 0, 40, 2, enum dpni_dest, attr->dest_cfg.dest_type); \ - MC_RSP_OP(cmd, 0, 42, 1, int, attr->order_preservation_en);\ - MC_RSP_OP(cmd, 1, 0, 64, uint64_t, attr->user_ctx); \ - MC_RSP_OP(cmd, 2, 0, 32, uint32_t, attr->tail_drop_threshold); \ - MC_RSP_OP(cmd, 2, 32, 32, uint32_t, attr->fqid); \ - MC_RSP_OP(cmd, 3, 0, 4, enum dpni_flc_type, attr->flc_cfg.flc_type); \ - MC_RSP_OP(cmd, 3, 4, 4, enum dpni_stash_size, \ - attr->flc_cfg.frame_data_size);\ - MC_RSP_OP(cmd, 3, 8, 4, enum dpni_stash_size, \ - attr->flc_cfg.flow_context_size);\ - MC_RSP_OP(cmd, 3, 32, 32, uint32_t, attr->flc_cfg.options);\ - MC_RSP_OP(cmd, 4, 0, 64, uint64_t, attr->flc_cfg.flow_context);\ -} while (0) - -#define DPNI_CMD_SET_TX_CONF(cmd, flow_id, cfg) \ -do { \ - MC_CMD_OP(cmd, 0, 32, 8, uint8_t, cfg->queue_cfg.dest_cfg.priority); \ - MC_CMD_OP(cmd, 0, 40, 2, enum dpni_dest, \ - cfg->queue_cfg.dest_cfg.dest_type); \ - MC_CMD_OP(cmd, 0, 42, 1, int, cfg->errors_only); \ - MC_CMD_OP(cmd, 0, 46, 1, int, cfg->queue_cfg.order_preservation_en); \ - MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id); \ - MC_CMD_OP(cmd, 1, 0, 64, uint64_t, cfg->queue_cfg.user_ctx); \ - MC_CMD_OP(cmd, 2, 0, 32, uint32_t, cfg->queue_cfg.options); \ - MC_CMD_OP(cmd, 2, 32, 32, int, cfg->queue_cfg.dest_cfg.dest_id); \ - MC_CMD_OP(cmd, 3, 0, 32, uint32_t, \ - cfg->queue_cfg.tail_drop_threshold); \ - MC_CMD_OP(cmd, 4, 0, 4, enum dpni_flc_type, \ - cfg->queue_cfg.flc_cfg.flc_type); \ - MC_CMD_OP(cmd, 4, 4, 4, enum dpni_stash_size, \ - cfg->queue_cfg.flc_cfg.frame_data_size); \ - MC_CMD_OP(cmd, 4, 8, 4, enum dpni_stash_size, \ - cfg->queue_cfg.flc_cfg.flow_context_size); \ - MC_CMD_OP(cmd, 4, 32, 32, uint32_t, cfg->queue_cfg.flc_cfg.options); \ - MC_CMD_OP(cmd, 5, 0, 64, uint64_t, \ - cfg->queue_cfg.flc_cfg.flow_context); \ -} while (0) - -#define DPNI_CMD_GET_TX_CONF(cmd, flow_id) \ - MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id) - -#define DPNI_RSP_GET_TX_CONF(cmd, attr) \ -do { \ - MC_RSP_OP(cmd, 0, 32, 8, uint8_t, \ - attr->queue_attr.dest_cfg.priority); \ - MC_RSP_OP(cmd, 0, 40, 2, enum dpni_dest, \ - attr->queue_attr.dest_cfg.dest_type); \ - MC_RSP_OP(cmd, 0, 42, 1, int, attr->errors_only); \ - MC_RSP_OP(cmd, 0, 46, 1, int, \ - attr->queue_attr.order_preservation_en); \ - MC_RSP_OP(cmd, 1, 0, 64, uint64_t, attr->queue_attr.user_ctx); \ - MC_RSP_OP(cmd, 2, 32, 32, int, attr->queue_attr.dest_cfg.dest_id); \ - MC_RSP_OP(cmd, 3, 0, 32, uint32_t, \ - attr->queue_attr.tail_drop_threshold); \ - MC_RSP_OP(cmd, 3, 32, 32, uint32_t, attr->queue_attr.fqid); \ - MC_RSP_OP(cmd, 4, 0, 4, enum dpni_flc_type, \ - attr->queue_attr.flc_cfg.flc_type); \ - MC_RSP_OP(cmd, 4, 4, 4, enum dpni_stash_size, \ - attr->queue_attr.flc_cfg.frame_data_size); \ - MC_RSP_OP(cmd, 4, 8, 4, enum dpni_stash_size, \ - attr->queue_attr.flc_cfg.flow_context_size); \ - MC_RSP_OP(cmd, 4, 32, 32, uint32_t, attr->queue_attr.flc_cfg.options); \ - MC_RSP_OP(cmd, 5, 0, 64, uint64_t, \ - attr->queue_attr.flc_cfg.flow_context); \ + MC_RSP_OP(cmd, 0, 0, 64, uint64_t, (stat)->counter0); \ + MC_RSP_OP(cmd, 1, 0, 64, uint64_t, (stat)->counter1); \ + MC_RSP_OP(cmd, 2, 0, 64, uint64_t, (stat)->counter2); \ + MC_RSP_OP(cmd, 3, 0, 64, uint64_t, (stat)->counter3); \ + MC_RSP_OP(cmd, 4, 0, 64, uint64_t, (stat)->counter4); \ + MC_RSP_OP(cmd, 5, 0, 64, uint64_t, (stat)->counter5); \ + MC_RSP_OP(cmd, 6, 0, 64, uint64_t, (stat)->counter6); \ } while (0) enum net_prot { @@ -645,6 +432,33 @@ int dpni_close(struct fsl_mc_io *mc_io, #define DPNI_OPT_FS_MASK_SUPPORT 0x00040000 /** + * enum dpni_queue_type - Identifies a type of queue targeted by the command + * @DPNI_QUEUE_RX: Rx queue + * @DPNI_QUEUE_TX: Tx queue + * @DPNI_QUEUE_TX_CONFIRM: Tx confirmation queue + * @DPNI_QUEUE_RX_ERR: Rx error queue + */ +enum dpni_queue_type { + DPNI_QUEUE_RX, + DPNI_QUEUE_TX, + DPNI_QUEUE_TX_CONFIRM, + DPNI_QUEUE_RX_ERR, +}; + +struct dpni_cfg { + uint8_t mac_addr[6]; + struct { + uint32_t options; + uint16_t fs_entries; + uint8_t num_queues; + uint8_t num_tcs; + uint8_t mac_entries; + uint8_t vlan_entries; + uint8_t qos_entries; + } adv; +}; + +/** * struct dpni_extended_cfg - Structure representing extended DPNI configuration * @tc_cfg: TCs configuration * @ipr_cfg: IP reassembly configuration @@ -685,78 +499,21 @@ struct dpni_extended_cfg { }; /** - * dpni_prepare_extended_cfg() - function prepare extended parameters - * @cfg: extended structure - * @ext_cfg_buf: Zeroed 256 bytes of memory before mapping it to DMA + * dpni_prepare_cfg() - function prepare parameters + * @cfg: cfg structure + * @cfg_buf: Zeroed 256 bytes of memory before mapping it to DMA * * This function has to be called before dpni_create() */ -int dpni_prepare_extended_cfg(const struct dpni_extended_cfg *cfg, - uint8_t *ext_cfg_buf); - -/** - * struct dpni_cfg - Structure representing DPNI configuration - * @mac_addr: Primary MAC address - * @adv: Advanced parameters; default is all zeros; - * use this structure to change default settings - */ -struct dpni_cfg { - uint8_t mac_addr[6]; - /** - * struct adv - Advanced parameters - * @options: Mask of available options; use 'DPNI_OPT_<X>' values - * @start_hdr: Selects the packet starting header for parsing; - * 'NET_PROT_NONE' is treated as default: 'NET_PROT_ETH' - * @max_senders: Maximum number of different senders; used as the number - * of dedicated Tx flows; Non-power-of-2 values are rounded - * up to the next power-of-2 value as hardware demands it; - * '0' will be treated as '1' - * @max_tcs: Maximum number of traffic classes (for both Tx and Rx); - * '0' will e treated as '1' - * @max_unicast_filters: Maximum number of unicast filters; - * '0' is treated as '16' - * @max_multicast_filters: Maximum number of multicast filters; - * '0' is treated as '64' - * @max_qos_entries: if 'max_tcs > 1', declares the maximum entries in - * the QoS table; '0' is treated as '64' - * @max_qos_key_size: Maximum key size for the QoS look-up; - * '0' is treated as '24' which is enough for IPv4 - * 5-tuple - * @max_dist_key_size: Maximum key size for the distribution; - * '0' is treated as '24' which is enough for IPv4 5-tuple - * @max_policers: Maximum number of policers; - * should be between '0' and max_tcs - * @max_congestion_ctrl: Maximum number of congestion control groups - * (CGs); covers early drop and congestion notification - * requirements; - * should be between '0' and ('max_tcs' + 'max_senders') - * @ext_cfg_iova: I/O virtual address of 256 bytes DMA-able memory - * filled with the extended configuration by calling - * dpni_prepare_extended_cfg() - */ - struct { - uint32_t options; - enum net_prot start_hdr; - uint8_t max_senders; - uint8_t max_tcs; - uint8_t max_unicast_filters; - uint8_t max_multicast_filters; - uint8_t max_vlan_filters; - uint8_t max_qos_entries; - uint8_t max_qos_key_size; - uint8_t max_dist_key_size; - uint8_t max_policers; - uint8_t max_congestion_ctrl; - uint64_t ext_cfg_iova; - } adv; -}; - +int dpni_prepare_cfg(const struct dpni_cfg *cfg, + uint8_t *cfg_buf); /** * dpni_create() - Create the DPNI object * @mc_io: Pointer to MC portal's I/O object + * @token: Authentication token. * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @cfg: Configuration structure - * @token: Returned token; use in subsequent API calls + * @obj_id: Returned obj_id; use in subsequent API calls * * Create the DPNI object, allocate required resources and * perform required initialization. @@ -774,21 +531,24 @@ struct dpni_cfg { * Return: '0' on Success; Error code otherwise. */ int dpni_create(struct fsl_mc_io *mc_io, + uint16_t token, uint32_t cmd_flags, const struct dpni_cfg *cfg, - uint16_t *token); + uint32_t *obj_id); /** * dpni_destroy() - Destroy the DPNI object and release all its resources. * @mc_io: Pointer to MC portal's I/O object + * @token: Authentication token. * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' - * @token: Token of DPNI object + * @obj_id: Returned obj_id; use in subsequent API calls * * Return: '0' on Success; error code otherwise. */ int dpni_destroy(struct fsl_mc_io *mc_io, + uint16_t token, uint32_t cmd_flags, - uint16_t token); + uint32_t obj_id); /** * struct dpni_pools_cfg - Structure representing buffer pools configuration @@ -867,49 +627,32 @@ int dpni_reset(struct fsl_mc_io *mc_io, /** * struct dpni_attr - Structure representing DPNI attributes - * @id: DPNI object ID - * @version: DPNI version - * @start_hdr: Indicates the packet starting header for parsing * @options: Mask of available options; reflects the value as was given in * object's creation - * @max_senders: Maximum number of different senders; used as the number - * of dedicated Tx flows; - * @max_tcs: Maximum number of traffic classes (for both Tx and Rx) + * @max_num_queues: Number of queues available (for both Tx and Rx) + * @max_num_tcs: Maximum number of traffic classes (for both Tx and Rx) + * @max_mac_entries: Maximum number of traffic classes (for both Tx and Rx) * @max_unicast_filters: Maximum number of unicast filters * @max_multicast_filters: Maximum number of multicast filters - * @max_vlan_filters: Maximum number of VLAN filters + * @max_vlan_entries: Maximum number of VLAN filters * @max_qos_entries: if 'max_tcs > 1', declares the maximum entries in QoS table + * @max_fs_entries: declares the maximum entries in flow steering table * @max_qos_key_size: Maximum key size for the QoS look-up - * @max_dist_key_size: Maximum key size for the distribution look-up - * @max_policers: Maximum number of policers; - * @max_congestion_ctrl: Maximum number of congestion control groups (CGs); - * @ext_cfg_iova: I/O virtual address of 256 bytes DMA-able memory; - * call dpni_extract_extended_cfg() to extract the extended configuration + * @max_fs_key_size: Maximum key size for the flow steering + * @wriop_version: Indicates revision of WRIOP hardware block */ struct dpni_attr { - int id; - /** - * struct version - DPNI version - * @major: DPNI major version - * @minor: DPNI minor version - */ - struct { - uint16_t major; - uint16_t minor; - } version; - enum net_prot start_hdr; + uint32_t id; uint32_t options; - uint8_t max_senders; - uint8_t max_tcs; - uint8_t max_unicast_filters; - uint8_t max_multicast_filters; - uint8_t max_vlan_filters; + uint8_t max_num_queues; + uint8_t max_num_tcs; + uint8_t max_mac_entries; + uint8_t max_vlan_entries; uint8_t max_qos_entries; + uint16_t max_fs_entries; uint8_t max_qos_key_size; - uint8_t max_dist_key_size; - uint8_t max_policers; - uint8_t max_congestion_ctrl; - uint64_t ext_cfg_iova; + uint8_t max_fs_key_size; + uint16_t wriop_version; }; /** @@ -927,14 +670,14 @@ int dpni_get_attributes(struct fsl_mc_io *mc_io, struct dpni_attr *attr); /** - * dpni_extract_extended_cfg() - extract the extended parameters - * @cfg: extended structure - * @ext_cfg_buf: 256 bytes of DMA-able memory + * dpni_extract_cfg() - extract the parameters + * @cfg: cfg structure + * @cfg_buf: 256 bytes of DMA-able memory * * This function has to be called after dpni_get_attributes() */ -int dpni_extract_extended_cfg(struct dpni_extended_cfg *cfg, - const uint8_t *ext_cfg_buf); +int dpni_extract_cfg(struct dpni_cfg *cfg, + const uint8_t *cfg_buf); /** * DPNI errors @@ -1037,7 +780,7 @@ int dpni_set_errors_behavior(struct fsl_mc_io *mc_io, * @data_tail_room: Data tail room */ struct dpni_buffer_layout { - uint32_t options; + uint16_t options; int pass_timestamp; int pass_parser_result; int pass_frame_status; @@ -1048,96 +791,38 @@ struct dpni_buffer_layout { }; /** - * dpni_get_rx_buffer_layout() - Retrieve Rx buffer layout attributes. + * dpni_get_buffer_layout() - Retrieve buffer layout attributes. * @mc_io: Pointer to MC portal's I/O object * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @token: Token of DPNI object * @layout: Returns buffer layout attributes + * @type: DPNI queue type * * Return: '0' on Success; Error code otherwise. */ -int dpni_get_rx_buffer_layout(struct fsl_mc_io *mc_io, - uint32_t cmd_flags, - uint16_t token, - struct dpni_buffer_layout *layout); +int dpni_get_buffer_layout(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + const struct dpni_buffer_layout *layout, + enum dpni_queue_type type); /** - * dpni_set_rx_buffer_layout() - Set Rx buffer layout configuration. + * dpni_set_buffer_layout() - Set buffer layout configuration. * @mc_io: Pointer to MC portal's I/O object * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @token: Token of DPNI object * @layout: Buffer layout configuration + * @type: DPNI queue type * * Return: '0' on Success; Error code otherwise. * * @warning Allowed only when DPNI is disabled */ -int dpni_set_rx_buffer_layout(struct fsl_mc_io *mc_io, - uint32_t cmd_flags, - uint16_t token, - const struct dpni_buffer_layout *layout); - -/** - * dpni_get_tx_buffer_layout() - Retrieve Tx buffer layout attributes. - * @mc_io: Pointer to MC portal's I/O object - * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' - * @token: Token of DPNI object - * @layout: Returns buffer layout attributes - * - * Return: '0' on Success; Error code otherwise. - */ -int dpni_get_tx_buffer_layout(struct fsl_mc_io *mc_io, - uint32_t cmd_flags, - uint16_t token, - struct dpni_buffer_layout *layout); - -/** - * dpni_set_tx_buffer_layout() - Set Tx buffer layout configuration. - * @mc_io: Pointer to MC portal's I/O object - * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' - * @token: Token of DPNI object - * @layout: Buffer layout configuration - * - * Return: '0' on Success; Error code otherwise. - * - * @warning Allowed only when DPNI is disabled - */ -int dpni_set_tx_buffer_layout(struct fsl_mc_io *mc_io, - uint32_t cmd_flags, - uint16_t token, - const struct dpni_buffer_layout *layout); - -/** - * dpni_get_tx_conf_buffer_layout() - Retrieve Tx confirmation buffer layout - * attributes. - * @mc_io: Pointer to MC portal's I/O object - * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' - * @token: Token of DPNI object - * @layout: Returns buffer layout attributes - * - * Return: '0' on Success; Error code otherwise. - */ -int dpni_get_tx_conf_buffer_layout(struct fsl_mc_io *mc_io, - uint32_t cmd_flags, - uint16_t token, - struct dpni_buffer_layout *layout); - -/** - * dpni_set_tx_conf_buffer_layout() - Set Tx confirmation buffer layout - * configuration. - * @mc_io: Pointer to MC portal's I/O object - * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' - * @token: Token of DPNI object - * @layout: Buffer layout configuration - * - * Return: '0' on Success; Error code otherwise. - * - * @warning Allowed only when DPNI is disabled - */ -int dpni_set_tx_conf_buffer_layout(struct fsl_mc_io *mc_io, - uint32_t cmd_flags, - uint16_t token, - const struct dpni_buffer_layout *layout); +int dpni_set_buffer_layout(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + const struct dpni_buffer_layout *layout, + enum dpni_queue_type type); /** * dpni_get_qdid() - Get the Queuing Destination ID (QDID) that should be used @@ -1169,68 +854,6 @@ int dpni_get_tx_data_offset(struct fsl_mc_io *mc_io, uint16_t token, uint16_t *data_offset); -/** - * enum dpni_counter - DPNI counter types - * @DPNI_CNT_ING_FRAME: Counts ingress frames - * @DPNI_CNT_ING_BYTE: Counts ingress bytes - * @DPNI_CNT_ING_FRAME_DROP: Counts ingress frames dropped due to explicit - * 'drop' setting - * @DPNI_CNT_ING_FRAME_DISCARD: Counts ingress frames discarded due to errors - * @DPNI_CNT_ING_MCAST_FRAME: Counts ingress multicast frames - * @DPNI_CNT_ING_MCAST_BYTE: Counts ingress multicast bytes - * @DPNI_CNT_ING_BCAST_FRAME: Counts ingress broadcast frames - * @DPNI_CNT_ING_BCAST_BYTES: Counts ingress broadcast bytes - * @DPNI_CNT_EGR_FRAME: Counts egress frames - * @DPNI_CNT_EGR_BYTE: Counts egress bytes - * @DPNI_CNT_EGR_FRAME_DISCARD: Counts egress frames discarded due to errors - */ -enum dpni_counter { - DPNI_CNT_ING_FRAME = 0x0, - DPNI_CNT_ING_BYTE = 0x1, - DPNI_CNT_ING_FRAME_DROP = 0x2, - DPNI_CNT_ING_FRAME_DISCARD = 0x3, - DPNI_CNT_ING_MCAST_FRAME = 0x4, - DPNI_CNT_ING_MCAST_BYTE = 0x5, - DPNI_CNT_ING_BCAST_FRAME = 0x6, - DPNI_CNT_ING_BCAST_BYTES = 0x7, - DPNI_CNT_EGR_FRAME = 0x8, - DPNI_CNT_EGR_BYTE = 0x9, - DPNI_CNT_EGR_FRAME_DISCARD = 0xa -}; - -/** - * dpni_get_counter() - Read a specific DPNI counter - * @mc_io: Pointer to MC portal's I/O object - * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' - * @token: Token of DPNI object - * @counter: The requested counter - * @value: Returned counter's current value - * - * Return: '0' on Success; Error code otherwise. - */ -int dpni_get_counter(struct fsl_mc_io *mc_io, - uint32_t cmd_flags, - uint16_t token, - enum dpni_counter counter, - uint64_t *value); - -/** - * dpni_set_counter() - Set (or clear) a specific DPNI counter - * @mc_io: Pointer to MC portal's I/O object - * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' - * @token: Token of DPNI object - * @counter: The requested counter - * @value: New counter value; typically pass '0' for resetting - * the counter. - * - * Return: '0' on Success; Error code otherwise. - */ -int dpni_set_counter(struct fsl_mc_io *mc_io, - uint32_t cmd_flags, - uint16_t token, - enum dpni_counter counter, - uint64_t value); - /* Enable auto-negotiation */ #define DPNI_LINK_OPT_AUTONEG 0x0000000000000001ULL /* Enable half-duplex mode */ @@ -1506,183 +1129,199 @@ struct dpni_queue_attr { #define DPNI_TX_FLOW_OPT_L4_CHKSUM_GEN 0x00000020 /** - * struct dpni_tx_flow_cfg - Structure representing Tx flow configuration - * @options: Flags representing the suggested modifications to the Tx flow; - * Use any combination 'DPNI_TX_FLOW_OPT_<X>' flags - * @use_common_tx_conf_queue: Set to '1' to use the common (default) Tx - * confirmation and error queue; Set to '0' to use the private - * Tx confirmation and error queue; valid only if - * 'DPNI_OPT_PRIVATE_TX_CONF_ERROR_DISABLED' wasn't set at DPNI creation - * and 'DPNI_TX_FLOW_OPT_TX_CONF_ERROR' is contained in 'options' - * @l3_chksum_gen: Set to '1' to enable L3 checksum generation; '0' to disable; - * valid only if 'DPNI_TX_FLOW_OPT_L3_CHKSUM_GEN' is contained in 'options' - * @l4_chksum_gen: Set to '1' to enable L4 checksum generation; '0' to disable; - * valid only if 'DPNI_TX_FLOW_OPT_L4_CHKSUM_GEN' is contained in 'options' - */ -struct dpni_tx_flow_cfg { - uint32_t options; - int use_common_tx_conf_queue; - int l3_chksum_gen; - int l4_chksum_gen; -}; - -/** - * dpni_set_tx_flow() - Set Tx flow configuration + * dpni_get_api_version - Retrieve DPNI Major and Minor version info. + * * @mc_io: Pointer to MC portal's I/O object * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' - * @token: Token of DPNI object - * @flow_id: Provides (or returns) the sender's flow ID; - * for each new sender set (*flow_id) to 'DPNI_NEW_FLOW_ID' to generate - * a new flow_id; this ID should be used as the QDBIN argument - * in enqueue operations - * @cfg: Tx flow configuration + * @major_ver: DPNI major version + * @minor_ver: DPNI minor version * - * Return: '0' on Success; Error code otherwise. - */ -int dpni_set_tx_flow(struct fsl_mc_io *mc_io, - uint32_t cmd_flags, - uint16_t token, - uint16_t *flow_id, - const struct dpni_tx_flow_cfg *cfg); - -/** - * struct dpni_tx_flow_attr - Structure representing Tx flow attributes - * @use_common_tx_conf_queue: '1' if using common (default) Tx confirmation and - * error queue; '0' if using private Tx confirmation and error queue - * @l3_chksum_gen: '1' if L3 checksum generation is enabled; '0' if disabled - * @l4_chksum_gen: '1' if L4 checksum generation is enabled; '0' if disabled - */ -struct dpni_tx_flow_attr { - int use_common_tx_conf_queue; - int l3_chksum_gen; - int l4_chksum_gen; + * Return: '0' on Success; Error code otherwise. + */ +int dpni_get_api_version(struct fsl_mc_io *mc_io, + u32 cmd_flags, + u16 *major_ver, + u16 *minor_ver); + +/** + * enum dpni_confirmation_mode - Defines DPNI options supported for Tx + * confirmation + * @DPNI_CONF_AFFINE: For each Tx queue set associated with a sender there is + * an affine Tx Confirmation queue + * @DPNI_CONF_SINGLE: All Tx queues are associated with a single Tx + * confirmation queue + * @DPNI_CONF_DISABLE: Tx frames are not confirmed. This must be associated + * with proper FD set-up to have buffers release to a Buffer Pool, otherwise + * buffers will be leaked. + */ +enum dpni_confirmation_mode { + DPNI_CONF_AFFINE, + DPNI_CONF_SINGLE, + DPNI_CONF_DISABLE, }; -/** - * dpni_get_tx_flow() - Get Tx flow attributes - * @mc_io: Pointer to MC portal's I/O object - * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' - * @token: Token of DPNI object - * @flow_id: The sender's flow ID, as returned by the - * dpni_set_tx_flow() function - * @attr: Returned Tx flow attributes - * - * Return: '0' on Success; Error code otherwise. - */ -int dpni_get_tx_flow(struct fsl_mc_io *mc_io, - uint32_t cmd_flags, - uint16_t token, - uint16_t flow_id, - struct dpni_tx_flow_attr *attr); +struct dpni_tx_confirmation_mode { + uint32_t pad; + uint8_t confirmation_mode; +}; /** - * struct dpni_tx_conf_cfg - Structure representing Tx conf configuration - * @errors_only: Set to '1' to report back only error frames; - * Set to '0' to confirm transmission/error for all transmitted frames; - * @queue_cfg: Queue configuration + * struct dpni_queue - Queue structure + * @fqid: FQID used for enqueueing to and/or configuration of this specific FQ + * @qdbin: Queueing bin, used to enqueue using QDID, DQBIN, QPRI. Only relevant + * for Tx queues. + * @flc: FLC value for traffic dequeued from this queue. + * @user_context: User data, presented to the user along with any frames + * from this queue. Not relevant for Tx queues. */ -struct dpni_tx_conf_cfg { - int errors_only; - struct dpni_queue_cfg queue_cfg; +struct dpni_queue { + /** + * struct destination - Destination structure + * @id: ID of the destination, only relevant if DEST_TYPE is > 0. + * Identifies either a DPIO or a DPCON object. Not relevant for Tx + * queues. + * @type: May be one of the following: + * 0 - No destination, queue can be manually queried, but won't + * push traffic or notifications to a DPIO; + * 1 - The destination is DPIO. When traffic becomes available in + * the queue a FQDAN (FQ data available notification) will be + * generated to selected DPIO; + * 2 - The destination is a DPCON. The queue is associated with a + * DPCON object for purpose of scheduling between multiple + * queues. The DPCON may be independently configured to + * generate notifications. Not relevant for Tx queues. + * @hold_active: Hold active + */ + struct { + uint32_t id; + enum dpni_dest type; + char hold_active; + char stash_ctrl; + } destination; + uint8_t options; + uint32_t fqid; + uint16_t qdbin; + uint64_t flc; + uint64_t user_context; }; /** - * dpni_set_tx_conf() - Set Tx confirmation and error queue configuration - * @mc_io: Pointer to MC portal's I/O object - * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' - * @token: Token of DPNI object - * @flow_id: The sender's flow ID, as returned by the - * dpni_set_tx_flow() function; - * use 'DPNI_COMMON_TX_CONF' for common tx-conf - * @cfg: Queue configuration + * dpni_set_queue() - Set queue parameters + * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' + * @token: Token of DPNI object + * @type: Type of queue + * @tc: Traffic class, in range 0 to NUM_TCS - 1 + * @index: Selects the specific queue out of the set allocated for the same + * TC. Value must be in range 0 to NUM_QUEUES - 1 + * @queue: Queue structure * - * If either 'DPNI_OPT_TX_CONF_DISABLED' or - * 'DPNI_OPT_PRIVATE_TX_CONF_ERROR_DISABLED' were selected at DPNI creation, - * this function can ONLY be used with 'flow_id == DPNI_COMMON_TX_CONF'; - * i.e. only serve the common tx-conf-err queue; - * if 'DPNI_OPT_TX_CONF_DISABLED' was selected, only error frames are reported - * back - successfully transmitted frames are not confirmed. Otherwise, all - * transmitted frames are sent for confirmation. + * Return: '0' on Success; Error code otherwise. + */ +int dpni_set_queue(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + enum dpni_queue_type type, + uint8_t tc, + uint8_t index, + const struct dpni_queue *queue); + +/** + * dpni_get_queue() - Get queue parameters + * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' + * @token: Token of DPNI object + * @type: Type of queue + * @tc: Traffic class, in range 0 to NUM_TCS - 1 + * @index: Selects the specific queue out of the set allocated for the same + * TC. Value must be in range 0 to NUM_QUEUES - 1 + * @queue: Queue structure * - * Return: '0' on Success; Error code otherwise. + * Return: '0' on Success; Error code otherwise. */ -int dpni_set_tx_conf(struct fsl_mc_io *mc_io, - uint32_t cmd_flags, - uint16_t token, - uint16_t flow_id, - const struct dpni_tx_conf_cfg *cfg); +int dpni_get_queue(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + enum dpni_queue_type type, + uint8_t tc, + uint8_t index, + struct dpni_queue *queue); /** - * struct dpni_tx_conf_attr - Structure representing Tx conf attributes - * @errors_only: '1' if only error frames are reported back; '0' if all - * transmitted frames are confirmed - * @queue_attr: Queue attributes + * dpni_set_tx_confirmation_mode() - Set TX conf mode + * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' + * @token: Token of DPNI object + * @mode: DPNI confirmation mode type + * + * Return: '0' on Success; Error code otherwise. */ -struct dpni_tx_conf_attr { - int errors_only; - struct dpni_queue_attr queue_attr; +int dpni_set_tx_confirmation_mode(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + enum dpni_confirmation_mode mode); +struct dpni_statistics { + /** + * Page_0 statistics structure + * @ingress_all_frames: Ingress frame count + * @ingress_all_bytes: Ingress byte count + * @ingress_multicast_frames: Ingress multicast frame count + * @ingress_multicast_bytes: Ingress multicast byte count + * @ingress_broadcast_frames: Ingress broadcast frame count + * @ingress_broadcast_bytes: Ingress broadcast byte count + * + * Page_1 statistics structure + * @egress_all_frames: Egress frame count + * @egress_all_bytes: Egress byte count + * @egress_multicast_frames: Egress multicast frame count + * @egress_multicast_bytes: Egress multicast byte count + * @egress_broadcast_frames: Egress broadcast frame count + * @egress_broadcast_bytes: Egress broadcast byte count + * + * Page_2 statistics structure + * @ingress_filtered_frames: Ingress filtered frame count + * @ingress_discarded_frames: Ingress discarded frame count + * @ingress_nobuffer_discards: Ingress discarded frame count due to + * lack of buffers. + * @egress_discarded_frames: Egress discarded frame count + * @egress_confirmed_frames: Egress confirmed frame count + */ + + uint64_t counter0; + uint64_t counter1; + uint64_t counter2; + uint64_t counter3; + uint64_t counter4; + uint64_t counter5; + uint64_t counter6; }; /** - * dpni_get_tx_conf() - Get Tx confirmation and error queue attributes + * dpni_get_statistics() - Get DPNI statistics * @mc_io: Pointer to MC portal's I/O object * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @token: Token of DPNI object - * @flow_id: The sender's flow ID, as returned by the - * dpni_set_tx_flow() function; - * use 'DPNI_COMMON_TX_CONF' for common tx-conf - * @attr: Returned tx-conf attributes - * - * If either 'DPNI_OPT_TX_CONF_DISABLED' or - * 'DPNI_OPT_PRIVATE_TX_CONF_ERROR_DISABLED' were selected at DPNI creation, - * this function can ONLY be used with 'flow_id == DPNI_COMMON_TX_CONF'; - * i.e. only serve the common tx-conf-err queue; + * @page: Selects the statistics page to retrieve, see DPNI_GET_STATISTICS + * output. Pages are numbered 0 to 2. + * @stat: Structure containing the statistics * * Return: '0' on Success; Error code otherwise. */ -int dpni_get_tx_conf(struct fsl_mc_io *mc_io, - uint32_t cmd_flags, - uint16_t token, - uint16_t flow_id, - struct dpni_tx_conf_attr *attr); -/** - * dpni_set_rx_flow() - Set Rx flow configuration - * @mc_io: Pointer to MC portal's I/O object - * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' - * @token: Token of DPNI object - * @tc_id: Traffic class selection (0-7); - * use 'DPNI_ALL_TCS' to set all TCs and all flows - * @flow_id: Rx flow id within the traffic class; use - * 'DPNI_ALL_TC_FLOWS' to set all flows within - * this tc_id; ignored if tc_id is set to - * 'DPNI_ALL_TCS'; - * @cfg: Rx flow configuration - * - * Return: '0' on Success; Error code otherwise. - */ -int dpni_set_rx_flow(struct fsl_mc_io *mc_io, - uint32_t cmd_flags, - uint16_t token, - uint8_t tc_id, - uint16_t flow_id, - const struct dpni_queue_cfg *cfg); +int dpni_get_statistics(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + uint8_t page, + struct dpni_statistics *stat); /** - * dpni_get_rx_flow() - Get Rx flow attributes + * dpni_reset_statistics() - Clears DPNI statistics * @mc_io: Pointer to MC portal's I/O object * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @token: Token of DPNI object - * @tc_id: Traffic class selection (0-7) - * @flow_id: Rx flow id within the traffic class - * @attr: Returned Rx flow attributes * * Return: '0' on Success; Error code otherwise. */ -int dpni_get_rx_flow(struct fsl_mc_io *mc_io, - uint32_t cmd_flags, - uint16_t token, - uint8_t tc_id, - uint16_t flow_id, - struct dpni_queue_attr *attr); - +int dpni_reset_statistics(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token); #endif /* _FSL_DPNI_H */ diff --git a/include/fsl-mc/fsl_dprc.h b/include/fsl-mc/fsl_dprc.h index 535c789c95..8ad01d4f51 100644 --- a/include/fsl-mc/fsl_dprc.h +++ b/include/fsl-mc/fsl_dprc.h @@ -1,8 +1,8 @@ /* * Freescale Layerscape MC I/O wrapper * - * Copyright (C) 2013-2015 Freescale Semiconductor, Inc. - * Author: German Rivera <German.Rivera@freescale.com> + * Copyright (C) 2013-2016 Freescale Semiconductor, Inc. + * Copyright 2017 NXP * * SPDX-License-Identifier: GPL-2.0+ */ @@ -10,29 +10,30 @@ #define _FSL_DPRC_H /* DPRC Version */ -#define DPRC_VER_MAJOR 5 +#define DPRC_VER_MAJOR 6 #define DPRC_VER_MINOR 1 /* Command IDs */ -#define DPRC_CMDID_CLOSE 0x800 -#define DPRC_CMDID_OPEN 0x805 -#define DPRC_CMDID_CREATE 0x905 - -#define DPRC_CMDID_GET_ATTR 0x004 -#define DPRC_CMDID_RESET_CONT 0x005 - -#define DPRC_CMDID_CREATE_CONT 0x151 -#define DPRC_CMDID_DESTROY_CONT 0x152 -#define DPRC_CMDID_GET_CONT_ID 0x830 -#define DPRC_CMDID_GET_OBJ_COUNT 0x159 -#define DPRC_CMDID_GET_OBJ 0x15A -#define DPRC_CMDID_GET_RES_COUNT 0x15B -#define DPRC_CMDID_GET_RES_IDS 0x15C -#define DPRC_CMDID_GET_OBJ_REG 0x15E - -#define DPRC_CMDID_CONNECT 0x167 -#define DPRC_CMDID_DISCONNECT 0x168 -#define DPRC_CMDID_GET_CONNECTION 0x16C +#define DPRC_CMDID_CLOSE 0x8001 +#define DPRC_CMDID_OPEN 0x8051 +#define DPRC_CMDID_CREATE 0x9051 + +#define DPRC_CMDID_GET_ATTR 0x0041 +#define DPRC_CMDID_RESET_CONT 0x0051 +#define DPRC_CMDID_GET_API_VERSION 0xa051 + +#define DPRC_CMDID_CREATE_CONT 0x1511 +#define DPRC_CMDID_DESTROY_CONT 0x1521 +#define DPRC_CMDID_GET_CONT_ID 0x8301 +#define DPRC_CMDID_GET_OBJ_COUNT 0x1591 +#define DPRC_CMDID_GET_OBJ 0x15A1 +#define DPRC_CMDID_GET_RES_COUNT 0x15B1 +#define DPRC_CMDID_GET_RES_IDS 0x15C1 +#define DPRC_CMDID_GET_OBJ_REG 0x15E1 + +#define DPRC_CMDID_CONNECT 0x1671 +#define DPRC_CMDID_DISCONNECT 0x1681 +#define DPRC_CMDID_GET_CONNECTION 0x16C1 /* cmd, param, offset, width, type, arg_name */ #define DPRC_RSP_GET_CONTAINER_ID(cmd, container_id) \ @@ -88,8 +89,6 @@ do { \ MC_RSP_OP(cmd, 0, 32, 16, uint16_t, attr->icid); \ MC_RSP_OP(cmd, 1, 0, 32, uint32_t, attr->options);\ MC_RSP_OP(cmd, 1, 32, 32, int, attr->portal_id); \ - MC_RSP_OP(cmd, 2, 0, 16, uint16_t, attr->version.major);\ - MC_RSP_OP(cmd, 2, 16, 16, uint16_t, attr->version.minor);\ } while (0) /* cmd, param, offset, width, type, arg_name */ @@ -345,9 +344,9 @@ do { \ #define DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2, cfg) \ do { \ MC_CMD_OP(cmd, 0, 0, 32, int, endpoint1->id); \ - MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint1->if_id); \ + MC_CMD_OP(cmd, 0, 32, 32, int, endpoint1->if_id); \ MC_CMD_OP(cmd, 1, 0, 32, int, endpoint2->id); \ - MC_CMD_OP(cmd, 1, 32, 16, uint16_t, endpoint2->if_id); \ + MC_CMD_OP(cmd, 1, 32, 32, int, endpoint2->if_id); \ MC_CMD_OP(cmd, 2, 0, 8, char, endpoint1->type[0]); \ MC_CMD_OP(cmd, 2, 8, 8, char, endpoint1->type[1]); \ MC_CMD_OP(cmd, 2, 16, 8, char, endpoint1->type[2]); \ @@ -410,8 +409,8 @@ do { \ /* cmd, param, offset, width, type, arg_name */ #define DPRC_CMD_GET_CONNECTION(cmd, endpoint1) \ do { \ - MC_CMD_OP(cmd, 0, 0, 32, int, endpoint1->id); \ - MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint1->if_id); \ + MC_CMD_OP(cmd, 0, 0, 32, int, endpoint1->id); \ + MC_CMD_OP(cmd, 0, 32, 32, int, endpoint1->if_id); \ MC_CMD_OP(cmd, 1, 0, 8, char, endpoint1->type[0]); \ MC_CMD_OP(cmd, 1, 8, 8, char, endpoint1->type[1]); \ MC_CMD_OP(cmd, 1, 16, 8, char, endpoint1->type[2]); \ @@ -657,15 +656,6 @@ struct dprc_attributes { uint16_t icid; int portal_id; uint64_t options; - /** - * struct version - DPRC version - * @major: DPRC major version - * @minor: DPRC minor version - */ - struct { - uint16_t major; - uint16_t minor; - } version; }; /** @@ -950,4 +940,19 @@ int dprc_get_connection(struct fsl_mc_io *mc_io, struct dprc_endpoint *endpoint2, int *state); +/** + * dprc_get_api_version - Retrieve DPRC Major and Minor version info. + * + * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' + * @major_ver: DPRC major version + * @minor_ver: DPRC minor version + * + * Return: '0' on Success; Error code otherwise. + */ +int dprc_get_api_version(struct fsl_mc_io *mc_io, + u32 cmd_flags, + u16 *major_ver, + u16 *minor_ver); + #endif /* _FSL_DPRC_H */ diff --git a/include/fsl-mc/fsl_mc_cmd.h b/include/fsl-mc/fsl_mc_cmd.h index f3d1498cc0..1ec67b5491 100644 --- a/include/fsl-mc/fsl_mc_cmd.h +++ b/include/fsl-mc/fsl_mc_cmd.h @@ -1,4 +1,5 @@ -/* Copyright 2013-2015 Freescale Semiconductor Inc. +/* Copyright 2013-2016 Freescale Semiconductor Inc. + * Copyright 2017 NXP * * SPDX-License-Identifier: GPL-2.0+ */ @@ -24,6 +25,15 @@ struct mc_command { uint64_t params[MC_CMD_NUM_OF_PARAMS]; }; +struct mc_rsp_create { + __le32 object_id; +}; + +struct mc_rsp_api_ver { + __le16 major_ver; + __le16 minor_ver; +}; + enum mc_cmd_status { MC_CMD_STATUS_OK = 0x0, /*!< Completed successfully */ MC_CMD_STATUS_READY = 0x1, /*!< Ready to be processed */ @@ -51,15 +61,15 @@ enum mc_cmd_status { #define MC_CMD_FLAG_INTR_DIS 0x01000000 -#define MC_CMD_HDR_CMDID_O 52 /* Command ID field offset */ -#define MC_CMD_HDR_CMDID_S 12 /* Command ID field size */ +#define MC_CMD_HDR_CMDID_O 48 /* Command ID field offset */ +#define MC_CMD_HDR_CMDID_S 16 /* Command ID field size */ #define MC_CMD_HDR_STATUS_O 16 /* Status field offset */ -#define MC_CMD_HDR_TOKEN_O 38 /* Token field offset */ -#define MC_CMD_HDR_TOKEN_S 10 /* Token field size */ +#define MC_CMD_HDR_TOKEN_O 32 /* Token field offset */ +#define MC_CMD_HDR_TOKEN_S 16 /* Token field size */ #define MC_CMD_HDR_STATUS_S 8 /* Status field size*/ #define MC_CMD_HDR_FLAGS_O 0 /* Flags field offset */ #define MC_CMD_HDR_FLAGS_S 32 /* Flags field size*/ -#define MC_CMD_HDR_FLAGS_MASK 0xFF00FF00 /* Command flags mask */ +#define MC_CMD_HDR_FLAGS_MASK 0x0000FFFF /* Command flags mask */ #define MC_CMD_HDR_READ_STATUS(_hdr) \ ((enum mc_cmd_status)mc_dec((_hdr), \ @@ -80,11 +90,19 @@ enum mc_cmd_status { #define MC_RSP_OP(_cmd, _param, _offset, _width, _type, _arg) \ (_arg = (_type)mc_dec(_cmd.params[_param], (_offset), (_width))) +/* cmd, param, offset, width, type, arg_name */ +#define MC_CMD_READ_OBJ_ID(cmd, obj_id) \ + MC_RSP_OP(cmd, 0, 0, 32, uint32_t, obj_id) + +/* cmd, param, offset, width, type, arg_name */ +#define CMD_DESTROY_SET_OBJ_ID_PARAM0(cmd, object_id) \ + MC_CMD_OP(cmd, 0, 0, 32, uint32_t, object_id) + static inline uint64_t mc_encode_cmd_header(uint16_t cmd_id, uint32_t cmd_flags, uint16_t token) { - uint64_t hdr; + uint64_t hdr = 0; hdr = mc_enc(MC_CMD_HDR_CMDID_O, MC_CMD_HDR_CMDID_S, cmd_id); hdr |= mc_enc(MC_CMD_HDR_FLAGS_O, MC_CMD_HDR_FLAGS_S, @@ -144,4 +162,22 @@ static inline enum mc_cmd_status mc_read_response( return status; } +/** + * mc_read_version - read version of the given cmd + * + * @cmd: pointer to a filled command + * @major_version: major version value for the given cmd + * @minor_version: minor version value for the given cmd + */ +static inline void mc_cmd_read_api_version(struct mc_command *cmd, + u16 *major_ver, + u16 *minor_ver) +{ + struct mc_rsp_api_ver *rsp_params; + + rsp_params = (struct mc_rsp_api_ver *)cmd->params; + *major_ver = le16_to_cpu(rsp_params->major_ver); + *minor_ver = le16_to_cpu(rsp_params->minor_ver); +} + #endif /* __FSL_MC_CMD_H */ diff --git a/include/fsl-mc/fsl_mc_private.h b/include/fsl-mc/fsl_mc_private.h index 17e0611964..2932d9d561 100644 --- a/include/fsl-mc/fsl_mc_private.h +++ b/include/fsl-mc/fsl_mc_private.h @@ -1,5 +1,6 @@ /* - * Copyright (C) 2014 Freescale Semiconductor + * Copyright (C) 2014-2016 Freescale Semiconductor + * Copyright 2017 NXP * * SPDX-License-Identifier: GPL-2.0+ */ @@ -29,6 +30,7 @@ extern struct fsl_mc_io *dflt_mc_io; * @struct dpbp_attr: DPBP attribute */ struct fsl_dpbp_obj { + uint32_t dpbp_id; uint16_t dpbp_handle; struct dpbp_attr dpbp_attr; }; @@ -41,7 +43,7 @@ extern struct fsl_dpbp_obj *dflt_dpbp; * @struct qbman_swp *sw_portal: SW portal object */ struct fsl_dpio_obj { - int dpio_id; + uint32_t dpio_id; uint16_t dpio_handle; struct qbman_swp *sw_portal; /** SW portal object */ }; @@ -56,7 +58,7 @@ extern struct fsl_dpio_obj *dflt_dpio; * @struct dpni_buffer_layout: DPNI buffer layout */ struct fsl_dpni_obj { - int dpni_id; + uint32_t dpni_id; uint16_t dpni_handle; struct dpni_attr dpni_attrs; struct dpni_buffer_layout buf_layout; |