/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2013-2020, The Linux Foundation. All rights reserved. * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved. */ #ifndef _LINUX_MEM_SHARE_H #define _LINUX_MEM_SHARE_H #define MEM_SHARE_SERVICE_SVC_ID 0x00000034 #define MEM_SHARE_SERVICE_INS_ID 1 #define MEM_SHARE_SERVICE_VERS 1 #define MEMORY_CMA 1 #define MEMORY_NON_CMA 0 #define MAX_CLIENTS 10 #define GPS 0 #define CHECK 0 #define FREE 1 #define MEMSHARE_GUARD_BYTES (4*1024) struct memshare_hyp_mapping { u32 num_vmids; u32 vmids[2]; u32 perms[2]; }; struct mem_blocks { /* Client Id information */ uint32_t client_id; /* Peripheral associated with client */ uint32_t peripheral; /* Sequence Id */ uint32_t sequence_id; /* CMA or Non-CMA region */ uint32_t memory_type; /* Guaranteed Memory */ uint32_t guarantee; /* Memory alloted or not */ uint32_t allotted; /* Memory allocation request received or not */ uint32_t alloc_request; /* Allocation on request from a client*/ uint32_t client_request; /* Guard band around the allotted region*/ uint32_t guard_band; /* mapping to be assigned to memory region */ struct memshare_hyp_mapping hyp_map_info; /* Size required for client */ uint32_t size; /* Available memory size for client */ uint32_t init_size; /* * start address of the memory block reserved by server memory * subsystem to client */ phys_addr_t phy_addr; /* Virtual address for the physical address allocated */ void *virtual_addr; /* Release memory only when XPU is released*/ uint8_t free_memory; /* Need Hypervisor mapping*/ uint8_t hyp_mapping; }; int memshare_alloc(struct device *dev, unsigned int block_size, struct mem_blocks *pblk); void memshare_free(unsigned int block_size, struct mem_blocks *pblk); #endif /* _LINUX_MEM_SHARE_H */