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 53 struct 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