diff mbox

Factor ODP typedefs into a common include file

Message ID 1415813566-26526-2-git-send-email-bill.fischofer@linaro.org
State New
Headers show

Commit Message

Bill Fischofer Nov. 12, 2014, 5:32 p.m. UTC
Signed-off-by: Bill Fischofer <bill.fischofer@linaro.org>
---
 platform/linux-generic/Makefile.am                 |  1 +
 platform/linux-generic/include/api/odp_buffer.h    |  9 +---
 .../linux-generic/include/api/odp_buffer_pool.h    |  5 +-
 platform/linux-generic/include/api/odp_packet.h    | 30 -----------
 platform/linux-generic/include/api/odp_packet_io.h | 12 +----
 platform/linux-generic/include/api/odp_typedefs.h  | 63 ++++++++++++++++++++++
 6 files changed, 67 insertions(+), 53 deletions(-)
 create mode 100644 platform/linux-generic/include/api/odp_typedefs.h

Comments

Maxim Uvarov Nov. 12, 2014, 11:16 p.m. UTC | #1
I think it will be hard to follow. If I you reuse for example pool from 
linux-generic and not reuse pktio. Then you most probably will
have reference to linux-generic file. And you will not want to have this 
typedefs redefined. I prefer to have these typedefs in
corresponding header as it is now.

Maxim.

