M7350/kernel/drivers/soc/qcom/memshare/heap_mem_ext_v01.h
2024-09-09 08:57:42 +00:00

357 lines
9.4 KiB
C

/* Copyright (c) 2013-2015, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* 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 HEAP_MEM_EXT_SERVICE_01_H
#define HEAP_MEM_EXT_SERVICE_01_H
#include <soc/qcom/msm_qmi_interface.h>
#define MEM_ALLOC_REQ_MAX_MSG_LEN_V01 255
#define MEM_FREE_REQ_MAX_MSG_LEN_V01 255
#define MAX_ARR_CNT_V01 64
struct dhms_mem_alloc_addr_info_type_v01 {
uint64_t phy_addr;
uint32_t num_bytes;
};
enum dhms_mem_proc_id_v01 {
/* To force a 32 bit signed enum. Do not change or use */
DHMS_MEM_PROC_ID_MIN_ENUM_VAL_V01 = -2147483647,
/* Request from MPSS processor */
DHMS_MEM_PROC_MPSS_V01 = 0,
/* Request from ADSP processor */
DHMS_MEM_PROC_ADSP_V01 = 1,
/* Request from WCNSS processor */
DHMS_MEM_PROC_WCNSS_V01 = 2,
/* To force a 32 bit signed enum. Do not change or use */
DHMS_MEM_PROC_ID_MAX_ENUM_VAL_V01 = 2147483647
};
enum dhms_mem_client_id_v01 {
/*To force a 32 bit signed enum. Do not change or use*/
DHMS_MEM_CLIENT_ID_MIN_ENUM_VAL_V01 = -2147483647,
/* Request from GPS Client */
DHMS_MEM_CLIENT_GPS_V01 = 0,
/* Invalid Client */
DHMS_MEM_CLIENT_INVALID = 1000,
/* To force a 32 bit signed enum. Do not change or use */
DHMS_MEM_CLIENT_ID_MAX_ENUM_VAL_V01 = 2147483647
};
enum dhms_mem_block_align_enum_v01 {
/* To force a 32 bit signed enum. Do not change or use
*/
DHMS_MEM_BLOCK_ALIGN_ENUM_MIN_ENUM_VAL_V01 = -2147483647,
/* Align allocated memory by 2 bytes */
DHMS_MEM_BLOCK_ALIGN_2_V01 = 0,
/* Align allocated memory by 4 bytes */
DHMS_MEM_BLOCK_ALIGN_4_V01 = 1,
/**< Align allocated memory by 8 bytes */
DHMS_MEM_BLOCK_ALIGN_8_V01 = 2,
/**< Align allocated memory by 16 bytes */
DHMS_MEM_BLOCK_ALIGN_16_V01 = 3,
/**< Align allocated memory by 32 bytes */
DHMS_MEM_BLOCK_ALIGN_32_V01 = 4,
/**< Align allocated memory by 64 bytes */
DHMS_MEM_BLOCK_ALIGN_64_V01 = 5,
/**< Align allocated memory by 128 bytes */
DHMS_MEM_BLOCK_ALIGN_128_V01 = 6,
/**< Align allocated memory by 256 bytes */
DHMS_MEM_BLOCK_ALIGN_256_V01 = 7,
/**< Align allocated memory by 512 bytes */
DHMS_MEM_BLOCK_ALIGN_512_V01 = 8,
/**< Align allocated memory by 1024 bytes */
DHMS_MEM_BLOCK_ALIGN_1K_V01 = 9,
/**< Align allocated memory by 2048 bytes */
DHMS_MEM_BLOCK_ALIGN_2K_V01 = 10,
/**< Align allocated memory by 4096 bytes */
DHMS_MEM_BLOCK_ALIGN_4K_V01 = 11,
DHMS_MEM_BLOCK_ALIGN_ENUM_MAX_ENUM_VAL_V01 = 2147483647
/* To force a 32 bit signed enum. Do not change or use
*/
};
/* Request Message; This command is used for getting
* the multiple physically contiguous
* memory blocks from the server memory subsystem
*/
struct mem_alloc_req_msg_v01 {
/* Mandatory */
/*requested size*/
uint32_t num_bytes;
/* Optional */
/* Must be set to true if block_alignment
* is being passed
*/
uint8_t block_alignment_valid;
/* The block alignment for the memory block to be allocated
*/
enum dhms_mem_block_align_enum_v01 block_alignment;
}; /* Message */
/* Response Message; This command is used for getting
* the multiple physically contiguous memory blocks
* from the server memory subsystem
*/
struct mem_alloc_resp_msg_v01 {
/* Mandatory */
/* Result Code */
/* The result of the requested memory operation
*/
enum qmi_result_type_v01 resp;
/* Optional */
/* Memory Block Handle
*/
/* Must be set to true if handle is being passed
*/
uint8_t handle_valid;
/* The physical address of the memory allocated on the HLOS
*/
uint64_t handle;
/* Optional */
/* Memory block size */
/* Must be set to true if num_bytes is being passed
*/
uint8_t num_bytes_valid;
/* The number of bytes actually allocated for the request.
* This value can be smaller than the size requested in
* QMI_DHMS_MEM_ALLOC_REQ_MSG.
*/
uint32_t num_bytes;
}; /* Message */
/* Request Message; This command is used for releasing
* the multiple physically contiguous
* memory blocks to the server memory subsystem
*/
struct mem_free_req_msg_v01 {
/* Mandatory */
/* Physical address of memory to be freed
*/
uint32_t handle;
}; /* Message */
/* Response Message; This command is used for releasing
* the multiple physically contiguous
* memory blocks to the server memory subsystem
*/
struct mem_free_resp_msg_v01 {
/* Mandatory */
/* Result of the requested memory operation, todo,
* need to check the async operation for free
*/
enum qmi_result_type_v01 resp;
}; /* Message */
/* Request Message; This command is used for getting
* the multiple physically contiguous
* memory blocks from the server memory subsystem
*/
struct mem_alloc_generic_req_msg_v01 {
/* Mandatory */
/*requested size*/
uint32_t num_bytes;
/* Mandatory */
/* client id */
enum dhms_mem_client_id_v01 client_id;
/* Mandatory */
/* Peripheral Id*/
enum dhms_mem_proc_id_v01 proc_id;
/* Mandatory */
/* Sequence id */
uint32_t sequence_id;
/* Optional */
/* alloc_contiguous */
/* Must be set to true if alloc_contiguous is being passed */
uint8_t alloc_contiguous_valid;
/* Alloc_contiguous is used to identify that clients are requesting
* for contiguous or non contiguous memory, default is contiguous
* 0 = non contiguous else contiguous
*/
uint8_t alloc_contiguous;
/* Optional */
/* Must be set to true if block_alignment
* is being passed
*/
uint8_t block_alignment_valid;
/* The block alignment for the memory block to be allocated
*/
enum dhms_mem_block_align_enum_v01 block_alignment;
}; /* Message */
/* Response Message; This command is used for getting
* the multiple physically contiguous memory blocks
* from the server memory subsystem
*/
struct mem_alloc_generic_resp_msg_v01 {
/* Mandatory */
/* Result Code */
/* The result of the requested memory operation
*/
struct qmi_response_type_v01 resp;
/* Optional */
/* Sequence ID */
/* Must be set to true if sequence_id is being passed */
uint8_t sequence_id_valid;
/* Mandatory */
/* Sequence id */
uint32_t sequence_id;
/* Optional */
/* Memory Block Handle
*/
/* Must be set to true if handle is being passed
*/
uint8_t dhms_mem_alloc_addr_info_valid;
/* Optional */
/* Handle Size */
uint32_t dhms_mem_alloc_addr_info_len;
/* Optional */
/* The physical address of the memory allocated on the HLOS
*/
struct dhms_mem_alloc_addr_info_type_v01
dhms_mem_alloc_addr_info[MAX_ARR_CNT_V01];
}; /* Message */
/* Request Message; This command is used for releasing
* the multiple physically contiguous
* memory blocks to the server memory subsystem
*/
struct mem_free_generic_req_msg_v01 {
/* Mandatory */
/* Must be set to # of elments in array*/
uint32_t dhms_mem_alloc_addr_info_len;
/* Mandatory */
/* Physical address and size of the memory allocated
* on the HLOS to be freed.
*/
struct dhms_mem_alloc_addr_info_type_v01
dhms_mem_alloc_addr_info[MAX_ARR_CNT_V01];
/* Optional */
/* Client ID */
/* Must be set to true if client_id is being passed */
uint8_t client_id_valid;
/* Optional */
/* Client Id */
enum dhms_mem_client_id_v01 client_id;
/* Optional */
/* Proc ID */
/* Must be set to true if proc_id is being passed */
uint8_t proc_id_valid;
/* Optional */
/* Peripheral */
enum dhms_mem_proc_id_v01 proc_id;
}; /* Message */
/* Response Message; This command is used for releasing
* the multiple physically contiguous
* memory blocks to the server memory subsystem
*/
struct mem_free_generic_resp_msg_v01 {
/*
* Mandatory
* Result of the requested memory operation, todo,
* need to check the async operation for free
*/
struct qmi_response_type_v01 resp;
}; /* Message */
struct mem_query_size_req_msg_v01 {
/* Mandatory */
enum dhms_mem_client_id_v01 client_id;
/*
* Optional
* Proc ID
* proc_id_valid must be set to true if proc_id is being passed
*/
uint8_t proc_id_valid;
enum dhms_mem_proc_id_v01 proc_id;
}; /* Message */
struct mem_query_size_rsp_msg_v01 {
/*
* Mandatory
* Result Code
*/
struct qmi_response_type_v01 resp;
/*
* Optional
* size_valid must be set to true if size is being passed
*/
uint8_t size_valid;
uint32_t size;
}; /* Message */
extern struct elem_info mem_alloc_req_msg_data_v01_ei[];
extern struct elem_info mem_alloc_resp_msg_data_v01_ei[];
extern struct elem_info mem_free_req_msg_data_v01_ei[];
extern struct elem_info mem_free_resp_msg_data_v01_ei[];
extern struct elem_info mem_alloc_generic_req_msg_data_v01_ei[];
extern struct elem_info mem_alloc_generic_resp_msg_data_v01_ei[];
extern struct elem_info mem_free_generic_req_msg_data_v01_ei[];
extern struct elem_info mem_free_generic_resp_msg_data_v01_ei[];
extern struct elem_info mem_query_size_req_msg_data_v01_ei[];
extern struct elem_info mem_query_size_resp_msg_data_v01_ei[];
/*Service Message Definition*/
#define MEM_ALLOC_REQ_MSG_V01 0x0020
#define MEM_ALLOC_RESP_MSG_V01 0x0020
#define MEM_FREE_REQ_MSG_V01 0x0021
#define MEM_FREE_RESP_MSG_V01 0x0021
#define MEM_ALLOC_GENERIC_REQ_MSG_V01 0x0022
#define MEM_ALLOC_GENERIC_RESP_MSG_V01 0x0022
#define MEM_FREE_GENERIC_REQ_MSG_V01 0x0023
#define MEM_FREE_GENERIC_RESP_MSG_V01 0x0023
#define MEM_QUERY_SIZE_REQ_MSG_V01 0x0024
#define MEM_QUERY_SIZE_RESP_MSG_V01 0x0024
#endif