diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/ndis/pc586e/pc586hrd.h | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'private/ntos/ndis/pc586e/pc586hrd.h')
-rw-r--r-- | private/ntos/ndis/pc586e/pc586hrd.h | 438 |
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 + |