1/* 2 * Copyright (c) 2011 ETH Zurich. 3 * All rights reserved. 4 * 5 * This file is distributed under the terms in the attached LICENSE file. 6 * If you do not find this file, copies can be found by writing to: 7 * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group. 8 */ 9 10#ifndef _AHCI_DMA_POOL_H 11#define _AHCI_DMA_POOL_H 12#include <string.h> 13 14struct ahci_dma_region { 15 void *vaddr; 16 genpaddr_t paddr; 17 size_t size; 18 size_t backing_region; 19}; 20 21errval_t ahci_dma_pool_init(size_t pool_size); 22errval_t ahci_dma_region_alloc(size_t size, struct ahci_dma_region **retregion); 23errval_t ahci_dma_region_alloc_aligned(size_t size, size_t alignment_requirement, struct ahci_dma_region **retregion); 24errval_t ahci_dma_region_free(struct ahci_dma_region *region); 25 26static inline void *ahci_dma_region_copy_in(struct ahci_dma_region *region, const void *buf, genvaddr_t offset, size_t size) { 27 void *dest = (char *)region->vaddr + offset; 28 return memcpy(dest, buf, size); 29} 30static inline void *ahci_dma_region_copy_out(struct ahci_dma_region *region, void *buf, genvaddr_t offset, size_t size) { 31 void *src_ = (char *)region->vaddr + offset; 32 return memcpy(buf, src_, size); 33} 34 35#endif // _AHCI_DMA_POOL_H 36