blob: f18bcdeb9022ce2fb7a030febbfd226d08554e29 [file] [log] [blame]
/*
* Copyright (c) 2011,2013 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all
* copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/*
* This file was originally distributed by Qualcomm Atheros, Inc.
* under proprietary terms before Copyright ownership was assigned
* to the Linux Foundation.
*/
/**
* @ingroup adf_os_public
* @file adf_os_dma.h
* This file abstracts DMA operations.
*/
#ifndef _ADF_OS_DMA_H
#define _ADF_OS_DMA_H
#include <adf_os_types.h>
#include <adf_os_dma_pvt.h>
/*
* @brief a dma address representation of a platform
*/
/**
* @brief Allocate a DMA buffer and map it to local bus address space
*
* @param[in] osdev platform device instance
* @param[in] size DMA buffer size
* @param[in] coherent 0 => cached.
* @param[out] dmap opaque coherent memory handle
*
* @return returns the virtual address of the memory
*/
static inline void *
adf_os_dmamem_alloc(adf_os_device_t osdev,
adf_os_size_t size,
a_bool_t coherent,
adf_os_dma_map_t *dmap)
{
return __adf_os_dmamem_alloc(osdev, size, coherent, dmap);
}
/**
* @brief Free a previously mapped DMA buffer
*
* @param[in] osdev platform device instance
* @param[in] size DMA buffer size
* @param[in] coherent 0 => cached.
* @param[in] vaddr virtual address of DMA buffer
* @param[in] dmap memory handle
*/
static inline void
adf_os_dmamem_free(adf_os_device_t osdev,
adf_os_size_t size,
a_bool_t coherent,
void *vaddr,
adf_os_dma_map_t dmap)
{
__adf_os_dmamem_free(osdev, size, coherent, vaddr, dmap);
}
/**
* @brief given a dmamem map, returns the (bus) address
*
* @param[in] dmap memory handle
*
* @return the (bus) address
*/
static inline adf_os_dma_addr_t
adf_os_dmamem_map2addr(adf_os_dma_map_t dmap)
{
return(__adf_os_dmamem_map2addr(dmap));
}
/**
* @brief Flush and invalidate cache for a given dmamem map
*
* @param[in] osdev platform device instance
* @param[in] dmap mem handle
* @param[in] op op code for sync type, (see @ref adf_os_types.h)
*/
static inline void
adf_os_dmamem_cache_sync(adf_os_device_t osdev,
adf_os_dma_map_t dmap,
adf_os_cache_sync_t op)
{
__adf_os_dmamem_cache_sync(osdev, dmap, op);
}
/**
* @brief Get the cpu cache line size
*
* @return The CPU cache line size in bytes.
*/
static inline adf_os_size_t
adf_os_cache_line_size(void)
{
return __adf_os_cache_line_size();
}
/**
* @brief invalidate the virtual address range specified by
* start and end addresses.
* Note: This does not write back the cache entries.
*
* @return void
*/
static inline void
adf_os_invalidate_range(void * start, void * end)
{
return __adf_os_invalidate_range(start, end);
}
#endif