Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e6a8a00f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Create drm 1.1 HAL"

parents cd6ecaa9 1637e00b
Loading
Loading
Loading
Loading

drm/1.1/Android.bp

0 → 100644
+25 −0
Original line number Original line Diff line number Diff line
// This file is autogenerated by hidl-gen -Landroidbp.

hidl_interface {
    name: "android.hardware.drm@1.1",
    root: "android.hardware",
    vndk: {
        enabled: true,
    },
    srcs: [
        "types.hal",
        "ICryptoFactory.hal",
        "IDrmFactory.hal",
        "IDrmPlugin.hal",
    ],
    interfaces: [
        "android.hardware.drm@1.0",
        "android.hidl.base@1.0",
    ],
    types: [
        "HdcpLevel",
        "SecurityLevel",
    ],
    gen_java: false,
}
+33 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * 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.
 */
package android.hardware.drm@1.1;

import @1.0::ICryptoFactory;
import @1.0::ICryptoPlugin;

/**
 * ICryptoFactory is the main entry point for interacting with a vendor's
 * crypto HAL to create crypto plugins. Crypto plugins create crypto sessions
 * which are used by a codec to decrypt protected video content.
 *
 * The 1.1 factory must always create 1.1 ICryptoPlugin interfaces, which are
 * returned via the 1.0 createPlugin method.
 *
 * To use 1.1 features the caller must cast the returned interface to a
 * 1.1 HAL, using V1_1::ICryptoPlugin::castFrom().
 */
interface ICryptoFactory extends @1.0::ICryptoFactory {
};
+35 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * 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.
 */
package android.hardware.drm@1.1;

import @1.0::IDrmFactory;
import @1.0::IDrmPlugin;

/**
 * IDrmFactory is the main entry point for interacting with a vendor's
 * drm HAL to create drm plugin instances. A drm plugin instance
 * creates drm sessions which are used to obtain keys for a crypto
 * session so it can decrypt protected video content.
 *
 * The 1.1 factory must always create 1.1 IDrmPlugin interfaces, which are
 * returned via the 1.0 createPlugin method.
 *
 * To use 1.1 features the caller must cast the returned interface to a
 * 1.1 HAL, using V1_1::IDrmPlugin::castFrom().
 */

interface IDrmFactory extends @1.0::IDrmFactory {
};

drm/1.1/IDrmPlugin.hal

0 → 100644
+109 −0
Original line number Original line Diff line number Diff line
/**
 * Copyright (C) 2017 The Android Open Source Project
 *
 * 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.
 */
package android.hardware.drm@1.1;

import @1.0::IDrmPlugin;
import @1.0::IDrmPluginListener;
import @1.0::Status;
import @1.1::HdcpLevel;
import @1.1::SecurityLevel;

/**
 * IDrmPlugin is used to interact with a specific drm plugin that was created by
 * IDrm::createPlugin. A drm plugin provides methods for obtaining drm keys that
 * may be used by a codec to decrypt protected video content.
 */
interface IDrmPlugin extends @1.0::IDrmPlugin {
    /**
     * Return the currently negotiated and max supported HDCP levels.
     *
     * The current level is based on the display(s) the device is connected to.
     * If multiple HDCP-capable displays are simultaneously connected to
     * separate interfaces, this method returns the lowest negotiated HDCP level
     * of all interfaces.
     *
     * The maximum HDCP level is the highest level that can potentially be
     * negotiated. It is a constant for any device, i.e. it does not depend on
     * downstream receiving devices that could be connected. For example, if
     * the device has HDCP 1.x keys and is capable of negotiating HDCP 1.x, but
     * does not have HDCP 2.x keys, then the maximum HDCP capability would be
     * reported as 1.x. If multiple HDCP-capable interfaces are present, it
     * indicates the highest of the maximum HDCP levels of all interfaces.
     *
     * This method should only be used for informational purposes, not for
     * enforcing compliance with HDCP requirements. Trusted enforcement of HDCP
     * policies must be handled by the DRM system.
     *
     * @return status the status of the call. The status must be OK or
     *         ERROR_DRM_INVALID_STATE if the HAL is in a state where the HDCP
     *         level cannot be queried.
     * @return connectedLevel the lowest HDCP level for any connected
     *         displays
     * @return maxLevel the highest HDCP level that can be supported
     *         by the device
     */
    getHdcpLevels() generates (Status status, HdcpLevel connectedLevel,
            HdcpLevel maxLevel);

