summaryrefslogtreecommitdiffstats
path: root/private/ntos/ndis/pc586e/pc586hrd.h
diff options
context:
space:
mode:
Diffstat (limited to 'private/ntos/ndis/pc586e/pc586hrd.h')
-rw-r--r--private/ntos/ndis/pc586e/pc586hrd.h438
1 files changed, 438 insertions, 0 deletions
diff --git a/private/ntos/ndis/pc586e/pc586hrd.h b/private/ntos/ndis/pc586e/pc586hrd.h
new file mode 100644
index 000000000..6de7e66f5
--- /dev/null
+++ b/private/ntos/ndis/pc586e/pc586hrd.h
@@ -0,0 +1,438 @@
+
+/*++
+
+Copyright (c) 1990 Microsoft Corporation
+
+Module Name:
+
+ pc586hrd.h
+
+Abstract:
+
+ This header file is broken into two halves, 82586 specific first and
+ pc586 netcard second.
+
+Author:
+
+ Weldon Washburn (o-weldo, Intel) 11/11/90
+
+Environment:
+
+
+Notes:
+
+
+Revision History:
+
+
+--*/
+
+#define static
+
+// the below #defines were transformed into static USHORTS to workaround
+// a compiler optimization that does not agree with pc586 hardware. See
+// ushort.c for current definitions.
+
+#if 0
+// 82586 header file
+
+
+#define SCBINTMSK 0xf000 // SCB STAT bit mask
+#define SCBINTCX 0x8000 // CX bit, CU finished a command with "I" set
+#define SCBINTFR 0x4000 // FR bit, RU finished receiving a frame
+#define SCBINTCNA 0x2000 // CNA bit, CU not active
+#define SCBINTRNR 0x1000 // RNR bit, RU not ready
+
+// command unit status bits
+
+#define SCBCUSMSK 0x0700 // SCB CUS bit mask
+#define SCBCUSIDLE 0x0000 // CU idle
+#define SCBCUSSUSPND 0x0100 // CU suspended
+#define SCBCUSACTV 0x0200 // CU active
+
+// receive unit status bits
+
+#define SCBRUSMSK 0x0070 // SCB RUS bit mask
+#define SCBRUSIDLE 0x0000 // RU idle
+#define SCBRUSSUSPND 0x0010 // RU suspended
+#define SCBRUSNORESRC 0x0020 // RU no resource
+#define SCBRUSREADY 0x0040 // RU ready
+
+// bits used to acknowledge an interrupt from 586
+
+#define SCBACKMSK 0xf000 // SCB ACK bit mask
+#define SCBACKCX 0x8000 // ACKCX, acknowledge a completed cmd
+#define SCBACKFR 0x4000 // ACKFR, acknowledge a frame reception
+#define SCBACKCNA 0x2000 // ACKCNA, acknowledge CU not active
+#define SCBACKRNR 0x1000 // ACKRNR, acknowledge RU not ready
+
+// 586 CU commands
+
+#define SCBCUCMSK 0x0700 // SCB CUC bit mask
+#define SCBCUCSTRT 0x0100 // start CU
+#define SCBCUCRSUM 0x0200 // resume CU
+#define SCBCUCSUSPND 0x0300 // suspend CU
+#define SCBCUCABRT 0x0400 // abort CU
+
+// 586 RU commands
+
+#define SCBRUCMSK 0x0070 // SCB RUC bit mask
+#define SCBRUCSTRT 0x0010 // start RU
+#define SCBRUCRSUM 0x0020 // resume RU
+#define SCBRUCSUSPND 0x0030 // suspend RU
+#define SCBRUCABRT 0x0040 // abort RU
+
+#define SCBRESET 0x0080 // software reset of 586
+
+// #define's for the command and descriptor blocks
+
+#define CSCMPLT 0x8000 // C bit, completed
+#define CSBUSY 0x4000 // B bit, Busy
+#define CSOK 0x2000 // OK bit, error free
+#define CSABORT 0x1000 // A bit, abort
+#define CSEL 0x8000 // EL bit, end of list
+#define CSSUSPND 0x4000 // S bit, suspend
+#define CSINT 0x2000 // I bit, interrupt
+#define CSSTATMSK 0x3fff // Command status mask
+#define CSEOL 0xffff // set for fdrbdofst on unattached FDs
+#define CSEOF 0x8000 // EOF (End Of Frame) in the TBD and RBD
+#define CSRBDCNTMSK 0x3fff // actual count mask in RBD
+
+// second level commands
+
+#define CSCMDMSK 0x07 // command bits mask
+#define CSCMDNOP 0x00 // NOP
+#define CSCMDIASET 0x01 // Individual Address Set up
+#define CSCMDCONF 0x02 // Configure
+#define CSCMDMCSET 0x03 // Multi-Cast Setup
+#define CSCMDXMIT 0x04 // transmit
+#define CSCMDTDR 0x05 // Time Domain Reflectomete
+#define CSCMDDUMP 0x06 // dump
+#define CSCMDDGNS 0x07 // diagnose
+
+#endif // 0
+
+extern SCBINTMSK;
+extern SCBINTCX;
+extern SCBINTFR;
+extern SCBINTCNA;
+extern SCBINTRNR;
+
+// command unit status bits
+
+extern SCBCUSMSK;
+extern SCBCUSIDLE;
+extern SCBCUSSUSPND;
+extern SCBCUSACTV;
+
+// receive unit status bits
+
+extern SCBRUSMSK;
+extern SCBRUSIDLE;
+extern SCBRUSSUSPND;
+extern SCBRUSNORESRC;
+extern SCBRUSREADY;
+
+// bits used to acknowledge an interrupt from 586
+
+extern SCBACKMSK;
+extern SCBACKCX;
+extern SCBACKFR;
+extern SCBACKCNA;
+extern SCBACKRNR;
+
+// 586 CU commands
+
+extern SCBCUCMSK;
+extern SCBCUCSTRT;
+extern SCBCUCRSUM;
+extern SCBCUCSUSPND;
+extern SCBCUCABRT;
+
+// 586 RU commands
+
+extern SCBRUCMSK;
+extern SCBRUCSTRT;
+extern SCBRUCRSUM;
+extern SCBRUCSUSPND;
+extern SCBRUCABRT;
+
+extern SCBRESET;
+
+// extern's for the command and descriptor blocks
+
+extern CSCMPLT;
+extern CSBUSY;
+extern CSOK;
+extern CSABORT;
+extern CSEL;
+extern CSSUSPND;
+extern CSINT;
+extern CSSTATMSK;
+extern CSEOL;
+extern CSEOF;
+extern CSRBDCNTMSK;
+
+// second level commands
+
+extern CSCMDMSK;
+extern CSCMDNOP;
+extern CSCMDIASET;
+extern CSCMDCONF;
+extern CSCMDMCSET;
+extern CSCMDXMIT;
+extern CSCMDTDR;
+extern CSCMDDUMP;
+extern CSCMDDGNS;
+
+
+
+#define MAX_MULTICAST_ADDRESS ((UINT)16)
+typedef UCHAR NETADDR[6];
+
+// at address 0xfffff6 the 586 sees the following data structure
+
+typedef struct SCP {
+ USHORT ScpSysBus; // system bus width
+ USHORT ScpUnused[2]; // unused area
+ USHORT ScpIscp; // points to iscpt
+ USHORT ScpIscpBase; // points to iscpt
+} SCP, *PSCP;
+
+typedef struct ISCP {
+ USHORT IscpBusy; // 1 means 82586 is initializing
+ // only the first 8 bit are used
+ USHORT IscpScbOfst; // offset of the scb in the shared memory
+ PVOID IscpScbBase; // base of shared memory
+} ISCP, *PISCP;
+
+// System Control Block
+typedef struct SCB {
+ USHORT ScbStatus; // STAT, CUS, RUS
+ USHORT ScbCmd; // ACK, CUC, RUC
+ USHORT ScbCblOfst; // CBL (Command Block List) offset
+ USHORT ScbRfaOfst; // RFA (Receive Frame Area) offset
+ USHORT ScbCrcErr; // count of CRC errors.
+ USHORT ScbAlnErr; // count of alignment errors
+ USHORT ScbRscErr; // count of no resource errors
+ USHORT ScbOvrnErr; // count of overrun errors
+} SCB, *PSCB;
+
+
+// config command sub-block
+
+typedef struct CONF {
+ USHORT CnfFifoByte; // BYTE CNT, FIFO LIM (TXFIFO)
+ USHORT CnfAddMode; // SRDY, SAVBF, ADDRLEN, ALLOC, PREAMLEN
+ // INTLPBCK, EXTLPBK
+ USHORT CnfPriData; // LINPRIO, ACR, BOFMET, INTERFRAMESPACING
+ USHORT CnfSlot; // SLOTTIME, RETRY NUMBER
+ USHORT CnfHrdwr; // PRM, BCDIS, MANCH/NRZ, TONOCRS, NCRCINS
+ // CRC, BTSTF, PAD,CRSF,CRSSRC,CDTF,CDTSRC
+ USHORT CnfMinLen; // MinFRMLEN
+} CONF, *PCONF;
+
+// xmt command sub-block
+
+typedef struct TRANSMIT {
+ USHORT XmtTbdOfst; // Transmit Buffer Descriptor offset
+ NETADDR XmtDest; // Destination Address
+ USHORT XmtLength; // length of the frame
+} TRANSMIT, *PTRANSMIT;
+
+// dump command sub-block
+
+typedef struct DUMP {
+ USHORT DmpBufOfst; // dump buffer offset
+} DUMP, *PDUMP;
+
+typedef struct MCADDR {
+ USHORT McCnt;
+ USHORT McAddress[MAX_MULTICAST_ADDRESS][MAC_LENGTH_OF_ADDRESS / 2];
+} MCADDR, *PMCADDR;
+
+
+// command block and sub-blocks
+
+typedef struct CMD {
+ USHORT CmdStatus, // C, B, command specific status
+ CmdCmd, // EL, S, I, opcode
+ CmdNxtOfst; // pointer to the next command block
+ union {
+ DUMP PrmDump; // dump
+ TRANSMIT PrmXmit; // transmit
+ CONF PrmConf; // configure
+ NETADDR PrmIaSet; // individual address setup
+ MCADDR PrmMcSet; // multicast command
+ } PRMTR; // parameters
+} CMD, *PCMD;
+
+// xmt buffer descriptor
+
+typedef struct TBD {
+ USHORT TbdCount; // End Of Frame(EOF), Actual count(ACTCOUNT)
+ USHORT TbdNxtOfst; // offset of next TBD
+ USHORT TbdBuff; // tbd address
+ USHORT TbdBuffBase; // tbd address
+} TBD, *PTBD;
+
+// rcv buffer descriptor
+
+typedef struct RBD {
+ USHORT RbdStatus; // EOF, ACTCOUNT feild valid (F), ACTCOUNT
+ USHORT RbdNxtOfst; // offset of next RBD
+ USHORT RbdBuff; // rbd address
+ USHORT RbdBuffBase; // rbd address
+ USHORT RbdSize; // EL, size of the buffer
+} RBD, *PRBD;
+
+// frame descriptor
+
+typedef struct _FD {
+ USHORT FdStatus; // C, B, OK, S6-S11
+ USHORT FdCmd; // End of List (EL), Suspend (S)
+ USHORT FdNxtOfst; // offset of next FD
+ USHORT FdRbdOfst; // offset of the RBD
+ NETADDR FdDest; // destination address
+ NETADDR FdSrc; // source address
+ USHORT FdLength; // length of the received frame
+} FD, *PFD;
+
+// dump buffer definition
+
+typedef struct DUMPBUF {
+USHORT
+ Dmpfifobyte, // same as in conf. cmd, except for
+ Dmpaddmode, // bit 6 of fifobyte
+ Dmppridata,
+ Dmpslot,
+ Dmphware,
+ Dmpminlen,
+ Dmpiar10, // Individual address bytes
+ Dmpiar32,
+ Dmpiar54,
+ Dmplaststat, // status word of last cmd
+ Dmptxcr10, // xmit CRC generator
+ Dmptxcr32,
+ Dmprxcr10, // rcv CRC generator
+ Dmprxcr32,
+ Dmptmp10, // Internal temporaries
+ Dmptmp32,
+ Dmptmp54,
+ Dmprsr, // receive status register
+ Dmphash10, // Hash table
+ Dmphash32,
+ Dmphash54,
+ Dmphash76,
+ Dmplasttdr, // Status of last TDR command
+ Dmpfill [8], // Mostly 0 (!)
+ Dmpaddrlen,
+ Dmpnrbsz, // Size of next receive buffer
+ Dmpnrbhi, // High byte of next RB address
+ Dmpnrblo, // Lo byte of " " "
+ Dmpcrbsz, // # of bytes in last buff used
+ Dmplarbd, // Look ahead buff. des. (N+2)
+ Dmpnrbd, // Next RBD address
+ Dmpcrbd, // Current (last filled) rbd
+ Dmpcrbebc, // current rb empty byte count
+ Dmpnfdaddr, // next + 1 free frame descriptor
+ Dmpcfdaddr, // next free frame descriptor
+ Dmptmp,
+ Dmpntbcnt, // last tb cnt of completed cmd
+ Dmpdbufaddr, // Address of buffer in dump cmd
+ Dmpntbaddr, // Next Xmit buff address
+ Dmpltbdaddr, // next xmit buff descriptor
+ Dmpntbdaddr, // current xmit buff descriptor
+ Dmptmp1,
+ Dmpncbaddr, // next command block address
+ Dmpccbaddr, // current cmd blk address
+ Dmptmp2,
+ Dmpscbaddr, // Address of SCB
+ Dmpfill2 [6],
+ Dmpfifolim,
+ Dmpfill3 [3],
+ Dmprusreq,
+ Dmpcusreq,
+ Dmprus,
+ Dmpfill4 [6],
+ Dmpbuffhi, // High address of dump buffer
+ Dmpbufflo, // Lo address of dump buffer
+ Dmpdmabc, // Receive dma byte count
+ Dmpbrbuff, // Base + buffer
+ Dmprdmahi, // receive dma address
+ Dmprdmalo, // " " "
+ Dmpfill5 [7];
+} DUMPBUF, *PDUMPBUF;
+
+
+
+// BOARD SPECIFIC #DEFINES
+
+#define OFFSETNORMMODE 0x3000 // 0=esi loopback, 1 normal data xfer
+#define OFFSETCHANATT 0x3002 // 0=clear 586 channel attention, 1 = set
+#define OFFSETRESET 0x3004 // 0=clear 586 h/w reset, 1=set
+#define OFFSETINTENAB 0x3006 // 0=disable board interrupts 1=enable
+#define OFFSET16BXFER 0x3008 // 0=8bit xfer, 1=16bit xfer (for at)
+#define OFFSETSYSTYPE 0x300a // 0=pc or pc/xt, 1=at
+#define OFFSETINTSTAT 0x300c // 0=board's interrupt active, 1=inactive
+#define OFFSETADDRPROM 0x2000 // first byte of on-board ethernet id
+
+#define EXTENDEDADDRESS 0x20000 // used when board addr is above 1 meg
+#define OFFSETSCP 0x7ff6 // 586's scp points to the iscp
+#define OFFSETISCP 0x7fee // this points to the system control block
+#define OFFSETSCB 0x7fde // points to rcv frame and command unit areas
+#define OFFSETRU 0x4000 // the RAM for frame descriptors, receive
+ // buffer descriptors & rcv buffers is fixed at
+ // 0x4000 to 0x7800 on the half-card
+#define OFFSETRBD 0x4228 // rbd+rbuf must start on 32 bit boundry
+#define OFFSETCU 0x7814 // RAM offset for CBLs, TBDs, etc
+ // xmt area is from 0x7814 to 0x7f00
+ // from 0x7f01 to 0x7fff is scp, iscp, scb
+#define OFFSETTBD 0x7914 // allows 256 bytes for command block
+#define OFFSETTBUF 0x7924 // start of user data to send
+#define NFD 25 // 856 frame descriptor
+#define NRBD 25 // 586 rcv buffer descriptor
+
+#define RCVBUFSIZE 532 // 532 * 2 = max size used by tcp
+#define PC586_SIZE_OF_RECEIVE_BUFFERS 532 // 532 * 2 = max size used by tcp
+
+#define DLDEAD 0xffff // suppliments 82586.h datalink states
+
+#define CMD0 0 // used on 586 half-card command registers
+#define CMD1 0xffff // the mate of the above
+
+
+
+// all accesses to RAM on the pc586 board M*U*S*T be 16 bit accesses.
+// therefore the following struct is used to pack and unpack unsigned short
+
+typedef struct { union { UCHAR a[2];
+ USHORT b; } c; } PACKUSHORTT;
+
+
+typedef struct { union { UCHAR AChar[4];
+ ULONG ALong; } u; } PACKLONGT;
+
+
+
+//
+// Following def'ns are for PC586 set at IRQ = 5:
+// #define PC586_VECTOR 05
+// #define PC586_IRQL 30
+
+//
+// Following allow PC586 to run at whatever IRQL and memory you set below.
+// PC586 at IRQ 10 and memory at 0xC800 in current configuration.
+// (nt\public\spec\nt386\intmgr.txt for details of IRQL/IRQ/VECTOR assignments)
+//
+
+#define PC586_DEFAULT_INTERRUPT_VECTOR ((CCHAR)10)
+#define PC586_DEFAULT_INTERRUPT_IRQL ((CCHAR)25)
+#define PC586_DEFAULT_STATIC_RAM 0xC8000
+
+//
+//ZZZ Get from configuration file.
+//
+#define MAX_ADAPTERS ((UINT)4)
+#define PC586_LARGE_BUFFER_SIZE 1514
+