Difference between revisions of "Unit PCI"

From Ultibo.org
Jump to: navigation, search
 
(4 intermediate revisions by the same user not shown)
Line 5: Line 5:
 
----
 
----
  
'''Ultibo PCI/PCIe interface unit'''
+
'''Ultibo PCI/PCIe Interface unit'''
  
 
=== Constants ===
 
=== Constants ===
Line 45: Line 45:
 
| <code>PCI_TYPE_NAMES:array[PCI_TYPE_NONE..PCI_TYPE_MAX] of String = ('PCI_TYPE_NONE');</code>
 
| <code>PCI_TYPE_NAMES:array[PCI_TYPE_NONE..PCI_TYPE_MAX] of String = ('PCI_TYPE_NONE');</code>
 
| style="width: 50%;"|&nbsp;
 
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PCI device state''' <code> PCI_STATE_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PCI_STATE_DETACHED = 0;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>PCI_STATE_DETACHING = 1;</code>
 +
| &nbsp;
 +
|-
 +
| <code>PCI_STATE_ATTACHING = 2;</code>
 +
| &nbsp;
 +
|-
 +
| <code>PCI_STATE_ATTACHED = 3;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>PCI_STATE_MAX = 3;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>PCI_STATE_NAMES:array[PCI_STATE_DETACHED..PCI_STATE_MAX] of String = ('PCI_STATE_DETACHED', 'PCI_STATE_DETACHING', 'PCI_STATE_ATTACHING', 'PCI_STATE_ATTACHED');</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PCI device status''' <code> PCI_STATUS_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code> PCI_STATUS_UNBOUND = 0; </code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>PCI_STATUS_BOUND = 1;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>PCI_STATUS_MAX = 1;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>PCI_STATUS_NAMES:array[PCI_STATUS_UNBOUND..PCI_STATUS_MAX] of String = ('PCI_STATUS_UNBOUND', 'PCI_STATUS_BOUND');</code>
 +
| &nbsp;
 
|-
 
|-
 
|}
 
|}
Line 67: Line 121:
 
| <code>PCIHOST_TYPE_NONE = 0;</code>
 
| <code>PCIHOST_TYPE_NONE = 0;</code>
 
| style="width: 50%;"|&nbsp;
 
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>PCIHOST_TYPE_PCI = 1;</code>
 +
| &nbsp;
 +
|-
 +
| <code>PCIHOST_TYPE_PCIX = 2;</code>
 +
| &nbsp;
 +
|-
 +
| <code>PCIHOST_TYPE_PCIE = 3;</code>
 +
| &nbsp;
 
|-
 
|-
 
|colspan="2"|&nbsp;  
 
|colspan="2"|&nbsp;  
 
|-
 
|-
| <code>PCIHOST_TYPE_MAX = 0;</code>
+
| <code>PCIHOST_TYPE_MAX = 3;</code>
 
| &nbsp;
 
| &nbsp;
 
|-
 
|-
 
|colspan="2"|&nbsp;  
 
|colspan="2"|&nbsp;  
 
|-
 
|-
| <code>PCIHOST_TYPE_NAMES:array[PCIHOST_TYPE_NONE..PCIHOST_TYPE_MAX] of String = ('PCIHOST_TYPE_NONE');</code>
+
| <code>PCIHOST_TYPE_NAMES:array[PCIHOST_TYPE_NONE..PCIHOST_TYPE_MAX] of String = ('PCIHOST_TYPE_NONE', 'PCIHOST_TYPE_PCI', 'PCIHOST_TYPE_PCIX', 'PCIHOST_TYPE_PCIE');</code>
 
| &nbsp;
 
| &nbsp;
 
|-
 
|-
Line 160: Line 223:
 
----
 
----
  
''To be documented''
+
 
 +