    /**
     * Return the current number of open sessions and the maximum number of
     * sessions that may be opened simultaneosly among all DRM instances for the
     * active DRM scheme.
     *
     * @return status the status of the call. The status must be OK or
     *         ERROR_DRM_INVALID_STATE if the HAL is in a state where number of
     *         sessions cannot be queried.
     * @return currentSessions the number of currently opened sessions
     * @return maxSessions the maximum number of sessions that the device
     *         can support
     */
    getNumberOfSessions() generates (Status status, uint32_t currentSessions,
             uint32_t maxSessions);

    /**
     * Return the current security level of a session. A session has an initial
     * security level determined by the robustness of the DRM system's
     * implementation on the device.
     *
     * @param sessionId the session id the call applies to
     * @return status the status of the call. The status must be OK or one of
     *         the following errors: ERROR_DRM_SESSION_NOT_OPENED if the
     *         session is not opened, BAD_VALUE if the sessionId is invalid or
     *         ERROR_DRM_INVALID_STATE if the HAL is in a state where the
     *         security level cannot be queried.
     * @return level the current security level for the session
     */
    getSecurityLevel(vec<uint8_t> sessionId) generates(Status status,
            SecurityLevel level);

    /**
     * Set the security level of a session. This can be useful if specific
     * attributes of a lower security level are needed by an application, such
     * as image manipulation or compositing which requires non-secure decoded
     * frames. Reducing the security level may limit decryption to lower content
     * resolutions, depending on the license policy.
     *
     * @param sessionId the session id the call applies to
     * @param level the requested security level
     * @return status the status of the call. The status must be OK or one of
     *         the following errors: ERROR_DRM_SESSION_NOT_OPENED if the session
     *         is not opened, BAD_VALUE if the sessionId or security level is
     *         invalid or ERROR_DRM_INVALID_STATE if the HAL is in a state where
     *         the security level cannot be set.
     */
    setSecurityLevel(vec<uint8_t> sessionId, SecurityLevel level)
            generates(Status status);
};

drm/1.1/types.hal

0 → 100644
+95 −0
Original line number Original line Diff line number Diff line
/**
 * Copyright (C) 2017 The Android Open Source Project
 *
 * 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.
 */

package android.hardware.drm@1.1;

/**
 * HDCP specifications are defined by Digital Content Protection LLC (DCP).
 *   "HDCP Specification Rev. 2.2 Interface Independent Adaptation"
 *   "HDCP 2.2 on HDMI Specification"
 */
enum HdcpLevel : uint32_t {
    /**
     * Unable to determine the HDCP level
     */
    HDCP_UNKNOWN,

    /**
     * No HDCP, output is unprotected
     */
    HDCP_NONE,

    /**
     * HDCP version 1.0
     */
    HDCP_V1,

    /**
     * HDCP version 2.0 Type 1.
     */
    HDCP_V2,

    /**
     * HDCP version 2.1 Type 1.
     */
    HDCP_V2_1,

    /**
     *  HDCP version 2.2 Type 1.
     */
    HDCP_V2_2,

    /**
     * No digital output, implicitly secure
     */
    HDCP_NO_OUTPUT
};

enum SecurityLevel : uint32_t {
    /**
     * Unable to determine the security level
     */
    UNKNOWN,

    /**
     * Software-based whitebox crypto
     */
    SW_SECURE_CRYPTO,

    /**
     * Software-based whitebox crypto and an obfuscated decoder
     */
    SW_SECURE_DECODE,

    /**
     * DRM key management and crypto operations are performed within a
     * hardware backed trusted execution environment
     */
    HW_SECURE_CRYPTO,

    /**
     * DRM key management, crypto operations and decoding of content
     * are performed within a hardware backed trusted execution environment
     */
    HW_SECURE_DECODE,

    /**
     * DRM key management, crypto operations, decoding of content and all
     * handling of the media (compressed and uncompressed) is handled within
     * a hardware backed trusted execution environment.
     */
    HW_SECURE_ALL,
};