Pascal goes PCI, c't 2/96, S.266, as
--------------------------------------------------------------

PCIunit.pas    Source TP 7.0
PCIunit.tpu    Unit   TP 7.0
Triton.pas     Source TP 7.0 als Beispielprogramm
Triton.exe     ausfhrbares Programm


Die PCIUnit ist eine Schnittstelle zum PCI-BIOS nach
den PCI-Spezifikationen 2.0 und 2.1. Hierber ist es mglich,
Daten aus den Konfigurationsregister von PCI-Devices zu lesen und
selbige zu setzen.

Die wichtigsten Funktionen sind:

>> Function PCI_BIOS_present (var PCIInfo:PCIinfostruc):boolean;

-  gibt aus, ob ein PCI-BIOS prsent ist und liefert einige
Informationen zur Version.

>> Function  Read_Config
  {Entry}    (B:Breite; Bus,DeviceNr,FunctionNr:Byte; Register:word;
  {Exit}      var ReturnCode:byte): longint;

Mit B in [xByte, xWord, xDword]

.. Man mu Bus, DeviceNr, und Funktionnummer sowie den Index
bergeben und bekommt den Registerinhalt geliefert.

>> Procedure Write_config
   {Entry}   (B:Breite; Bus,DeviceNr,FunctionNr:Byte; Register:word;
              wert:longint; var ReturnCode:byte);

Mit B in [xByte, xWord, xDword]

-- Man mu Bus, DeviceNr, und Funktionnummer sowie den Index
und den gewnschten Registerinhalt bergeben


>> Procedure Find_PCI_Device (VendorID, DeviceId, Index:word;
                           var Bus,DevNr,FuncNr,ReturnCode:byte);

-- Sucht nach einem bestimmten Device, dessen Vendor- und DeviceID
man kennt.


>> Procedure Find_PCI_Class_Code (BaseClass,SubClass,Prog:byte;Index:word;
                            var Bus,DevNr,FuncNr,ReturnCode:byte);

-- Sucht nach einem Device einer Base - und Subklasse, ewa
Host-Bridge oder VGA etc.

>> Procedure ShowPCIinfo (var PCIBIOSfound:boolean);

-- gibt PCI-Information auf dem Bildschirm aus


{ Nachfolgend noch einige nicht verffentlichte Prozeduren
  fr das Interrupt-Routing }

>> Procedure ShowIRQ;
-- Zeigt alle Routing-Mglichkeiten an (ab V2.1)

Procedure Get_PCI_Interrupt_Routing_Options
 (var RouteBufferInfo:RouteBufferInfoType;var exIRQ:word; var ReturnCode:byte);


Procedure Set_PCI_IRQ
  (IntPin,    IRQNum,  Bus,    Device, Func:Byte; var returnCode:byte);
  { $A..$D   , 0..15 ,  0..255 ,0..31, 0..7 }


{Setzen der Attribute der UMB-Memory-Blcke fr alle
Intel-PCI-Memory-Controller }

>> Procedure SetPAM (seg:word;attr:byte); { Fr alle Intel-PCI- Chips }
{ segmente $C000, $C400, $C800, $CC00,
           $D000, $D400, $D800, $DC00,
           $E000, $E400, $E800, $EC00

Attribut [0..$F] binr:

 x111     : read write Cacheable
 x011     : read write not Cacheable
 x010     : Write only not Cacheable
 x101     : Read only, cacheable
 x001     : Read only not Cacheable
 x000     : Read/Write to PCI Bus

Bei Saturn: x=1: PCI/ISA-Busmaster-Zugriff auf UMB
Bei Orion : Bit2,3 ohne Bedeutung
}


Triton
-----------------------------------------------

Triton ist ein Beispielprogramm fr den Umgang mit der PCIunit.
Es gibt die wichtigsten Einstellungen des Triton-Chipsatzes aus,
bei Bedarf auch das Interrupt-Routing.



