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