kernel_samsung_a53x/drivers/soc/samsung/gnssif/gnss_mbox.h
2024-06-15 16:02:09 -03:00

86 lines
2.5 KiB
C
Executable file

/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (C) 2014-2019, Samsung Electronics.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* 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.
*
*/
#ifndef __GNSS_MBOX_H__
#define __GNSS_MBOX_H__
#include "include/gnss.h"
/* Registers */
#define EXYNOS_MBOX_MCUCTLR 0x0
#define EXYNOS_MBOX_INTGR0 0x8
#define EXYNOS_MBOX_INTCR0 0xc
#define EXYNOS_MBOX_INTMR0 0x10
#define EXYNOS_MBOX_INTSR0 0x14
#define EXYNOS_MBOX_INTMSR0 0x18
#define EXYNOS_MBOX_INTGR1 0x1c
#define EXYNOS_MBOX_INTCR1 0x20
#define EXYNOS_MBOX_INTMR1 0x24
#define EXYNOS_MBOX_INTSR1 0x28
#define EXYNOS_MBOX_INTMSR1 0x2c
/* Bit definition */
#define MBOX_MCUCTLR_MSWRST (0) /* MCUCTRL S/W Reset */
/* Shared register with 64 * 32 words */
#define MAX_MBOX_NUM 64
enum gnss_mbox_region {
MBOX_REGION_GNSS,
MAX_MBOX_REGION,
};
struct gnss_mbox_ipc_handler {
void *data;
irq_handler_t handler;
};
struct gnss_mbox_drv_data {
char *name;
u32 id;
void __iomem *base;
u32 num_shared_reg;
u32 shared_reg_offset;
bool use_sw_reset_reg;
u32 registered_irq;
unsigned long unmasked_irq;
struct gnss_mbox_ipc_handler hd[16];
spinlock_t lock;
struct gnss_irq irq_gnss_mbox;
};
/* Functions */
extern int gnss_mbox_register_irq(enum gnss_mbox_region id, u32 int_num, irq_handler_t handler, void *data);
extern int gnss_mbox_unregister_irq(enum gnss_mbox_region id, u32 int_num, irq_handler_t handler);
extern int gnss_mbox_enable_irq(enum gnss_mbox_region id, u32 int_num);
extern int gnss_mbox_disable_irq(enum gnss_mbox_region id, u32 int_num);
extern void gnss_mbox_set_interrupt(enum gnss_mbox_region id, u32 int_num);
extern u32 gnss_mbox_get_sr(enum gnss_mbox_region id, u32 sr_num);
extern u32 gnss_mbox_extract_sr(enum gnss_mbox_region id, u32 sr_num, u32 mask, u32 pos);
extern void gnss_mbox_set_sr(enum gnss_mbox_region id, u32 sr_num, u32 msg);
extern void gnss_mbox_update_sr(enum gnss_mbox_region id, u32 sr_num, u32 msg, u32 mask, u32 pos);
extern void gnss_mbox_dump_sr(enum gnss_mbox_region id);
extern void gnss_mbox_sw_reset(enum gnss_mbox_region id);
extern void gnss_mbox_clear_all_interrupt(enum gnss_mbox_region id);
#endif /* __GNSS_MBOX_H__ */