Difference between revisions of "Unit PCI"

From Ultibo.org
Jump to: navigation, search
Line 160: Line 160:
 
----
 
----
  
''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>Host:PPCIHost;</code>
 +
| Host controller this PCI device is connected to (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>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 ===

Revision as of 02:15, 22 July 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 flag PCI_FLAG_*
PCI_FLAG_NONE = $00000000;  


PCI host type PCIHOST_TYPE_*
PCIHOST_TYPE_NONE = 0;  
 
PCIHOST_TYPE_MAX = 0;  
 
PCIHOST_TYPE_NAMES:array[PCIHOST_TYPE_NONE..PCIHOST_TYPE_MAX] of String = ('PCIHOST_TYPE_NONE');  


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
Host:PPCIHost; Host controller this PCI device is connected to (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
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 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 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 Driver entry
Note None documented


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


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


function PCIDriverFind(DriverId:LongWord):PPCIDriver;
Description: To be documented
Note None documented


function PCIDriverFindByName(const Name:String):PPCIDriver; inline;
Description: To be documented
Note None documented


function PCIDriverEnumerate(Callback:TPCIDriverEnumerate; Data:Pointer):LongWord;
Description: To be documented
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 driver count
Note None documented


function PCIDriverCheck(Driver:PPCIDriver):PPCIDriver;
Description: Check if the supplied 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


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