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