Dodajem knjige
This commit is contained in:
@@ -0,0 +1,482 @@
|
||||
|
||||
There are two configuration methods, depending on the PCI chipsets used:
|
||||
|
||||
Configuration Type 1:
|
||||
|
||||
CF8h D(R/W):
|
||||
bit 0-7 Index into the configuration space to read/write at CFCh
|
||||
11-15 Card ID (0 - 31)
|
||||
16-19 PCI Bus ID (0 - 15)
|
||||
31 Set to enable the PCI bus configuration space
|
||||
|
||||
CFCh D(R/W):
|
||||
bit 0-31 The index register identified by the PCI bus/card ID/Index in CF8h
|
||||
can be accessed here.
|
||||
|
||||
|
||||
Configuration Type 2:
|
||||
|
||||
CF8h (R/W):
|
||||
bit 7 Set to select the PCI configuration space
|
||||
|
||||
CFAh (R/W):
|
||||
bit 0-? Bus select ?
|
||||
|
||||
|
||||
Finding the PCI devices:
|
||||
|
||||
PCItype:=0;
|
||||
outp($CF8,0);
|
||||
outp($CFA,0);
|
||||
if (inp($CF8)=0) and (inp($CFA)=0) then PCItype:=2
|
||||
else begin
|
||||
tmp=inpl($CF8);
|
||||
outpl($CF8,$80000000);
|
||||
if inpl($CF8)=$80000000 then PCItype:=1;
|
||||
outpl($CF8,tmp);
|
||||
end;
|
||||
case PCItype of
|
||||
1:begin {PCI type 1}
|
||||
for i:=0 to 511 do
|
||||
begin
|
||||
outpl($CF8,$80000000+i*longint(2048));
|
||||
tmp:=inpl($CFC);
|
||||
if ((tmp and $FFFF)<>$FFFF) and ((tmp shr 16)<>$FFFF) then
|
||||
_PCI Device: Vendor: (l and $FFFF) Device: (l shr 16)_
|
||||
end;
|
||||
end;
|
||||
2:begin {PCI type 2}
|
||||
outp($CF8,$80);
|
||||
outp($CFA,0); {Bus select?}
|
||||
for i:=0 to 15 do
|
||||
begin
|
||||
tmp:=inpl(i*256 +$C000);
|
||||
if ((tmp and $FFFF)<>$FFFF) and ((tmp shr 16)<>$FFFF) then
|
||||
_PCI Device: Vendor: (l and $FFFF) Device: (l shr 16)_
|
||||
end;
|
||||
outp($CF8,0);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
The PCI BIOS interface requires a 386 or better CPU.
|
||||
|
||||
|
||||
--------X-1AB001-----------------------------
|
||||
INT 1A - ? PCI ? - INSTALLATION CHECK
|
||||
AX = B001h
|
||||
Return: CF clear if installed
|
||||
DX = 4350h ('CP')
|
||||
CX = 2049h (' I')
|
||||
--------X-1AB002-----------------------------
|
||||
INT 1A - ? PCI ? - FIND PCI DEVICE
|
||||
AX = B002h
|
||||
CX = device ID
|
||||
DX = vendor ID
|
||||
SI = device index (0-n)
|
||||
Return: CF clear if successful
|
||||
BH = bus number
|
||||
BL = device/function number (bits 7-3 device, bits 2-0 func)
|
||||
--------X-1AB00A-----------------------------
|
||||
INT 1A - ? PCI ? - READ CONFIGURATION DWORD
|
||||
AX = B00Ah
|
||||
BH = bus number
|
||||
BL = device/function number (bits 7-3 device, bits 2-0 function)
|
||||
DI = register number (0000h-00FFh)
|
||||
Return: CF clear if successful
|
||||
CX = Low 16 bit of the DWORD
|
||||
DX = High 16 bit of the DWORD
|
||||
|
||||
--------X-1AB101-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - INSTALLATION CHECK
|
||||
AX = B101h
|
||||
Return: AH = 00h if installed
|
||||
CF clear
|
||||
EDX = 20494350h (' ICP')
|
||||
EDI = physical address of protected-mode entry point (see #0528)
|
||||
AL = PCI hardware characteristics (see #0527)
|
||||
BH = PCI interface level major version (BCD)
|
||||
BL = PCI interface level minor version (BCD)
|
||||
CL = number of last PCI bus in system
|
||||
EAX, EBX, ECX, and EDX may be modified
|
||||
all other flags (except IF) may be modified
|
||||
Note: this function may require up to 1024 byte of stack; it will not enable
|
||||
interrupts if they were disabled before making the call
|
||||
|
||||
Bitfields for PCI hardware characteristics:
|
||||
Bit(s) Description (Table 0527)
|
||||
0 configuration space access mechanism 1 supported
|
||||
1 configuration space access mechanism 2 supported
|
||||
2-3 reserved
|
||||
4 Special Cycle generation mechanism 1 supported
|
||||
5 Special Cycle generation mechanism 2 supported
|
||||
6-7 reserved
|
||||
|
||||
(Table 0528)
|
||||
Call protected-mode entry point with:
|
||||
registers as for real/V86-mode INT call
|
||||
CS = ring 0 descriptor with access to full address space
|
||||
Return: as for real/V86-mode call
|
||||
--------X-1AB102-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - FIND PCI DEVICE
|
||||
AX = B102h
|
||||
CX = device ID
|
||||
DX = vendor ID
|
||||
SI = device index (0-n)
|
||||
Return: CF clear if successful
|
||||
CF set on error
|
||||
AH = status
|
||||
00h successful
|
||||
BH = bus number
|
||||
BL = device/function number (bits 7-3 device, bits 2-0 func)
|
||||
83h bad vendor ID
|
||||
86h device not found
|
||||
EAX, EBX, ECX, and EDX may be modified
|
||||
all other flags (except IF) may be modified
|
||||
Notes: this function may require up to 1024 byte of stack; it will not enable
|
||||
interrupts if they were disabled before making the call device ID FFFFh
|
||||
may be reserved as a wildcard in future implementations the meanings of
|
||||
BL and BH on return were exchanged between the initial drafts of the
|
||||
specification and final implementation all devices sharing a single
|
||||
vendor ID and device ID may be enumerated by incrementing SI from 0
|
||||
until error 86h is returned
|
||||
--------X-1AB103-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - FIND PCI CLASS CODE
|
||||
AX = B103h
|
||||
ECX = class code (bits 23-0)
|
||||
SI = device index (0-n)
|
||||
Return: CF clear if successful
|
||||
CF set on error
|
||||
AH = status
|
||||
00h successful
|
||||
BH = bus number
|
||||
BL = device/function number (bits 7-3 device, bits 2-0 func)
|
||||
86h device not found
|
||||
EAX, EBX, ECX, and EDX may be modified
|
||||
all other flags (except IF) may be modified
|
||||
Notes: this function may require up to 1024 byte of stack; it will not enable
|
||||
interrupts if they were disabled before making the call the meanings
|
||||
of BL and BH on return were exchanged between the initial drafts of
|
||||
the specification and final implementation all devices sharing the
|
||||
same Class Code may be enumerated by incrementing SI from 0 until
|
||||
error 86h is returned
|
||||
--------X-1AB106-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - PCI BUS-SPECIFIC OPERATIONS
|
||||
AX = B106h
|
||||
BL = bus number
|
||||
EDX = Special Cycle data
|
||||
Return: CF clear if successful
|
||||
CF set on error
|
||||
AH = status
|
||||
00h successful
|
||||
81h unsupported function
|
||||
EAX, EBX, ECX, and EDX may be modified
|
||||
all other flags (except IF) may be modified
|
||||
Note: this function may require up to 1024 byte of stack; it will not enable
|
||||
interrupts if they were disabled before making the call
|
||||
--------X-1AB108-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION BYTE
|
||||
AX = B108h
|
||||
BL = device/function number (bits 7-3 device, bits 2-0 function)
|
||||
BH = bus number
|
||||
DI = register number (0000h-00FFh)
|
||||
Return: CF clear if successful
|
||||
CL = byte read
|
||||
CF set on error
|
||||
AH = status
|
||||
00h successful
|
||||
87h bad register number
|
||||
EAX, EBX, ECX, and EDX may be modified
|
||||
all other flags (except IF) may be modified
|
||||
Notes: this function may require up to 1024 byte of stack; it will not enable
|
||||
interrupts if they were disabled before making the call the meanings
|
||||
of BL and BH on return were exchanged between the initial drafts of
|
||||
the specification and final implementation
|
||||
--------X-1AB109-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION WORD
|
||||
AX = B109h
|
||||
BL = device/function number (bits 7-3 device, bits 2-0 function)
|
||||
BH = bus number
|
||||
DI = register number (0000h-00FFh)
|
||||
Return: CF clear if successful
|
||||
CX = word read
|
||||
CF set on error
|
||||
AH = status
|
||||
00h successful
|
||||
87h bad register number
|
||||
EAX, EBX, ECX, and EDX may be modified
|
||||
all other flags (except IF) may be modified
|
||||
Notes: this function may require up to 1024 byte of stack; it will not enable
|
||||
interrupts if they were disabled before making the call the meanings
|
||||
of BL and BH on return were exchanged between the initial drafts of
|
||||
the specification and final implementation
|
||||
--------X-1AB10A-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION DWORD
|
||||
AX = B10Ah
|
||||
BH = bus number
|
||||
BL = device/function number (bits 7-3 device, bits 2-0 function)
|
||||
DI = register number (0000h-00FFh)
|
||||
Return: CF clear if successful
|
||||
ECX = dword read
|
||||
CF set on error
|
||||
AH = status
|
||||
00h successful
|
||||
87h bad register number
|
||||
EAX, EBX, ECX, and EDX may be modified
|
||||
all other flags (except IF) may be modified
|
||||
Notes: this function may require up to 1024 byte of stack; it will not enable
|
||||
interrupts if they were disabled before making the call the meanings of
|
||||
BL and BH on return were exchanged between the initial drafts of the
|
||||
specification and final implementation
|
||||
--------X-1AB10B-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION BYTE
|
||||
AX = B10Bh
|
||||
BH = bus number
|
||||
BL = device/function number (bits 7-3 device, bits 2-0 function)
|
||||
DI = register number (0000h-00FFh)
|
||||
CL = byte to write
|
||||
Return: CF clear if successful
|
||||
CF set on error
|
||||
AH = status
|
||||
00h successful
|
||||
87h bad register number
|
||||
EAX, EBX, ECX, and EDX may be modified
|
||||
all other flags (except IF) may be modified
|
||||
Notes: this function may require up to 1024 byte of stack; it will not enable
|
||||
interrupts if they were disabled before making the call the meanings
|
||||
of BL and BH on return were exchanged between the initial drafts of
|
||||
the specification and final implementation
|
||||
--------X-1AB10C-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION WORD
|
||||
AX = B10Ch
|
||||
BH = bus number
|
||||
BL = device/function number (bits 7-3 device, bits 2-0 function)
|
||||
DI = register number (multiple of 2 less than 0100h)
|
||||
CX = word to write
|
||||
Return: CF clear if successful
|
||||
CF set on error
|
||||
AH = status
|
||||
00h successful
|
||||
87h bad register number
|
||||
EAX, EBX, ECX, and EDX may be modified
|
||||
all other flags (except IF) may be modified
|
||||
Notes: this function may require up to 1024 byte of stack; it will not enable
|
||||
interrupts if they were disabled before making the call the meanings
|
||||
of BL and BH on return were exchanged between the initial drafts of
|
||||
the specification and final implementation
|
||||
--------X-1AB10D-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION DWORD
|
||||
AX = B10Dh
|
||||
BH = bus number
|
||||
BL = device/function number (bits 7-3 device, bits 2-0 function)
|
||||
DI = register number (multiple of 4 less than 0100h)
|
||||
ECX = dword to write
|
||||
Return: CF clear if successful
|
||||
CF set on error
|
||||
AH = status
|
||||
00h successful
|
||||
87h bad register number
|
||||
EAX, EBX, ECX, and EDX may be modified
|
||||
all other flags (except IF) may be modified
|
||||
Notes: this function may require up to 1024 byte of stack; it will not enable
|
||||
interrupts if they were disabled before making the call the meanings
|
||||
of BL and BH on return were exchanged between the initial drafts of
|
||||
the specification and final implementation
|
||||
--------X-1AB181-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - INSTALLATION CHECK (32-bit)
|
||||
AX = B181h
|
||||
Return: as for AX=B101h
|
||||
--------X-1AB182-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - FIND PCI DEVICE (32-bit)
|
||||
AX = B182h
|
||||
CX = device ID
|
||||
DX = vendor ID
|
||||
SI = device index (0-n)
|
||||
Return: as for AX=B102h
|
||||
--------X-1AB183-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - FIND PCI CLASS CODE (32-bit)
|
||||
AX = B183h
|
||||
ECX = class code (bits 23-0)
|
||||
SI = device index (0-n)
|
||||
Return: as for AX=B103h
|
||||
--------X-1AB186-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - PCI BUS-SPECIFIC OPERATIONS (32-bit)
|
||||
AX = B186h
|
||||
BL = bus number
|
||||
EDX = Special Cycle data
|
||||
Return: as for AX=B106h
|
||||
--------X-1AB188-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION BYTE (32-bit)
|
||||
AX = B188h
|
||||
BL = bus number
|
||||
BH = device/function number (bits 7-3 device, bits 2-0 function)
|
||||
DI = register number (0000h-00FFh)
|
||||
Return: as for AX=B108h
|
||||
--------X-1AB189-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION WORD (32-bit)
|
||||
AX = B189h
|
||||
BL = bus number
|
||||
BH = device/function number (bits 7-3 device, bits 2-0 function)
|
||||
DI = register number (0000h-00FFh)
|
||||
Return: as for AX=B109h
|
||||
--------X-1AB18A-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION DWORD (32-bit)
|
||||
AX = B18Ah
|
||||
BL = bus number
|
||||
BH = device/function number (bits 7-3 device, bits 2-0 function)
|
||||
DI = register number (0000h-00FFh)
|
||||
Return: as for AX=B10Ah
|
||||
--------X-1AB18B-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION BYTE (32-bit)
|
||||
AX = B18Bh
|
||||
BL = bus number
|
||||
BH = device/function number (bits 7-3 device, bits 2-0 function)
|
||||
DI = register number (0000h-00FFh)
|
||||
CL = byte to write
|
||||
Return: as for AX=B10Bh
|
||||
--------X-1AB18C-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION WORD (32-bit)
|
||||
AX = B18Ch
|
||||
BL = bus number
|
||||
BH = device/function number (bits 7-3 device, bits 2-0 function)
|
||||
DI = register number (multiple of 2 less than 0100h)
|
||||
CX = word to write
|
||||
Return: as for AX=B10Ch
|
||||
--------X-1AB18D-----------------------------
|
||||
INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION DWORD (32-bit)
|
||||
AX = B18Dh
|
||||
BL = bus number
|
||||
BH = device/function number (bits 7-3 device, bits 2-0 function)
|
||||
DI = register number (multiple of 4 less than 0100h)
|
||||
ECX = dword to write
|
||||
Return: as for AX=B10Dh
|
||||
|
||||
|
||||
|
||||
The PCI configuration space consists of 256bytes per device, the first 64
|
||||
bytes are laid out as follows, though an adapter may not implement all fields.
|
||||
|
||||
Offset Size Description:
|
||||
00h WORD Vendor ID. FFFFh is reserved.
|
||||
02h WORD Device ID. FFFFh is reserved.
|
||||
04h WORD System Bus Command
|
||||
Bit 0 I/O Space. If set the device is allowed to respond to
|
||||
I/O requests, if clear the device does not respond.
|
||||
1 Memory Space. If set the device is allowed to respond
|
||||
to Meory requests, if clear the device does not
|
||||
respond.
|
||||
3 Special Cycles. If set the device is allowed to monitor
|
||||
special cycles.
|
||||
5 VGA Palette Snoop. If set special snooping behavior is
|
||||
enabled. The device must not respond to DAC writes.
|
||||
If clear palette accesses are treated normally.
|
||||
6 Parity Error. If set the device responds to parity
|
||||
errors, if clear it ignores them. The device must
|
||||
generate parity even if this bit is clear.
|
||||
7 Wait Cycle Control. If set data/address stepping is
|
||||
enabled, disabled if clear.
|
||||
8 System Error Driver. If set the error driver reports
|
||||
parity errors, if clear the system error driver is
|
||||
disconnected.
|
||||
9 Back-to-Back Cycle. If set the device supports back-to
|
||||
-back cycles.
|
||||
06h WORD System Bus Status
|
||||
Bit 7 (R) Fast back-to-back. If set the device is capable of
|
||||
fast back-to-back cycles, if clear it is not.
|
||||
8 Bus Master. Only implemented by Bus Masters
|
||||
9-10 (R) Device Select Timing. DEVSEL# timing. 0: fast,
|
||||
1: medium, 2: slow
|
||||
11 Device Target-abort. Set whenever the device (as target)
|
||||
issues a Target Abort. Write 1 to reset.
|
||||
12 Received Target-abort. Set whenever the device (as
|
||||
Master) receives a Target Abort. Write 1 to reset.
|
||||
13 Master Abort Status. Set whenever the device issues a
|
||||
Master Abort. Write 1 to reset.
|
||||
08h BYTE Revision Code.
|
||||
09h BYTE Programming Interface.
|
||||
0Ah WORD Class. 300h for VGA devices, 1 for 8514/A devices
|
||||
0Ch BYTE Cache line size
|
||||
0Dh BYTE Latency timer.
|
||||
Bit 0-2 (R)
|
||||
3-7
|
||||
0Eh BYTE Header type
|
||||
Bit 0-6 Current offset for configuration register ?
|
||||
7 Multifunction Device?
|
||||
0Fh BYTE Bist?
|
||||
10h DWORD Base0 - Defines a Memory or I/O region used by the device
|
||||
Bit 0 (R) Memory or I/O. Set if the region is in I/O space,
|
||||
clear if it is in Memory space.
|
||||
1-2 (R) Locatable Area. 0: Anywhere in 32bit address space
|
||||
1: Below 1MB, 2: anywhere in 64bit address space
|
||||
3 (R) Pre-fetchable. Set if memory is cacheable, clear
|
||||
if not.
|
||||
4-7 (R) Address space size
|
||||
8-31 Memory Base. Upper 24bit of the base address.
|
||||
14h DWORD Base1 - Similar to Base0
|
||||
18h DWORD Base2 - Similar to Base0
|
||||
1Ch DWORD Base3 - Similar to Base0
|
||||
20h DWORD Base4 - Similar to Base0
|
||||
24h DWORD Base5 - Similar to Base0
|
||||
28h DWORD Reserved
|
||||
2Ch DWORD Reserved
|
||||
30h DWORD ROM Base - Defines the location & size of the BIOS ROM
|
||||
Bit 0 ROM BIOS Decode. Set to enable BIOS access
|
||||
11-14 (R) ROM BIOS Min Size.
|
||||
0: 32K ROM (bits 15-17 R/W)
|
||||
1: 64K ROM (bits 15 RO, 16-17 R/W)
|
||||
2: 128K ROM (bits 15-16 RO, 17 R/W)
|
||||
3: 256K ROM (bits 15-17 RO)
|
||||
15-31 BIOS Base Address. Upper 14-17 bits of the BIOS
|
||||
location. Depending on the BIOS size in bits 11-14
|
||||
the lowest 1/2/3 bits may be forced to 0.
|
||||
34h DWORD Reserved
|
||||
38h DWORD Reserved
|
||||
3Ch BYTE Interrupt Line
|
||||
Used for Interrupt Line info during initialisation
|
||||
3Dh BYTE Interrupt Pin
|
||||
Identifies the interrupt lines used
|
||||
3Eh BYTE Minimum Grant
|
||||
Specifies the longest burst allowed
|
||||
3Fh BYTE Max Lat
|
||||
Indicates how often the device geta access to the PCI bus.
|
||||
|
||||
|
||||
Known Vendor/Device ID combinations:
|
||||
Vendor: Device: Card:
|
||||
0E11h 3032h Compaq QVision 1280P
|
||||
1000h NCR
|
||||
1002h 4158h ATI Mach32 (68800-AX)
|
||||
4758h ATI Mach64 (88800-GX)
|
||||
1005h 2301h Avance Logic ALG2301
|
||||
2302h Avance Logic ALG2302
|
||||
2364h Avance Logic ALG2364
|
||||
100Ch 3202h Tseng ET4000/W32p revA
|
||||
3207h Tseng ET4000/W32p revD
|
||||
100Eh 9001h Weitek Viper/PCI
|
||||
9100h Weitek Viper Pro/SE
|
||||
1011h Digital
|
||||
1013h 00A0h Cirrus Logic CL-GD5430
|
||||
00A8h Cirrus Logic CL-GD5434
|
||||
1200h Cirrus Logic CL-GD7542 (Nordic)
|
||||
1202h Cirrus Logic CL-GD7543 (Viking)
|
||||
1204h Cirrus Logic CL-GD7541 (Nordic Light)
|
||||
101Ah NCR
|
||||
1023h 9420h Trident TGUI9420DGi
|
||||
9430h Trident TGUI9430
|
||||
1025h 1435h Acer Labs M1435 (huh maybe M3145??)
|
||||
102Bh 0518h Matrox ?
|
||||
0D10h Matrox Impression Plus
|
||||
102Ch 00B8h Chips&Tech CT64310
|
||||
00D8h Chips&Tech CT65545
|
||||
105Dh 2309h Number Nine (#9) Imagine-128
|
||||
1060h UMC
|
||||
1142h 3210h Alliance Pro Motion 3210
|
||||
1A08h 0000h Sierra 15064 ?
|
||||
5333h 8811h S3 Trio64
|
||||
8880h S3 86c866
|
||||
88B0h S3 86c928P
|
||||
88C0h S3 86c864
|
||||
88C1h S3 86c864P
|
||||
88D0h S3 86c964
|
||||
EDD8h A091h ARK 1000PV
|
||||
A099h ARK 2000PV
|
||||
Reference in New Issue
Block a user