V4L/DVB (8280): sms1xxx: more codingstyle cleanups
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
73104fb3e4
commit
822374165d
4 changed files with 696 additions and 697 deletions
File diff suppressed because it is too large
Load diff
|
@ -82,12 +82,12 @@ typedef void (*onremove_t)(void *context);
|
|||
|
||||
typedef struct _smscore_buffer
|
||||
{
|
||||
// public members, once passed to clients can be changed freely
|
||||
/* public members, once passed to clients can be changed freely */
|
||||
struct list_head entry;
|
||||
int size;
|
||||
int offset;
|
||||
|
||||
// private members, read-only for clients
|
||||
/* private members, read-only for clients */
|
||||
void *p;
|
||||
dma_addr_t phys;
|
||||
unsigned long offset_in_common;
|
||||
|
@ -123,7 +123,7 @@ typedef struct _smsclient_params
|
|||
void *context;
|
||||
} smsclient_params_t;
|
||||
|
||||
// GPIO definitions for antenna frequency domain control (SMS8021)
|
||||
/* GPIO definitions for antenna frequency domain control (SMS8021) */
|
||||
#define SMS_ANTENNA_GPIO_0 1
|
||||
#define SMS_ANTENNA_GPIO_1 0
|
||||
|
||||
|
@ -223,7 +223,7 @@ typedef struct SmsMsgHdr_S
|
|||
UINT16 msgType;
|
||||
UINT8 msgSrcId;
|
||||
UINT8 msgDstId;
|
||||
UINT16 msgLength; // Length is of the entire message, including header
|
||||
UINT16 msgLength; /* Length of entire message, including header */
|
||||
UINT16 msgFlags;
|
||||
} SmsMsgHdr_ST;
|
||||
|
||||
|
@ -244,24 +244,24 @@ typedef struct SmsVersionRes_S
|
|||
{
|
||||
SmsMsgHdr_ST xMsgHeader;
|
||||
|
||||
UINT16 ChipModel; // e.g. 0x1102 for SMS-1102 "Nova"
|
||||
UINT8 Step; // 0 - Step A
|
||||
UINT8 MetalFix; // 0 - Metal 0
|
||||
UINT16 ChipModel; /* e.g. 0x1102 for SMS-1102 "Nova" */
|
||||
UINT8 Step; /* 0 - Step A */
|
||||
UINT8 MetalFix; /* 0 - Metal 0 */
|
||||
|
||||
UINT8 FirmwareId; // 0xFF <20> ROM, otherwise the value indicated by SMSHOSTLIB_DEVICE_MODES_E
|
||||
UINT8 SupportedProtocols; // Bitwise OR combination of supported protocols
|
||||
UINT8 FirmwareId; /* 0xFF <20> ROM, otherwise the value indicated by SMSHOSTLIB_DEVICE_MODES_E */
|
||||
UINT8 SupportedProtocols; /* Bitwise OR combination of supported protocols */
|
||||
|
||||
UINT8 VersionMajor;
|
||||
UINT8 VersionMinor;
|
||||
UINT8 VersionPatch;
|
||||
UINT8 VersionFieldPatch;
|
||||
UINT8 VersionMajor;
|
||||
UINT8 VersionMinor;
|
||||
UINT8 VersionPatch;
|
||||
UINT8 VersionFieldPatch;
|
||||
|
||||
UINT8 RomVersionMajor;
|
||||
UINT8 RomVersionMinor;
|
||||
UINT8 RomVersionPatch;
|
||||
UINT8 RomVersionFieldPatch;
|
||||
UINT8 RomVersionMajor;
|
||||
UINT8 RomVersionMinor;
|
||||
UINT8 RomVersionPatch;
|
||||
UINT8 RomVersionFieldPatch;
|
||||
|
||||
UINT8 TextLabel[34];
|
||||
UINT8 TextLabel[34];
|
||||
} SmsVersionRes_ST;
|
||||
|
||||
typedef struct SmsFirmware_S
|
||||
|
@ -274,59 +274,60 @@ typedef struct SmsFirmware_S
|
|||
|
||||
typedef struct SMSHOSTLIB_STATISTICS_S
|
||||
{
|
||||
UINT32 Reserved; //!< Reserved
|
||||
UINT32 Reserved; /* Reserved */
|
||||
|
||||
/// Common parameters
|
||||
UINT32 IsRfLocked; //!< 0 - not locked, 1 - locked
|
||||
UINT32 IsDemodLocked; //!< 0 - not locked, 1 - locked
|
||||
UINT32 IsExternalLNAOn; //!< 0 - external LNA off, 1 - external LNA on
|
||||
/* Common parameters */
|
||||
UINT32 IsRfLocked; /* 0 - not locked, 1 - locked */
|
||||
UINT32 IsDemodLocked; /* 0 - not locked, 1 - locked */
|
||||
UINT32 IsExternalLNAOn; /* 0 - external LNA off, 1 - external LNA on */
|
||||
|
||||
/// Reception quality
|
||||
INT32 SNR; //!< dB
|
||||
UINT32 BER; //!< Post Viterbi BER [1E-5]
|
||||
UINT32 FIB_CRC; //!< CRC errors percentage, valid only for DAB
|
||||
UINT32 TS_PER; //!< Transport stream PER, 0xFFFFFFFF indicate N/A, valid only for DVB-T/H
|
||||
UINT32 MFER; //!< DVB-H frame error rate in percentage, 0xFFFFFFFF indicate N/A, valid only for DVB-H
|
||||
INT32 RSSI; //!< dBm
|
||||
INT32 InBandPwr; //!< In band power in dBM
|
||||
INT32 CarrierOffset; //!< Carrier Offset in bin/1024
|
||||
/* Reception quality */
|
||||
INT32 SNR; /* dB */
|
||||
UINT32 BER; /* Post Viterbi BER [1E-5] */
|
||||
UINT32 FIB_CRC; /* CRC errors percentage, valid only for DAB */
|
||||
UINT32 TS_PER; /* Transport stream PER, 0xFFFFFFFF indicate N/A, valid only for DVB-T/H */
|
||||
UINT32 MFER; /* DVB-H frame error rate in percentage, 0xFFFFFFFF indicate N/A, valid only for DVB-H */
|
||||
INT32 RSSI; /* dBm */
|
||||
INT32 InBandPwr; /* In band power in dBM */
|
||||
INT32 CarrierOffset; /* Carrier Offset in bin/1024 */
|
||||
|
||||
/// Transmission parameters
|
||||
UINT32 Frequency; //!< Frequency in Hz
|
||||
UINT32 Bandwidth; //!< Bandwidth in MHz, valid only for DVB-T/H
|
||||
UINT32 TransmissionMode; //!< Transmission Mode, for DAB modes 1-4, for DVB-T/H FFT mode carriers in Kilos
|
||||
UINT32 ModemState; //!< from SMS_DvbModemState_ET , valid only for DVB-T/H
|
||||
UINT32 GuardInterval; //!< Guard Interval, 1 divided by value , valid only for DVB-T/H
|
||||
UINT32 CodeRate; //!< Code Rate from SMS_DvbModemState_ET, valid only for DVB-T/H
|
||||
UINT32 LPCodeRate; //!< Low Priority Code Rate from SMS_DvbModemState_ET, valid only for DVB-T/H
|
||||
UINT32 Hierarchy; //!< Hierarchy from SMS_Hierarchy_ET, valid only for DVB-T/H
|
||||
UINT32 Constellation; //!< Constellation from SMS_Constellation_ET, valid only for DVB-T/H
|
||||
/* Transmission parameters */
|
||||
UINT32 Frequency; /* Frequency in Hz */
|
||||
UINT32 Bandwidth; /* Bandwidth in MHz, valid only for DVB-T/H */
|
||||
UINT32 TransmissionMode; /* Transmission Mode, for DAB modes 1-4, for DVB-T/H FFT mode carriers in Kilos */
|
||||
UINT32 ModemState; /* from SMS_DvbModemState_ET , valid only for DVB-T/H */
|
||||
UINT32 GuardInterval; /* Guard Interval, 1 divided by value , valid only for DVB-T/H */
|
||||
UINT32 CodeRate; /* Code Rate from SMS_DvbModemState_ET, valid only for DVB-T/H */
|
||||
UINT32 LPCodeRate; /* Low Priority Code Rate from SMS_DvbModemState_ET, valid only for DVB-T/H */
|
||||
UINT32 Hierarchy; /* Hierarchy from SMS_Hierarchy_ET, valid only for DVB-T/H */
|
||||
UINT32 Constellation; /* Constellation from SMS_Constellation_ET, valid only for DVB-T/H */
|
||||
|
||||
/// Burst parameters, valid only for DVB-H
|
||||
UINT32 BurstSize; //!< Current burst size in bytes, valid only for DVB-H
|
||||
UINT32 BurstDuration; //!< Current burst duration in mSec, valid only for DVB-H
|
||||
UINT32 BurstCycleTime; //!< Current burst cycle time in mSec, valid only for DVB-H
|
||||
UINT32 CalculatedBurstCycleTime;//!< Current burst cycle time in mSec, as calculated by demodulator, valid only for DVB-H
|
||||
UINT32 NumOfRows; //!< Number of rows in MPE table, valid only for DVB-H
|
||||
UINT32 NumOfPaddCols; //!< Number of padding columns in MPE table, valid only for DVB-H
|
||||
UINT32 NumOfPunctCols; //!< Number of puncturing columns in MPE table, valid only for DVB-H
|
||||
UINT32 ErrorTSPackets; //!< Number of erroneous transport-stream packets
|
||||
UINT32 TotalTSPackets; //!< Total number of transport-stream packets
|
||||
UINT32 NumOfValidMpeTlbs; //!< Number of MPE tables which do not include errors after MPE RS decoding
|
||||
UINT32 NumOfInvalidMpeTlbs; //!< Number of MPE tables which include errors after MPE RS decoding
|
||||
UINT32 NumOfCorrectedMpeTlbs; //!< Number of MPE tables which were corrected by MPE RS decoding
|
||||
/// Common params
|
||||
UINT32 BERErrorCount; //!< Number of errornous SYNC bits.
|
||||
UINT32 BERBitCount; //!< Total number of SYNC bits.
|
||||
/* Burst parameters, valid only for DVB-H */
|
||||
UINT32 BurstSize; /* Current burst size in bytes, valid only for DVB-H */
|
||||
UINT32 BurstDuration; /* Current burst duration in mSec, valid only for DVB-H */
|
||||
UINT32 BurstCycleTime; /* Current burst cycle time in mSec, valid only for DVB-H */
|
||||
UINT32 CalculatedBurstCycleTime; /* Current burst cycle time in mSec, as calculated by demodulator, valid only for DVB-H */
|
||||
UINT32 NumOfRows; /* Number of rows in MPE table, valid only for DVB-H */
|
||||
UINT32 NumOfPaddCols; /* Number of padding columns in MPE table, valid only for DVB-H */
|
||||
UINT32 NumOfPunctCols; /* Number of puncturing columns in MPE table, valid only for DVB-H */
|
||||
UINT32 ErrorTSPackets; /* Number of erroneous transport-stream packets */
|
||||
UINT32 TotalTSPackets; /* Total number of transport-stream packets */
|
||||
UINT32 NumOfValidMpeTlbs; /* Number of MPE tables which do not include errors after MPE RS decoding */
|
||||
UINT32 NumOfInvalidMpeTlbs; /* Number of MPE tables which include errors after MPE RS decoding */
|
||||
UINT32 NumOfCorrectedMpeTlbs; /* Number of MPE tables which were corrected by MPE RS decoding */
|
||||
|
||||
/// Interface information
|
||||
UINT32 SmsToHostTxErrors; //!< Total number of transmission errors.
|
||||
/* Common params */
|
||||
UINT32 BERErrorCount; /* Number of errornous SYNC bits. */
|
||||
UINT32 BERBitCount; /* Total number of SYNC bits. */
|
||||
|
||||
/// DAB/T-DMB
|
||||
UINT32 PreBER; //!< DAB/T-DMB only: Pre Viterbi BER [1E-5]
|
||||
/* Interface information */
|
||||
UINT32 SmsToHostTxErrors; /* Total number of transmission errors. */
|
||||
|
||||
/// DVB-H TPS parameters
|
||||
UINT32 CellId; //!< TPS Cell ID in bits 15..0, bits 31..16 zero; if set to 0xFFFFFFFF cell_id not yet recovered
|
||||
/* DAB/T-DMB */
|
||||
UINT32 PreBER; /* DAB/T-DMB only: Pre Viterbi BER [1E-5] */
|
||||
|
||||
/* DVB-H TPS parameters */
|
||||
UINT32 CellId; /* TPS Cell ID in bits 15..0, bits 31..16 zero; if set to 0xFFFFFFFF cell_id not yet recovered */
|
||||
|
||||
} SMSHOSTLIB_STATISTICS_ST;
|
||||
|
||||
|
@ -336,147 +337,151 @@ typedef struct
|
|||
|
||||
SMSHOSTLIB_STATISTICS_ST Stat;
|
||||
|
||||
// Split the calc of the SNR in DAB
|
||||
UINT32 Signal; //!< dB
|
||||
UINT32 Noise; //!< dB
|
||||
/* Split the calc of the SNR in DAB */
|
||||
UINT32 Signal; /* dB */
|
||||
UINT32 Noise; /* dB */
|
||||
|
||||
} SmsMsgStatisticsInfo_ST;
|
||||
|
||||
typedef struct SMSHOSTLIB_ISDBT_LAYER_STAT_S
|
||||
{
|
||||
// Per-layer information
|
||||
UINT32 CodeRate; //!< Code Rate from SMSHOSTLIB_CODE_RATE_ET, 255 means layer does not exist
|
||||
UINT32 Constellation; //!< Constellation from SMSHOSTLIB_CONSTELLATION_ET, 255 means layer does not exist
|
||||
UINT32 BER; //!< Post Viterbi BER [1E-5], 0xFFFFFFFF indicate N/A
|
||||
UINT32 BERErrorCount; //!< Post Viterbi Error Bits Count
|
||||
UINT32 BERBitCount; //!< Post Viterbi Total Bits Count
|
||||
UINT32 PreBER; //!< Pre Viterbi BER [1E-5], 0xFFFFFFFF indicate N/A
|
||||
UINT32 TS_PER; //!< Transport stream PER [%], 0xFFFFFFFF indicate N/A
|
||||
UINT32 ErrorTSPackets; //!< Number of erroneous transport-stream packets
|
||||
UINT32 TotalTSPackets; //!< Total number of transport-stream packets
|
||||
UINT32 TILdepthI; //!< Time interleaver depth I parameter, 255 means layer does not exist
|
||||
UINT32 NumberOfSegments; //!< Number of segments in layer A, 255 means layer does not exist
|
||||
UINT32 TMCCErrors; //!< TMCC errors
|
||||
/* Per-layer information */
|
||||
UINT32 CodeRate; /* Code Rate from SMSHOSTLIB_CODE_RATE_ET, 255 means layer does not exist */
|
||||
UINT32 Constellation; /* Constellation from SMSHOSTLIB_CONSTELLATION_ET, 255 means layer does not exist */
|
||||
UINT32 BER; /* Post Viterbi BER [1E-5], 0xFFFFFFFF indicate N/A */
|
||||
UINT32 BERErrorCount; /* Post Viterbi Error Bits Count */
|
||||
UINT32 BERBitCount; /* Post Viterbi Total Bits Count */
|
||||
UINT32 PreBER; /* Pre Viterbi BER [1E-5], 0xFFFFFFFF indicate N/A */
|
||||
UINT32 TS_PER; /* Transport stream PER [%], 0xFFFFFFFF indicate N/A */
|
||||
UINT32 ErrorTSPackets; /* Number of erroneous transport-stream packets */
|
||||
UINT32 TotalTSPackets; /* Total number of transport-stream packets */
|
||||
UINT32 TILdepthI; /* Time interleaver depth I parameter, 255 means layer does not exist */
|
||||
UINT32 NumberOfSegments; /* Number of segments in layer A, 255 means layer does not exist */
|
||||
UINT32 TMCCErrors; /* TMCC errors */
|
||||
} SMSHOSTLIB_ISDBT_LAYER_STAT_ST;
|
||||
|
||||
typedef struct SMSHOSTLIB_STATISTICS_ISDBT_S
|
||||
{
|
||||
UINT32 StatisticsType; //!< Enumerator identifying the type of the structure. Values are the same as SMSHOSTLIB_DEVICE_MODES_E
|
||||
//!< This fiels MUST always first in any statistics structure
|
||||
UINT32 StatisticsType; /* Enumerator identifying the type of the
|
||||
* structure. Values are the same as
|
||||
* SMSHOSTLIB_DEVICE_MODES_E
|
||||
*
|
||||
* This field MUST always be first in any
|
||||
* statistics structure */
|
||||
|
||||
UINT32 FullSize; //!< Total size of the structure returned by the modem. If the size requested by
|
||||
//!< the host is smaller than FullSize, the struct will be truncated
|
||||
UINT32 FullSize; /* Total size of the structure returned by the modem. If the size requested by
|
||||
* the host is smaller than FullSize, the struct will be truncated */
|
||||
|
||||
// Common parameters
|
||||
UINT32 IsRfLocked; //!< 0 - not locked, 1 - locked
|
||||
UINT32 IsDemodLocked; //!< 0 - not locked, 1 - locked
|
||||
UINT32 IsExternalLNAOn; //!< 0 - external LNA off, 1 - external LNA on
|
||||
/* Common parameters */
|
||||
UINT32 IsRfLocked; /* 0 - not locked, 1 - locked */
|
||||
UINT32 IsDemodLocked; /* 0 - not locked, 1 - locked */
|
||||
UINT32 IsExternalLNAOn; /* 0 - external LNA off, 1 - external LNA on */
|
||||
|
||||
// Reception quality
|
||||
INT32 SNR; //!< dB
|
||||
INT32 RSSI; //!< dBm
|
||||
INT32 InBandPwr; //!< In band power in dBM
|
||||
INT32 CarrierOffset; //!< Carrier Offset in Hz
|
||||
/* Reception quality */
|
||||
INT32 SNR; /* dB */
|
||||
INT32 RSSI; /* dBm */
|
||||
INT32 InBandPwr; /* In band power in dBM */
|
||||
INT32 CarrierOffset; /* Carrier Offset in Hz */
|
||||
|
||||
// Transmission parameters
|
||||
UINT32 Frequency; //!< Frequency in Hz
|
||||
UINT32 Bandwidth; //!< Bandwidth in MHz
|
||||
UINT32 TransmissionMode; //!< ISDB-T transmission mode
|
||||
UINT32 ModemState; //!< 0 - Acquisition, 1 - Locked
|
||||
UINT32 GuardInterval; //!< Guard Interval, 1 divided by value
|
||||
UINT32 SystemType; //!< ISDB-T system type (ISDB-T / ISDB-Tsb)
|
||||
UINT32 PartialReception; //!< TRUE - partial reception, FALSE otherwise
|
||||
UINT32 NumOfLayers; //!< Number of ISDB-T layers in the network
|
||||
/* Transmission parameters */
|
||||
UINT32 Frequency; /* Frequency in Hz */
|
||||
UINT32 Bandwidth; /* Bandwidth in MHz */
|
||||
UINT32 TransmissionMode; /* ISDB-T transmission mode */
|
||||
UINT32 ModemState; /* 0 - Acquisition, 1 - Locked */
|
||||
UINT32 GuardInterval; /* Guard Interval, 1 divided by value */
|
||||
UINT32 SystemType; /* ISDB-T system type (ISDB-T / ISDB-Tsb) */
|
||||
UINT32 PartialReception; /* TRUE - partial reception, FALSE otherwise */
|
||||
UINT32 NumOfLayers; /* Number of ISDB-T layers in the network */
|
||||
|
||||
// Per-layer information
|
||||
// Layers A, B and C
|
||||
SMSHOSTLIB_ISDBT_LAYER_STAT_ST LayerInfo[3]; //!< Per-layer statistics, see SMSHOSTLIB_ISDBT_LAYER_STAT_ST
|
||||
/* Per-layer information */
|
||||
/* Layers A, B and C */
|
||||
SMSHOSTLIB_ISDBT_LAYER_STAT_ST LayerInfo[3]; /* Per-layer statistics, see SMSHOSTLIB_ISDBT_LAYER_STAT_ST */
|
||||
|
||||
// Interface information
|
||||
UINT32 SmsToHostTxErrors; //!< Total number of transmission errors.
|
||||
/* Interface information */
|
||||
UINT32 SmsToHostTxErrors; /* Total number of transmission errors. */
|
||||
|
||||
} SMSHOSTLIB_STATISTICS_ISDBT_ST;
|
||||
|
||||
typedef struct SMSHOSTLIB_STATISTICS_DVB_S
|
||||
{
|
||||
UINT32 StatisticsType; //!< Enumerator identifying the type of the structure. Values are the same as SMSHOSTLIB_DEVICE_MODES_E
|
||||
//!< This fiels MUST always first in any statistics structure
|
||||
UINT32 StatisticsType; /* Enumerator identifying the type of the structure. Values are the same as SMSHOSTLIB_DEVICE_MODES_E
|
||||
* This fiels MUST always first in any statistics structure */
|
||||
|
||||
UINT32 FullSize; //!< Total size of the structure returned by the modem. If the size requested by
|
||||
//!< the host is smaller than FullSize, the struct will be truncated
|
||||
// Common parameters
|
||||
UINT32 IsRfLocked; //!< 0 - not locked, 1 - locked
|
||||
UINT32 IsDemodLocked; //!< 0 - not locked, 1 - locked
|
||||
UINT32 IsExternalLNAOn; //!< 0 - external LNA off, 1 - external LNA on
|
||||
UINT32 FullSize; /* Total size of the structure returned by the modem. If the size requested by
|
||||
* the host is smaller than FullSize, the struct will be truncated */
|
||||
/* Common parameters */
|
||||
UINT32 IsRfLocked; /* 0 - not locked, 1 - locked */
|
||||
UINT32 IsDemodLocked; /* 0 - not locked, 1 - locked */
|
||||
UINT32 IsExternalLNAOn; /* 0 - external LNA off, 1 - external LNA on */
|
||||
|
||||
// Reception quality
|
||||
INT32 SNR; //!< dB
|
||||
UINT32 BER; //!< Post Viterbi BER [1E-5]
|
||||
UINT32 BERErrorCount; //!< Number of errornous SYNC bits.
|
||||
UINT32 BERBitCount; //!< Total number of SYNC bits.
|
||||
UINT32 TS_PER; //!< Transport stream PER, 0xFFFFFFFF indicate N/A
|
||||
UINT32 MFER; //!< DVB-H frame error rate in percentage, 0xFFFFFFFF indicate N/A, valid only for DVB-H
|
||||
INT32 RSSI; //!< dBm
|
||||
INT32 InBandPwr; //!< In band power in dBM
|
||||
INT32 CarrierOffset; //!< Carrier Offset in bin/1024
|
||||
/* Reception quality */
|
||||
INT32 SNR; /* dB */
|
||||
UINT32 BER; /* Post Viterbi BER [1E-5] */
|
||||
UINT32 BERErrorCount; /* Number of errornous SYNC bits. */
|
||||
UINT32 BERBitCount; /* Total number of SYNC bits. */
|
||||
UINT32 TS_PER; /* Transport stream PER, 0xFFFFFFFF indicate N/A */
|
||||
UINT32 MFER; /* DVB-H frame error rate in percentage, 0xFFFFFFFF indicate N/A, valid only for DVB-H */
|
||||
INT32 RSSI; /* dBm */
|
||||
INT32 InBandPwr; /* In band power in dBM */
|
||||
INT32 CarrierOffset; /* Carrier Offset in bin/1024 */
|
||||
|
||||
// Transmission parameters
|
||||
UINT32 Frequency; //!< Frequency in Hz
|
||||
UINT32 Bandwidth; //!< Bandwidth in MHz
|
||||
UINT32 ModemState; //!< from SMSHOSTLIB_DVB_MODEM_STATE_ET
|
||||
UINT32 TransmissionMode; //!< FFT mode carriers in Kilos
|
||||
UINT32 GuardInterval; //!< Guard Interval, 1 divided by value
|
||||
UINT32 CodeRate; //!< Code Rate from SMSHOSTLIB_CODE_RATE_ET
|
||||
UINT32 LPCodeRate; //!< Low Priority Code Rate from SMSHOSTLIB_CODE_RATE_ET
|
||||
UINT32 Hierarchy; //!< Hierarchy from SMSHOSTLIB_HIERARCHY_ET
|
||||
UINT32 Constellation; //!< Constellation from SMSHOSTLIB_CONSTELLATION_ET
|
||||
/* Transmission parameters */
|
||||
UINT32 Frequency; /* Frequency in Hz */
|
||||
UINT32 Bandwidth; /* Bandwidth in MHz */
|
||||
UINT32 ModemState; /* from SMSHOSTLIB_DVB_MODEM_STATE_ET */
|
||||
UINT32 TransmissionMode; /* FFT mode carriers in Kilos */
|
||||
UINT32 GuardInterval; /* Guard Interval, 1 divided by value */
|
||||
UINT32 CodeRate; /* Code Rate from SMSHOSTLIB_CODE_RATE_ET */
|
||||
UINT32 LPCodeRate; /* Low Priority Code Rate from SMSHOSTLIB_CODE_RATE_ET */
|
||||
UINT32 Hierarchy; /* Hierarchy from SMSHOSTLIB_HIERARCHY_ET */
|
||||
UINT32 Constellation; /* Constellation from SMSHOSTLIB_CONSTELLATION_ET */
|
||||
|
||||
// Burst parameters, valid only for DVB-H
|
||||
UINT32 BurstSize; //!< Current burst size in bytes, valid only for DVB-H
|
||||
UINT32 BurstDuration; //!< Current burst duration in mSec, valid only for DVB-H
|
||||
UINT32 BurstCycleTime; //!< Current burst cycle time in mSec, valid only for DVB-H
|
||||
UINT32 CalculatedBurstCycleTime;//!< Current burst cycle time in mSec, as calculated by demodulator, valid only for DVB-H
|
||||
UINT32 NumOfRows; //!< Number of rows in MPE table, valid only for DVB-H
|
||||
UINT32 NumOfPaddCols; //!< Number of padding columns in MPE table, valid only for DVB-H
|
||||
UINT32 NumOfPunctCols; //!< Number of puncturing columns in MPE table, valid only for DVB-H
|
||||
UINT32 ErrorTSPackets; //!< Number of erroneous transport-stream packets
|
||||
UINT32 TotalTSPackets; //!< Total number of transport-stream packets
|
||||
UINT32 NumOfValidMpeTlbs; //!< Number of MPE tables which do not include errors after MPE RS decoding, valid only for DVB-H
|
||||
UINT32 NumOfInvalidMpeTlbs; //!< Number of MPE tables which include errors after MPE RS decoding, valid only for DVB-H
|
||||
UINT32 NumOfCorrectedMpeTlbs; //!< Number of MPE tables which were corrected by MPE RS decoding, valid only for DVB-H
|
||||
UINT32 NumMPEReceived; //!< DVB-H, Num MPE section received
|
||||
/* Burst parameters, valid only for DVB-H */
|
||||
UINT32 BurstSize; /* Current burst size in bytes, valid only for DVB-H */
|
||||
UINT32 BurstDuration; /* Current burst duration in mSec, valid only for DVB-H */
|
||||
UINT32 BurstCycleTime; /* Current burst cycle time in mSec, valid only for DVB-H */
|
||||
UINT32 CalculatedBurstCycleTime; /* Current burst cycle time in mSec, as calculated by demodulator, valid only for DVB-H */
|
||||
UINT32 NumOfRows; /* Number of rows in MPE table, valid only for DVB-H */
|
||||
UINT32 NumOfPaddCols; /* Number of padding columns in MPE table, valid only for DVB-H */
|
||||
UINT32 NumOfPunctCols; /* Number of puncturing columns in MPE table, valid only for DVB-H */
|
||||
UINT32 ErrorTSPackets; /* Number of erroneous transport-stream packets */
|
||||
UINT32 TotalTSPackets; /* Total number of transport-stream packets */
|
||||
UINT32 NumOfValidMpeTlbs; /* Number of MPE tables which do not include errors after MPE RS decoding, valid only for DVB-H */
|
||||
UINT32 NumOfInvalidMpeTlbs; /* Number of MPE tables which include errors after MPE RS decoding, valid only for DVB-H */
|
||||
UINT32 NumOfCorrectedMpeTlbs; /* Number of MPE tables which were corrected by MPE RS decoding, valid only for DVB-H */
|
||||
UINT32 NumMPEReceived; /* DVB-H, Num MPE section received */
|
||||
|
||||
// DVB-H TPS parameters
|
||||
UINT32 CellId; //!< TPS Cell ID in bits 15..0, bits 31..16 zero; if set to 0xFFFFFFFF cell_id not yet recovered
|
||||
UINT32 DvbhSrvIndHP; //!< DVB-H service indication info, bit 1 - Time Slicing indicator, bit 0 - MPE-FEC indicator
|
||||
UINT32 DvbhSrvIndLP; //!< DVB-H service indication info, bit 1 - Time Slicing indicator, bit 0 - MPE-FEC indicator
|
||||
/* DVB-H TPS parameters */
|
||||
UINT32 CellId; /* TPS Cell ID in bits 15..0, bits 31..16 zero; if set to 0xFFFFFFFF cell_id not yet recovered */
|
||||
UINT32 DvbhSrvIndHP; /* DVB-H service indication info, bit 1 - Time Slicing indicator, bit 0 - MPE-FEC indicator */
|
||||
UINT32 DvbhSrvIndLP; /* DVB-H service indication info, bit 1 - Time Slicing indicator, bit 0 - MPE-FEC indicator */
|
||||
|
||||
// Interface information
|
||||
UINT32 SmsToHostTxErrors; //!< Total number of transmission errors.
|
||||
/* Interface information */
|
||||
UINT32 SmsToHostTxErrors; /* Total number of transmission errors. */
|
||||
|
||||
} SMSHOSTLIB_STATISTICS_DVB_ST;
|
||||
|
||||
typedef struct SMSHOSTLIB_GPIO_CONFIG_S
|
||||
{
|
||||
UINT8 Direction; //!< GPIO direction: Input - 0, Output - 1
|
||||
UINT8 PullUpDown; //!< PullUp/PullDown: None - 0, PullDown - 1, PullUp - 2, Keeper - 3
|
||||
UINT8 InputCharacteristics; //!< Input Characteristics: Normal - 0, Schmitt trigger - 1
|
||||
UINT8 OutputSlewRate; //!< Output Slew Rate: Fast slew rate - 0, Slow slew rate - 1
|
||||
UINT8 OutputDriving; //!< Output driving capability: 4mA - 0, 8mA - 1, 12mA - 2, 16mA - 3
|
||||
UINT8 Direction; /* GPIO direction: Input - 0, Output - 1 */
|
||||
UINT8 PullUpDown; /* PullUp/PullDown: None - 0, PullDown - 1, PullUp - 2, Keeper - 3 */
|
||||
UINT8 InputCharacteristics; /* Input Characteristics: Normal - 0, Schmitt trigger - 1 */
|
||||
UINT8 OutputSlewRate; /* Output Slew Rate: Fast slew rate - 0, Slow slew rate - 1 */
|
||||
UINT8 OutputDriving; /* Output driving capability: 4mA - 0, 8mA - 1, 12mA - 2, 16mA - 3 */
|
||||
} SMSHOSTLIB_GPIO_CONFIG_ST;
|
||||
|
||||
typedef struct SMSHOSTLIB_I2C_REQ_S
|
||||
{
|
||||
UINT32 DeviceAddress; // I2c device address
|
||||
UINT32 WriteCount; // number of bytes to write
|
||||
UINT32 ReadCount; // number of bytes to read
|
||||
UINT32 DeviceAddress; /* I2c device address */
|
||||
UINT32 WriteCount; /* number of bytes to write */
|
||||
UINT32 ReadCount; /* number of bytes to read */
|
||||
UINT8 Data[1];
|
||||
} SMSHOSTLIB_I2C_REQ_ST;
|
||||
|
||||
typedef struct SMSHOSTLIB_I2C_RES_S
|
||||
{
|
||||
UINT32 Status; // non-zero value in case of failure
|
||||
UINT32 ReadCount; // number of bytes read
|
||||
UINT32 Status; /* non-zero value in case of failure */
|
||||
UINT32 ReadCount; /* number of bytes read */
|
||||
UINT8 Data[1];
|
||||
} SMSHOSTLIB_I2C_RES_ST;
|
||||
|
||||
|
@ -492,12 +497,12 @@ typedef struct _smsdvb_client
|
|||
struct dmxdev dmxdev;
|
||||
struct dvb_frontend frontend;
|
||||
|
||||
fe_status_t fe_status;
|
||||
int fe_ber, fe_snr, fe_signal_strength;
|
||||
fe_status_t fe_status;
|
||||
int fe_ber, fe_snr, fe_signal_strength;
|
||||
|
||||
struct completion tune_done, stat_done;
|
||||
|
||||
// todo: save freq/band instead whole struct
|
||||
/* todo: save freq/band instead whole struct */
|
||||
struct dvb_frontend_parameters fe_params;
|
||||
|
||||
} smsdvb_client_t;
|
||||
|
@ -508,14 +513,17 @@ extern int smscore_registry_getmode(char *devpath);
|
|||
extern int smscore_register_hotplug(hotplug_t hotplug);
|
||||
extern void smscore_unregister_hotplug(hotplug_t hotplug);
|
||||
|
||||
extern int smscore_register_device(smsdevice_params_t *params, smscore_device_t **coredev);
|
||||
extern int smscore_register_device(smsdevice_params_t *params,
|
||||
smscore_device_t **coredev);
|
||||
extern void smscore_unregister_device(smscore_device_t *coredev);
|
||||
|
||||
extern int smscore_start_device(smscore_device_t *coredev);
|
||||
extern int smscore_load_firmware(smscore_device_t *coredev, char *filename,
|
||||
loadfirmware_t loadfirmware_handler);
|
||||
|
||||
extern int smscore_load_firmware_from_buffer(smscore_device_t *coredev, u8 *buffer, int size, int new_mode);
|
||||
extern int smscore_load_firmware_from_buffer(smscore_device_t *coredev,
|
||||
u8 *buffer, int size,
|
||||
int new_mode);
|
||||
|
||||
extern int smscore_set_device_mode(smscore_device_t *coredev, int mode);
|
||||
extern int smscore_get_device_mode(smscore_device_t *coredev);
|
||||
|
@ -525,8 +533,10 @@ extern int smscore_register_client(smscore_device_t *coredev,
|
|||
smscore_client_t **client);
|
||||
extern void smscore_unregister_client(smscore_client_t *client);
|
||||
|
||||
extern int smsclient_sendrequest(smscore_client_t *client, void *buffer, size_t size);
|
||||
extern void smscore_onresponse(smscore_device_t *coredev, smscore_buffer_t *cb);
|
||||
extern int smsclient_sendrequest(smscore_client_t *client,
|
||||
void *buffer, size_t size);
|
||||
extern void smscore_onresponse(smscore_device_t *coredev,
|
||||
smscore_buffer_t *cb);
|
||||
|
||||
extern int smscore_get_common_buffer_size(smscore_device_t *coredev);
|
||||
extern int smscore_map_common_buffer(smscore_device_t *coredev,
|
||||
|
@ -543,4 +553,4 @@ void smsdvb_unregister(void);
|
|||
int smsusb_register(void);
|
||||
void smsusb_unregister(void);
|
||||
|
||||
#endif // __smscoreapi_h__
|
||||
#endif /* __smscoreapi_h__ */
|
||||
|
|
|
@ -34,47 +34,49 @@ int smsdvb_onresponse(void *context, smscore_buffer_t *cb)
|
|||
smsdvb_client_t *client = (smsdvb_client_t *) context;
|
||||
SmsMsgHdr_ST *phdr = (SmsMsgHdr_ST *)(((u8 *) cb->p) + cb->offset);
|
||||
|
||||
switch(phdr->msgType)
|
||||
switch(phdr->msgType) {
|
||||
case MSG_SMS_DVBT_BDA_DATA:
|
||||
dvb_dmx_swfilter(&client->demux, (u8 *)(phdr + 1),
|
||||
cb->size - sizeof(SmsMsgHdr_ST));
|
||||
break;
|
||||
|
||||
case MSG_SMS_RF_TUNE_RES:
|
||||
complete(&client->tune_done);
|
||||
break;
|
||||
|
||||
case MSG_SMS_GET_STATISTICS_RES:
|
||||
{
|
||||
case MSG_SMS_DVBT_BDA_DATA:
|
||||
dvb_dmx_swfilter(&client->demux, (u8 *)(phdr + 1),
|
||||
cb->size - sizeof(SmsMsgHdr_ST));
|
||||
break;
|
||||
SmsMsgStatisticsInfo_ST *p =
|
||||
(SmsMsgStatisticsInfo_ST *)(phdr + 1);
|
||||
|
||||
case MSG_SMS_RF_TUNE_RES:
|
||||
complete(&client->tune_done);
|
||||
break;
|
||||
|
||||
case MSG_SMS_GET_STATISTICS_RES:
|
||||
if (p->Stat.IsDemodLocked)
|
||||
{
|
||||
SmsMsgStatisticsInfo_ST *p =
|
||||
(SmsMsgStatisticsInfo_ST *)(phdr + 1);
|
||||
client->fe_status = FE_HAS_SIGNAL |
|
||||
FE_HAS_CARRIER |
|
||||
FE_HAS_VITERBI |
|
||||
FE_HAS_SYNC |
|
||||
FE_HAS_LOCK;
|
||||
|
||||
if (p->Stat.IsDemodLocked)
|
||||
{
|
||||
client->fe_status = FE_HAS_SIGNAL | FE_HAS_CARRIER | FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
|
||||
client->fe_snr = p->Stat.SNR;
|
||||
client->fe_ber = p->Stat.BER;
|
||||
client->fe_snr = p->Stat.SNR;
|
||||
client->fe_ber = p->Stat.BER;
|
||||
|
||||
if (p->Stat.InBandPwr < -95)
|
||||
client->fe_signal_strength = 0;
|
||||
else if (p->Stat.InBandPwr > -29)
|
||||
client->fe_signal_strength = 100;
|
||||
else
|
||||
client->fe_signal_strength = (p->Stat.InBandPwr + 95) * 3 / 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
client->fe_status = 0;
|
||||
client->fe_snr =
|
||||
client->fe_ber =
|
||||
if (p->Stat.InBandPwr < -95)
|
||||
client->fe_signal_strength = 0;
|
||||
}
|
||||
|
||||
complete(&client->stat_done);
|
||||
break;
|
||||
else if (p->Stat.InBandPwr > -29)
|
||||
client->fe_signal_strength = 100;
|
||||
else
|
||||
client->fe_signal_strength =
|
||||
(p->Stat.InBandPwr + 95) * 3 / 2;
|
||||
} else {
|
||||
client->fe_status = 0;
|
||||
client->fe_snr =
|
||||
client->fe_ber =
|
||||
client->fe_signal_strength = 0;
|
||||
}
|
||||
}
|
||||
|
||||
complete(&client->stat_done);
|
||||
break;
|
||||
} }
|
||||
|
||||
smscore_putbuffer(client->coredev, cb);
|
||||
|
||||
|
@ -106,7 +108,8 @@ void smsdvb_onremove(void *context)
|
|||
|
||||
static int smsdvb_start_feed(struct dvb_demux_feed *feed)
|
||||
{
|
||||
smsdvb_client_t *client = container_of(feed->demux, smsdvb_client_t, demux);
|
||||
smsdvb_client_t *client =
|
||||
container_of(feed->demux, smsdvb_client_t, demux);
|
||||
SmsMsgData_ST PidMsg;
|
||||
|
||||
printk("%s add pid %d(%x)\n", __func__, feed->pid, feed->pid);
|
||||
|
@ -118,12 +121,14 @@ static int smsdvb_start_feed(struct dvb_demux_feed *feed)
|
|||
PidMsg.xMsgHeader.msgLength = sizeof(PidMsg);
|
||||
PidMsg.msgData[0] = feed->pid;
|
||||
|
||||
return smsclient_sendrequest(client->smsclient, &PidMsg, sizeof(PidMsg));
|
||||
return smsclient_sendrequest(client->smsclient,
|
||||
&PidMsg, sizeof(PidMsg));
|
||||
}
|
||||
|
||||
static int smsdvb_stop_feed(struct dvb_demux_feed *feed)
|
||||
{
|
||||
smsdvb_client_t *client = container_of(feed->demux, smsdvb_client_t, demux);
|
||||
smsdvb_client_t *client =
|
||||
container_of(feed->demux, smsdvb_client_t, demux);
|
||||
SmsMsgData_ST PidMsg;
|
||||
|
||||
printk("%s remove pid %d(%x)\n", __func__, feed->pid, feed->pid);
|
||||
|
@ -135,7 +140,8 @@ static int smsdvb_stop_feed(struct dvb_demux_feed *feed)
|
|||
PidMsg.xMsgHeader.msgLength = sizeof(PidMsg);
|
||||
PidMsg.msgData[0] = feed->pid;
|
||||
|
||||
return smsclient_sendrequest(client->smsclient, &PidMsg, sizeof(PidMsg));
|
||||
return smsclient_sendrequest(client->smsclient,
|
||||
&PidMsg, sizeof(PidMsg));
|
||||
}
|
||||
|
||||
static int smsdvb_sendrequest_and_wait(smsdvb_client_t *client,
|
||||
|
@ -146,13 +152,18 @@ static int smsdvb_sendrequest_and_wait(smsdvb_client_t *client,
|
|||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
return wait_for_completion_timeout(completion, msecs_to_jiffies(2000)) ? 0 : -ETIME;
|
||||
return wait_for_completion_timeout(completion,
|
||||
msecs_to_jiffies(2000)) ?
|
||||
0 : -ETIME;
|
||||
}
|
||||
|
||||
static int smsdvb_send_statistics_request(smsdvb_client_t *client)
|
||||
{
|
||||
SmsMsgHdr_ST Msg = { MSG_SMS_GET_STATISTICS_REQ, DVBT_BDA_CONTROL_MSG_ID, HIF_TASK, sizeof(SmsMsgHdr_ST), 0 };
|
||||
return smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg), &client->stat_done);
|
||||
SmsMsgHdr_ST Msg = { MSG_SMS_GET_STATISTICS_REQ,
|
||||
DVBT_BDA_CONTROL_MSG_ID,
|
||||
HIF_TASK, sizeof(SmsMsgHdr_ST), 0 };
|
||||
return smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg),
|
||||
&client->stat_done);
|
||||
}
|
||||
|
||||
static int smsdvb_read_status(struct dvb_frontend *fe, fe_status_t *stat)
|
||||
|
@ -199,7 +210,8 @@ static int smsdvb_read_snr(struct dvb_frontend *fe, u16 *snr)
|
|||
return rc;
|
||||
}
|
||||
|
||||
static int smsdvb_get_tune_settings(struct dvb_frontend *fe, struct dvb_frontend_tune_settings *tune)
|
||||
static int smsdvb_get_tune_settings(struct dvb_frontend *fe,
|
||||
struct dvb_frontend_tune_settings *tune)
|
||||
{
|
||||
printk("%s\n", __func__);
|
||||
|
||||
|
@ -209,14 +221,15 @@ static int smsdvb_get_tune_settings(struct dvb_frontend *fe, struct dvb_frontend
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int smsdvb_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_parameters *fep)
|
||||
static int smsdvb_set_frontend(struct dvb_frontend *fe,
|
||||
struct dvb_frontend_parameters *fep)
|
||||
{
|
||||
smsdvb_client_t *client = container_of(fe, smsdvb_client_t, frontend);
|
||||
|
||||
struct
|
||||
{
|
||||
SmsMsgHdr_ST Msg;
|
||||
u32 Data[3];
|
||||
u32 Data[3];
|
||||
} Msg;
|
||||
|
||||
Msg.Msg.msgSrcId = DVBT_BDA_CONTROL_MSG_ID;
|
||||
|
@ -227,29 +240,32 @@ static int smsdvb_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_para
|
|||
Msg.Data[0] = fep->frequency;
|
||||
Msg.Data[2] = 12000000;
|
||||
|
||||
printk("%s freq %d band %d\n", __func__, fep->frequency, fep->u.ofdm.bandwidth);
|
||||
printk("%s freq %d band %d\n", __func__,
|
||||
fep->frequency, fep->u.ofdm.bandwidth);
|
||||
|
||||
switch(fep->u.ofdm.bandwidth)
|
||||
{
|
||||
case BANDWIDTH_8_MHZ: Msg.Data[1] = BW_8_MHZ; break;
|
||||
case BANDWIDTH_7_MHZ: Msg.Data[1] = BW_7_MHZ; break;
|
||||
case BANDWIDTH_6_MHZ: Msg.Data[1] = BW_6_MHZ; break;
|
||||
// case BANDWIDTH_5_MHZ: Msg.Data[1] = BW_5_MHZ; break;
|
||||
case BANDWIDTH_AUTO: return -EOPNOTSUPP;
|
||||
default: return -EINVAL;
|
||||
}
|
||||
|
||||
return smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg), &client->tune_done);
|
||||
return smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg),
|
||||
&client->tune_done);
|
||||
}
|
||||
|
||||
static int smsdvb_get_frontend(struct dvb_frontend *fe, struct dvb_frontend_parameters *fep)
|
||||
static int smsdvb_get_frontend(struct dvb_frontend *fe,
|
||||
struct dvb_frontend_parameters *fep)
|
||||
{
|
||||
smsdvb_client_t *client = container_of(fe, smsdvb_client_t, frontend);
|
||||
|
||||
printk("%s\n", __func__);
|
||||
|
||||
// todo:
|
||||
memcpy(fep, &client->fe_params, sizeof(struct dvb_frontend_parameters));
|
||||
memcpy(fep, &client->fe_params,
|
||||
sizeof(struct dvb_frontend_parameters));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -260,19 +276,19 @@ static void smsdvb_release(struct dvb_frontend *fe)
|
|||
|
||||
static struct dvb_frontend_ops smsdvb_fe_ops = {
|
||||
.info = {
|
||||
.name = "Siano Mobile Digital SMS10xx",
|
||||
.type = FE_OFDM,
|
||||
.name = "Siano Mobile Digital SMS10xx",
|
||||
.type = FE_OFDM,
|
||||
.frequency_min = 44250000,
|
||||
.frequency_max = 867250000,
|
||||
.frequency_stepsize = 250000,
|
||||
.caps = FE_CAN_INVERSION_AUTO |
|
||||
FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
|
||||
FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
|
||||
FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO |
|
||||
FE_CAN_TRANSMISSION_MODE_AUTO |
|
||||
FE_CAN_GUARD_INTERVAL_AUTO |
|
||||
FE_CAN_RECOVER |
|
||||
FE_CAN_HIERARCHY_AUTO,
|
||||
FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
|
||||
FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
|
||||
FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 |
|
||||
FE_CAN_QAM_AUTO | FE_CAN_TRANSMISSION_MODE_AUTO |
|
||||
FE_CAN_GUARD_INTERVAL_AUTO |
|
||||
FE_CAN_RECOVER |
|
||||
FE_CAN_HIERARCHY_AUTO,
|
||||
},
|
||||
|
||||
.release = smsdvb_release,
|
||||
|
@ -287,8 +303,8 @@ static struct dvb_frontend_ops smsdvb_fe_ops = {
|
|||
.read_snr = smsdvb_read_snr,
|
||||
};
|
||||
|
||||
int smsdvb_hotplug(smscore_device_t *coredev, struct device *device,
|
||||
int arrival)
|
||||
int smsdvb_hotplug(smscore_device_t *coredev,
|
||||
struct device *device, int arrival)
|
||||
{
|
||||
smsclient_params_t params;
|
||||
smsdvb_client_t *client;
|
||||
|
@ -298,23 +314,21 @@ int smsdvb_hotplug(smscore_device_t *coredev, struct device *device,
|
|||
if (!arrival)
|
||||
return 0;
|
||||
|
||||
if (smscore_get_device_mode(coredev) != 4)
|
||||
{
|
||||
if (smscore_get_device_mode(coredev) != 4) {
|
||||
printk(KERN_ERR "%sSMS Device mode is not set for DVB operation.\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
client = kzalloc(sizeof(smsdvb_client_t), GFP_KERNEL);
|
||||
if (!client)
|
||||
{
|
||||
if (!client) {
|
||||
printk(KERN_INFO "%s kmalloc() failed\n", __func__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
// register dvb adapter
|
||||
rc = dvb_register_adapter(&client->adapter, "Siano Digital Receiver", THIS_MODULE, device, adapter_nr);
|
||||
if (rc < 0)
|
||||
{
|
||||
rc = dvb_register_adapter(&client->adapter, "Siano Digital Receiver",
|
||||
THIS_MODULE, device, adapter_nr);
|
||||
if (rc < 0) {
|
||||
printk("%s dvb_register_adapter() failed %d\n", __func__, rc);
|
||||
goto adapter_error;
|
||||
}
|
||||
|
@ -327,8 +341,7 @@ int smsdvb_hotplug(smscore_device_t *coredev, struct device *device,
|
|||
client->demux.stop_feed = smsdvb_stop_feed;
|
||||
|
||||
rc = dvb_dmx_init(&client->demux);
|
||||
if (rc < 0)
|
||||
{
|
||||
if (rc < 0) {
|
||||
printk("%s dvb_dmx_init failed %d\n\n", __func__, rc);
|
||||
goto dvbdmx_error;
|
||||
}
|
||||
|
@ -339,18 +352,17 @@ int smsdvb_hotplug(smscore_device_t *coredev, struct device *device,
|
|||
client->dmxdev.capabilities = 0;
|
||||
|
||||
rc = dvb_dmxdev_init(&client->dmxdev, &client->adapter);
|
||||
if (rc < 0)
|
||||
{
|
||||
if (rc < 0) {
|
||||
printk("%s dvb_dmxdev_init failed %d\n", __func__, rc);
|
||||
goto dmxdev_error;
|
||||
}
|
||||
|
||||
// init and register frontend
|
||||
memcpy(&client->frontend.ops, &smsdvb_fe_ops, sizeof(struct dvb_frontend_ops));
|
||||
memcpy(&client->frontend.ops, &smsdvb_fe_ops,
|
||||
sizeof(struct dvb_frontend_ops));
|
||||
|
||||
rc = dvb_register_frontend(&client->adapter, &client->frontend);
|
||||
if (rc < 0)
|
||||
{
|
||||
if (rc < 0) {
|
||||
printk("%s frontend registration failed %d\n", __func__, rc);
|
||||
goto frontend_error;
|
||||
}
|
||||
|
@ -362,9 +374,9 @@ int smsdvb_hotplug(smscore_device_t *coredev, struct device *device,
|
|||
params.context = client;
|
||||
|
||||
rc = smscore_register_client(coredev, ¶ms, &client->smsclient);
|
||||
if (rc < 0)
|
||||
{
|
||||
printk(KERN_INFO "%s smscore_register_client() failed %d\n", __func__, rc);
|
||||
if (rc < 0) {
|
||||
printk(KERN_INFO "%s smscore_register_client() failed %d\n",
|
||||
__func__, rc);
|
||||
goto client_error;
|
||||
}
|
||||
|
||||
|
@ -421,9 +433,8 @@ void smsdvb_unregister(void)
|
|||
kmutex_lock(&g_smsdvb_clientslock);
|
||||
|
||||
while (!list_empty(&g_smsdvb_clients))
|
||||
smsdvb_unregister_client((smsdvb_client_t *) g_smsdvb_clients.next);
|
||||
smsdvb_unregister_client(
|
||||
(smsdvb_client_t *) g_smsdvb_clients.next);
|
||||
|
||||
kmutex_unlock(&g_smsdvb_clientslock);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -57,8 +57,8 @@ typedef struct _smsusb_device
|
|||
|
||||
smsusb_urb_t surbs[MAX_URBS];
|
||||
|
||||
int response_alignment;
|
||||
int buffer_size;
|
||||
int response_alignment;
|
||||
int buffer_size;
|
||||
} *psmsusb_device_t;
|
||||
|
||||
int smsusb_submit_urb(smsusb_device_t *dev, smsusb_urb_t *surb);
|
||||
|
@ -68,44 +68,50 @@ void smsusb_onresponse(struct urb *urb)
|
|||
smsusb_urb_t *surb = (smsusb_urb_t *) urb->context;
|
||||
smsusb_device_t *dev = surb->dev;
|
||||
|
||||
if (urb->status < 0)
|
||||
{
|
||||
printk(KERN_INFO "%s error, urb status %d, %d bytes\n", __func__, urb->status, urb->actual_length);
|
||||
if (urb->status < 0) {
|
||||
printk(KERN_INFO "%s error, urb status %d, %d bytes\n",
|
||||
__func__, urb->status, urb->actual_length);
|
||||
return;
|
||||
}
|
||||
|
||||
if (urb->actual_length > 0)
|
||||
{
|
||||
if (urb->actual_length > 0) {
|
||||
SmsMsgHdr_ST *phdr = (SmsMsgHdr_ST *) surb->cb->p;
|
||||
|
||||
if (urb->actual_length >= phdr->msgLength)
|
||||
{
|
||||
if (urb->actual_length >= phdr->msgLength) {
|
||||
surb->cb->size = phdr->msgLength;
|
||||
|
||||
if (dev->response_alignment && (phdr->msgFlags & MSG_HDR_FLAG_SPLIT_MSG))
|
||||
{
|
||||
surb->cb->offset = dev->response_alignment + ((phdr->msgFlags >> 8) & 3);
|
||||
if (dev->response_alignment &&
|
||||
(phdr->msgFlags & MSG_HDR_FLAG_SPLIT_MSG)) {
|
||||
|
||||
// sanity check
|
||||
if (((int) phdr->msgLength + surb->cb->offset) > urb->actual_length)
|
||||
{
|
||||
printk("%s: invalid response msglen %d offset %d size %d\n", __func__, phdr->msgLength, surb->cb->offset, urb->actual_length);
|
||||
surb->cb->offset =
|
||||
dev->response_alignment +
|
||||
((phdr->msgFlags >> 8) & 3);
|
||||
|
||||
/* sanity check */
|
||||
if (((int) phdr->msgLength +
|
||||
surb->cb->offset) > urb->actual_length) {
|
||||
printk(KERN_INFO "%s: invalid "
|
||||
"response msglen %d offset %d "
|
||||
"size %d\n", __func__,
|
||||
phdr->msgLength,
|
||||
surb->cb->offset,
|
||||
urb->actual_length);
|
||||
goto exit_and_resubmit;
|
||||
}
|
||||
|
||||
// move buffer pointer and copy header to its new location
|
||||
/* move buffer pointer and
|
||||
* copy header to its new location */
|
||||
memcpy((char *) phdr + surb->cb->offset,
|
||||
phdr, sizeof(SmsMsgHdr_ST));
|
||||
}
|
||||
else
|
||||
} else
|
||||
surb->cb->offset = 0;
|
||||
|
||||
smscore_onresponse(dev->coredev, surb->cb);
|
||||
surb->cb = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
printk("%s invalid response msglen %d actual %d\n", __func__, phdr->msgLength, urb->actual_length);
|
||||
} else {
|
||||
printk(KERN_INFO "%s invalid response "
|
||||
"msglen %d actual %d\n", __func__,
|
||||
phdr->msgLength, urb->actual_length);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -115,12 +121,11 @@ void smsusb_onresponse(struct urb *urb)
|
|||
|
||||
int smsusb_submit_urb(smsusb_device_t *dev, smsusb_urb_t *surb)
|
||||
{
|
||||
if (!surb->cb)
|
||||
{
|
||||
if (!surb->cb) {
|
||||
surb->cb = smscore_getbuffer(dev->coredev);
|
||||
if (!surb->cb)
|
||||
{
|
||||
printk(KERN_INFO "%s smscore_getbuffer(...) returned NULL\n", __func__);
|
||||
if (!surb->cb) {
|
||||
printk(KERN_INFO "%s smscore_getbuffer(...) "
|
||||
"returned NULL\n", __func__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
|
@ -144,12 +149,10 @@ void smsusb_stop_streaming(smsusb_device_t *dev)
|
|||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MAX_URBS; i ++)
|
||||
{
|
||||
for (i = 0; i < MAX_URBS; i ++) {
|
||||
usb_kill_urb(&dev->surbs[i].urb);
|
||||
|
||||
if (dev->surbs[i].cb)
|
||||
{
|
||||
if (dev->surbs[i].cb) {
|
||||
smscore_putbuffer(dev->coredev, dev->surbs[i].cb);
|
||||
dev->surbs[i].cb = NULL;
|
||||
}
|
||||
|
@ -160,12 +163,11 @@ int smsusb_start_streaming(smsusb_device_t *dev)
|
|||
{
|
||||
int i, rc;
|
||||
|
||||
for (i = 0; i < MAX_URBS; i ++)
|
||||
{
|
||||
for (i = 0; i < MAX_URBS; i ++) {
|
||||
rc = smsusb_submit_urb(dev, &dev->surbs[i]);
|
||||
if (rc < 0)
|
||||
{
|
||||
printk(KERN_INFO "%s smsusb_submit_urb(...) failed\n", __func__);
|
||||
if (rc < 0) {
|
||||
printk(KERN_INFO "%s smsusb_submit_urb(...) "
|
||||
"failed\n", __func__);
|
||||
smsusb_stop_streaming(dev);
|
||||
break;
|
||||
}
|
||||
|
@ -179,11 +181,11 @@ int smsusb_sendrequest(void *context, void *buffer, size_t size)
|
|||
smsusb_device_t *dev = (smsusb_device_t *) context;
|
||||
int dummy;
|
||||
|
||||
return usb_bulk_msg(dev->udev, usb_sndbulkpipe(dev->udev, 2), buffer, size, &dummy, 1000);
|
||||
return usb_bulk_msg(dev->udev, usb_sndbulkpipe(dev->udev, 2),
|
||||
buffer, size, &dummy, 1000);
|
||||
}
|
||||
|
||||
char *smsusb1_fw_lkup[] =
|
||||
{
|
||||
char *smsusb1_fw_lkup[] = {
|
||||
"dvbt_stellar_usb.inp",
|
||||
"dvbh_stellar_usb.inp",
|
||||
"tdmb_stellar_usb.inp",
|
||||
|
@ -197,32 +199,31 @@ int smsusb1_load_firmware(struct usb_device *udev, int id)
|
|||
u8 *fw_buffer;
|
||||
int rc, dummy;
|
||||
|
||||
if (id < DEVICE_MODE_DVBT || id > DEVICE_MODE_DVBT_BDA)
|
||||
{
|
||||
printk(KERN_INFO "%s invalid firmware id specified %d\n", __func__, id);
|
||||
if (id < DEVICE_MODE_DVBT || id > DEVICE_MODE_DVBT_BDA) {
|
||||
printk(KERN_INFO "%s invalid firmware id specified %d\n",
|
||||
__func__, id);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
rc = request_firmware(&fw, smsusb1_fw_lkup[id], &udev->dev);
|
||||
if (rc < 0)
|
||||
{
|
||||
printk(KERN_INFO "%s failed to open \"%s\" mode %d\n", __func__, smsusb1_fw_lkup[id], id);
|
||||
if (rc < 0) {
|
||||
printk(KERN_INFO "%s failed to open \"%s\" mode %d\n",
|
||||
__func__, smsusb1_fw_lkup[id], id);
|
||||
return rc;
|
||||
}
|
||||
|
||||
fw_buffer = kmalloc(fw->size, GFP_KERNEL);
|
||||
if (fw_buffer)
|
||||
{
|
||||
if (fw_buffer) {
|
||||
memcpy(fw_buffer, fw->data, fw->size);
|
||||
|
||||
rc = usb_bulk_msg(udev, usb_sndbulkpipe(udev, 2), fw_buffer, fw->size, &dummy, 1000);
|
||||
rc = usb_bulk_msg(udev, usb_sndbulkpipe(udev, 2),
|
||||
fw_buffer, fw->size, &dummy, 1000);
|
||||
|
||||
printk(KERN_INFO "%s: sent %d(%d) bytes, rc %d\n", __func__, fw->size, dummy, rc);
|
||||
printk(KERN_INFO "%s: sent %d(%d) bytes, rc %d\n",
|
||||
__func__, fw->size, dummy, rc);
|
||||
|
||||
kfree(fw_buffer);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
printk(KERN_INFO "failed to allocate firmware buffer\n");
|
||||
rc = -ENOMEM;
|
||||
}
|
||||
|
@ -238,33 +239,29 @@ void smsusb1_detectmode(void *context, int *mode)
|
|||
|
||||
*mode = DEVICE_MODE_NONE;
|
||||
|
||||
if (!product_string)
|
||||
{
|
||||
if (!product_string) {
|
||||
product_string = "none";
|
||||
printk("%s product string not found\n", __func__);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strstr(product_string, "DVBH"))
|
||||
*mode = 1;
|
||||
else if (strstr(product_string, "BDA"))
|
||||
*mode = 4;
|
||||
else if (strstr(product_string, "DVBT"))
|
||||
*mode = 0;
|
||||
else if (strstr(product_string, "TDMB"))
|
||||
*mode = 2;
|
||||
}
|
||||
} else if (strstr(product_string, "DVBH"))
|
||||
*mode = 1;
|
||||
else if (strstr(product_string, "BDA"))
|
||||
*mode = 4;
|
||||
else if (strstr(product_string, "DVBT"))
|
||||
*mode = 0;
|
||||
else if (strstr(product_string, "TDMB"))
|
||||
*mode = 2;
|
||||
|
||||
printk("%s: %d \"%s\"\n", __func__, *mode, product_string);
|
||||
}
|
||||
|
||||
int smsusb1_setmode(void *context, int mode)
|
||||
{
|
||||
SmsMsgHdr_ST Msg = { MSG_SW_RELOAD_REQ, 0, HIF_TASK, sizeof(SmsMsgHdr_ST), 0 };
|
||||
SmsMsgHdr_ST Msg = { MSG_SW_RELOAD_REQ, 0, HIF_TASK,
|
||||
sizeof(SmsMsgHdr_ST), 0 };
|
||||
|
||||
if (mode < DEVICE_MODE_DVBT || mode > DEVICE_MODE_DVBT_BDA)
|
||||
{
|
||||
printk(KERN_INFO "%s invalid firmware id specified %d\n", __func__, mode);
|
||||
if (mode < DEVICE_MODE_DVBT || mode > DEVICE_MODE_DVBT_BDA) {
|
||||
printk(KERN_INFO "%s invalid firmware id specified %d\n",
|
||||
__func__, mode);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -275,8 +272,7 @@ void smsusb_term_device(struct usb_interface *intf)
|
|||
{
|
||||
smsusb_device_t *dev = (smsusb_device_t *) usb_get_intfdata(intf);
|
||||
|
||||
if (dev)
|
||||
{
|
||||
if (dev) {
|
||||
smsusb_stop_streaming(dev);
|
||||
|
||||
// unregister from smscore
|
||||
|
@ -299,9 +295,9 @@ int smsusb_init_device(struct usb_interface *intf)
|
|||
|
||||
// create device object
|
||||
dev = kzalloc(sizeof(smsusb_device_t), GFP_KERNEL);
|
||||
if (!dev)
|
||||
{
|
||||
printk(KERN_INFO "%s kzalloc(sizeof(smsusb_device_t) failed\n", __func__);
|
||||
if (!dev) {
|
||||
printk(KERN_INFO "%s kzalloc(sizeof(smsusb_device_t) failed\n",
|
||||
__func__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
@ -336,7 +332,9 @@ int smsusb_init_device(struct usb_interface *intf)
|
|||
}
|
||||
|
||||
dev->buffer_size = USB2_BUFFER_SIZE;
|
||||
dev->response_alignment = dev->udev->ep_in[1]->desc.wMaxPacketSize - sizeof(SmsMsgHdr_ST);
|
||||
dev->response_alignment =
|
||||
dev->udev->ep_in[1]->desc.wMaxPacketSize -
|
||||
sizeof(SmsMsgHdr_ST);
|
||||
|
||||
params.flags |= SMS_DEVICE_FAMILY2;
|
||||
break;
|
||||
|
@ -347,37 +345,37 @@ int smsusb_init_device(struct usb_interface *intf)
|
|||
params.num_buffers = MAX_BUFFERS;
|
||||
params.sendrequest_handler = smsusb_sendrequest;
|
||||
params.context = dev;
|
||||
snprintf(params.devpath, sizeof(params.devpath), "usb\\%d-%s", dev->udev->bus->busnum, dev->udev->devpath);
|
||||
snprintf(params.devpath, sizeof(params.devpath),
|
||||
"usb\\%d-%s", dev->udev->bus->busnum, dev->udev->devpath);
|
||||
|
||||
// register in smscore
|
||||
/* register in smscore */
|
||||
rc = smscore_register_device(¶ms, &dev->coredev);
|
||||
if (rc < 0)
|
||||
{
|
||||
printk(KERN_INFO "%s smscore_register_device(...) failed, rc %d\n", __func__, rc);
|
||||
if (rc < 0) {
|
||||
printk(KERN_INFO "%s smscore_register_device(...) failed, "
|
||||
"rc %d\n", __func__, rc);
|
||||
smsusb_term_device(intf);
|
||||
return rc;
|
||||
}
|
||||
|
||||
// initialize urbs
|
||||
for (i = 0; i < MAX_URBS; i ++)
|
||||
{
|
||||
for (i = 0; i < MAX_URBS; i++) {
|
||||
dev->surbs[i].dev = dev;
|
||||
usb_init_urb(&dev->surbs[i].urb);
|
||||
}
|
||||
|
||||
printk(KERN_INFO "%s smsusb_start_streaming(...).\n", __func__);
|
||||
rc = smsusb_start_streaming(dev);
|
||||
if (rc < 0)
|
||||
{
|
||||
printk(KERN_INFO "%s smsusb_start_streaming(...) failed\n", __func__);
|
||||
if (rc < 0) {
|
||||
printk(KERN_INFO "%s smsusb_start_streaming(...) failed\n",
|
||||
__func__);
|
||||
smsusb_term_device(intf);
|
||||
return rc;
|
||||
}
|
||||
|
||||
rc = smscore_start_device(dev->coredev);
|
||||
if (rc < 0)
|
||||
{
|
||||
printk(KERN_INFO "%s smscore_start_device(...) failed\n", __func__);
|
||||
if (rc < 0) {
|
||||
printk(KERN_INFO "%s smscore_start_device(...) failed\n",
|
||||
__func__);
|
||||
smsusb_term_device(intf);
|
||||
return rc;
|
||||
}
|
||||
|
@ -396,29 +394,32 @@ int smsusb_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
rc = usb_clear_halt(udev, usb_rcvbulkpipe(udev, 0x81));
|
||||
rc = usb_clear_halt(udev, usb_rcvbulkpipe(udev, 0x02));
|
||||
|
||||
if (intf->num_altsetting > 0)
|
||||
{
|
||||
if (intf->num_altsetting > 0) {
|
||||
rc = usb_set_interface(udev, intf->cur_altsetting->desc.bInterfaceNumber, 0);
|
||||
if (rc < 0)
|
||||
{
|
||||
printk(KERN_INFO "%s usb_set_interface failed, rc %d\n", __func__, rc);
|
||||
if (rc < 0) {
|
||||
printk(KERN_INFO "%s usb_set_interface failed, "
|
||||
"rc %d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
printk(KERN_INFO "smsusb_probe %d\n", intf->cur_altsetting->desc.bInterfaceNumber);
|
||||
printk(KERN_INFO "smsusb_probe %d\n",
|
||||
intf->cur_altsetting->desc.bInterfaceNumber);
|
||||
for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i ++)
|
||||
printk(KERN_INFO "endpoint %d %02x %02x %d\n", i, intf->cur_altsetting->endpoint[i].desc.bEndpointAddress, intf->cur_altsetting->endpoint[i].desc.bmAttributes, intf->cur_altsetting->endpoint[i].desc.wMaxPacketSize);
|
||||
printk(KERN_INFO "endpoint %d %02x %02x %d\n", i,
|
||||
intf->cur_altsetting->endpoint[i].desc.bEndpointAddress,
|
||||
intf->cur_altsetting->endpoint[i].desc.bmAttributes,
|
||||
intf->cur_altsetting->endpoint[i].desc.wMaxPacketSize);
|
||||
|
||||
if (udev->actconfig->desc.bNumInterfaces == 2 && intf->cur_altsetting->desc.bInterfaceNumber == 0)
|
||||
{
|
||||
if ((udev->actconfig->desc.bNumInterfaces == 2) &&
|
||||
(intf->cur_altsetting->desc.bInterfaceNumber == 0)) {
|
||||
printk(KERN_INFO "rom interface 0 is not used\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (intf->cur_altsetting->desc.bInterfaceNumber == 1)
|
||||
{
|
||||
snprintf(devpath, sizeof(devpath), "usb\\%d-%s", udev->bus->busnum, udev->devpath);
|
||||
if (intf->cur_altsetting->desc.bInterfaceNumber == 1) {
|
||||
snprintf(devpath, sizeof(devpath), "usb\\%d-%s",
|
||||
udev->bus->busnum, udev->devpath);
|
||||
printk(KERN_INFO "stellar device was found.\n");
|
||||
return smsusb1_load_firmware(udev, smscore_registry_getmode(devpath));
|
||||
}
|
||||
|
@ -444,7 +445,7 @@ MODULE_DEVICE_TABLE (usb, smsusb_id_table);
|
|||
static struct usb_driver smsusb_driver = {
|
||||
.name = "smsusb",
|
||||
.probe = smsusb_probe,
|
||||
.disconnect = smsusb_disconnect,
|
||||
.disconnect = smsusb_disconnect,
|
||||
.id_table = smsusb_id_table,
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue