blob: ee656497f92a44b384b18b39289bc7c517284e2e [file] [log] [blame]
/*
**************************************************************************
* Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
**************************************************************************
*/
/*
* nss_ppe_vp.h
* NSS PPE virtual port header file
*/
#include <net/sock.h>
#include "nss_tx_rx_common.h"
/*
* Maximum number of virtual port supported by PPE hardware
*/
#define NSS_PPE_VP_MAX_NUM 192
#define NSS_PPE_VP_START 64
#define NSS_PPE_VP_NODE_STATS_MAX 32
#define NSS_PPE_VP_SWITCH_ID 0
#define NSS_PPE_VP_MAX_CMD_STR 200
/*
* ppe_vp nss debug stats lock
*/
extern spinlock_t nss_ppe_vp_stats_lock;
/*
* nss_ppe_vp_msg_error_type
* ppe_vp message errors
*/
enum nss_ppe_vp_msg_error_type {
NSS_PPE_VP_MSG_ERROR_TYPE_UNKNOWN, /* Unknown message error */
PPE_VP_MSG_ERROR_TYPE_INVALID_DI, /* Invalid dynamic interface type */
NSS_PPE_VP_MSG_ERROR_TYPE_MAX /* Maximum error type */
};
/*
* nss_ppe_vp_message_types
* Message types for Packet Processing Engine (PPE) requests and responses.
*/
enum nss_ppe_vp_message_types {
NSS_PPE_VP_MSG_SYNC_STATS,
NSS_PPE_VP_MSG_DESTROY_NOTIFY,
NSS_PPE_VP_MSG_MAX,
};
/*
* nss_ppe_vp_statistics
* Message structure for ppe_vp statistics
*/
struct nss_ppe_vp_statistics {
uint32_t nss_if; /* NSS interface number corresponding to VP */
nss_ppe_port_t ppe_port_num; /* VP number */
uint32_t rx_drop; /* Rx drops due to VP node inactive */
uint32_t tx_drop; /* Tx drops due to VP node inactive */
uint32_t packet_big_err; /* Number of packets not sent to PPE because packet was too large */
struct nss_cmn_node_stats stats; /* Common node statistics */
};
/*
* nss_ppe_vp_sync_stats_msg
* Message information for ppe_vp synchronization statistics.
*/
struct nss_ppe_vp_sync_stats_msg {
uint16_t count; /* Number of VP node stats with the sync message */
uint32_t rx_dropped[NSS_MAX_NUM_PRI]; /* Rx packet dropped due to queue full */
struct nss_ppe_vp_statistics vp_stats[NSS_PPE_VP_NODE_STATS_MAX];
/* Per service-code stats */
};
/*
* nss_ppe_vp_destroy_notify_msg
* Message received as part of destroy notification from Firmware to Host.
*/
struct nss_ppe_vp_destroy_notify_msg {
nss_ppe_port_t ppe_port_num; /* VP number */
};
/*
* nss_ppe_vp_msg
* Message for receiving ppe_vp NSS to host messages.
*/
struct nss_ppe_vp_msg {
struct nss_cmn_msg cm; /* Common message header. */
/*
* Payload.
*/
union {
union nss_if_msgs if_msg;
/* NSS interface base messages. */
struct nss_ppe_vp_sync_stats_msg stats;
/* Synchronization statistics. */
struct nss_ppe_vp_destroy_notify_msg destroy_notify;
/* Information for the VP destroyed in Firmware. */
} msg; /* Message payload. */
};
/*
* nss_vp_mapping
* Structure to maintain the one-to-one mapping between the NSS interface number and VP number.
*/
struct nss_vp_mapping {
nss_if_num_t if_num; /* NSS interface number. */
nss_ppe_port_t ppe_port_num; /* PPE port number corresponding to the NSS interface number. */
uint32_t vsi_id; /* VSI ID allocated for NSS interface */
bool vsi_id_valid; /* Set to true if vsi_id field has a valid VSI else set to false. */
};
typedef void (*nss_ppe_vp_msg_callback_t)(void *app_data, struct nss_ppe_vp_msg *msg);
/*
* Logging APIs.
*/
void nss_ppe_vp_log_tx_msg(struct nss_ppe_vp_msg *npvm);
void nss_ppe_vp_log_rx_msg(struct nss_ppe_vp_msg *npvm);