blob: 2eb6e1a4a6f1c728307eef03da7e3e00b7430d58 [file] [log] [blame]
/*
**************************************************************************
* Copyright (c) 2017-2019, 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.
**************************************************************************
*/
/**
* @file nss_unaligned.h
* NSS unaligned interface definitions.
*/
#ifndef __NSS_UNALIGNED_H
#define __NSS_UNALIGNED_H
/**
* @addtogroup nss_unaligned_subsystem
* @{
*/
#define NSS_UNALIGNED_OPS_PER_MSG 54
/**< The number of operations whose statistics are included in a message. */
#define NSS_UNALIGNED_EMULATED_OPS 64
/**< The number of operations that are emulated. */
/**
* nss_unaligned_msg_types
* Unaligned message types.
*/
enum nss_unaligned_msg_types {
NSS_UNALIGNED_MSG_STATS, /**< Performance statistics message. */
NSS_UNALIGNED_MSG_MAX, /**< Maximum unaligned message type. */
};
/**
* nss_unaligned_stats_op
* Performance statistics for emulating a single operation.
*/
struct nss_unaligned_stats_op {
uint32_t opcode_primary;
/**< Primary operation code. */
uint32_t opcode_extension;
/**< Extension operation code, if applicable. */
uint64_t count;
/**< Number of times operation was emulated. */
uint32_t ticks_min;
/**< Minimum number of ticks spent emulating operation. */
uint32_t ticks_avg;
/**< Average number of ticks spent emulating operation. */
uint32_t ticks_max;
/**< Maximum number of ticks spent emulating operation. */
uint32_t padding;
/**< Used for consistent alignment, can be re-used. */
};
/**
* nss_unaligned_stats
* Message containing all non-zero operation statistics.
*/
struct nss_unaligned_stats {
uint64_t trap_count;
/**< Number of unaligned traps encountered. */
struct nss_unaligned_stats_op ops[NSS_UNALIGNED_EMULATED_OPS];
/**< Statistics for each operation. */
};
/**
* nss_unaligned_stats_msg
* Message containing all non-zero operation statistics.
*/
struct nss_unaligned_stats_msg {
uint64_t trap_count; /**< Number of unaligned traps encountered. */
struct nss_unaligned_stats_op ops[NSS_UNALIGNED_OPS_PER_MSG];
/**< Statistics for each operation. */
uint32_t current_iteration; /**< Number of full statistics messages sent without reaching the end. */
};
/**
* nss_unaligned_msg
* Message from unaligned handler node.
*/
struct nss_unaligned_msg {
struct nss_cmn_msg cm; /**< Message header. */
/**
* Unaligned message payload.
*/
union {
struct nss_unaligned_stats_msg stats_msg;
/**< Message containing statistics. */
} msg; /**< Message payload. */
};
/**
* nss_unaligned_register_handler()
* Registers message handler on the NSS unaligned interface and
* statistics dentry.
*
* @datatypes
* nss_ctx_instance
*
* @param[in] nss_ctx Pointer to the NSS context.
*
* @return
* None.
*/
void nss_unaligned_register_handler(struct nss_ctx_instance *nss_ctx);
/**
* @}
*/
#endif