/* SPDX-License-Identifier: Apache-2.0 */ /** * @file options.h * * @brief Header file for CXL Fabric Management CLI options * * @copyright Copyright (C) 2024 Jackrabbit Founders LLC. All rights reserved. * * @date Jan 2024 * @author Barrett Edwards * * Macro / Enumeration Prefixes (CL) * CLAP - CLI Options Parsers Enumeration (AP) * CLCM - CLI Command Opcod (CM) * CLMR - CLI Macros (MR) * CLOP - CLI Option (CL) * CLPC - Physical Port Control Opcodes (PC) * CLPU - Port Unbind Mode Options (PU) * * Standard key mapping * -h --help Display Help * -T --tcp-port Server TCP Port * -V --verbosity Set Verbosity Flag * -X --verbosity-hex Set all Verbosity Flags with hex value * -p --ppid Physical Port ID * -c --vcsid Virtual CXL Switch ID * -b --vppbid Virtual PCIe-to-PCIe Bridge ID * -a --all All of collection * -l --ldid LD-ID (for MLD devices) * -w --write Perform a Write transaction * -n --length Length * -o --offset Memory Offset * --data Write Data (up to 4 bytes) * --infile Filename for input data * --outfile Filename for output data * * Non char key mapping * 701 - usage * 702 - version * 703 - data * 704 - infile * 705 - outfile * 706 - print-options */ #ifndef _OPTIONS_H #define _OPTIONS_H /* INCLUDES ==================================================================*/ /* __u8 * __u15 * __u32 * __u64 * __s32 */ #include /* MACROS ====================================================================*/ /** * CLI Macros (MR) * * These are values that don't belong in an enumeration */ #define CLMR_MAX_LD_MEM_LEN 4096 #define CLMR_MAX_LD 16 #define CLMR_HELP_COLUMN 30 #define CLMR_MAX_HELP_WIDTH 100 #define CLMR_MAX_NAME_LEN 64 #define CLMR_AER_HEADER_LEN 32 #define DEFAULT_SERVER_PORT 2508 /* ENUMERATIONS ==============================================================*/ /** * Verbosity Options (VO) */ enum _JKVO { JKVO_GENERAL = 0, JKVO_CALLSTACK = 1, JKVO_STEPS = 2, JKVO_MAX }; /** * Verbosity Bitfield Index (VB) */ enum _JKVB { JKVB_GENERAL = (0x01 << 0), JKVB_CALLSTACK = (0x01 << 1), JKVB_STEPS = (0x01 << 2), }; /** * CLI Options Parsers Enumeration (AP) * * This enumeration identifies each argp parser. It is used to print options */ enum _CLAP { CLAP_MAIN = 0, CLAP_MCTP = 1, CLAP_SHOW = 2, CLAP_PORT = 3, CLAP_SET = 4, CLAP_LD = 5, CLAP_AER = 6, CLAP_SHOW_SWITCH = 7, CLAP_SHOW_PORT = 8, CLAP_SHOW_VCS = 9, CLAP_SHOW_QOS = 10, CLAP_SHOW_LD = 11, CLAP_PORT_BIND = 12, CLAP_PORT_UNBIND = 13, CLAP_PORT_CONFIG = 14, CLAP_PORT_CTRL = 15, CLAP_SET_LD = 16, CLAP_SET_QOS = 17, CLAP_LD_CONFIG = 18, CLAP_LD_MEM = 19, CLAP_SHOW_QOS_ALLOCATED = 20, CLAP_SHOW_QOS_CONTROL = 21, CLAP_SHOW_QOS_LIMIT = 22, CLAP_SHOW_QOS_STATUS = 23, CLAP_SHOW_LD_ALLOCATIONS = 24, CLAP_SHOW_LD_INFO = 25, CLAP_SET_LD_ALLOCATIONS = 26, CLAP_SET_QOS_ALLOCATED = 27, CLAP_SET_QOS_CONTROL = 28, CLAP_SET_QOS_LIMIT = 29, CLAP_SHOW_DEV = 30, CLAP_PORT_CONN = 31, CLAP_PORT_DISCONN = 32, CLAP_SHOW_IDENTITY = 33, CLAP_SHOW_MSG_LIMIT = 34, CLAP_SET_MSG_LIMIT = 35, CLAP_SHOW_BOS = 36, CLAP_MAX }; /** * CLI Command Opcode (CM) */ enum _CLCM { CLCM_NULL = 0, CLCM_AER = 1, CLCM_PORT_BIND = 2, CLCM_PORT_CONFIG = 3, CLCM_PORT_CTRL = 4, CLCM_PORT_UNBIND = 5, CLCM_LD_CONFIG = 6, CLCM_LD_MEM = 7, CLCM_MCTP = 8, CLCM_MCTP_GET_EID = 9, CLCM_MCTP_GET_TYPE = 10, CLCM_MCTP_GET_UUID = 11, CLCM_MCTP_GET_VER = 12, CLCM_MCTP_SET_EID = 13, CLCM_SET_LD_ALLOCATIONS = 14, CLCM_SET_QOS_ALLOCATED = 15, CLCM_SET_QOS_CONTROL = 16, CLCM_SET_QOS_LIMIT = 17, CLCM_SHOW_PORT = 18, CLCM_SHOW_LD_ALLOCATIONS= 19, CLCM_SHOW_LD_INFO = 20, CLCM_SHOW_QOS_ALLOCATED = 21, CLCM_SHOW_QOS_CONTROL = 22, CLCM_SHOW_QOS_LIMIT = 23, CLCM_SHOW_QOS_STATUS = 24, CLCM_SHOW_SWITCH = 25, CLCM_SHOW_VCS = 26, CLCM_SHOW_DEV = 27, CLCM_PORT_CONN = 28, CLCM_PORT_DISCONN = 29, CLCM_SHOW_IDENTITY = 30, CLCM_SHOW_MSG_LIMIT = 31, CLCM_SET_MSG_LIMIT = 32, CLCM_SHOW_BOS = 33, CLCM_LIST = 34, CLCM_MAX }; /** * CLI Option (OP) */ enum _CLOP { /* General CLI Options */ CLOP_VERBOSITY = 0, //!< Bit Field CLOP_TCP_PORT = 1, //!< TCP Port to connect to CLOP_CMD = 2, //!< Command to RUN CLOP_INFILE = 3, //!< Filename for input /* Hiden Options */ CLOP_PRNT_OPTS = 4, //!< Print Options Array when completed parsing /* MCTP Options */ CLOP_MCTP_EID = 5, //!< EID value for MCTP Set EID Command CLOP_MCTP_TYPE = 6, //!< Type value for MCTP Command Get Ver Command /* ID Options */ CLOP_VCSID = 7, //!< Virtual CXL Switch ID CLOP_PPID = 8, //!< Physical Port ID CLOP_VPPBID = 9, //!< Virtual Pcie-to-PCIe Bridge ID CLOP_LDID = 10, //!< Logical Device ID CLOP_ALL = 11, //!< Perform aciton on all of collection /* Port Options */ CLOP_UNBIND_MODE = 12, //!< Port Unbind Option [CLPU] CLOP_PORT_CONTROL = 13, //!< Action to perform [CLPC] /* Config & Memory Options */ CLOP_REGISTER = 14, //!< Register number CLOP_EXT_REGISTER = 15, //!< Extended Register number CLOP_FDBE = 16, //!< First Dword Byte Enable CLOP_LDBE = 17, //!< First Dword Byte Enable CLOP_WRITE = 18, //!< Perform a write transacion CLOP_OFFSET = 19, //!< Offset into a buffer address space CLOP_LEN = 20, //!< Length of data parameter /* LD Options */ CLOP_LD_RNG1 = 21, //!< LD Allocations Range1 Array CLOP_LD_RNG2 = 22, //!< LD Allocations Range2 Array /* QoS Options */ CLOP_CONGEST_ENABLE = 23, //!< Egress Port Congestion Enable CLOP_TEMP_THROTTLE = 24, //!< Temporary Throughput Reduction Enable CLOP_EGRESS_MOD_PCNT = 25, //!< Egress Moderate Percentage CLOP_EGRESS_SEV_PCNT = 26, //!< Egress Severe Percentage CLOP_BP_SAMPLE_INTVL = 27, //!< Backpressure Sample Interval CLOP_REQCMPBASIS = 28, //!< ReqCmpBasis CLOP_CCINTERVAL = 29, //!< Completion Collection Interval CLOP_QOS_ALLOCATED = 30, //!< QoS BW Allocation Fraction list CLOP_QOS_LIMIT = 31, //!< QoS BW Limit Fraction list /* AER Options */ CLOP_AER_ERROR = 32, //!< AER Error (4 Byte HEX) CLOP_AER_HEADER = 33, //!< AER TLP Header (32 Byte HEX String) CLOP_DATA = 34, //!< Immediate Data for Write transaction CLOP_OUTFILE = 35, //!< Filename for output CLOP_MCTP_VERBOSITY = 36, //!< Verbosity setting for MCTP library CLOP_DEVICE = 37, //!< Device ID CLOP_NUM = 38, //!< Number of items CLOP_LIMIT = 39, //!< Message Response Limit CLOP_TCP_ADDRESS = 40, //!< TCP Address to connect to CLOP_NO_INIT = 41, //!< Do not initialize local state at start up CLOP_MAX }; /** * Physical Port Control Opcodes (PC) * * CXL 2.0 v1.0 Table 93 */ enum _CLPC { CLPC_ASSERT = 0, CLPC_DEASSERT = 1, CLPC_RESET = 2, CLPC_MAX }; /** * Port Unbind Mode Options (PU) * * CXL 2.0 v1.0 Table 101 */ enum _CLPU { CLPU_WAIT = 0, CLPU_MANAGED = 1, CLPU_SURPRISE = 2, CLPU_MAX }; /* STRUCTS ===================================================================*/ /** * CLI Option Struct * * Each command line parameter is stored in one of these objects */ struct opt { int set; //!< Not set (0), set (1) __u8 u8; //!< Unsigned char value __u16 u16; //!< Unsigned long value __u32 u32; //!< Unsigned long value __u64 u64; //!< Unsigned long long value __s32 val; //!< Generic signed value __u64 num; //!< Number of items __u64 len; //!< Data Buffer Length char *str; //!< String value __u8 *buf; //!< Data buffer }; /* GLOBAL VARIABLES ==========================================================*/ /** * Global varible to store parsed CLI options */ extern struct opt *opts; /* PROTOTYPES ================================================================*/ /** * Free allocated memory by option parsing proceedure * * @return 0 upon success. Non zero otherwise */ int options_free(struct opt *opts); /** * Parse command line options */ int options_parse(int argc, char *argv[]); #endif //ifndef _OPTIONS_H