1 /* 2 * Copyright (C) 2014 Intel Corporation. All rights reserved. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef __DRM_COMMON_API_H__ 18 #define __DRM_COMMON_API_H__ 19 20 #include <inttypes.h> 21 22 /* 23 * Maximum number of bytes for an audio or video data DMA. 24 */ 25 #define MAX_DMA_DATA_SIZE_IN_BYTES (4 * 1024 * 1024) 26 27 /* 28 * The size of an AES Initialization Vector counter in bytes. 29 */ 30 #define AES_IV_COUNTER_SIZE_IN_BYTES 16 31 32 #define DRM_PLATCAP_IED 0x01 33 #define DRM_PLATCAP_IMR 0x02 34 #define DRM_PLATCAP_EPID 0x04 35 #define DRM_PLATCAP_HDCP 0x08 36 37 // Secure clock transaction ID (TID) size in bytes. 38 #define DRM_TID_SIZE 16 39 40 #define MAX_RNG_SIZE_IN_BYTES (4 * 1024) 41 42 // 43 // Secure clock time of day data type. 44 // day_of_month: starts with 1. 45 // month: 0 = January. 46 // year: Epoch is 70 (i.e., 1970). Maximum value is 138 (i.e., 2038). 47 // 48 struct time_of_day 49 { 50 uint8_t sec; 51 uint8_t min; 52 uint8_t hour; 53 uint8_t day_of_week; 54 uint8_t day_of_month; 55 uint8_t month; 56 uint8_t year; 57 uint8_t padding; 58 }; 59 60 61 // 62 // Secure clock server response data type. 63 // 64 struct drm_secureclock_server_response 65 { 66 uint8_t tid[DRM_TID_SIZE]; 67 struct time_of_day current_time; 68 struct time_of_day refresh_time; 69 uint8_t signature[256]; 70 }; 71 72 73 /* 74 * DRM Schemes 75 */ 76 /* 77 typedef enum { 78 DRM_SCHEME_Netflix, 79 DRM_SCHEME_Widevine, 80 DRM_SCHEME_WidevineHLS, 81 } drm_scheme_t; 82 */ 83 84 85 struct drm_platform_caps 86 { 87 uint32_t imr_size; 88 uint32_t reserved[15]; 89 }; 90 91 92 /* 93 * DRM Library Initialization 94 * Description: 95 * Initializes the security engine driver for DRM library use. 96 */ 97 uint32_t drm_library_init(void); 98 99 /* 100 * @brief Writes random bytes into buffer 101 */ 102 uint32_t drm_get_random( 103 uint8_t *rand_num_buf, 104 uint32_t buf_size); 105 106 /*! 107 * Create a DRM session 108 */ 109 uint32_t drm_create_session( 110 uint32_t drm_scheme, 111 uint32_t *sessionid_ptr); 112 113 /*! 114 * Destroy the specified DRM session 115 */ 116 uint32_t drm_destroy_session( 117 uint32_t session_id); 118 119 120 /* 121 * Keeps an active DRM session from timing out 122 */ 123 uint32_t drm_keep_alive( 124 uint32_t session_id, 125 uint32_t *timeout); 126 127 /* 128 * Query secure platform capabilities 129 */ 130 uint32_t drm_query_platformcapabilities( 131 uint32_t *plat_cap, 132 struct drm_platform_caps *cap_array); 133 134 135 /* 136 * @brief Pauses the playback of a video decryption session. 137 * @param session_id The ID number of the session to pause playback. 138 * @return DRM_SUCCESSFUL The video decryption session was paused. 139 */ 140 uint32_t drm_playback_pause( 141 uint32_t session_id); 142 143 144 /* 145 * @brief Resumes the playback of a paused video decryption session. 146 * @param session_id The ID number of the session to resume playback. 147 * @return DRM_SUCCESSFUL The video decryption session was resumed. 148 */ 149 uint32_t drm_playback_resume( 150 uint32_t session_id); 151 152 153 /*! 154 * @brief Enables protected video path for DRM playback 155 */ 156 uint32_t drm_start_playback(void); 157 158 159 /*! 160 * @brief - Disables protected video path for DRM 161 */ 162 uint32_t drm_stop_playback(void); 163 164 #endif 165