// Copyright (C) 2020 Amlogic, Inc. All rights reserved. // // All information contained herein is Amlogic confidential. // // This software is provided to you pursuant to Software License // Agreement (SLA) with Amlogic Inc ("Amlogic"). This software may be // used only in accordance with the terms of this agreement. // // Redistribution and use in source and binary forms, with or without // modification is strictly prohibited without prior written permission // from Amlogic. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef _SECMEM_CA_H_ #define _SECMEM_CA_H_ #include #include #include #ifdef __cplusplus extern "C" { #endif #define FLAG_(x, mask, shift) ((x & (mask)) << shift) #define SECMEM_V2_FLAGS_TVP(x) FLAG_(x, 0xF, 0) #define SECMEM_V2_FLAGS_CODEC(x) FLAG_(x, 0xF, 4) #define SECMEM_V2_FLAGS_VD_INDEX(x) FLAG_(x, 0xF, 9) #define SECMEM_V2_FLAGS_USAGE(x) FLAG_(x, 0x7, 13) #define SECMEM_V2_FLAGS_MEM_LEVEL(x) FLAG_(x, 0xF, 17) #define Secure_V2_MemFillByPaddr(...) (0) /** * Common API */ unsigned int Secure_GetSecmemSize(void); unsigned int Secure_GetVersion(void); unsigned int Secure_NegotiateVersion(unsigned int expected); unsigned int Secure_GetBufferConfig(uint32_t *count, uint32_t *size); unsigned int Secure_GetResourceAvail(unsigned int *resource_free, unsigned int *resource_available); /** * V1 API */ unsigned int Secure_AllocSecureMem(unsigned int length, unsigned int tvp_set); unsigned int Secure_ReleaseResource(void); unsigned int Secure_GetCsdDataDrmInfo(unsigned int src_csd_addr, unsigned int csd_len, unsigned int* store_csd_phyaddr, unsigned int* store_csd_size, unsigned int overwrite); unsigned int Secure_GetPadding(unsigned int* pad_addr, unsigned int* pad_size, unsigned int pad_type); unsigned int Secure_GetVp9HeaderSize(void *src, unsigned int size, unsigned int *header_size); /** * V2 API */ unsigned int Secure_V2_SessionCreate(void **sess); unsigned int Secure_V2_SessionDestroy(void **sess); unsigned int Secure_V2_Init(void *sess, uint32_t source, uint32_t flags, uint32_t paddr, uint32_t size); unsigned int Secure_V2_MemCreate(void *sess, uint32_t *handle); unsigned int Secure_V2_MemAlloc(void *sess, uint32_t handle, uint32_t size, uint32_t *phyaddr); unsigned int Secure_V2_MemToPhy(void *sess, uint32_t handle, uint32_t *phyaddr); unsigned int Secure_V2_MemFill(void *sess, uint32_t handle, uint32_t offset, uint8_t *buffer, uint32_t size); unsigned int Secure_V2_MemCopy(void *sess, uint32_t out_handle, uint32_t in_handle, uint32_t ranges, uint32_t dst_offset[], uint32_t src_offset[], uint32_t size[]); unsigned int Secure_V2_MemCopy_ByHandleWithoutRelease(void *sess, uint32_t out_handle, uint32_t in_handle, uint32_t ranges, uint32_t dst_offset[], uint32_t src_offset[], uint32_t size[]); unsigned int Secure_V2_MemCopyPhy(uint32_t dst_handle, uint32_t dst_offset, uint32_t src_phyaddr, uint32_t src_offset, uint32_t size); unsigned int Secure_V2_MemCheck(void *sess, uint32_t handle, uint8_t *buffer, uint32_t len); unsigned int Secure_V2_MemExport(void *sess, uint32_t handle, int *fd, uint32_t *maxsize); unsigned int Secure_V2_MemAllocDMA(void *sess, uint32_t size, int *fd, uint32_t *handle, uint32_t *maxsize); unsigned int Secure_V2_FdToHandle(void *sess, int fd); unsigned int Secure_V2_FdToPaddr(void *sess, int fd); unsigned int Secure_V2_MemFree(void *sess, uint32_t handle); unsigned int Secure_V2_MemRelease(void *sess, uint32_t handle); unsigned int Secure_V2_MemFlush(void *sess); unsigned int Secure_V2_MemClear(void *sess); unsigned int Secure_V2_SetCsdData(void*sess, unsigned char *csd, unsigned int csd_len); unsigned int Secure_V2_GetCsdDataDrmInfo(void *sess, unsigned int src_csd_addr, unsigned int csd_len, unsigned int *store_csd_phyaddr, unsigned int *store_csd_size, unsigned int overwrite); unsigned int Secure_V2_GetPadding(void *sess, unsigned int* pad_addr, unsigned int *pad_size, unsigned int pad_type); unsigned int Secure_V2_GetVp9HeaderSize(void *sess, void *src, unsigned int size, unsigned int *header_size, uint32_t *frames); unsigned int Secure_V2_GetFrameInformation(void *sess, void *src, signed int size, unsigned int *header_size, uint32_t *frames, uint32_t *frame_count); unsigned int Secure_V2_MergeCsdDataDrmInfo(void *sess, uint32_t *phyaddr, uint32_t *csd_len); unsigned int Secure_V2_MergeCsdData(void *sess, uint32_t handle, uint32_t *csd_len); unsigned int Secure_V2_Parse(void *sess, uint32_t type, uint32_t handle, uint8_t *buffer, uint32_t size, uint32_t *flag); unsigned int Secure_V2_ResourceAlloc(void *sess, uint32_t* phyaddr, uint32_t *size); unsigned int Secure_V2_ResourceFree(void *sess); unsigned int Secure_V2_BindTVP(void *sess, uint32_t cas_id); unsigned int Secure_V2_AudioValid(void *sess, void *src, // secure source phyaddr unsigned int size, //secure packet size unsigned int aud_type, // audio format AUD_VALID_TYPE unsigned char *aud_buf, // nonsecure output buf unsigned int buf_max_size); // aud_buf total size unsigned int Secure_V2_GetSecmemSize(void *sess, unsigned int *mem_capacity, unsigned int *mem_available, unsigned int *handle_capacity, unsigned int *handle_available); unsigned int Secure_V2_InitSecurePool(void *sess, uint32_t vd_index, uint32_t usage, uint32_t flags, int fd); unsigned int Secure_V2_EnableTVPMemory(void *sess, uint32_t flags); unsigned int Secure_V2_DestroySecurePool(void *sess); unsigned int Secure_V2_UpdateFrameInfo(void *sess, uint32_t codec, int fd, uint32_t flags, uint32_t *size); unsigned int Secure_V2_GetFreeBlockCount(void *sess, uint32_t handle, uint32_t frame_size, uint32_t *block_count, uint32_t *block_free_count); unsigned int Secure_V2_PoolFlush(void *sess); unsigned int Secure_V2_ProbeProgram(void *sess, uint32_t handle, uint32_t size, uint32_t* program_count, // Input the number of buffers and output the actual number of programs sec_ts_program_t* program_list); unsigned int Secure_V2_GetStreamInfo(void *sess, uint32_t handle, uint32_t size, uint32_t* program_pid, // input and output uint32_t* stream_count, // Input the number of buffers and output the actual number of streams sec_ts_component_t* stream_list); unsigned int Secure_V2_FindPtsOffset(void *sess, uint32_t handle, uint32_t size, uint64_t* pts, // input and output uint32_t stream_type, int32_t* offset); unsigned int Secure_V2_AudioValidByFd(void *sess, int fd, unsigned int size, unsigned int type, unsigned char *out, unsigned int outsize); /* * Sideband API */ unsigned int Secure_SetHandle(uint32_t handle); unsigned int Secure_GetHandle(uint32_t *handle); /** * V3 API */ #define SECMEM_V3_FLAGS_TVP(x) FLAG_(x, 0xF, 0) #define SECMEM_V3_FLAGS_CODEC(x) FLAG_(x, 0xF, 4) #define SECMEM_V3_FLAGS_VD_INDEX(x) FLAG_(x, 0xF, 9) #define SECMEM_V3_FLAGS_USAGE(x) FLAG_(x, 0x7, 13) #define SECMEM_V3_FLAGS_MEM_LEVEL(x) FLAG_(x, 0xF, 17) uint32_t Secure_V3_SessionCreate(void **sess); uint32_t Secure_V3_SessionDestroy(void **sess); uint32_t Secure_V3_Enforcement(void *sess, uint32_t *enforcement); uint32_t Secure_V3_Init(void *sess, uint64_t source, uint64_t flags, uint64_t paddr, uint64_t size); uint32_t Secure_V3_MemCreate(void *sess, uint64_t *handle); uint32_t Secure_V3_MemPeek(void *sess, uint64_t *handle); uint32_t Secure_V3_MemAlloc(void *sess, uint64_t handle, uint64_t size, uint64_t *phyaddr); uint32_t Secure_V3_MemToPhy(void *sess, uint64_t handle, uint64_t *phyaddr); uint32_t Secure_V3_MemFill(void *sess, uint64_t handle, uint64_t offset, uint8_t *buffer, uint64_t size); uint32_t Secure_V3_MemCopy(void *sess, uint64_t out_handle, uint64_t in_handle, uint32_t ranges, uint64_t dst_offset[], uint64_t src_offset[], uint64_t size[]); uint32_t Secure_V3_MemCopyPhy(uint64_t dst_handle, uint64_t dst_offset, uint64_t src_phyaddr, uint64_t src_offset, uint64_t size); uint32_t Secure_V3_MemCheck(void *sess, uint64_t handle, uint8_t *buffer, uint64_t len); uint32_t Secure_V3_MemExport(void *sess, uint64_t handle, int *fd, uint64_t *maxsize); uint32_t Secure_V3_MemAllocDMA(void *sess, uint64_t size, int *fd, uint64_t *handle, uint64_t *maxsize); uint32_t Secure_V3_FdToHandle(void *sess, int fd); uint32_t Secure_V3_FdToPaddr(void *sess, int fd); uint32_t Secure_V3_MemPop(void *sess); uint32_t Secure_V3_MemFree(void *sess, uint64_t handle); uint32_t Secure_V3_MemRelease(void *sess, uint64_t handle); uint32_t Secure_V3_MemFlush(void *sess); uint32_t Secure_V3_MemClear(void *sess); uint32_t Secure_V3_Statistic(void *sess, uint8_t* buffer, uint32_t size); uint32_t Secure_V3_ShowResourceUsage(uint8_t *buffer, uint32_t size); uint32_t Secure_V3_SetCsdData(void*sess, uint8_t *csd, uint32_t csd_len); uint32_t Secure_V3_GetCsdDataDrmInfo(void *sess, uint64_t src_csd_addr, uint64_t csd_len, uint64_t *store_csd_phyaddr, uint64_t *store_csd_size, uint64_t overwrite); uint32_t Secure_V3_GetPadding(void *sess, uint64_t* pad_addr, uint32_t *pad_size, uint32_t pad_type); uint32_t Secure_V3_GetVp9HeaderSize(void *sess, void *src, uint64_t size, uint64_t *header_size, uint32_t *frames); uint32_t Secure_V3_GetFrameInformation(void *sess, void *src, uint64_t size, uint64_t *header_size, uint32_t *frames, uint64_t *frame_count); uint32_t Secure_V3_MergeCsdDataDrmInfo(void *sess, uint64_t *phyaddr, uint32_t *csd_len); uint32_t Secure_V3_MergeCsdData(void *sess, uint64_t handle, uint64_t *csd_len); uint32_t Secure_V3_Parse(void *sess, uint32_t type, uint64_t handle, uint8_t *buffer, uint64_t size, uint64_t *flag); uint32_t Secure_V3_ResourceAlloc(void *sess, uint64_t* phyaddr, uint64_t *size); uint32_t Secure_V3_ResourceFree(void *sess); uint32_t Secure_V3_BindTVP(void *sess, uint32_t cas_id); uint32_t Secure_V3_AudioValid(void *sess, void *src, // secure source phyaddr uint64_t size, //secure packet size uint32_t aud_type, // audio format AUD_VALID_TYPE uint8_t *aud_buf, // nonsecure output buf uint64_t buf_max_size); // aud_buf total size uint32_t Secure_V3_GetSecmemSize(void *sess, uint64_t *mem_capacity, uint64_t *mem_available, uint32_t *handle_capacity, uint32_t *handle_available); uint32_t Secure_V3_InitSecurePool(void *sess, uint64_t vd_index, uint64_t usage, uint64_t flags, int fd); uint32_t Secure_V3_EnableTVPMemory(void *sess, uint64_t flags); uint32_t Secure_V3_DestroySecurePool(void *sess); uint32_t Secure_V3_UpdateFrameInfo(void *sess, uint32_t codec, int fd, uint64_t flags, uint64_t *size); uint32_t Secure_V3_GetFreeBlockCount(void *sess, int fd, uint64_t frame_size, uint32_t *block_count, uint32_t *block_free_count); uint32_t Secure_V3_PoolFlush(void *sess); uint32_t Secure_V3_GetVersion(void); uint32_t Secure_V3_GetResourceAddressAndSize(uint64_t *resource_address, uint32_t *resource_size); uint32_t Secure_V3_ProbeProgram(void *sess, uint64_t handle, uint64_t size, uint32_t* program_count, // Input the number of buffers and output the actual number of programs sec_ts_program_t* program_list); uint32_t Secure_V3_GetStreamInfo(void *sess, uint64_t handle, uint64_t size, uint32_t* program_pid, // input and output uint32_t* stream_count, // Input the number of buffers and output the actual number of streams sec_ts_component_t* stream_list); uint32_t Secure_V3_FindPtsOffset(void *sess, uint64_t handle, uint64_t size, uint64_t* pts, // input and output uint32_t stream_type, int32_t* offset); uint32_t Secure_V3_AudioValidByFd(void *sess, int fd, uint64_t size, uint32_t type, uint8_t *out, uint32_t outsize); /* * Sideband API */ uint32_t Secure_V3_SetHandle(uint64_t handle); uint32_t Secure_V3_GetHandle(uint64_t *handle); /* * Dsc API */ int Dsc_SetTsnSource(const char *tsn_path, const char *tsn_from); int Dsc_OpenDev(void **secmem_sess, uint32_t dsc_dev_id); int Dsc_CloseDev(void **secmem_sess, uint32_t dsc_dev_id); int Dsc_CreateSession(void *secmem_sess, uint32_t session_token, uint32_t dsc_dev_id); int Dsc_ReleaseSession(void *secmem_sess, uint32_t session_token); int Dsc_GetSessionInfo(void *secmem_sess, uint32_t session_token); int Dsc_AllocChannel(void *secmem_sess, uint32_t session_token, uint32_t es_pid); int Dsc_FreeChannel(void *secmem_sess, uint32_t session_token, uint32_t es_pid); #ifdef __cplusplus } #endif #endif /* _SECMEM_CA_H_ */