| 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 |