blob: e754c77be7261ce18c793d26c478c315a6b31acf [file] [log] [blame]
/*
* cma_driver.h - Broadcom STB platform CMA driver
*
* Copyright (C) 2009 - 2013 Broadcom Corporation
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __CMA_DRIVER_H__
#define __CMA_DRIVER_H__
#include <linux/device.h>
#include <linux/platform_device.h>
#include <linux/ioctl.h>
#include <linux/uaccess.h>
#include <linux/list.h>
#include <linux/dma-contiguous.h>
#include <linux/brcmstb/memory_api.h>
#include <uapi/linux/brcmstb/cma_driver.h>
/* Incremented when public API changes */
#define CMA_DRIVER_VERSION 0
struct mem_range {
u64 base;
u32 size;
};
struct region_list {
struct list_head list;
struct mem_range region;
};
struct cma_dev {
struct device *dev;
u32 cma_dev_index;
struct mem_range range; /* addresses that this cma_dev controls */
struct list_head list;
int memc;
};
/*
* Note to kernel module / driver developers:
* This interface is subject to change!
*
* For more information, please refer to:
* http://jira.broadcom.com/browse/SWLINUX-2473
*/
struct cma_dev *cma_dev_get_cma_dev(int memc);
int cma_dev_get_mem(struct cma_dev *cma_dev, u64 *addr, u32 len,
u32 align);
int cma_dev_put_mem(struct cma_dev *cma_dev, u64 addr, u32 len);
int cma_dev_get_num_regions(struct cma_dev *cma_dev);
int cma_dev_get_region_info(struct cma_dev *cma_dev, int region_num,
s32 *memc, u64 *addr, u32 *num_bytes);
int cma_drvr_is_ready(void);
static inline void *cma_dev_kva_map(struct page *page, int num_pages,
pgprot_t pgprot)
{
return brcmstb_memory_kva_map(page, num_pages, pgprot);
}
static inline int cma_dev_kva_unmap(const void *kva)
{
return brcmstb_memory_kva_unmap(kva);
}
/* Below functions are for calling during initialization and may need stubs */
#ifdef CONFIG_BRCMSTB_CMA
void __init cma_reserve(void);
void __init cma_register(void);
#else
static inline void cma_reserve(void) {}
static inline void cma_register(void) {}
#endif
#endif /* __CMA_DRIVER_H__ */