From ce01c5da50d1d0e41323a6048c930e6539d81e15 Mon Sep 17 00:00:00 2001 From: Monendra Singh Kushwaha Date: Tue, 13 May 2025 13:02:16 +0530 Subject: [PATCH] octeon: add port argument for ethernet pause frame Type: refactor Change-Id: I64dd556f6252d8f8dff7cb41748baebf89ceb159 Signed-off-by: Monendra Singh Kushwaha --- src/plugins/dev_octeon/init.c | 18 ++++++++++++++++++ src/plugins/dev_octeon/octeon.h | 6 ++++++ src/plugins/dev_octeon/port.c | 12 +++++++++++- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/plugins/dev_octeon/init.c b/src/plugins/dev_octeon/init.c index e1a6f9064ba..287810f1114 100644 --- a/src/plugins/dev_octeon/init.c +++ b/src/plugins/dev_octeon/init.c @@ -61,6 +61,23 @@ static struct #undef _ }; +static vnet_dev_arg_t oct_port_args[] = { + { + .id = OCT_PORT_ARG_EN_ETH_PAUSE_FRAME, + .name = "eth_pause_frame", + .desc = "Enable ethernet pause frame support, applicable to network " + "devices only", + .type = VNET_DEV_ARG_TYPE_BOOL, + .default_val.boolean = false, + }, + { + .id = OCT_PORT_ARG_END, + .name = "end", + .desc = "Argument end", + .type = VNET_DEV_ARG_END, + }, +}; + static vnet_dev_arg_t oct_dev_args[] = { { .id = OCT_DEV_ARG_CRYPTO_N_DESC, @@ -168,6 +185,7 @@ oct_init_nix (vlib_main_t *vm, vnet_dev_t *dev) }, .data_size = sizeof (oct_port_t), .initial_data = &oct_port, + .args = oct_port_args, }, .rx_node = &oct_rx_node, .tx_node = &oct_tx_node, diff --git a/src/plugins/dev_octeon/octeon.h b/src/plugins/dev_octeon/octeon.h index 24d51f9091e..d3abcd7d2e4 100644 --- a/src/plugins/dev_octeon/octeon.h +++ b/src/plugins/dev_octeon/octeon.h @@ -23,6 +23,12 @@ #define OCT_BATCH_ALLOC_IOVA0_MASK 0xFFFFFFFFFFFFFF80 +typedef enum +{ + OCT_PORT_ARG_EN_ETH_PAUSE_FRAME = 1, + OCT_PORT_ARG_END +} oct_port_args_t; + typedef enum { OCT_DEV_ARG_CRYPTO_N_DESC = 1, diff --git a/src/plugins/dev_octeon/port.c b/src/plugins/dev_octeon/port.c index 0fc3fcb7871..957af9160ea 100644 --- a/src/plugins/dev_octeon/port.c +++ b/src/plugins/dev_octeon/port.c @@ -132,11 +132,19 @@ oct_port_init (vlib_main_t *vm, vnet_dev_port_t *port) vnet_dev_port_interfaces_t *ifs = port->interfaces; u8 mac_addr[PLT_ETHER_ADDR_LEN]; struct roc_nix *nix = cd->nix; + bool is_pause_frame_enable = false; vnet_dev_rv_t rv; int rrv; log_debug (dev, "port init: port %u", port->port_id); + foreach_vnet_dev_port_args (arg, port) + { + if (arg->id == OCT_PORT_ARG_EN_ETH_PAUSE_FRAME && + vnet_dev_arg_get_bool (arg)) + is_pause_frame_enable = true; + } + if ((rrv = roc_nix_lf_alloc (nix, ifs->num_rx_queues, ifs->num_tx_queues, rxq_cfg))) { @@ -221,7 +229,9 @@ oct_port_init (vlib_main_t *vm, vnet_dev_port_t *port) } /* Configure pause frame flow control*/ - if ((rv = oct_port_pause_flow_control_init (vm, port))) + + if (is_pause_frame_enable && + (rv = oct_port_pause_flow_control_init (vm, port))) { oct_port_deinit (vm, port); return rv; -- 2.16.6