99a2dd955f
There is no reason for the DPDK libraries to all have 'librte_' prefix on the directory names. This prefix makes the directory names longer and also makes it awkward to add features referring to individual libraries in the build - should the lib names be specified with or without the prefix. Therefore, we can just remove the library prefix and use the library's unique name as the directory name, i.e. 'eal' rather than 'librte_eal' Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
193 lines
4.8 KiB
C
193 lines
4.8 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright 2020 Mellanox Technologies, Ltd
|
|
*/
|
|
|
|
#ifndef _RTE_ECPRI_H_
|
|
#define _RTE_ECPRI_H_
|
|
|
|
/**
|
|
* @file
|
|
*
|
|
* eCPRI headers definition.
|
|
*
|
|
* eCPRI (Common Public Radio Interface) is used in internal interfaces
|
|
* of radio base station in a 5G infrastructure.
|
|
*/
|
|
|
|
#include <stdint.h>
|
|
#include <rte_byteorder.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
* eCPRI Protocol Revision 1.0, 1.1, 1.2, 2.0: 0001b
|
|
* Other values are reserved for future
|
|
*/
|
|
#define RTE_ECPRI_REV_UP_TO_20 1
|
|
|
|
/*
|
|
* eCPRI message types in specifications
|
|
* IWF* types will only be supported from rev.2
|
|
* 12-63: Reserved for future revision
|
|
* 64-255: Vendor Specific
|
|
*/
|
|
#define RTE_ECPRI_MSG_TYPE_IQ_DATA 0
|
|
#define RTE_ECPRI_MSG_TYPE_BIT_SEQ 1
|
|
#define RTE_ECPRI_MSG_TYPE_RTC_CTRL 2
|
|
#define RTE_ECPRI_MSG_TYPE_GEN_DATA 3
|
|
#define RTE_ECPRI_MSG_TYPE_RM_ACC 4
|
|
#define RTE_ECPRI_MSG_TYPE_DLY_MSR 5
|
|
#define RTE_ECPRI_MSG_TYPE_RMT_RST 6
|
|
#define RTE_ECPRI_MSG_TYPE_EVT_IND 7
|
|
#define RTE_ECPRI_MSG_TYPE_IWF_UP 8
|
|
#define RTE_ECPRI_MSG_TYPE_IWF_OPT 9
|
|
#define RTE_ECPRI_MSG_TYPE_IWF_MAP 10
|
|
#define RTE_ECPRI_MSG_TYPE_IWF_DCTRL 11
|
|
|
|
/*
|
|
* Event Type of Message Type #7: Event Indication
|
|
* 0x00: Fault(s) Indication
|
|
* 0x01: Fault(s) Indication Acknowledge
|
|
* 0x02: Notification(s) Indication
|
|
* 0x03: Synchronization Request
|
|
* 0x04: Synchronization Acknowledge
|
|
* 0x05: Synchronization End Indication
|
|
* 0x06...0xFF: Reserved
|
|
*/
|
|
#define RTE_ECPRI_EVT_IND_FAULT_IND 0x00
|
|
#define RTE_ECPRI_EVT_IND_FAULT_ACK 0x01
|
|
#define RTE_ECPRI_EVT_IND_NTFY_IND 0x02
|
|
#define RTE_ECPRI_EVT_IND_SYNC_REQ 0x03
|
|
#define RTE_ECPRI_EVT_IND_SYNC_ACK 0x04
|
|
#define RTE_ECPRI_EVT_IND_SYNC_END 0x05
|
|
|
|
/**
|
|
* eCPRI Common Header
|
|
*/
|
|
RTE_STD_C11
|
|
struct rte_ecpri_common_hdr {
|
|
union {
|
|
rte_be32_t u32; /**< 4B common header in BE */
|
|
struct {
|
|
#if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
|
|
uint32_t size:16; /**< Payload Size */
|
|
uint32_t type:8; /**< Message Type */
|
|
uint32_t c:1; /**< Concatenation Indicator */
|
|
uint32_t res:3; /**< Reserved */
|
|
uint32_t revision:4; /**< Protocol Revision */
|
|
#elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN
|
|
uint32_t revision:4; /**< Protocol Revision */
|
|
uint32_t res:3; /**< Reserved */
|
|
uint32_t c:1; /**< Concatenation Indicator */
|
|
uint32_t type:8; /**< Message Type */
|
|
uint32_t size:16; /**< Payload Size */
|
|
#endif
|
|
};
|
|
};
|
|
};
|
|
|
|
/**
|
|
* eCPRI Message Header of Type #0: IQ Data
|
|
*/
|
|
struct rte_ecpri_msg_iq_data {
|
|
rte_be16_t pc_id; /**< Physical channel ID */
|
|
rte_be16_t seq_id; /**< Sequence ID */
|
|
};
|
|
|
|
/**
|
|
* eCPRI Message Header of Type #1: Bit Sequence
|
|
*/
|
|
struct rte_ecpri_msg_bit_seq {
|
|
rte_be16_t pc_id; /**< Physical channel ID */
|
|
rte_be16_t seq_id; /**< Sequence ID */
|
|
};
|
|
|
|
/**
|
|
* eCPRI Message Header of Type #2: Real-Time Control Data
|
|
*/
|
|
struct rte_ecpri_msg_rtc_ctrl {
|
|
rte_be16_t rtc_id; /**< Real-Time Control Data ID */
|
|
rte_be16_t seq_id; /**< Sequence ID */
|
|
};
|
|
|
|
/**
|
|
* eCPRI Message Header of Type #3: Generic Data Transfer
|
|
*/
|
|
struct rte_ecpri_msg_gen_data {
|
|
rte_be32_t pc_id; /**< Physical channel ID */
|
|
rte_be32_t seq_id; /**< Sequence ID */
|
|
};
|
|
|
|
/**
|
|
* eCPRI Message Header of Type #4: Remote Memory Access
|
|
*/
|
|
RTE_STD_C11
|
|
struct rte_ecpri_msg_rm_access {
|
|
#if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
|
|
uint32_t ele_id:16; /**< Element ID */
|
|
uint32_t rr:4; /**< Req/Resp */
|
|
uint32_t rw:4; /**< Read/Write */
|
|
uint32_t rma_id:8; /**< Remote Memory Access ID */
|
|
#elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN
|
|
uint32_t rma_id:8; /**< Remote Memory Access ID */
|
|
uint32_t rw:4; /**< Read/Write */
|
|
uint32_t rr:4; /**< Req/Resp */
|
|
uint32_t ele_id:16; /**< Element ID */
|
|
#endif
|
|
uint8_t addr[6]; /**< 48-bits address */
|
|
rte_be16_t length; /**< number of bytes */
|
|
};
|
|
|
|
/**
|
|
* eCPRI Message Header of Type #5: One-Way Delay Measurement
|
|
*/
|
|
struct rte_ecpri_msg_delay_measure {
|
|
uint8_t msr_id; /**< Measurement ID */
|
|
uint8_t act_type; /**< Action Type */
|
|
};
|
|
|
|
/**
|
|
* eCPRI Message Header of Type #6: Remote Reset
|
|
*/
|
|
struct rte_ecpri_msg_remote_reset {
|
|
rte_be16_t rst_id; /**< Reset ID */
|
|
uint8_t rst_op; /**< Reset Code Op */
|
|
};
|
|
|
|
/**
|
|
* eCPRI Message Header of Type #7: Event Indication
|
|
*/
|
|
struct rte_ecpri_msg_event_ind {
|
|
uint8_t evt_id; /**< Event ID */
|
|
uint8_t evt_type; /**< Event Type */
|
|
uint8_t seq; /**< Sequence Number */
|
|
uint8_t number; /**< Number of Faults/Notif */
|
|
};
|
|
|
|
/**
|
|
* eCPRI Combined Message Header Format: Common Header + Message Types
|
|
*/
|
|
RTE_STD_C11
|
|
struct rte_ecpri_combined_msg_hdr {
|
|
struct rte_ecpri_common_hdr common;
|
|
union {
|
|
struct rte_ecpri_msg_iq_data type0;
|
|
struct rte_ecpri_msg_bit_seq type1;
|
|
struct rte_ecpri_msg_rtc_ctrl type2;
|
|
struct rte_ecpri_msg_gen_data type3;
|
|
struct rte_ecpri_msg_rm_access type4;
|
|
struct rte_ecpri_msg_delay_measure type5;
|
|
struct rte_ecpri_msg_remote_reset type6;
|
|
struct rte_ecpri_msg_event_ind type7;
|
|
rte_be32_t dummy[3];
|
|
};
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _RTE_ECPRI_H_ */
|