| /* |
| * Copyright (C) 2014 Intel Corporation. All rights reserved. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef __DRM_COMMON_API_H__ |
| #define __DRM_COMMON_API_H__ |
| |
| #include <inttypes.h> |
| |
| /* |
| * Maximum number of bytes for an audio or video data DMA. |
| */ |
| #define MAX_DMA_DATA_SIZE_IN_BYTES (4 * 1024 * 1024) |
| |
| /* |
| * The size of an AES Initialization Vector counter in bytes. |
| */ |
| #define AES_IV_COUNTER_SIZE_IN_BYTES 16 |
| |
| #define DRM_PLATCAP_IED 0x01 |
| #define DRM_PLATCAP_IMR 0x02 |
| #define DRM_PLATCAP_EPID 0x04 |
| #define DRM_PLATCAP_HDCP 0x08 |
| |
| // Secure clock transaction ID (TID) size in bytes. |
| #define DRM_TID_SIZE 16 |
| |
| #define MAX_RNG_SIZE_IN_BYTES (4 * 1024) |
| |
| // |
| // Secure clock time of day data type. |
| // day_of_month: starts with 1. |
| // month: 0 = January. |
| // year: Epoch is 70 (i.e., 1970). Maximum value is 138 (i.e., 2038). |
| // |
| struct time_of_day |
| { |
| uint8_t sec; |
| uint8_t min; |
| uint8_t hour; |
| uint8_t day_of_week; |
| uint8_t day_of_month; |
| uint8_t month; |
| uint8_t year; |
| uint8_t padding; |
| }; |
| |
| |
| // |
| // Secure clock server response data type. |
| // |
| struct drm_secureclock_server_response |
| { |
| uint8_t tid[DRM_TID_SIZE]; |
| struct time_of_day current_time; |
| struct time_of_day refresh_time; |
| uint8_t signature[256]; |
| }; |
| |
| |
| /* |
| * DRM Schemes |
| */ |
| /* |
| typedef enum { |
| DRM_SCHEME_Netflix, |
| DRM_SCHEME_Widevine, |
| DRM_SCHEME_WidevineHLS, |
| } drm_scheme_t; |
| */ |
| |
| |
| struct drm_platform_caps |
| { |
| uint32_t imr_size; |
| uint32_t reserved[15]; |
| }; |
| |
| |
| /* |
| * DRM Library Initialization |
| * Description: |
| * Initializes the security engine driver for DRM library use. |
| */ |
| uint32_t drm_library_init(void); |
| |
| /* |
| * @brief Writes random bytes into buffer |
| */ |
| uint32_t drm_get_random( |
| uint8_t *rand_num_buf, |
| uint32_t buf_size); |
| |
| /*! |
| * Create a DRM session |
| */ |
| uint32_t drm_create_session( |
| uint32_t drm_scheme, |
| uint32_t *sessionid_ptr); |
| |
| /*! |
| * Destroy the specified DRM session |
| */ |
| uint32_t drm_destroy_session( |
| uint32_t session_id); |
| |
| |
| /* |
| * Keeps an active DRM session from timing out |
| */ |
| uint32_t drm_keep_alive( |
| uint32_t session_id, |
| uint32_t *timeout); |
| |
| /* |
| * Query secure platform capabilities |
| */ |
| uint32_t drm_query_platformcapabilities( |
| uint32_t *plat_cap, |
| struct drm_platform_caps *cap_array); |
| |
| |
| /* |
| * @brief Pauses the playback of a video decryption session. |
| * @param session_id The ID number of the session to pause playback. |
| * @return DRM_SUCCESSFUL The video decryption session was paused. |
| */ |
| uint32_t drm_playback_pause( |
| uint32_t session_id); |
| |
| |
| /* |
| * @brief Resumes the playback of a paused video decryption session. |
| * @param session_id The ID number of the session to resume playback. |
| * @return DRM_SUCCESSFUL The video decryption session was resumed. |
| */ |
| uint32_t drm_playback_resume( |
| uint32_t session_id); |
| |
| |
| /*! |
| * @brief Enables protected video path for DRM playback |
| */ |
| uint32_t drm_start_playback(void); |
| |
| |
| /*! |
| * @brief - Disables protected video path for DRM |
| */ |
| uint32_t drm_stop_playback(void); |
| |
| #endif |