00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#ifndef _EISA_
00023
#define _EISA_
00024
00025
00026
00027
00028
00029
00030
00031 typedef struct _DMA_PAGE{
00032 UCHAR
Reserved1;
00033 UCHAR
Channel2;
00034 UCHAR
Channel3;
00035 UCHAR
Channel1;
00036 UCHAR
Reserved2[3];
00037 UCHAR
Channel0;
00038 UCHAR
Reserved3;
00039 UCHAR
Channel6;
00040 UCHAR
Channel7;
00041 UCHAR
Channel5;
00042 UCHAR
Reserved4[3];
00043 UCHAR
RefreshPage;
00044 }
DMA_PAGE, *
PDMA_PAGE;
00045
00046
00047
00048
00049
00050 typedef struct _DMA_CHANNEL_STOP {
00051 UCHAR
ChannelLsb;
00052 UCHAR
ChannelMsb;
00053 UCHAR
ChannelHsb;
00054 UCHAR
Reserved;
00055 }
DMA_CHANNEL_STOP, *
PDMA_CHANNEL_STOP;
00056
00057
00058
00059
00060
00061 typedef struct _DMA1_ADDRESS_COUNT {
00062 UCHAR
DmaBaseAddress;
00063 UCHAR
DmaBaseCount;
00064 }
DMA1_ADDRESS_COUNT, *
PDMA1_ADDRESS_COUNT;
00065
00066
00067
00068
00069
00070 typedef struct _DMA2_ADDRESS_COUNT {
00071 UCHAR
DmaBaseAddress;
00072 UCHAR
Reserved1;
00073 UCHAR
DmaBaseCount;
00074 UCHAR
Reserved2;
00075 }
DMA2_ADDRESS_COUNT, *
PDMA2_ADDRESS_COUNT;
00076
00077
00078
00079
00080
00081 typedef struct _DMA1_CONTROL {
00082
DMA1_ADDRESS_COUNT DmaAddressCount[4];
00083 UCHAR
DmaStatus;
00084 UCHAR
DmaRequest;
00085 UCHAR
SingleMask;
00086 UCHAR
Mode;
00087 UCHAR
ClearBytePointer;
00088 UCHAR
MasterClear;
00089 UCHAR
ClearMask;
00090 UCHAR
AllMask;
00091 }
DMA1_CONTROL, *
PDMA1_CONTROL;
00092
00093
00094
00095
00096
00097 typedef struct _DMA2_CONTROL {
00098
DMA2_ADDRESS_COUNT DmaAddressCount[4];
00099 UCHAR
DmaStatus;
00100 UCHAR
Reserved1;
00101 UCHAR
DmaRequest;
00102 UCHAR
Reserved2;
00103 UCHAR
SingleMask;
00104 UCHAR
Reserved3;
00105 UCHAR
Mode;
00106 UCHAR
Reserved4;
00107 UCHAR
ClearBytePointer;
00108 UCHAR
Reserved5;
00109 UCHAR
MasterClear;
00110 UCHAR
Reserved6;
00111 UCHAR
ClearMask;
00112 UCHAR
Reserved7;
00113 UCHAR
AllMask;
00114 UCHAR
Reserved8;
00115 }
DMA2_CONTROL, *
PDMA2_CONTROL;
00116
00117
00118
00119
00120
00121 typedef struct _TIMER_CONTROL {
00122 UCHAR
BcdMode : 1;
00123 UCHAR
Mode : 3;
00124 UCHAR
SelectByte : 2;
00125 UCHAR
SelectCounter : 2;
00126 }
TIMER_CONTROL, *
PTIMER_CONTROL;
00127
00128
00129
00130
00131
00132 typedef struct _TIMER_STATUS {
00133 UCHAR
BcdMode : 1;
00134 UCHAR
Mode : 3;
00135 UCHAR
SelectByte : 2;
00136 UCHAR
CrContentsMoved : 1;
00137 UCHAR
OutPin : 1;
00138 }
TIMER_STATUS, *
PTIMER_STATUS;
00139
00140
00141
00142
00143
00144 #define TM_SIGNAL_END_OF_COUNT 0
00145 #define TM_ONE_SHOT 1
00146 #define TM_RATE_GENERATOR 2
00147 #define TM_SQUARE_WAVE 3
00148 #define TM_SOFTWARE_STROBE 4
00149 #define TM_HARDWARE_STROBE 5
00150
00151
00152
00153
00154
00155 #define SB_COUNTER_LATCH 0
00156 #define SB_LSB_BYTE 1
00157 #define SB_MSB_BYTE 2
00158 #define SB_LSB_THEN_MSB 3
00159
00160
00161
00162
00163
00164 #define SELECT_COUNTER_0 0
00165 #define SELECT_COUNTER_1 1
00166 #define SELECT_COUNTER_2 2
00167 #define SELECT_READ_BACK 3
00168
00169
00170
00171
00172
00173 #define TIMER_CLOCK_IN 1193167 // 1.193Mhz
00174
00175
00176
00177
00178
00179 typedef struct _NMI_STATUS {
00180 UCHAR
SpeakerGate : 1;
00181 UCHAR
SpeakerData : 1;
00182 UCHAR
DisableEisaParity : 1;
00183 UCHAR
DisableNmi : 1;
00184 UCHAR
RefreshToggle : 1;
00185 UCHAR
SpeakerTimer : 1;
00186 UCHAR
IochkNmi : 1;
00187 UCHAR
ParityNmi : 1;
00188 }
NMI_STATUS, *
PNMI_STATUS;
00189
00190
00191
00192
00193
00194 typedef struct _NMI_ENABLE {
00195 UCHAR
RtClockAddress : 7;
00196 UCHAR
NmiDisable : 1;
00197 }
NMI_ENABLE, *
PNMI_ENABLE;
00198
00199
00200
00201
00202 typedef struct _NMI_EXTENDED_CONTROL {
00203 UCHAR
BusReset : 1;
00204 UCHAR
EnableNmiPort : 1;
00205 UCHAR
EnableFailSafeNmi : 1;
00206 UCHAR
EnableBusMasterTimeout : 1;
00207 UCHAR
Reserved1 : 1;
00208 UCHAR
PendingPortNmi : 1;
00209 UCHAR
PendingBusMasterTimeout : 1;
00210 UCHAR
PendingFailSafeNmi : 1;
00211 }
NMI_EXTENDED_CONTROL, *
PNMI_EXTENDED_CONTROL;
00212
00213
00214
00215
00216
00217 typedef struct _EISA_CONTROL {
00218
DMA1_CONTROL Dma1BasePort;
00219 UCHAR
Reserved0[16];
00220 UCHAR
Interrupt1ControlPort0;
00221 UCHAR
Interrupt1ControlPort1;
00222 UCHAR
Reserved1[32 - 2];
00223 UCHAR
Timer1;
00224 UCHAR
RefreshRequest;
00225 UCHAR
SpeakerTone;
00226 UCHAR
CommandMode1;
00227 UCHAR
Reserved17[4];
00228 UCHAR
Timer2;
00229 UCHAR
Reserved13;
00230 UCHAR
CpuSpeedControl;
00231 UCHAR
CommandMode2;
00232 UCHAR
Reserved14[21];
00233 UCHAR
NmiStatus;
00234 UCHAR
Reserved15[14];
00235 UCHAR
NmiEnable;
00236 UCHAR
Reserved16[15];
00237
DMA_PAGE DmaPageLowPort;
00238 UCHAR
Reserved2[16];
00239 UCHAR
Interrupt2ControlPort0;
00240 UCHAR
Interrupt2ControlPort1;
00241 UCHAR
Reserved3[32-2];
00242
DMA2_CONTROL Dma2BasePort;
00243 UCHAR
Reserved4[0x320];
00244 UCHAR
Dma1CountHigh[8];
00245 UCHAR
Reserved5[2];
00246 UCHAR
Dma1ChainingInterrupt;
00247 UCHAR
Dma1ExtendedModePort;
00248 UCHAR
MasterControlPort;
00249 UCHAR
SteppingLevelRegister;
00250 UCHAR
IspTest1;
00251 UCHAR
IspTest2;
00252 UCHAR
Reserved6[81];
00253 UCHAR
ExtendedNmiResetControl;
00254 UCHAR
NmiIoInterruptPort;
00255 UCHAR
Reserved7;
00256 UCHAR
LastMaster;
00257 UCHAR
Reserved8[27];
00258 DMA_PAGE DmaPageHighPort;
00259 UCHAR
Reserved12[48];
00260 UCHAR
Dma2HighCount[16];
00261 UCHAR
Interrupt1EdgeLevel;
00262 UCHAR
Interrupt2EdgeLevel;
00263 UCHAR
Reserved9[2];
00264 UCHAR
Dma2ChainingInterrupt;
00265 UCHAR
Reserved10;
00266 UCHAR
Dma2ExtendedModePort;
00267 UCHAR
Reserved11[9];
00268 DMA_CHANNEL_STOP DmaChannelStop[8];
00269 }
EISA_CONTROL, *
PEISA_CONTROL;
00270
00271
00272
00273
00274
00275 typedef struct _INITIALIZATION_COMMAND_1 {
00276 UCHAR
Icw4Needed : 1;
00277 UCHAR
CascadeMode : 1;
00278 UCHAR
Unused1 : 2;
00279 UCHAR
InitializationFlag : 1;
00280 UCHAR
Unused2 : 3;
00281 }
INITIALIZATION_COMMAND_1, *
PINITIALIZATION_COMMAND_1;
00282
00283
00284
00285
00286
00287 typedef struct _INITIALIZATION_COMMAND_4 {
00288 UCHAR
I80x86Mode : 1;
00289 UCHAR
AutoEndOfInterruptMode : 1;
00290 UCHAR
Unused1 : 2;
00291 UCHAR
SpecialFullyNested : 1;
00292 UCHAR
Unused2 : 3;
00293 }
INITIALIZATION_COMMAND_4, *
PINITIALIZATION_COMMAND_4;
00294
00295
00296
00297
00298
00299
00300 #define NONSPECIFIC_END_OF_INTERRUPT 0x20
00301 #define SPECIFIC_END_OF_INTERRUPT 0x60
00302
00303
00304
00305
00306
00307 #define SLAVE_IRQL_LEVEL 2
00308
00309
00310
00311
00312
00313 #define EISA_EXTERNAL_INTERRUPTS_1 0xf8
00314 #define EISA_EXTERNAL_INTERRUPTS_2 0xbe
00315
00316
00317
00318
00319
00320 typedef struct _DMA_EISA_MODE {
00321 UCHAR
Channel : 2;
00322 UCHAR
TransferType : 2;
00323 UCHAR
AutoInitialize : 1;
00324 UCHAR
AddressDecrement : 1;
00325 UCHAR
RequestMode : 2;
00326 }
DMA_EISA_MODE, *
PDMA_EISA_MODE;
00327
00328
00329
00330
00331
00332 #define VERIFY_TRANSFER 0x00
00333 #define READ_TRANSFER 0x01 // Read from the device.
00334 #define WRITE_TRANSFER 0x02 // Write to the device.
00335
00336
00337
00338
00339
00340 #define DEMAND_REQUEST_MODE 0x00
00341 #define SINGLE_REQUEST_MODE 0x01
00342 #define BLOCK_REQUEST_MODE 0x02
00343 #define CASCADE_REQUEST_MODE 0x03
00344
00345
00346
00347
00348
00349 typedef struct _DMA_EXTENDED_MODE {
00350 UCHAR
ChannelNumber : 2;
00351 UCHAR
TransferSize : 2;
00352 UCHAR
TimingMode : 2;
00353 UCHAR
EndOfPacketInput : 1;
00354 UCHAR
StopRegisterEnabled : 1;
00355 }
DMA_EXTENDED_MODE, *
PDMA_EXTENDED_MODE;
00356
00357
00358
00359
00360
00361 #define BY_BYTE_8_BITS 0
00362 #define BY_WORD_16_BITS 1
00363 #define BY_BYTE_32_BITS 2
00364 #define BY_BYTE_16_BITS 3
00365
00366
00367
00368
00369
00370 #define COMPATIBLITY_TIMING 0
00371 #define TYPE_A_TIMING 1
00372 #define TYPE_B_TIMING 2
00373 #define BURST_TIMING 3
00374
00375
#ifndef DMA1_COMMAND_STATUS
00376
00377
00378
00379
00380
00381
00382 #define DMA_SETMASK 4
00383 #define DMA_CLEARMASK 0
00384 #define DMA_READ 4 // These two appear backwards, but I think
00385 #define DMA_WRITE 8 // the DMA docs have them mixed up
00386 #define DMA_SINGLE_TRANSFER 0x40
00387 #define DMA_AUTO_INIT 0x10 // Auto initialization mode
00388
#endif
00389
#endif
00390