|
DataMuseum.dkPresents historical artifacts from the history of: Regnecentalen RC-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Regnecentalen RC-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 13824 (0x3600) Types: TextFile Notes: UNIX file Names: »82586.h«
└─⟦a6ab2eb36⟧ Bits:30004042/kconfig3.imd SW95705I 386/ix Multi-user Release 1.2 └─⟦a6ab2eb36⟧ UNIX Filesystem └─⟦this⟧ »kc/new/usr/include/sys/82586.h«
/* * Copyright (c) 1984 AT&T Technologies, Inc. * All Rights Reserved * * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF * AT&T TECHNOLOGIES, INC. * The copyright notice above does not evidence any actual * or intended publication of such source code. */ #ident "@(#)82586.h 1.2 - 87/01/16" /* * 82586 is the starlan controller chip */ /* * SCB STAT (we call it INT) bits * indicate the nature of an incoming interrupt from 82586 */ #define SCB_INT_MSK 0xf000 /* SCB STAT bit mask */ #define SCB_INT_CX 0x8000 /* CX bit, CU finished a command with "I" set */ #define SCB_INT_FR 0x4000 /* FR bit, RU finished receiving a frame */ #define SCB_INT_CNA 0x2000 /* CNA bit, CU not active */ #define SCB_INT_RNR 0x1000 /* RNR bit, RU not ready */ /* * SCB Command Unit STAT bits */ #define SCB_CUS_MSK 0x0700 /* SCB CUS bit mask */ #define SCB_CUS_IDLE 0x0000 /* CU idle */ #define SCB_CUS_SUSPND 0x0100 /* CU suspended */ #define SCB_CUS_ACTV 0x0200 /* CU active */ /* * SCB Receive Unit STAT bits */ #define SCB_RUS_MSK 0x0070 /* SCB RUS bit mask */ #define SCB_RUS_IDLE 0x0000 /* RU idle */ #define SCB_RUS_SUSPND 0x0010 /* RU suspended */ #define SCB_RUS_NORESRC 0x0020 /* RU no resource */ #define SCB_RUS_READY 0x0040 /* RU ready */ /* * SCB ACK bits * these bits are used to acknowledge an interrupt from 82586 */ #define SCB_ACK_MSK 0xf000 /* SCB ACK bit mask */ #define SCB_ACK_CX 0x8000 /* ACK_CX, acknowledge a completed cmd */ #define SCB_ACK_FR 0x4000 /* ACK_FR, acknowledge a frame reception */ #define SCB_ACK_CNA 0x2000 /* ACK_CNA, acknowledge CU not active */ #define SCB_ACK_RNR 0x1000 /* ACK_RNR, acknowledge RU not ready */ /* * SCB Command Unit commands */ #define SCB_CUC_MSK 0x0700 /* SCB CUC bit mask */ #define SCB_CUC_STRT 0x0100 /* start CU */ #define SCB_CUC_RSUM 0x0200 /* resume CU */ #define SCB_CUC_SUSPND 0x0300 /* suspend CU */ #define SCB_CUC_ABRT 0x0400 /* abort CU */ /* * SCB Receive Unit commands */ #define SCB_RUC_MSK 0x0070 /* SCB RUC bit mask */ #define SCB_RUC_STRT 0x0010 /* start RU */ #define SCB_RUC_RSUM 0x0020 /* resume RU */ #define SCB_RUC_SUSPND 0x0030 /* suspend RU */ #define SCB_RUC_ABRT 0x0040 /* abort RU */ /* * SCB software reset bit */ #define SCB_RESET 0x0080 /* RESET, reset chip same as hardware reset */ /* * general defines for the command and descriptor blocks */ #define CS_CMPLT 0x8000 /* C bit, completed */ #define CS_BUSY 0x4000 /* B bit, Busy */ #define CS_OK 0x2000 /* OK bit, error free */ #define CS_ABORT 0x1000 /* A bit, abort */ #define CS_EL 0x8000 /* EL bit, end of list */ #define CS_SUSPND 0x4000 /* S bit, suspend */ #define CS_INT 0x2000 /* I bit, interrupt */ #define CS_STAT_MSK 0x3fff /* Command status mask */ #define CS_EOL 0xffff /* set for fd_rbd_ofst on unattached FDs */ #define CS_EOF 0x8000 /* EOF (End Of Frame) in the TBD and RBD */ #define CS_RBD_CNT_MSK 0x3fff /* actual count mask in RBD */ /* * 82586 commands */ #define CS_CMD_MSK 0x07 /* command bits mask */ #define CS_CMD_NOP 0x00 /* NOP */ #define CS_CMD_IASET 0x01 /* Individual Address Set up */ #define CS_CMD_CONF 0x02 /* Configure */ #define CS_CMD_MCSET 0x03 /* Multi-Cast Setup */ #define CS_CMD_XMIT 0x04 /* transmit */ #define CS_CMD_TDR 0x05 /* Time Domain Reflectomete */ #define CS_CMD_DUMP 0x06 /* dump */ #define CS_CMD_DGNS 0x07 /* diagnose */ /* * Definitions of the configuration parameters of the CSMA chip. * Note that in general it is not possible to change these * without corresponding kernel changes (re-compilation) */ #define CS_LEN_MSK 0x000f #define CS_LEN_SHIFT 0 #define CSMA_MSK 0x0700 #define CSMA_SHIFT 8 #define FIFO_MSK 0x0f00 #define FIFO_SHIFT 8 #define RDY_SYNC 0x0040 /* internal synchronization */ #define RDY_ASYNC 0x0000 /* external synch. */ #define RDY_MSK 0x0040 #define SAVE_BF 0x0080 /* Save bad frames */ #define NO_SAVE_BF 0x0000 /* Don't save them */ #define BF_MSK 0x0080 #define RFD_ADDR 0x0000 /* Addresses in frame descriptors */ #define BUF_ADDR 0x0800 /* Addresses in buffers */ #define ADDR_MSK 0x0800 #define PREAM_2 0x0000 /* Preamble length 2 */ #define PREAM_4 0x1000 /* 4 */ #define PREAM_8 0x2000 /* 8 */ #define PREAM_16 0x3000 /* 16 */ #define PREAM_MSK 0x3000 #define INT_LB 0x4000 /* Internal loopback */ #define EXT_LB 0x8000 /* External loopback */ #define NO_LB 0x0000 /* No loopback */ #define LB_MSK 0xc000 #define LIN_P_SHIFT 0 #define LIN_P_MSK 0x0007 #define ACR_SHIFT 4 #define ACR_MSK 0x0070 #define BOFF_802_3 0x0000 /* Backoff per IEEE 802.3 */ #define BOFF_OTHER 0x0080 /* Alternate method */ #define BOFF_MSK 0x0080 #define IFGAP_MSK 0xff00 #define IFGAP_SHIFT 8 #define SLOT_SHIFT 0 #define SLOT_MSK 0x07ff #define RETRY_MSK 0xf000 #define RETRY_SHIFT 12 #define LIS_PROMISC 0x0001 /* Promiscuous listening */ #define LIS_SELECT 0x0000 /* Be selective */ #define LIS_MSK 0x0001 #define BCAST_DISABLE 0x0002 /* Disable broadcasts */ #define BCAST_ENABLE 0x0000 /* Permit broadcasts */ #define BCAST_MSK 0x0002 #define ENC_MANCH 0x0004 /* Manchester encoding */ #define ENC_NRZ 0x0000 /* NRZ encoding */ #define ENC_MSK 0x0004 #define XNOCS_ON 0x0008 /* Xmit even on no carr. sense */ #define XNOCS_OFF 0x0000 /* Stop xmit. on no carr. sense */ #define XNOCS_MSK 0x0008 #define CRC_INS 0x0000 /* Insert CRC */ #define NO_CRC_INS 0x0010 /* No CRC insertion */ #define CRC_INS_MSK 0x0010 #define CRC_AUTODIN 0x0000 /* Use Autodin II CRC */ #define CRC_CCITT 0x0020 /* Use CCITT CRC */ #define CRC_MSK 0x0020 #define BSTUFF_IEEE 0x0000 /* Use IEEE bit-stuffing */ #define BSTUFF_HDLC 0x0040 /* Use HDLC bit-stuffing */ #define BSTUFF_MSK 0x0040 #define PAD_ON 0x0080 /* Pad xmissions */ #define PAD_OFF 0x0000 /* Don't pad xmissions */ #define PAD_MSK 0x0080 #define CRSF_MSK 0x0700 #define CRSF_SHIFT 8 #define CDTF_MSK 0x7000 #define CDTF_SHIFT 12 #define CRS_INT 0x0800 /* Carrier sense internal */ #define CRS_EXT 0x0000 /* Carrier sense external */ #define CRS_MSK 0x0800 #define CDT_INT 0x8000 /* Collision detect internal */ #define CDT_EXT 0x0000 /* Collision detect external */ #define CDT_MSK 0x8000 #define MINF_SHIFT 0 /* * Build up the official STARLAN configuration */ #define CSMA_LEN 6 /* number of octets in addresses */ #define FIFO_LIM 8 /* DMA starts at this point */ #define IFGAP 96 /* Interframe gap */ #define SLOT_TIME 512 /* Slot time */ #define N_RETRY 15 /* # of re-tries if collision */ #define CRSF 0 /* Carrier Sense Filter */ #define CDTF 0 /* Intervals for collision detect */ #define CONF_LEN 12 /* Length of configuration params. */ #define LIN_PRI 0 /* Linear priority */ #define ACR 0 /* Accelerated contention resolution */ #define MIN_FRAME 64 /* Minimum frame length */ #define CC_FIFO ((CONF_LEN << CS_LEN_SHIFT) | \ (FIFO_LIM << FIFO_SHIFT)) #define CC_ADD_MODE ( RDY_SYNC | \ NO_SAVE_BF | \ RFD_ADDR | \ PREAM_8 | \ NO_LB | \ (CSMA_LEN << CSMA_SHIFT) \ ) #define CC_PRI_DATA ( BOFF_802_3 | \ (LIN_PRI << LIN_P_SHIFT) | \ (ACR << ACR_SHIFT) | \ (IFGAP << IFGAP_SHIFT) \ ) #define CC_SLOT ((SLOT_TIME << SLOT_SHIFT) | \ (N_RETRY << RETRY_SHIFT) \ ) #define CC_HARDWARE ( LIS_SELECT | \ BCAST_ENABLE | \ ENC_MANCH | \ XNOCS_ON | \ CRC_INS | \ CRC_AUTODIN | \ BSTUFF_IEEE | \ PAD_OFF | \ CRS_EXT | \ CDT_EXT | \ (CRSF << CRSF_SHIFT) | \ (CDTF << CDTF_SHIFT) \ ) #define CC_MINFRAME ((MIN_FRAME << MINF_SHIFT)) /* * A macro to help set up default configurations. Useage is * conf_t conf = STARLAN_CONF; */ #define STARLAN_CONF {\ CC_FIFO,\ CC_ADD_MODE,\ CC_PRI_DATA,\ CC_SLOT,\ CC_HARDWARE,\ CC_MINFRAME\ } #define SCP_BUS_WIDTH 0x01 /* 8 bit bus */ /* * 82568 data structure definition * * NOTE: Only the first 13 bits of the physical addresses are set. These * are the offset of the structure from the base of the shared memory * segment. (0 - 0x1fff) * */ /* * physical CSMA network address type */ typedef unsigned char net_addr_t[CSMA_LEN]; /* * System Configuration Pointer (SCP) * This table reside in a fixed address on the memory (0xfffff6). * The 82586 reads the bus width and address of the ISCP from * this table. * */ typedef struct { ushort scp_sysbus; /* system bus width */ ushort scp_unused[2]; /* unused area */ /* * paddr_t scp_iscp_paddr; ISCP physical address */ ushort scp_iscp; ushort scp_iscp_base; } scp_t; /* * Intermediate System Configuration Pointer (ISCP) */ typedef struct { ushort iscp_busy; /* 1 means 82586 is initializing */ /* only the first 8 bit are used */ ushort iscp_scb_ofst; /* offset of the scb in the shared memory */ paddr_t iscp_scb_base; /* base of shared memory */ } iscp_t; /* * System Control Block (SCB) */ typedef struct { ushort scb_status; /* STAT, CUS, RUS */ ushort scb_cmd; /* ACK, CUC, RUC */ ushort scb_cbl_ofst; /* CBL (Command Block List) offset */ ushort scb_rfa_ofst; /* RFA (Receive Frame Area) offset */ ushort scb_crc_err; /* count of CRC errors. */ ushort scb_aln_err; /* count of alignment errors */ ushort scb_rsc_err; /* count of no resource errors */ ushort scb_ovrn_err; /* count of overrun errors */ } scb_t; /* * Configure command parameter structure */ typedef struct { ushort cnf_fifo_byte; /* BYTE CNT, FIFO LIM (TX_FIFO) */ ushort cnf_add_mode; /* SRDY, SAV_BF, ADDR_LEN, AL_LOC, PREAM_LEN */ /* INT_LPBCK, EXT_LPBK */ ushort cnf_pri_data; /* LIN_PRIO, ACR, BOF_MET, INTERFRAME_SPACING */ ushort cnf_slot; /* SLOT_TIME, RETRY NUMBER */ ushort cnf_hrdwr; /* PRM, BC_DIS, MANCH/NRZ, TONO_CRS, NCRC_INS */ /* CRC, BT_STF, PAD,CRSF,CRS_SRC,CDTF,CDT_SRC */ ushort cnf_min_len; /* Min_FRM_LEN */ } conf_t; /* * Transmit commad parameters structure */ typedef struct { ushort xmt_tbd_ofst; /* Transmit Buffer Descriptor offset */ net_addr_t xmt_dest; /* Destination Address */ ushort xmt_length; /* length of the frame */ } xmit_t; /* * Dump command parameters structure */ typedef struct { ushort dmp_buf_ofst; /* dump buffer offset */ } dump_t; /* * General Action Command structure */ typedef struct { ushort cmd_status, /* C, B, command specific status */ cmd_cmd, /* EL, S, I, opcode */ cmd_nxt_ofst; /* pointer to the next command block */ union { dump_t prm_dump; /* dump */ xmit_t prm_xmit; /* transmit */ conf_t prm_conf; /* configure */ net_addr_t prm_ia_set; /* individual address setup */ } prmtr; /* parameters */ } cmd_t; /* * Tramsmit Buffer Descriptor (TBD) */ typedef struct { ushort tbd_count; /* End Of Frame(EOF), Actual count(ACT_COUNT) */ ushort tbd_nxt_ofst; /* offset of next TBD */ /* * paddr_t tbd_buff; buffer address */ ushort tbd_buff; ushort tbd_buff_base; } tbd_t; /* * Receive Buffer Descriptor */ typedef struct { ushort rbd_status; /* EOF, ACT_COUNT feild valid (F), ACT_COUNT */ ushort rbd_nxt_ofst; /* offset of next RBD */ /* * paddr_t rbd_buff; buffer address */ ushort rbd_buff; ushort rbd_buff_base; ushort rbd_size; /* EL, size of the buffer */ } rbd_t; /* * Frame Descriptor (FD) */ typedef struct { ushort fd_status; /* C, B, OK, S6-S11 */ ushort fd_cmd; /* End of List (EL), Suspend (S) */ ushort fd_nxt_ofst; /* offset of next FD */ ushort fd_rbd_ofst; /* offset of the RBD */ net_addr_t fd_dest; /* destination address */ net_addr_t fd_src; /* source address */ ushort fd_length; /* length of the received frame */ } fd_t; /* * dump buffer definition * * Dump Command does not work on "standard" STARLAN due to bug in * B-step version of 82586. May / may not work in other versions. * See Intel 82586 documentation / errata sheets for more details */ typedef struct { ushort dmp_fifo_byte, /* same as in conf. cmd, except for */ dmp_add_mode, /* bit 6 of fifo_byte */ dmp_pri_data, dmp_slot, dmp_hware, dmp_min_len, dmp_iar10, /* Individual address bytes */ dmp_iar32, dmp_iar54, dmp_last_stat, /* status word of last cmd */ dmp_txcr10, /* xmit CRC generator */ dmp_txcr32, dmp_rxcr10, /* rcv CRC generator */ dmp_rxcr32, dmp_tmp10, /* Internal temporaries */ dmp_tmp32, dmp_tmp54, dmp_rsr, /* receive status register */ dmp_hash10, /* Hash table */ dmp_hash32, dmp_hash54, dmp_hash76, dmp_last_tdr, /* Status of last TDR command */ dmp_fill [8], /* Mostly 0 (!) */ dmp_addr_len, dmp_n_rb_sz, /* Size of next receive buffer */ dmp_n_rb_hi, /* High byte of next RB address */ dmp_n_rb_lo, /* Lo byte of " " " */ dmp_c_rb_sz, /* # of bytes in last buff used */ dmp_la_rbd, /* Look ahead buff. des. (N+2) */ dmp_n_rbd, /* Next RBD address */ dmp_c_rbd, /* Current (last filled) rbd */ dmp_c_rb_ebc, /* current rb empty byte count */ dmp_n_fd_addr, /* next + 1 free frame descriptor */ dmp_c_fd_addr, /* next free frame descriptor */ dmp_tmp, dmp_n_tb_cnt, /* last tb cnt of completed cmd */ dmp_d_buf_addr, /* Address of buffer in dump cmd */ dmp_n_tb_addr, /* Next Xmit buff address */ dmp_l_tbd_addr, /* next xmit buff descriptor */ dmp_n_tbd_addr, /* current xmit buff descriptor */ dmp_tmp1, dmp_n_cb_addr, /* next command block address */ dmp_c_cb_addr, /* current cmd blk address */ dmp_tmp2, dmp_scb_addr, /* Address of SCB */ dmp_fill2 [6], dmp_fifo_lim, dmp_fill3 [3], dmp_rus_req, dmp_cus_req, dmp_rus, dmp_fill4 [6], dmp_buff_hi, /* High address of dump buffer */ dmp_buff_lo, /* Lo address of dump buffer */ dmp_dma_bc, /* Receive dma byte count */ dmp_br_buff, /* Base + buffer */ dmp_r_dma_hi, /* receive dma address */ dmp_r_dma_lo, /* " " " */ dmp_fill5 [7]; } dumpbuf_t;