. changes for ddr cache
[keystone-rtos/netapi.git] / ti / runtime / netapi / src / netapi_loc.h
1 /*****************************************\r
2  * file: netapi_loc.h\r
3  * purpose:  internal netapi stuff\r
4  ****************************************/\r
5 \r
6 #ifndef __NETAPI_LOC__H\r
7 #define __NETAPI_LOC__H\r
8 /***************************************\r
9 * INTERNAL HANDLE STRUCTURE DEFINITION\r
10 ****************************************/\r
11 \r
12 /***********************************************\r
13  *  GLOBAL AREA\r
14  *   short term:  this is global to process\r
15  *         (multi-process not supported)\r
16  *   long term:  this structure gets put in shared memory \r
17  ***********************************************/\r
18 \r
19 /* list of global pktio channels that have been created\r
20    (NETCP_TX, RX are intrinsic so won't be here) */\r
21 typedef struct PKTIO_ENTRY_tag\r
22 {\r
23    char name[PKTIO_MAX_NAME+1];\r
24    Qmss_Queue qn;         // -1 => slot is free\r
25 } PKTIO_ENTRY_T;\r
26 \r
27 /* to hold an IP on an interface */\r
28 typedef struct NETCP_INTERFACE_IP_Tag\r
29 {\r
30         int in_use;\r
31         void * nwal_handle;\r
32         nwal_IpType  ip_type;\r
33         nwalIpAddr_t  ip_addr;\r
34         nwalIpOpt_t ip_qualifiers;\r
35 } NETCP_INTERFACE_IP_T;\r
36 \r
37 /* to hold a classifier */\r
38 typedef struct NETCP_INTERFACE_CLASSIFIER_Tag\r
39 {\r
40         int  in_use;\r
41         int  class_type;   //see netcp_cfg.h\r
42         void * nwal_L2_handle;\r
43         void * nwal_L3_handle;\r
44         void * nwal_L4_handle;\r
45 } NETCP_INTERFACE_CLASSIFIER_T;\r
46 \r
47 /* to hold an ipsec rx policy */\r
48 typedef struct NETCP_IPSEC_POLICY_Tag\r
49 {\r
50         int in_use;\r
51         int tunnel; //associated tunnel\r
52         void * nwal_handle;  //handle associated with this RX Policy \r
53 } NETCP_IPSEC_POLICY_T;\r
54 \r
55 /* to hold a tunnel */\r
56 typedef struct NETCP_IPSEC_SA_Tag\r
57 {\r
58         int in_use;\r
59         int inbound;  //true if inbound\r
60        \r
61         int  sa_mode;  //mode we are going to use \r
62 #define NETCP_IPSEC_SA_MODE_INFLOW 0\r
63 #define NETCP_IPSEC_SA_MODE_SIDEBAND 1\r
64  \r
65         void * sa_handle_inflow;   //for inflow mode\r
66         void * sa_handle_sideband; //for sideband mode\r
67         int iface;     //associated interface\r
68 } NETCP_IPSEC_SA_T;\r
69 \r
70 /* to hold a netcp 'interface' */\r
71 typedef struct NETCP_INTERFACE_Tag\r
72 {\r
73    int in_use;  /* 1 for valid */\r
74    int state;  /* 0=down, 1=up,  future.. */\r
75    void * nwal_handle;  //handle associated with this interface\r
76    unsigned char mac[6];  // mac address\r
77    unsigned int vlan;   //future\r
78 } NETCP_INTERFACE_T;\r
79 \r
80 /*to keep track of netcp config transactions */\r
81 typedef struct {\r
82     nwal_Bool_t             inUse;\r
83     uint16_t                transType;\r
84 #define NETAPI_NWAL_HANDLE_TRANS_NONE             0\r
85 #define NETAPI_NWAL_HANDLE_TRANS_MAC              1\r
86 #define NETAPI_NWAL_HANDLE_TRANS_IP               2\r
87 #define NETAPI_NWAL_HANDLE_TRANS_PORT             3\r
88 #define NETAPI_NWAL_HANDLE_TRANS_SA               4\r
89 #define NETAPI_NWAL_HANDLE_TRANS_SA_POLICY        5\r
90 #define NETAPI_NWAL_HANDLE_STAT_REQUEST           6\r
91 \r
92     uint16_t                state;\r
93 #define NETAPI_NWAL_HANDLE_STATE_IDLE             0\r
94 #define NETAPI_NWAL_HANDLE_STATE_OPEN_PENDING     1\r
95 #define NETAPI_NWAL_HANDLE_STATE_OPEN             2\r
96 #define NETAPI_NWAL_HANDLE_STATE_CLOSE_PENDING    3\r
97     nwal_Handle             handle;\r
98     uint64_t                transId;\r
99     NETAPI_T                netapi_handle; //the thread making the transaction\r
100 }  NetapiNwalTransInfo_t;\r
101 \r
102 /* to hold user defined flows */\r
103 typedef struct NETCP_REGISTERED_FLOWS_Tag\r
104 {\r
105         int in_use;  //1=> in use\r
106         void * handle; //cppi handle to resource (internal)\r
107         NETCP_CFG_FLOW_T flow;\r
108 } NETCP_REGISTERED_FLOWS_T;\r
109 \r
110 /******************************\r
111  *    nwal global context \r
112  *  (shared over all instances)\r
113  *******************************/\r
114 typedef struct\r
115 {\r
116    int    state;\r
117 #define NETAPI_NW_CXT_GLOB_INACTIVE               0x0\r
118 #define NETAPI__CXT_GLOB_ACTIVE                   0x1\r
119 #define NETAPI_NW_CXT_GLOB_RES_ALLOC_COMPLETE     0x3\r
120 \r
121     nwal_Handle             nwalInstHandle;\r
122     //internal heaps used just by netcp (sa<->pa). SW doesn't touch these\r
123     Pktlib_HeapHandle       sa2pa_heap;\r
124     Pktlib_HeapHandle       pa2sa_heap;\r
125     //stats\r
126     paSysStats_t            paStats;\r
127     int    numCmdPass;\r
128     int    numCmdFail;\r
129     int    numBogusTransIds;\r
130     NetapiNwalTransInfo_t  transInfos[TUNE_NETAPI_MAX_NUM_TRANS];     //transactions\r
131     NETCP_INTERFACE_T  interfaces[TUNE_NETAPI_MAX_INTERFACES];        //interfaces\r
132     NETCP_INTERFACE_CLASSIFIER_T classi[TUNE_NETAPI_MAX_CLASSIFIERS]; //classifiers\r
133     NETCP_REGISTERED_FLOWS_T flows[TUNE_NETAPI_MAX_FLOWS]; //flows\r
134     NETCP_IPSEC_SA_T tunnel[TUNE_NETAPI_MAX_SA];           //tunnels\r
135     NETCP_IPSEC_POLICY_T  policy[TUNE_NETAPI_MAX_POLICY];  //policies\r
136     NETCP_INTERFACE_IP_T ips[TUNE_NETAPI_MAX_IP];           //ips\r
137 } NETAPI_NWAL_GLOBAL_CONTEXT_T;\r
138 \r
139 /* NWAL Local context (per core/thread)  */\r
140 typedef struct\r
141 {\r
142     //void * nwalLocInstance;\r
143 #define NETAPI_NW_CXT_LOC_INACTIVE     0x0\r
144 #define NETAPI_NW_CXT_LOC_ACTIVE       0x2\r
145     int    state;\r
146 \r
147     int numPendingCfg;\r
148     NETCP_CFG_STATS_CB stats_cb;\r
149 \r
150 /* stats */\r
151     int    numL2PktsRecvd;\r
152     int    numL3PktsRecvd;\r
153     int    numL4PktsRecvd;\r
154     int    numL4PktsSent;\r
155     int    TxErrDrop;\r
156 \r
157     /* local config */\r
158     nwalLocCfg_t           nwalLocCfg;\r
159 } NETAPI_NWAL_LOCAL_CONTEXT_T;\r
160 \r
161 /* the global */\r
162 typedef struct NETAPI_GLOBAL_tag\r
163 {\r
164 #define NETAPI_MAX_PKTIO (TUNE_NETAPI_MAX_PKTIO) \r
165 PKTIO_ENTRY_T pktios[NETAPI_MAX_PKTIO];\r
166 \r
167 /* pktlib heap */\r
168 \r
169 /* global timers */\r
170 \r
171 /* nwal context */\r
172 NETAPI_NWAL_GLOBAL_CONTEXT_T nwal_context;\r
173 \r
174 } NETAPI_GLOBAL_T;\r
175 \r
176 \r
177 /************************************\r
178  * this is a per thread structure.\r
179  * It contains stuff local to thread\r
180  *  and pointer to global stuff\r
181  *  that is shared over all threads,\r
182  **************************************/\r
183 typedef struct NETAPI_HANDLE_Tag\r
184 {\r
185 int master; //master type\r
186 \r
187 void * global;  /* pointer to the global area */\r
188 \r
189 /* heap  handles */\r
190 Pktlib_HeapHandle   netcp_heap;    /* internal default */\r
191 Pktlib_HeapHandle   netcp_control_heap; /* for control messages */\r
192 Pktlib_HeapHandle  createdHeaps[TUNE_NETAPI_MAX_HEAPS];  /* created by app and registered */\r
193 \r
194 /* pktios defined */\r
195 int n_pktios; /* #of pktios that are active for this instance */\r
196 void*  pktios[NETAPI_MAX_PKTIO]; /* the list of pktios */\r
197 \r
198 /* scheduler stuff.  unallocated if NETAPI_INCLUDE_SCHED not set */\r
199 void * p_sched;\r
200 \r
201 /* nwal local context */\r
202 NETAPI_NWAL_LOCAL_CONTEXT_T nwal_local;\r
203 \r
204 /* security stuff */\r
205 \r
206 /* timer stuff */\r
207 \r
208 /* thread cookie */\r
209 void * cookie;  /*set by calling thread */\r
210 \r
211 } NETAPI_HANDLE_T;\r
212 \r
213 \r
214 //internal initialization routines */\r
215 int netapi_init_qm(void);\r
216 int netapi_init_cppi(void);\r
217 int netapi_init_cpsw(void);\r
218 int netapi_start_qm(void);\r
219 int netapi_init_nwal(\r
220      int region2use,\r
221      Pktlib_HeapIfTable * p_table,\r
222      NETAPI_NWAL_GLOBAL_CONTEXT_T * p_nwal_context );\r
223 int netapi_start_nwal(Pktlib_HeapHandle pkt_heap,\r
224                     Pktlib_HeapHandle cmd_heap,\r
225                      NETAPI_NWAL_LOCAL_CONTEXT_T *p ,\r
226                      NETAPI_NWAL_GLOBAL_CONTEXT_T * p_nwal_glob_context );\r
227 \r
228 int netapi_init_timer(void);\r
229 int netapi_qm_setup_mem_region(\r
230                       unsigned int          numDesc,\r
231                       unsigned int          descSize,\r
232                       unsigned int*         pDescMemBase,\r
233                       int                   memRegion);\r
234 //for above\r
235 #define NETAPI_GLOBAL_REGION 0\r
236 #define NETAPI_LOCAL_REGION 1\r
237 \r
238 int netapi_VM_memory_setup(void);\r
239 void netapi_VM_memory_teardown(void);\r
240 \r
241 //nwal callbacks\r
242 void netapi_NWALRxPktCallback     (uint32_t            appCookie,\r
243                                 uint16_t             numPkts,\r
244                                 nwalRxPktInfo_t*    pPktInfo,\r
245                                 uint64_t            timestamp,\r
246                                 nwal_Bool_t*        pFreePkt);\r
247 \r
248 void netapi_NWALCmdCallBack (nwal_AppId        appHandle,\r
249                           uint16_t            trans_id,\r
250                           nwal_RetValue     ret);\r
251 \r
252 void netapi_NWALCmdPaStatsReply (nwal_AppId        appHandle,\r
253                               nwal_TransID_t    trans_id,\r
254                               paSysStats_t      *stats);\r
255 \r
256 void netapi_NWALSBPktCallback     (uint32_t            appCookie,\r
257                                 uint16_t             numPkts,\r
258                                 nwalDmRxPayloadInfo_t*  pDmRxPktInfo,\r
259                                 nwal_Bool_t*        pFreePkt);\r
260 \r
261 \r
262 //***********************************\r
263 //internal utilities\r
264 //*************************************\r
265 \r
266 //return the list of pktios for this instance\r
267 static inline void ** netapi_get_pktio_list(NETAPI_T p)\r
268 {\r
269 NETAPI_HANDLE_T *pp = (NETAPI_HANDLE_T *) p;\r
270 return &pp->pktios[0];\r
271 }\r
272 \r
273 //get scheduler block handle\r
274 static inline void * netapi_get_scheduler(NETAPI_T p)\r
275 {\r
276 NETAPI_HANDLE_T *pp = (NETAPI_HANDLE_T *) p;\r
277 return pp->p_sched;\r
278 }\r
279 \r
280 /* return pointer to global area */\r
281 NETAPI_GLOBAL_T * netapi_get_global(void);\r
282 \r
283 //add a pktio name (and queue) to global list\r
284 static inline int  netapi_add_global_pktio(NETAPI_T p, char *name, Qmss_Queue * qn)\r
285 {\r
286 NETAPI_HANDLE_T *pp = (NETAPI_HANDLE_T *) p;\r
287 PKTIO_ENTRY_T *pe;\r
288 int i;\r
289 //find a free slot\r
290 pe = &((NETAPI_GLOBAL_T *)(pp->global))->pktios[0];\r
291 \r
292 for(i=0;i<NETAPI_MAX_PKTIO; i++,pe++)\r
293  {\r
294    if (pe->qn.qNum ==  -1)\r
295    {\r
296      pe->qn.qNum=qn->qNum;\r
297      pe->qn.qMgr=qn->qMgr;\r
298      strncpy(pe->name, name, PKTIO_MAX_NAME);\r
299      return 1;\r
300    }\r
301    pe+=1;\r
302  }\r
303  return 0;  //no room\r
304 }\r
305 \r
306 //delete a pktio name (and queue) to global list\r
307 static inline int  netapi_del_global_pktio(NETAPI_T p, char *name)\r
308 {\r
309 NETAPI_HANDLE_T *pp = (NETAPI_HANDLE_T *) p;\r
310 PKTIO_ENTRY_T *pe;\r
311 int i;\r
312 //find slot\r
313 pe = &((NETAPI_GLOBAL_T *)(pp->global))->pktios[0];\r
314 \r
315 for(i=0;i<NETAPI_MAX_PKTIO; i++,pe++)\r
316  {\r
317    if (pe->qn.qNum == -1) continue;\r
318    if (!strncmp(name, pe->name, PKTIO_MAX_NAME))\r
319    {\r
320      pe->qn.qNum=-1;\r
321      pe->name[0]='\0';\r
322      return 1;\r
323    }\r
324    pe+=1;\r
325  }\r
326  return 0;  //no room\r
327 }\r
328 \r
329 \r
330 /* get list of global pktios that have been created */\r
331 static inline  Qmss_Queue*  netapi_find_global_pktio(NETAPI_T p, char *name)\r
332 {\r
333 NETAPI_HANDLE_T *pp = (NETAPI_HANDLE_T *) p;\r
334 PKTIO_ENTRY_T *pe;\r
335 int i;\r
336 //find slot\r
337 pe = &((NETAPI_GLOBAL_T *)(pp->global))->pktios[0];\r
338 \r
339 for(i=0;i<NETAPI_MAX_PKTIO; i++,pe++)\r
340  {\r
341    if (pe->qn.qNum  == -1) continue;\r
342    if (!strncmp(name, pe->name, PKTIO_MAX_NAME))\r
343    {\r
344      return &pe->qn;\r
345    }\r
346    pe +=1;\r
347  }\r
348  return NULL;  //not found\r
349 }\r
350 \r
351 /* return the nwal global instance handle */\r
352 static inline nwal_Handle netapi_return_nwal_instance_handle(NETAPI_T p)\r
353 {\r
354 \r
355 NETAPI_HANDLE_T *pp = (NETAPI_HANDLE_T *) p;\r
356 return ((NETAPI_GLOBAL_T *)(pp->global))->nwal_context.nwalInstHandle;\r
357 }\r
358 \r
359 //utility to clear out a queue\r
360 void netapi_zapQ(int queueNum);\r
361 void netcp_cfgp_build_route(NETCP_CFG_ROUTE_T * p_route, int16_t * p_flow,  Qmss_QueueHnd * p_q);\r
362 \r
363 //database utilities\r
364 int netcp_cfgp_find_saslot( NETAPI_NWAL_GLOBAL_CONTEXT_T *p, int iface);\r
365 void netcp_cfgp_delete_sa(NETAPI_NWAL_GLOBAL_CONTEXT_T *p,int sa_slot);\r
366 void netcp_cfgp_insert_sa(NETAPI_NWAL_GLOBAL_CONTEXT_T *p,\r
367                           int sa_slot,  //we 'reserved it already'\r
368                           int dir,\r
369                           int mode,\r
370                           void * temp1,\r
371                           void * temp2,\r
372                           void * handle_inflow,\r
373                           void * handle_sideband);\r
374 void *netcp_cfgp_get_sa_handles( NETAPI_NWAL_GLOBAL_CONTEXT_T *p,\r
375                           int sa_slot, void ** p_sideband);\r
376 void* netcp_cfgp_get_mac_handle(NETAPI_NWAL_GLOBAL_CONTEXT_T *p,int iface_no);\r
377 NetapiNwalTransInfo_t *  netapip_GetFreeTransInfo(NETAPI_GLOBAL_T *p_global, nwal_TransID_t *pTransId);\r
378 void *netcp_cfgp_get_policy( NETAPI_NWAL_GLOBAL_CONTEXT_T *p,\r
379                           int policy_slot);\r
380 #endif\r