Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 | /* SPDX-License-Identifier: GPL-2.0-or-later */ /* * specific defines for CCD's HFC 2BDS0 PCI chips * * Author Werner Cornelius (werner@isdn4linux.de) * * Copyright 1999 by Werner Cornelius (werner@isdn4linux.de) */ /* * thresholds for transparent B-channel mode * change mask and threshold simultaneously */ #define HFCPCI_BTRANS_THRESHOLD 128 #define HFCPCI_FILLEMPTY 64 #define HFCPCI_BTRANS_THRESMASK 0x00 /* defines for PCI config */ #define PCI_ENA_MEMIO 0x02 #define PCI_ENA_MASTER 0x04 /* GCI/IOM bus monitor registers */ #define HCFPCI_C_I 0x08 #define HFCPCI_TRxR 0x0C #define HFCPCI_MON1_D 0x28 #define HFCPCI_MON2_D 0x2C /* GCI/IOM bus timeslot registers */ #define HFCPCI_B1_SSL 0x80 #define HFCPCI_B2_SSL 0x84 #define HFCPCI_AUX1_SSL 0x88 #define HFCPCI_AUX2_SSL 0x8C #define HFCPCI_B1_RSL 0x90 #define HFCPCI_B2_RSL 0x94 #define HFCPCI_AUX1_RSL 0x98 #define HFCPCI_AUX2_RSL 0x9C /* GCI/IOM bus data registers */ #define HFCPCI_B1_D 0xA0 #define HFCPCI_B2_D 0xA4 #define HFCPCI_AUX1_D 0xA8 #define HFCPCI_AUX2_D 0xAC /* GCI/IOM bus configuration registers */ #define HFCPCI_MST_EMOD 0xB4 #define HFCPCI_MST_MODE 0xB8 #define HFCPCI_CONNECT 0xBC /* Interrupt and status registers */ #define HFCPCI_FIFO_EN 0x44 #define HFCPCI_TRM 0x48 #define HFCPCI_B_MODE 0x4C #define HFCPCI_CHIP_ID 0x58 #define HFCPCI_CIRM 0x60 #define HFCPCI_CTMT 0x64 #define HFCPCI_INT_M1 0x68 #define HFCPCI_INT_M2 0x6C #define HFCPCI_INT_S1 0x78 #define HFCPCI_INT_S2 0x7C #define HFCPCI_STATUS 0x70 /* S/T section registers */ #define HFCPCI_STATES 0xC0 #define HFCPCI_SCTRL 0xC4 #define HFCPCI_SCTRL_E 0xC8 #define HFCPCI_SCTRL_R 0xCC #define HFCPCI_SQ 0xD0 #define HFCPCI_CLKDEL 0xDC #define HFCPCI_B1_REC 0xF0 #define HFCPCI_B1_SEND 0xF0 #define HFCPCI_B2_REC 0xF4 #define HFCPCI_B2_SEND 0xF4 #define HFCPCI_D_REC 0xF8 #define HFCPCI_D_SEND 0xF8 #define HFCPCI_E_REC 0xFC /* bits in status register (READ) */ #define HFCPCI_PCI_PROC 0x02 #define HFCPCI_NBUSY 0x04 #define HFCPCI_TIMER_ELAP 0x10 #define HFCPCI_STATINT 0x20 #define HFCPCI_FRAMEINT 0x40 #define HFCPCI_ANYINT 0x80 /* bits in CTMT (Write) */ #define HFCPCI_CLTIMER 0x80 #define HFCPCI_TIM3_125 0x04 #define HFCPCI_TIM25 0x10 #define HFCPCI_TIM50 0x14 #define HFCPCI_TIM400 0x18 #define HFCPCI_TIM800 0x1C #define HFCPCI_AUTO_TIMER 0x20 #define HFCPCI_TRANSB2 0x02 #define HFCPCI_TRANSB1 0x01 /* bits in CIRM (Write) */ #define HFCPCI_AUX_MSK 0x07 #define HFCPCI_RESET 0x08 #define HFCPCI_B1_REV 0x40 #define HFCPCI_B2_REV 0x80 /* bits in INT_M1 and INT_S1 */ #define HFCPCI_INTS_B1TRANS 0x01 #define HFCPCI_INTS_B2TRANS 0x02 #define HFCPCI_INTS_DTRANS 0x04 #define HFCPCI_INTS_B1REC 0x08 #define HFCPCI_INTS_B2REC 0x10 #define HFCPCI_INTS_DREC 0x20 #define HFCPCI_INTS_L1STATE 0x40 #define HFCPCI_INTS_TIMER 0x80 /* bits in INT_M2 */ #define HFCPCI_PROC_TRANS 0x01 #define HFCPCI_GCI_I_CHG 0x02 #define HFCPCI_GCI_MON_REC 0x04 #define HFCPCI_IRQ_ENABLE 0x08 #define HFCPCI_PMESEL 0x80 /* bits in STATES */ #define HFCPCI_STATE_MSK 0x0F #define HFCPCI_LOAD_STATE 0x10 #define HFCPCI_ACTIVATE 0x20 #define HFCPCI_DO_ACTION 0x40 #define HFCPCI_NT_G2_G3 0x80 /* bits in HFCD_MST_MODE */ #define HFCPCI_MASTER 0x01 #define HFCPCI_SLAVE 0x00 #define HFCPCI_F0IO_POSITIV 0x02 #define HFCPCI_F0_NEGATIV 0x04 #define HFCPCI_F0_2C4 0x08 /* remaining bits are for codecs control */ /* bits in HFCD_SCTRL */ #define SCTRL_B1_ENA 0x01 #define SCTRL_B2_ENA 0x02 #define SCTRL_MODE_TE 0x00 #define SCTRL_MODE_NT 0x04 #define SCTRL_LOW_PRIO 0x08 #define SCTRL_SQ_ENA 0x10 #define SCTRL_TEST 0x20 #define SCTRL_NONE_CAP 0x40 #define SCTRL_PWR_DOWN 0x80 /* bits in SCTRL_E */ #define HFCPCI_AUTO_AWAKE 0x01 #define HFCPCI_DBIT_1 0x04 #define HFCPCI_IGNORE_COL 0x08 #define HFCPCI_CHG_B1_B2 0x80 /* bits in FIFO_EN register */ #define HFCPCI_FIFOEN_B1 0x03 #define HFCPCI_FIFOEN_B2 0x0C #define HFCPCI_FIFOEN_DTX 0x10 #define HFCPCI_FIFOEN_B1TX 0x01 #define HFCPCI_FIFOEN_B1RX 0x02 #define HFCPCI_FIFOEN_B2TX 0x04 #define HFCPCI_FIFOEN_B2RX 0x08 /* definitions of fifo memory area */ #define MAX_D_FRAMES 15 #define MAX_B_FRAMES 31 #define B_SUB_VAL 0x200 #define B_FIFO_SIZE (0x2000 - B_SUB_VAL) #define D_FIFO_SIZE 512 #define D_FREG_MASK 0xF struct zt { __le16 z1; /* Z1 pointer 16 Bit */ __le16 z2; /* Z2 pointer 16 Bit */ }; struct dfifo { u_char data[D_FIFO_SIZE]; /* FIFO data space */ u_char fill1[0x20A0 - D_FIFO_SIZE]; /* reserved, do not use */ u_char f1, f2; /* f pointers */ u_char fill2[0x20C0 - 0x20A2]; /* reserved, do not use */ /* mask index with D_FREG_MASK for access */ struct zt za[MAX_D_FRAMES + 1]; u_char fill3[0x4000 - 0x2100]; /* align 16K */ }; struct bzfifo { struct zt za[MAX_B_FRAMES + 1]; /* only range 0x0..0x1F allowed */ u_char f1, f2; /* f pointers */ u_char fill[0x2100 - 0x2082]; /* alignment */ }; union fifo_area { struct { struct dfifo d_tx; /* D-send channel */ struct dfifo d_rx; /* D-receive channel */ } d_chan; struct { u_char fill1[0x200]; u_char txdat_b1[B_FIFO_SIZE]; struct bzfifo txbz_b1; struct bzfifo txbz_b2; u_char txdat_b2[B_FIFO_SIZE]; u_char fill2[D_FIFO_SIZE]; u_char rxdat_b1[B_FIFO_SIZE]; struct bzfifo rxbz_b1; struct bzfifo rxbz_b2; u_char rxdat_b2[B_FIFO_SIZE]; } b_chans; u_char fill[32768]; }; #define Write_hfc(a, b, c) (writeb(c, (a->hw.pci_io) + b)) #define Read_hfc(a, b) (readb((a->hw.pci_io) + b)) |