162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * isar.h ISAR (Siemens PSB 7110) specific defines 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Author Karsten Keil (keil@isdn4linux.de) 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Copyright 2009 by Karsten Keil <keil@isdn4linux.de> 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include "iohelper.h" 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cistruct isar_hw; 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_cistruct isar_ch { 1662306a36Sopenharmony_ci struct bchannel bch; 1762306a36Sopenharmony_ci struct isar_hw *is; 1862306a36Sopenharmony_ci struct timer_list ftimer; 1962306a36Sopenharmony_ci u8 nr; 2062306a36Sopenharmony_ci u8 dpath; 2162306a36Sopenharmony_ci u8 mml; 2262306a36Sopenharmony_ci u8 state; 2362306a36Sopenharmony_ci u8 cmd; 2462306a36Sopenharmony_ci u8 mod; 2562306a36Sopenharmony_ci u8 newcmd; 2662306a36Sopenharmony_ci u8 newmod; 2762306a36Sopenharmony_ci u8 try_mod; 2862306a36Sopenharmony_ci u8 conmsg[16]; 2962306a36Sopenharmony_ci}; 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_cistruct isar_hw { 3262306a36Sopenharmony_ci struct isar_ch ch[2]; 3362306a36Sopenharmony_ci void *hw; 3462306a36Sopenharmony_ci spinlock_t *hwlock; /* lock HW access */ 3562306a36Sopenharmony_ci char *name; 3662306a36Sopenharmony_ci struct module *owner; 3762306a36Sopenharmony_ci read_reg_func *read_reg; 3862306a36Sopenharmony_ci write_reg_func *write_reg; 3962306a36Sopenharmony_ci fifo_func *read_fifo; 4062306a36Sopenharmony_ci fifo_func *write_fifo; 4162306a36Sopenharmony_ci int (*ctrl)(void *, u32, u_long); 4262306a36Sopenharmony_ci void (*release)(struct isar_hw *); 4362306a36Sopenharmony_ci int (*init)(struct isar_hw *); 4462306a36Sopenharmony_ci int (*open)(struct isar_hw *, struct channel_req *); 4562306a36Sopenharmony_ci int (*firmware)(struct isar_hw *, const u8 *, int); 4662306a36Sopenharmony_ci unsigned long Flags; 4762306a36Sopenharmony_ci int version; 4862306a36Sopenharmony_ci u8 bstat; 4962306a36Sopenharmony_ci u8 iis; 5062306a36Sopenharmony_ci u8 cmsb; 5162306a36Sopenharmony_ci u8 clsb; 5262306a36Sopenharmony_ci u8 buf[256]; 5362306a36Sopenharmony_ci u8 log[256]; 5462306a36Sopenharmony_ci}; 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci#define ISAR_IRQMSK 0x04 5762306a36Sopenharmony_ci#define ISAR_IRQSTA 0x04 5862306a36Sopenharmony_ci#define ISAR_IRQBIT 0x75 5962306a36Sopenharmony_ci#define ISAR_CTRL_H 0x61 6062306a36Sopenharmony_ci#define ISAR_CTRL_L 0x60 6162306a36Sopenharmony_ci#define ISAR_IIS 0x58 6262306a36Sopenharmony_ci#define ISAR_IIA 0x58 6362306a36Sopenharmony_ci#define ISAR_HIS 0x50 6462306a36Sopenharmony_ci#define ISAR_HIA 0x50 6562306a36Sopenharmony_ci#define ISAR_MBOX 0x4c 6662306a36Sopenharmony_ci#define ISAR_WADR 0x4a 6762306a36Sopenharmony_ci#define ISAR_RADR 0x48 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci#define ISAR_HIS_VNR 0x14 7062306a36Sopenharmony_ci#define ISAR_HIS_DKEY 0x02 7162306a36Sopenharmony_ci#define ISAR_HIS_FIRM 0x1e 7262306a36Sopenharmony_ci#define ISAR_HIS_STDSP 0x08 7362306a36Sopenharmony_ci#define ISAR_HIS_DIAG 0x05 7462306a36Sopenharmony_ci#define ISAR_HIS_P0CFG 0x3c 7562306a36Sopenharmony_ci#define ISAR_HIS_P12CFG 0x24 7662306a36Sopenharmony_ci#define ISAR_HIS_SARTCFG 0x25 7762306a36Sopenharmony_ci#define ISAR_HIS_PUMPCFG 0x26 7862306a36Sopenharmony_ci#define ISAR_HIS_PUMPCTRL 0x2a 7962306a36Sopenharmony_ci#define ISAR_HIS_IOM2CFG 0x27 8062306a36Sopenharmony_ci#define ISAR_HIS_IOM2REQ 0x07 8162306a36Sopenharmony_ci#define ISAR_HIS_IOM2CTRL 0x2b 8262306a36Sopenharmony_ci#define ISAR_HIS_BSTREQ 0x0c 8362306a36Sopenharmony_ci#define ISAR_HIS_PSTREQ 0x0e 8462306a36Sopenharmony_ci#define ISAR_HIS_SDATA 0x20 8562306a36Sopenharmony_ci#define ISAR_HIS_DPS1 0x40 8662306a36Sopenharmony_ci#define ISAR_HIS_DPS2 0x80 8762306a36Sopenharmony_ci#define SET_DPS(x) ((x << 6) & 0xc0) 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci#define ISAR_IIS_MSCMSD 0x3f 9062306a36Sopenharmony_ci#define ISAR_IIS_VNR 0x15 9162306a36Sopenharmony_ci#define ISAR_IIS_DKEY 0x03 9262306a36Sopenharmony_ci#define ISAR_IIS_FIRM 0x1f 9362306a36Sopenharmony_ci#define ISAR_IIS_STDSP 0x09 9462306a36Sopenharmony_ci#define ISAR_IIS_DIAG 0x25 9562306a36Sopenharmony_ci#define ISAR_IIS_GSTEV 0x00 9662306a36Sopenharmony_ci#define ISAR_IIS_BSTEV 0x28 9762306a36Sopenharmony_ci#define ISAR_IIS_BSTRSP 0x2c 9862306a36Sopenharmony_ci#define ISAR_IIS_PSTRSP 0x2e 9962306a36Sopenharmony_ci#define ISAR_IIS_PSTEV 0x2a 10062306a36Sopenharmony_ci#define ISAR_IIS_IOM2RSP 0x27 10162306a36Sopenharmony_ci#define ISAR_IIS_RDATA 0x20 10262306a36Sopenharmony_ci#define ISAR_IIS_INVMSG 0x3f 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci#define ISAR_CTRL_SWVER 0x10 10562306a36Sopenharmony_ci#define ISAR_CTRL_STST 0x40 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci#define ISAR_MSG_HWVER 0x20 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci#define ISAR_DP1_USE 1 11062306a36Sopenharmony_ci#define ISAR_DP2_USE 2 11162306a36Sopenharmony_ci#define ISAR_RATE_REQ 3 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ci#define PMOD_DISABLE 0 11462306a36Sopenharmony_ci#define PMOD_FAX 1 11562306a36Sopenharmony_ci#define PMOD_DATAMODEM 2 11662306a36Sopenharmony_ci#define PMOD_HALFDUPLEX 3 11762306a36Sopenharmony_ci#define PMOD_V110 4 11862306a36Sopenharmony_ci#define PMOD_DTMF 5 11962306a36Sopenharmony_ci#define PMOD_DTMF_TRANS 6 12062306a36Sopenharmony_ci#define PMOD_BYPASS 7 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci#define PCTRL_ORIG 0x80 12362306a36Sopenharmony_ci#define PV32P2_V23R 0x40 12462306a36Sopenharmony_ci#define PV32P2_V22A 0x20 12562306a36Sopenharmony_ci#define PV32P2_V22B 0x10 12662306a36Sopenharmony_ci#define PV32P2_V22C 0x08 12762306a36Sopenharmony_ci#define PV32P2_V21 0x02 12862306a36Sopenharmony_ci#define PV32P2_BEL 0x01 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci/* LSB MSB in ISAR doc wrong !!! Arghhh */ 13162306a36Sopenharmony_ci#define PV32P3_AMOD 0x80 13262306a36Sopenharmony_ci#define PV32P3_V32B 0x02 13362306a36Sopenharmony_ci#define PV32P3_V23B 0x01 13462306a36Sopenharmony_ci#define PV32P4_48 0x11 13562306a36Sopenharmony_ci#define PV32P5_48 0x05 13662306a36Sopenharmony_ci#define PV32P4_UT48 0x11 13762306a36Sopenharmony_ci#define PV32P5_UT48 0x0d 13862306a36Sopenharmony_ci#define PV32P4_96 0x11 13962306a36Sopenharmony_ci#define PV32P5_96 0x03 14062306a36Sopenharmony_ci#define PV32P4_UT96 0x11 14162306a36Sopenharmony_ci#define PV32P5_UT96 0x0f 14262306a36Sopenharmony_ci#define PV32P4_B96 0x91 14362306a36Sopenharmony_ci#define PV32P5_B96 0x0b 14462306a36Sopenharmony_ci#define PV32P4_UTB96 0xd1 14562306a36Sopenharmony_ci#define PV32P5_UTB96 0x0f 14662306a36Sopenharmony_ci#define PV32P4_120 0xb1 14762306a36Sopenharmony_ci#define PV32P5_120 0x09 14862306a36Sopenharmony_ci#define PV32P4_UT120 0xf1 14962306a36Sopenharmony_ci#define PV32P5_UT120 0x0f 15062306a36Sopenharmony_ci#define PV32P4_144 0x99 15162306a36Sopenharmony_ci#define PV32P5_144 0x09 15262306a36Sopenharmony_ci#define PV32P4_UT144 0xf9 15362306a36Sopenharmony_ci#define PV32P5_UT144 0x0f 15462306a36Sopenharmony_ci#define PV32P6_CTN 0x01 15562306a36Sopenharmony_ci#define PV32P6_ATN 0x02 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ci#define PFAXP2_CTN 0x01 15862306a36Sopenharmony_ci#define PFAXP2_ATN 0x04 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci#define PSEV_10MS_TIMER 0x02 16162306a36Sopenharmony_ci#define PSEV_CON_ON 0x18 16262306a36Sopenharmony_ci#define PSEV_CON_OFF 0x19 16362306a36Sopenharmony_ci#define PSEV_V24_OFF 0x20 16462306a36Sopenharmony_ci#define PSEV_CTS_ON 0x21 16562306a36Sopenharmony_ci#define PSEV_CTS_OFF 0x22 16662306a36Sopenharmony_ci#define PSEV_DCD_ON 0x23 16762306a36Sopenharmony_ci#define PSEV_DCD_OFF 0x24 16862306a36Sopenharmony_ci#define PSEV_DSR_ON 0x25 16962306a36Sopenharmony_ci#define PSEV_DSR_OFF 0x26 17062306a36Sopenharmony_ci#define PSEV_REM_RET 0xcc 17162306a36Sopenharmony_ci#define PSEV_REM_REN 0xcd 17262306a36Sopenharmony_ci#define PSEV_GSTN_CLR 0xd4 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_ci#define PSEV_RSP_READY 0xbc 17562306a36Sopenharmony_ci#define PSEV_LINE_TX_H 0xb3 17662306a36Sopenharmony_ci#define PSEV_LINE_TX_B 0xb2 17762306a36Sopenharmony_ci#define PSEV_LINE_RX_H 0xb1 17862306a36Sopenharmony_ci#define PSEV_LINE_RX_B 0xb0 17962306a36Sopenharmony_ci#define PSEV_RSP_CONN 0xb5 18062306a36Sopenharmony_ci#define PSEV_RSP_DISC 0xb7 18162306a36Sopenharmony_ci#define PSEV_RSP_FCERR 0xb9 18262306a36Sopenharmony_ci#define PSEV_RSP_SILDET 0xbe 18362306a36Sopenharmony_ci#define PSEV_RSP_SILOFF 0xab 18462306a36Sopenharmony_ci#define PSEV_FLAGS_DET 0xba 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_ci#define PCTRL_CMD_TDTMF 0x5a 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci#define PCTRL_CMD_FTH 0xa7 18962306a36Sopenharmony_ci#define PCTRL_CMD_FRH 0xa5 19062306a36Sopenharmony_ci#define PCTRL_CMD_FTM 0xa8 19162306a36Sopenharmony_ci#define PCTRL_CMD_FRM 0xa6 19262306a36Sopenharmony_ci#define PCTRL_CMD_SILON 0xac 19362306a36Sopenharmony_ci#define PCTRL_CMD_CONT 0xa2 19462306a36Sopenharmony_ci#define PCTRL_CMD_ESC 0xa4 19562306a36Sopenharmony_ci#define PCTRL_CMD_SILOFF 0xab 19662306a36Sopenharmony_ci#define PCTRL_CMD_HALT 0xa9 19762306a36Sopenharmony_ci 19862306a36Sopenharmony_ci#define PCTRL_LOC_RET 0xcf 19962306a36Sopenharmony_ci#define PCTRL_LOC_REN 0xce 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_ci#define SMODE_DISABLE 0 20262306a36Sopenharmony_ci#define SMODE_V14 2 20362306a36Sopenharmony_ci#define SMODE_HDLC 3 20462306a36Sopenharmony_ci#define SMODE_BINARY 4 20562306a36Sopenharmony_ci#define SMODE_FSK_V14 5 20662306a36Sopenharmony_ci 20762306a36Sopenharmony_ci#define SCTRL_HDMC_BOTH 0x00 20862306a36Sopenharmony_ci#define SCTRL_HDMC_DTX 0x80 20962306a36Sopenharmony_ci#define SCTRL_HDMC_DRX 0x40 21062306a36Sopenharmony_ci#define S_P1_OVSP 0x40 21162306a36Sopenharmony_ci#define S_P1_SNP 0x20 21262306a36Sopenharmony_ci#define S_P1_EOP 0x10 21362306a36Sopenharmony_ci#define S_P1_EDP 0x08 21462306a36Sopenharmony_ci#define S_P1_NSB 0x04 21562306a36Sopenharmony_ci#define S_P1_CHS_8 0x03 21662306a36Sopenharmony_ci#define S_P1_CHS_7 0x02 21762306a36Sopenharmony_ci#define S_P1_CHS_6 0x01 21862306a36Sopenharmony_ci#define S_P1_CHS_5 0x00 21962306a36Sopenharmony_ci 22062306a36Sopenharmony_ci#define S_P2_BFT_DEF 0x10 22162306a36Sopenharmony_ci 22262306a36Sopenharmony_ci#define IOM_CTRL_ENA 0x80 22362306a36Sopenharmony_ci#define IOM_CTRL_NOPCM 0x00 22462306a36Sopenharmony_ci#define IOM_CTRL_ALAW 0x02 22562306a36Sopenharmony_ci#define IOM_CTRL_ULAW 0x04 22662306a36Sopenharmony_ci#define IOM_CTRL_RCV 0x01 22762306a36Sopenharmony_ci 22862306a36Sopenharmony_ci#define IOM_P1_TXD 0x10 22962306a36Sopenharmony_ci 23062306a36Sopenharmony_ci#define HDLC_FED 0x40 23162306a36Sopenharmony_ci#define HDLC_FSD 0x20 23262306a36Sopenharmony_ci#define HDLC_FST 0x20 23362306a36Sopenharmony_ci#define HDLC_ERROR 0x1c 23462306a36Sopenharmony_ci#define HDLC_ERR_FAD 0x10 23562306a36Sopenharmony_ci#define HDLC_ERR_RER 0x08 23662306a36Sopenharmony_ci#define HDLC_ERR_CER 0x04 23762306a36Sopenharmony_ci#define SART_NMD 0x01 23862306a36Sopenharmony_ci 23962306a36Sopenharmony_ci#define BSTAT_RDM0 0x1 24062306a36Sopenharmony_ci#define BSTAT_RDM1 0x2 24162306a36Sopenharmony_ci#define BSTAT_RDM2 0x4 24262306a36Sopenharmony_ci#define BSTAT_RDM3 0x8 24362306a36Sopenharmony_ci#define BSTEV_TBO 0x1f 24462306a36Sopenharmony_ci#define BSTEV_RBO 0x2f 24562306a36Sopenharmony_ci 24662306a36Sopenharmony_ci/* FAX State Machine */ 24762306a36Sopenharmony_ci#define STFAX_NULL 0 24862306a36Sopenharmony_ci#define STFAX_READY 1 24962306a36Sopenharmony_ci#define STFAX_LINE 2 25062306a36Sopenharmony_ci#define STFAX_CONT 3 25162306a36Sopenharmony_ci#define STFAX_ACTIV 4 25262306a36Sopenharmony_ci#define STFAX_ESCAPE 5 25362306a36Sopenharmony_ci#define STFAX_SILDET 6 25462306a36Sopenharmony_ci 25562306a36Sopenharmony_ciextern u32 mISDNisar_init(struct isar_hw *, void *); 25662306a36Sopenharmony_ciextern void mISDNisar_irq(struct isar_hw *); 257