1 /*
2  * Copyright 2020 Espressif Systems (Shanghai) PTE LTD
3  *
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21 
22 #include "esp_attr.h"
23 #include "esp_heap_caps.h"
24 #include "sdkconfig.h"
25 #include "esp_nimble_mem.h"
26 
nimble_platform_mem_malloc(size_t size)27 IRAM_ATTR void *nimble_platform_mem_malloc(size_t size)
28 {
29 #ifdef CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_INTERNAL
30     return heap_caps_malloc(size, MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT);
31 #elif CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_EXTERNAL
32     return heap_caps_malloc(size, MALLOC_CAP_SPIRAM|MALLOC_CAP_8BIT);
33 #elif CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_IRAM_8BIT
34     return heap_caps_malloc_prefer(size, 2, MALLOC_CAP_INTERNAL|MALLOC_CAP_IRAM_8BIT, MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT);
35 #else
36     return malloc(size);
37 #endif
38 }
39 
nimble_platform_mem_calloc(size_t n,size_t size)40 IRAM_ATTR void *nimble_platform_mem_calloc(size_t n, size_t size)
41 {
42 #ifdef CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_INTERNAL
43     return heap_caps_calloc(n, size, MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT);
44 #elif CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_EXTERNAL
45     return heap_caps_calloc(n, size, MALLOC_CAP_SPIRAM|MALLOC_CAP_8BIT);
46 #elif CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_IRAM_8BIT
47     return heap_caps_calloc_prefer(n, size, 2, MALLOC_CAP_INTERNAL|MALLOC_CAP_IRAM_8BIT, MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT);
48 #else
49     return calloc(n, size);
50 #endif
51 }
52 
nimble_platform_mem_free(void * ptr)53 IRAM_ATTR void nimble_platform_mem_free(void *ptr)
54 {
55     heap_caps_free(ptr);
56 }
57