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