|
@@ -0,0 +1,105 @@
|
|
|
+ CONFIGURING PCI ENDPOINT USING CONFIGFS
|
|
|
+ Kishon Vijay Abraham I <kishon@ti.com>
|
|
|
+
|
|
|
+The PCI Endpoint Core exposes configfs entry (pci_ep) to configure the
|
|
|
+PCI endpoint function and to bind the endpoint function
|
|
|
+with the endpoint controller. (For introducing other mechanisms to
|
|
|
+configure the PCI Endpoint Function refer to [1]).
|
|
|
+
|
|
|
+*) Mounting configfs
|
|
|
+
|
|
|
+The PCI Endpoint Core layer creates pci_ep directory in the mounted configfs
|
|
|
+directory. configfs can be mounted using the following command.
|
|
|
+
|
|
|
+ mount -t configfs none /sys/kernel/config
|
|
|
+
|
|
|
+*) Directory Structure
|
|
|
+
|
|
|
+The pci_ep configfs has two directories at its root: controllers and
|
|
|
+functions. Every EPC device present in the system will have an entry in
|
|
|
+the *controllers* directory and and every EPF driver present in the system
|
|
|
+will have an entry in the *functions* directory.
|
|
|
+
|
|
|
+/sys/kernel/config/pci_ep/
|
|
|
+ .. controllers/
|
|
|
+ .. functions/
|
|
|
+
|
|
|
+*) Creating EPF Device
|
|
|
+
|
|
|
+Every registered EPF driver will be listed in controllers directory. The
|
|
|
+entries corresponding to EPF driver will be created by the EPF core.
|
|
|
+
|
|
|
+/sys/kernel/config/pci_ep/functions/
|
|
|
+ .. <EPF Driver1>/
|
|
|
+ ... <EPF Device 11>/
|
|
|
+ ... <EPF Device 21>/
|
|
|
+ .. <EPF Driver2>/
|
|
|
+ ... <EPF Device 12>/
|
|
|
+ ... <EPF Device 22>/
|
|
|
+
|
|
|
+In order to create a <EPF device> of the type probed by <EPF Driver>, the
|
|
|
+user has to create a directory inside <EPF DriverN>.
|
|
|
+
|
|
|
+Every <EPF device> directory consists of the following entries that can be
|
|
|
+used to configure the standard configuration header of the endpoint function.
|
|
|
+(These entries are created by the framework when any new <EPF Device> is
|
|
|
+created)
|
|
|
+
|
|
|
+ .. <EPF Driver1>/
|
|
|
+ ... <EPF Device 11>/
|
|
|
+ ... vendorid
|
|
|
+ ... deviceid
|
|
|
+ ... revid
|
|
|
+ ... progif_code
|
|
|
+ ... subclass_code
|
|
|
+ ... baseclass_code
|
|
|
+ ... cache_line_size
|
|
|
+ ... subsys_vendor_id
|
|
|
+ ... subsys_id
|
|
|
+ ... interrupt_pin
|
|
|
+
|
|
|
+*) EPC Device
|
|
|
+
|
|
|
+Every registered EPC device will be listed in controllers directory. The
|
|
|
+entries corresponding to EPC device will be created by the EPC core.
|
|
|
+
|
|
|
+/sys/kernel/config/pci_ep/controllers/
|
|
|
+ .. <EPC Device1>/
|
|
|
+ ... <Symlink EPF Device11>/
|
|
|
+ ... <Symlink EPF Device12>/
|
|
|
+ ... start
|
|
|
+ .. <EPC Device2>/
|
|
|
+ ... <Symlink EPF Device21>/
|
|
|
+ ... <Symlink EPF Device22>/
|
|
|
+ ... start
|
|
|
+
|
|
|
+The <EPC Device> directory will have a list of symbolic links to
|
|
|
+<EPF Device>. These symbolic links should be created by the user to
|
|
|
+represent the functions present in the endpoint device.
|
|
|
+
|
|
|
+The <EPC Device> directory will also have a *start* field. Once
|
|
|
+"1" is written to this field, the endpoint device will be ready to
|
|
|
+establish the link with the host. This is usually done after
|
|
|
+all the EPF devices are created and linked with the EPC device.
|
|
|
+
|
|
|
+
|
|
|
+ | controllers/
|
|
|
+ | <Directory: EPC name>/
|
|
|
+ | <Symbolic Link: Function>
|
|
|
+ | start
|
|
|
+ | functions/
|
|
|
+ | <Directory: EPF driver>/
|
|
|
+ | <Directory: EPF device>/
|
|
|
+ | vendorid
|
|
|
+ | deviceid
|
|
|
+ | revid
|
|
|
+ | progif_code
|
|
|
+ | subclass_code
|
|
|
+ | baseclass_code
|
|
|
+ | cache_line_size
|
|
|
+ | subsys_vendor_id
|
|
|
+ | subsys_id
|
|
|
+ | interrupt_pin
|
|
|
+ | function
|
|
|
+
|
|
|
+[1] -> Documentation/PCI/endpoint/pci-endpoint.txt
|