]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - keystone-rtos/netapi.git/blob - ti/runtime/netapi/src/netapi_sched.c
5c5f85bb690a071738eb6e90b30e6c603cc9b2e9
[keystone-rtos/netapi.git] / ti / runtime / netapi / src / netapi_sched.c
1 /****************************************\r
2  * File: netapi_sched.c\r
3  * Purpose:  netapi scheduling module\r
4  * NOTE: This sample right now.\r
5  **************************************************************\r
6  * FILE: netapi_sched.c\r
7  * \r
8  * DESCRIPTION:  netapi sample scheduler source file for user space transport\r
9  *               library\r
10  * \r
11  * REVISION HISTORY:  rev 0.0.1 \r
12  *\r
13  *  Copyright (c) Texas Instruments Incorporated 2010-2011\r
14  * \r
15  *  Redistribution and use in source and binary forms, with or without \r
16  *  modification, are permitted provided that the following conditions \r
17  *  are met:\r
18  *\r
19  *    Redistributions of source code must retain the above copyright \r
20  *    notice, this list of conditions and the following disclaimer.\r
21  *\r
22  *    Redistributions in binary form must reproduce the above copyright\r
23  *    notice, this list of conditions and the following disclaimer in the \r
24  *    documentation and/or other materials provided with the   \r
25  *    distribution.\r
26  *\r
27  *    Neither the name of Texas Instruments Incorporated nor the names of\r
28  *    its contributors may be used to endorse or promote products derived\r
29  *    from this software without specific prior written permission.\r
30  *\r
31  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
32  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
33  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
34  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
35  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
36  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
37  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
38  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
39  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
40  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
41  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
42 \r
43  ****************************************/\r
44 \r
45 #include "netapi.h"\r
46 #include "netapi_sched.h"\r
47 \r
48 \r
49 /****************************************/\r
50 /************API************************/\r
51 /**************************************/\r
52 \r
53 /* open a scheduling contex */\r
54 NETAPI_SCHED_HANDLE_T * netapi_schedOpen(NETAPI_T n, NETAPI_SCHED_CONFIG_T * p_config, int *p_err)\r
55 {\r
56   *p_err=0;\r
57    NETAPI_SCHED_HANDLE_T * ph = (NETAPI_SCHED_HANDLE_T *) netapi_get_scheduler(n);\r
58   if(!ph) {*p_err= NETAPI_ERR_NOMEM; return NULL;}\r
59   if(!p_config) {*p_err=  NETAPI_ERR_BAD_INPUT; return NULL;}\r
60   memcpy(&ph->config,p_config,sizeof(NETAPI_SCHED_CONFIG_T));\r
61   ph->start =   netapi_getTimestamp();\r
62   ph->back = (void *) n;\r
63   if (ph->config.valid_flags & NETAPI_SCHED_DURATION)\r
64   {\r
65     if (ph->config.duration == NETAPI_SCHED_FOREVER) \r
66         {\r
67         ph->shutdown_time=(uint64_t) -1; \r
68         }\r
69     else\r
70        {\r
71        ph->shutdown_time = ph->start + ph->config.duration;\r
72        }\r
73   }\r
74   else ph->shutdown_time = (uint64_t) -1;\r
75   ph->state =NETAPI_SCHED_STATE_ACTIVE; \r
76   return(ph);\r
77 \r
78 }\r
79 \r
80 /* re-configure a scheduling context */\r
81 int netapi_schedControl(NETAPI_SCHED_HANDLE_T *s, NETAPI_SCHED_CONFIG_T *p_config, int *p_err)\r
82 {\r
83   /* not implemented */\r
84 \r
85   return 0;\r
86 }\r
87 \r
88 \r
89 /* main entry point.  caller gives up control to scheduler */\r
90 int netapi_schedWaitForEvents(NETAPI_SCHED_HANDLE_T *s, int *p_err)\r
91 {\r
92   int err;\r
93   *p_err=0;\r
94   unsigned long long t =  netapi_getTimestamp();\r
95   int next_house;\r
96 \r
97   next_house =  s->config.interval;\r
98   /* loop for duration or until shutdown */\r
99   for(;t< s->shutdown_time;)\r
100   {\r
101     t = netapi_getTimestamp();\r
102     next_house -=1;\r
103     //poll all  pktio channels we have open in RX mode \r
104      pktio_pollAll((NETAPI_T) s->back, NULL, &err);\r
105 \r
106     //poll pktlib garbage collections for registered heaps..\r
107     netapi_pollHeapGarbage((NETAPI_T) s->back);\r
108     \r
109     //todo timers (local and global)\r
110     netapi_TimerGroupPollAll((NETAPI_T) s->back, NETAPI_TIMER_FITLER_ALL, 100000);\r
111 \r
112     //poll NETCP/PA control channels \r
113     netapi_netcpPoll((NETAPI_T) s->back);\r
114 \r
115     //see if time to do a house keeping callback\r
116      if ((s->config.valid_flags & NETAPI_SCHED_CBV) && s->config.house_cb)\r
117         if (next_house<=0)\r
118         {\r
119            s->config.house_cb(s);\r
120            next_house = s->config.interval;\r
121         }\r
122     //see if we were closed and/or its time to close\r
123     if (s->state!= NETAPI_SCHED_STATE_ACTIVE) \r
124          { s->state=NETAPI_SCHED_STATE_SHUT; break;}\r
125   }\r
126   return 1;\r
127 }\r
128 \r
129 /* shutdown scheduler context */\r
130 int netapi_schedShutdown(NETAPI_SCHED_HANDLE_T * s, NETAPI_SCHED_SHUTDOWN_T * p_close, int * p_err)\r
131 {\r
132   *p_err=0;\r
133   s->state=NETAPI_SCHED_STATE_SHUTTING;  //say we are closing\r
134 \r
135   return 1;\r
136 }\r
137 \r
138 \r