Path: blob/master/drivers/media/dvb/siano/smscoreapi.h
15111 views
/****************************************************************12Siano Mobile Silicon, Inc.3MDTV receiver kernel modules.4Copyright (C) 2006-2008, Uri Shkolnik, Anatoly Greenblat56This program is free software: you can redistribute it and/or modify7it under the terms of the GNU General Public License as published by8the Free Software Foundation, either version 2 of the License, or9(at your option) any later version.1011This program is distributed in the hope that it will be useful,12but WITHOUT ANY WARRANTY; without even the implied warranty of13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the14GNU General Public License for more details.1516You should have received a copy of the GNU General Public License17along with this program. If not, see <http://www.gnu.org/licenses/>.1819****************************************************************/2021#ifndef __SMS_CORE_API_H__22#define __SMS_CORE_API_H__2324#include <linux/version.h>25#include <linux/device.h>26#include <linux/list.h>27#include <linux/mm.h>28#include <linux/scatterlist.h>29#include <linux/types.h>30#include <linux/mutex.h>31#include <linux/wait.h>32#include <linux/timer.h>3334#include <asm/page.h>3536#include "smsir.h"3738#define kmutex_init(_p_) mutex_init(_p_)39#define kmutex_lock(_p_) mutex_lock(_p_)40#define kmutex_trylock(_p_) mutex_trylock(_p_)41#define kmutex_unlock(_p_) mutex_unlock(_p_)4243#ifndef min44#define min(a, b) (((a) < (b)) ? (a) : (b))45#endif4647#define SMS_PROTOCOL_MAX_RAOUNDTRIP_MS (10000)48#define SMS_ALLOC_ALIGNMENT 12849#define SMS_DMA_ALIGNMENT 1650#define SMS_ALIGN_ADDRESS(addr) \51((((uintptr_t)(addr)) + (SMS_DMA_ALIGNMENT-1)) & ~(SMS_DMA_ALIGNMENT-1))5253#define SMS_DEVICE_FAMILY2 154#define SMS_ROM_NO_RESPONSE 255#define SMS_DEVICE_NOT_READY 0x80000005657enum sms_device_type_st {58SMS_STELLAR = 0,59SMS_NOVA_A0,60SMS_NOVA_B0,61SMS_VEGA,62SMS_NUM_OF_DEVICE_TYPES63};6465struct smscore_device_t;66struct smscore_client_t;67struct smscore_buffer_t;6869typedef int (*hotplug_t)(struct smscore_device_t *coredev,70struct device *device, int arrival);7172typedef int (*setmode_t)(void *context, int mode);73typedef void (*detectmode_t)(void *context, int *mode);74typedef int (*sendrequest_t)(void *context, void *buffer, size_t size);75typedef int (*loadfirmware_t)(void *context, void *buffer, size_t size);76typedef int (*preload_t)(void *context);77typedef int (*postload_t)(void *context);7879typedef int (*onresponse_t)(void *context, struct smscore_buffer_t *cb);80typedef void (*onremove_t)(void *context);8182struct smscore_buffer_t {83/* public members, once passed to clients can be changed freely */84struct list_head entry;85int size;86int offset;8788/* private members, read-only for clients */89void *p;90dma_addr_t phys;91unsigned long offset_in_common;92};9394struct smsdevice_params_t {95struct device *device;9697int buffer_size;98int num_buffers;99100char devpath[32];101unsigned long flags;102103setmode_t setmode_handler;104detectmode_t detectmode_handler;105sendrequest_t sendrequest_handler;106preload_t preload_handler;107postload_t postload_handler;108109void *context;110enum sms_device_type_st device_type;111};112113struct smsclient_params_t {114int initial_id;115int data_type;116onresponse_t onresponse_handler;117onremove_t onremove_handler;118void *context;119};120121struct smscore_device_t {122struct list_head entry;123124struct list_head clients;125struct list_head subclients;126spinlock_t clientslock;127128struct list_head buffers;129spinlock_t bufferslock;130int num_buffers;131132void *common_buffer;133int common_buffer_size;134dma_addr_t common_buffer_phys;135136void *context;137struct device *device;138139char devpath[32];140unsigned long device_flags;141142setmode_t setmode_handler;143detectmode_t detectmode_handler;144sendrequest_t sendrequest_handler;145preload_t preload_handler;146postload_t postload_handler;147148int mode, modes_supported;149150/* host <--> device messages */151struct completion version_ex_done, data_download_done, trigger_done;152struct completion init_device_done, reload_start_done, resume_done;153struct completion gpio_configuration_done, gpio_set_level_done;154struct completion gpio_get_level_done, ir_init_done;155156/* Buffer management */157wait_queue_head_t buffer_mng_waitq;158159/* GPIO */160int gpio_get_res;161162/* Target hardware board */163int board_id;164165/* Firmware */166u8 *fw_buf;167u32 fw_buf_size;168169/* Infrared (IR) */170struct ir_t ir;171172int led_state;173};174175/* GPIO definitions for antenna frequency domain control (SMS8021) */176#define SMS_ANTENNA_GPIO_0 1177#define SMS_ANTENNA_GPIO_1 0178179#define BW_8_MHZ 0180#define BW_7_MHZ 1181#define BW_6_MHZ 2182#define BW_5_MHZ 3183#define BW_ISDBT_1SEG 4184#define BW_ISDBT_3SEG 5185186#define MSG_HDR_FLAG_SPLIT_MSG 4187188#define MAX_GPIO_PIN_NUMBER 31189190#define HIF_TASK 11191#define SMS_HOST_LIB 150192#define DVBT_BDA_CONTROL_MSG_ID 201193194#define SMS_MAX_PAYLOAD_SIZE 240195#define SMS_TUNE_TIMEOUT 500196197#define MSG_SMS_GPIO_CONFIG_REQ 507198#define MSG_SMS_GPIO_CONFIG_RES 508199#define MSG_SMS_GPIO_SET_LEVEL_REQ 509200#define MSG_SMS_GPIO_SET_LEVEL_RES 510201#define MSG_SMS_GPIO_GET_LEVEL_REQ 511202#define MSG_SMS_GPIO_GET_LEVEL_RES 512203#define MSG_SMS_RF_TUNE_REQ 561204#define MSG_SMS_RF_TUNE_RES 562205#define MSG_SMS_INIT_DEVICE_REQ 578206#define MSG_SMS_INIT_DEVICE_RES 579207#define MSG_SMS_ADD_PID_FILTER_REQ 601208#define MSG_SMS_ADD_PID_FILTER_RES 602209#define MSG_SMS_REMOVE_PID_FILTER_REQ 603210#define MSG_SMS_REMOVE_PID_FILTER_RES 604211#define MSG_SMS_DAB_CHANNEL 607212#define MSG_SMS_GET_PID_FILTER_LIST_REQ 608213#define MSG_SMS_GET_PID_FILTER_LIST_RES 609214#define MSG_SMS_GET_STATISTICS_RES 616215#define MSG_SMS_GET_STATISTICS_REQ 615216#define MSG_SMS_HO_PER_SLICES_IND 630217#define MSG_SMS_SET_ANTENNA_CONFIG_REQ 651218#define MSG_SMS_SET_ANTENNA_CONFIG_RES 652219#define MSG_SMS_SLEEP_RESUME_COMP_IND 655220#define MSG_SMS_DATA_DOWNLOAD_REQ 660221#define MSG_SMS_DATA_DOWNLOAD_RES 661222#define MSG_SMS_SWDOWNLOAD_TRIGGER_REQ 664223#define MSG_SMS_SWDOWNLOAD_TRIGGER_RES 665224#define MSG_SMS_SWDOWNLOAD_BACKDOOR_REQ 666225#define MSG_SMS_SWDOWNLOAD_BACKDOOR_RES 667226#define MSG_SMS_GET_VERSION_EX_REQ 668227#define MSG_SMS_GET_VERSION_EX_RES 669228#define MSG_SMS_SET_CLOCK_OUTPUT_REQ 670229#define MSG_SMS_I2C_SET_FREQ_REQ 685230#define MSG_SMS_GENERIC_I2C_REQ 687231#define MSG_SMS_GENERIC_I2C_RES 688232#define MSG_SMS_DVBT_BDA_DATA 693233#define MSG_SW_RELOAD_REQ 697234#define MSG_SMS_DATA_MSG 699235#define MSG_SW_RELOAD_START_REQ 702236#define MSG_SW_RELOAD_START_RES 703237#define MSG_SW_RELOAD_EXEC_REQ 704238#define MSG_SW_RELOAD_EXEC_RES 705239#define MSG_SMS_SPI_INT_LINE_SET_REQ 710240#define MSG_SMS_GPIO_CONFIG_EX_REQ 712241#define MSG_SMS_GPIO_CONFIG_EX_RES 713242#define MSG_SMS_ISDBT_TUNE_REQ 776243#define MSG_SMS_ISDBT_TUNE_RES 777244#define MSG_SMS_TRANSMISSION_IND 782245#define MSG_SMS_START_IR_REQ 800246#define MSG_SMS_START_IR_RES 801247#define MSG_SMS_IR_SAMPLES_IND 802248#define MSG_SMS_SIGNAL_DETECTED_IND 827249#define MSG_SMS_NO_SIGNAL_IND 828250251#define SMS_INIT_MSG_EX(ptr, type, src, dst, len) do { \252(ptr)->msgType = type; (ptr)->msgSrcId = src; (ptr)->msgDstId = dst; \253(ptr)->msgLength = len; (ptr)->msgFlags = 0; \254} while (0)255256#define SMS_INIT_MSG(ptr, type, len) \257SMS_INIT_MSG_EX(ptr, type, 0, HIF_TASK, len)258259enum SMS_DVB3_EVENTS {260DVB3_EVENT_INIT = 0,261DVB3_EVENT_SLEEP,262DVB3_EVENT_HOTPLUG,263DVB3_EVENT_FE_LOCK,264DVB3_EVENT_FE_UNLOCK,265DVB3_EVENT_UNC_OK,266DVB3_EVENT_UNC_ERR267};268269enum SMS_DEVICE_MODE {270DEVICE_MODE_NONE = -1,271DEVICE_MODE_DVBT = 0,272DEVICE_MODE_DVBH,273DEVICE_MODE_DAB_TDMB,274DEVICE_MODE_DAB_TDMB_DABIP,275DEVICE_MODE_DVBT_BDA,276DEVICE_MODE_ISDBT,277DEVICE_MODE_ISDBT_BDA,278DEVICE_MODE_CMMB,279DEVICE_MODE_RAW_TUNER,280DEVICE_MODE_MAX,281};282283struct SmsMsgHdr_ST {284u16 msgType;285u8 msgSrcId;286u8 msgDstId;287u16 msgLength; /* Length of entire message, including header */288u16 msgFlags;289};290291struct SmsMsgData_ST {292struct SmsMsgHdr_ST xMsgHeader;293u32 msgData[1];294};295296struct SmsMsgData_ST2 {297struct SmsMsgHdr_ST xMsgHeader;298u32 msgData[2];299};300301struct SmsDataDownload_ST {302struct SmsMsgHdr_ST xMsgHeader;303u32 MemAddr;304u8 Payload[SMS_MAX_PAYLOAD_SIZE];305};306307struct SmsVersionRes_ST {308struct SmsMsgHdr_ST xMsgHeader;309310u16 ChipModel; /* e.g. 0x1102 for SMS-1102 "Nova" */311u8 Step; /* 0 - Step A */312u8 MetalFix; /* 0 - Metal 0 */313314/* FirmwareId 0xFF if ROM, otherwise the315* value indicated by SMSHOSTLIB_DEVICE_MODES_E */316u8 FirmwareId;317/* SupportedProtocols Bitwise OR combination of318* supported protocols */319u8 SupportedProtocols;320321u8 VersionMajor;322u8 VersionMinor;323u8 VersionPatch;324u8 VersionFieldPatch;325326u8 RomVersionMajor;327u8 RomVersionMinor;328u8 RomVersionPatch;329u8 RomVersionFieldPatch;330331u8 TextLabel[34];332};333334struct SmsFirmware_ST {335u32 CheckSum;336u32 Length;337u32 StartAddress;338u8 Payload[1];339};340341/* Statistics information returned as response for342* SmsHostApiGetStatistics_Req */343struct SMSHOSTLIB_STATISTICS_ST {344u32 Reserved; /* Reserved */345346/* Common parameters */347u32 IsRfLocked; /* 0 - not locked, 1 - locked */348u32 IsDemodLocked; /* 0 - not locked, 1 - locked */349u32 IsExternalLNAOn; /* 0 - external LNA off, 1 - external LNA on */350351/* Reception quality */352s32 SNR; /* dB */353u32 BER; /* Post Viterbi BER [1E-5] */354u32 FIB_CRC; /* CRC errors percentage, valid only for DAB */355u32 TS_PER; /* Transport stream PER,3560xFFFFFFFF indicate N/A, valid only for DVB-T/H */357u32 MFER; /* DVB-H frame error rate in percentage,3580xFFFFFFFF indicate N/A, valid only for DVB-H */359s32 RSSI; /* dBm */360s32 InBandPwr; /* In band power in dBM */361s32 CarrierOffset; /* Carrier Offset in bin/1024 */362363/* Transmission parameters */364u32 Frequency; /* Frequency in Hz */365u32 Bandwidth; /* Bandwidth in MHz, valid only for DVB-T/H */366u32 TransmissionMode; /* Transmission Mode, for DAB modes 1-4,367for DVB-T/H FFT mode carriers in Kilos */368u32 ModemState; /* from SMSHOSTLIB_DVB_MODEM_STATE_ET,369valid only for DVB-T/H */370u32 GuardInterval; /* Guard Interval from371SMSHOSTLIB_GUARD_INTERVALS_ET, valid only for DVB-T/H */372u32 CodeRate; /* Code Rate from SMSHOSTLIB_CODE_RATE_ET,373valid only for DVB-T/H */374u32 LPCodeRate; /* Low Priority Code Rate from375SMSHOSTLIB_CODE_RATE_ET, valid only for DVB-T/H */376u32 Hierarchy; /* Hierarchy from SMSHOSTLIB_HIERARCHY_ET,377valid only for DVB-T/H */378u32 Constellation; /* Constellation from379SMSHOSTLIB_CONSTELLATION_ET, valid only for DVB-T/H */380381/* Burst parameters, valid only for DVB-H */382u32 BurstSize; /* Current burst size in bytes,383valid only for DVB-H */384u32 BurstDuration; /* Current burst duration in mSec,385valid only for DVB-H */386u32 BurstCycleTime; /* Current burst cycle time in mSec,387valid only for DVB-H */388u32 CalculatedBurstCycleTime;/* Current burst cycle time in mSec,389as calculated by demodulator, valid only for DVB-H */390u32 NumOfRows; /* Number of rows in MPE table,391valid only for DVB-H */392u32 NumOfPaddCols; /* Number of padding columns in MPE table,393valid only for DVB-H */394u32 NumOfPunctCols; /* Number of puncturing columns in MPE table,395valid only for DVB-H */396u32 ErrorTSPackets; /* Number of erroneous397transport-stream packets */398u32 TotalTSPackets; /* Total number of transport-stream packets */399u32 NumOfValidMpeTlbs; /* Number of MPE tables which do not include400errors after MPE RS decoding */401u32 NumOfInvalidMpeTlbs;/* Number of MPE tables which include errors402after MPE RS decoding */403u32 NumOfCorrectedMpeTlbs;/* Number of MPE tables which were404corrected by MPE RS decoding */405/* Common params */406u32 BERErrorCount; /* Number of errornous SYNC bits. */407u32 BERBitCount; /* Total number of SYNC bits. */408409/* Interface information */410u32 SmsToHostTxErrors; /* Total number of transmission errors. */411412/* DAB/T-DMB */413u32 PreBER; /* DAB/T-DMB only: Pre Viterbi BER [1E-5] */414415/* DVB-H TPS parameters */416u32 CellId; /* TPS Cell ID in bits 15..0, bits 31..16 zero;417if set to 0xFFFFFFFF cell_id not yet recovered */418u32 DvbhSrvIndHP; /* DVB-H service indication info, bit 1 -419Time Slicing indicator, bit 0 - MPE-FEC indicator */420u32 DvbhSrvIndLP; /* DVB-H service indication info, bit 1 -421Time Slicing indicator, bit 0 - MPE-FEC indicator */422423u32 NumMPEReceived; /* DVB-H, Num MPE section received */424425u32 ReservedFields[10]; /* Reserved */426};427428struct SmsMsgStatisticsInfo_ST {429u32 RequestResult;430431struct SMSHOSTLIB_STATISTICS_ST Stat;432433/* Split the calc of the SNR in DAB */434u32 Signal; /* dB */435u32 Noise; /* dB */436437};438439struct SMSHOSTLIB_ISDBT_LAYER_STAT_ST {440/* Per-layer information */441u32 CodeRate; /* Code Rate from SMSHOSTLIB_CODE_RATE_ET,442* 255 means layer does not exist */443u32 Constellation; /* Constellation from SMSHOSTLIB_CONSTELLATION_ET,444* 255 means layer does not exist */445u32 BER; /* Post Viterbi BER [1E-5], 0xFFFFFFFF indicate N/A */446u32 BERErrorCount; /* Post Viterbi Error Bits Count */447u32 BERBitCount; /* Post Viterbi Total Bits Count */448u32 PreBER; /* Pre Viterbi BER [1E-5], 0xFFFFFFFF indicate N/A */449u32 TS_PER; /* Transport stream PER [%], 0xFFFFFFFF indicate N/A */450u32 ErrorTSPackets; /* Number of erroneous transport-stream packets */451u32 TotalTSPackets; /* Total number of transport-stream packets */452u32 TILdepthI; /* Time interleaver depth I parameter,453* 255 means layer does not exist */454u32 NumberOfSegments; /* Number of segments in layer A,455* 255 means layer does not exist */456u32 TMCCErrors; /* TMCC errors */457};458459struct SMSHOSTLIB_STATISTICS_ISDBT_ST {460u32 StatisticsType; /* Enumerator identifying the type of the461* structure. Values are the same as462* SMSHOSTLIB_DEVICE_MODES_E463*464* This field MUST always be first in any465* statistics structure */466467u32 FullSize; /* Total size of the structure returned by the modem.468* If the size requested by the host is smaller than469* FullSize, the struct will be truncated */470471/* Common parameters */472u32 IsRfLocked; /* 0 - not locked, 1 - locked */473u32 IsDemodLocked; /* 0 - not locked, 1 - locked */474u32 IsExternalLNAOn; /* 0 - external LNA off, 1 - external LNA on */475476/* Reception quality */477s32 SNR; /* dB */478s32 RSSI; /* dBm */479s32 InBandPwr; /* In band power in dBM */480s32 CarrierOffset; /* Carrier Offset in Hz */481482/* Transmission parameters */483u32 Frequency; /* Frequency in Hz */484u32 Bandwidth; /* Bandwidth in MHz */485u32 TransmissionMode; /* ISDB-T transmission mode */486u32 ModemState; /* 0 - Acquisition, 1 - Locked */487u32 GuardInterval; /* Guard Interval, 1 divided by value */488u32 SystemType; /* ISDB-T system type (ISDB-T / ISDB-Tsb) */489u32 PartialReception; /* TRUE - partial reception, FALSE otherwise */490u32 NumOfLayers; /* Number of ISDB-T layers in the network */491492/* Per-layer information */493/* Layers A, B and C */494struct SMSHOSTLIB_ISDBT_LAYER_STAT_ST LayerInfo[3];495/* Per-layer statistics, see SMSHOSTLIB_ISDBT_LAYER_STAT_ST */496497/* Interface information */498u32 SmsToHostTxErrors; /* Total number of transmission errors. */499};500501struct PID_STATISTICS_DATA_S {502struct PID_BURST_S {503u32 size;504u32 padding_cols;505u32 punct_cols;506u32 duration;507u32 cycle;508u32 calc_cycle;509} burst;510511u32 tot_tbl_cnt;512u32 invalid_tbl_cnt;513u32 tot_cor_tbl;514};515516struct PID_DATA_S {517u32 pid;518u32 num_rows;519struct PID_STATISTICS_DATA_S pid_statistics;520};521522#define CORRECT_STAT_RSSI(_stat) ((_stat).RSSI *= -1)523#define CORRECT_STAT_BANDWIDTH(_stat) (_stat.Bandwidth = 8 - _stat.Bandwidth)524#define CORRECT_STAT_TRANSMISSON_MODE(_stat) \525if (_stat.TransmissionMode == 0) \526_stat.TransmissionMode = 2; \527else if (_stat.TransmissionMode == 1) \528_stat.TransmissionMode = 8; \529else \530_stat.TransmissionMode = 4;531532struct TRANSMISSION_STATISTICS_S {533u32 Frequency; /* Frequency in Hz */534u32 Bandwidth; /* Bandwidth in MHz */535u32 TransmissionMode; /* FFT mode carriers in Kilos */536u32 GuardInterval; /* Guard Interval from537SMSHOSTLIB_GUARD_INTERVALS_ET */538u32 CodeRate; /* Code Rate from SMSHOSTLIB_CODE_RATE_ET */539u32 LPCodeRate; /* Low Priority Code Rate from540SMSHOSTLIB_CODE_RATE_ET */541u32 Hierarchy; /* Hierarchy from SMSHOSTLIB_HIERARCHY_ET */542u32 Constellation; /* Constellation from543SMSHOSTLIB_CONSTELLATION_ET */544545/* DVB-H TPS parameters */546u32 CellId; /* TPS Cell ID in bits 15..0, bits 31..16 zero;547if set to 0xFFFFFFFF cell_id not yet recovered */548u32 DvbhSrvIndHP; /* DVB-H service indication info, bit 1 -549Time Slicing indicator, bit 0 - MPE-FEC indicator */550u32 DvbhSrvIndLP; /* DVB-H service indication info, bit 1 -551Time Slicing indicator, bit 0 - MPE-FEC indicator */552u32 IsDemodLocked; /* 0 - not locked, 1 - locked */553};554555struct RECEPTION_STATISTICS_S {556u32 IsRfLocked; /* 0 - not locked, 1 - locked */557u32 IsDemodLocked; /* 0 - not locked, 1 - locked */558u32 IsExternalLNAOn; /* 0 - external LNA off, 1 - external LNA on */559560u32 ModemState; /* from SMSHOSTLIB_DVB_MODEM_STATE_ET */561s32 SNR; /* dB */562u32 BER; /* Post Viterbi BER [1E-5] */563u32 BERErrorCount; /* Number of erronous SYNC bits. */564u32 BERBitCount; /* Total number of SYNC bits. */565u32 TS_PER; /* Transport stream PER,5660xFFFFFFFF indicate N/A */567u32 MFER; /* DVB-H frame error rate in percentage,5680xFFFFFFFF indicate N/A, valid only for DVB-H */569s32 RSSI; /* dBm */570s32 InBandPwr; /* In band power in dBM */571s32 CarrierOffset; /* Carrier Offset in bin/1024 */572u32 ErrorTSPackets; /* Number of erroneous573transport-stream packets */574u32 TotalTSPackets; /* Total number of transport-stream packets */575576s32 MRC_SNR; /* dB */577s32 MRC_RSSI; /* dBm */578s32 MRC_InBandPwr; /* In band power in dBM */579};580581582/* Statistics information returned as response for583* SmsHostApiGetStatisticsEx_Req for DVB applications, SMS1100 and up */584struct SMSHOSTLIB_STATISTICS_DVB_S {585/* Reception */586struct RECEPTION_STATISTICS_S ReceptionData;587588/* Transmission parameters */589struct TRANSMISSION_STATISTICS_S TransmissionData;590591/* Burst parameters, valid only for DVB-H */592#define SRVM_MAX_PID_FILTERS 8593struct PID_DATA_S PidData[SRVM_MAX_PID_FILTERS];594};595596struct SRVM_SIGNAL_STATUS_S {597u32 result;598u32 snr;599u32 tsPackets;600u32 etsPackets;601u32 constellation;602u32 hpCode;603u32 tpsSrvIndLP;604u32 tpsSrvIndHP;605u32 cellId;606u32 reason;607608s32 inBandPower;609u32 requestId;610};611612struct SMSHOSTLIB_I2C_REQ_ST {613u32 DeviceAddress; /* I2c device address */614u32 WriteCount; /* number of bytes to write */615u32 ReadCount; /* number of bytes to read */616u8 Data[1];617};618619struct SMSHOSTLIB_I2C_RES_ST {620u32 Status; /* non-zero value in case of failure */621u32 ReadCount; /* number of bytes read */622u8 Data[1];623};624625626struct smscore_config_gpio {627#define SMS_GPIO_DIRECTION_INPUT 0628#define SMS_GPIO_DIRECTION_OUTPUT 1629u8 direction;630631#define SMS_GPIO_PULLUPDOWN_NONE 0632#define SMS_GPIO_PULLUPDOWN_PULLDOWN 1633#define SMS_GPIO_PULLUPDOWN_PULLUP 2634#define SMS_GPIO_PULLUPDOWN_KEEPER 3635u8 pullupdown;636637#define SMS_GPIO_INPUTCHARACTERISTICS_NORMAL 0638#define SMS_GPIO_INPUTCHARACTERISTICS_SCHMITT 1639u8 inputcharacteristics;640641#define SMS_GPIO_OUTPUTSLEWRATE_FAST 0642#define SMS_GPIO_OUTPUTSLEWRATE_SLOW 1643u8 outputslewrate;644645#define SMS_GPIO_OUTPUTDRIVING_4mA 0646#define SMS_GPIO_OUTPUTDRIVING_8mA 1647#define SMS_GPIO_OUTPUTDRIVING_12mA 2648#define SMS_GPIO_OUTPUTDRIVING_16mA 3649u8 outputdriving;650};651652struct smscore_gpio_config {653#define SMS_GPIO_DIRECTION_INPUT 0654#define SMS_GPIO_DIRECTION_OUTPUT 1655u8 Direction;656657#define SMS_GPIO_PULL_UP_DOWN_NONE 0658#define SMS_GPIO_PULL_UP_DOWN_PULLDOWN 1659#define SMS_GPIO_PULL_UP_DOWN_PULLUP 2660#define SMS_GPIO_PULL_UP_DOWN_KEEPER 3661u8 PullUpDown;662663#define SMS_GPIO_INPUT_CHARACTERISTICS_NORMAL 0664#define SMS_GPIO_INPUT_CHARACTERISTICS_SCHMITT 1665u8 InputCharacteristics;666667#define SMS_GPIO_OUTPUT_SLEW_RATE_SLOW 1 /* 10xx */668#define SMS_GPIO_OUTPUT_SLEW_RATE_FAST 0 /* 10xx */669670671#define SMS_GPIO_OUTPUT_SLEW_RATE_0_45_V_NS 0 /* 11xx */672#define SMS_GPIO_OUTPUT_SLEW_RATE_0_9_V_NS 1 /* 11xx */673#define SMS_GPIO_OUTPUT_SLEW_RATE_1_7_V_NS 2 /* 11xx */674#define SMS_GPIO_OUTPUT_SLEW_RATE_3_3_V_NS 3 /* 11xx */675u8 OutputSlewRate;676677#define SMS_GPIO_OUTPUT_DRIVING_S_4mA 0 /* 10xx */678#define SMS_GPIO_OUTPUT_DRIVING_S_8mA 1 /* 10xx */679#define SMS_GPIO_OUTPUT_DRIVING_S_12mA 2 /* 10xx */680#define SMS_GPIO_OUTPUT_DRIVING_S_16mA 3 /* 10xx */681682#define SMS_GPIO_OUTPUT_DRIVING_1_5mA 0 /* 11xx */683#define SMS_GPIO_OUTPUT_DRIVING_2_8mA 1 /* 11xx */684#define SMS_GPIO_OUTPUT_DRIVING_4mA 2 /* 11xx */685#define SMS_GPIO_OUTPUT_DRIVING_7mA 3 /* 11xx */686#define SMS_GPIO_OUTPUT_DRIVING_10mA 4 /* 11xx */687#define SMS_GPIO_OUTPUT_DRIVING_11mA 5 /* 11xx */688#define SMS_GPIO_OUTPUT_DRIVING_14mA 6 /* 11xx */689#define SMS_GPIO_OUTPUT_DRIVING_16mA 7 /* 11xx */690u8 OutputDriving;691};692693extern void smscore_registry_setmode(char *devpath, int mode);694extern int smscore_registry_getmode(char *devpath);695696extern int smscore_register_hotplug(hotplug_t hotplug);697extern void smscore_unregister_hotplug(hotplug_t hotplug);698699extern int smscore_register_device(struct smsdevice_params_t *params,700struct smscore_device_t **coredev);701extern void smscore_unregister_device(struct smscore_device_t *coredev);702703extern int smscore_start_device(struct smscore_device_t *coredev);704extern int smscore_load_firmware(struct smscore_device_t *coredev,705char *filename,706loadfirmware_t loadfirmware_handler);707708extern int smscore_set_device_mode(struct smscore_device_t *coredev, int mode);709extern int smscore_get_device_mode(struct smscore_device_t *coredev);710711extern int smscore_register_client(struct smscore_device_t *coredev,712struct smsclient_params_t *params,713struct smscore_client_t **client);714extern void smscore_unregister_client(struct smscore_client_t *client);715716extern int smsclient_sendrequest(struct smscore_client_t *client,717void *buffer, size_t size);718extern void smscore_onresponse(struct smscore_device_t *coredev,719struct smscore_buffer_t *cb);720721extern int smscore_get_common_buffer_size(struct smscore_device_t *coredev);722extern int smscore_map_common_buffer(struct smscore_device_t *coredev,723struct vm_area_struct *vma);724extern int smscore_get_fw_filename(struct smscore_device_t *coredev,725int mode, char *filename);726extern int smscore_send_fw_file(struct smscore_device_t *coredev,727u8 *ufwbuf, int size);728729extern730struct smscore_buffer_t *smscore_getbuffer(struct smscore_device_t *coredev);731extern void smscore_putbuffer(struct smscore_device_t *coredev,732struct smscore_buffer_t *cb);733734/* old GPIO management */735int smscore_configure_gpio(struct smscore_device_t *coredev, u32 pin,736struct smscore_config_gpio *pinconfig);737int smscore_set_gpio(struct smscore_device_t *coredev, u32 pin, int level);738739/* new GPIO management */740extern int smscore_gpio_configure(struct smscore_device_t *coredev, u8 PinNum,741struct smscore_gpio_config *pGpioConfig);742extern int smscore_gpio_set_level(struct smscore_device_t *coredev, u8 PinNum,743u8 NewLevel);744extern int smscore_gpio_get_level(struct smscore_device_t *coredev, u8 PinNum,745u8 *level);746747void smscore_set_board_id(struct smscore_device_t *core, int id);748int smscore_get_board_id(struct smscore_device_t *core);749750int smscore_led_state(struct smscore_device_t *core, int led);751752753/* ------------------------------------------------------------------------ */754755#define DBG_INFO 1756#define DBG_ADV 2757758#define sms_printk(kern, fmt, arg...) \759printk(kern "%s: " fmt "\n", __func__, ##arg)760761#define dprintk(kern, lvl, fmt, arg...) do {\762if (sms_dbg & lvl) \763sms_printk(kern, fmt, ##arg); } while (0)764765#define sms_log(fmt, arg...) sms_printk(KERN_INFO, fmt, ##arg)766#define sms_err(fmt, arg...) \767sms_printk(KERN_ERR, "line: %d: " fmt, __LINE__, ##arg)768#define sms_warn(fmt, arg...) sms_printk(KERN_WARNING, fmt, ##arg)769#define sms_info(fmt, arg...) \770dprintk(KERN_INFO, DBG_INFO, fmt, ##arg)771#define sms_debug(fmt, arg...) \772dprintk(KERN_DEBUG, DBG_ADV, fmt, ##arg)773774775#endif /* __SMS_CORE_API_H__ */776777778