1/* 2 * include/video/nvhdcp.h 3 * 4 * Copyright (c) 2010-2011, NVIDIA Corporation. 5 * 6 * This software is licensed under the terms of the GNU General Public 7 * License version 2, as published by the Free Software Foundation, and 8 * may be copied, distributed, and modified under those terms. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 */ 16 17#ifndef _LINUX_NVHDCP_H_ 18#define _LINUX_NVHDCP_H_ 19 20#include <linux/fb.h> 21#include <linux/types.h> 22#include <asm/ioctl.h> 23 24/* maximum receivers and repeaters connected at a time */ 25#define TEGRA_NVHDCP_MAX_DEVS 127 26 27/* values for value_flags */ 28#define TEGRA_NVHDCP_FLAG_AN 0x0001 29#define TEGRA_NVHDCP_FLAG_AKSV 0x0002 30#define TEGRA_NVHDCP_FLAG_BKSV 0x0004 31#define TEGRA_NVHDCP_FLAG_BSTATUS 0x0008 /* repeater status */ 32#define TEGRA_NVHDCP_FLAG_CN 0x0010 /* c_n */ 33#define TEGRA_NVHDCP_FLAG_CKSV 0x0020 /* c_ksv */ 34#define TEGRA_NVHDCP_FLAG_DKSV 0x0040 /* d_ksv */ 35#define TEGRA_NVHDCP_FLAG_KP 0x0080 /* k_prime */ 36#define TEGRA_NVHDCP_FLAG_S 0x0100 /* hdcp_status */ 37#define TEGRA_NVHDCP_FLAG_CS 0x0200 /* connection state */ 38#define TEGRA_NVHDCP_FLAG_V 0x0400 39#define TEGRA_NVHDCP_FLAG_MP 0x0800 40#define TEGRA_NVHDCP_FLAG_BKSVLIST 0x1000 41 42/* values for packet_results */ 43#define TEGRA_NVHDCP_RESULT_SUCCESS 0 44#define TEGRA_NVHDCP_RESULT_UNSUCCESSFUL 1 45#define TEGRA_NVHDCP_RESULT_PENDING 0x103 46#define TEGRA_NVHDCP_RESULT_LINK_FAILED 0xc0000013 47/* TODO: replace with -EINVAL */ 48#define TEGRA_NVHDCP_RESULT_INVALID_PARAMETER 0xc000000d 49#define TEGRA_NVHDCP_RESULT_INVALID_PARAMETER_MIX 0xc0000030 50/* TODO: replace with -ENOMEM */ 51#define TEGRA_NVHDCP_RESULT_NO_MEMORY 0xc0000017 52 53struct tegra_nvhdcp_packet { 54 __u32 value_flags; // (IN/OUT) 55 __u32 packet_results; // (OUT) 56 57 __u64 c_n; // (IN) upstream exchange number 58 __u64 c_ksv; // (IN) 59 60 __u32 b_status; // (OUT) link/repeater status 61 __u64 hdcp_status; // (OUT) READ_S 62 __u64 cs; // (OUT) Connection State 63 64 __u64 k_prime; // (OUT) 65 __u64 a_n; // (OUT) 66 __u64 a_ksv; // (OUT) 67 __u64 b_ksv; // (OUT) 68 __u64 d_ksv; // (OUT) 69 __u8 v_prime[20]; // (OUT) 160-bit 70 __u64 m_prime; // (OUT) 71 72 // (OUT) Valid KSVs in the bKsvList. Maximum is 127 devices 73 __u32 num_bksv_list; 74 75 // (OUT) Up to 127 receivers & repeaters 76 __u64 bksv_list[TEGRA_NVHDCP_MAX_DEVS]; 77}; 78 79/* parameters to TEGRAIO_NVHDCP_SET_POLICY */ 80#define TEGRA_NVHDCP_POLICY_ON_DEMAND 0 81#define TEGRA_NVHDCP_POLICY_ALWAYS_ON 1 82 83/* ioctls */ 84#define TEGRAIO_NVHDCP_ON _IO('F', 0x70) 85#define TEGRAIO_NVHDCP_OFF _IO('F', 0x71) 86#define TEGRAIO_NVHDCP_SET_POLICY _IOW('F', 0x72, __u32) 87#define TEGRAIO_NVHDCP_READ_M _IOWR('F', 0x73, struct tegra_nvhdcp_packet) 88#define TEGRAIO_NVHDCP_READ_S _IOWR('F', 0x74, struct tegra_nvhdcp_packet) 89#define TEGRAIO_NVHDCP_RENEGOTIATE _IO('F', 0x75) 90 91#endif 92