1 /*
2  * nonos.c - CC31xx/CC32xx Host Driver Implementation
3  *
4  * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
5  *
6  *
7  *  Redistribution and use in source and binary forms, with or without
8  *  modification, are permitted provided that the following conditions
9  *  are met:
10  *
11  *    Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  *
14  *    Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the
17  *    distribution.
18  *
19  *    Neither the name of Texas Instruments Incorporated nor the names of
20  *    its contributors may be used to endorse or promote products derived
21  *    from this software without specific prior written permission.
22  *
23  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34  *
35 */
36 
37 
38 /*****************************************************************************/
39 /* Include files                                                             */
40 /*****************************************************************************/
41 #include <ti/drivers/net/wifi/simplelink.h>
42 #include <ti/drivers/net/wifi/source/protocol.h>
43 #include <ti/drivers/net/wifi/source/driver.h>
44 
45 #ifndef SL_PLATFORM_MULTI_THREADED
46 
47 #include "nonos.h"
48 
49 _SlNonOsCB_t g__SlNonOsCB;
50 
_SlNonOsSpawn(_SlSpawnEntryFunc_t pEntry,void * pValue,_u32 flags)51 _SlNonOsRetVal_t _SlNonOsSpawn(_SlSpawnEntryFunc_t pEntry , void* pValue , _u32 flags)
52 {
53     _i8 i = 0;
54 
55     /* The parameter is currently not in use */
56     (void)flags;
57 
58 
59     for (i=0 ; i<NONOS_MAX_SPAWN_ENTRIES ; i++)
60     {
61         _SlNonOsSpawnEntry_t* pE = &g__SlNonOsCB.SpawnEntries[i];
62 
63         if (pE->IsAllocated == FALSE)
64         {
65             pE->pValue = pValue;
66             pE->pEntry = pEntry;
67             pE->IsAllocated = TRUE;
68             break;
69         }
70     }
71 
72     return NONOS_RET_OK;
73 }
74 
_SlNonOsHandleSpawnTask(void)75 _SlNonOsRetVal_t _SlNonOsHandleSpawnTask(void)
76 {
77     _i8    i=0;
78     void*  pValue;
79 
80     for (i=0 ; i<NONOS_MAX_SPAWN_ENTRIES ; i++)
81     {
82         _SlNonOsSpawnEntry_t* pE = &g__SlNonOsCB.SpawnEntries[i];
83 
84         if (pE->IsAllocated == TRUE)
85         {
86             _SlSpawnEntryFunc_t  pF = pE->pEntry;
87             pValue = pE->pValue;
88 
89             /* Clear the entry */
90             pE->pEntry = NULL;
91             pE->pValue = NULL;
92             pE->IsAllocated = FALSE;
93 
94             /* execute the spawn function */
95             pF(pValue);
96         }
97     }
98         return NONOS_RET_OK;
99 }
100 
tiDriverSpawnCallback(void)101 void tiDriverSpawnCallback(void)
102 {
103     /* If we are in cmd context and waiting for its cmd response
104      * do not handle async events from spawn, as the global lock was already taken when sending the command,
105      * and the Async event would be handled in read cmd context, so we do nothing.
106      */
107     if (FALSE == g_pCB->WaitForCmdResp)
108     {
109         (void)_SlNonOsHandleSpawnTask();
110     }
111 }
112 
113 #endif
114 
115