]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - keystone-rtos/netapi.git/blobdiff - ti/runtime/netapi/src/netapi_loc.h
Set qmQueMgmtProxyDataReg to NULL for k1, k2h
[keystone-rtos/netapi.git] / ti / runtime / netapi / src / netapi_loc.h
index 4f0082b84a226215b5b78701bd8c3a65ae7d8a4a..ce7d4f7ee9c2c75a94fa1f13428ae7c2a28c8202 100755 (executable)
-/*****************************************\r
- * file: netapi_loc.h\r
- * purpose:  internal netapi stuff\r
- ****************************************/\r
-\r
-#ifndef __NETAPI_LOC__H\r
-#define __NETAPI_LOC__H\r
-/***************************************\r
-* INTERNAL HANDLE STRUCTURE DEFINITION\r
-****************************************/\r
-\r
-/***********************************************\r
- *  GLOBAL AREA\r
- *   short term:  this is global to process\r
- *         (multi-process not supported)\r
- *   long term:  this structure gets put in shared memory \r
- ***********************************************/\r
-\r
-/* list of global pktio channels that have been created\r
-   (NETCP_TX, RX are intrinsic so won't be here) */\r
-typedef struct PKTIO_ENTRY_tag\r
-{\r
-   char name[PKTIO_MAX_NAME+1];\r
-   Qmss_Queue qn;         // -1 => slot is free\r
-} PKTIO_ENTRY_T;\r
-\r
-/* to hold an IP on an interface */\r
-typedef struct NETCP_INTERFACE_IP_Tag\r
-{\r
-        int in_use;\r
-        void * nwal_handle;\r
-        nwal_IpType  ip_type;\r
-        nwalIpAddr_t  ip_addr;\r
-        nwalIpOpt_t ip_qualifiers;\r
-} NETCP_INTERFACE_IP_T;\r
-\r
-/* to hold a classifier */\r
-typedef struct NETCP_INTERFACE_CLASSIFIER_Tag\r
-{\r
-       int  in_use;\r
-       int  class_type;   //see netcp_cfg.h\r
-       void * nwal_L2_handle;\r
-       void * nwal_L3_handle;\r
-       void * nwal_L4_handle;\r
-} NETCP_INTERFACE_CLASSIFIER_T;\r
-\r
-/* to hold an ipsec rx policy */\r
-typedef struct NETCP_IPSEC_POLICY_Tag\r
-{\r
-        int in_use;\r
-       int tunnel; //associated tunnel\r
-        void * nwal_handle;  //handle associated with this RX Policy \r
-} NETCP_IPSEC_POLICY_T;\r
-\r
-/* to hold a tunnel */\r
-typedef struct NETCP_IPSEC_SA_Tag\r
-{\r
-       int in_use;\r
-       int inbound;  //true if inbound\r
-       \r
-        int  sa_mode;  //mode we are going to use \r
-#define NETCP_IPSEC_SA_MODE_INFLOW 0\r
-#define NETCP_IPSEC_SA_MODE_SIDEBAND 1\r
\r
-        void * sa_handle_inflow;   //for inflow mode\r
-        void * sa_handle_sideband; //for sideband mode\r
-        int iface;     //associated interface\r
-} NETCP_IPSEC_SA_T;\r
-\r
-/* to hold a netcp 'interface' */\r
-typedef struct NETCP_INTERFACE_Tag\r
-{\r
-   int in_use;  /* 1 for valid */\r
-   int state;  /* 0=down, 1=up,  future.. */\r
-   void * nwal_handle;  //handle associated with this interface\r
-   unsigned char mac[6];  // mac address\r
-   unsigned int vlan;   //future\r
-   NETCP_INTERFACE_IP_T ips[TUNE_NETAPI_MAX_IP_PER_INTERFACE];\r
-} NETCP_INTERFACE_T;\r
-\r
-/*to keep track of netcp config transactions */\r
-typedef struct {\r
-    nwal_Bool_t             inUse;\r
-    uint16_t                transType;\r
-#define NETAPI_NWAL_HANDLE_TRANS_NONE             0\r
-#define NETAPI_NWAL_HANDLE_TRANS_MAC              1\r
-#define NETAPI_NWAL_HANDLE_TRANS_IP               2\r
-#define NETAPI_NWAL_HANDLE_TRANS_PORT             3\r
-#define NETAPI_NWAL_HANDLE_TRANS_SA               4\r
-#define NETAPI_NWAL_HANDLE_TRANS_SA_POLICY        5\r
-#define NETAPI_NWAL_HANDLE_STAT_REQUEST           6\r
-\r
-    uint16_t                state;\r
-#define NETAPI_NWAL_HANDLE_STATE_IDLE             0\r
-#define NETAPI_NWAL_HANDLE_STATE_OPEN_PENDING     1\r
-#define NETAPI_NWAL_HANDLE_STATE_OPEN             2\r
-#define NETAPI_NWAL_HANDLE_STATE_CLOSE_PENDING    3\r
-    nwal_Handle             handle;\r
-    uint64_t                transId;\r
-    NETAPI_T                netapi_handle; //the thread making the transaction\r
-}  NetapiNwalTransInfo_t;\r
-\r
-/* to hold user defined flows */\r
-typedef struct NETCP_REGISTERED_FLOWS_Tag\r
-{\r
-       int in_use;  //1=> in use\r
-       void * handle; //cppi handle to resource (internal)\r
-        NETCP_CFG_FLOW_T flow;\r
-} NETCP_REGISTERED_FLOWS_T;\r
-\r
-/******************************\r
- *    nwal global context \r
- *  (shared over all instances)\r
- *******************************/\r
-typedef struct\r
-{\r
-   int    state;\r
-#define NETAPI_NW_CXT_GLOB_INACTIVE               0x0\r
-#define NETAPI__CXT_GLOB_ACTIVE                   0x1\r
-#define NETAPI_NW_CXT_GLOB_RES_ALLOC_COMPLETE     0x3\r
-\r
-    nwal_Handle             nwalInstHandle;\r
-    //internal heaps used just by netcp (sa<->pa). SW doesn't touch these\r
-    Pktlib_HeapHandle       sa2pa_heap;\r
-    Pktlib_HeapHandle       pa2sa_heap;\r
-    //stats\r
-    paSysStats_t            paStats;\r
-    int    numCmdPass;\r
-    int    numCmdFail;\r
-    int    numBogusTransIds;\r
-    NetapiNwalTransInfo_t  transInfos[TUNE_NETAPI_MAX_NUM_TRANS];     //transactions\r
-    NETCP_INTERFACE_T  interfaces[TUNE_NETAPI_MAX_INTERFACES];        //interfaces\r
-    NETCP_INTERFACE_CLASSIFIER_T classi[TUNE_NETAPI_MAX_CLASSIFIERS]; //classifiers\r
-    NETCP_REGISTERED_FLOWS_T flows[TUNE_NETAPI_MAX_FLOWS]; //flows\r
-    NETCP_IPSEC_SA_T tunnel[TUNE_NETAPI_MAX_SA];           //tunnels\r
-    NETCP_IPSEC_POLICY_T  policy[TUNE_NETAPI_MAX_POLICY];  //policies\r
-} NETAPI_NWAL_GLOBAL_CONTEXT_T;\r
-\r
-/* NWAL Local context (per core/thread)  */\r
-typedef struct\r
-{\r
-    //void * nwalLocInstance;\r
-#define NETAPI_NW_CXT_LOC_INACTIVE     0x0\r
-#define NETAPI_NW_CXT_LOC_ACTIVE       0x2\r
-    int    state;\r
-\r
-    int numPendingCfg;\r
-    NETCP_CFG_STATS_CB stats_cb;\r
-\r
-/* stats */\r
-    int    numL2PktsRecvd;\r
-    int    numL3PktsRecvd;\r
-    int    numL4PktsRecvd;\r
-    int    numL4PktsSent;\r
-    int    TxErrDrop;\r
-\r
-    /* local config */\r
-    nwalLocCfg_t           nwalLocCfg;\r
-} NETAPI_NWAL_LOCAL_CONTEXT_T;\r
-\r
-/* the global */\r
-typedef struct NETAPI_GLOBAL_tag\r
-{\r
-#define NETAPI_MAX_PKTIO (TUNE_NETAPI_MAX_PKTIO) \r
-PKTIO_ENTRY_T pktios[NETAPI_MAX_PKTIO];\r
-\r
-/* pktlib heap */\r
-\r
-/* global timers */\r
-\r
-/* nwal context */\r
-NETAPI_NWAL_GLOBAL_CONTEXT_T nwal_context;\r
-\r
-} NETAPI_GLOBAL_T;\r
-\r
-\r
-/************************************\r
- * this is a per thread structure.\r
- * It contains stuff local to thread\r
- *  and pointer to global stuff\r
- *  that is shared over all threads,\r
- **************************************/\r
-typedef struct NETAPI_HANDLE_Tag\r
-{\r
-int master; //master type\r
-\r
-void * global;  /* pointer to the global area */\r
-\r
-/* heap  handles */\r
-Pktlib_HeapHandle   netcp_heap;    /* internal default */\r
-Pktlib_HeapHandle   netcp_control_heap; /* for control messages */\r
-Pktlib_HeapHandle  createdHeaps[TUNE_NETAPI_MAX_HEAPS];  /* created by app and registered */\r
-\r
-/* pktios defined */\r
-int n_pktios; /* #of pktios that are active for this instance */\r
-void*  pktios[NETAPI_MAX_PKTIO]; /* the list of pktios */\r
-\r
-/* scheduler stuff.  unallocated if NETAPI_INCLUDE_SCHED not set */\r
-void * p_sched;\r
-\r
-/* nwal local context */\r
-NETAPI_NWAL_LOCAL_CONTEXT_T nwal_local;\r
-\r
-/* security stuff */\r
-\r
-/* timer stuff */\r
-\r
-/* thread cookie */\r
-void * cookie;  /*set by calling thread */\r
-\r
-} NETAPI_HANDLE_T;\r
-\r
-\r
-//internal initialization routines */\r
-int netapi_init_qm(void);\r
-int netapi_init_cppi(void);\r
-int netapi_init_cpsw(void);\r
-int netapi_start_qm(void);\r
-int netapi_init_nwal(\r
-     int region2use,\r
-     Pktlib_HeapIfTable * p_table,\r
-     NETAPI_NWAL_GLOBAL_CONTEXT_T * p_nwal_context );\r
-int netapi_start_nwal(Pktlib_HeapHandle pkt_heap,\r
-                    Pktlib_HeapHandle cmd_heap,\r
-                     NETAPI_NWAL_LOCAL_CONTEXT_T *p ,\r
-                     NETAPI_NWAL_GLOBAL_CONTEXT_T * p_nwal_glob_context );\r
-\r
-int netapi_init_timer(void);\r
-int netapi_qm_setup_mem_region(\r
-                      unsigned int          numDesc,\r
-                      unsigned int          descSize,\r
-                      unsigned int*         pDescMemBase,\r
-                      int                   memRegion);\r
-//for above\r
-#define NETAPI_GLOBAL_REGION 0\r
-#define NETAPI_LOCAL_REGION 1\r
-\r
-\r
-//nwal callbacks\r
-void netapi_NWALRxPktCallback     (uint32_t            appCookie,\r
-                                uint16_t             numPkts,\r
-                                nwalRxPktInfo_t*    pPktInfo,\r
-                                uint64_t            timestamp,\r
-                                nwal_Bool_t*        pFreePkt);\r
-\r
-void netapi_NWALCmdCallBack (nwal_AppId        appHandle,\r
-                          uint16_t            trans_id,\r
-                          nwal_RetValue     ret);\r
-\r
-void netapi_NWALCmdPaStatsReply (nwal_AppId        appHandle,\r
-                              nwal_TransID_t    trans_id,\r
-                              paSysStats_t      *stats);\r
-\r
-void netapi_NWALSBPktCallback     (uint32_t            appCookie,\r
-                                uint16_t             numPkts,\r
-                                nwalDmRxPayloadInfo_t*  pDmRxPktInfo,\r
-                                nwal_Bool_t*        pFreePkt);\r
-\r
-\r
-//***********************************\r
-//internal utilities\r
-//*************************************\r
-\r
-//return the list of pktios for this instance\r
-static inline void ** netapi_get_pktio_list(NETAPI_T p)\r
-{\r
-NETAPI_HANDLE_T *pp = (NETAPI_HANDLE_T *) p;\r
-return &pp->pktios[0];\r
-}\r
-\r
-//get scheduler block handle\r
-static inline void * netapi_get_scheduler(NETAPI_T p)\r
-{\r
-NETAPI_HANDLE_T *pp = (NETAPI_HANDLE_T *) p;\r
-return pp->p_sched;\r
-}\r
-\r
-/* return pointer to global area */\r
-NETAPI_GLOBAL_T * netapi_get_global(void);\r
-\r
-//add a pktio name (and queue) to global list\r
-static inline int  netapi_add_global_pktio(NETAPI_T p, char *name, Qmss_Queue * qn)\r
-{\r
-NETAPI_HANDLE_T *pp = (NETAPI_HANDLE_T *) p;\r
-PKTIO_ENTRY_T *pe;\r
-int i;\r
-//find a free slot\r
-pe = &((NETAPI_GLOBAL_T *)(pp->global))->pktios[0];\r
-\r
-for(i=0;i<NETAPI_MAX_PKTIO; i++,pe++)\r
- {\r
-   if (pe->qn.qNum ==  -1)\r
-   {\r
-     pe->qn.qNum=qn->qNum;\r
-     pe->qn.qMgr=qn->qMgr;\r
-     strncpy(pe->name, name, PKTIO_MAX_NAME);\r
-     return 1;\r
-   }\r
-   pe+=1;\r
- }\r
- return 0;  //no room\r
-}\r
-\r
-//delete a pktio name (and queue) to global list\r
-static inline int  netapi_del_global_pktio(NETAPI_T p, char *name)\r
-{\r
-NETAPI_HANDLE_T *pp = (NETAPI_HANDLE_T *) p;\r
-PKTIO_ENTRY_T *pe;\r
-int i;\r
-//find slot\r
-pe = &((NETAPI_GLOBAL_T *)(pp->global))->pktios[0];\r
-\r
-for(i=0;i<NETAPI_MAX_PKTIO; i++,pe++)\r
- {\r
-   if (pe->qn.qNum == -1) continue;\r
-   if (!strncmp(name, pe->name, PKTIO_MAX_NAME))\r
-   {\r
-     pe->qn.qNum=-1;\r
-     pe->name[0]='\0';\r
-     return 1;\r
-   }\r
-   pe+=1;\r
- }\r
- return 0;  //no room\r
-}\r
-\r
-\r
-/* get list of global pktios that have been created */\r
-static inline  Qmss_Queue*  netapi_find_global_pktio(NETAPI_T p, char *name)\r
-{\r
-NETAPI_HANDLE_T *pp = (NETAPI_HANDLE_T *) p;\r
-PKTIO_ENTRY_T *pe;\r
-int i;\r
-//find slot\r
-pe = &((NETAPI_GLOBAL_T *)(pp->global))->pktios[0];\r
-\r
-for(i=0;i<NETAPI_MAX_PKTIO; i++,pe++)\r
- {\r
-   if (pe->qn.qNum  == -1) continue;\r
-   if (!strncmp(name, pe->name, PKTIO_MAX_NAME))\r
-   {\r
-     return &pe->qn;\r
-   }\r
-   pe +=1;\r
- }\r
- return NULL;  //not found\r
-}\r
-\r
-/* return the nwal global instance handle */\r
-static inline nwal_Handle netapi_return_nwal_instance_handle(NETAPI_T p)\r
-{\r
-\r
-NETAPI_HANDLE_T *pp = (NETAPI_HANDLE_T *) p;\r
-return ((NETAPI_GLOBAL_T *)(pp->global))->nwal_context.nwalInstHandle;\r
-}\r
-\r
-//utility to clear out a queue\r
-void netapi_zapQ(int queueNum);\r
-void netcp_cfgp_build_route(NETCP_CFG_ROUTE_T * p_route, int16_t * p_flow,  Qmss_QueueHnd * p_q);\r
-\r
-//database utilities\r
-int netcp_cfgp_find_saslot( NETAPI_NWAL_GLOBAL_CONTEXT_T *p, int iface);\r
-void netcp_cfgp_delete_sa(NETAPI_NWAL_GLOBAL_CONTEXT_T *p,int sa_slot);\r
-void netcp_cfgp_insert_sa(NETAPI_NWAL_GLOBAL_CONTEXT_T *p,\r
-                          int sa_slot,  //we 'reserved it already'\r
-                          int dir,\r
-                          int mode,\r
-                          void * temp1,\r
-                          void * temp2,\r
-                          void * handle_inflow,\r
-                          void * handle_sideband);\r
-void *netcp_cfgp_get_sa_handles( NETAPI_NWAL_GLOBAL_CONTEXT_T *p,\r
-                          int sa_slot, void ** p_sideband);\r
-void* netcp_cfgp_get_mac_handle(NETAPI_NWAL_GLOBAL_CONTEXT_T *p,int iface_no);\r
-NetapiNwalTransInfo_t *  netapip_GetFreeTransInfo(NETAPI_GLOBAL_T *p_global, nwal_TransID_t *pTransId);\r
-void *netcp_cfgp_get_policy( NETAPI_NWAL_GLOBAL_CONTEXT_T *p,\r
-                          int policy_slot);\r
-\r
-#endif\r
+/*****************************************
+ * file: netapi_loc.h
+ * purpose:  internal netapi stuff
+ ****************************************/
+
+#ifndef __NETAPI_LOC__H
+#define __NETAPI_LOC__H
+
+
+//#include "ti/runtime/netapi/netapi.h"
+#include "ti/drv/nwal/nwal_util.h"
+#include "ti/runtime/netapi/pktio.h"
+#include "ti/drv/nwal/nwal.h"
+#include "ti/drv/nwal/nwal_util.h"
+
+
+
+extern hplib_virtualAddrInfo_T netapi_VM_VirtAddr[HPLIB_MAX_MEM_POOLS];
+extern unsigned char *netapi_VM_SaContextVaddr;
+/***********************************************
+ *  GLOBAL AREA
+ *   short term:  this is global to process
+ *         (multi-process not supported)
+ *   long term:  this structure gets put in shared memory 
+ ***********************************************/
+
+/* list of global pktio channels that have been created
+   (NETCP_TX, RX are intrinsic so won't be here) */
+typedef struct PKTIO_ENTRY_tag
+{
+   char name[PKTIO_MAX_NAME+1];
+   Qmss_Queue qn;         // -1 => slot is free
+} PKTIO_ENTRY_T;
+
+/* to hold an IP on an interface */
+typedef struct NETCP_INTERFACE_IP_Tag
+{
+        int in_use;
+        void * nwal_handle;
+        nwal_IpType  ip_type;
+        nwalIpAddr_t  ip_addr;
+        nwalIpOpt_t ip_qualifiers;
+        void * user_data;
+} NETCP_INTERFACE_IP_T;
+
+/* to hold a classifier */
+typedef struct NETCP_INTERFACE_CLASSIFIER_Tag
+{
+    int  in_use;
+    int  class_type;   //see netcp_cfg.h
+    void * nwal_L2_handle;
+    void * nwal_L3_handle;
+    void * nwal_L4_handle;
+    void * user_data;
+} NETCP_INTERFACE_CLASSIFIER_T;
+
+/* to hold an ipsec rx policy */
+typedef struct NETCP_IPSEC_POLICY_Tag
+{
+    int in_use;
+    int tunnel; //associated tunnel
+    void * nwal_handle;  //handle associated with this RX Policy
+    void * user_data; // user data associtaed with this RX Policy
+} NETCP_IPSEC_POLICY_T;
+
+/* to hold a tunnel */
+typedef struct NETCP_IPSEC_SA_Tag
+{
+    int in_use;
+    int inbound;  //true if inbound
+       
+    int  sa_mode;  //mode we are going to use 
+#define NETCP_IPSEC_SA_MODE_INFLOW 0
+#define NETCP_IPSEC_SA_MODE_SIDEBAND 1
+    void * sa_handle_inflow;   //for inflow mode
+    void * sa_handle_sideband; //for sideband mode
+    int iface;     //associated interface
+    nwalTxDmPSCmdInfo_t     dmPSCmdInfo;
+    uint32_t    swInfo0;
+    uint32_t    swInfo1;
+    void*   user_data;
+} NETCP_IPSEC_SA_T;
+
+/* to hold a netcp 'interface' */
+typedef struct NETCP_INTERFACE_Tag
+{
+   int in_use;  /* 1 for valid */
+   int state;  /* 0=down, 1=up,  future.. */
+   void * nwal_handle;  //handle associated with this interface
+   unsigned char mac[6];  // mac address
+   unsigned int vlan;   //future
+} NETCP_INTERFACE_T;
+
+/*to keep track of netcp config transactions */
+typedef struct {
+    nwal_Bool_t             inUse;
+    uint16_t                transType;
+#define NETAPI_NWAL_HANDLE_TRANS_NONE             0
+#define NETAPI_NWAL_HANDLE_TRANS_MAC              1
+#define NETAPI_NWAL_HANDLE_TRANS_IP               2
+#define NETAPI_NWAL_HANDLE_TRANS_PORT             3
+#define NETAPI_NWAL_HANDLE_TRANS_SA               4
+#define NETAPI_NWAL_HANDLE_TRANS_SA_POLICY        5
+#define NETAPI_NWAL_HANDLE_STAT_REQUEST           6
+
+    uint16_t                state;
+#define NETAPI_NWAL_HANDLE_STATE_IDLE             0
+#define NETAPI_NWAL_HANDLE_STATE_OPEN_PENDING     1
+#define NETAPI_NWAL_HANDLE_STATE_OPEN             2
+#define NETAPI_NWAL_HANDLE_STATE_CLOSE_PENDING    3
+#define NETAPI_NWAL_HANDLE_STATE_ERR                        4
+    nwal_Handle             handle;
+    uint64_t                transId;
+    NETAPI_T                netapi_handle; //the thread making the transaction
+}  NetapiNwalTransInfo_t;
+
+/* to hold user defined flows */
+typedef struct NETCP_REGISTERED_FLOWS_Tag
+{
+    int                 in_use;  //1=> in use
+    void*               handle; //cppi handle to resource (internal)
+    NETCP_CFG_FLOW_T    flow;
+} NETCP_REGISTERED_FLOWS_T;
+
+/******************************
+ *    nwal global context 
+ *  (shared over all instances)
+ *******************************/
+typedef struct
+{
+    int                             state;
+#define NETAPI_NW_CXT_GLOB_INACTIVE               0x0
+#define NETAPI__CXT_GLOB_ACTIVE                   0x1
+#define NETAPI_NW_CXT_GLOB_RES_ALLOC_COMPLETE     0x3
+
+    nwal_Handle                     nwalInstHandle;
+    //internal heaps used just by netcp (sa<->pa). SW doesn't touch these
+    Pktlib_HeapHandle               sa2pa_heap;
+    Pktlib_HeapHandle               pa2sa_heap;
+    //stats
+    paSysStats_t                    paStats;
+    int                             numCmdPass;
+    int                             numCmdFail;
+    int                             numBogusTransIds;
+    NetapiNwalTransInfo_t           transInfos[TUNE_NETAPI_MAX_NUM_TRANS];     //transactions
+    NETCP_INTERFACE_T               interfaces[TUNE_NETAPI_MAX_NUM_MAC];        //interfaces
+    NETCP_INTERFACE_CLASSIFIER_T    classi[TUNE_NETAPI_MAX_CLASSIFIERS]; //classifiers
+    NETCP_REGISTERED_FLOWS_T        flows[TUNE_NETAPI_MAX_FLOWS]; //flows
+    NETCP_IPSEC_SA_T                tunnel[TUNE_NETAPI_MAX_SA];           //tunnels
+    NETCP_IPSEC_POLICY_T            policy[TUNE_NETAPI_MAX_POLICY];  //policies
+    NETCP_INTERFACE_IP_T            ips[TUNE_NETAPI_MAX_NUM_IP];           //ips
+} NETAPI_NWAL_GLOBAL_CONTEXT_T;
+
+/* NWAL Local context (per core/thread)  */
+typedef struct
+{
+#define NETAPI_NW_CXT_LOC_INACTIVE     0x0
+#define NETAPI_NW_CXT_LOC_ACTIVE       0x2
+    int                     state;
+
+    int                     numPendingCfg;
+    NETCP_CFG_STATS_CB      stats_cb;
+
+/* stats */
+    int                     numL2PktsRecvd;
+    int                     numL3PktsRecvd;
+    int                     numL4PktsRecvd;
+    int                     numL4PktsSent;
+    int                     TxErrDrop;
+
+    /* local config */
+    nwalLocCfg_t           nwalLocCfg;
+} NETAPI_NWAL_LOCAL_CONTEXT_T;
+
+/* the global */
+typedef struct NETAPI_GLOBAL_tag
+{
+#define NETAPI_MAX_PKTIO (TUNE_NETAPI_MAX_PKTIO) 
+    PKTIO_ENTRY_T                   pktios[NETAPI_MAX_PKTIO];
+    /* configuration */
+    NETAPI_CFG_T                    cfg;
+    /* nwal context */
+    NETAPI_NWAL_GLOBAL_CONTEXT_T    nwal_context;
+    NETAPI_T                        p_master;  // save p'masters handle 
+} NETAPI_GLOBAL_T;
+
+
+/************************************
+ * this is a per thread structure.
+ * It contains stuff local to thread
+ *  and pointer to global stuff
+ *  that is shared over all threads,
+ **************************************/
+typedef struct NETAPI_HANDLE_Tag
+{
+    int                         master; //master type
+
+    void*                       global;  /* pointer to the global area */
+
+    /* heap  handles */
+    Pktlib_HeapHandle           netcp_heap;    /* internal default */
+    Pktlib_HeapHandle           netcp_control_rx_heap; /* for control messages */
+    Pktlib_HeapHandle           netcp_control_tx_heap; /* for control messages */
+    Pktlib_HeapHandle           createdHeaps[TUNE_NETAPI_MAX_HEAPS];  /* created by app and registered */
+
+    /* pktios defined */
+    int                         n_pktios; /* #of pktios that are active for this instance */
+    void*                       pktios[NETAPI_MAX_PKTIO]; /* the list of pktios */
+
+    /* scheduler stuff.  unallocated if NETAPI_INCLUDE_SCHED not set */
+    void*                       p_sched;
+
+    /* nwal local context */
+    NETAPI_NWAL_LOCAL_CONTEXT_T nwal_local;
+
+    /* thread cookie */
+    void*                       cookie;  /*set by calling thread */
+} NETAPI_HANDLE_T;
+
+//internal initialization routines */
+int netapip_initQm(int max_descriptors);
+int netapip_initCppi(void);
+int netapip_startQm(void);
+int netapip_initNwal(int region2use,
+                     Pktlib_HeapIfTable * p_table,
+                     NETAPI_NWAL_GLOBAL_CONTEXT_T * p_nwal_context,
+                     NETAPI_CFG_T *p_cfg );
+
+int netapip_startNwal(Pktlib_HeapHandle             pkt_heap,
+                      Pktlib_HeapHandle             cmd_heapRx,
+                      Pktlib_HeapHandle             cmd_heapTx,
+                      NETAPI_NWAL_LOCAL_CONTEXT_T*  p,
+                      NETAPI_CFG_T*                 p_cfg,
+                      NETAPI_NWAL_GLOBAL_CONTEXT_T* p_nwal_glob_context );
+
+int netapip_initTimer(void);
+int netapip_qmSetupMemRegion(unsigned int          numDesc,
+                             unsigned int          descSize,
+                             unsigned int*         pDescMemBase,
+                             int                   memRegion);
+
+#define NETAPI_GLOBAL_REGION TUNE_NETAPI_QM_GLOBAL_REGION 
+#define NETAPI_LOCAL_REGION ((NETAPI_GLOBAL_REGION)+1) 
+
+
+//nwal callbacks
+void netapip_pktioNWALRxPktCallback(uint32_t          appCookie,
+                                    uint16_t          numPkts,
+                                    nwalRxPktInfo_t*  pPktInfo,
+                                    uint64_t          timestamp,
+                                    nwal_Bool_t*      pFreePkt);
+
+void netapip_netcpCfgNWALCmdCallBack (nwal_AppId        appHandle,
+                                      uint16_t          trans_id,
+                                      nwal_RetValue     ret);
+
+void netapip_netcpCfgNWALCmdPaStatsReply (nwal_AppId        appHandle,
+                                          nwal_TransID_t    trans_id,
+                                          paSysStats_t      *stats);
+
+void netapip_pktioNWALSBPktCallback     (uint32_t                   appCookie,
+                                         uint16_t                   numPkts,
+                                         nwalDmRxPayloadInfo_t*     pDmRxPktInfo,
+                                        nwal_Bool_t*                pFreePkt);
+
+
+//***********************************
+//internal utilities
+//*************************************
+
+//return the list of pktios for this instance
+static inline void ** netapi_get_pktio_list(NETAPI_T p)
+{
+NETAPI_HANDLE_T *pp = (NETAPI_HANDLE_T *) p;
+return &pp->pktios[0];
+}
+
+//get scheduler block handle
+static inline void * netapi_get_scheduler(NETAPI_T p)
+{
+    NETAPI_HANDLE_T *pp = (NETAPI_HANDLE_T *) p;
+    return pp->p_sched;
+}
+
+/* return pointer to global area */
+NETAPI_GLOBAL_T * netapi_get_global(void);
+
+//add a pktio name (and queue) to global list
+static inline int  netapip_addGlobalPktio(NETAPI_T p, char *name, Qmss_Queue * qn)
+{
+NETAPI_HANDLE_T *pp = (NETAPI_HANDLE_T *) p;
+PKTIO_ENTRY_T *pe;
+int i;
+//find a free slot
+pe = &((NETAPI_GLOBAL_T *)(pp->global))->pktios[0];
+
+for(i=0;i<NETAPI_MAX_PKTIO; i++,pe++)
+ {
+   if (pe->qn.qNum ==  -1)
+   {
+     pe->qn.qNum=qn->qNum;
+     pe->qn.qMgr=qn->qMgr;
+     strncpy(pe->name, name, PKTIO_MAX_NAME);
+     return 1;
+   }
+   pe+=1;
+ }
+ return 0;  //no room
+}
+
+//delete a pktio name (and queue) to global list
+static inline int  netapi_del_global_pktio(NETAPI_T p, char *name)
+{
+NETAPI_HANDLE_T *pp = (NETAPI_HANDLE_T *) p;
+PKTIO_ENTRY_T *pe;
+int i;
+//find slot
+pe = &((NETAPI_GLOBAL_T *)(pp->global))->pktios[0];
+
+for(i=0;i<NETAPI_MAX_PKTIO; i++,pe++)
+ {
+   if (pe->qn.qNum == -1) continue;
+   if (!strncmp(name, pe->name, PKTIO_MAX_NAME))
+   {
+     pe->qn.qNum=-1;
+     pe->name[0]='\0';
+     return 1;
+   }
+   pe+=1;
+ }
+ return 0;  //no room
+}
+
+
+/* get list of global pktios that have been created */
+static inline  Qmss_Queue*  netapip_findGlobalPktio(NETAPI_T p, char *name)
+{
+NETAPI_HANDLE_T *pp = (NETAPI_HANDLE_T *) p;
+PKTIO_ENTRY_T *pe;
+int i;
+//find slot
+pe = &((NETAPI_GLOBAL_T *)(pp->global))->pktios[0];
+
+for(i=0;i<NETAPI_MAX_PKTIO; i++,pe++)
+ {
+   if (pe->qn.qNum  == -1) continue;
+   if (!strncmp(name, pe->name, PKTIO_MAX_NAME))
+   {
+     return &pe->qn;
+   }
+   pe +=1;
+ }
+ return NULL;  //not found
+}
+
+/* return the nwal global instance handle */
+static inline nwal_Handle netapip_returnNwalInstanceHandle(NETAPI_T p)
+{
+
+NETAPI_HANDLE_T *pp = (NETAPI_HANDLE_T *) p;
+return ((NETAPI_GLOBAL_T *)(pp->global))->nwal_context.nwalInstHandle;
+}
+
+
+
+//utility to clear out a queue
+void netapip_zapQ(int queueNum);
+void netapip_netcpCfgBuildRoute(NETCP_CFG_ROUTE_T * p_route, int16_t * p_flow,  Qmss_QueueHnd * p_q);
+
+//database utilities
+void netapip_netcpCfgDeleteSa(NETAPI_NWAL_GLOBAL_CONTEXT_T *p,int sa_slot);
+void netapip_netcpCfgInsertSa(NETAPI_NWAL_GLOBAL_CONTEXT_T *p,
+                          int sa_slot,  //we 'reserved it already'
+                          int dir,
+                          int mode,
+                          void * temp1,
+                          void * temp2,
+                          void * handle_inflow,
+                          void * handle_sideband,
+                          nwalTxDmPSCmdInfo_t *dmPSCmdInfo;);
+void *netapip_netcpCfgGetSaHandles( NETAPI_NWAL_GLOBAL_CONTEXT_T *p,
+                          int sa_slot, void ** p_sideband);
+void* netapip_netcpCfgGetMacHandle(NETAPI_NWAL_GLOBAL_CONTEXT_T *p,int iface_no);
+NetapiNwalTransInfo_t *  netapip_getFreeTransInfo(NETAPI_GLOBAL_T *p_global, nwal_TransID_t *pTransId);
+void netapip_freeTransInfo(NetapiNwalTransInfo_t* pTransInfo);
+void *netapip_netcpCfgGetPolicy( NETAPI_NWAL_GLOBAL_CONTEXT_T *p,
+                          int policy_slot);
+nwalTxDmPSCmdInfo_t* netapip_netcpCfgGetSaSBInfo(NETAPI_NWAL_GLOBAL_CONTEXT_T *p,
+                                      NETCP_CFG_SA_T    sa_app_id);
+int netapip_netcpCfgGetSaInflowInfo(NETAPI_NWAL_GLOBAL_CONTEXT_T *p,
+                                      NETCP_CFG_SA_T    sa_app_id,
+                                      uint32_t *swInfo0,
+                                      uint32_t *swInfo1);
+
+int netapip_systemInit(NETAPI_HANDLE_T *);
+void netapip_cleanupAtStart(void);
+#endif