@@ -28,7 +28,7 @@ typedef _odp_abi_packet_seg_t *odp_packet_seg_t;
#define ODP_PACKET_INVALID ((odp_packet_t)0xffffffff)
#define ODP_PACKET_SEG_INVALID ((odp_packet_seg_t)0xffffffff)
-#define ODP_PACKET_OFFSET_INVALID (0x0fffffff)
+#define ODP_PACKET_OFFSET_INVALID 0xffff
typedef enum {
ODP_PACKET_GREEN = 0,
@@ -56,13 +56,13 @@ static inline uint32_t _odp_packet_len(odp_packet_t pkt)
/** @internal Inline function @param pkt @return */
static inline uint32_t _odp_packet_headroom(odp_packet_t pkt)
{
- return _odp_pkt_get(pkt, uint32_t, headroom);
+ return _odp_pkt_get(pkt, uint16_t, headroom);
}
/** @internal Inline function @param pkt @return */
static inline uint32_t _odp_packet_tailroom(odp_packet_t pkt)
{
- return _odp_pkt_get(pkt, uint32_t, tailroom);
+ return _odp_pkt_get(pkt, uint16_t, tailroom);
}
/** @internal Inline function @param pkt @return */
@@ -36,7 +36,7 @@ typedef ODP_HANDLE_T(odp_packet_t);
#define ODP_PACKET_INVALID _odp_cast_scalar(odp_packet_t, 0)
-#define ODP_PACKET_OFFSET_INVALID (0x0fffffff)
+#define ODP_PACKET_OFFSET_INVALID 0xffff
typedef uint8_t odp_packet_seg_t;
@@ -65,13 +65,10 @@ struct odp_buffer_hdr_t {
/* Initial buffer data pointer */
uint8_t *base_data;
- /* Reference count */
- odp_atomic_u32_t ref_cnt;
-
- /* Event type. Maybe different than pool type (crypto compl event) */
- int8_t event_type;
+ /* Pool pointer */
+ void *pool_ptr;
- /* --- 37 bytes --- */
+ /* --- 40 bytes --- */
/* Segments */
seg_entry_t seg[CONFIG_PACKET_MAX_SEGS];
@@ -95,8 +92,11 @@ struct odp_buffer_hdr_t {
const void *buf_cctx; /* const alias for ctx */
};
- /* Pool pointer */
- void *pool_ptr;
+ /* Reference count */
+ odp_atomic_u32_t ref_cnt;
+
+ /* Event type. Maybe different than pool type (crypto compl event) */
+ int8_t event_type;
/* Initial buffer tail pointer */
uint8_t *buf_end;
@@ -88,9 +88,14 @@ typedef struct {
error_flags_t error_flags;
output_flags_t output_flags;
- uint32_t l2_offset; /**< offset to L2 hdr, e.g. Eth */
- uint32_t l3_offset; /**< offset to L3 hdr, e.g. IPv4, IPv6 */
- uint32_t l4_offset; /**< offset to L4 hdr (TCP, UDP, SCTP, also ICMP) */
+ /* offset to L2 hdr, e.g. Eth */
+ uint16_t l2_offset;
+
+ /* offset to L3 hdr, e.g. IPv4, IPv6 */
+ uint16_t l3_offset;
+
+ /* offset to L4 hdr (TCP, UDP, SCTP, also ICMP) */
+ uint16_t l4_offset;
} packet_parser_t;
/* Packet extra data length */
@@ -116,14 +121,14 @@ typedef struct {
packet_parser_t p;
- uint32_t frame_len;
-
odp_pktio_t input;
- uint32_t headroom;
- uint32_t tailroom;
+ uint32_t frame_len;
uint32_t shared_len;
+ uint16_t headroom;
+ uint16_t tailroom;
+
/*
* Members below are not initialized by packet_init()
*/
@@ -41,6 +41,9 @@ ODP_STATIC_ASSERT(CONFIG_POOL_CACHE_SIZE > (2 * CACHE_BURST),
ODP_STATIC_ASSERT(CONFIG_PACKET_SEG_LEN_MIN >= 256,
"ODP Segment size must be a minimum of 256 bytes");
+ODP_STATIC_ASSERT(CONFIG_PACKET_SEG_SIZE < 0xffff,
+ "Segment size must be less than 64k (16 bit offsets)");
+
/* Thread local variables */
typedef struct pool_local_t {
pool_cache_t *cache[ODP_CONFIG_POOLS];