/* * 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 #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_ */