'''PCI device'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PPCIDevice = ^TPCIDevice;</code>
 +
 
 +
<code>TPCIDevice = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''Device Properties''
 +
|-
 +
| <code>Device:TDevice;</code>
 +
| style="width: 50%;"|The Device entry for this PCI device
 +
|-
 +
|colspan="2"|''PCI Properties''
 +
|-
 +
| <code>PCIId:LongWord;</code>
 +
| Unique Id of this PCI in the PCI device table
 +
|-
 +
| <code>PCIState:LongWord;</code>
 +
| PCI device state (eg PCI_STATE_ATTACHED)
 +
|-
 +
| <code>PCIStatus:LongWord;</code>
 +
| PCI device status (eg PCI_STATUS_BOUND)
 +
|-
 +
| <code>Host:PPCIHost;</code>
 +
| Host controller this PCI device is connected to (Set by PCI core)
 +
|-
 +
| <code>Parent:PPCIDevice;</code>
 +
| Parent this PCI device is connected to, if any (Set by PCI core)
 +
|-
 +
| <code>Driver:PPCIDriver;</code>
 +
| Driver this PCI device is bound to, if any (Set by PCI core)
 +
|-
 +
|colspan="2"|''Driver Properties''
 +
|-
 +
| <code>Lock:TMutexHandle;</code>
 +
| PCI device lock
 +
|-
 +
|colspan="2"|''Internal Properties''
 +
|-
 +
| <code>Prev:PPCIDevice;</code>
 +
| Previous entry in PCI device table
 +
|-
 +
| <code>Next:PPCIDevice;</code>
 +
| Next entry in PCI device table
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''PCI device bind callback'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TPCIDeviceBind = function(Device:PPCIDevice):LongWord;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 
 +
'''PCI device unbind callback'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TPCIDeviceUnbind = function(Device:PPCIDevice; Driver:PPCIDriver):LongWord;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 
 +
'''PCI device enumeration callback'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TPCIDeviceEnumerate = function(Device:PPCIDevice; Data:Pointer):LongWord;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 
 +
'''PCI device notification callback'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TPCIDeviceNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 
 +
'''PCI driver'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PPCIDriver = ^TPCIDriver;</code>
 +
 
 +
<code>TPCIDriver = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''Driver Properties''
 +
|-
 +
| <code>Driver:TDriver;</code>
 +
| style="width: 50%;"|The Driver entry for this PCI Driver
 +
|-
 +
|colspan="2"|''PCI Properties''
 +
|-
 +
| <code>DriverBind:TPCIDriverBind;</code>
 +
| A Driver specific DriverBind method implementing the standard PCI driver interface
 +
|-
 +
| <code>DriverUnbind:TPCIDriverUnbind;</code>
 +
| A Driver specific DriverUnbind method implementing the standard PCI driver interface
 +
|-
 +
|colspan="2"|''Interface Properties''
 +
|-
 +
| <code>Lock:TMutexHandle;</code>
 +
| Driver lock
 +
|-
 +
|colspan="2"|''Internal Properties''
 +
|-
 +
| <code>Prev:PPCIDriver;</code>
 +
| Previous entry in Driver table
 +
|-
 +
| <code>Next:PPCIDriver;</code>
 +
| Next entry in Driver table
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''PCI driver enumeration callback'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TPCIDriverEnumerate = function(Driver:PPCIDriver; Data:Pointer):LongWord;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 
 +
'''PCI driver bind'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TPCIDriverBind = function(Device:PPCIDevice):LongWord;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 
 +
'''PCI driver unbind'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TPCIDriverUnbind = function(Device:PPCIDevice):LongWord;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 +
'''PCI host'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PPCIHost = ^TPCIHost;</code>
 +
 
 +
<code>TPCIHost = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''Device Properties''
 +
|-
 +
| <code>Device:TDevice;</code>
 +
| style="width: 50%;"|The Device entry for this PCI Host
 +
|-
 +
|colspan="2"|''PCI Properties''
 +
|-
 +
| <code>HostId:LongWord;</code>
 +
| Unique Id of this Host in the Host table
 +
|-
 +
| <code>HostState:LongWord</code>
 +
| Host state (eg PCIHOST_STATE_ENABLED)
 +
|-
 +
| <code>HostStart:TPCIHostStart;</code>
 +
| A Host specific HostStart method implementing the standard PCI host interface
 +
|-
 +
| <code>HostStop:TPCIHostStop;</code>
 +
| A Host specific HostStop method implementing the standard PCI host interface
 +
|-
 +
| <code>HostReset:TPCIHostReset;</code>
 +
| A Host specific HostReset method implementing the standard PCI host interface
 +
|-
 +
|colspan="2"|''Driver Properties''
 +
|-
 +
| <code>Lock:TMutexHandle;</code>
 +
| Host lock
 +
|-
 +
|colspan="2"|''Internal Properties''
 +
|-
 +
| <code>Prev:PPCIHost;</code>
 +
| Previous entry in Host table
 +
|-
 +
| <code>Next:PPCIHost;</code>
 +
| Next entry in Host table
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''PCI host enumeration callback'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TPCIHostEnumerate = function(Host:PPCIHost; Data:Pointer):LongWord;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 
 +
