Difference between revisions of "Unit PCI"
From Ultibo.org
Line 160: | Line 160: | ||
---- | ---- | ||
− | '' | + | |
+ | '''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
Contents
[hide]Description
Ultibo PCI/PCIe interface unit
Constants
[Expand]
PCI device, driver and host specific constants
PCI_*
[Expand]
PCI device type
PCI_TYPE_*
[Expand]
PCI device flag
PCI_FLAG_*
[Expand]
PCI host type
PCIHOST_TYPE_*
[Expand]
PCI host state
PCIHOST_STATE_*
[Expand]
PCI host flag
PCIHOST_FLAG_*
[Expand]
PCI status code
PCI_STATUS_*
[Expand]
PCI logging
PCI_LOG_*
Type definitions
PCI device
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
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
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
[Expand]
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
[Expand]
function PCIStart:LongWord;
Description: Starts all registered PCI hosts and begins the PCI enumeration process
PCI device, driver and host functions
[Expand]
function PCIDeviceAllocate(Host:PPCIHost):PPCIDevice;
Description: Create and Register a new Device entry in the Device table
[Expand]
function PCIDeviceRelease(Device:PPCIDevice):LongWord;
Description: Deregister and Destroy a Device from the Device table
[Expand]
function PCIDeviceFindById(VendorId,ProductId:Word):PPCIDevice;
Description: To be documented
[Expand]
function PCIDeviceFindByName(const Name:String):PPCIDevice; inline;
Description: To be documented
[Expand]
function PCIDeviceFindByDescription(const Description:String):PPCIDevice; inline;
Description: To be documented
[Expand]
function PCIDeviceEnumerate(Callback:TPCIDeviceEnumerate; Data:Pointer):LongWord;
Description: To be documented
[Expand]
function PCIDeviceNotification(Device:PPCIDevice; Callback:TPCIDeviceNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
Description: To be documented
[Expand]
function PCIDriverCreateEx(Size:LongWord):PPCIDriver;
Description: Create a new Driver entry
[Expand]
function PCIDriverDestroy(Driver:PPCIDriver):LongWord;
Description: Destroy an existing Driver entry
[Expand]
function PCIDriverRegister(Driver:PPCIDriver):LongWord;
Description: Register a new Driver in the Driver table
[Expand]
function PCIDriverDeregister(Driver:PPCIDriver):LongWord;
Description: Deregister a Driver from the Driver table
[Expand]
function PCIDriverFindByName(const Name:String):PPCIDriver; inline;
Description: To be documented
[Expand]
function PCIDriverEnumerate(Callback:TPCIDriverEnumerate; Data:Pointer):LongWord;
Description: To be documented
[Expand]
function PCIHostDestroy(Host:PPCIHost):LongWord;
Description: Destroy an existing Host entry
[Expand]
function PCIHostRegister(Host:PPCIHost):LongWord;
Description: Register a new Host in the Host table
[Expand]
function PCIHostDeregister(Host:PPCIHost):LongWord;
Description: Deregister a Host from the Host table
[Expand]
function PCIHostFindByName(const Name:String):PPCIHost; inline;
Description: To be documented
[Expand]
function PCIHostFindByDescription(const Description:String):PPCIHost; inline;
Description: To be documented
[Expand]
function PCIHostEnumerate(Callback:TPCIHostEnumerate; Data:Pointer):LongWord;
Description: To be documented
[Expand]
function PCIHostNotification(Host:PPCIHost; Callback:TPCIHostNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
Description: To be documented
PCI device, driver and host helper functions
[Expand]
function PCIDeviceCheck(Device:PPCIDevice):PPCIDevice;
Description: Check if the supplied Device is in the device table
[Expand]
function PCIDriverCheck(Driver:PPCIDriver):PPCIDriver;
Description: Check if the supplied Driver is in the driver table
[Expand]
function PCIHostCheck(Host:PPCIHost):PPCIHost;
Description: Check if the supplied Host is in the host table
[Expand]
function PCIStatusToString(Status:LongWord):String;
Description: Translates a PCI status code into a string
[Expand]
procedure PCILog(Level:LongWord;Device:PPCIDevice; const AText:String);
Description: To be documented
[Expand]
procedure PCILogInfo(Device:PPCIDevice; const AText:String); inline;
Description: To be documented
[Expand]
procedure PCILogWarn(Device:PPCIDevice; const AText:String); inline;
Description: To be documented
[Expand]
procedure PCILogError(Device:PPCIDevice; const AText:String); inline;
Description: To be documented
[Expand]
procedure PCILogDebug(Device:PPCIDevice; const AText:String); inline;
Description: To be documented
Return to Unit Reference