1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /***********************************************************************
3  *
4  ***********************************************************************/
5 
6 struct smsdvb_debugfs;
7 struct smsdvb_client_t;
8 
9 typedef void (*sms_prt_dvb_stats_t)(struct smsdvb_debugfs *debug_data,
10 				    struct sms_stats *p);
11 
12 typedef void (*sms_prt_isdb_stats_t)(struct smsdvb_debugfs *debug_data,
13 				     struct sms_isdbt_stats *p);
14 
15 typedef void (*sms_prt_isdb_stats_ex_t)
16 			(struct smsdvb_debugfs *debug_data,
17 			 struct sms_isdbt_stats_ex *p);
18 
19 
20 struct smsdvb_client_t {
21 	struct list_head entry;
22 
23 	struct smscore_device_t *coredev;
24 	struct smscore_client_t *smsclient;
25 
26 	struct dvb_adapter      adapter;
27 	struct dvb_demux        demux;
28 	struct dmxdev           dmxdev;
29 	struct dvb_frontend     frontend;
30 
31 	enum fe_status          fe_status;
32 
33 	struct completion       tune_done;
34 	struct completion       stats_done;
35 
36 	int last_per;
37 
38 	int legacy_ber, legacy_per;
39 
40 	int event_fe_state;
41 	int event_unc_state;
42 
43 	unsigned long		get_stats_jiffies;
44 
45 	int			feed_users;
46 	bool			has_tuned;
47 
48 	/* stats debugfs data */
49 	struct dentry		*debugfs;
50 
51 	struct smsdvb_debugfs	*debug_data;
52 
53 	sms_prt_dvb_stats_t	prt_dvb_stats;
54 	sms_prt_isdb_stats_t	prt_isdb_stats;
55 	sms_prt_isdb_stats_ex_t	prt_isdb_stats_ex;
56 };
57 
58 /*
59  * This struct is a mix of struct sms_rx_stats_ex and
60  * struct sms_srvm_signal_status.
61  * It was obtained by comparing the way it was filled by the original code
62  */
63 struct RECEPTION_STATISTICS_PER_SLICES_S {
64 	u32 result;
65 	u32 snr;
66 	s32 in_band_power;
67 	u32 ts_packets;
68 	u32 ets_packets;
69 	u32 constellation;
70 	u32 hp_code;
71 	u32 tps_srv_ind_lp;
72 	u32 tps_srv_ind_hp;
73 	u32 cell_id;
74 	u32 reason;
75 	u32 request_id;
76 	u32 modem_state;		/* from SMSHOSTLIB_DVB_MODEM_STATE_ET */
77 
78 	u32 ber;		/* Post Viterbi BER [1E-5] */
79 	s32 RSSI;		/* dBm */
80 	s32 carrier_offset;	/* Carrier Offset in bin/1024 */
81 
82 	u32 is_rf_locked;		/* 0 - not locked, 1 - locked */
83 	u32 is_demod_locked;	/* 0 - not locked, 1 - locked */
84 
85 	u32 ber_bit_count;	/* Total number of SYNC bits. */
86 	u32 ber_error_count;	/* Number of erroneous SYNC bits. */
87 
88 	s32 MRC_SNR;		/* dB */
89 	s32 mrc_in_band_pwr;	/* In band power in dBM */
90 	s32 MRC_RSSI;		/* dBm */
91 };
92 
93 /* From smsdvb-debugfs.c */
94 #ifdef CONFIG_SMS_SIANO_DEBUGFS
95 
96 int smsdvb_debugfs_create(struct smsdvb_client_t *client);
97 void smsdvb_debugfs_release(struct smsdvb_client_t *client);
98 void smsdvb_debugfs_register(void);
99 void smsdvb_debugfs_unregister(void);
100 
101 #else
102 
103 static inline int smsdvb_debugfs_create(struct smsdvb_client_t *client)
104 {
105 	return 0;
106 }
107 
108 static inline void smsdvb_debugfs_release(struct smsdvb_client_t *client) {}
109 
110 static inline void smsdvb_debugfs_register(void) {}
111 
112 static inline void smsdvb_debugfs_unregister(void) {};
113 
114 #endif
115 
116