xref: /OK3568_Linux_fs/kernel/include/uapi/misc/dw_hdcp2.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2 /*
3  * Rockchip HDCP Host Library driver
4  *
5  * Copyright (C) 2022 Rockchip Electronics Co., Ltd
6  */
7 
8 #ifndef _DW_HDCP_HOST_LIB_DRIVER_LINUX_IF_H_
9 #define _DW_HDCP_HOST_LIB_DRIVER_LINUX_IF_H_
10 
11 #include <linux/ioctl.h>
12 #include <linux/types.h>
13 
14 #define HL_DRIVER_ALLOCATE_DYNAMIC_MEM 0xffffffff
15 /* hl_drv_ioctl numbers */
16 enum {
17 	HL_DRV_NR_MIN = 0x10,
18 	HL_DRV_NR_INIT,
19 	HL_DRV_NR_MEMINFO,
20 	HL_DRV_NR_LOAD_CODE,
21 	HL_DRV_NR_READ_DATA,
22 	HL_DRV_NR_WRITE_DATA,
23 	HL_DRV_NR_MEMSET_DATA,
24 	HL_DRV_NR_READ_HPI,
25 	HL_DRV_NR_WRITE_HPI,
26 
27 	RK_DRV_NR_GET_STATUS,
28 	RK_DRV_NR_RESET,
29 
30 	HL_DRV_NR_MAX
31 };
32 
33 /*
34  * HL_DRV_IOC_INIT: associate file descriptor with the indicated memory.  This
35  * must be called before any other hl_drv_ioctl on the file descriptor.
36  *
37  *   - hpi_base = base address of HPI registers.
38  *   - code_base = base address of firmware memory (0 to allocate internally)
39  *   - data_base = base address of data memory (0 to allocate internally)
40  *   - code_len, data_len = length of firmware and data memory, respectively.
41  */
42 #define HL_DRV_IOC_INIT    _IOW('H', HL_DRV_NR_INIT, struct hl_drv_ioc_meminfo)
43 
44 /*
45  * HL_DRV_IOC_MEMINFO: retrieve memory information from file descriptor.
46  *
47  * Fills out the meminfo struct, returning the values passed to HL_DRV_IOC_INIT
48  * except that the actual base addresses of internal allocations (if any) are
49  * reported.
50  */
51 #define HL_DRV_IOC_MEMINFO _IOR('H', HL_DRV_NR_MEMINFO, struct hl_drv_ioc_meminfo)
52 
53 struct hl_drv_ioc_meminfo {
54 	__u32 hpi_base;
55 	__u32 code_base;
56 	__u32 code_size;
57 	__u32 data_base;
58 	__u32 data_size;
59 };
60 
61 /*
62  * HL_DRV_IOC_LOAD_CODE: write the provided buffer to the firmware memory.
63  *
64  *   - len = number of bytes in data buffer
65  *   - data = data to write to firmware memory.
66  *
67  * This can only be done once (successfully).  Subsequent attempts will
68  * return -EBUSY.
69  */
70 #define HL_DRV_IOC_LOAD_CODE _IOW('H', HL_DRV_NR_LOAD_CODE, struct hl_drv_ioc_code)
71 
72 struct hl_drv_ioc_code {
73 	__u32 len;
74 	__u8 data[];
75 };
76 
77 /*
78  * HL_DRV_IOC_READ_DATA: copy from data memory.
79  * HL_DRV_IOC_WRITE_DATA: copy to data memory.
80  *
81  *   - offset = start copying at this byte offset into the data memory.
82  *   - len    = number of bytes to copy.
83  *   - data   = for write, buffer containing data to copy.
84  *              for read, buffer to which read data will be written.
85  *
86  */
87 #define HL_DRV_IOC_READ_DATA  _IOWR('H', HL_DRV_NR_READ_DATA, struct hl_drv_ioc_data)
88 #define HL_DRV_IOC_WRITE_DATA  _IOW('H', HL_DRV_NR_WRITE_DATA, struct hl_drv_ioc_data)
89 
90 /*
91  * HL_DRV_IOC_MEMSET_DATA: initialize data memory.
92  *
93  *   - offset  = start initializatoin at this byte offset into the data memory.
94  *   - len     = number of bytes to set.
95  *   - data[0] = byte value to write to all indicated memory locations.
96  */
97 #define HL_DRV_IOC_MEMSET_DATA _IOW('H', HL_DRV_NR_MEMSET_DATA, struct hl_drv_ioc_data)
98 
99 struct hl_drv_ioc_data {
100 	__u32 offset;
101 	__u32 len;
102 	__u8 data[];
103 };
104 
105 /*
106  * HL_DRV_IOC_READ_HPI: read HPI register.
107  * HL_DRV_IOC_WRITE_HPI: write HPI register.
108  *
109  *   - offset = byte offset of HPI register to access.
110  *   - value  = for write, value to write.
111  *              for read, location to which result is stored.
112  */
113 #define HL_DRV_IOC_READ_HPI _IOWR('H', HL_DRV_NR_READ_HPI, struct hl_drv_ioc_hpi_reg)
114 #define HL_DRV_IOC_WRITE_HPI _IOW('H', HL_DRV_NR_WRITE_HPI, struct hl_drv_ioc_hpi_reg)
115 
116 struct hl_drv_ioc_hpi_reg {
117 	__u32 offset;
118 	__u32 value;
119 };
120 
121 #define RK_DRV_IOC_GET_STATUS _IOR('H', RK_DRV_NR_GET_STATUS, struct hl_drv_ioc_status)
122 
123 struct hl_drv_ioc_status {
124 	__u32 connected_status;
125 	__u32 booted_status;
126 };
127 
128 #define RK_DRV_IOC_RESET _IOR('H', RK_DRV_NR_RESET, __u32)
129 
130 #endif /* _DW_HDCP_HOST_LIB_DRIVER_LINUX_IF_H_ */
131