On 11/12/2014 08:32 PM, Bill Fischofer wrote:
> Signed-off-by: Bill Fischofer <bill.fischofer@linaro.org>
> ---
>   platform/linux-generic/Makefile.am                 |  1 +
>   platform/linux-generic/include/api/odp_buffer.h    |  9 +---
>   .../linux-generic/include/api/odp_buffer_pool.h    |  5 +-
>   platform/linux-generic/include/api/odp_packet.h    | 30 -----------
>   platform/linux-generic/include/api/odp_packet_io.h | 12 +----
>   platform/linux-generic/include/api/odp_typedefs.h  | 63 ++++++++++++++++++++++
>   6 files changed, 67 insertions(+), 53 deletions(-)
>   create mode 100644 platform/linux-generic/include/api/odp_typedefs.h
>
> diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am
> index 0153a22..cb3cfc4 100644
> --- a/platform/linux-generic/Makefile.am
> +++ b/platform/linux-generic/Makefile.am
> @@ -36,6 +36,7 @@ include_HEADERS = \
>   		  $(top_srcdir)/platform/linux-generic/include/api/odp_ticketlock.h \
>   		  $(top_srcdir)/platform/linux-generic/include/api/odp_time.h \
>   		  $(top_srcdir)/platform/linux-generic/include/api/odp_timer.h \
> +		  $(top_srcdir)/platform/linux-generic/include/api/odp_typedefs.h \
>   		  $(top_srcdir)/platform/linux-generic/include/api/odp_version.h
>   
>   subdirheadersdir = $(includedir)
> diff --git a/platform/linux-generic/include/api/odp_buffer.h b/platform/linux-generic/include/api/odp_buffer.h
> index 289e0eb..7e7c95e 100644
> --- a/platform/linux-generic/include/api/odp_buffer.h
> +++ b/platform/linux-generic/include/api/odp_buffer.h
> @@ -20,20 +20,13 @@ extern "C" {
>   
>   
>   #include <odp_std_types.h>
> -
> +#include <odp_typedefs.h>
>   
>   /** @defgroup odp_buffer ODP BUFFER
>    *  Operations on a buffer.
>    *  @{
>    */
>   
> -/**
> - * ODP buffer
> - */
> -typedef uint32_t odp_buffer_t;
> -
> -#define ODP_BUFFER_INVALID (0xffffffff) /**< Invalid buffer */
> -
>   
>   /**
>    * Buffer start address
> diff --git a/platform/linux-generic/include/api/odp_buffer_pool.h b/platform/linux-generic/include/api/odp_buffer_pool.h
> index d04abf0..170cd32 100644
> --- a/platform/linux-generic/include/api/odp_buffer_pool.h
> +++ b/platform/linux-generic/include/api/odp_buffer_pool.h
> @@ -21,6 +21,7 @@ extern "C" {
>   
>   
>   #include <odp_std_types.h>
> +#include <odp_typedefs.h>
>   #include <odp_buffer.h>
>   
>   /** @addtogroup odp_buffer
> @@ -34,10 +35,6 @@ extern "C" {
>   /** Invalid buffer pool */
>   #define ODP_BUFFER_POOL_INVALID   0
>   
> -/** ODP buffer pool */
> -typedef uint32_t odp_buffer_pool_t;
> -
> -
>   /**
>    * Create a buffer pool
>    *
> diff --git a/platform/linux-generic/include/api/odp_packet.h b/platform/linux-generic/include/api/odp_packet.h
> index 688e047..5298fa0 100644
> --- a/platform/linux-generic/include/api/odp_packet.h
> +++ b/platform/linux-generic/include/api/odp_packet.h
> @@ -25,36 +25,6 @@ extern "C" {
>    *  @{
>    */
>   
> -/**
> - * ODP packet descriptor
> - */
> -typedef odp_buffer_t odp_packet_t;
> -
> -/** Invalid packet */
> -#define ODP_PACKET_INVALID ODP_BUFFER_INVALID
> -
> -/** Invalid offset */
> -#define ODP_PACKET_OFFSET_INVALID ((uint32_t)-1)
> -
> -
> -/**
> - * ODP packet segment handle
> - */
> -typedef int odp_packet_seg_t;
> -
> -/** Invalid packet segment */
> -#define ODP_PACKET_SEG_INVALID -1
> -
> -/**
> - * ODP packet segment info
> - */
> -typedef struct odp_packet_seg_info_t {
> -	void   *addr;      /**< Segment start address */
> -	size_t  size;      /**< Segment maximum data size */
> -	void   *data;      /**< Segment data address */
> -	size_t  data_len;  /**< Segment data length */
> -} odp_packet_seg_info_t;
> -
>   
>   /**
>    * Initialize the packet
> diff --git a/platform/linux-generic/include/api/odp_packet_io.h b/platform/linux-generic/include/api/odp_packet_io.h
> index 360636d..4d4e636 100644
> --- a/platform/linux-generic/include/api/odp_packet_io.h
> +++ b/platform/linux-generic/include/api/odp_packet_io.h
> @@ -19,6 +19,7 @@ extern "C" {
>   #endif
>   
>   #include <odp_std_types.h>
> +#include <odp_typedefs.h>
>   #include <odp_buffer_pool.h>
>   #include <odp_packet.h>
>   #include <odp_queue.h>
> @@ -28,17 +29,6 @@ extern "C" {
>    *  @{
>    */
>   
> -/** ODP packet IO handle */
> -typedef uint32_t odp_pktio_t;
> -
> -/** Invalid packet IO handle */
> -#define ODP_PKTIO_INVALID 0
> -
> -/**
> - * odp_pktio_t value to indicate any port
> - */
> -#define ODP_PKTIO_ANY ((odp_pktio_t)~0)
> -
>   /**
>    * Open an ODP packet IO instance
>    *
> diff --git a/platform/linux-generic/include/api/odp_typedefs.h b/platform/linux-generic/include/api/odp_typedefs.h
> new file mode 100644
> index 0000000..af74980
> --- /dev/null
> +++ b/platform/linux-generic/include/api/odp_typedefs.h
> @@ -0,0 +1,63 @@
> +/* Copyright (c) 2014, Linaro Limited
> + * All rights reserved.
> + *
> + * SPDX-License-Identifier:     BSD-3-Clause
> + */
> +
> +
> +/**
> + * @file
> + *
> + * @par ODP implementation typedefs
> + * This file contains all of the implementation-defined typedefs for
> + * ODP abstract types.  Having this in one file means that other ODP
> + * API files are implementation-independent and avoids circular
> + * dependencies for files that refer to types managed by other
> + * components.
> + */
> +
> +#ifndef ODP_TYPEDEFS_H_
> +#define ODP_TYPEDEFS_H_
> +
> +/** ODP Buffer pool */
> +typedef uint32_t odp_buffer_pool_t;
> +
> +/** ODP buffer */
> +typedef uint32_t odp_buffer_t;
> +
> +/** Invalid buffer */
> +#define ODP_BUFFER_INVALID (0xffffffff) /**< Invalid buffer */
> +
> +/** ODP packet */
> +typedef odp_buffer_t odp_packet_t;
> +
> +/** Invalid packet */
> +#define ODP_PACKET_INVALID ODP_BUFFER_INVALID
> +
> +/** Invalid offset */
> +#define ODP_PACKET_OFFSET_INVALID ((uint32_t)-1)
> +
> +/** ODP packet segment */
> +typedef int odp_packet_seg_t;
> +
> +/** Invalid packet segment */
> +#define ODP_PACKET_SEG_INVALID -1
> +
> +/** ODP packet segment info */
> +typedef struct odp_packet_seg_info_t {
> +	void   *addr;      /**< Segment start address */
> +	size_t  size;      /**< Segment maximum data size */
> +	void   *data;      /**< Segment data address */
> +	size_t  data_len;  /**< Segment data length */
> +} odp_packet_seg_info_t;
> +
> +/** ODP packet IO handle */
> +typedef uint32_t odp_pktio_t;
> +
> +/** Invalid packet IO handle */
> +#define ODP_PKTIO_INVALID 0
> +
> +/** odp_pktio_t value to indicate any port */
> +#define ODP_PKTIO_ANY ((odp_pktio_t)~0)
> +
> +#endif
Bill Fischofer Nov. 12, 2014, 11:31 p.m. UTC | #2
The idea is that each implementation defines their own odp_typedefs.h which
contain the typedefs for that platform.  So you can reuse the linux-generic
API files without having to modify them since they just reference the
typedefs but don't define them.  Every implementation will have to have
their own version of odp_typedefs.h to specify what an odp_buffer_t, etc.
is for that implementation.

This also eliminates the circular dependency in typdef definitions we
currently have in the buffer/packet/pktio family.  In the latest patch I
posted it's impossible to order the #includes to get a compilable system
without factoring these out into a common header.

Bill



On Wed, Nov 12, 2014 at 5:16 PM, Maxim Uvarov <maxim.uvarov@linaro.org>
wrote:

> I think it will be hard to follow. If I you reuse for example pool from
> linux-generic and not reuse pktio. Then you most probably will
> have reference to linux-generic file. And you will not want to have this
> typedefs redefined. I prefer to have these typedefs in
> corresponding header as it is now.
>
> Maxim.
>
>
> On 11/12/2014 08:32 PM, Bill Fischofer wrote:
>
>> Signed-off-by: Bill Fischofer <bill.fischofer@linaro.org>
>> ---
>>   platform/linux-generic/Makefile.am                 |  1 +
>>   platform/linux-generic/include/api/odp_buffer.h    |  9 +---
>>   .../linux-generic/include/api/odp_buffer_pool.h    |  5 +-
>>   platform/linux-generic/include/api/odp_packet.h    | 30 -----------
>>   platform/linux-generic/include/api/odp_packet_io.h | 12 +----
>>   platform/linux-generic/include/api/odp_typedefs.h  | 63
>> ++++++++++++++++++++++
>>   6 files changed, 67 insertions(+), 53 deletions(-)
>>   create mode 100644 platform/linux-generic/include/api/odp_typedefs.h
>>
>> diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/
>> Makefile.am
>> index 0153a22..cb3cfc4 100644
>> --- a/platform/linux-generic/Makefile.am
>> +++ b/platform/linux-generic/Makefile.am
>> @@ -36,6 +36,7 @@ include_HEADERS = \
>>                   $(top_srcdir)/platform/linux-generic/include/api/odp_ticketlock.h
>> \
>>                   $(top_srcdir)/platform/linux-generic/include/api/odp_time.h
>> \
>>                   $(top_srcdir)/platform/linux-
>> generic/include/api/odp_timer.h \
>> +                 $(top_srcdir)/platform/linux-generic/include/api/odp_typedefs.h
>> \
>>                   $(top_srcdir)/platform/linux-generic/include/api/odp_
>> version.h
>>     subdirheadersdir = $(includedir)
>> diff --git a/platform/linux-generic/include/api/odp_buffer.h
>> b/platform/linux-generic/include/api/odp_buffer.h
>> index 289e0eb..7e7c95e 100644
>> --- a/platform/linux-generic/include/api/odp_buffer.h
>> +++ b/platform/linux-generic/include/api/odp_buffer.h
>> @@ -20,20 +20,13 @@ extern "C" {
>>       #include <odp_std_types.h>
>> -
>> +#include <odp_typedefs.h>
>>     /** @defgroup odp_buffer ODP BUFFER
>>    *  Operations on a buffer.
>>    *  @{
>>    */
>>   -/**
>> - * ODP buffer
>> - */
>> -typedef uint32_t odp_buffer_t;
>> -
>> -#define ODP_BUFFER_INVALID (0xffffffff) /**< Invalid buffer */
>> -
>>     /**
>>    * Buffer start address
>> diff --git a/platform/linux-generic/include/api/odp_buffer_pool.h
>> b/platform/linux-generic/include/api/odp_buffer_pool.h
>> index d04abf0..170cd32 100644
>> --- a/platform/linux-generic/include/api/odp_buffer_pool.h
>> +++ b/platform/linux-generic/include/api/odp_buffer_pool.h
>> @@ -21,6 +21,7 @@ extern "C" {
>>       #include <odp_std_types.h>
>> +#include <odp_typedefs.h>
>>   #include <odp_buffer.h>
>>     /** @addtogroup odp_buffer
>> @@ -34,10 +35,6 @@ extern "C" {
>>   /** Invalid buffer pool */
>>   #define ODP_BUFFER_POOL_INVALID   0
>>   -/** ODP buffer pool */
>> -typedef uint32_t odp_buffer_pool_t;
>> -
>> -
>>   /**
>>    * Create a buffer pool
>>    *
>> diff --git a/platform/linux-generic/include/api/odp_packet.h
>> b/platform/linux-generic/include/api/odp_packet.h
>> index 688e047..5298fa0 100644
>> --- a/platform/linux-generic/include/api/odp_packet.h
>> +++ b/platform/linux-generic/include/api/odp_packet.h
>> @@ -25,36 +25,6 @@ extern "C" {
>>    *  @{
>>    */
>>   -/**
>> - * ODP packet descriptor
>> - */
>> -typedef odp_buffer_t odp_packet_t;
>> -
>> -/** Invalid packet */
>> -#define ODP_PACKET_INVALID ODP_BUFFER_INVALID
>> -
>> -/** Invalid offset */
>> -#define ODP_PACKET_OFFSET_INVALID ((uint32_t)-1)
>> -
>> -
>> -/**
>> - * ODP packet segment handle
>> - */
>> -typedef int odp_packet_seg_t;
>> -
>> -/** Invalid packet segment */
>> -#define ODP_PACKET_SEG_INVALID -1
>> -
>> -/**
>> - * ODP packet segment info
>> - */
>> -typedef struct odp_packet_seg_info_t {
>> -       void   *addr;      /**< Segment start address */
>> -       size_t  size;      /**< Segment maximum data size */
>> -       void   *data;      /**< Segment data address */
>> -       size_t  data_len;  /**< Segment data length */
>> -} odp_packet_seg_info_t;
>> -
>>     /**
>>    * Initialize the packet
>> diff --git a/platform/linux-generic/include/api/odp_packet_io.h
>> b/platform/linux-generic/include/api/odp_packet_io.h
>> index 360636d..4d4e636 100644
>> --- a/platform/linux-generic/include/api/odp_packet_io.h
>> +++ b/platform/linux-generic/include/api/odp_packet_io.h
>> @@ -19,6 +19,7 @@ extern "C" {
>>   #endif
>>     #include <odp_std_types.h>
>> +#include <odp_typedefs.h>
>>   #include <odp_buffer_pool.h>
>>   #include <odp_packet.h>
>>   #include <odp_queue.h>
>> @@ -28,17 +29,6 @@ extern "C" {
>>    *  @{
>>    */
>>   -/** ODP packet IO handle */
>> -typedef uint32_t odp_pktio_t;
>> -
>> -/** Invalid packet IO handle */
>> -#define ODP_PKTIO_INVALID 0
>> -
>> -/**
>> - * odp_pktio_t value to indicate any port
>> - */
>> -#define ODP_PKTIO_ANY ((odp_pktio_t)~0)
>> -
>>   /**
>>    * Open an ODP packet IO instance
>>    *
>> diff --git a/platform/linux-generic/include/api/odp_typedefs.h
>> b/platform/linux-generic/include/api/odp_typedefs.h
>> new file mode 100644
>> index 0000000..af74980
>> --- /dev/null
>> +++ b/platform/linux-generic/include/api/odp_typedefs.h
>> @@ -0,0 +1,63 @@
>> +/* Copyright (c) 2014, Linaro Limited
>> + * All rights reserved.
>> + *
>> + * SPDX-License-Identifier:     BSD-3-Clause
>> + */
>> +
>> +
>> +/**
>> + * @file
>> + *
>> + * @par ODP implementation typedefs
>> + * This file contains all of the implementation-defined typedefs for
>> + * ODP abstract types.  Having this in one file means that other ODP
>> + * API files are implementation-independent and avoids circular
>> + * dependencies for files that refer to types managed by other
>> + * components.
>> + */
>> +
>> +#ifndef ODP_TYPEDEFS_H_
>> +#define ODP_TYPEDEFS_H_
>> +
>> +/** ODP Buffer pool */
>> +typedef uint32_t odp_buffer_pool_t;
>> +
>> +/** ODP buffer */
>> +typedef uint32_t odp_buffer_t;
>> +
>> +/** Invalid buffer */
>> +#define ODP_BUFFER_INVALID (0xffffffff) /**< Invalid buffer */
>> +
>> +/** ODP packet */
>> +typedef odp_buffer_t odp_packet_t;
>> +
>> +/** Invalid packet */
>> +#define ODP_PACKET_INVALID ODP_BUFFER_INVALID
>> +
>> +/** Invalid offset */
>> +#define ODP_PACKET_OFFSET_INVALID ((uint32_t)-1)
>> +
>> +/** ODP packet segment */
>> +typedef int odp_packet_seg_t;
>> +
>> +/** Invalid packet segment */
>> +#define ODP_PACKET_SEG_INVALID -1
>> +
>> +/** ODP packet segment info */
>> +typedef struct odp_packet_seg_info_t {
>> +       void   *addr;      /**< Segment start address */
>> +       size_t  size;      /**< Segment maximum data size */
>> +       void   *data;      /**< Segment data address */
>> +       size_t  data_len;  /**< Segment data length */
>> +} odp_packet_seg_info_t;
>> +
>> +/** ODP packet IO handle */
>> +typedef uint32_t odp_pktio_t;
>> +
>> +/** Invalid packet IO handle */
>> +#define ODP_PKTIO_INVALID 0
>> +
>> +/** odp_pktio_t value to indicate any port */
>> +#define ODP_PKTIO_ANY ((odp_pktio_t)~0)
>> +
>> +#endif
>>
>
>
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/lng-odp
>
Anders Roxell Nov. 13, 2014, 12:34 p.m. UTC | #3
Maybe write the commit message something like this:
types: factor platform definitions into a common file

Elaborate more why we want this in the commit message itself

On 2014-11-12 11:32, Bill Fischofer wrote:
> Signed-off-by: Bill Fischofer <bill.fischofer@linaro.org>
> ---
>  platform/linux-generic/Makefile.am                 |  1 +
>  platform/linux-generic/include/api/odp_buffer.h    |  9 +---
>  .../linux-generic/include/api/odp_buffer_pool.h    |  5 +-
>  platform/linux-generic/include/api/odp_packet.h    | 30 -----------
>  platform/linux-generic/include/api/odp_packet_io.h | 12 +----
>  platform/linux-generic/include/api/odp_typedefs.h  | 63 ++++++++++++++++++++++

should be odp_types.h

>  6 files changed, 67 insertions(+), 53 deletions(-)
>  create mode 100644 platform/linux-generic/include/api/odp_typedefs.h
> 

[...]

> diff --git a/platform/linux-generic/include/api/odp_typedefs.h b/platform/linux-generic/include/api/odp_typedefs.h
> new file mode 100644
> index 0000000..af74980
> --- /dev/null
> +++ b/platform/linux-generic/include/api/odp_typedefs.h
> @@ -0,0 +1,63 @@
> +/* Copyright (c) 2014, Linaro Limited
> + * All rights reserved.
> + *
> + * SPDX-License-Identifier:     BSD-3-Clause
> + */
> +
> +
> +/**
> + * @file
> + *
> + * @par ODP implementation typedefs

Wrong format, should be like this:

/**
  * @file
  * Short description
  * Longer description
  */

Short description should say "ODP implementation types"
because there are more than only typedefs in there.

> + * This file contains all of the implementation-defined typedefs for

typedefs to types

> + * ODP abstract types.  Having this in one file means that other ODP

types to definitions

Remove one space after the full stop.

> + * API files are implementation-independent and avoids circular
> + * dependencies for files that refer to types managed by other
> + * components.

Why rap at 68 chars and not 80?

> + */
> +
> +#ifndef ODP_TYPEDEFS_H_
> +#define ODP_TYPEDEFS_H_

need to specify some module for this as well maybe ODP PLATFORM SPECIFIC
or should they go into ODP SYSTEM?


Cheers,
Anders
Maxim Uvarov Nov. 13, 2014, 1:35 p.m. UTC | #4
On 11/12/2014 08:32 PM, Bill Fischofer wrote:
> +/** Invalid buffer */
> +#define ODP_BUFFER_INVALID (0xffffffff) /**< Invalid buffer */
> +
Please fix above comment.

Maxim.
Bill Fischofer Nov. 13, 2014, 4:19 p.m. UTC | #5
The code is copied verbatim from existing .h files that are already in the
repo.

On Thu, Nov 13, 2014 at 7:35 AM, Maxim Uvarov <maxim.uvarov@linaro.org>
wrote:

> On 11/12/2014 08:32 PM, Bill Fischofer wrote:
>
>> +/** Invalid buffer */
>> +#define ODP_BUFFER_INVALID (0xffffffff) /**< Invalid buffer */
>> +
>>
> Please fix above comment.
>
> Maxim.
>
>
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/lng-odp
>
diff mbox

Patch

diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am
index 0153a22..cb3cfc4 100644
--- a/platform/linux-generic/Makefile.am
+++ b/platform/linux-generic/Makefile.am
@@ -36,6 +36,7 @@  include_HEADERS = \
 		  $(top_srcdir)/platform/linux-generic/include/api/odp_ticketlock.h \
 		  $(top_srcdir)/platform/linux-generic/include/api/odp_time.h \
 		  $(top_srcdir)/platform/linux-generic/include/api/odp_timer.h \
+		  $(top_srcdir)/platform/linux-generic/include/api/odp_typedefs.h \
 		  $(top_srcdir)/platform/linux-generic/include/api/odp_version.h
 
 subdirheadersdir = $(includedir)
diff --git a/platform/linux-generic/include/api/odp_buffer.h b/platform/linux-generic/include/api/odp_buffer.h
index 289e0eb..7e7c95e 100644
--- a/platform/linux-generic/include/api/odp_buffer.h
+++ b/platform/linux-generic/include/api/odp_buffer.h
@@ -20,20 +20,13 @@  extern "C" {
 
 
 #include <odp_std_types.h>
-
+#include <odp_typedefs.h>
 
 /** @defgroup odp_buffer ODP BUFFER
  *  Operations on a buffer.
  *  @{
  */
 
-/**
- * ODP buffer
- */
-typedef uint32_t odp_buffer_t;
-
-#define ODP_BUFFER_INVALID (0xffffffff) /**< Invalid buffer */
-
 
 /**
  * Buffer start address
diff --git a/platform/linux-generic/include/api/odp_buffer_pool.h b/platform/linux-generic/include/api/odp_buffer_pool.h
index d04abf0..170cd32 100644
--- a/platform/linux-generic/include/api/odp_buffer_pool.h
+++ b/platform/linux-generic/include/api/odp_buffer_pool.h
@@ -21,6 +21,7 @@  extern "C" {
 
 
 #include <odp_std_types.h>
+#include <odp_typedefs.h>
 #include <odp_buffer.h>
 
 /** @addtogroup odp_buffer
@@ -34,10 +35,6 @@  extern "C" {
 /** Invalid buffer pool */
 #define ODP_BUFFER_POOL_INVALID   0
 
-/** ODP buffer pool */
-typedef uint32_t odp_buffer_pool_t;
-
-
 /**
  * Create a buffer pool
  *
diff --git a/platform/linux-generic/include/api/odp_packet.h b/platform/linux-generic/include/api/odp_packet.h
index 688e047..5298fa0 100644
--- a/platform/linux-generic/include/api/odp_packet.h
+++ b/platform/linux-generic/include/api/odp_packet.h
@@ -25,36 +25,6 @@  extern "C" {
  *  @{
  */
 
-/**
- * ODP packet descriptor
- */
-typedef odp_buffer_t odp_packet_t;
-
-/** Invalid packet */
-#define ODP_PACKET_INVALID ODP_BUFFER_INVALID
-
-/** Invalid offset */
-#define ODP_PACKET_OFFSET_INVALID ((uint32_t)-1)
-
-
-/**
- * ODP packet segment handle
- */
-typedef int odp_packet_seg_t;
-
-/** Invalid packet segment */
-#define ODP_PACKET_SEG_INVALID -1
-
-/**
- * ODP packet segment info
- */
-typedef struct odp_packet_seg_info_t {
-	void   *addr;      /**< Segment start address */
-	size_t  size;      /**< Segment maximum data size */
-	void   *data;      /**< Segment data address */
-	size_t  data_len;  /**< Segment data length */
-} odp_packet_seg_info_t;
-
 
 /**
  * Initialize the packet
diff --git a/platform/linux-generic/include/api/odp_packet_io.h b/platform/linux-generic/include/api/odp_packet_io.h
index 360636d..4d4e636 100644
--- a/platform/linux-generic/include/api/odp_packet_io.h
+++ b/platform/linux-generic/include/api/odp_packet_io.h
@@ -19,6 +19,7 @@  extern "C" {
 #endif
 
 #include <odp_std_types.h>
+#include <odp_typedefs.h>
 #include <odp_buffer_pool.h>
 #include <odp_packet.h>
 #include <odp_queue.h>
@@ -28,17 +29,6 @@  extern "C" {
  *  @{
  */
 
-/** ODP packet IO handle */
-typedef uint32_t odp_pktio_t;
-
-/** Invalid packet IO handle */
-#define ODP_PKTIO_INVALID 0
-
-/**
- * odp_pktio_t value to indicate any port
- */
-#define ODP_PKTIO_ANY ((odp_pktio_t)~0)
-
 /**
  * Open an ODP packet IO instance
  *
diff --git a/platform/linux-generic/include/api/odp_typedefs.h b/platform/linux-generic/include/api/odp_typedefs.h
new file mode 100644
index 0000000..af74980
--- /dev/null
+++ b/platform/linux-generic/include/api/odp_typedefs.h
@@ -0,0 +1,63 @@ 
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+
+/**
+ * @file
+ *
+ * @par ODP implementation typedefs
+ * This file contains all of the implementation-defined typedefs for
+ * ODP abstract types.  Having this in one file means that other ODP
+ * API files are implementation-independent and avoids circular
+ * dependencies for files that refer to types managed by other
+ * components.
+ */
+
+#ifndef ODP_TYPEDEFS_H_
+#define ODP_TYPEDEFS_H_
+
+/** ODP Buffer pool */
+typedef uint32_t odp_buffer_pool_t;
+
+/** ODP buffer */
+typedef uint32_t odp_buffer_t;
+
+/** Invalid buffer */
+#define ODP_BUFFER_INVALID (0xffffffff) /**< Invalid buffer */
+
+/** ODP packet */
+typedef odp_buffer_t odp_packet_t;
+
+/** Invalid packet */
+#define ODP_PACKET_INVALID ODP_BUFFER_INVALID
+
+/** Invalid offset */
+#define ODP_PACKET_OFFSET_INVALID ((uint32_t)-1)
+
+/** ODP packet segment */
+typedef int odp_packet_seg_t;
+
+/** Invalid packet segment */
+#define ODP_PACKET_SEG_INVALID -1
+
+/** ODP packet segment info */
+typedef struct odp_packet_seg_info_t {
+	void   *addr;      /**< Segment start address */
+	size_t  size;      /**< Segment maximum data size */
+	void   *data;      /**< Segment data address */
+	size_t  data_len;  /**< Segment data length */
+} odp_packet_seg_info_t;
+
+/** ODP packet IO handle */
+typedef uint32_t odp_pktio_t;
+
+/** Invalid packet IO handle */
+#define ODP_PKTIO_INVALID 0
+
+/** odp_pktio_t value to indicate any port */
+#define ODP_PKTIO_ANY ((odp_pktio_t)~0)
+
+#endif