#include <linux/bitops.h>
#include <linux/device.h>
#include <linux/interrupt.h>
#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <asm/intel_punit_ipc.h>
#define OFFSET_DATA_LOW 0x0
#define OFFSET_DATA_HIGH 0x4
#define CMD_ERRCODE_MASK GENMASK(7, 0)
#define CMD_PARA1_SHIFT 8
#define CMD_PARA2_SHIFT 16
#define CMD_TIMEOUT_SECONDS 1
struct completion cmd_complete;
void __iomem *base[RESERVED_IPC][BASE_MAX];
static IPC_DEV *punit_ipcdev;
static inline u32 ipc_read_status(IPC_DEV *ipcdev, IPC_TYPE type)
return readl(ipcdev->base[type][BASE_IFACE]);
static inline void ipc_write_cmd(IPC_DEV *ipcdev, IPC_TYPE type, u32 cmd)
writel(cmd, ipcdev->base[type][BASE_IFACE]);
static inline u32 ipc_read_data_low(IPC_DEV *ipcdev, IPC_TYPE type)