/*
 * Copyright (C) 2014 Samsung Electronics Co.Ltd
 * http://www.samsung.com
 *
 * Shared Memory 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 SHMEM_IPC_H
#define SHMEM_IPC_H

struct shdmem_info {
	unsigned int base;
	unsigned int size;
};

unsigned long shm_get_phys_base(void);
unsigned shm_get_phys_size(void);
unsigned shm_get_boot_size(void);
unsigned shm_get_ipc_rgn_offset(void);
unsigned shm_get_ipc_rgn_size(void);
unsigned shm_get_zmb_size(void);
unsigned shm_get_vss_size(void);
unsigned shm_get_acpm_size(void);
unsigned shm_get_cp_size(void);
int shm_get_security_param2(unsigned long mode, u32 bl_size, unsigned long *param);
int shm_get_security_param3(unsigned long mode, u32 main_size, unsigned long *param);

void __iomem *shm_request_region(unsigned long sh_addr, unsigned size);
void __iomem *shm_get_boot_region(void);
void __iomem *shm_get_ipc_region(void);
void __iomem *shm_get_zmb_region(void);
void __iomem *shm_get_vss_region(void);
void __iomem *shm_get_acpm_region(void);

void shm_release_region(void *v_addr);
void shm_release_regions(void);
void clean_vss_magic_code(void);
int shm_get_use_cp_memory_map_flag(void);

#ifdef CONFIG_CP_RAM_LOGGING
unsigned long shm_get_cplog_base(void);
unsigned shm_get_cplog_size(void);
int shm_get_cplog_flag(void);
void __iomem *shm_get_cplog_region(void);
#endif

#endif
