Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /* drivers/atm/midway.h - Efficient Networks Midway (SAR) description */
0003  
0004 /* Written 1995-1999 by Werner Almesberger, EPFL LRC/ICA */
0005  
0006 
0007 #ifndef DRIVERS_ATM_MIDWAY_H
0008 #define DRIVERS_ATM_MIDWAY_H
0009 
0010 
0011 #define NR_VCI      1024        /* number of VCIs */
0012 #define NR_VCI_LD   10      /* log2(NR_VCI) */
0013 #define NR_DMA_RX   512     /* RX DMA queue entries */
0014 #define NR_DMA_TX   512     /* TX DMA queue entries */
0015 #define NR_SERVICE  NR_VCI      /* service list size */
0016 #define NR_CHAN     8       /* number of TX channels */
0017 #define TS_CLOCK    25000000    /* traffic shaper clock (cell/sec) */
0018 
0019 #define MAP_MAX_SIZE    0x00400000  /* memory window for max config */
0020 #define EPROM_SIZE  0x00010000
0021 #define MEM_VALID   0xffc00000  /* mask base address with this */
0022 #define PHY_BASE    0x00020000  /* offset of PHY register are */
0023 #define REG_BASE    0x00040000  /* offset of Midway register area */
0024 #define RAM_BASE    0x00200000  /* offset of RAM area */
0025 #define RAM_INCREMENT   0x00020000  /* probe for RAM every 128kB */
0026 
0027 #define MID_VCI_BASE    RAM_BASE
0028 #define MID_DMA_RX_BASE (MID_VCI_BASE+NR_VCI*16)
0029 #define MID_DMA_TX_BASE (MID_DMA_RX_BASE+NR_DMA_RX*8)
0030 #define MID_SERVICE_BASE (MID_DMA_TX_BASE+NR_DMA_TX*8)
0031 #define MID_FREE_BASE   (MID_SERVICE_BASE+NR_SERVICE*4)
0032 
0033 #define MAC_LEN 6 /* atm.h */
0034 
0035 #define MID_MIN_BUF_SIZE (1024)     /*   1 kB is minimum */
0036 #define MID_MAX_BUF_SIZE (128*1024) /* 128 kB is maximum */
0037 
0038 #define RX_DESCR_SIZE   1       /* RX PDU descr is 1 longword */
0039 #define TX_DESCR_SIZE   2       /* TX PDU descr is 2 longwords */
0040 #define AAL5_TRAILER    (ATM_AAL5_TRAILER/4) /* AAL5 trailer is 2 longwords */
0041 
0042 #define TX_GAP      8       /* TX buffer gap (words) */
0043 
0044 /*
0045  * Midway Reset/ID
0046  *
0047  * All values read-only. Writing to this register resets Midway chip.
0048  */
0049 
0050 #define MID_RES_ID_MCON 0x00        /* Midway Reset/ID */
0051 
0052 #define MID_ID      0xf0000000  /* Midway version */
0053 #define MID_SHIFT   24
0054 #define MID_MOTHER_ID   0x00000700  /* mother board id */
0055 #define MID_MOTHER_SHIFT 8
0056 #define MID_CON_TI  0x00000080  /* 0: normal ctrl; 1: SABRE */
0057 #define MID_CON_SUNI    0x00000040  /* 0: UTOPIA; 1: SUNI */
0058 #define MID_CON_V6  0x00000020  /* 0: non-pipel UTOPIA (required iff
0059                        !CON_SUNI; 1: UTOPIA */
0060 #define DAUGHTER_ID 0x0000001f  /* daughter board id */
0061 
0062 /*
0063  * Interrupt Status Acknowledge, Interrupt Status & Interrupt Enable
0064  */
0065 
0066 #define MID_ISA     0x01        /* Interrupt Status Acknowledge */
0067 #define MID_IS      0x02        /* Interrupt Status */
0068 #define MID_IE      0x03        /* Interrupt Enable */
0069 
0070 #define MID_TX_COMPLETE_7 0x00010000    /* channel N completed a PDU */
0071 #define MID_TX_COMPLETE_6 0x00008000    /* transmission */
0072 #define MID_TX_COMPLETE_5 0x00004000
0073 #define MID_TX_COMPLETE_4 0x00002000
0074 #define MID_TX_COMPLETE_3 0x00001000
0075 #define MID_TX_COMPLETE_2 0x00000800
0076 #define MID_TX_COMPLETE_1 0x00000400
0077 #define MID_TX_COMPLETE_0 0x00000200
0078 #define MID_TX_COMPLETE 0x0001fe00  /* any TX */
0079 #define MID_TX_DMA_OVFL 0x00000100  /* DMA to adapter overflow */
0080 #define MID_TX_IDENT_MISM 0x00000080    /* TX: ident mismatch => halted */
0081 #define MID_DMA_LERR_ACK 0x00000040 /* LERR - SBus ? */
0082 #define MID_DMA_ERR_ACK 0x00000020  /* DMA error */
0083 #define MID_RX_DMA_COMPLETE 0x00000010  /* DMA to host done */
0084 #define MID_TX_DMA_COMPLETE 0x00000008  /* DMA from host done */
0085 #define MID_SERVICE 0x00000004  /* something in service list */
0086 #define MID_SUNI_INT    0x00000002  /* interrupt from SUNI */
0087 #define MID_STAT_OVFL   0x00000001  /* statistics overflow */
0088 
0089 /*
0090  * Master Control/Status
0091  */
0092 
0093 #define MID_MC_S    0x04
0094 
0095 #define MID_INT_SELECT  0x000001C0  /* Interrupt level (000: off) */
0096 #define MID_INT_SEL_SHIFT 6
0097 #define MID_TX_LOCK_MODE 0x00000020 /* 0: streaming; 1: TX ovfl->lock */
0098 #define MID_DMA_ENABLE  0x00000010  /* R: 0: disable; 1: enable
0099                        W: 0: no change; 1: enable */
0100 #define MID_TX_ENABLE   0x00000008  /* R: 0: TX disabled; 1: enabled
0101                        W: 0: no change; 1: enable */
0102 #define MID_RX_ENABLE   0x00000004  /* like TX */
0103 #define MID_WAIT_1MS    0x00000002  /* R: 0: timer not running; 1: running
0104                        W: 0: no change; 1: no interrupts
0105                                    for 1 ms */
0106 #define MID_WAIT_500US  0x00000001  /* like WAIT_1MS, but 0.5 ms */
0107 
0108 /*
0109  * Statistics
0110  *
0111  * Cleared when reading.
0112  */
0113 
0114 #define MID_STAT        0x05
0115 
0116 #define MID_VCI_TRASH   0xFFFF0000  /* trashed cells because of VCI mode */
0117 #define MID_VCI_TRASH_SHIFT 16
0118 #define MID_OVFL_TRASH  0x0000FFFF  /* trashed cells because of overflow */
0119 
0120 /*
0121  * Address registers
0122  */
0123 
0124 #define MID_SERV_WRITE  0x06    /* free pos in service area (R, 10 bits) */
0125 #define MID_DMA_ADDR    0x07    /* virtual DMA address (R, 32 bits) */
0126 #define MID_DMA_WR_RX   0x08    /* (RW, 9 bits) */
0127 #define MID_DMA_RD_RX   0x09
0128 #define MID_DMA_WR_TX   0x0A
0129 #define MID_DMA_RD_TX   0x0B
0130 
0131 /*
0132  * Transmit Place Registers (0x10+4*channel)
0133  */
0134 
0135 #define MID_TX_PLACE(c) (0x10+4*(c))
0136 
0137 #define MID_SIZE    0x00003800  /* size, N*256 x 32 bit */
0138 #define MID_SIZE_SHIFT  11
0139 #define MID_LOCATION    0x000007FF  /* location in adapter memory (word) */
0140 
0141 #define MID_LOC_SKIP    8       /* 8 bits of location are always zero
0142                        (applies to all uses of location) */
0143 
0144 /*
0145  * Transmit ReadPtr Registers (0x11+4*channel)
0146  */
0147 
0148 #define MID_TX_RDPTR(c) (0x11+4*(c))
0149 
0150 #define MID_READ_PTR    0x00007FFF  /* next word for PHY */
0151 
0152 /*
0153  * Transmit DescrStart Registers (0x12+4*channel)
0154  */
0155 
0156 #define MID_TX_DESCRSTART(c) (0x12+4*(c))
0157 
0158 #define MID_DESCR_START 0x00007FFF  /* seg buffer being DMAed */
0159 
0160 #define ENI155_MAGIC    0xa54b872d
0161 
0162 struct midway_eprom {
0163     unsigned char mac[MAC_LEN],inv_mac[MAC_LEN];
0164     unsigned char pad[36];
0165     u32 serial,inv_serial;
0166     u32 magic,inv_magic;
0167 };
0168 
0169 
0170 /*
0171  * VCI table entry
0172  */
0173 
0174 #define MID_VCI_IN_SERVICE  0x00000001  /* set if VCI is currently in
0175                            service list */
0176 #define MID_VCI_SIZE        0x00038000  /* reassembly buffer size,
0177                            2*<size> kB */
0178 #define MID_VCI_SIZE_SHIFT  15
0179 #define MID_VCI_LOCATION    0x1ffc0000  /* buffer location */
0180 #define MID_VCI_LOCATION_SHIFT  18
0181 #define MID_VCI_PTI_MODE    0x20000000  /* 0: trash, 1: preserve */
0182 #define MID_VCI_MODE        0xc0000000
0183 #define MID_VCI_MODE_SHIFT  30
0184 #define MID_VCI_READ        0x00007fff
0185 #define MID_VCI_READ_SHIFT  0
0186 #define MID_VCI_DESCR       0x7fff0000
0187 #define MID_VCI_DESCR_SHIFT 16
0188 #define MID_VCI_COUNT       0x000007ff
0189 #define MID_VCI_COUNT_SHIFT 0
0190 #define MID_VCI_STATE       0x0000c000
0191 #define MID_VCI_STATE_SHIFT 14
0192 #define MID_VCI_WRITE       0x7fff0000
0193 #define MID_VCI_WRITE_SHIFT 16
0194 
0195 #define MID_MODE_TRASH  0
0196 #define MID_MODE_RAW    1
0197 #define MID_MODE_AAL5   2
0198 
0199 /*
0200  * Reassembly buffer descriptor
0201  */
0202 
0203 #define MID_RED_COUNT       0x000007ff
0204 #define MID_RED_CRC_ERR     0x00000800
0205 #define MID_RED_T       0x00001000
0206 #define MID_RED_CE      0x00010000
0207 #define MID_RED_CLP     0x01000000
0208 #define MID_RED_IDEN        0xfe000000
0209 #define MID_RED_SHIFT       25
0210 
0211 #define MID_RED_RX_ID       0x1b        /* constant identifier */
0212 
0213 /*
0214  * Segmentation buffer descriptor
0215  */
0216 
0217 #define MID_SEG_COUNT       MID_RED_COUNT
0218 #define MID_SEG_RATE        0x01f80000
0219 #define MID_SEG_RATE_SHIFT  19
0220 #define MID_SEG_PR      0x06000000
0221 #define MID_SEG_PR_SHIFT    25
0222 #define MID_SEG_AAL5        0x08000000
0223 #define MID_SEG_ID      0xf0000000
0224 #define MID_SEG_ID_SHIFT    28
0225 #define MID_SEG_MAX_RATE    63
0226 
0227 #define MID_SEG_CLP     0x00000001
0228 #define MID_SEG_PTI     0x0000000e
0229 #define MID_SEG_PTI_SHIFT   1
0230 #define MID_SEG_VCI     0x00003ff0
0231 #define MID_SEG_VCI_SHIFT   4
0232 
0233 #define MID_SEG_TX_ID       0xb     /* constant identifier */
0234 
0235 /*
0236  * DMA entry
0237  */
0238 
0239 #define MID_DMA_COUNT       0xffff0000
0240 #define MID_DMA_COUNT_SHIFT 16
0241 #define MID_DMA_END     0x00000020
0242 #define MID_DMA_TYPE        0x0000000f
0243 
0244 #define MID_DT_JK   0x3
0245 #define MID_DT_WORD 0x0
0246 #define MID_DT_2W   0x7
0247 #define MID_DT_4W   0x4
0248 #define MID_DT_8W   0x5
0249 #define MID_DT_16W  0x6
0250 #define MID_DT_2WM  0xf
0251 #define MID_DT_4WM  0xc
0252 #define MID_DT_8WM  0xd
0253 #define MID_DT_16WM 0xe
0254 
0255 /* only for RX*/
0256 #define MID_DMA_VCI     0x0000ffc0
0257 #define MID_DMA_VCI_SHIFT   6
0258 
0259 /* only for TX */
0260 #define MID_DMA_CHAN        0x000001c0
0261 #define MID_DMA_CHAN_SHIFT  6
0262 
0263 #define MID_DT_BYTE 0x1
0264 #define MID_DT_HWORD    0x2
0265 
0266 #endif