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