root/drivers/media/common/siano/smsdvb.h
/* SPDX-License-Identifier: GPL-2.0-or-later */
/***********************************************************************
 *
 ***********************************************************************/

struct smsdvb_debugfs;
struct smsdvb_client_t;

typedef void (*sms_prt_dvb_stats_t)(struct smsdvb_debugfs *debug_data,
                                    struct sms_stats *p);

typedef void (*sms_prt_isdb_stats_t)(struct smsdvb_debugfs *debug_data,
                                     struct sms_isdbt_stats *p);

typedef void (*sms_prt_isdb_stats_ex_t)
                        (struct smsdvb_debugfs *debug_data,
                         struct sms_isdbt_stats_ex *p);


struct smsdvb_client_t {
        struct list_head entry;

        struct smscore_device_t *coredev;
        struct smscore_client_t *smsclient;

        struct dvb_adapter      adapter;
        struct dvb_demux        demux;
        struct dmxdev           dmxdev;
        struct dvb_frontend     frontend;

        enum fe_status          fe_status;

        struct completion       tune_done;
        struct completion       stats_done;

        int last_per;

        int legacy_ber, legacy_per;

        int event_fe_state;
        int event_unc_state;

        unsigned long           get_stats_jiffies;

        int                     feed_users;
        bool                    has_tuned;

        /* stats debugfs data */
        struct dentry           *debugfs;

        struct smsdvb_debugfs   *debug_data;

        sms_prt_dvb_stats_t     prt_dvb_stats;
        sms_prt_isdb_stats_t    prt_isdb_stats;
        sms_prt_isdb_stats_ex_t prt_isdb_stats_ex;
};

/*
 * This struct is a mix of struct sms_rx_stats_ex and
 * struct sms_srvm_signal_status.
 * It was obtained by comparing the way it was filled by the original code
 */
struct RECEPTION_STATISTICS_PER_SLICES_S {
        u32 result;
        u32 snr;
        s32 in_band_power;
        u32 ts_packets;
        u32 ets_packets;
        u32 constellation;
        u32 hp_code;
        u32 tps_srv_ind_lp;
        u32 tps_srv_ind_hp;
        u32 cell_id;
        u32 reason;
        u32 request_id;
        u32 modem_state;                /* from SMSHOSTLIB_DVB_MODEM_STATE_ET */

        u32 ber;                /* Post Viterbi BER [1E-5] */
        s32 RSSI;               /* dBm */
        s32 carrier_offset;     /* Carrier Offset in bin/1024 */

        u32 is_rf_locked;               /* 0 - not locked, 1 - locked */
        u32 is_demod_locked;    /* 0 - not locked, 1 - locked */

        u32 ber_bit_count;      /* Total number of SYNC bits. */
        u32 ber_error_count;    /* Number of erroneous SYNC bits. */

        s32 MRC_SNR;            /* dB */
        s32 mrc_in_band_pwr;    /* In band power in dBM */
        s32 MRC_RSSI;           /* dBm */
};

/* From smsdvb-debugfs.c */
#ifdef CONFIG_SMS_SIANO_DEBUGFS

int smsdvb_debugfs_create(struct smsdvb_client_t *client);
void smsdvb_debugfs_release(struct smsdvb_client_t *client);
void smsdvb_debugfs_register(void);
void smsdvb_debugfs_unregister(void);

#else

static inline int smsdvb_debugfs_create(struct smsdvb_client_t *client)
{
        return 0;
}

static inline void smsdvb_debugfs_release(struct smsdvb_client_t *client) {}

static inline void smsdvb_debugfs_register(void) {}

static inline void smsdvb_debugfs_unregister(void) {};

#endif