123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- typedef unsigned char uint8;
- typedef unsigned short uint16;
- typedef unsigned int uint32;
- typedef volatile unsigned char vuint8;
- typedef volatile unsigned short vuint16;
- typedef volatile unsigned int vuint32;
- #define DPRAM_ATM CONFIG_SYS_IMMR + 0x3000
- #define ATM_DPRAM_BEGIN (DPRAM_ATM - CONFIG_SYS_IMMR - 0x2000)
- #define NUM_CONNECTIONS 1
- #define SAR_RXB_SIZE 1584
- #define AM_HMASK 0x0FFFFFF0
- #define NUM_CT_ENTRIES (NUM_CONNECTIONS)
- #define NUM_TCTE_ENTRIES (NUM_CONNECTIONS)
- #define NUM_AM_ENTRIES (NUM_CONNECTIONS+1)
- #define NUM_AP_ENTRIES (NUM_CONNECTIONS+1)
- #define NUM_MPHYPT_ENTRIES 1
- #define NUM_APCP_ENTRIES 1
- #define NUM_APCT_PRIO_1_ENTRIES 146 /* Determines minimum rate */
- #define NUM_TQ_ENTRIES 12
- #define SIZE_OF_CT_ENTRY 64
- #define SIZE_OF_TCTE_ENTRY 32
- #define SIZE_OF_AM_ENTRY 4
- #define SIZE_OF_AP_ENTRY 2
- #define SIZE_OF_MPHYPT_ENTRY 2
- #define SIZE_OF_APCP_ENTRY 32
- #define SIZE_OF_APCT_ENTRY 2
- #define SIZE_OF_TQ_ENTRY 2
- #define CT_BASE ((ATM_DPRAM_BEGIN + 63) & 0xFFC0) /*64 */
- #define TCTE_BASE (CT_BASE + NUM_CT_ENTRIES * SIZE_OF_CT_ENTRY) /*32 */
- #define APCP_BASE (TCTE_BASE + NUM_TCTE_ENTRIES * SIZE_OF_TCTE_ENTRY) /*32 */
- #define AM_BEGIN (APCP_BASE + NUM_APCP_ENTRIES * SIZE_OF_APCP_ENTRY) /*4 */
- #define AM_BASE (AM_BEGIN + (NUM_AM_ENTRIES - 1) * SIZE_OF_AM_ENTRY)
- #define AP_BEGIN (AM_BEGIN + NUM_AM_ENTRIES * SIZE_OF_AM_ENTRY) /*2 */
- #define AP_BASE (AP_BEGIN + (NUM_AP_ENTRIES - 1) * SIZE_OF_AP_ENTRY)
- #define MPHYPT_BASE (AP_BEGIN + NUM_AP_ENTRIES * SIZE_OF_AP_ENTRY) /*2 */
- #define APCT_PRIO_1_BASE (MPHYPT_BASE + NUM_MPHYPT_ENTRIES * SIZE_OF_MPHYPT_ENTRY) /*2 */
- #define TQ_BASE (APCT_PRIO_1_BASE + NUM_APCT_PRIO_1_ENTRIES * SIZE_OF_APCT_ENTRY) /*2 */
- #define ATM_DPRAM_SIZE ((TQ_BASE + NUM_TQ_ENTRIES * SIZE_OF_TQ_ENTRY) - ATM_DPRAM_BEGIN)
- #define CT_PTR(base) ((struct ct_entry_t *)((char *)(base) + 0x2000 + CT_BASE))
- #define TCTE_PTR(base) ((struct tcte_entry_t *)((char *)(base) + 0x2000 + TCTE_BASE))
- #define AM_PTR(base) ((uint32 *)((char *)(base) + 0x2000 + AM_BASE))
- #define AP_PTR(base) ((uint16 *)((char *)(base) + 0x2000 + AP_BASE))
- #define MPHYPT_PTR(base) ((uint16 *)((char *)(base) + 0x2000 + MPHYPT_BASE))
- #define APCP_PTR(base) ((struct apc_params_t *)((char*)(base) + 0x2000 + APCP_BASE))
- #define APCT1_PTR(base) ((uint16 *)((char *)(base) + 0x2000 + APCT_PRIO_1_BASE))
- #define APCT2_PTR(base) ((uint16 *)((char *)(base) + 0x2000 + APCT_PRIO_2_BASE))
- #define APCT3_PTR(base) ((uint16 *)((char *)(base) + 0x2000 + APCT_PRIO_3_BASE))
- #define TQ_PTR(base) ((uint16 *)((char *)(base) + 0x2000 + TQ_BASE))
- /* SAR registers */
- #define RBDBASE(base) ((vuint32 *)(base + 0x3F00)) /* Base address of RxBD-List */
- #define SRFCR(base) ((vuint8 *)(base + 0x3F04)) /* DMA Receive function code */
- #define SRSTATE(base) ((vuint8 *)(base + 0x3F05)) /* DMA Receive status */
- #define MRBLR(base) ((vuint16 *)(base + 0x3F06)) /* Init to 0 for ATM */
- #define RSTATE(base) ((vuint32 *)(base + 0x3F08)) /* Do not write to */
- #define R_CNT(base) ((vuint16 *)(base + 0x3F10)) /* Do not write to */
- #define STFCR(base) ((vuint8 *)(base + 0x3F12)) /* DMA Transmit function code */
- #define STSTATE(base) ((vuint8 *)(base + 0x3F13)) /* DMA Transmit status */
- #define TBDBASE(base) ((vuint32 *)(base + 0x3F14)) /* Base address of TxBD-List */
- #define TSTATE(base) ((vuint32 *)(base + 0x3F18)) /* Do not write to */
- #define COMM_CH(base) ((vuint16 *)(base + 0x3F1C)) /* Command channel */
- #define STCHNUM(base) ((vuint16 *)(base + 0x3F1E)) /* Do not write to */
- #define T_CNT(base) ((vuint16 *)(base + 0x3F20)) /* Do not write to */
- #define CTBASE(base) ((vuint16 *)(base + 0x3F22)) /* Base address of Connection-table */
- #define ECTBASE(base) ((vuint32 *)(base + 0x3F24)) /* Valid only for external Conn.-table */
- #define INTBASE(base) ((vuint32 *)(base + 0x3F28)) /* Base address of Interrupt-table */
- #define INTPTR(base) ((vuint32 *)(base + 0x3F2C)) /* Pointer to Interrupt-queue */
- #define C_MASK(base) ((vuint32 *)(base + 0x3F30)) /* CRC-mask */
- #define SRCHNUM(base) ((vuint16 *)(base + 0x3F34)) /* Do not write to */
- #define INT_CNT(base) ((vuint16 *)(base + 0x3F36)) /* Interrupt-Counter */
- #define INT_ICNT(base) ((vuint16 *)(base + 0x3F38)) /* Interrupt threshold */
- #define TSTA(base) ((vuint16 *)(base + 0x3F3A)) /* Time-stamp-address */
- #define OLDLEN(base) ((vuint16 *)(base + 0x3F3C)) /* Do not write to */
- #define SMRBLR(base) ((vuint16 *)(base + 0x3F3E)) /* SAR max RXBuffer length */
- #define EHEAD(base) ((vuint32 *)(base + 0x3F40)) /* Valid for serial mode */
- #define EPAYLOAD(base) ((vuint32 *)(base + 0x3F44)) /* Valid for serial mode */
- #define TQBASE(base) ((vuint16 *)(base + 0x3F48)) /* Base address of Tx queue */
- #define TQEND(base) ((vuint16 *)(base + 0x3F4A)) /* End address of Tx queue */
- #define TQAPTR(base) ((vuint16 *)(base + 0x3F4C)) /* TQ APC pointer */
- #define TQTPTR(base) ((vuint16 *)(base + 0x3F4E)) /* TQ Tx pointer */
- #define APCST(base) ((vuint16 *)(base + 0x3F50)) /* APC status */
- #define APCPTR(base) ((vuint16 *)(base + 0x3F52)) /* APC parameter pointer */
- #define HMASK(base) ((vuint32 *)(base + 0x3F54)) /* Header mask */
- #define AMBASE(base) ((vuint16 *)(base + 0x3F58)) /* Address match table base */
- #define AMEND(base) ((vuint16 *)(base + 0x3F5A)) /* Address match table end */
- #define APBASE(base) ((vuint16 *)(base + 0x3F5C)) /* Address match parameter */
- #define FLBASE(base) ((vuint32 *)(base + 0x3F54)) /* First-level table base */
- #define SLBASE(base) ((vuint32 *)(base + 0x3F58)) /* Second-level table base */
- #define FLMASK(base) ((vuint16 *)(base + 0x3F5C)) /* First-level mask */
- #define ECSIZE(base) ((vuint16 *)(base + 0x3F5E)) /* Valid for extended mode */
- #define APCT_REAL(base) ((vuint32 *)(base + 0x3F60)) /* APC 32 bit counter */
- #define R_PTR(base) ((vuint32 *)(base + 0x3F64)) /* Do not write to */
- #define RTEMP(base) ((vuint32 *)(base + 0x3F68)) /* Do not write to */
- #define T_PTR(base) ((vuint32 *)(base + 0x3F6C)) /* Do not write to */
- #define TTEMP(base) ((vuint32 *)(base + 0x3F70)) /* Do not write to */
- /* ESAR registers */
- #define FMCTIMESTMP(base) ((vuint32 *)(base + 0x3F80)) /* Perf.Mon.Timestamp */
- #define FMCTEMPLATE(base) ((vuint32 *)(base + 0x3F84)) /* Perf.Mon.Template */
- #define PMPTR(base) ((vuint16 *)(base + 0x3F88)) /* Perf.Mon.Table */
- #define PMCHANNEL(base) ((vuint16 *)(base + 0x3F8A)) /* Perf.Mon.Channel */
- #define MPHYST(base) ((vuint16 *)(base + 0x3F90)) /* Multi-PHY Status */
- #define TCTEBASE(base) ((vuint16 *)(base + 0x3F92)) /* Internal TCT Extension Base */
- #define ETCTEBASE(base) ((vuint32 *)(base + 0x3F94)) /* External TCT Extension Base */
- #define COMM_CH2(base) ((vuint32 *)(base + 0x3F98)) /* 2nd command channel word */
- #define STATBASE(base) ((vuint16 *)(base + 0x3F9C)) /* Statistics table pointer */
- /* UTOPIA Mode Register */
- #define UTMODE(base) (CAST(vuint32 *)(base + 0x0978))
- /* SAR commands */
- #define TRANSMIT_CHANNEL_ACTIVATE_CMD 0x0FC1
- #define TRANSMIT_CHANNEL_DEACTIVATE_CMD 0x1FC1
- #define STOP_TRANSMIT_CMD 0x2FC1
- #define RESTART_TRANSMIT_CMD 0x3FC1
- #define STOP_RECEIVE_CMD 0x4FC1
- #define RESTART_RECEIVE_CMD 0x5FC1
- #define APC_BYPASS_CMD 0x6FC1
- #define MEM_WRITE_CMD 0x7FC1
- #define CPCR_FLG 0x0001
- /* INT flags */
- #define INT_VALID 0x80000000
- #define INT_WRAP 0x40000000
- #define INT_APCO 0x00800000
- #define INT_TQF 0x00200000
- #define INT_RXF 0x00080000
- #define INT_BSY 0x00040000
- #define INT_TXB 0x00020000
- #define INT_RXB 0x00010000
- #define NUM_INT_ENTRIES 80
- #define SIZE_OF_INT_ENTRY 4
- struct apc_params_t {
- vuint16 apct_base1; /* APC Table - First Priority Base pointer */
- vuint16 apct_end1; /* First APC Table - Length */
- vuint16 apct_ptr1; /* First APC Table Pointer */
- vuint16 apct_sptr1; /* APC Table First Priority Service pointer */
- vuint16 etqbase; /* Enhanced Transmit Queue Base pointer */
- vuint16 etqend; /* Enhanced Transmit Queue End pointer */
- vuint16 etqaptr; /* Enhanced Transmit Queue APC pointer */
- vuint16 etqtptr; /* Enhanced Transmit Queue Transmitter pointer */
- vuint16 apc_mi; /* APC - Max Iteration */
- vuint16 ncits; /* Number of Cells In TimeSlot */
- vuint16 apcnt; /* APC - N Timer */
- vuint16 reserved1; /* reserved */
- vuint16 eapcst; /* APC status */
- vuint16 ptp_counter; /* PTP queue length */
- vuint16 ptp_txch; /* PTP channel */
- vuint16 reserved2; /* reserved */
- };
- struct ct_entry_t {
- /* RCT */
- unsigned fhnt:1;
- unsigned pm_rct:1;
- unsigned reserved0:6;
- unsigned hec:1;
- unsigned clp:1;
- unsigned cng_ncrc:1;
- unsigned inf_rct:1;
- unsigned cngi_ptp:1;
- unsigned cdis_rct:1;
- unsigned aal_rct:2;
- uint16 rbalen;
- uint32 rcrc;
- uint32 rb_ptr;
- uint16 rtmlen;
- uint16 rbd_ptr;
- uint16 rbase;
- uint16 tstamp;
- uint16 imask;
- unsigned ft:2;
- unsigned nim:1;
- unsigned reserved1:2;
- unsigned rpmt:6;
- unsigned reserved2:5;
- uint8 reserved3[8];
- /* TCT */
- unsigned reserved4:1;
- unsigned pm_tct:1;
- unsigned reserved5:6;
- unsigned pc:1;
- unsigned reserved6:2;
- unsigned inf_tct:1;
- unsigned cr10:1;
- unsigned cdis_tct:1;
- unsigned aal_tct:2;
- uint16 tbalen;
- uint32 tcrc;
- uint32 tb_ptr;
- uint16 ttmlen;
- uint16 tbd_ptr;
- uint16 tbase;
- unsigned reserved7:5;
- unsigned tpmt:6;
- unsigned reserved8:3;
- unsigned avcf:1;
- unsigned act:1;
- uint32 chead;
- uint16 apcl;
- uint16 apcpr;
- unsigned out:1;
- unsigned bnr:1;
- unsigned tservice:2;
- unsigned apcp:12;
- uint16 apcpf;
- };
- struct tcte_entry_t {
- unsigned res1:4;
- unsigned scr:12;
- uint16 scrf;
- uint16 bt;
- uint16 buptrh;
- uint32 buptrl;
- unsigned vbr2:1;
- unsigned res2:15;
- uint16 oobr;
- uint16 res3[8];
- };
- #define SIZE_OF_RBD 12
- #define SIZE_OF_TBD 12
- struct atm_bd_t {
- vuint16 flags;
- vuint16 length;
- unsigned char *buffer_ptr;
- vuint16 cpcs_uu_cpi;
- vuint16 reserved;
- };
- /* BD flags */
- #define EMPTY 0x8000
- #define READY 0x8000
- #define WRAP 0x2000
- #define INTERRUPT 0x1000
- #define LAST 0x0800
- #define FIRST 0x0400
- #define OAM 0x0400
- #define CONTINUOUS 0x0200
- #define HEC_ERROR 0x0080
- #define CELL_LOSS 0x0040
- #define CONGESTION 0x0020
- #define ABORT 0x0010
- #define LEN_ERROR 0x0002
- #define CRC_ERROR 0x0001
- struct atm_connection_t {
- struct atm_bd_t *rbd_ptr;
- int num_rbd;
- struct atm_bd_t *tbd_ptr;
- int num_tbd;
- struct ct_entry_t *ct_ptr;
- struct tcte_entry_t *tcte_ptr;
- void *drv;
- void (*notify) (void *drv, int event);
- };
- struct atm_driver_t {
- int loaded;
- int started;
- char *csram;
- int csram_size;
- uint32 *am_top;
- uint16 *ap_top;
- uint32 *int_reload_ptr;
- uint32 *int_serv_ptr;
- struct atm_bd_t *rbd_base_ptr;
- struct atm_bd_t *tbd_base_ptr;
- unsigned linerate_in_bps;
- };
- extern struct atm_connection_t g_conn[NUM_CONNECTIONS];
- extern struct atm_driver_t g_atm;
- extern int atmLoad (void);
- extern void atmUnload (void);
|