/*
 * Copyright (C) 2014-2015 Freescale Semiconductor, Inc.
 *
 * 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.
 */

#ifndef __LINUX_IMX_SEMA4_H__
#define __LINUX_IMX_SEMA4_H__

#define SEMA4_NUM_DEVICES	1
#define SEMA4_NUM_GATES		16

#define SEMA4_UNLOCK	0x00
#define SEMA4_A9_LOCK	0x01
#define SEMA4_GATE_MASK	0x03

#define CORE_MUTEX_VALID	(('c'<<24)|('m'<<24)|('t'<<24)|'x')

/*
 * The enumerates
 */
enum {
	/* sema4 registers offset */
	SEMA4_CP0INE	= 0x40,
	SEMA4_CP1INE	= 0x48,
	SEMA4_CP0NTF	= 0x80,
	SEMA4_CP1NTF	= 0x88,
};

static const unsigned int idx_sema4[SEMA4_NUM_GATES] = {
	1 << 7, 1 << 6, 1 << 5, 1 << 4,
	1 << 3, 1 << 2, 1 << 1, 1 << 0,
	1 << 15, 1 << 14, 1 << 13, 1 << 12,
	1 << 11, 1 << 10, 1 << 9, 1 << 8,
};

struct imx_sema4_mutex {
	u32			valid;
	u32			gate_num;
	unsigned char		gate_val;
	wait_queue_head_t       wait_q;
};

struct imx_sema4_mutex_device {
	struct device		*dev;
	u16			cpntf_val;
	u16			cpine_val;
	void __iomem		*ioaddr;	/* Mapped address */
	spinlock_t		lock;		/* Mutex */
	int			irq;

	u16			alloced;
	struct imx_sema4_mutex	*mutex_ptr[SEMA4_NUM_GATES];
};

struct imx_sema4_mutex *
	imx_sema4_mutex_create(u32 dev_num, u32 mutex_num);
#ifdef CONFIG_IMX_SEMA4
int imx_sema4_mutex_destroy(struct imx_sema4_mutex *mutex_ptr);
int imx_sema4_mutex_trylock(struct imx_sema4_mutex *mutex_ptr);
int imx_sema4_mutex_lock(struct imx_sema4_mutex *mutex_ptr);
int imx_sema4_mutex_unlock(struct imx_sema4_mutex *mutex_ptr);
#else
static inline int imx_sema4_mutex_destroy(struct imx_sema4_mutex *mutex_ptr)
{
	return 0;
}
static inline int imx_sema4_mutex_trylock(struct imx_sema4_mutex *mutex_ptr)
{
	return 0;
}
static inline int imx_sema4_mutex_lock(struct imx_sema4_mutex *mutex_ptr)
{
	return 0;
}
static inline int imx_sema4_mutex_unlock(struct imx_sema4_mutex *mutex_ptr)
{
	return 0;
}
#endif
#endif /* __LINUX_IMX_SEMA4_H__ */
