blob: fbb0ae9645902d7b8033d25292292c331d1c0210 [file] [log] [blame]
/*
* Copyright (C) 2018 Synaptics Incorporated. All rights reserved.
*
* 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.
*
* INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND
* SYNAPTICS EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES,
* INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE, AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY
* INTELLECTUAL PROPERTY RIGHTS. IN NO EVENT SHALL SYNAPTICS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, OR
* CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION WITH THE USE
* OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED AND
* BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF
* COMPETENT JURISDICTION DOES NOT PERMIT THE DISCLAIMER OF DIRECT
* DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' TOTAL CUMULATIVE LIABILITY
* TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. DOLLARS.
*/
#include <stdint.h>
#ifndef _IMAGE_2_IO_H
#define _IMAGE_2_IO_H
#define __chk_io_ptr(a) (void)0
#define __raw_writeb(v,a) (__chk_io_ptr(a), *(volatile unsigned char *)((uintmax_t)a) = (v))
#define __raw_writew(v,a) (__chk_io_ptr(a), *(volatile unsigned short *)((uintmax_t)a) = (v))
#define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile unsigned int *)((uintmax_t)a) = (v))
#define __raw_readb(a) (__chk_io_ptr(a), *(volatile unsigned char *)((uintmax_t)a))
#define __raw_readw(a) (__chk_io_ptr(a), *(volatile unsigned short *)((uintmax_t)a))
#define __raw_readl(a) (*(volatile unsigned int *)((uintmax_t)a))
#define writeb __raw_writeb
#define writew __raw_writew
#define writel __raw_writel
#define readb __raw_readb
#define readw __raw_readw
#define readl __raw_readl
#ifndef GA_REG_WORD32_WRITE
#define GA_REG_WORD32_WRITE(a, v) (writel(v, a))
#endif
#ifndef GA_REG_WORD32_READ
#define GA_REG_WORD32_READ(a, h) (*h = readl(a))
#endif
#define io32_set_bits(a, v, lsb, bits) \
do { \
uint32_t reg_val, mask; \
mask = ((bits<32) ? ((1<<(bits)) - 1) : ~0) << (lsb); \
reg_val = readl(a); \
reg_val &= ~mask; \
reg_val |= ((v) << (lsb)) & mask; \
writel(reg_val, a); \
} while(0);
#ifndef UNUSED
#define UNUSED(var) do { (void)(var); } while(0)
#endif
#ifndef REG_WRITE64
#define REG_WRITE64(a, v) (write64((void *)(uintptr_t)(a), v))
#endif
#ifndef REG_READ64
#define REG_READ64(a, h) (*h = read64((void *)(uintptr_t)(a)))
#endif
#ifndef REG_WRITE32
#define REG_WRITE32(a, v) (write32((void *)(uintptr_t)(a), v))
#endif
#ifndef REG_READ32
#define REG_READ32(a, h) (*h = read32((void *)(uintptr_t)(a)))
#endif
#ifndef REG_WRITE16
#define REG_WRITE16(a, v) (write16((void *)(uintptr_t)(a), v))
#endif
#ifndef REG_READ16
#define REG_READ16(a, h) (*h = read16((void *)(uintptr_t)(a)))
#endif
#ifndef REG_WRITE8
#define REG_WRITE8(a, v) (write8((void *)(uintptr_t)(a), v))
#endif
#ifndef REG_READ8
#define REG_READ8(a, h) (*h = read8((void *)(uintptr_t)(a)))
#endif
#ifndef BFM_HOST_Bus_Write32
#define BFM_HOST_Bus_Write32 REG_WRITE32
#endif
#ifndef BFM_HOST_Bus_Read32
#define BFM_HOST_Bus_Read32 REG_READ32
#endif
#ifndef GA_REG_WORD32_WRITE
#define GA_REG_WORD32_WRITE REG_WRITE32
#endif
#ifndef GA_REG_WORD32_READ
#define GA_REG_WORD32_READ REG_READ32
#endif
static inline uint8_t read8(void *addr)
{
return *(volatile uint8_t *)(addr);
};
static inline void write8(void *addr, uint8_t value)
{
*(volatile uint8_t *)(addr) = (value);
};
static inline uint16_t read16(void *addr)
{
return *(volatile uint16_t *)(addr);
};
static inline void write16(void *addr, uint16_t value)
{
*(volatile uint16_t *)(addr) = (value);
};
static inline uint32_t read32(void *addr)
{
return *(volatile uint32_t *)(addr);
};
static inline void write32(void *addr, uint32_t value)
{
*(volatile uint32_t *)(addr) = (value);
};
static inline uint64_t read64(void *addr)
{
return *(volatile uint64_t *)(addr);
};
static inline void write64(void *addr, uint64_t value)
{
*(volatile uint64_t *)(addr) = (value);
};
#endif