| /* |
| * Copyright 2017, Data61 |
| * Commonwealth Scientific and Industrial Research Organisation (CSIRO) |
| * ABN 41 687 119 230. |
| * |
| * This software may be distributed and modified according to the terms of |
| * the BSD 2-Clause license. Note that NO WARRANTY is provided. |
| * See "LICENSE_BSD2.txt" for details. |
| * |
| * @TAG(DATA61_BSD) |
| */ |
| |
| #include <stdlib.h> |
| #include <platsupport/io.h> |
| #include <platsupport/delay.h> |
| |
| #define _malloc(...) malloc(__VA_ARGS__) |
| #define _free(...) free(__VA_ARGS__) |
| |
| #ifdef CAMKES |
| #define RESOURCE(o, id) id##_VADDR |
| #else |
| #define RESOURCE(o, id) sdhc_map_device(&o->io_mapper, id##_PADDR, id##_SIZE) |
| #endif |
| |
| static inline void |
| udelay(long us) |
| { |
| ps_udelay(us); |
| } |
| |
| /** |
| * Maps in device memory |
| * @param[in] o A reference to the services provided |
| * @param[in] paddr the physical address of the device |
| * @param[in] size the size of the region in bytes |
| * @return the virtual address of the mapping. |
| * NULL on failure. |
| */ |
| static inline void* |
| sdhc_map_device(struct ps_io_mapper* o, uintptr_t paddr, int size) |
| { |
| return ps_io_map(o, paddr, size, 0, PS_MEM_NORMAL); |
| } |
| |
| static inline void* |
| ps_dma_alloc_pinned(ps_dma_man_t *dma_man, size_t size, int align, int cache, ps_mem_flags_t flags, |
| uintptr_t* paddr) |
| { |
| void* addr; |
| assert(dma_man); |
| addr = ps_dma_alloc(dma_man, size, align, cache, flags); |
| if (addr != NULL) { |
| *paddr = ps_dma_pin(dma_man, addr, size); |
| } |
| return addr; |
| } |
| |
| static inline void |
| ps_dma_free_pinned(ps_dma_man_t *dma_man, void* addr, size_t size) |
| { |
| assert(dma_man); |
| ps_dma_unpin(dma_man, addr, size); |
| ps_dma_free(dma_man, addr, size); |
| } |
| |
| |