Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) .. SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) :Author: Kishon Vijay Abraham I <kishon@ti.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) This document is a guide to use the PCI Endpoint Framework in order to create
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) endpoint controller driver, endpoint function driver, and using configfs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) interface to bind the function driver to the controller driver.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) Introduction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) ============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) Linux has a comprehensive PCI subsystem to support PCI controllers that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) operates in Root Complex mode. The subsystem has capability to scan PCI bus,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) assign memory resources and IRQ resources, load PCI driver (based on
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) vendor ID, device ID), support other services like hot-plug, power management,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) advanced error reporting and virtual channels.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) However the PCI controller IP integrated in some SoCs is capable of operating
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) either in Root Complex mode or Endpoint mode. PCI Endpoint Framework will
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) add endpoint mode support in Linux. This will help to run Linux in an
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) EP system which can have a wide variety of use cases from testing or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) validation, co-processor accelerator, etc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) PCI Endpoint Core
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) =================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) The PCI Endpoint Core layer comprises 3 components: the Endpoint Controller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) library, the Endpoint Function library, and the configfs layer to bind the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) endpoint function with the endpoint controller.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) PCI Endpoint Controller(EPC) Library
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) ------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) The EPC library provides APIs to be used by the controller that can operate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) in endpoint mode. It also provides APIs to be used by function driver/library
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) in order to implement a particular endpoint function.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) APIs for the PCI controller Driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) This section lists the APIs that the PCI Endpoint core provides to be used
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) by the PCI controller driver.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) * devm_pci_epc_create()/pci_epc_create()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46)    The PCI controller driver should implement the following ops:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	 * write_header: ops to populate configuration space header
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	 * set_bar: ops to configure the BAR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 	 * clear_bar: ops to reset the BAR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	 * alloc_addr_space: ops to allocate in PCI controller address space
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	 * free_addr_space: ops to free the allocated address space
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	 * raise_irq: ops to raise a legacy, MSI or MSI-X interrupt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	 * start: ops to start the PCI link
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	 * stop: ops to stop the PCI link
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57)    The PCI controller driver can then create a new EPC device by invoking
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58)    devm_pci_epc_create()/pci_epc_create().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) * devm_pci_epc_destroy()/pci_epc_destroy()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62)    The PCI controller driver can destroy the EPC device created by either
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63)    devm_pci_epc_create() or pci_epc_create() using devm_pci_epc_destroy() or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64)    pci_epc_destroy().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) * pci_epc_linkup()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68)    In order to notify all the function devices that the EPC device to which
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69)    they are linked has established a link with the host, the PCI controller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70)    driver should invoke pci_epc_linkup().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) * pci_epc_mem_init()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74)    Initialize the pci_epc_mem structure used for allocating EPC addr space.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) * pci_epc_mem_exit()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78)    Cleanup the pci_epc_mem structure allocated during pci_epc_mem_init().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) EPC APIs for the PCI Endpoint Function Driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) This section lists the APIs that the PCI Endpoint core provides to be used
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) by the PCI endpoint function driver.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) * pci_epc_write_header()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89)    The PCI endpoint function driver should use pci_epc_write_header() to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90)    write the standard configuration header to the endpoint controller.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) * pci_epc_set_bar()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94)    The PCI endpoint function driver should use pci_epc_set_bar() to configure
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95)    the Base Address Register in order for the host to assign PCI addr space.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96)    Register space of the function driver is usually configured
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97)    using this API.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) * pci_epc_clear_bar()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)    The PCI endpoint function driver should use pci_epc_clear_bar() to reset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)    the BAR.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) * pci_epc_raise_irq()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)    The PCI endpoint function driver should use pci_epc_raise_irq() to raise
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)    Legacy Interrupt, MSI or MSI-X Interrupt.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) * pci_epc_mem_alloc_addr()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)    The PCI endpoint function driver should use pci_epc_mem_alloc_addr(), to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)    allocate memory address from EPC addr space which is required to access
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113)    RC's buffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) * pci_epc_mem_free_addr()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)    The PCI endpoint function driver should use pci_epc_mem_free_addr() to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118)    free the memory space allocated using pci_epc_mem_alloc_addr().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) Other EPC APIs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) ~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) There are other APIs provided by the EPC library. These are used for binding
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) the EPF device with EPC device. pci-ep-cfs.c can be used as reference for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) using these APIs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) * pci_epc_get()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)    Get a reference to the PCI endpoint controller based on the device name of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130)    the controller.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) * pci_epc_put()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)    Release the reference to the PCI endpoint controller obtained using
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135)    pci_epc_get()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) * pci_epc_add_epf()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)    Add a PCI endpoint function to a PCI endpoint controller. A PCIe device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140)    can have up to 8 functions according to the specification.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) * pci_epc_remove_epf()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144)    Remove the PCI endpoint function from PCI endpoint controller.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) * pci_epc_start()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148)    The PCI endpoint function driver should invoke pci_epc_start() once it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)    has configured the endpoint function and wants to start the PCI link.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) * pci_epc_stop()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153)    The PCI endpoint function driver should invoke pci_epc_stop() to stop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)    the PCI LINK.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) PCI Endpoint Function(EPF) Library
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) ----------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) The EPF library provides APIs to be used by the function driver and the EPC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) library to provide endpoint mode functionality.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) EPF APIs for the PCI Endpoint Function Driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) This section lists the APIs that the PCI Endpoint core provides to be used
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) by the PCI endpoint function driver.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) * pci_epf_register_driver()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171)    The PCI Endpoint Function driver should implement the following ops:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	 * bind: ops to perform when a EPC device has been bound to EPF device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	 * unbind: ops to perform when a binding has been lost between a EPC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	   device and EPF device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	 * linkup: ops to perform when the EPC device has established a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	   connection with a host system
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)   The PCI Function driver can then register the PCI EPF driver by using
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)   pci_epf_register_driver().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) * pci_epf_unregister_driver()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183)   The PCI Function driver can unregister the PCI EPF driver by using
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184)   pci_epf_unregister_driver().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) * pci_epf_alloc_space()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)   The PCI Function driver can allocate space for a particular BAR using
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189)   pci_epf_alloc_space().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) * pci_epf_free_space()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193)   The PCI Function driver can free the allocated space
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194)   (using pci_epf_alloc_space) by invoking pci_epf_free_space().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) APIs for the PCI Endpoint Controller Library
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) This section lists the APIs that the PCI Endpoint core provides to be used
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) by the PCI endpoint controller library.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) * pci_epf_linkup()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204)    The PCI endpoint controller library invokes pci_epf_linkup() when the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205)    EPC device has established the connection to the host.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) Other EPF APIs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) ~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) There are other APIs provided by the EPF library. These are used to notify
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) the function driver when the EPF device is bound to the EPC device.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) pci-ep-cfs.c can be used as reference for using these APIs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) * pci_epf_create()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216)    Create a new PCI EPF device by passing the name of the PCI EPF device.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217)    This name will be used to bind the EPF device to a EPF driver.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) * pci_epf_destroy()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221)    Destroy the created PCI EPF device.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) * pci_epf_bind()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225)    pci_epf_bind() should be invoked when the EPF device has been bound to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226)    a EPC device.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) * pci_epf_unbind()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230)    pci_epf_unbind() should be invoked when the binding between EPC device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231)    and EPF device is lost.