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
