M4PSW_MemoryInterface.c revision 855ec7c4be7ad642721909d5837a8d25a117c22f
1855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/*
2855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Copyright (C) 2004-2011 NXP Software
3855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project
4855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *
5855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License");
6855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * you may not use this file except in compliance with the License.
7855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * You may obtain a copy of the License at
8855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *
9855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *      http://www.apache.org/licenses/LICENSE-2.0
10855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *
11855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Unless required by applicable law or agreed to in writing, software
12855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS,
13855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * See the License for the specific language governing permissions and
15855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * limitations under the License.
16855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi */
17855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**
18855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*************************************************************************
19855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @file   M4PSW_MemoryInterface.c
20855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief  Memory Interface
21855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note   Implementation of the osal memory functions
22855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *************************************************************************
23855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
24855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
25855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <stdlib.h>
26855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <memory.h>
27855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
28855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <time.h>
29855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Memory.h"
30855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifndef M4VPS_ADVANCED_MEMORY_MANAGER
31855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**
32855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
33855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @fn         M4OSA_MemAddr32 M4OSA_malloc(M4OSA_UInt32 size,
34855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *                                          M4OSA_CoreID coreID,
35855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *                                          M4OSA_Char* string)
36855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief      this function allocates a memory block (at least 32 bits aligned)
37855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note
38855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      size (IN): size of allocated block in bytes
39855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      coreID (IN): identification of the caller component
40855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      string (IN): description of the allocated block (null terminated)
41855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     address of the allocated block, M4OSA_NULL if no memory available
42855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
43855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
44855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
45855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_MemAddr32 M4OSA_malloc(M4OSA_UInt32 size,
46855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                             M4OSA_CoreID coreID,
47855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                             M4OSA_Char* string)
48855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{
49855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_MemAddr32 Address = M4OSA_NULL;
50855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
51855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /**
52855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi     * If size is 0, malloc on WIN OS allocates a zero-length item in
53855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi     * the heap and returns a valid pointer to that item.
54855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi     * On other platforms, malloc could returns an invalid pointer
55855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi     * So, DON'T allocate memory of 0 byte */
56855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if (size == 0)
57855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
58855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        return Address;
59855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
60855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
61855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if (size%4 != 0)
62855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
63855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        size = size + 4 - (size%4);
64855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
65855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
66855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    Address = (M4OSA_MemAddr32) malloc(size);
67855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
68855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    return Address;
69855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi}
70855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
71855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
72855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**
73855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
74855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @fn         M4OSA_Void M4OSA_free(M4OSA_MemAddr32 address)
75855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief      this function free the provided memory block
76855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note       As in stlib.h, this function does nothing if address is NULL.
77855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      address (IN): address of the block to free
78855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     none
79855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
80855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
81855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
82855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_Void M4OSA_free (M4OSA_MemAddr32 address)
83855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{
84855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    free(address);
85855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi}
86855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
87855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
88855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**
89855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
90855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @fn         M4OSA_Void M4OSA_memset(M4OSA_MemAddr8 block,
91855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *                                     M4OSA_UInt32 size,
92855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *                                     M4OSA_UInt8 value)
93855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief      this function initializes the provided memory block with value
94855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note
95855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      block (IN): address of block to fill
96855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      size  (IN): size of the provided block
97855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      value (IN): value used for initialization
98855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     none
99855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
100855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
101855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
102855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_Void M4OSA_memset(M4OSA_MemAddr8 block,
103855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                        M4OSA_UInt32 size,
104855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                        M4OSA_UInt8 value)
105855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{
106855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    memset((void*)block, value, size);
107855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi}
108855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
109855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
110855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**
111855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
112855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @fn         M4OSA_Void M4OSA_memcpy(M4OSA_MemAddr8 outputBlock,
113855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *                                     M4OSA_MemAddr8 inputBlock,
114855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *                                     M4OSA_UInt32 size)
115855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief      this function copies 'size' bytes from inputBlock to outputBlock
116855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note
117855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      outputBlock (IN): address of block to fill
118855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      inputBlock  (IN): address of the input block
119855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      size (IN): size of the block to copy (in bytes)
120855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     none
121855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
122855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
123855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
124855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_Void M4OSA_memcpy(M4OSA_MemAddr8 outputBlock,
125855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                        M4OSA_MemAddr8 inputBlock,
126855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                        M4OSA_UInt32 size)
127855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{
128855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    memcpy((void*)outputBlock, (void*)inputBlock,  size);
129855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi}
130855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
131855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**
132855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
133855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @fn         M4OSA_MemAddr8 M4OSA_memmove(M4OSA_MemAddr8 outputBlock, M4OSA_MemAddr8 inputBlock, M4OSA_UInt32 size)
134855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief      this function moves 'size' bytes from inputBlock to outputBlock
135855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *               unlike M4OSA_memcpy, the two buffers can have an overlap.
136855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note       increment memcpy byte number (Fran�ois VALETTE)
137855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      outputBlock (IN): address of block to fill
138855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      inputBlock  (IN): address of the input block
139855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      size (IN): size of the block to copy (in bytes)
140855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     address of the output block, i.e. the first parameter
141855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
142855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
143855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_MemAddr8 M4OSA_memmove(M4OSA_MemAddr8 outputBlock,
144855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                         M4OSA_MemAddr8 inputBlock,
145855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                         M4OSA_UInt32 size)
146855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{
147855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi   return memmove((void*)outputBlock, (void*)inputBlock,  size);
148855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi}
149855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
150855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**
151855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
152855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @fn         M4OSA_Int32 M4OSA_memcmp(M4OSA_MemAddr8 address1, M4OSA_MemAddr8 address2, M4OSA_UInt32 size)
153855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief      this function compares the first 'size' bytes of address1 and
154855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi               'address2' and return a value indicating their relationship.
155855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note
156855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      address1 (IN): memory address 1
157855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      address2 (IN): memory address 2
158855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      size (IN): size of the block to compare (in bytes)
159855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     +1, if first bytes of adress1 are smaller than those of address2
160855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return      0, if both blocks are identical
161855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return    -1, if first bytes of address1 are bigger than those of address2
162855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
163855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
164855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
165855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_Int32 M4OSA_memcmp(M4OSA_MemAddr8 address1,
166855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                         M4OSA_MemAddr8 address2,
167855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                         M4OSA_UInt32 size)
168855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{
169855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Int32 i32_result = memcmp(address1, address2, size);
170855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if (i32_result > 0) {
171855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        return 1;
172855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
173855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    else if (i32_result < 0) {
174855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        return((M4OSA_Int32)-1);
175855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
176855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    return 0;
177855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi}
178855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
179855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
180855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
181855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
182855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif
183855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
184