/*
 * Copyright (C) 2014 Samsung Electronics Co.Ltd
 * http://www.samsung.com
 *
 * MCU IPC driver
 *
 * 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 of the  License, or (at your
 * option) any later version.
 */
#ifndef MCU_IPC_H
#define MCU_IPC_H

#define MCU_IPC_INT0    (0)
#define MCU_IPC_INT1    (1)
#define MCU_IPC_INT2    (2)
#define MCU_IPC_INT3    (3)
#define MCU_IPC_INT4    (4)
#define MCU_IPC_INT5    (5)
#define MCU_IPC_INT6    (6)
#define MCU_IPC_INT7    (7)
#define MCU_IPC_INT8    (8)
#define MCU_IPC_INT9    (9)
#define MCU_IPC_INT10   (10)
#define MCU_IPC_INT11   (11)
#define MCU_IPC_INT12   (12)
#define MCU_IPC_INT13   (13)
#define MCU_IPC_INT14   (14)
#define MCU_IPC_INT15   (15)

/* FIXME: will be removed */
/* Shared register with 64 * 32 words */
#define MAX_MBOX_NUM	64

enum mcu_ipc_region {
	MCU_CP,
	MCU_GNSS,
	MCU_MAX,
};

int mbox_request_irq(enum mcu_ipc_region id, u32 int_num,
		void (*handler)(void *), void *data);
int mbox_enable_irq(enum mcu_ipc_region id, u32 int_num);
int mbox_check_irq(enum mcu_ipc_region id, u32 int_num);
int mbox_disable_irq(enum mcu_ipc_region id, u32 int_num);
int mcu_ipc_unregister_handler(enum mcu_ipc_region id, u32 int_num,
		void (*handler)(void *));
void mbox_set_interrupt(enum mcu_ipc_region id, u32 int_num);
void mcu_ipc_send_command(enum mcu_ipc_region id, u32 int_num, u16 cmd);
u32 mbox_get_value(enum mcu_ipc_region id, u32 mbx_num);
void mbox_set_value(enum mcu_ipc_region id, u32 mbx_num, u32 msg);
void mbox_update_value(enum mcu_ipc_region id, u32 mbx_num,
					u32 msg, u32 mask, u32 pos);
u32 mbox_extract_value(enum mcu_ipc_region id, u32 mbx_num, u32 mask, u32 pos);
void mbox_sw_reset(enum mcu_ipc_region id);
void mcu_ipc_clear_all_interrupt(enum mcu_ipc_region id);

#endif
