162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Xilinx SD-FEC 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2019 Xilinx, Inc. 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Description: 862306a36Sopenharmony_ci * This driver is developed for SDFEC16 IP. It provides a char device 962306a36Sopenharmony_ci * in sysfs and supports file operations like open(), close() and ioctl(). 1062306a36Sopenharmony_ci */ 1162306a36Sopenharmony_ci#ifndef __XILINX_SDFEC_H__ 1262306a36Sopenharmony_ci#define __XILINX_SDFEC_H__ 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include <linux/types.h> 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci/* Shared LDPC Tables */ 1762306a36Sopenharmony_ci#define XSDFEC_LDPC_SC_TABLE_ADDR_BASE (0x10000) 1862306a36Sopenharmony_ci#define XSDFEC_LDPC_SC_TABLE_ADDR_HIGH (0x10400) 1962306a36Sopenharmony_ci#define XSDFEC_LDPC_LA_TABLE_ADDR_BASE (0x18000) 2062306a36Sopenharmony_ci#define XSDFEC_LDPC_LA_TABLE_ADDR_HIGH (0x19000) 2162306a36Sopenharmony_ci#define XSDFEC_LDPC_QC_TABLE_ADDR_BASE (0x20000) 2262306a36Sopenharmony_ci#define XSDFEC_LDPC_QC_TABLE_ADDR_HIGH (0x28000) 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci/* LDPC tables depth */ 2562306a36Sopenharmony_ci#define XSDFEC_SC_TABLE_DEPTH \ 2662306a36Sopenharmony_ci (XSDFEC_LDPC_SC_TABLE_ADDR_HIGH - XSDFEC_LDPC_SC_TABLE_ADDR_BASE) 2762306a36Sopenharmony_ci#define XSDFEC_LA_TABLE_DEPTH \ 2862306a36Sopenharmony_ci (XSDFEC_LDPC_LA_TABLE_ADDR_HIGH - XSDFEC_LDPC_LA_TABLE_ADDR_BASE) 2962306a36Sopenharmony_ci#define XSDFEC_QC_TABLE_DEPTH \ 3062306a36Sopenharmony_ci (XSDFEC_LDPC_QC_TABLE_ADDR_HIGH - XSDFEC_LDPC_QC_TABLE_ADDR_BASE) 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci/** 3362306a36Sopenharmony_ci * enum xsdfec_code - Code Type. 3462306a36Sopenharmony_ci * @XSDFEC_TURBO_CODE: Driver is configured for Turbo mode. 3562306a36Sopenharmony_ci * @XSDFEC_LDPC_CODE: Driver is configured for LDPC mode. 3662306a36Sopenharmony_ci * 3762306a36Sopenharmony_ci * This enum is used to indicate the mode of the driver. The mode is determined 3862306a36Sopenharmony_ci * by checking which codes are set in the driver. Note that the mode cannot be 3962306a36Sopenharmony_ci * changed by the driver. 4062306a36Sopenharmony_ci */ 4162306a36Sopenharmony_cienum xsdfec_code { 4262306a36Sopenharmony_ci XSDFEC_TURBO_CODE = 0, 4362306a36Sopenharmony_ci XSDFEC_LDPC_CODE, 4462306a36Sopenharmony_ci}; 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci/** 4762306a36Sopenharmony_ci * enum xsdfec_order - Order 4862306a36Sopenharmony_ci * @XSDFEC_MAINTAIN_ORDER: Maintain order execution of blocks. 4962306a36Sopenharmony_ci * @XSDFEC_OUT_OF_ORDER: Out-of-order execution of blocks. 5062306a36Sopenharmony_ci * 5162306a36Sopenharmony_ci * This enum is used to indicate whether the order of blocks can change from 5262306a36Sopenharmony_ci * input to output. 5362306a36Sopenharmony_ci */ 5462306a36Sopenharmony_cienum xsdfec_order { 5562306a36Sopenharmony_ci XSDFEC_MAINTAIN_ORDER = 0, 5662306a36Sopenharmony_ci XSDFEC_OUT_OF_ORDER, 5762306a36Sopenharmony_ci}; 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci/** 6062306a36Sopenharmony_ci * enum xsdfec_turbo_alg - Turbo Algorithm Type. 6162306a36Sopenharmony_ci * @XSDFEC_MAX_SCALE: Max Log-Map algorithm with extrinsic scaling. When 6262306a36Sopenharmony_ci * scaling is set to this is equivalent to the Max Log-Map 6362306a36Sopenharmony_ci * algorithm. 6462306a36Sopenharmony_ci * @XSDFEC_MAX_STAR: Log-Map algorithm. 6562306a36Sopenharmony_ci * @XSDFEC_TURBO_ALG_MAX: Used to indicate out of bound Turbo algorithms. 6662306a36Sopenharmony_ci * 6762306a36Sopenharmony_ci * This enum specifies which Turbo Decode algorithm is in use. 6862306a36Sopenharmony_ci */ 6962306a36Sopenharmony_cienum xsdfec_turbo_alg { 7062306a36Sopenharmony_ci XSDFEC_MAX_SCALE = 0, 7162306a36Sopenharmony_ci XSDFEC_MAX_STAR, 7262306a36Sopenharmony_ci XSDFEC_TURBO_ALG_MAX, 7362306a36Sopenharmony_ci}; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci/** 7662306a36Sopenharmony_ci * enum xsdfec_state - State. 7762306a36Sopenharmony_ci * @XSDFEC_INIT: Driver is initialized. 7862306a36Sopenharmony_ci * @XSDFEC_STARTED: Driver is started. 7962306a36Sopenharmony_ci * @XSDFEC_STOPPED: Driver is stopped. 8062306a36Sopenharmony_ci * @XSDFEC_NEEDS_RESET: Driver needs to be reset. 8162306a36Sopenharmony_ci * @XSDFEC_PL_RECONFIGURE: Programmable Logic needs to be recofigured. 8262306a36Sopenharmony_ci * 8362306a36Sopenharmony_ci * This enum is used to indicate the state of the driver. 8462306a36Sopenharmony_ci */ 8562306a36Sopenharmony_cienum xsdfec_state { 8662306a36Sopenharmony_ci XSDFEC_INIT = 0, 8762306a36Sopenharmony_ci XSDFEC_STARTED, 8862306a36Sopenharmony_ci XSDFEC_STOPPED, 8962306a36Sopenharmony_ci XSDFEC_NEEDS_RESET, 9062306a36Sopenharmony_ci XSDFEC_PL_RECONFIGURE, 9162306a36Sopenharmony_ci}; 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci/** 9462306a36Sopenharmony_ci * enum xsdfec_axis_width - AXIS_WIDTH.DIN Setting for 128-bit width. 9562306a36Sopenharmony_ci * @XSDFEC_1x128b: DIN data input stream consists of a 128-bit lane 9662306a36Sopenharmony_ci * @XSDFEC_2x128b: DIN data input stream consists of two 128-bit lanes 9762306a36Sopenharmony_ci * @XSDFEC_4x128b: DIN data input stream consists of four 128-bit lanes 9862306a36Sopenharmony_ci * 9962306a36Sopenharmony_ci * This enum is used to indicate the AXIS_WIDTH.DIN setting for 128-bit width. 10062306a36Sopenharmony_ci * The number of lanes of the DIN data input stream depends upon the 10162306a36Sopenharmony_ci * AXIS_WIDTH.DIN parameter. 10262306a36Sopenharmony_ci */ 10362306a36Sopenharmony_cienum xsdfec_axis_width { 10462306a36Sopenharmony_ci XSDFEC_1x128b = 1, 10562306a36Sopenharmony_ci XSDFEC_2x128b = 2, 10662306a36Sopenharmony_ci XSDFEC_4x128b = 4, 10762306a36Sopenharmony_ci}; 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci/** 11062306a36Sopenharmony_ci * enum xsdfec_axis_word_include - Words Configuration. 11162306a36Sopenharmony_ci * @XSDFEC_FIXED_VALUE: Fixed, the DIN_WORDS AXI4-Stream interface is removed 11262306a36Sopenharmony_ci * from the IP instance and is driven with the specified 11362306a36Sopenharmony_ci * number of words. 11462306a36Sopenharmony_ci * @XSDFEC_IN_BLOCK: In Block, configures the IP instance to expect a single 11562306a36Sopenharmony_ci * DIN_WORDS value per input code block. The DIN_WORDS 11662306a36Sopenharmony_ci * interface is present. 11762306a36Sopenharmony_ci * @XSDFEC_PER_AXI_TRANSACTION: Per Transaction, configures the IP instance to 11862306a36Sopenharmony_ci * expect one DIN_WORDS value per input transaction on the DIN interface. The 11962306a36Sopenharmony_ci * DIN_WORDS interface is present. 12062306a36Sopenharmony_ci * @XSDFEC_AXIS_WORDS_INCLUDE_MAX: Used to indicate out of bound Words 12162306a36Sopenharmony_ci * Configurations. 12262306a36Sopenharmony_ci * 12362306a36Sopenharmony_ci * This enum is used to specify the DIN_WORDS configuration. 12462306a36Sopenharmony_ci */ 12562306a36Sopenharmony_cienum xsdfec_axis_word_include { 12662306a36Sopenharmony_ci XSDFEC_FIXED_VALUE = 0, 12762306a36Sopenharmony_ci XSDFEC_IN_BLOCK, 12862306a36Sopenharmony_ci XSDFEC_PER_AXI_TRANSACTION, 12962306a36Sopenharmony_ci XSDFEC_AXIS_WORDS_INCLUDE_MAX, 13062306a36Sopenharmony_ci}; 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci/** 13362306a36Sopenharmony_ci * struct xsdfec_turbo - User data for Turbo codes. 13462306a36Sopenharmony_ci * @alg: Specifies which Turbo decode algorithm to use 13562306a36Sopenharmony_ci * @scale: Specifies the extrinsic scaling to apply when the Max Scale algorithm 13662306a36Sopenharmony_ci * has been selected 13762306a36Sopenharmony_ci * 13862306a36Sopenharmony_ci * Turbo code structure to communicate parameters to XSDFEC driver. 13962306a36Sopenharmony_ci */ 14062306a36Sopenharmony_cistruct xsdfec_turbo { 14162306a36Sopenharmony_ci __u32 alg; 14262306a36Sopenharmony_ci __u8 scale; 14362306a36Sopenharmony_ci}; 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_ci/** 14662306a36Sopenharmony_ci * struct xsdfec_ldpc_params - User data for LDPC codes. 14762306a36Sopenharmony_ci * @n: Number of code word bits 14862306a36Sopenharmony_ci * @k: Number of information bits 14962306a36Sopenharmony_ci * @psize: Size of sub-matrix 15062306a36Sopenharmony_ci * @nlayers: Number of layers in code 15162306a36Sopenharmony_ci * @nqc: Quasi Cyclic Number 15262306a36Sopenharmony_ci * @nmqc: Number of M-sized QC operations in parity check matrix 15362306a36Sopenharmony_ci * @nm: Number of M-size vectors in N 15462306a36Sopenharmony_ci * @norm_type: Normalization required or not 15562306a36Sopenharmony_ci * @no_packing: Determines if multiple QC ops should be performed 15662306a36Sopenharmony_ci * @special_qc: Sub-Matrix property for Circulant weight > 0 15762306a36Sopenharmony_ci * @no_final_parity: Decide if final parity check needs to be performed 15862306a36Sopenharmony_ci * @max_schedule: Experimental code word scheduling limit 15962306a36Sopenharmony_ci * @sc_off: SC offset 16062306a36Sopenharmony_ci * @la_off: LA offset 16162306a36Sopenharmony_ci * @qc_off: QC offset 16262306a36Sopenharmony_ci * @sc_table: Pointer to SC Table which must be page aligned 16362306a36Sopenharmony_ci * @la_table: Pointer to LA Table which must be page aligned 16462306a36Sopenharmony_ci * @qc_table: Pointer to QC Table which must be page aligned 16562306a36Sopenharmony_ci * @code_id: LDPC Code 16662306a36Sopenharmony_ci * 16762306a36Sopenharmony_ci * This structure describes the LDPC code that is passed to the driver by the 16862306a36Sopenharmony_ci * application. 16962306a36Sopenharmony_ci */ 17062306a36Sopenharmony_cistruct xsdfec_ldpc_params { 17162306a36Sopenharmony_ci __u32 n; 17262306a36Sopenharmony_ci __u32 k; 17362306a36Sopenharmony_ci __u32 psize; 17462306a36Sopenharmony_ci __u32 nlayers; 17562306a36Sopenharmony_ci __u32 nqc; 17662306a36Sopenharmony_ci __u32 nmqc; 17762306a36Sopenharmony_ci __u32 nm; 17862306a36Sopenharmony_ci __u32 norm_type; 17962306a36Sopenharmony_ci __u32 no_packing; 18062306a36Sopenharmony_ci __u32 special_qc; 18162306a36Sopenharmony_ci __u32 no_final_parity; 18262306a36Sopenharmony_ci __u32 max_schedule; 18362306a36Sopenharmony_ci __u32 sc_off; 18462306a36Sopenharmony_ci __u32 la_off; 18562306a36Sopenharmony_ci __u32 qc_off; 18662306a36Sopenharmony_ci __u32 *sc_table; 18762306a36Sopenharmony_ci __u32 *la_table; 18862306a36Sopenharmony_ci __u32 *qc_table; 18962306a36Sopenharmony_ci __u16 code_id; 19062306a36Sopenharmony_ci}; 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_ci/** 19362306a36Sopenharmony_ci * struct xsdfec_status - Status of SD-FEC core. 19462306a36Sopenharmony_ci * @state: State of the SD-FEC core 19562306a36Sopenharmony_ci * @activity: Describes if the SD-FEC instance is Active 19662306a36Sopenharmony_ci */ 19762306a36Sopenharmony_cistruct xsdfec_status { 19862306a36Sopenharmony_ci __u32 state; 19962306a36Sopenharmony_ci __s8 activity; 20062306a36Sopenharmony_ci}; 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_ci/** 20362306a36Sopenharmony_ci * struct xsdfec_irq - Enabling or Disabling Interrupts. 20462306a36Sopenharmony_ci * @enable_isr: If true enables the ISR 20562306a36Sopenharmony_ci * @enable_ecc_isr: If true enables the ECC ISR 20662306a36Sopenharmony_ci */ 20762306a36Sopenharmony_cistruct xsdfec_irq { 20862306a36Sopenharmony_ci __s8 enable_isr; 20962306a36Sopenharmony_ci __s8 enable_ecc_isr; 21062306a36Sopenharmony_ci}; 21162306a36Sopenharmony_ci 21262306a36Sopenharmony_ci/** 21362306a36Sopenharmony_ci * struct xsdfec_config - Configuration of SD-FEC core. 21462306a36Sopenharmony_ci * @code: The codes being used by the SD-FEC instance 21562306a36Sopenharmony_ci * @order: Order of Operation 21662306a36Sopenharmony_ci * @din_width: Width of the DIN AXI4-Stream 21762306a36Sopenharmony_ci * @din_word_include: How DIN_WORDS are inputted 21862306a36Sopenharmony_ci * @dout_width: Width of the DOUT AXI4-Stream 21962306a36Sopenharmony_ci * @dout_word_include: HOW DOUT_WORDS are outputted 22062306a36Sopenharmony_ci * @irq: Enabling or disabling interrupts 22162306a36Sopenharmony_ci * @bypass: Is the core being bypassed 22262306a36Sopenharmony_ci * @code_wr_protect: Is write protection of LDPC codes enabled 22362306a36Sopenharmony_ci */ 22462306a36Sopenharmony_cistruct xsdfec_config { 22562306a36Sopenharmony_ci __u32 code; 22662306a36Sopenharmony_ci __u32 order; 22762306a36Sopenharmony_ci __u32 din_width; 22862306a36Sopenharmony_ci __u32 din_word_include; 22962306a36Sopenharmony_ci __u32 dout_width; 23062306a36Sopenharmony_ci __u32 dout_word_include; 23162306a36Sopenharmony_ci struct xsdfec_irq irq; 23262306a36Sopenharmony_ci __s8 bypass; 23362306a36Sopenharmony_ci __s8 code_wr_protect; 23462306a36Sopenharmony_ci}; 23562306a36Sopenharmony_ci 23662306a36Sopenharmony_ci/** 23762306a36Sopenharmony_ci * struct xsdfec_stats - Stats retrived by ioctl XSDFEC_GET_STATS. Used 23862306a36Sopenharmony_ci * to buffer atomic_t variables from struct 23962306a36Sopenharmony_ci * xsdfec_dev. Counts are accumulated until 24062306a36Sopenharmony_ci * the user clears them. 24162306a36Sopenharmony_ci * @isr_err_count: Count of ISR errors 24262306a36Sopenharmony_ci * @cecc_count: Count of Correctable ECC errors (SBE) 24362306a36Sopenharmony_ci * @uecc_count: Count of Uncorrectable ECC errors (MBE) 24462306a36Sopenharmony_ci */ 24562306a36Sopenharmony_cistruct xsdfec_stats { 24662306a36Sopenharmony_ci __u32 isr_err_count; 24762306a36Sopenharmony_ci __u32 cecc_count; 24862306a36Sopenharmony_ci __u32 uecc_count; 24962306a36Sopenharmony_ci}; 25062306a36Sopenharmony_ci 25162306a36Sopenharmony_ci/** 25262306a36Sopenharmony_ci * struct xsdfec_ldpc_param_table_sizes - Used to store sizes of SD-FEC table 25362306a36Sopenharmony_ci * entries for an individual LPDC code 25462306a36Sopenharmony_ci * parameter. 25562306a36Sopenharmony_ci * @sc_size: Size of SC table used 25662306a36Sopenharmony_ci * @la_size: Size of LA table used 25762306a36Sopenharmony_ci * @qc_size: Size of QC table used 25862306a36Sopenharmony_ci */ 25962306a36Sopenharmony_cistruct xsdfec_ldpc_param_table_sizes { 26062306a36Sopenharmony_ci __u32 sc_size; 26162306a36Sopenharmony_ci __u32 la_size; 26262306a36Sopenharmony_ci __u32 qc_size; 26362306a36Sopenharmony_ci}; 26462306a36Sopenharmony_ci 26562306a36Sopenharmony_ci/* 26662306a36Sopenharmony_ci * XSDFEC IOCTL List 26762306a36Sopenharmony_ci */ 26862306a36Sopenharmony_ci#define XSDFEC_MAGIC 'f' 26962306a36Sopenharmony_ci/** 27062306a36Sopenharmony_ci * DOC: XSDFEC_START_DEV 27162306a36Sopenharmony_ci * 27262306a36Sopenharmony_ci * @Description 27362306a36Sopenharmony_ci * 27462306a36Sopenharmony_ci * ioctl to start SD-FEC core 27562306a36Sopenharmony_ci * 27662306a36Sopenharmony_ci * This fails if the XSDFEC_SET_ORDER ioctl has not been previously called 27762306a36Sopenharmony_ci */ 27862306a36Sopenharmony_ci#define XSDFEC_START_DEV _IO(XSDFEC_MAGIC, 0) 27962306a36Sopenharmony_ci/** 28062306a36Sopenharmony_ci * DOC: XSDFEC_STOP_DEV 28162306a36Sopenharmony_ci * 28262306a36Sopenharmony_ci * @Description 28362306a36Sopenharmony_ci * 28462306a36Sopenharmony_ci * ioctl to stop the SD-FEC core 28562306a36Sopenharmony_ci */ 28662306a36Sopenharmony_ci#define XSDFEC_STOP_DEV _IO(XSDFEC_MAGIC, 1) 28762306a36Sopenharmony_ci/** 28862306a36Sopenharmony_ci * DOC: XSDFEC_GET_STATUS 28962306a36Sopenharmony_ci * 29062306a36Sopenharmony_ci * @Description 29162306a36Sopenharmony_ci * 29262306a36Sopenharmony_ci * ioctl that returns status of SD-FEC core 29362306a36Sopenharmony_ci */ 29462306a36Sopenharmony_ci#define XSDFEC_GET_STATUS _IOR(XSDFEC_MAGIC, 2, struct xsdfec_status) 29562306a36Sopenharmony_ci/** 29662306a36Sopenharmony_ci * DOC: XSDFEC_SET_IRQ 29762306a36Sopenharmony_ci * @Parameters 29862306a36Sopenharmony_ci * 29962306a36Sopenharmony_ci * @struct xsdfec_irq * 30062306a36Sopenharmony_ci * Pointer to the &struct xsdfec_irq that contains the interrupt settings 30162306a36Sopenharmony_ci * for the SD-FEC core 30262306a36Sopenharmony_ci * 30362306a36Sopenharmony_ci * @Description 30462306a36Sopenharmony_ci * 30562306a36Sopenharmony_ci * ioctl to enable or disable irq 30662306a36Sopenharmony_ci */ 30762306a36Sopenharmony_ci#define XSDFEC_SET_IRQ _IOW(XSDFEC_MAGIC, 3, struct xsdfec_irq) 30862306a36Sopenharmony_ci/** 30962306a36Sopenharmony_ci * DOC: XSDFEC_SET_TURBO 31062306a36Sopenharmony_ci * @Parameters 31162306a36Sopenharmony_ci * 31262306a36Sopenharmony_ci * @struct xsdfec_turbo * 31362306a36Sopenharmony_ci * Pointer to the &struct xsdfec_turbo that contains the Turbo decode 31462306a36Sopenharmony_ci * settings for the SD-FEC core 31562306a36Sopenharmony_ci * 31662306a36Sopenharmony_ci * @Description 31762306a36Sopenharmony_ci * 31862306a36Sopenharmony_ci * ioctl that sets the SD-FEC Turbo parameter values 31962306a36Sopenharmony_ci * 32062306a36Sopenharmony_ci * This can only be used when the driver is in the XSDFEC_STOPPED state 32162306a36Sopenharmony_ci */ 32262306a36Sopenharmony_ci#define XSDFEC_SET_TURBO _IOW(XSDFEC_MAGIC, 4, struct xsdfec_turbo) 32362306a36Sopenharmony_ci/** 32462306a36Sopenharmony_ci * DOC: XSDFEC_ADD_LDPC_CODE_PARAMS 32562306a36Sopenharmony_ci * @Parameters 32662306a36Sopenharmony_ci * 32762306a36Sopenharmony_ci * @struct xsdfec_ldpc_params * 32862306a36Sopenharmony_ci * Pointer to the &struct xsdfec_ldpc_params that contains the LDPC code 32962306a36Sopenharmony_ci * parameters to be added to the SD-FEC Block 33062306a36Sopenharmony_ci * 33162306a36Sopenharmony_ci * @Description 33262306a36Sopenharmony_ci * ioctl to add an LDPC code to the SD-FEC LDPC codes 33362306a36Sopenharmony_ci * 33462306a36Sopenharmony_ci * This can only be used when: 33562306a36Sopenharmony_ci * 33662306a36Sopenharmony_ci * - Driver is in the XSDFEC_STOPPED state 33762306a36Sopenharmony_ci * 33862306a36Sopenharmony_ci * - SD-FEC core is configured as LPDC 33962306a36Sopenharmony_ci * 34062306a36Sopenharmony_ci * - SD-FEC Code Write Protection is disabled 34162306a36Sopenharmony_ci */ 34262306a36Sopenharmony_ci#define XSDFEC_ADD_LDPC_CODE_PARAMS \ 34362306a36Sopenharmony_ci _IOW(XSDFEC_MAGIC, 5, struct xsdfec_ldpc_params) 34462306a36Sopenharmony_ci/** 34562306a36Sopenharmony_ci * DOC: XSDFEC_GET_CONFIG 34662306a36Sopenharmony_ci * @Parameters 34762306a36Sopenharmony_ci * 34862306a36Sopenharmony_ci * @struct xsdfec_config * 34962306a36Sopenharmony_ci * Pointer to the &struct xsdfec_config that contains the current 35062306a36Sopenharmony_ci * configuration settings of the SD-FEC Block 35162306a36Sopenharmony_ci * 35262306a36Sopenharmony_ci * @Description 35362306a36Sopenharmony_ci * 35462306a36Sopenharmony_ci * ioctl that returns SD-FEC core configuration 35562306a36Sopenharmony_ci */ 35662306a36Sopenharmony_ci#define XSDFEC_GET_CONFIG _IOR(XSDFEC_MAGIC, 6, struct xsdfec_config) 35762306a36Sopenharmony_ci/** 35862306a36Sopenharmony_ci * DOC: XSDFEC_GET_TURBO 35962306a36Sopenharmony_ci * @Parameters 36062306a36Sopenharmony_ci * 36162306a36Sopenharmony_ci * @struct xsdfec_turbo * 36262306a36Sopenharmony_ci * Pointer to the &struct xsdfec_turbo that contains the current Turbo 36362306a36Sopenharmony_ci * decode settings of the SD-FEC Block 36462306a36Sopenharmony_ci * 36562306a36Sopenharmony_ci * @Description 36662306a36Sopenharmony_ci * 36762306a36Sopenharmony_ci * ioctl that returns SD-FEC turbo param values 36862306a36Sopenharmony_ci */ 36962306a36Sopenharmony_ci#define XSDFEC_GET_TURBO _IOR(XSDFEC_MAGIC, 7, struct xsdfec_turbo) 37062306a36Sopenharmony_ci/** 37162306a36Sopenharmony_ci * DOC: XSDFEC_SET_ORDER 37262306a36Sopenharmony_ci * @Parameters 37362306a36Sopenharmony_ci * 37462306a36Sopenharmony_ci * @struct unsigned long * 37562306a36Sopenharmony_ci * Pointer to the unsigned long that contains a value from the 37662306a36Sopenharmony_ci * @enum xsdfec_order 37762306a36Sopenharmony_ci * 37862306a36Sopenharmony_ci * @Description 37962306a36Sopenharmony_ci * 38062306a36Sopenharmony_ci * ioctl that sets order, if order of blocks can change from input to output 38162306a36Sopenharmony_ci * 38262306a36Sopenharmony_ci * This can only be used when the driver is in the XSDFEC_STOPPED state 38362306a36Sopenharmony_ci */ 38462306a36Sopenharmony_ci#define XSDFEC_SET_ORDER _IOW(XSDFEC_MAGIC, 8, unsigned long) 38562306a36Sopenharmony_ci/** 38662306a36Sopenharmony_ci * DOC: XSDFEC_SET_BYPASS 38762306a36Sopenharmony_ci * @Parameters 38862306a36Sopenharmony_ci * 38962306a36Sopenharmony_ci * @struct bool * 39062306a36Sopenharmony_ci * Pointer to bool that sets the bypass value, where false results in 39162306a36Sopenharmony_ci * normal operation and false results in the SD-FEC performing the 39262306a36Sopenharmony_ci * configured operations (same number of cycles) but output data matches 39362306a36Sopenharmony_ci * the input data 39462306a36Sopenharmony_ci * 39562306a36Sopenharmony_ci * @Description 39662306a36Sopenharmony_ci * 39762306a36Sopenharmony_ci * ioctl that sets bypass. 39862306a36Sopenharmony_ci * 39962306a36Sopenharmony_ci * This can only be used when the driver is in the XSDFEC_STOPPED state 40062306a36Sopenharmony_ci */ 40162306a36Sopenharmony_ci#define XSDFEC_SET_BYPASS _IOW(XSDFEC_MAGIC, 9, bool) 40262306a36Sopenharmony_ci/** 40362306a36Sopenharmony_ci * DOC: XSDFEC_IS_ACTIVE 40462306a36Sopenharmony_ci * @Parameters 40562306a36Sopenharmony_ci * 40662306a36Sopenharmony_ci * @struct bool * 40762306a36Sopenharmony_ci * Pointer to bool that returns true if the SD-FEC is processing data 40862306a36Sopenharmony_ci * 40962306a36Sopenharmony_ci * @Description 41062306a36Sopenharmony_ci * 41162306a36Sopenharmony_ci * ioctl that determines if SD-FEC is processing data 41262306a36Sopenharmony_ci */ 41362306a36Sopenharmony_ci#define XSDFEC_IS_ACTIVE _IOR(XSDFEC_MAGIC, 10, bool) 41462306a36Sopenharmony_ci/** 41562306a36Sopenharmony_ci * DOC: XSDFEC_CLEAR_STATS 41662306a36Sopenharmony_ci * 41762306a36Sopenharmony_ci * @Description 41862306a36Sopenharmony_ci * 41962306a36Sopenharmony_ci * ioctl that clears error stats collected during interrupts 42062306a36Sopenharmony_ci */ 42162306a36Sopenharmony_ci#define XSDFEC_CLEAR_STATS _IO(XSDFEC_MAGIC, 11) 42262306a36Sopenharmony_ci/** 42362306a36Sopenharmony_ci * DOC: XSDFEC_GET_STATS 42462306a36Sopenharmony_ci * @Parameters 42562306a36Sopenharmony_ci * 42662306a36Sopenharmony_ci * @struct xsdfec_stats * 42762306a36Sopenharmony_ci * Pointer to the &struct xsdfec_stats that will contain the updated stats 42862306a36Sopenharmony_ci * values 42962306a36Sopenharmony_ci * 43062306a36Sopenharmony_ci * @Description 43162306a36Sopenharmony_ci * 43262306a36Sopenharmony_ci * ioctl that returns SD-FEC core stats 43362306a36Sopenharmony_ci * 43462306a36Sopenharmony_ci * This can only be used when the driver is in the XSDFEC_STOPPED state 43562306a36Sopenharmony_ci */ 43662306a36Sopenharmony_ci#define XSDFEC_GET_STATS _IOR(XSDFEC_MAGIC, 12, struct xsdfec_stats) 43762306a36Sopenharmony_ci/** 43862306a36Sopenharmony_ci * DOC: XSDFEC_SET_DEFAULT_CONFIG 43962306a36Sopenharmony_ci * 44062306a36Sopenharmony_ci * @Description 44162306a36Sopenharmony_ci * 44262306a36Sopenharmony_ci * ioctl that returns SD-FEC core to default config, use after a reset 44362306a36Sopenharmony_ci * 44462306a36Sopenharmony_ci * This can only be used when the driver is in the XSDFEC_STOPPED state 44562306a36Sopenharmony_ci */ 44662306a36Sopenharmony_ci#define XSDFEC_SET_DEFAULT_CONFIG _IO(XSDFEC_MAGIC, 13) 44762306a36Sopenharmony_ci 44862306a36Sopenharmony_ci#endif /* __XILINX_SDFEC_H__ */ 449