1 /****************************************************************************
2  ****************************************************************************
3  ***
4  ***   This header was automatically generated from a Linux kernel header
5  ***   of the same name, to make information necessary for userspace to
6  ***   call into the kernel available to libc.  It contains only constants,
7  ***   structures, and macros generated from the original header, and thus,
8  ***   contains no copyrightable information.
9  ***
10  ***   To edit the content of this header, modify the corresponding
11  ***   source file (e.g. under external/kernel-headers/original/) then
12  ***   run bionic/libc/kernel/tools/update_all.py
13  ***
14  ***   Any manual change here will be lost the next time this script will
15  ***   be run. You've been warned!
16  ***
17  ****************************************************************************
18  ****************************************************************************/
19 #ifndef __XILINX_SDFEC_H__
20 #define __XILINX_SDFEC_H__
21 #include <linux/types.h>
22 #define XSDFEC_LDPC_SC_TABLE_ADDR_BASE (0x10000)
23 #define XSDFEC_LDPC_SC_TABLE_ADDR_HIGH (0x10400)
24 #define XSDFEC_LDPC_LA_TABLE_ADDR_BASE (0x18000)
25 #define XSDFEC_LDPC_LA_TABLE_ADDR_HIGH (0x19000)
26 #define XSDFEC_LDPC_QC_TABLE_ADDR_BASE (0x20000)
27 #define XSDFEC_LDPC_QC_TABLE_ADDR_HIGH (0x28000)
28 #define XSDFEC_SC_TABLE_DEPTH (XSDFEC_LDPC_SC_TABLE_ADDR_HIGH - XSDFEC_LDPC_SC_TABLE_ADDR_BASE)
29 #define XSDFEC_LA_TABLE_DEPTH (XSDFEC_LDPC_LA_TABLE_ADDR_HIGH - XSDFEC_LDPC_LA_TABLE_ADDR_BASE)
30 #define XSDFEC_QC_TABLE_DEPTH (XSDFEC_LDPC_QC_TABLE_ADDR_HIGH - XSDFEC_LDPC_QC_TABLE_ADDR_BASE)
31 enum xsdfec_code {
32   XSDFEC_TURBO_CODE = 0,
33   XSDFEC_LDPC_CODE,
34 };
35 enum xsdfec_order {
36   XSDFEC_MAINTAIN_ORDER = 0,
37   XSDFEC_OUT_OF_ORDER,
38 };
39 enum xsdfec_turbo_alg {
40   XSDFEC_MAX_SCALE = 0,
41   XSDFEC_MAX_STAR,
42   XSDFEC_TURBO_ALG_MAX,
43 };
44 enum xsdfec_state {
45   XSDFEC_INIT = 0,
46   XSDFEC_STARTED,
47   XSDFEC_STOPPED,
48   XSDFEC_NEEDS_RESET,
49   XSDFEC_PL_RECONFIGURE,
50 };
51 enum xsdfec_axis_width {
52   XSDFEC_1x128b = 1,
53   XSDFEC_2x128b = 2,
54   XSDFEC_4x128b = 4,
55 };
56 enum xsdfec_axis_word_include {
57   XSDFEC_FIXED_VALUE = 0,
58   XSDFEC_IN_BLOCK,
59   XSDFEC_PER_AXI_TRANSACTION,
60   XSDFEC_AXIS_WORDS_INCLUDE_MAX,
61 };
62 struct xsdfec_turbo {
63   __u32 alg;
64   __u8 scale;
65 };
66 struct xsdfec_ldpc_params {
67   __u32 n;
68   __u32 k;
69   __u32 psize;
70   __u32 nlayers;
71   __u32 nqc;
72   __u32 nmqc;
73   __u32 nm;
74   __u32 norm_type;
75   __u32 no_packing;
76   __u32 special_qc;
77   __u32 no_final_parity;
78   __u32 max_schedule;
79   __u32 sc_off;
80   __u32 la_off;
81   __u32 qc_off;
82   __u32 * sc_table;
83   __u32 * la_table;
84   __u32 * qc_table;
85   __u16 code_id;
86 };
87 struct xsdfec_status {
88   __u32 state;
89   __s8 activity;
90 };
91 struct xsdfec_irq {
92   __s8 enable_isr;
93   __s8 enable_ecc_isr;
94 };
95 struct xsdfec_config {
96   __u32 code;
97   __u32 order;
98   __u32 din_width;
99   __u32 din_word_include;
100   __u32 dout_width;
101   __u32 dout_word_include;
102   struct xsdfec_irq irq;
103   __s8 bypass;
104   __s8 code_wr_protect;
105 };
106 struct xsdfec_stats {
107   __u32 isr_err_count;
108   __u32 cecc_count;
109   __u32 uecc_count;
110 };
111 struct xsdfec_ldpc_param_table_sizes {
112   __u32 sc_size;
113   __u32 la_size;
114   __u32 qc_size;
115 };
116 #define XSDFEC_MAGIC 'f'
117 #define XSDFEC_START_DEV _IO(XSDFEC_MAGIC, 0)
118 #define XSDFEC_STOP_DEV _IO(XSDFEC_MAGIC, 1)
119 #define XSDFEC_GET_STATUS _IOR(XSDFEC_MAGIC, 2, struct xsdfec_status)
120 #define XSDFEC_SET_IRQ _IOW(XSDFEC_MAGIC, 3, struct xsdfec_irq)
121 #define XSDFEC_SET_TURBO _IOW(XSDFEC_MAGIC, 4, struct xsdfec_turbo)
122 #define XSDFEC_ADD_LDPC_CODE_PARAMS _IOW(XSDFEC_MAGIC, 5, struct xsdfec_ldpc_params)
123 #define XSDFEC_GET_CONFIG _IOR(XSDFEC_MAGIC, 6, struct xsdfec_config)
124 #define XSDFEC_GET_TURBO _IOR(XSDFEC_MAGIC, 7, struct xsdfec_turbo)
125 #define XSDFEC_SET_ORDER _IOW(XSDFEC_MAGIC, 8, unsigned long)
126 #define XSDFEC_SET_BYPASS _IOW(XSDFEC_MAGIC, 9, bool)
127 #define XSDFEC_IS_ACTIVE _IOR(XSDFEC_MAGIC, 10, bool)
128 #define XSDFEC_CLEAR_STATS _IO(XSDFEC_MAGIC, 11)
129 #define XSDFEC_GET_STATS _IOR(XSDFEC_MAGIC, 12, struct xsdfec_stats)
130 #define XSDFEC_SET_DEFAULT_CONFIG _IO(XSDFEC_MAGIC, 13)
131 #endif
132