Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

562 lines
22 KiB

#include "packon.h"
typedef struct _X86ADDRESS {
union {
ULONG dword;
struct {
USHORT Offset;
USHORT Segment;
} SegOff;
} u;
} X86ADDRESS;
typedef struct tagServiceStatus {
USHORT SST_TableSize;
ULONG SST_LastDiagnosticsTime;
ULONG SST_Mac_Status;
USHORT SST_CurrentPacketFilter;
ULONG SST_MediaSpecificStatisticsPtr;
ULONG SST_LastClearStatisticsTime;
ULONG SST_TotalFramesReceived ;
ULONG SST_FramesWithCRCError ;
ULONG SST_TotalBytesReceived ;
ULONG SST_FramesDiscarded_NoBufferSpace ;
ULONG SST_MulticastFramesReceived ;
ULONG SST_BroadcastFramesReceived ;
ULONG SST_FramesReceivedWithErrors ;
ULONG SST_FramesExceedingMaximumSize ;
ULONG SST_FramesSmallerThanMinimumSize ;
ULONG SST_MulticastBytesReceived ;
ULONG SST_BroadcastBytesReceived ;
ULONG SST_FramesDiscarded_HardwareError ;
ULONG SST_TotalFramesTransmitted ;
ULONG SST_TotalBytesTransmitted ;
ULONG SST_MulticastFramesTransmitted ;
ULONG SST_BroadcastFramesTransmitted ;
ULONG SST_BroadcastBytesTransmitted ;
ULONG SST_MulticastBytesTransmitted ;
ULONG SST_FramesNotTransmitted_Timeout ;
ULONG SST_FramesNotTransmitted_HardwareError ;
ULONG res[3];
} ServiceStatus;
typedef struct tagMediaStatistics {
USHORT MST_TableSize ;
USHORT MST_StructureVersionLevel ;
ULONG MST_FramesWithAlignmentError ;
ULONG MST_ReceiveErrorFailureMask ;
ULONG MST_FramesWithOverrunError ;
ULONG MST_FramesTransmittedAfterAnyCollisions;
ULONG MST_FramesTransmittedAfterDeferring ;
ULONG MST_FramesNotTransmitted_MaxCollisions ;
ULONG MST_TotalCollisions ;
ULONG MST_LateCollisions ;
ULONG MST_FramesTransmittedAfterJustOneCollision ;
ULONG MST_FramesTransmittedAfterMultipleCollisions ;
ULONG MST_FramesTransmitted_CD_Heartbeat ;
ULONG MST_JabberErrors ;
ULONG MST_CarrierSenseLostDuringTransmission ;
ULONG MST_TransmitErrorFailureMask ;
ULONG MST_NumberOfUnderruns ;
} MediaStatistics;
typedef volatile struct tagNIUData {
char szSST[16];
ServiceStatus sst;
char szMST[16];
MediaStatistics mst;
// d0-d7
char szRFD[6];
USHORT RFD_Start;
// d8-df
char szRBD[6];
USHORT RBD_Start;
// e0-ef
UCHAR InterruptDisabled ;
UCHAR InterruptActive ;
UCHAR WorkForHost ;
UCHAR HostWantsInterrupt ;
USHORT HostQueuedTransmits ;
USHORT RU_Start_Count ;
USHORT res ;
USHORT Xmts_InProgress ;
USHORT CU_Starts ;
USHORT Xmt_Completes ;
// [ RAM locations 00F0-00FF ]
ULONG Up_Time ;
USHORT missing_EOFs ;
USHORT Transmitter_Hangs ;
USHORT Receiver_Hangs ;
USHORT reset_anomaly_count ;
USHORT res2[2] ;
// [ RAM locations 0100-010F ]
USHORT SCB[8];
//SCB LABEL WORD ; The 82586's "System Control Block".
// dw 0 ; STAT, CUS, and RUS.
// dw 0 ; ACK, CUC, RESET, and RUC.
// dw 0FFFFh ; Command Block List.
// dw 0FFFFh ; Receive Frame Area.
// dw 0 ; Cyclic Redundancy Check errors.
// dw 0 ; Alignment errors.
// dw 0 ; No Receive Resources errors.
// dw 0 ; Receive Unit Bus Overrun errors.
//; [ RAM locations 0110-011F ]
UCHAR dummy_RDB [10];
//dummy_RBD dw 0 ; EOF, F, and Actual Count.
// dw 0FFFFh ; Pointer to next RBD.
// dw dummy_buffer-SegmentBase ; 16 LSBs of buffer
// ; address.
// db 0 ; 4 MSBs of buffer address.
// db 0 ; Unused.
// dw 8002h ; EOL and buffer size.
USHORT dummy_buffer [6];
//dummy_buffr dw 0 ; The 2-byte dummy buffer.
// dw 2 dup (0) ; [Unused.]
//
// [ RAM locations 0120-7FFF (or 3FFF) ]
UCHAR Start_Here[];
} LOWNIUDATA, *PLOWNIUDATA;
typedef struct _SimpleRingBufferDesc {
UCHAR SRB_WritePtr[2];
UCHAR SRB_ReadPtr[2];
UCHAR SRB_ObjectMap;
UCHAR pad[11];
USHORT SRB_Offsets[256];
} SimpleRingBufferDescriptor;
typedef volatile struct tagUpNIUData {
// [ RAM locations 8000-800F ]
UCHAR szFreeTBDs[14];
USHORT FreeTBDs_RingBuffer;
// [ RAM locations 8010-801F ]
UCHAR szXmitFrames[14];
USHORT XmtFrames_RingBuffer;
// [ RAM locations 8020-802F ]
UCHAR szRcvFrames[14];
USHORT RcvFrames_RingBuffer;
// [ RAM locations 8030-803F ]
UCHAR szReturnedRBD[14];
USHORT ReturnedRBDs_RingBuffer;
// [ RAM locations 8040-804F ]
UCHAR szRequests[14];
USHORT Request_RingBuffer;
// [ RAM locations 8050-805F ]
UCHAR szResult[14];
USHORT Result_RingBuffer;
// [ RAM locations 8060-826F ]
SimpleRingBufferDescriptor RcvFrames;
//RcvFrames SimpleRingBufferDescriptor <>
// dw 256 dup (0)
// [ RAM locations 8270-847F ]
SimpleRingBufferDescriptor ReturnedRBDs;
//ReturnedRBDs SimpleRingBufferDescriptor <>
// dw 256 dup (0)
// [ RAM locations 8480-868F ]
SimpleRingBufferDescriptor FreeTDBs;
//FreeTBDs SimpleRingBufferDescriptor <>
// dw 256 dup (0)
// [ RAM locations 8690-889F ]
SimpleRingBufferDescriptor XmtFrames;
//XmtFrames SimpleRingBufferDescriptor <>
// dw 256 dup (0)
// [ RAM locations 88A0-8xxx ]
USHORT System_State ;
USHORT System_Modes ;
USHORT Last_Timer_0_Count ;
USHORT RU_Start_Timeouts ;
USHORT _82586_CA_Address ;
USHORT _82586_RESET_Address ;
USHORT HostInterruptPort ;
USHORT AdapterControlPort ;
USHORT IRQ_Select_and_LED_Port ;
USHORT DeadmanTimerPort ;
USHORT HostInterruptLevel ;
USHORT HostWindowMask ;
USHORT NOT_HostWindowMask ;
USHORT MinimumHostWindowSize ;
ULONG HostWindowSize ;
UCHAR HostOpSys ;
UCHAR NIU_AdapterType ;
USHORT check_RU_counters_delay ;
USHORT Timeout_TCB ;
USHORT Xmt_Timestamp ;
USHORT Xmt_Timeout ;
USHORT initial_RcvFrames_pointer ;
USHORT Rcv_Timestamp ;
USHORT Rcv_Timeout ;
USHORT Diagnostic_Hangs ;
USHORT Diagnostic_Timestamp ;
USHORT Diagnostic_Timeout ;
USHORT Loopback_1st_RBD ;
USHORT Loopback_Frame_Length ;
USHORT Loopback_Frame_Failures ;
ULONG Loopback_Frame_Count ;
USHORT Max_Multicast_Addresses ;
USHORT Max_Multicast_Count ;
USHORT Multicast_Padding ;
USHORT Max_General_Requests ;
USHORT Code_and_Xmt_Segment ;
USHORT RcvBufferSeg ;
USHORT XmtBufferSeg ;
USHORT Rcv_Buffer_Size ;
USHORT Number_of_Rcv_Buffers ;
USHORT Xmt_Buffer_Size ;
USHORT Number_of_Xmt_Buffers ;
USHORT Rcv_Buffer_Start ;
USHORT TCB_Start ;
USHORT TBD_Start ;
USHORT Xmt_Buffer_Start ;
USHORT Room_Left_in_1st_32K ;
UCHAR Map_Table[32] ;
USHORT Max_Receive_Size ;
USHORT Min_Receive_Size ;
USHORT Max_Collisions ;
UCHAR user_FIFO_Threshold ;
UCHAR user_PreambleLength ;
UCHAR user_CRC_Polynomial ;
UCHAR user_InterframeSpacing ;
USHORT user_SlotTime ;
UCHAR user_MaxRetries ;
UCHAR user_LinearPriority ;
UCHAR user_ACR_Priority ;
UCHAR user_BackoffMethod ;
UCHAR user_CRS_Filter ;
UCHAR user_CDT_Filter ;
UCHAR user_Min_Frame_Length ;
UCHAR LED_Off_12Volts_DoParityCheck ;
UCHAR LED_On_12Volts_DoParityCheck ;
UCHAR LED_Off_and_IRQ_Select ;
UCHAR LED_On_and_IRQ_Select ;
UCHAR LED_Status; // added to blink LED. brianlie 12/23/93
// EVEN
UCHAR pad00[2];
USHORT Next_Unused_Location_in_1st_32K ;
USHORT Next_Unused_Location_in_2nd_32K ;
USHORT RFD_Queue[2] ; //head=0, tail=1
USHORT Free_RDB_Queue[2] ;
USHORT TCB_Queue[2] ;
X86ADDRESS Default_Address_Base ;
X86ADDRESS SCP_Base ;
USHORT Last_CRCERRS ;
USHORT Last_ALNERRS ;
USHORT Last_RSCERRS ;
USHORT Last_OVRNERRS ;
// ALIGN 16
UCHAR pad01[22];
UCHAR ISCP[8];
//ISCP LABEL WORD ; The 82586's "Intermediate System
// ; Configuration Pointer".
// db 0 ; Initialization-in-progress flag.
// db 0 ; [Unused.]
// dw 0 ; Offset of SCB from SCB Base.
// dw 0 ; Low order bits of SCB base address.
// db 0 ; High order bits of SCB base address.
// db 0 ; [Unused.]
// ALIGN 16
UCHAR pad02[24];
UCHAR szStack[16];
USHORT Stack_Area[64];
// ;************************************************
// ;* Initial Entry Point code *
// ;************************************************
UCHAR Startup_Code[8];
USHORT Startup_Code_CS_fixup;
//Startup_Code LABEL BYTE
// dw 0 ; MOV AX,CS ; These instructions
// dw 0 ; MOV DS,AX ; are put here during
// db 0 ; JMP ; initialization.
// dw 0 ; 0000
//Startup_Code_CS_fixup LABEL WORD
// dw 0 ; NIU Code Segment
//;;;;; debugging
// EVEN
UCHAR pad03[2];
//LogStart EQU 0A000h
//LogEnd EQU 0A000h+(16*1024)
USHORT LogFlg;
USHORT LopPtr;
//;;;;; debugging
// ALIGN 16
// ;************************************************
// ;* 82586 Runtime Diagnostic Commands *
// ;************************************************
//; This is the list of commands we give to the 82586 when we perform
//; the "InitiateDiagnostics" request from the Protocol driver.
//RuntimeDiagnosticCommands LABEL WORD
USHORT NOP_command[3];
//NOP_command LABEL WORD
// dw 0 ; C, B, and other status bits.
// dw 0000h ; CMD = NOP.
// dw DIAGNOSE_command-SegmentBase
USHORT DIAGNOSE_Command[3];
//DIAGNOSE_command LABEL WORD
// dw 0 ; C, B, and other status bits.
// dw 0007h ; CMD = DIAGNOSE.
// dw TDR_command-SegmentBase
USHORT TDR_command[3];
//TDR_command LABEL WORD
// dw 0 ; C, B, and other status bits.
// dw 8005h ; EOL = 1 and CMD = TDR.
// dw 0000h ; This is the last command.
USHORT TDR_result;
//; Bits in the high byte of "TDR_result":
#define TDR_LinkOK 80h
#define TDR_TransceiverCableProblem 40h
#define TDR_Open 20h
#define TDR_Short 10h
// ALIGN 16
UCHAR pad04[28];
// ;************************************************
// ;* 82586 Initialization Commands *
// ;************************************************
//; This is the list of commands we give to the 82586 when we first
//; start it, when we restart it after we have detected that it is hung,
//; and when we restart it in performing certain of the "GeneralRequest"s.
//; There are 4 commands, linked together through their "CB_Link" fields.
//; The first and third commands are "Configure" commands, and the second
//; one is an "Individual Address Set Up" command. The two "Configure"
//; commands specify the same configuration parameters, except that the first
//; one turns on "internal loopback" mode and the last one turns it off.
//; We put the 82586 in "internal loopback" mode while it processes the
//; "Individual Address Set Up" command because it may otherwise not process
//; it correctly. The fourth command is a "Multicast Address Set Up" command.
//; NOTE that these command blocks get initialized at run time (by the
//; "_82586_Initialization" routine). The initial values in the following
//; declarations are effectively just comments.
//_82586_Initialization_Commands LABEL WORD
USHORT Configure_with_Loopback[9];
USHORT individual_Address[3];
UCHAR Our_Address[6];
USHORT Operation_Configure[4];
USHORT Save_Bad_Frames[3];
USHORT Promiscuous_ect[2];
USHORT Multicast_Setup[3];
USHORT Multicast_Byte_Count;
CHAR Dynamically_Allocated_Area[][6];
//Configure_with_Loopback LABEL WORD
// dw 0 ; C, B, and other status bits.
// dw 0002h ; CMD = Configure.
// dw Individual_Address-SegmentBase
// db 12 ; Byte count of this block.
// db 15 ; FIFO limit = 15.
// db 40h ; Don't save bad frames; External READY sync.
// db 40h+2Eh ; Internal loopback; 8-byte preamble; Address
// ; and Type in data buffer; 6 address bytes.
// db 0 ; IEEE 802.3 exponential backoff method.
// db 96 ; Interframe spacing = 96.
// dw 0F200h ; 15 retries on collisions; Slot time = 512.
// db 0 ; Non-promiscuous; Broadcasts accepted.
// db 0 ; Externally generated Carrier Sense (CRS) and
// ; Collision Detect (CDT); CRS filter and CDT
// ; filter = 0.
// dw 12 ; Minimum frame length.
//
//Individual_Address LABEL WORD
// dw 0 ; C, B, and other status bits.
// dw 0001h ; CMD = Individual Address Set Up.
// dw Operational_Configure-SegmentBase
//Our_Address LABEL BYTE
// dw 3 dup (0) ; The address is filled in at initialization.
//
//Operational_Configure LABEL WORD
// dw 0 ; C, B, and other status bits.
// dw 0002h ; CMD = Configure.
// dw Multicast_Setup-SegmentBase
// db 12 ; Byte count of this block.
// db 15 ; FIFO limit = 15.
//Save_Bad_Frames_etc LABEL BYTE
// db 40h ; Don't save bad frames; External READY sync.
// db 2Eh ; 8-byte preamble; Address and Type in data
// ; buffer; 6 address bytes.
// db 0 ; IEEE 802.3 exponential backoff method.
// db 96 ; Interframe spacing = 96.
// dw 0F200h ; 15 retries on collisions; Slot time = 512.
//Promiscuous_etc LABEL BYTE
// db 08h ; Non-promiscuous; Broadcasts accepted;
// ; TONO-CRS.
// db 0 ; Externally generated Carrier Sense (CRS) and
// ; Collision Detect (CDT); CRS filter and CDT
// ; filter = 0.
// dw 12 ; Minimum frame length.
//
//Multicast_Setup LABEL WORD
// dw 0 ; C, B, and other status bits.
// dw 8003h ; End-of-List=1; CMD=Multicast Address Setup.
// dw 0 ; [This is the last initialization command.]
// dw 0 ; This 0 means disable multicast addresses.
//
//Dynamically_Allocated_Area LABEL BYTE
//
//; The RAM from here up is allocated by "Initialize_Data". It is used for
//; (a) the Multicast-Setup Command Block's list of multicast addresses;
//; (b) the RFDs (Receive Frame Descriptors), if they won't fit in the
//; first 32K;
//; (c) the TCBs (Transmit Command Blocks);
//; (d) the TBDs (Transmit Buffer Descriptors);
//; (e) the "Request" ring buffer; and
//; (f) the "Result" ring buffer;
//; NOTE that the Multicast-Setup Command Block's header must immediately
//; precede this area, and the space for the list of multicast addresses must
//; be the first thing allocated, because the list must be contiguous with the
//; header.
//
//
//;NIU_DataSegment ENDS
//
} HIGHNIUDATA, *PHIGHNIUDATA;
typedef volatile struct _NIU_CONTROL_AREA {
USHORT us_POD_SCB[8]; // xFF00 - 586 SCB (if Ethernet).
UCHAR uc_Aux_port; // xFF10 - Aux Control port value last output.
UCHAR uc_Aux_reserved;
UCHAR uc_ADP_port; // xFF12 - Adapter Control port value.
UCHAR uc_ADP_reserved;
UCHAR uc_UnusedInfo1[108]; // uninteresting stuff.
USHORT us_pod_status; // xFF80 - current Power-On Diag (POD) status.
USHORT us_sif_test; // xFF82 - request to test SIF chip.
UCHAR uc_UnusedInfo2[12];
USHORT us_HWstatus; // xFF90 - status results of POD.
USHORT us_HWcommand; // xFF92 - command from PC to PROM.
USHORT us_HWresult1; // xFF94 - results of last command from PC.
USHORT us_HWresult2; // xFF96 - more results of last command.
USHORT us_HWparameter1; // xFF98 - command parameter 1.
USHORT us_HWparameter2; // xFF9A - command parameter 2.
UCHAR uc_rsrvd_for_PCuse[36];
USHORT us_DI_value; // xFFC0 - value of PROM's DI.
USHORT us_SI_value; // xFFC2 - value of PROM's SI.
USHORT us_BP_value; // xFFC4 - value of PROM's BP.
UCHAR uc_unknown1[2]; // xFFC6 - reserved.
USHORT us_BX_value; // xFFC8 - value of PROM's BX.
USHORT us_DX_value; // xFFCA - value of PROM's DX.
USHORT us_CX_value; // xFFCC - value of PROM's CX.
USHORT us_AX_value; // xFFCE - value of PROM's AX.
USHORT us_ES_value; // xFFD0 - value of PROM's ES.
USHORT us_DS_value; // xFFD2 - value of PROM's DS.
USHORT us_SP_value; // xFFD4 - value of PROM's SP.
USHORT us_SS_value; // xFFD6 - value of PROM's SS.
USHORT us_IP_value; // xFFD8 - value of PROM's IP.
USHORT us_CS_value; // xFFDA - value of PROM's CS.
USHORT us_Flags_value; // xFFDC - value of PROM's Flags.
UCHAR uc_interrupt_type; // xFFDE - Interrupt type (?).
UCHAR uc_reserved1;
UCHAR uc_board_rev; // xFFE0 - board revision level.
UCHAR uc_board_sub_rev; // xFFE1 - board sub-revision level.
UCHAR uc_banks_of_RAM; // xFFE2 - number of 64k banks of RAM.
UCHAR uc_host_type; // xFFE3 - type of host.
UCHAR uc_media_type; // xFFE4 - type of media interface:
UCHAR uc_product_type; // xFFE5 - type of product.
USHORT us_clock_speed; // xFFE6 - NIU CPU clock rate.
UCHAR uc_POD_ISCP[8]; // xFFE8 - 586 ISCP (if Ethernet).
UCHAR uc_node_id[6]; // xFFF0 - the NIU's 48-bit node address.
USHORT us_POD_SCP; // xFFF6 - 586 SCP (if Ethernet).
UCHAR uc_hdlc_flag; // xFFF8 - HDLC flag (if Ethernet).
} NIU_CONTROL_AREA, *PNIU_CONTROL_AREA;
#include "packoff.h"