123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356 |
- /* Copyright (c) 2013-2015, 2017, 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
|