1216bcf9759ebb48852cf2a549d54a4668a8fca7
[keystone-rtos/rm-lld.git] / test / rm_osal.c
1 /**
2  *   @file  rm_osal.c
3  *
4  *   @brief
5  *      This is the OS abstraction layer used by the Resource Manager.
6  *
7  *  \par
8  *  ============================================================================
9  *  @n   (C) Copyright 2012-2013, Texas Instruments, Inc.
10  *
11  *  Redistribution and use in source and binary forms, with or without
12  *  modification, are permitted provided that the following conditions
13  *  are met:
14  *
15  *    Redistributions of source code must retain the above copyright
16  *    notice, this list of conditions and the following disclaimer.
17  *
18  *    Redistributions in binary form must reproduce the above copyright
19  *    notice, this list of conditions and the following disclaimer in the
20  *    documentation and/or other materials provided with the
21  *    distribution.
22  *
23  *    Neither the name of Texas Instruments Incorporated nor the names of
24  *    its contributors may be used to endorse or promote products derived
25  *    from this software without specific prior written permission.
26  *
27  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38  *
39  *  \par
40 */
42 /* Standard Includes */
43 #include <stdarg.h>
45 /* XDC Includes */
46 #include <xdc/std.h>
47 #include <xdc/runtime/Memory.h>
48 #include <xdc/runtime/Error.h>
49 #include <xdc/runtime/System.h>
51 /* IPC Includes */
52 #include <ti/ipc/GateMP.h>
54 /**********************************************************************
55  ****************************** Defines *******************************
56  **********************************************************************/
57 #define RM_INTERNAL_GATE_NAME "rmInternalLocalGate"
59 /**********************************************************************
60  ************************** Global Variables **************************
61  **********************************************************************/
62 uint32_t rmMallocCounter = 0;
63 uint32_t rmFreeCounter   = 0;
65 GateMP_Handle rmInternalGateHandle;
67 /**********************************************************************
68  *************************** OSAL Functions **************************
69  **********************************************************************/
71 /* FUNCTION PURPOSE: Allocates memory
72  ***********************************************************************
73  * DESCRIPTION: The function is used to allocate a memory block of the
74  *              specified size.
75  */
76 void* Osal_rmMalloc (uint32_t num_bytes)
77 {
78         Error_Block     errorBlock;
80     /* Increment the allocation counter. */
81     rmMallocCounter++;
83         /* Allocate memory. */
84         return Memory_alloc(NULL, num_bytes, 0, &errorBlock);
85 }
87 /* FUNCTION PURPOSE: Frees memory
88  ***********************************************************************
89  * DESCRIPTION: The function is used to free a memory block of the
90  *              specified size.
91  */ 
92 void Osal_rmFree (void *ptr, uint32_t size)
93 {
94     /* Increment the free counter. */
95     rmFreeCounter++;
96         Memory_free(NULL, ptr, size);
97 }
99 void Osal_rmLocalGateInit (void)
101     GateMP_Params gateParams;
103     /* Create a GateMP object to be use as a resource lock */
104     GateMP_Params_init(&gateParams);
105     gateParams.name = RM_INTERNAL_GATE_NAME;    
106     /* Local protection for multiple threads, uses a BIOS GateMutexPri */
107     gateParams.localProtect = GateMP_LocalProtect_THREAD;
108     /* No remote protection because we're not going between cores */
109     gateParams.remoteProtect = GateMP_RemoteProtect_NONE;
110     rmInternalGateHandle = GateMP_create(&gateParams);
113 uint32_t Osal_rmLocalGateEnter (void)
115     return ((uint32_t)GateMP_enter(rmInternalGateHandle));
118 void Osal_rmLocalGateLeave (uint32_t localGateKey)
120     GateMP_leave(rmInternalGateHandle, (IArg)localGateKey);
123 /* FUNCTION PURPOSE: Prints a variable list
124  ***********************************************************************
125  * DESCRIPTION: The function is used to print a string to the console
126  */
127 void Osal_rmLog (char *fmt, ... )
129     VaList ap;
130     
131     va_start(ap, fmt);
132     System_vprintf(fmt, ap);
133     va_end(ap);