+
+/***********************************/
+/* MC_CMD_TELEMETRY_ENABLE
+ * This command enables telemetry processing of packets, allowing a remote host
+ * to gather information and analytics passing on the card. Enabling telemetry
+ * will have a performance cost. Not supported on all hardware and datapath
+ * variants. As of writing, only supported on Medford2 running full-featured
+ * firmware variant.
+ */
+#define MC_CMD_TELEMETRY_ENABLE 0x138
+#undef MC_CMD_0x138_PRIVILEGE_CTG
+
+#define MC_CMD_0x138_PRIVILEGE_CTG SRIOV_CTG_ADMIN
+
+/* MC_CMD_TELEMETRY_ENABLE_IN msgrequest */
+#define MC_CMD_TELEMETRY_ENABLE_IN_LEN 4
+#define MC_CMD_TELEMETRY_ENABLE_IN_STATE_OFST 0
+#define MC_CMD_TELEMETRY_ENABLE_IN_STATE_LEN 4
+/* enum: Disables telemetry functionality, returns the card to default
+ * behaviour of the configured datapath variant.
+ */
+#define MC_CMD_TELEMETRY_ENABLE_IN_DISABLE 0x0
+/* enum: Enables telemetry functionality on the currently configured datapath
+ * variant if supported.
+ */
+#define MC_CMD_TELEMETRY_ENABLE_IN_ENABLE 0x1
+
+/* MC_CMD_TELEMETRY_ENABLE_OUT msgresponse */
+#define MC_CMD_TELEMETRY_ENABLE_OUT_LEN 0
+
+/* TELEMETRY_CONFIG structuredef */
+#define TELEMETRY_CONFIG_LEN 36
+/* Bitfields to identify the list of config parameters included in the command.
+ * A bit-value of 1 indicates that the relevant config parameter field is
+ * valid; 0 indicates invalid and the config parameter field must be ignored by
+ * firmware. Firmware may however apply some default values for certain
+ * parameters.
+ */
+#define TELEMETRY_CONFIG_FLAGS_OFST 0
+#define TELEMETRY_CONFIG_FLAGS_LEN 4
+#define TELEMETRY_CONFIG_METRICS_COLLECTOR_IP_VALID_LBN 0
+#define TELEMETRY_CONFIG_METRICS_COLLECTOR_IP_VALID_WIDTH 1
+#define TELEMETRY_CONFIG_METRICS_COLLECTOR_PORT_VALID_LBN 1
+#define TELEMETRY_CONFIG_METRICS_COLLECTOR_PORT_VALID_WIDTH 1
+#define TELEMETRY_CONFIG_MONITOR_TIMEOUT_MS_VALID_LBN 2
+#define TELEMETRY_CONFIG_MONITOR_TIMEOUT_MS_VALID_WIDTH 1
+#define TELEMETRY_CONFIG_MAX_METRICS_COUNT_VALID_LBN 3
+#define TELEMETRY_CONFIG_MAX_METRICS_COUNT_VALID_WIDTH 1
+#define TELEMETRY_CONFIG_RESERVED1_LBN 4
+#define TELEMETRY_CONFIG_RESERVED1_WIDTH 28
+#define TELEMETRY_CONFIG_FLAGS_LBN 0
+#define TELEMETRY_CONFIG_FLAGS_WIDTH 32
+/* Collector IPv4/IPv6 address to which latency measurements are forwarded from
+ * the adapter (as bytes in network order; set last 12 bytes to 0 for IPv4
+ * address).
+ */
+#define TELEMETRY_CONFIG_METRICS_COLLECTOR_IP_OFST 4
+#define TELEMETRY_CONFIG_METRICS_COLLECTOR_IP_LEN 16
+#define TELEMETRY_CONFIG_METRICS_COLLECTOR_IP_LBN 32
+#define TELEMETRY_CONFIG_METRICS_COLLECTOR_IP_WIDTH 128
+/* Collector Port number to which latency measurements are forwarded from the
+ * adapter (as bytes in network order).
+ */
+#define TELEMETRY_CONFIG_METRICS_COLLECTOR_PORT_OFST 20
+#define TELEMETRY_CONFIG_METRICS_COLLECTOR_PORT_LEN 2
+#define TELEMETRY_CONFIG_METRICS_COLLECTOR_PORT_LBN 160
+#define TELEMETRY_CONFIG_METRICS_COLLECTOR_PORT_WIDTH 16
+/* Unused - set to 0. */
+#define TELEMETRY_CONFIG_RESERVED2_OFST 22
+#define TELEMETRY_CONFIG_RESERVED2_LEN 2
+#define TELEMETRY_CONFIG_RESERVED2_LBN 176
+#define TELEMETRY_CONFIG_RESERVED2_WIDTH 16
+/* MAC address of the collector (as bytes in network order). */
+#define TELEMETRY_CONFIG_METRICS_COLLECTOR_MAC_ADDR_OFST 24
+#define TELEMETRY_CONFIG_METRICS_COLLECTOR_MAC_ADDR_LEN 6
+#define TELEMETRY_CONFIG_METRICS_COLLECTOR_MAC_ADDR_LBN 192
+#define TELEMETRY_CONFIG_METRICS_COLLECTOR_MAC_ADDR_WIDTH 48
+/* Maximum number of latency measurements to be made on a telemetry flow. */
+#define TELEMETRY_CONFIG_MAX_METRICS_COUNT_OFST 30
+#define TELEMETRY_CONFIG_MAX_METRICS_COUNT_LEN 2
+#define TELEMETRY_CONFIG_MAX_METRICS_COUNT_LBN 240
+#define TELEMETRY_CONFIG_MAX_METRICS_COUNT_WIDTH 16
+/* Maximum duration for which a telemetry flow is monitored (in millisecs). */
+#define TELEMETRY_CONFIG_MONITOR_TIMEOUT_MS_OFST 32
+#define TELEMETRY_CONFIG_MONITOR_TIMEOUT_MS_LEN 4
+#define TELEMETRY_CONFIG_MONITOR_TIMEOUT_MS_LBN 256
+#define TELEMETRY_CONFIG_MONITOR_TIMEOUT_MS_WIDTH 32
+
+
+/***********************************/
+/* MC_CMD_TELEMETRY_CONFIG
+ * This top-level command includes various sub-opcodes that are used to apply
+ * (and read-back) telemetry related configuration parameters on the NIC.
+ * Reference - SF-120569-SW Telemetry Firmware Design.
+ */
+#define MC_CMD_TELEMETRY_CONFIG 0x139
+#undef MC_CMD_0x139_PRIVILEGE_CTG
+
+#define MC_CMD_0x139_PRIVILEGE_CTG SRIOV_CTG_ADMIN
+
+/* MC_CMD_TELEMETRY_CONFIG_IN msgrequest */
+#define MC_CMD_TELEMETRY_CONFIG_IN_LEN 4
+/* Telemetry configuration sub-operation code */
+#define MC_CMD_TELEMETRY_CONFIG_IN_OP_OFST 0
+#define MC_CMD_TELEMETRY_CONFIG_IN_OP_LEN 4
+/* enum: Configure parameters for telemetry measurements. */
+#define MC_CMD_TELEMETRY_CONFIG_OP_SET 0x1
+/* enum: Read current values of parameters for telemetry measurements. */
+#define MC_CMD_TELEMETRY_CONFIG_OP_GET 0x2
+
+/* MC_CMD_TELEMETRY_CONFIG_IN_SET msgrequest: This command configures the
+ * parameters necessary for tcp-latency measurements. The adapter adds a filter
+ * for every new tcp flow seen in both tx and rx directions and tracks the
+ * telemetry measurements related to the flow in a tracking table. Entries in
+ * the tracking table live as long as N measurements are made on the flow or
+ * the flow has been in the tracking table for the maximum configured duration.
+ * Telemetry measurements in this command refer to tcp-latency measurements for
+ * data-to-ack latency as well as data-to-data latency. All telemetry
+ * measurements are bundled into a UDP packet and forwarded to a collector
+ * whose IP address is configured using this command.
+ */
+#define MC_CMD_TELEMETRY_CONFIG_IN_SET_LEN 40
+/* Telemetry configuration sub-operation code. Must be set to
+ * MC_CMD_TELEMETRY_CONFIG_OP_SET.
+ */
+#define MC_CMD_TELEMETRY_CONFIG_IN_SET_OP_OFST 0
+#define MC_CMD_TELEMETRY_CONFIG_IN_SET_OP_LEN 4
+/* struct of type TELEMETRY_CONFIG. */
+#define MC_CMD_TELEMETRY_CONFIG_IN_SET_PARAMETERS_OFST 4
+#define MC_CMD_TELEMETRY_CONFIG_IN_SET_PARAMETERS_LEN 36
+
+/* MC_CMD_TELEMETRY_CONFIG_OUT_SET msgresponse */
+#define MC_CMD_TELEMETRY_CONFIG_OUT_SET_LEN 0
+
+/* MC_CMD_TELEMETRY_CONFIG_IN_GET msgrequest: This command reads out the
+ * current values of config parameters necessary for tcp-latency measurements.
+ * See MC_CMD_TELEMETRY_SET_CONFIG for more information about the configuration
+ * parameters.
+ */
+#define MC_CMD_TELEMETRY_CONFIG_IN_GET_LEN 4
+/* Telemetry configuration sub-operation code. Must be set to
+ * MC_CMD_TELEMETRY_CONFIG_OP_GET.
+ */
+#define MC_CMD_TELEMETRY_CONFIG_IN_GET_OP_OFST 0
+#define MC_CMD_TELEMETRY_CONFIG_IN_GET_OP_LEN 4
+
+/* MC_CMD_TELEMETRY_CONFIG_OUT_GET msgresponse */
+#define MC_CMD_TELEMETRY_CONFIG_OUT_GET_LEN 36
+/* struct of type TELEMETRY_CONFIG. */
+#define MC_CMD_TELEMETRY_CONFIG_OUT_GET_PARAMETERS_OFST 0
+#define MC_CMD_TELEMETRY_CONFIG_OUT_GET_PARAMETERS_LEN 36
+
+/* EF100_MCDI_EVENT structuredef: The structure of an MCDI_EVENT on EF100
+ * platforms
+ */
+#define EF100_MCDI_EVENT_LEN 8
+/* Defined by QMDA. Will be 1 for all SFC events */
+#define EF100_MCDI_EVENT_EV_DATA_FORMAT_LBN 0
+#define EF100_MCDI_EVENT_EV_DATA_FORMAT_WIDTH 1
+/* Defined by QMDA. The phase bit, changes each time round the event ring */
+#define EF100_MCDI_EVENT_EV_EVQ_PHASE_LBN 1
+#define EF100_MCDI_EVENT_EV_EVQ_PHASE_WIDTH 1
+/* Defined by QDMA. Meaning unclear. */
+#define EF100_MCDI_EVENT_EV_ERROR_LBN 2
+#define EF100_MCDI_EVENT_EV_ERROR_WIDTH 1
+/* Defined by QMDA. Indicates a descriptor was consumed. */
+#define EF100_MCDI_EVENT_EV_DESC_USED_LBN 3
+#define EF100_MCDI_EVENT_EV_DESC_USED_WIDTH 1
+/* Indicates the top-level type of the event. Event types are as documented in
+ * SF-119689-TC and defined in events.yml. For MCDI events it's always
+ * EF100_EV_MCDI. HW can generate other event type for its events.
+ */
+#define EF100_MCDI_EVENT_EV_TYPE_LBN 4
+#define EF100_MCDI_EVENT_EV_TYPE_WIDTH 4
+#define EF100_MCDI_EVENT_CODE_OFST 1
+#define EF100_MCDI_EVENT_CODE_LEN 1
+/* Enum values, see field(s): */
+/* MCDI_EVENT/CODE */
+#define EF100_MCDI_EVENT_CODE_LBN 8
+#define EF100_MCDI_EVENT_CODE_WIDTH 8
+/* Data associated with PTP events which doesn't fit into the main DATA field
+ */
+#define EF100_MCDI_EVENT_PTP_DATA_OFST 2
+#define EF100_MCDI_EVENT_PTP_DATA_LEN 1
+#define EF100_MCDI_EVENT_SRC_LBN 0
+#define EF100_MCDI_EVENT_SRC_WIDTH 8
+#define EF100_MCDI_EVENT_PTP_DATA_LBN 16
+#define EF100_MCDI_EVENT_PTP_DATA_WIDTH 8
+/* Set if this message continues into another event */
+#define EF100_MCDI_EVENT_CONT_LBN 24
+#define EF100_MCDI_EVENT_CONT_WIDTH 1
+#define EF100_MCDI_EVENT_LEVEL_LBN 25
+#define EF100_MCDI_EVENT_LEVEL_WIDTH 3
+/* Enum values, see field(s): */
+/* MCDI_EVENT/LEVEL */
+/* Data associated with this event. Format depends on the event code. */
+#define EF100_MCDI_EVENT_DATA_OFST 4
+#define EF100_MCDI_EVENT_DATA_LEN 4
+#define EF100_MCDI_EVENT_DATA_LBN 32
+#define EF100_MCDI_EVENT_DATA_WIDTH 32
+