'''PCI host notification callback'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TPCIHostNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|} 
 +
 
 +
'''PCI host start'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TPCIHostStart = function(Host:PPCIHost):LongWord;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 
 +
'''PCI host stop'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TPCIHostStop = function(Host:PPCIHost):LongWord;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 
 +
'''PCI host reset'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TPCIHostReset = function(Host:PPCIHost):LongWord;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 
 +
'''PCI logging'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TPCILogOutput = procedure(const AText:String; Data:Pointer);</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
<br />
  
 
=== Public variables ===
 
=== Public variables ===
Line 343: Line 658:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverCreate:PPCIDriver;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverCreate:PPCIDriver;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create a new Driver entry</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create a new PCI Driver entry</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 355: Line 670:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverCreateEx(Size:LongWord):PPCIDriver;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverCreateEx(Size:LongWord):PPCIDriver;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create a new Driver entry</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create a new PCI Driver entry</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 370: Line 685:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverDestroy(Driver:PPCIDriver):LongWord;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverDestroy(Driver:PPCIDriver):LongWord;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Destroy an existing Driver entry</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Destroy an existing PCI Driver entry</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 382: Line 697:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverRegister(Driver:PPCIDriver):LongWord;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverRegister(Driver:PPCIDriver):LongWord;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Register a new Driver in the Driver table</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Register a new PCI Driver in the Driver table</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 394: Line 709:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverDeregister(Driver:PPCIDriver):LongWord;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverDeregister(Driver:PPCIDriver):LongWord;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Deregister a Driver from the Driver table</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Deregister a PCI Driver from the Driver table</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 406: Line 721:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverFind(DriverId:LongWord):PPCIDriver;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverFind(DriverId:LongWord):PPCIDriver;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a driver by Id in the PCI Driver table</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 418: Line 733:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverFindByName(const Name:String):PPCIDriver; inline;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverFindByName(const Name:String):PPCIDriver; inline;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a driver by name in the Driver table</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 430: Line 745:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverEnumerate(Callback:TPCIDriverEnumerate; Data:Pointer):LongWord;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverEnumerate(Callback:TPCIDriverEnumerate; Data:Pointer):LongWord;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Enumerate all drivers in the PCI Driver table</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 592: Line 907:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverGetCount:LongWord; inline;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverGetCount:LongWord; inline;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current driver count</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current PCI driver count</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 604: Line 919:
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverCheck(Driver:PPCIDriver):PPCIDriver;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function PCIDriverCheck(Driver:PPCIDriver):PPCIDriver;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check if the supplied Driver is in the driver table</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check if the supplied PCI Driver is in the driver table</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 641: Line 956:
 
<pre style="border: 0; padding-bottom:0px;">function PCIStatusToString(Status:LongWord):String;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function PCIStatusToString(Status:LongWord):String;</pre>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Translates a PCI status code into a string</div>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Translates a PCI status code into a string</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PCIDeviceTypeToString(PCIType:LongWord):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PCIDeviceStateToString(PCIState:LongWord):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PCIDeviceStatusToString(PCIStatus:LongWord):String;
 +
</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PCIDeviceStateToNotification(State:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a Device state value into the notification code for device notifications</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PCIDeviceStatusToNotification(Status:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a Device status value into the notification code for device notifications</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PCIHostTypeToString(HostType:LongWord):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PCIHostStateToString(HostState:LongWord):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PCIHostStateToNotification(State:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a Host state value into the notification code for device notifications</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"

Latest revision as of 04:59, 31 August 2021

Return to Unit Reference


Description


Ultibo PCI/PCIe Interface unit

Constants



PCI device, driver and host specific constants PCI_*
PCI_DEVICE_PREFIX = 'PCI'; Name prefix for PCI Devices
PCI_DRIVER_PREFIX = 'PCI'; Name prefix for PCI Drivers
PCI_HOST_PREFIX = 'PCIHost'; Name prefix for PCI Hosts


PCI device type PCI_TYPE_*
PCI_TYPE_NONE = 0;  
 
PCI_TYPE_MAX = 0;  
 
PCI_TYPE_NAMES:array[PCI_TYPE_NONE..PCI_TYPE_MAX] of String = ('PCI_TYPE_NONE');  


PCI device state PCI_STATE_*
PCI_STATE_DETACHED = 0;  
PCI_STATE_DETACHING = 1;  
PCI_STATE_ATTACHING = 2;  
PCI_STATE_ATTACHED = 3;  
 
PCI_STATE_MAX = 3;  
 
PCI_STATE_NAMES:array[PCI_STATE_DETACHED..PCI_STATE_MAX] of String = ('PCI_STATE_DETACHED', 'PCI_STATE_DETACHING', 'PCI_STATE_ATTACHING', 'PCI_STATE_ATTACHED');  


PCI device status PCI_STATUS_*
PCI_STATUS_UNBOUND = 0;  
PCI_STATUS_BOUND = 1;  
 
PCI_STATUS_MAX = 1;  
 
PCI_STATUS_NAMES:array[PCI_STATUS_UNBOUND..PCI_STATUS_MAX] of String = ('PCI_STATUS_UNBOUND', 'PCI_STATUS_BOUND');  


PCI device flag PCI_FLAG_*
PCI_FLAG_NONE = $00000000;  


PCI host type PCIHOST_TYPE_*
PCIHOST_TYPE_NONE = 0;  
PCIHOST_TYPE_PCI = 1;  
PCIHOST_TYPE_PCIX = 2;  
PCIHOST_TYPE_PCIE = 3;  
 
PCIHOST_TYPE_MAX = 3;  
 
PCIHOST_TYPE_NAMES:array[PCIHOST_TYPE_NONE..PCIHOST_TYPE_MAX] of String = ('PCIHOST_TYPE_NONE', 'PCIHOST_TYPE_PCI', 'PCIHOST_TYPE_PCIX', 'PCIHOST_TYPE_PCIE');  


PCI host state PCIHOST_STATE_*
PCIHOST_STATE_DISABLED = 0;  
PCIHOST_STATE_ENABLED = 1;  
 
PCIHOST_STATE_MAX = 1;  
 
PCIHOST_STATE_NAMES:array[PCIHOST_STATE_DISABLED..PCIHOST_STATE_MAX] of String = ('PCIHOST_STATE_DISABLED','PCIHOST_STATE_ENABLED');  


PCI host flag PCIHOST_FLAG_*
PCIHOST_FLAG_NONE = $00000000;  
PCIHOST_FLAG_SHARED = $00000001;  
PCIHOST_FLAG_NOCACHE = $00000002;  


PCI status code PCI_STATUS_*
PCI_STATUS_SUCCESS = 0; Function successful


PCI logging PCI_LOG_*
PCI_LOG_LEVEL_DEBUG = LOG_LEVEL_DEBUG; PCI debugging messages
PCI_LOG_LEVEL_INFO = LOG_LEVEL_INFO; PCI informational messages, such as a device being attached or detached.
PCI_LOG_LEVEL_WARN = LOG_LEVEL_WARN; PCI warning messages
PCI_LOG_LEVEL_ERROR = LOG_LEVEL_ERROR; PCI error messages
PCI_LOG_LEVEL_NONE = LOG_LEVEL_NONE; No PCI messages


Type definitions



PCI device

PPCIDevice = ^TPCIDevice;

TPCIDevice = record

Device Properties
Device:TDevice; The Device entry for this PCI device
PCI Properties
PCIId:LongWord; Unique Id of this PCI in the PCI device table
PCIState:LongWord; PCI device state (eg PCI_STATE_ATTACHED)
PCIStatus:LongWord; PCI device status (eg PCI_STATUS_BOUND)
Host:PPCIHost; Host controller this PCI device is connected to (Set by PCI core)
Parent:PPCIDevice; Parent this PCI device is connected to, if any (Set by PCI core)
Driver:PPCIDriver; Driver this PCI device is bound to, if any (Set by PCI core)
Driver Properties
Lock:TMutexHandle; PCI device lock
Internal Properties
Prev:PPCIDevice; Previous entry in PCI device table
Next:PPCIDevice; Next entry in PCI device table

PCI device bind callback

TPCIDeviceBind = function(Device:PPCIDevice):LongWord;

PCI device unbind callback

TPCIDeviceUnbind = function(Device:PPCIDevice; Driver:PPCIDriver):LongWord;

PCI device enumeration callback

TPCIDeviceEnumerate = function(Device:PPCIDevice; Data:Pointer):LongWord;

PCI device notification callback

TPCIDeviceNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;

PCI driver

PPCIDriver = ^TPCIDriver;

TPCIDriver = record

Driver Properties
Driver:TDriver; The Driver entry for this PCI Driver
PCI Properties
DriverBind:TPCIDriverBind; A Driver specific DriverBind method implementing the standard PCI driver interface
DriverUnbind:TPCIDriverUnbind; A Driver specific DriverUnbind method implementing the standard PCI driver interface
Interface Properties
Lock:TMutexHandle; Driver lock
Internal Properties
Prev:PPCIDriver; Previous entry in Driver table
Next:PPCIDriver; Next entry in Driver table

PCI driver enumeration callback

TPCIDriverEnumerate = function(Driver:PPCIDriver; Data:Pointer):LongWord;

PCI driver bind

TPCIDriverBind = function(Device:PPCIDevice):LongWord;

PCI driver unbind

TPCIDriverUnbind = function(Device:PPCIDevice):LongWord;

PCI host

PPCIHost = ^TPCIHost;

TPCIHost = record

Device Properties
Device:TDevice; The Device entry for this PCI Host
PCI Properties
HostId:LongWord; Unique Id of this Host in the Host table
HostState:LongWord Host state (eg PCIHOST_STATE_ENABLED)
HostStart:TPCIHostStart; A Host specific HostStart method implementing the standard PCI host interface
HostStop:TPCIHostStop; A Host specific HostStop method implementing the standard PCI host interface
HostReset:TPCIHostReset; A Host specific HostReset method implementing the standard PCI host interface
Driver Properties
Lock:TMutexHandle; Host lock
Internal Properties
Prev:PPCIHost; Previous entry in Host table
Next:PPCIHost; Next entry in Host table

PCI host enumeration callback

TPCIHostEnumerate = function(Host:PPCIHost; Data:Pointer):LongWord;

PCI host notification callback

TPCIHostNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;

PCI host start

TPCIHostStart = function(Host:PPCIHost):LongWord;

PCI host stop

TPCIHostStop = function(Host:PPCIHost):LongWord;

PCI host reset

TPCIHostReset = function(Host:PPCIHost):LongWord;

PCI logging

TPCILogOutput = procedure(const AText:String; Data:Pointer);


Public variables



PCI logging

PCI_DEFAULT_LOG_LEVEL:LongWord = PCI_LOG_LEVEL_DEBUG; Minimum level for PCI messages. Only messages with level greater than or equal to this will be printed.
PCI_LOG_ENABLED:Boolean;


Function declarations



Initialization functions

procedure PCIInit;
Description: Performs basic initialization of the PCI core driver, after this devices, hosts and drivers can be registered however nothing will work until PCIStart is called
Note None documented


function PCIStart:LongWord;
Description: Starts all registered PCI hosts and begins the PCI enumeration process
Note None documented


function PCIStop:LongWord;
Description: To be documented
Note None documented


procedure PCIAsyncStart(Host:PPCIHost);
Description: To be documented
Note None documented


PCI device, driver and host functions

function PCIDeviceAllocate(Host:PPCIHost):PPCIDevice;
Description: Create and Register a new Device entry in the Device table
Host The Host this device is attached to
Return Pointer to new Device entry or nil if device could not be created


function PCIDeviceRelease(Device:PPCIDevice):LongWord;
Description: Deregister and Destroy a Device from the Device table
Device The device to deregister and destroy
Return ERROR_SUCCESS if completed or another error code on failure


function PCIDeviceFind(PCIId:LongWord):PPCIDevice;
Description: To be documented
Note None documented


function PCIDeviceFindById(VendorId,ProductId:Word):PPCIDevice;
Description: To be documented
Note None documented


function PCIDeviceFindByName(const Name:String):PPCIDevice; inline;
Description: To be documented
Note None documented


function PCIDeviceFindByDescription(const Description:String):PPCIDevice; inline;
Description: To be documented
Note None documented


function PCIDeviceEnumerate(Callback:TPCIDeviceEnumerate; Data:Pointer):LongWord;
Description: To be documented
Note None documented


function PCIDeviceNotification(Device:PPCIDevice; Callback:TPCIDeviceNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
Description: To be documented
Note None documented


function PCIDriverCreate:PPCIDriver;
Description: Create a new PCI Driver entry
Return Pointer to new Driver entry or nil if driver could not be created


function PCIDriverCreateEx(Size:LongWord):PPCIDriver;
Description: Create a new PCI Driver entry
Size Size in bytes to allocate for new driver (Including the driver entry)
Return Pointer to new Driver entry or nil if driver could not be created


function PCIDriverDestroy(Driver:PPCIDriver):LongWord;
Description: Destroy an existing PCI Driver entry
Note None documented


function PCIDriverRegister(Driver:PPCIDriver):LongWord;
Description: Register a new PCI Driver in the Driver table
Note None documented


function PCIDriverDeregister(Driver:PPCIDriver):LongWord;
Description: Deregister a PCI Driver from the Driver table
Note None documented


function PCIDriverFind(DriverId:LongWord):PPCIDriver;
Description: Find a driver by Id in the PCI Driver table
Note None documented


function PCIDriverFindByName(const Name:String):PPCIDriver; inline;
Description: Find a driver by name in the Driver table
Note None documented


function PCIDriverEnumerate(Callback:TPCIDriverEnumerate; Data:Pointer):LongWord;
Description: Enumerate all drivers in the PCI Driver table
Note None documented


function PCIHostCreate:PPCIHost;
Description: Create a new Host entry
Return Pointer to new Host entry or nil if host could not be created


function PCIHostCreateEx(Size:LongWord):PPCIHost;
Description: Create a new Host entry
Size Size in bytes to allocate for new host (Including the host entry)
Return Pointer to new Host entry or nil if host could not be created


function PCIHostDestroy(Host:PPCIHost):LongWord;
Description: Destroy an existing Host entry
Note None documented


function PCIHostRegister(Host:PPCIHost):LongWord;
Description: Register a new Host in the Host table
Note None documented


function PCIHostDeregister(Host:PPCIHost):LongWord;
Description: Deregister a Host from the Host table
Note None documented


function PCIHostFind(HostId:LongWord):PPCIHost;
Description: To be documented
Note None documented


function PCIHostFindByName(const Name:String):PPCIHost; inline;
Description: To be documented
Note None documented


function PCIHostFindByDescription(const Description:String):PPCIHost; inline;
Description: To be documented
Note None documented


function PCIHostEnumerate(Callback:TPCIHostEnumerate; Data:Pointer):LongWord;
Description: To be documented
Note None documented


function PCIHostNotification(Host:PPCIHost; Callback:TPCIHostNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
Description: To be documented
Note None documented


PCI device, driver and host helper functions

function PCIDeviceGetCount:LongWord; inline;
Description: Get the current device count
Note None documented


function PCIDeviceCheck(Device:PPCIDevice):PPCIDevice;
Description: Check if the supplied Device is in the device table
Note None documented


function PCIDriverGetCount:LongWord; inline;
Description: Get the current PCI driver count
Note None documented


function PCIDriverCheck(Driver:PPCIDriver):PPCIDriver;
Description: Check if the supplied PCI Driver is in the driver table
Note None documented


function PCIHostGetCount:LongWord; inline;
Description: Get the current host count
Note None documented


function PCIHostCheck(Host:PPCIHost):PPCIHost;
Description: Check if the supplied Host is in the host table
Note None documented


function PCIStatusToString(Status:LongWord):String;
Description: Translates a PCI status code into a string
Note None documented


function PCIDeviceTypeToString(PCIType:LongWord):String;
Description: To be documented
Note None documented


function PCIDeviceStateToString(PCIState:LongWord):String;
Description: To be documented
Note None documented


function PCIDeviceStatusToString(PCIStatus:LongWord):String;
Description: To be documented
Note None documented


function PCIDeviceStateToNotification(State:LongWord):LongWord;
Description: Convert a Device state value into the notification code for device notifications
Note None documented


function PCIDeviceStatusToNotification(Status:LongWord):LongWord;
Description: Convert a Device status value into the notification code for device notifications
Note None documented


function PCIHostTypeToString(HostType:LongWord):String;
Description: To be documented
Note None documented


function PCIHostStateToString(HostState:LongWord):String;
Description: To be documented
Note None documented


function PCIHostStateToNotification(State:LongWord):LongWord;
Description: Convert a Host state value into the notification code for device notifications
Note None documented


procedure PCILog(Level:LongWord;Device:PPCIDevice; const AText:String);
Description: To be documented
Note None documented


procedure PCILogInfo(Device:PPCIDevice; const AText:String); inline;
Description: To be documented
Note None documented


procedure PCILogWarn(Device:PPCIDevice; const AText:String); inline;
Description: To be documented
Note None documented


procedure PCILogError(Device:PPCIDevice; const AText:String); inline;
Description: To be documented
Note None documented


procedure PCILogDebug(Device:PPCIDevice; const AText:String); inline;
Description: To be documented
Note None documented


Return to Unit Reference