This is the initial commit.
[keystone-rtos/netapi.git] / ti / runtime / netapi / netapi_sched.h
1 /***********************************
2  * File: netapi_sched.h
3  * Purpose:  netapi scheduler module
4  **************************************************************
5  * FILE: netapi_sched.h
6  * 
7  * DESCRIPTION:  netapi sample event scheduler  header file for 
8  *         user space transport library
9  * 
10  * REVISION HISTORY:  rev 0.0.1 
11  *
12  *  Copyright (c) Texas Instruments Incorporated 2010-2011
13  * 
14  *  Redistribution and use in source and binary forms, with or without 
15  *  modification, are permitted provided that the following conditions 
16  *  are met:
17  *
18  *    Redistributions of source code must retain the above copyright 
19  *    notice, this list of conditions and the following disclaimer.
20  *
21  *    Redistributions in binary form must reproduce the above copyright
22  *    notice, this list of conditions and the following disclaimer in the 
23  *    documentation and/or other materials provided with the   
24  *    distribution.
25  *
26  *    Neither the name of Texas Instruments Incorporated nor the names of
27  *    its contributors may be used to endorse or promote products derived
28  *    from this software without specific prior written permission.
29  *
30  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
31  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
32  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
33  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
34  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
35  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
36  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
37  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
38  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
39  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
40  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42  ***********************************/
43 #ifndef __NETAPI_SCHED__
44 #define __NETAPI_SCHED__
45 #include "netapi.h"
47 /****************************
48  **********CONTEXT**********
49  ****************************/
50 struct  NETAPI_SCHED_HANDLE_Tag;
52 typedef void (*NETAPI_SCHED_CB)(struct NETAPI_SCHED_HANDLE_Tag *h);
55 typedef struct NETAPI_SCHED_CONFIG_Tag
56 {
57 int valid_flags;  //which is being configured
58 #define NETAPI_SCHED_DURATION 0x1
59 #define NETAPI_SCHED_POWER 0x2
60 #define NETAPI_SCHED_FINE  0x4 //future
61 #define NETAPI_SCHED_CBV  0x8 //callback
63 /*----duration------*/
64 uint64_t duration;  //0=forever  or #tics to run for 
65 #define NETAPI_SCHED_FOREVER 0L
67 /*-----house callback-----*/
68 NETAPI_SCHED_CB house_cb;
70 uint32_t interval;  // how many poll loop intervals after which to call the house keeping function 
73 /*------power control-------*/
74 int power_control;  //0= always on, >0 = duty cycle 
75 #define NETAPI_SCHED_POWER_ALWAYS_OFF 0  //drop to idle
76 #define NETAPI_SCHED_POWER_ALWAYS_ON 100 //always runs, no drop to idle
78 int idle_time;   //in ticks
80 /*-----fine control-----*/
81 //future..
83 } NETAPI_SCHED_CONFIG_T;
86 /* the schedule context */
87 typedef struct NETAPI_SCHED_HANDLE_Tag
88 {
89  volatile int state;   //0= shutdown, 1= shutting down, 2=active
90 #define NETAPI_SCHED_STATE_SHUT 0
91 #define NETAPI_SCHED_STATE_SHUTTING 1
92 #define NETAPI_SCHED_STATE_ACTIVE 2
93  void * back;  //pointer back to netapi handle
94  NETAPI_SCHED_CONFIG_T config;
95  uint64_t start;   /* start time */ 
96  volatile int shutdown_reason;
97  volatile uint64_t shutdown_time;
99 } NETAPI_SCHED_HANDLE_T;
101 /* how to shut down */
102 typedef struct NETAPI_SCHED_SHUTDOWN_Tag
104 int shutdown_type;
105 #define NETAPI_SCHED_SHUTDOWN_NOW 0
106 #define NETAPI_SCHED_SHUTDOWN_TO  1
107 #define NETAPI_SCHED_SHUTDOWN_NEXT_IDLE  2
108 int timeout;  //ticks from now to close
110 } NETAPI_SCHED_SHUTDOWN_T;
112 /****************************
113  **************API **********
114  ****************************/
116 /* open a scheduling contex */
117 NETAPI_SCHED_HANDLE_T * netapi_schedOpen(NETAPI_T n, NETAPI_SCHED_CONFIG_T * p_config, int *p_err);
119 /* re-configure a scheduling context */
120 int netapi_schedControl(NETAPI_SCHED_HANDLE_T *s, NETAPI_SCHED_CONFIG_T *p_config, int *p_err);
122 /* return codes for wait_for_events() */
123 #define NETAPI_SCHED_RETURN_ERR 0   //unknown, err
124 #define NETAPI_SCHED_RETURN_TO 1    // returned after timeout
125 #define NETAPI_SCHED_RETURN_SHUTDOWN 2 //returned after shutdown
127 /* main entry point.  caller gives up control to scheduler */
128 int netapi_schedWaitForEvents(NETAPI_SCHED_HANDLE_T *s, int * p_err);
130 /* shutdown scheduler context */
131 int netapi_schedShutdown(NETAPI_SCHED_HANDLE_T * s, NETAPI_SCHED_SHUTDOWN_T * p_close, int *p_err);
133 static NETAPI_T netapi_schedGetNetapiHandle(NETAPI_SCHED_HANDLE_T *s)
134   { return (NETAPI_T)s->back;}
135 #endif