blob: 44d7bc232812f2c36c92b9237de452caa8d11e81 [file] [log] [blame]
Thierry Strudel58ab4ce2014-09-25 22:01:08 -07001/*
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//
48struct 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//
64struct 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
85struct 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 */
97uint32_t drm_library_init(void);
98
99/*
100 * @brief Writes random bytes into buffer
101 */
102uint32_t drm_get_random(
103 uint8_t *rand_num_buf,
104 uint32_t buf_size);
105
106/*!
107 * Create a DRM session
108 */
109uint32_t drm_create_session(
110 uint32_t drm_scheme,
111 uint32_t *sessionid_ptr);
112
113/*!
114 * Destroy the specified DRM session
115 */
116uint32_t drm_destroy_session(
117 uint32_t session_id);
118
119
120/*
121 * Keeps an active DRM session from timing out
122 */
123uint32_t drm_keep_alive(
124 uint32_t session_id,
125 uint32_t *timeout);
126
127/*
128 * Query secure platform capabilities
129 */
130uint32_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 */
140uint32_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 */
149uint32_t drm_playback_resume(
150 uint32_t session_id);
151
152
153/*!
154 * @brief Enables protected video path for DRM playback
155 */
156uint32_t drm_start_playback(void);
157
158
159/*!
160 * @brief - Disables protected video path for DRM
161 */
162uint32_t drm_stop_playback(void);
163
164#endif