blob: 489a601259eefa18d6c1b297615e7319f1c221f7 [file] [log] [blame]
#ifndef __ACPM_IPC_H_
#define __ACPM_IPC_H_
#include <soc/samsung/acpm_ipc_ctrl.h>
struct buff_info {
void __iomem *rear;
void __iomem *front;
void __iomem *base;
void __iomem *direction;
unsigned int size;
unsigned int len;
unsigned int d_buff_size;
};
struct callback_info {
void (*ipc_callback) (unsigned int *cmd, unsigned int size);
struct device_node *client;
struct list_head list;
};
struct acpm_ipc_ch {
struct buff_info rx_ch;
struct buff_info tx_ch;
struct list_head list;
unsigned int id;
unsigned int type;
unsigned int seq_num;
unsigned int *cmd;
spinlock_t rx_lock;
spinlock_t tx_lock;
spinlock_t ch_lock;
struct mutex wait_lock;
struct completion wait;
bool polling;
};
struct acpm_ipc_info {
unsigned int num_channels;
struct device *dev;
struct acpm_ipc_ch *channel;
unsigned int irq;
void __iomem *intr;
void __iomem *sram_base;
bool w_mode;
struct acpm_framework *initdata;
unsigned int initdata_base;
unsigned int intr_status;
};
struct acpm_debug_info {
unsigned int period;
void __iomem *time_index;
unsigned int num_timestamps;
unsigned long long *timestamps;
void __iomem *log_buff_rear;
void __iomem *log_buff_front;
void __iomem *log_buff_base;
unsigned int log_buff_len;
unsigned int log_buff_size;
void __iomem *dump_base;
unsigned int dump_size;
void __iomem *dump_dram_base;
unsigned int debug_log_level;
struct delayed_work periodic_work;
struct work_struct update_log_work;
spinlock_t lock;
};
#define LOG_ID_SHIFT (28)
#define LOG_TIME_INDEX (20)
#define LOG_LEVEL (19)
#define BUSY_WAIT (0)
#define SLEEP_WAIT (1)
#define INTGR0 0x0008
#define INTCR0 0x000C
#define INTMR0 0x0010
#define INTSR0 0x0014
#define INTMSR0 0x0018
#define INTGR1 0x001C
#define INTCR1 0x0020
#define INTMR1 0x0024
#define INTSR1 0x0028
#define INTMSR1 0x002C
#define SR0 0x0080
#define SR1 0x0084
#define SR2 0x0088
#define SR3 0x008C
#define IPC_TIMEOUT (15000000)
#define APM_PERITIMER_NS_PERIOD (10416)
#define UNTIL_EQUAL(arg0, arg1, flag) \
do { \
u64 timeout = sched_clock() + IPC_TIMEOUT; \
bool t_flag = true; \
do { \
if ((arg0) == (arg1)) { \
t_flag = false; \
break; \
} else { \
cpu_relax(); \
} \
} while (timeout >= sched_clock()); \
if (t_flag) { \
pr_err("%s %d Timeout error!\n", \
__func__, __LINE__); \
} \
(flag) = t_flag; \
} while(0)
#define REGULATOR_INFO_ID 8
extern void acpm_log_print(void);
extern void timestamp_write(void);
extern void acpm_ramdump(void);
extern void acpm_fw_log_level(unsigned int on);
extern void acpm_ipc_set_waiting_mode(bool mode);
#endif