1 /* 2 * Copyright (C) 2015-2018 Alibaba Group Holding Limited 3 */ 4 5 /* This file provides implementation of common (libc) functions that is defined 6 * in platform abstraction layer for AliOS Things. 7 */ 8 9 #if !defined(MBEDTLS_CONFIG_FILE) 10 #include "mbedtls/config.h" 11 #else 12 #include MBEDTLS_CONFIG_FILE 13 #endif 14 15 #if defined(MBEDTLS_PLATFORM_C) 16 #include <stdlib.h> 17 #include <string.h> 18 #include <aos/kernel.h> 19 20 #if defined(MBEDTLS_PLATFORM_MEMORY) 21 #if defined(XTENSA_MALLOC_IRAM) 22 extern void *iram_heap_malloc( size_t xWantedSize ); 23 extern void iram_heap_free( void *pv ); 24 extern int iram_heap_check_addr( void *addr ); 25 aos_mbedtls_calloc(size_t n,size_t size)26void * aos_mbedtls_calloc( size_t n, size_t size ) 27 { 28 void *buf = NULL; 29 30 if( ( n == 0 ) || ( size == 0 ) ) 31 return( NULL ); 32 33 buf = iram_heap_malloc( n * size ); 34 if( buf == NULL ) 35 buf = malloc( n * size ); 36 37 if( buf == NULL ) 38 return( NULL ); 39 else 40 memset( buf, 0, n * size ); 41 42 return( buf ); 43 } 44 aos_mbedtls_free(void * ptr)45void aos_mbedtls_free( void *ptr ) 46 { 47 if( ptr == NULL ) 48 return; 49 50 if( iram_heap_check_addr( ptr ) == 1 ) 51 iram_heap_free( ptr ); 52 else 53 free( ptr ); 54 } 55 56 #else /*XTENSA_MALLOC_IRAM*/ 57 aos_mbedtls_calloc(size_t n,size_t size)58void * aos_mbedtls_calloc( size_t n, size_t size ) 59 { 60 void *buf = NULL; 61 62 buf = aos_malloc(n * size); 63 if( buf == NULL ) 64 return( NULL ); 65 else 66 memset(buf, 0, n * size); 67 68 return( buf ); 69 } 70 aos_mbedtls_free(void * ptr)71void aos_mbedtls_free( void *ptr ) 72 { 73 if( ptr == NULL ) 74 return; 75 76 aos_free( ptr ); 77 } 78 #endif /*XTENSA_MALLOC_IRAM*/ 79 #endif /*MBEDTLS_PLATFORM_MEMORY*/ 80 #endif /*MBEDTLS_PLATFORM_C*/ 81