blob: 46a5d29e2d3acf4eead0faf785b1250494e3c07e [file] [log] [blame]
/*
* Support for Medifield PNW Camera Imaging ISP subsystem.
*
* Copyright (c) 2010 Intel Corporation. All Rights Reserved.
*
* Copyright (c) 2010 Silicon Hive www.siliconhive.com.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version
* 2 as published by the Free Software Foundation.
*
* 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; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*
*/
#ifndef _hive_isp_css_custom_host_hrt_h_
#define _hive_isp_css_custom_host_hrt_h_
#include <linux/delay.h>
#include "atomisp_helper.h"
/*
* _hrt_master_port_store/load/uload -macros using __force attributed
* cast to intentional dereferencing __iomem attributed (noderef)
* pointer from atomisp_get_io_virt_addr
*/
#define _hrt_master_port_store_8(a, d) \
(*((s8 __force *)atomisp_get_io_virt_addr(a)) = (d))
#define _hrt_master_port_store_16(a, d) \
(*((s16 __force *)atomisp_get_io_virt_addr(a)) = (d))
#define _hrt_master_port_store_32(a, d) \
(*((s32 __force *)atomisp_get_io_virt_addr(a)) = (d))
#define _hrt_master_port_load_8(a) \
(*(s8 __force *)atomisp_get_io_virt_addr(a))
#define _hrt_master_port_load_16(a) \
(*(s16 __force *)atomisp_get_io_virt_addr(a))
#define _hrt_master_port_load_32(a) \
(*(s32 __force *)atomisp_get_io_virt_addr(a))
#define _hrt_master_port_uload_8(a) \
(*(u8 __force *)atomisp_get_io_virt_addr(a))
#define _hrt_master_port_uload_16(a) \
(*(u16 __force *)atomisp_get_io_virt_addr(a))
#define _hrt_master_port_uload_32(a) \
(*(u32 __force *)atomisp_get_io_virt_addr(a))
#define _hrt_master_port_store_8_volatile(a, d) _hrt_master_port_store_8(a, d)
#define _hrt_master_port_store_16_volatile(a, d) _hrt_master_port_store_16(a, d)
#define _hrt_master_port_store_32_volatile(a, d) _hrt_master_port_store_32(a, d)
#define _hrt_master_port_load_8_volatile(a) _hrt_master_port_load_8(a)
#define _hrt_master_port_load_16_volatile(a) _hrt_master_port_load_16(a)
#define _hrt_master_port_load_32_volatile(a) _hrt_master_port_load_32(a)
#define _hrt_master_port_uload_8_volatile(a) _hrt_master_port_uload_8(a)
#define _hrt_master_port_uload_16_volatile(a) _hrt_master_port_uload_16(a)
#define _hrt_master_port_uload_32_volatile(a) _hrt_master_port_uload_32(a)
static inline void hrt_sleep(void)
{
udelay(1);
}
static inline uint32_t _hrt_mem_store(uint32_t to, const void *from, size_t n)
{
unsigned i;
uint32_t _to = to;
const char *_from = (const char *)from;
for (i = 0; i < n; i++, _to++, _from++)
_hrt_master_port_store_8(_to, *_from);
return _to;
}
static inline void *_hrt_mem_load(uint32_t from, void *to, size_t n)
{
unsigned i;
char *_to = (char *)to;
uint32_t _from = from;
for (i = 0; i < n; i++, _to++, _from++)
*_to = _hrt_master_port_load_8(_from);
return _to;
}
static inline uint32_t _hrt_mem_set(uint32_t to, int c, size_t n)
{
unsigned i;
uint32_t _to = to;
for (i = 0; i < n; i++, _to++)
_hrt_master_port_store_8(_to, c);
return _to;
}
#endif /* _hive_isp_css_custom_host_hrt_h_ */