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