PCI 支持库¶
-
unsigned char pci_bus_max_busnr(struct pci_bus *bus)¶
返回给定总线的子总线的最大 PCI 总线号
参数
struct pci_bus *bus
指向要搜索的 PCI 总线结构的指针
描述
给定一个 PCI 总线,返回该 PCI 总线及其子 PCI 总线列表中存在的最高 PCI 总线号。
-
int pci_status_get_and_clear_errors(struct pci_dev *pdev)¶
返回并清除 PCI_STATUS 中的错误位
参数
struct pci_dev *pdev
PCI 设备
描述
返回 PCI_STATUS 中设置的错误位并清除它们。
-
u8 pci_find_capability(struct pci_dev *dev, int cap)¶
查询设备的功能
参数
struct pci_dev *dev
要查询的 PCI 设备
int cap
功能代码
描述
判断设备是否支持给定的 PCI 功能。返回设备 PCI 配置空间中请求的功能结构的地址,如果设备不支持该功能则返回 0。cap 的可能值包括
PCI_CAP_ID_PM
电源管理PCI_CAP_ID_AGP
加速图形端口PCI_CAP_ID_VPD
重要产品数据PCI_CAP_ID_SLOTID
插槽标识PCI_CAP_ID_MSI
消息信号中断PCI_CAP_ID_CHSWP
CompactPCI 热插拔PCI_CAP_ID_PCIX
PCI-XPCI_CAP_ID_EXP
PCI Express
-
u8 pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap)¶
查询设备的功能
参数
struct pci_bus *bus
要查询的 PCI 总线
unsigned int devfn
要查询的 PCI 设备
int cap
功能代码
描述
类似于 pci_find_capability()
,但适用于尚未设置 pci_dev 结构的 PCI 设备。
返回设备 PCI 配置空间中请求的功能结构的地址,如果设备不支持该功能则返回 0。
-
u16 pci_find_next_ext_capability(struct pci_dev *dev, u16 start, int cap)¶
查找扩展功能
参数
struct pci_dev *dev
要查询的 PCI 设备
u16 start
开始查找的地址(0 从列表开头开始)
int cap
功能代码
描述
返回设备 PCI 配置空间中下一个匹配的扩展功能结构的地址,如果设备不支持该功能则返回 0。某些功能可能会出现多次,例如,特定于供应商的功能,这提供了一种找到所有功能的方法。
-
u16 pci_find_ext_capability(struct pci_dev *dev, int cap)¶
查找扩展功能
参数
struct pci_dev *dev
要查询的 PCI 设备
int cap
功能代码
描述
返回设备 PCI 配置空间中请求的扩展功能结构的地址,如果设备不支持该功能则返回 0。cap 的可能值包括
PCI_EXT_CAP_ID_ERR
高级错误报告PCI_EXT_CAP_ID_VC
虚拟通道PCI_EXT_CAP_ID_DSN
设备序列号PCI_EXT_CAP_ID_PWR
电源预算
-
u64 pci_get_dsn(struct pci_dev *dev)¶
读取并返回 8 字节的设备序列号
参数
struct pci_dev *dev
要查询的 PCI 设备
描述
查找 PCI_EXT_CAP_ID_DSN 并读取 8 个字节的设备序列号。
返回 DSN,如果该功能不存在则返回零。
-
u8 pci_find_next_ht_capability(struct pci_dev *dev, u8 pos, int ht_cap)¶
查询设备的 HyperTransport 功能
参数
struct pci_dev *dev
要查询的 PCI 设备
u8 pos
继续搜索的位置
int ht_cap
HyperTransport 功能代码
描述
与 pci_find_ht_capability()
结合使用,以搜索所有匹配 ht_cap 的功能。pos 应始终是 pci_find_ht_capability()
返回的值。
注意。为了 100% 安全地防止损坏的 PCI 设备,调用者应采取措施避免无限循环。
-
u8 pci_find_ht_capability(struct pci_dev *dev, int ht_cap)¶
查询设备的 HyperTransport 功能
参数
struct pci_dev *dev
要查询的 PCI 设备
int ht_cap
HyperTransport 功能代码
描述
判断设备是否支持给定的 HyperTransport 功能。返回设备 PCI 配置空间中的地址,如果设备不支持请求的功能,则返回 0。该地址指向 PCI 功能,类型为 PCI_CAP_ID_HT,其具有与 ht_cap 匹配的 HyperTransport 功能。
-
u16 pci_find_vsec_capability(struct pci_dev *dev, u16 vendor, int cap)¶
查找特定于供应商的扩展功能
参数
struct pci_dev *dev
要查询的 PCI 设备
u16 vendor
定义功能的供应商 ID
int cap
特定于供应商的功能 ID
描述
如果 dev 的供应商 ID 为 vendor,则搜索 VSEC 能力,其 VSEC ID 为 cap。如果找到,则返回配置空间中的能力偏移量;否则返回 0。
-
u16 pci_find_dvsec_capability(struct pci_dev *dev, u16 vendor, u16 dvsec)¶
查找供应商的 DVSEC
参数
struct pci_dev *dev
要查询的 PCI 设备
u16 vendor
要匹配 DVSEC 的供应商 ID
u16 dvsec
指定的供应商特定能力 ID
描述
如果 DVSEC 的供应商 ID 为 vendor 且 DVSEC ID 为 dvsec,则返回配置空间中的能力偏移量;否则返回 0。
-
struct resource *pci_find_parent_resource(const struct pci_dev *dev, struct resource *res)¶
返回给定区域的父总线的资源区域
参数
const struct pci_dev *dev
PCI 设备结构包含要搜索的资源
struct resource *res
要查找父资源的子资源记录
描述
对于给定设备的给定资源区域,返回包含给定区域的父总线的资源区域。
-
struct resource *pci_find_resource(struct pci_dev *dev, struct resource *res)¶
返回匹配的 PCI 设备资源
参数
struct pci_dev *dev
要查询的 PCI 设备
struct resource *res
要查找的资源
描述
遍历标准 PCI 资源(BAR),并检查给定的资源是否部分或完全包含在其中任何一个中。在这种情况下,返回匹配的资源,否则返回 NULL
。
-
int pcie_read_tlp_log(struct pci_dev *dev, int where, struct pcie_tlp_log *tlp_log)¶
读取 TLP 报头日志
参数
struct pci_dev *dev
PCIe 设备
int where
TLP 报头日志的 PCI 配置偏移量
struct pcie_tlp_log *tlp_log
要填充的 TLP 日志结构
描述
从 TLP 报头日志寄存器(例如,AER 或 DPC)填充 tlp_log。
返回
成功时返回 0 并填充 TLP 日志结构,错误时返回 <0。
-
int pci_platform_power_transition(struct pci_dev *dev, pci_power_t state)¶
使用平台更改设备电源状态
参数
struct pci_dev *dev
要处理的 PCI 设备。
pci_power_t state
设备要进入的状态。
-
int pci_set_power_state(struct pci_dev *dev, pci_power_t state)¶
设置 PCI 设备的电源状态
参数
struct pci_dev *dev
要处理的 PCI 设备。
pci_power_t state
设备要进入的 PCI 电源状态(D0、D1、D2、D3hot)。
描述
使用平台固件和/或设备的 PCI PM 寄存器将设备转换为新的电源状态。
返回值:如果请求的状态无效,则返回 -EINVAL。如果设备不支持 PCI PM 或其 PM 功能寄存器的版本错误,或者设备不支持请求的状态,则返回 -EIO。如果转换到 D1 或 D2 但不支持 D1 和 D2,则返回 0。如果设备已处于请求的状态,则返回 0。如果转换到 D3 但不支持 D3,则返回 0。如果设备的电源状态已成功更改,则返回 0。
-
int pci_save_state(struct pci_dev *dev)¶
在暂停之前保存设备的 PCI 配置空间
参数
struct pci_dev *dev
我们正在处理的 PCI 设备
-
void pci_restore_state(struct pci_dev *dev)¶
恢复 PCI 设备已保存的状态
参数
struct pci_dev *dev
我们正在处理的 PCI 设备
-
struct pci_saved_state *pci_store_saved_state(struct pci_dev *dev)¶
分配并返回一个包含设备已保存状态的不透明结构。
参数
struct pci_dev *dev
我们正在处理的 PCI 设备
描述
如果无状态或错误,则返回 NULL。
-
int pci_load_saved_state(struct pci_dev *dev, struct pci_saved_state *state)¶
将提供的已保存状态重新加载到 struct pci_dev 中。
参数
struct pci_dev *dev
我们正在处理的 PCI 设备
struct pci_saved_state *state
从
pci_store_saved_state()
返回的已保存状态
-
int pci_load_and_free_saved_state(struct pci_dev *dev, struct pci_saved_state **state)¶
重新加载 state 指向的已保存状态,并释放为其分配的内存。
参数
struct pci_dev *dev
我们正在处理的 PCI 设备
struct pci_saved_state **state
指向从
pci_store_saved_state()
返回的已保存状态的指针
-
int pci_reenable_device(struct pci_dev *dev)¶
恢复已放弃的设备
参数
struct pci_dev *dev
要恢复的 PCI 设备
注意
此函数是 pci_default_resume() 的后端,不应由普通代码调用,请编写适当的恢复处理程序并改用它。
-
int pci_enable_device_mem(struct pci_dev *dev)¶
初始化设备以与内存空间一起使用
参数
struct pci_dev *dev
要初始化的 PCI 设备
描述
在驱动程序使用设备之前初始化设备。请求底层代码启用内存资源。如果设备已暂停,则唤醒设备。注意,此函数可能会失败。
-
int pci_enable_device(struct pci_dev *dev)¶
在驱动程序使用设备之前初始化设备。
参数
struct pci_dev *dev
要初始化的 PCI 设备
描述
在驱动程序使用设备之前初始化设备。请求底层代码启用 I/O 和内存。如果设备处于挂起状态,则唤醒设备。请注意,此函数可能会失败。
注意,如果我们重复调用此函数,实际上我们不会多次启用设备(我们只是增加计数)。
-
void pci_disable_device(struct pci_dev *dev)¶
在使用后禁用 PCI 设备
参数
struct pci_dev *dev
要禁用的 PCI 设备
描述
向系统发出信号,表示该 PCI 设备不再被系统使用。这仅涉及禁用 PCI 总线主控(如果处于活动状态)。
请注意,直到所有调用 pci_enable_device()
的调用者都调用了 pci_disable_device()
之后,我们才真正禁用该设备。
-
int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state)¶
为设备 dev 设置重置状态
参数
struct pci_dev *dev
PCIe 设备重置
enum pcie_reset_state state
要进入的重置状态
描述
设置设备的 PCI 重置状态。
-
bool pci_pme_capable(struct pci_dev *dev, pci_power_t state)¶
检查 PCI 设备生成 PME# 的能力
参数
struct pci_dev *dev
要处理的 PCI 设备。
pci_power_t state
设备将从中发出 PME# 的 PCI 状态。
-
void pci_pme_active(struct pci_dev *dev, bool enable)¶
启用或禁用 PCI 设备的 PME# 功能
参数
struct pci_dev *dev
要处理的 PCI 设备。
bool enable
“true” 启用 PME# 生成;“false” 禁用它。
描述
调用者必须在调用此函数时将 enable 设置为 “true” 之前,验证设备是否能够生成 PME#。
参数
struct pci_dev *pci_dev
目标设备
pci_power_t state
设备将从中发出唤醒事件的 PCI 状态
bool enable
是否启用事件生成
描述
如果设置了 enable,则在为其调用 __pci_enable_wake() 之前,请检查设备的 device_may_wakeup()。
-
int pci_wake_from_d3(struct pci_dev *dev, bool enable)¶
启用/禁用设备从 D3_hot 或 D3_cold 唤醒
参数
struct pci_dev *dev
要准备的 PCI 设备
bool enable
如果为 True 则启用唤醒事件生成;如果为 false 则禁用
描述
许多驱动程序希望设备从 D3_hot 或 D3_cold 唤醒系统,并且此函数允许它们干净地进行设置 - 由于 PCI PM 与 ACPI 排序约束,不应连续两次调用 pci_enable_wake()
来启用唤醒。
只有在不允许设备从睡眠中唤醒系统,或者它不能从 D3_hot 和 D3_cold 生成 PME#,并且平台无法为其启用唤醒电源时,此函数才会返回错误代码。
-
int pci_prepare_to_sleep(struct pci_dev *dev)¶
准备 PCI 设备,以便在系统范围转换到睡眠状态时使用
参数
struct pci_dev *dev
要处理的设备。
描述
根据设备是否可以唤醒系统和/或是否可以通过平台(默认值为 PCI_D3hot)进行电源管理来选择适合设备的电源状态,并将设备置于该状态。
-
int pci_back_from_sleep(struct pci_dev *dev)¶
在系统范围转换到工作状态时打开 PCI 设备
参数
struct pci_dev *dev
要处理的设备。
描述
禁用设备的系统唤醒功能并将其置于 D0。
-
bool pci_dev_run_wake(struct pci_dev *dev)¶
检查设备是否可以生成运行时唤醒事件。
参数
struct pci_dev *dev
要检查的设备。
描述
如果设备本身能够生成唤醒事件(通过平台或使用本机 PCIe PME),或者如果设备支持 PME 并且其上游桥接器之一可以生成唤醒事件,则返回 true。
-
pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state)¶
选择 PCI 设备的电源状态。
参数
struct pci_dev *dev
目标 PCI 设备。
pm_message_t state
整个系统的目标状态。
描述
返回适合 dev 和 state 的 PCI 电源状态。
-
void pci_d3cold_enable(struct pci_dev *dev)¶
为设备启用 D3cold
参数
struct pci_dev *dev
要处理的 PCI 设备
描述
驱动程序可以使用此函数从它们处理的设备中启用 D3cold。它还会相应地更新上游 PCI 桥接器的 PM 功能。
-
void pci_d3cold_disable(struct pci_dev *dev)¶
为设备禁用 D3cold
参数
struct pci_dev *dev
要处理的 PCI 设备
描述
驱动程序可以使用此函数从它们处理的设备中禁用 D3cold。它还会相应地更新上游 PCI 桥接器的 PM 功能。
-
u32 pci_rebar_get_possible_sizes(struct pci_dev *pdev, int bar)¶
获取 BAR 的可能大小
参数
struct pci_dev *pdev
PCI 设备
int bar
要查询的 BAR
描述
获取可调整大小的 BAR 的可能大小,它在规范中定义为位掩码(第 0 位=1MB,第 19 位=512GB)。如果 BAR 不可调整大小,则返回 0。
-
int pci_enable_atomic_ops_to_root(struct pci_dev *dev, u32 cap_mask)¶
启用到根端口的 AtomicOp 请求
参数
struct pci_dev *dev
PCI 设备
u32 cap_mask
所需 AtomicOp 大小的掩码,包括以下一个或多个:PCI_EXP_DEVCAP2_ATOMIC_COMP32 PCI_EXP_DEVCAP2_ATOMIC_COMP64 PCI_EXP_DEVCAP2_ATOMIC_COMP128
描述
如果所有上游桥都支持 AtomicOp 路由,所有上游端口都禁用出口阻塞,并且根端口支持请求的完成能力(32 位、64 位和/或 128 位 AtomicOp 完成),则返回 0,否则返回负数。
-
void pci_release_region(struct pci_dev *pdev, int bar)¶
释放 PCI BAR
参数
struct pci_dev *pdev
其资源之前由
pci_request_region()
保留的 PCI 设备int bar
要释放的 BAR
描述
释放之前通过成功调用 pci_request_region()
保留的 PCI I/O 和内存资源。 只有在 PCI 区域的所有使用都已停止后才能调用此函数。
-
int pci_request_region(struct pci_dev *pdev, int bar, const char *res_name)¶
保留 PCI I/O 和内存资源
参数
struct pci_dev *pdev
要保留其资源的 PCI 设备
int bar
要保留的 BAR
const char *res_name
要与资源关联的名称
返回
成功时返回 0,失败时返回负错误代码。
描述
将与 PCI 设备 pdev 的 BAR bar 关联的 PCI 区域标记为由所有者 res_name 保留。除非此调用成功返回,否则不要访问 PCI 区域内的任何地址。
成功时返回 0,或错误时返回 EBUSY
。 失败时也会打印警告消息。
注意
这是一个“混合”函数:它通常是未管理的,但在提前调用 pcim_enable_device()
时变为托管。 此混合功能已弃用! 如果您需要托管清理,请改用 pcim_* 函数。
-
void pci_release_selected_regions(struct pci_dev *pdev, int bars)¶
释放选定的 PCI I/O 和内存资源
参数
struct pci_dev *pdev
其资源之前被保留的 PCI 设备
int bars
要释放的 BAR 的位掩码
描述
释放之前保留的选定 PCI I/O 和内存资源。 只有在 PCI 区域的所有使用都已停止后才能调用此函数。
-
int pci_request_selected_regions(struct pci_dev *pdev, int bars, const char *res_name)¶
保留选定的 PCI I/O 和内存资源
参数
struct pci_dev *pdev
要保留其资源的 PCI 设备
int bars
要请求的 BAR 的位掩码
const char *res_name
要与资源关联的名称
返回
成功时返回 0,失败时返回负错误代码。
注意
这是一个“混合”函数:它通常是未管理的,但在提前调用 pcim_enable_device()
时变为托管。 此混合功能已弃用! 如果您需要托管清理,请改用 pcim_* 函数。
-
int pci_request_selected_regions_exclusive(struct pci_dev *pdev, int bars, const char *res_name)¶
独占请求区域
参数
struct pci_dev *pdev
从中请求区域的 PCI 设备
int bars
要请求的 BAR 的位掩码
const char *res_name
要与请求关联的名称
返回
成功时返回 0,失败时返回负错误代码。
注意
这是一个“混合”函数:它通常是未管理的,但在提前调用 pcim_enable_device()
时变为托管。 此混合功能已弃用! 如果您需要托管清理,请改用 pcim_* 函数。
-
void pci_release_regions(struct pci_dev *pdev)¶
释放保留的 PCI I/O 和内存资源
参数
struct pci_dev *pdev
其资源之前由
pci_request_regions()
保留的 PCI 设备
描述
释放之前通过成功调用 pci_request_regions()
保留的所有 PCI I/O 和内存资源。 只有在 PCI 区域的所有使用都已停止后才能调用此函数。
-
int pci_request_regions(struct pci_dev *pdev, const char *res_name)¶
保留 PCI I/O 和内存资源
参数
struct pci_dev *pdev
要保留其资源的 PCI 设备
const char *res_name
要与资源关联的名称。
描述
将与 PCI 设备 pdev 关联的所有 PCI 区域标记为由所有者 res_name 保留。 除非此调用成功返回,否则不要访问 PCI 区域内的任何地址。
成功时返回 0,或错误时返回 EBUSY
。 失败时也会打印警告消息。
注意
这是一个“混合”函数:它通常是未管理的,但在提前调用 pcim_enable_device()
时变为托管。 此混合功能已弃用! 如果您需要托管清理,请改用 pcim_* 函数。
-
int pci_request_regions_exclusive(struct pci_dev *pdev, const char *res_name)¶
保留 PCI I/O 和内存资源
参数
struct pci_dev *pdev
要保留其资源的 PCI 设备
const char *res_name
要与资源关联的名称。
返回
成功时返回 0,失败时返回负错误代码。
描述
将与 PCI 设备 pdev 关联的所有 PCI 区域标记为由所有者 res_name 保留。 除非此调用成功返回,否则不要访问 PCI 区域内的任何地址。
pci_request_regions_exclusive()
将标记该区域,以便不允许 /dev/mem 和 sysfs MMIO 访问。
成功时返回 0,或错误时返回 EBUSY
。 失败时也会打印警告消息。
注意
这是一个“混合”函数:它通常是未管理的,但在提前调用 pcim_enable_device()
时变为托管。 此混合功能已弃用! 如果您需要托管清理,请改用 pcim_* 函数。
-
int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr)¶
重新映射内存映射 I/O 空间
参数
const struct resource *res
描述 I/O 空间的资源
phys_addr_t phys_addr
要映射的范围的物理地址
描述
将 res 描述的内存映射 I/O 空间和 CPU 物理地址 phys_addr 重新映射到虚拟地址空间。 只有定义了内存映射 IO 函数(且定义了 PCI_IOBASE 值)的体系结构才应调用此函数。
-
void pci_unmap_iospace(struct resource *res)¶
取消映射内存映射 I/O 空间
参数
struct resource *res
要取消映射的资源
描述
从虚拟地址空间取消映射 CPU 虚拟地址 res。 只有定义了内存映射 IO 函数(且定义了 PCI_IOBASE 值)的体系结构才应调用此函数。
-
void pci_set_master(struct pci_dev *dev)¶
为设备 dev 启用总线主控
参数
struct pci_dev *dev
要启用的 PCI 设备
描述
在设备上启用总线主控并调用 pcibios_set_master() 以执行所需的特定于架构的设置。
-
void pci_clear_master(struct pci_dev *dev)¶
为设备 dev 禁用总线主控
参数
struct pci_dev *dev
要禁用的 PCI 设备
-
int pci_set_cacheline_size(struct pci_dev *dev)¶
确保已编程 CACHE_LINE_SIZE 寄存器
参数
struct pci_dev *dev
要为其启用 MWI 的 PCI 设备
描述
pci_set_mwi 的辅助函数。最初从 drivers/net/acenic.c 复制而来。版权归 Jes Sorensen 所有,1998-2001, <jes**trained**-monkey.org>。
返回
错误时返回合适的 -ERRNO 错误值,成功时返回零。
-
int pci_set_mwi(struct pci_dev *dev)¶
启用内存写入失效 PCI 事务
参数
struct pci_dev *dev
为其启用 MWI 的 PCI 设备
描述
在 PCI_COMMAND
中启用内存写入失效事务。
返回
错误时返回合适的 -ERRNO 错误值,成功时返回零。
-
int pci_try_set_mwi(struct pci_dev *dev)¶
启用内存写入失效 PCI 事务
参数
struct pci_dev *dev
为其启用 MWI 的 PCI 设备
描述
在 PCI_COMMAND
中启用内存写入失效事务。调用者无需检查返回值。
返回
错误时返回合适的 -ERRNO 错误值,成功时返回零。
-
void pci_clear_mwi(struct pci_dev *dev)¶
为设备 dev 禁用内存写入失效
参数
struct pci_dev *dev
要禁用的 PCI 设备
描述
禁用设备上的 PCI 内存写入失效事务
-
void pci_intx(struct pci_dev *pdev, int enable)¶
为设备 dev 启用/禁用 PCI INTx
参数
struct pci_dev *pdev
要操作的 PCI 设备
int enable
布尔值:是否启用或禁用 PCI INTx
描述
为设备 pdev 启用/禁用 PCI INTx
注意
这是一个“混合”函数:它通常是未管理的,但是当事先调用了 pcim_enable_device()
时,它变为受管理的。此混合功能已**弃用**!如果您想要受管理的清理,请改用 pcim_intx()。
-
int pci_wait_for_pending_transaction(struct pci_dev *dev)¶
等待挂起的事务
参数
struct pci_dev *dev
要操作的 PCI 设备
描述
如果事务挂起,则返回 0,否则返回 1。
-
int pcie_flr(struct pci_dev *dev)¶
启动 PCIe 功能级别重置
参数
struct pci_dev *dev
要重置的设备
描述
在 dev 上无条件启动功能级别重置,而不检查任何标志和 DEVCAP
-
int pcie_reset_flr(struct pci_dev *dev, bool probe)¶
启动 PCIe 功能级别重置
参数
struct pci_dev *dev
要重置的设备
bool probe
如果为 true,如果设备可以通过这种方式重置,则返回 0
描述
在 dev 上启动功能级别重置。
-
int pci_bridge_secondary_bus_reset(struct pci_dev *dev)¶
重置 PCI 桥上的二级总线。
参数
struct pci_dev *dev
桥设备
描述
使用桥控制寄存器来断言二级总线上的重置。二级总线上的设备保持在开机状态。
-
int __pci_reset_function_locked(struct pci_dev *dev)¶
在保持 dev 互斥锁的同时重置 PCI 设备功能。
参数
struct pci_dev *dev
要重置的 PCI 设备
描述
某些设备允许重置单个功能,而不影响同一设备中的其他功能。为了使用此函数,PCI 设备必须响应 PCI 配置空间。
当调用此函数时,假定设备功能未使用,并且调用者持有设备互斥锁。
重置设备将使 PCI 配置空间的内容随机,因此任何调用者都必须准备好重新初始化设备,包括 MSI、总线主控、BAR、解码 IO 和内存空间等。
如果设备功能已成功重置,则返回 0,如果设备不支持重置单个功能,则返回负数。
-
int pci_reset_function(struct pci_dev *dev)¶
停止并重置 PCI 设备功能
参数
struct pci_dev *dev
要重置的 PCI 设备
描述
某些设备允许重置单个功能,而不影响同一设备中的其他功能。为了使用此函数,PCI 设备必须响应 PCI 配置空间。
此函数不仅重置设备的 PCI 部分,还清除与设备关联的所有状态。此函数与 __pci_reset_function_locked()
不同之处在于,它在重置时保存和恢复设备状态,并获取 PCI 设备锁。
如果设备功能已成功重置,则返回 0,如果设备不支持重置单个功能,则返回负数。
-
int pci_reset_function_locked(struct pci_dev *dev)¶
停止并重置 PCI 设备功能
参数
struct pci_dev *dev
要重置的 PCI 设备
描述
某些设备允许重置单个功能,而不影响同一设备中的其他功能。为了使用此函数,PCI 设备必须响应 PCI 配置空间。
此函数不仅重置设备的 PCI 部分,还清除与设备关联的所有状态。此函数与 __pci_reset_function_locked()
不同之处在于,它在重置时保存和恢复设备状态。它也与 pci_reset_function()
不同,因为它要求持有 PCI 设备锁。
如果设备功能已成功重置,则返回 0,如果设备不支持重置单个功能,则返回负数。
-
int pci_try_reset_function(struct pci_dev *dev)¶
停止并重置 PCI 设备功能
参数
struct pci_dev *dev
要重置的 PCI 设备
描述
与上述相同,如果无法锁定设备,则返回 -EAGAIN。
-
int pci_probe_reset_slot(struct pci_slot *slot)¶
探测是否可以重置 PCI 插槽
参数
struct pci_slot *slot
要探测的 PCI 插槽
描述
如果可以重置插槽,则返回 0,如果不支持插槽重置,则返回负数。
-
int pci_probe_reset_bus(struct pci_bus *bus)¶
探测是否可以重置 PCI 总线
参数
struct pci_bus *bus
要探测的 PCI 总线
描述
如果可以重置总线,则返回 0,如果不支持总线重置,则返回负数。
-
int pci_reset_bus(struct pci_dev *pdev)¶
尝试重置 PCI 总线
参数
struct pci_dev *pdev
要通过插槽/总线重置的顶层 PCI 设备
描述
与上述相同,如果无法锁定总线,则返回 -EAGAIN
-
int pcix_get_max_mmrbc(struct pci_dev *dev)¶
获取 PCI-X 设计的最大内存读取字节计数
参数
struct pci_dev *dev
要查询的 PCI 设备
描述
返回 mmrbc:以字节为单位的最大设计内存读取计数或相应的错误值。
-
int pcix_get_mmrbc(struct pci_dev *dev)¶
获取 PCI-X 最大内存读取字节计数
参数
struct pci_dev *dev
要查询的 PCI 设备
描述
返回 mmrbc:最大内存读取字节数,或相应的错误值。
-
int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc)¶
设置 PCI-X 最大内存读取字节数
参数
struct pci_dev *dev
要查询的 PCI 设备
int mmrbc
最大内存读取字节数,有效值为 512、1024、2048、4096
描述
如果可能,设置最大内存读取字节数,某些桥接器存在阻止此操作的勘误表。
-
int pcie_get_readrq(struct pci_dev *dev)¶
获取 PCI Express 读取请求大小
参数
struct pci_dev *dev
要查询的 PCI 设备
描述
返回最大内存读取请求字节数,或相应的错误值。
-
int pcie_set_readrq(struct pci_dev *dev, int rq)¶
设置 PCI Express 最大内存读取请求
参数
struct pci_dev *dev
要查询的 PCI 设备
int rq
最大内存读取字节数,有效值为 128、256、512、1024、2048、4096
描述
如果可能,设置最大内存读取请求字节数
-
int pcie_get_mps(struct pci_dev *dev)¶
获取 PCI Express 最大有效载荷大小
参数
struct pci_dev *dev
要查询的 PCI 设备
描述
返回最大有效载荷大小(字节)
-
int pcie_set_mps(struct pci_dev *dev, int mps)¶
设置 PCI Express 最大有效载荷大小
参数
struct pci_dev *dev
要查询的 PCI 设备
int mps
最大有效载荷大小(字节),有效值为 128、256、512、1024、2048、4096
描述
如果可能,设置最大有效载荷大小
-
u32 pcie_bandwidth_available(struct pci_dev *dev, struct pci_dev **limiting_dev, enum pci_bus_speed *speed, enum pcie_link_width *width)¶
确定 PCIe 设备及其带宽限制的最小链路设置
参数
struct pci_dev *dev
要查询的 PCI 设备
struct pci_dev **limiting_dev
用于存储导致带宽限制的设备
enum pci_bus_speed *speed
用于存储限制设备的速度
enum pcie_link_width *width
用于存储限制设备的宽度
描述
遍历 PCI 设备链,找到可用最小带宽的点。返回此处可用的带宽,并(如果提供了 limiting_dev、speed 和 width 指针)返回有关该点的信息。返回的带宽单位为 Mb/s,即兆比特/秒的原始带宽。
-
enum pci_bus_speed pcie_get_speed_cap(struct pci_dev *dev)¶
查询 PCI 设备的链路速度能力
参数
struct pci_dev *dev
要查询的 PCI 设备
描述
查询 PCI 设备速度能力。
返回
设备支持的最大链路速度。
-
enum pcie_link_width pcie_get_width_cap(struct pci_dev *dev)¶
查询 PCI 设备的链路宽度能力
参数
struct pci_dev *dev
要查询的 PCI 设备
描述
查询 PCI 设备宽度能力。返回设备支持的最大链路宽度。
-
void pcie_print_link_status(struct pci_dev *dev)¶
报告 PCI 设备的链路速度和宽度
参数
struct pci_dev *dev
要查询的 PCI 设备
描述
报告设备上的可用带宽。
-
int pci_select_bars(struct pci_dev *dev, unsigned long flags)¶
根据资源类型创建 BAR 掩码
参数
struct pci_dev *dev
为其创建 BAR 掩码的 PCI 设备
unsigned long flags
要选择的资源类型掩码
描述
此辅助例程根据资源类型创建 bar 掩码。
-
void __iomem *pci_iomap_range(struct pci_dev *dev, int bar, unsigned long offset, unsigned long maxlen)¶
为 PCI BAR 创建虚拟映射 cookie
参数
struct pci_dev *dev
拥有 BAR 的 PCI 设备
int bar
BAR 编号
unsigned long offset
在 BAR 中的给定偏移量处映射内存
unsigned long maxlen
要映射的最大内存长度
描述
使用此函数,您将获得指向设备 BAR 的 __iomem 地址。您可以使用 ioread*() 和 iowrite*() 访问它。这些函数隐藏了这是否是 MMIO 或 PIO 地址空间的细节,并且会以正确的方式执行您期望的操作。
maxlen 指定要映射的最大长度。如果您想从偏移量到末尾获取对整个 BAR 的访问权限,请在此处传递 0
。
注意
即使您使用 pcim_enable_device()
初始化,此函数也永远不受管理。
-
void __iomem *pci_iomap_wc_range(struct pci_dev *dev, int bar, unsigned long offset, unsigned long maxlen)¶
为 PCI BAR 创建虚拟 WC 映射 cookie
参数
struct pci_dev *dev
拥有 BAR 的 PCI 设备
int bar
BAR 编号
unsigned long offset
在 BAR 中的给定偏移量处映射内存
unsigned long maxlen
要映射的最大内存长度
描述
使用此函数,您将获得指向设备 BAR 的 __iomem 地址。您可以使用 ioread*() 和 iowrite*() 访问它。这些函数隐藏了这是否是 MMIO 或 PIO 地址空间的细节,并且会以正确的方式执行您期望的操作。如果可能,将使用写入组合。
maxlen 指定要映射的最大长度。如果您想从偏移量到末尾获取对整个 BAR 的访问权限,请在此处传递 0
。
注意
即使您使用 pcim_enable_device()
初始化,此函数也永远不受管理。
-
void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)¶
为 PCI BAR 创建虚拟映射 cookie
参数
struct pci_dev *dev
拥有 BAR 的 PCI 设备
int bar
BAR 编号
unsigned long maxlen
要映射的内存长度
描述
使用此函数,您将获得指向设备 BAR 的 __iomem 地址。您可以使用 ioread*() 和 iowrite*() 访问它。这些函数隐藏了这是否是 MMIO 或 PIO 地址空间的细节,并且会以正确的方式执行您期望的操作。
maxlen 指定要映射的最大长度。 如果您想访问完整的 BAR 而不先检查其长度,请在此处传递 0
。
注意
即使您使用 pcim_enable_device()
初始化,此函数也永远不会被管理。 如果您需要自动清理,请使用 pcim_iomap()
。
-
void __iomem *pci_iomap_wc(struct pci_dev *dev, int bar, unsigned long maxlen)¶
为 PCI BAR 创建虚拟 WC 映射 cookie
参数
struct pci_dev *dev
拥有 BAR 的 PCI 设备
int bar
BAR 编号
unsigned long maxlen
要映射的内存长度
描述
使用此函数,您将获得指向设备 BAR 的 __iomem 地址。您可以使用 ioread*() 和 iowrite*() 访问它。这些函数隐藏了这是否是 MMIO 或 PIO 地址空间的细节,并且会以正确的方式执行您期望的操作。如果可能,将使用写入组合。
maxlen 指定要映射的最大长度。 如果您想访问完整的 BAR 而不先检查其长度,请在此处传递 0
。
注意
即使您使用 pcim_enable_device()
初始化,此函数也永远不受管理。
参数
struct device *dev
用于重新映射 IO 地址的通用设备
const struct resource *res
描述 I/O 空间的资源
phys_addr_t phys_addr
要映射的范围的物理地址
描述
托管的 pci_remap_iospace()
。映射在驱动程序分离时自动取消映射。
-
void __iomem *devm_pci_remap_cfgspace(struct device *dev, resource_size_t offset, resource_size_t size)¶
托管的 pci_remap_cfgspace()
参数
struct device *dev
用于重新映射 IO 地址的通用设备
resource_size_t offset
要映射的资源地址
resource_size_t size
映射大小
描述
托管的 pci_remap_cfgspace()。映射在驱动程序分离时自动取消映射。
-
void __iomem *devm_pci_remap_cfg_resource(struct device *dev, struct resource *res)¶
检查、请求区域并 ioremap 配置资源
参数
struct device *dev
用于处理资源的通用设备
struct resource *res
要处理的配置空间资源
描述
检查资源是否为有效的内存区域,请求内存区域,并使用 pci_remap_cfgspace() API 重新映射,以确保保证正确的 PCI 配置空间内存属性。
所有操作都受管理,将在驱动程序分离时撤消。
返回指向重新映射的内存的指针,如果失败,则返回 IOMEM_ERR_PTR() 编码的错误代码。用法示例
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
base = devm_pci_remap_cfg_resource(&pdev->dev, res);
if (IS_ERR(base))
return PTR_ERR(base);
-
int pcim_set_mwi(struct pci_dev *pdev)¶
设备管理的
pci_set_mwi()
-
int pcim_enable_device(struct pci_dev *pdev)¶
参数
struct pci_dev *pdev
要初始化的 PCI 设备
返回
成功时返回 0,失败时返回负错误代码。
描述
托管的 pci_enable_device()
。设备将在驱动程序分离时自动禁用。
-
void pcim_pin_device(struct pci_dev *pdev)¶
固定托管的 PCI 设备
参数
struct pci_dev *pdev
要固定的 PCI 设备
描述
固定托管的 PCI 设备 pdev。固定的设备在驱动程序分离时不会被禁用。 pdev 必须已使用 pcim_enable_device()
启用。
-
void __iomem *const *pcim_iomap_table(struct pci_dev *pdev)¶
访问 iomap 分配表(已弃用)
参数
struct pci_dev *pdev
要访问 iomap 表的 PCI 设备
返回
成功时指向 __iomem 指针数组的常量指针,失败时为 NULL。
描述
访问 dev 的 iomap 分配表。如果 iomap 表不存在且 pdev 是托管的,则会分配它。 iomap 表中记录的所有 iomap 都在驱动程序分离时自动取消映射。
首次分配表时,此函数可能会休眠,但可以在没有上下文的情况下安全调用,并保证一旦分配成功。
此函数已弃用。请勿在新代码中使用它。相反,请直接从 pcim_* 映射函数之一获取映射的地址。例如
例如
void __iomem *mappy = pcim_iomap(pdev, bar, length);
-
void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen)¶
托管的
pcim_iomap()
参数
struct pci_dev *pdev
要 iomap 的 PCI 设备
int bar
要 iomap 的 BAR
unsigned long maxlen
iomap 的最大长度
返回
成功时返回 __iomem 指针,失败时返回 NULL。
描述
由 pci_iomap()
管理的映射。驱动程序分离时会自动取消映射。如果需要手动取消映射,只能使用 pcim_iounmap()
。
每个 BAR 应该只使用一次此函数。
注意
与其他 pcim_* 函数相反,此函数在失败时不会返回 IOMEM_ERR_PTR(),而是返回一个简单的 NULL。这样做是为了向后兼容。
-
void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr)¶
由 pci_iounmap() 管理的函数
参数
struct pci_dev *pdev
要取消映射的 PCI 设备
void __iomem *addr
要取消映射的地址
描述
由 pci_iounmap() 管理的函数。 addr 必须已使用 pcim_* 映射函数映射。
-
void __iomem *pcim_iomap_region(struct pci_dev *pdev, int bar, const char *name)¶
请求并 iomap 一个 PCI BAR
参数
struct pci_dev *pdev
要映射 IO 资源的 PCI 设备
int bar
要映射的 BAR 的索引
const char *name
与请求关联的名称
返回
成功时返回 __iomem 指针,失败时返回 IOMEM_ERR_PTR。
描述
映射和区域将在驱动程序分离时自动释放。如果需要手动释放,只能使用 pcim_iounmap_region()
。
-
void pcim_iounmap_region(struct pci_dev *pdev, int bar)¶
取消映射并释放 PCI BAR
参数
struct pci_dev *pdev
要操作的 PCI 设备
int bar
要取消映射和释放的 BAR 的索引
描述
手动取消映射一个 BAR 并释放其区域。只能传递之前由 pcim_iomap_region()
映射的 BAR。
-
int pcim_iomap_regions(struct pci_dev *pdev, int mask, const char *name)¶
请求并 iomap PCI BAR(已弃用)
参数
struct pci_dev *pdev
要映射 IO 资源的 PCI 设备
int mask
要请求和 iomap 的 BAR 的掩码
const char *name
与请求关联的名称
返回
成功时返回 0,失败时返回负错误代码。
描述
请求并 iomap 由 mask 指定的区域。
此函数已弃用。请勿在新代码中使用。请改用 pcim_iomap_region()
。
-
int pcim_request_region(struct pci_dev *pdev, int bar, const char *name)¶
请求一个 PCI BAR
参数
struct pci_dev *pdev
要请求区域的 PCI 设备
int bar
要请求的 BAR 的索引
const char *name
与请求关联的名称
返回
成功时返回 0,失败时返回负错误代码。
描述
请求由 bar 指定的区域。
该区域将在驱动程序分离时自动释放。如果需要手动释放,只能使用 pcim_release_region()。
-
int pcim_request_all_regions(struct pci_dev *pdev, const char *name)¶
请求所有区域
参数
struct pci_dev *pdev
要映射 IO 资源的 PCI 设备
const char *name
与请求关联的名称
返回
成功时返回 0,失败时返回负错误代码。
描述
请求的区域将在驱动程序分离时自动释放。如果需要手动释放,可以使用 pcim_release_region() 释放单个区域,或使用 pcim_release_all_regions() 一次性释放所有区域。
-
void pcim_iounmap_regions(struct pci_dev *pdev, int mask)¶
取消映射并释放 PCI BAR(已弃用)
参数
struct pci_dev *pdev
要映射 IO 资源的 PCI 设备
int mask
要取消映射和释放的 BAR 的掩码
描述
取消映射并释放由 mask 指定的区域。
此函数已弃用。请勿在新代码中使用。请改用 pcim_iounmap_region()
。
-
void __iomem *pcim_iomap_range(struct pci_dev *pdev, int bar, unsigned long offset, unsigned long len)¶
在 PCI BAR 内创建范围化的 __iomap 映射
参数
struct pci_dev *pdev
要映射 IO 资源的 PCI 设备
int bar
BAR 的索引
unsigned long offset
从 BAR 开始的偏移量
unsigned long len
映射的字节长度
返回
成功时返回 __iomem 指针,失败时返回 IOMEM_ERR_PTR。
描述
在指定的 bar 内创建一个新的 IO 映射,范围从 offset 到 offset + len。
映射将在驱动程序分离时自动取消映射。如果需要手动释放,只能使用 pcim_iounmap()
。
-
int pci_add_dynid(struct pci_driver *drv, unsigned int vendor, unsigned int device, unsigned int subvendor, unsigned int subdevice, unsigned int class, unsigned int class_mask, unsigned long driver_data)¶
为此驱动程序添加新的 PCI 设备 ID 并重新探测设备
参数
struct pci_driver *drv
目标 pci 驱动程序
unsigned int vendor
PCI 供应商 ID
unsigned int device
PCI 设备 ID
unsigned int subvendor
PCI 子供应商 ID
unsigned int subdevice
PCI 子设备 ID
unsigned int class
PCI 类
unsigned int class_mask
PCI 类掩码
unsigned long driver_data
私有驱动程序数据
描述
为此驱动程序添加新的动态 pci 设备 ID,并使驱动程序再次探测所有设备。drv 必须在调用此函数之前注册。
上下文
执行 GFP_KERNEL 分配。
返回
成功时返回 0,失败时返回 -errno。
-
const struct pci_device_id *pci_match_id(const struct pci_device_id *ids, struct pci_dev *dev)¶
查看 PCI 设备是否与给定的 pci_id 表匹配
参数
const struct pci_device_id *ids
要在其中搜索的 PCI 设备 ID 结构数组
struct pci_dev *dev
要匹配的 PCI 设备结构。
描述
驱动程序使用此函数来检查 PCI 设备是否在其支持的设备列表中。如果找到匹配项,则返回匹配的 pci_device_id 结构,否则返回 NULL
。
已弃用;请勿使用此函数,因为它无法捕获驱动程序可能需要检查的任何动态 ID。
-
int __pci_register_driver(struct pci_driver *drv, struct module *owner, const char *mod_name)¶
注册一个新的 PCI 驱动程序
参数
struct pci_driver *drv
要注册的驱动程序结构
struct module *owner
drv 的所有者模块
const char *mod_name
模块名称字符串
描述
将驱动程序结构添加到已注册驱动程序的列表中。如果发生错误,则返回负值,否则返回 0。如果没有发生错误,即使在注册期间没有声明任何设备,驱动程序仍保持注册状态。
-
void pci_unregister_driver(struct pci_driver *drv)¶
注销 PCI 驱动程序
参数
struct pci_driver *drv
要注销的驱动程序结构
描述
从已注册 PCI 驱动程序的列表中删除驱动程序结构,并通过为其负责的每个设备调用其 remove() 函数来提供清理的机会,并将这些设备标记为无驱动程序。
-
struct pci_driver *pci_dev_driver(const struct pci_dev *dev)¶
获取设备的 pci_driver
参数
const struct pci_dev *dev
要查询的设备
描述
返回相应的 pci_driver 结构,如果该设备没有注册的驱动程序,则返回 NULL
。
-
struct pci_dev *pci_dev_get(struct pci_dev *dev)¶
增加 PCI 设备结构的引用计数
参数
struct pci_dev *dev
正在引用的设备
描述
对设备的每个活动引用都应进行引用计数。
PCI 设备的驱动程序通常应在其 probe() 方法(绑定到设备时)中记录此类引用,并在其 disconnect() 方法中通过调用 pci_dev_put()
来释放它们。
返回指向引用计数增加的设备的指针。
-
void pci_dev_put(struct pci_dev *dev)¶
释放 PCI 设备结构的使用
参数
struct pci_dev *dev
已断开连接的设备
描述
当设备的用户完成对其使用时,必须调用此函数。当设备的最后一个用户调用此函数时,将释放设备的内存。
-
void pci_stop_and_remove_bus_device(struct pci_dev *dev)¶
删除 PCI 设备及其任何子设备
参数
struct pci_dev *dev
要删除的设备
描述
从设备列表中删除 PCI 设备,通知驱动程序设备已删除。我们还以深度优先的方式删除任何从属总线和子设备。
对于我们删除的每个设备,从设备列表中删除设备结构,删除 /proc 条目,并通知用户空间 (/sbin/hotplug)。
-
struct pci_bus *pci_find_bus(int domain, int busnr)¶
从给定的域和总线号中查找 PCI 总线
参数
int domain
要搜索的 PCI 域的编号
int busnr
所需的 PCI 总线的编号
描述
给定一个 PCI 总线号和域号,所需的 PCI 总线位于 PCI 总线的全局列表中。如果找到该总线,则返回指向其数据结构的指针。如果未找到总线,则返回 NULL
。
-
struct pci_bus *pci_find_next_bus(const struct pci_bus *from)¶
开始或继续搜索 PCI 总线
参数
const struct pci_bus *from
上次找到的 PCI 总线,或者对于新搜索,则为
NULL
。
描述
迭代遍历已知的 PCI 总线列表。通过传递 NULL
作为 **from** 参数来启动新的搜索。否则,如果 **from** 不为 NULL
,则从全局列表中的下一个设备继续搜索。
-
struct pci_dev *pci_get_slot(struct pci_bus *bus, unsigned int devfn)¶
查找给定 PCI 插槽的 PCI 设备
参数
struct pci_bus *bus
所需的 PCI 设备所在的 PCI 总线
unsigned int devfn
编码所需的 PCI 设备所在的 PCI 插槽的编号,以及在多功能设备的情况下,该插槽内的逻辑设备编号。
描述
给定一个 PCI 总线和插槽/功能号,所需的 PCI 设备位于 PCI 设备列表中。如果找到该设备,则其引用计数会增加,并且此函数返回指向其数据结构的指针。调用者必须通过调用 pci_dev_put()
来减少引用计数。如果未找到设备,则返回 NULL
。
-
struct pci_dev *pci_get_domain_bus_and_slot(int domain, unsigned int bus, unsigned int devfn)¶
查找给定 PCI 域(段)、总线和插槽的 PCI 设备
参数
int domain
PCI 设备所在的 PCI 域/段。
unsigned int bus
所需的 PCI 设备所在的 PCI 总线
unsigned int devfn
编码所需的 PCI 设备所在的 PCI 插槽的编号,以及在多功能设备的情况下,该插槽内的逻辑设备编号。
描述
给定一个 PCI 域、总线和插槽/功能号,所需的 PCI 设备位于 PCI 设备列表中。如果找到该设备,则其引用计数会增加,并且此函数返回指向其数据结构的指针。调用者必须通过调用 pci_dev_put()
来减少引用计数。如果未找到设备,则返回 NULL
。
-
struct pci_dev *pci_get_subsys(unsigned int vendor, unsigned int device, unsigned int ss_vendor, unsigned int ss_device, struct pci_dev *from)¶
开始或继续按供应商/子供应商/设备/子设备 ID 搜索 PCI 设备
参数
unsigned int vendor
要匹配的 PCI 供应商 ID,或者
PCI_ANY_ID
以匹配所有供应商 IDunsigned int device
要匹配的 PCI 设备 ID,或者
PCI_ANY_ID
以匹配所有设备 IDunsigned int ss_vendor
要匹配的 PCI 子系统供应商 ID,或者
PCI_ANY_ID
以匹配所有供应商 IDunsigned int ss_device
要匹配的 PCI 子系统设备 ID,或者
PCI_ANY_ID
以匹配所有设备 IDstruct pci_dev *from
在搜索中找到的上一个 PCI 设备,或者对于新搜索为
NULL
。
描述
遍历已知 PCI 设备的列表。如果找到一个 PCI 设备,其vendor、device、ss_vendor 和 ss_device 都匹配,则返回指向其设备结构的指针,并将该设备的引用计数加 1。否则,返回 NULL
。通过传递 NULL
作为 from 参数来启动新的搜索。否则,如果 from 不为 NULL
,则从全局列表中的下一个设备继续搜索。如果 from 不为 NULL
,则其引用计数总是会递减。
-
struct pci_dev *pci_get_device(unsigned int vendor, unsigned int device, struct pci_dev *from)¶
根据 vendor/device id 开始或继续搜索 PCI 设备
参数
unsigned int vendor
要匹配的 PCI 供应商 ID,或者
PCI_ANY_ID
以匹配所有供应商 IDunsigned int device
要匹配的 PCI 设备 ID,或者
PCI_ANY_ID
以匹配所有设备 IDstruct pci_dev *from
在搜索中找到的上一个 PCI 设备,或者对于新搜索为
NULL
。
描述
遍历已知 PCI 设备的列表。如果找到一个 PCI 设备,其 vendor 和 device 匹配,则该设备的引用计数将增加,并返回指向其设备结构的指针。否则,返回 NULL
。通过传递 NULL
作为 from 参数来启动新的搜索。否则,如果 from 不为 NULL
,则从全局列表中的下一个设备继续搜索。如果 from 不为 NULL
,则其引用计数总是会递减。
-
struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from)¶
根据 class 开始或继续搜索 PCI 设备
参数
unsigned int class
搜索具有此 class 指定的 PCI 设备
struct pci_dev *from
在搜索中找到的上一个 PCI 设备,或者对于新搜索为
NULL
。
描述
遍历已知 PCI 设备的列表。如果找到一个 PCI 设备,其 class 匹配,则该设备的引用计数将增加,并返回指向其设备结构的指针。否则,返回 NULL
。通过传递 NULL
作为 from 参数来启动新的搜索。否则,如果 from 不为 NULL
,则从全局列表中的下一个设备继续搜索。如果 from 不为 NULL
,则其引用计数总是会递减。
-
struct pci_dev *pci_get_base_class(unsigned int class, struct pci_dev *from)¶
仅通过与基本 class 代码匹配来搜索 PCI 设备
参数
unsigned int class
搜索具有此基本 class 代码的 PCI 设备
struct pci_dev *from
在搜索中找到的上一个 PCI 设备,或者对于新搜索为
NULL
。
描述
遍历已知 PCI 设备的列表。如果找到一个 PCI 设备,其基本 class 代码匹配,则该设备的引用计数将增加。请参阅 pci_match_one_device() 以了解其工作原理。通过传递 NULL
作为 from 参数来启动新的搜索。否则,如果 from 不为 NULL
,则从全局列表中的下一个设备继续搜索。如果 from 不为 NULL
,则其引用计数总是会递减。
返回
指向匹配的 PCI 设备的指针,否则为 NULL
。
-
int pci_dev_present(const struct pci_device_id *ids)¶
如果存在与设备列表匹配的设备,则返回 1,否则返回 0。
参数
const struct pci_device_id *ids
指向一个以 null 结尾的
struct pci_device_id
结构列表的指针,这些结构描述了调用者尝试查找的 PCI 设备类型。
描述
显而易见的事实:您没有对此函数可能找到的任何设备的引用,因此,如果该设备在此函数完成后立即从系统中移除,则该值将失效。使用此函数查找通常内置于系统中的设备,或者用于大致了解此时此刻是否碰巧存在其他设备。
参数
struct irq_data *data
指向与该中断关联的 irqdata 的指针
参数
struct irq_data *data
指向与该中断关联的 irqdata 的指针
-
int pci_msi_vec_count(struct pci_dev *dev)¶
返回设备可以发送的 MSI 向量的数量
参数
struct pci_dev *dev
要报告的设备
描述
此函数返回设备通过多消息功能寄存器请求的 MSI 向量数量。如果设备无法发送 MSI 中断,则返回负的 errno。否则,调用成功并根据 MSI 规范返回 2 的幂,最大值为 2^5 (32)。
-
int pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res, resource_size_t size, resource_size_t align, resource_size_t min, unsigned long type_mask, resource_alignf alignf, void *alignf_data)¶
从父总线分配资源
参数
struct pci_bus *bus
PCI 总线
struct resource *res
要分配的资源
resource_size_t size
要分配的资源大小
resource_size_t align
要分配的资源的对齐方式
resource_size_t min
要分配的最小 /proc/iomem 地址
unsigned long type_mask
IORESOURCE_* 类型标志
resource_alignf alignf
资源对齐函数
void *alignf_data
资源对齐函数的数据参数
描述
给定设备所在的 PCI 总线、大小、最小地址、对齐方式和类型,尝试为特定设备资源找到可接受的资源分配。
-
void pci_bus_add_device(struct pci_dev *dev)¶
为单个设备启动驱动程序
参数
struct pci_dev *dev
要添加的设备
描述
这会添加 sysfs 条目并启动设备驱动程序
-
void pci_bus_add_devices(const struct pci_bus *bus)¶
启动 PCI 设备的驱动程序
参数
const struct pci_bus *bus
要检查新设备的总线
描述
启动 PCI 设备的驱动程序并添加一些 sysfs 条目。
-
void pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev*, void*), void *userdata)¶
遍历总线上或总线下的设备,调用回调函数。
参数
struct pci_bus *top
应遍历其设备的总线
int (*cb)(struct pci_dev *, void *)
为每个找到的设备调用的回调函数
void *userdata
要传递给回调函数的任意指针
遍历给定总线,包括此总线下任何桥接设备上的总线。在每个找到的设备上调用提供的回调函数。
我们每次都会检查 cb 的返回值。如果它返回任何非 0 的值,我们就会跳出循环。
-
struct pci_ops *pci_bus_set_ops(struct pci_bus *bus, struct pci_ops *ops)¶
设置 pci 总线的原始操作
参数
struct pci_bus *bus
pci 总线结构体
struct pci_ops *ops
新的原始操作
描述
返回之前的原始操作
-
void pci_cfg_access_lock(struct pci_dev *dev)¶
锁定 PCI 配置的读/写
参数
struct pci_dev *dev
pci 设备结构体
描述
当访问被锁定时,任何用户空间对配置空间的读写和并发锁定请求都将休眠,直到通过 pci_cfg_access_unlock()
再次允许访问。
-
bool pci_cfg_access_trylock(struct pci_dev *dev)¶
尝试锁定 PCI 配置的读/写
参数
struct pci_dev *dev
pci 设备结构体
描述
与 pci_cfg_access_lock 相同,但如果访问已被锁定,则返回 0,否则返回 1。此函数可以从原子上下文中调用。
-
void pci_cfg_access_unlock(struct pci_dev *dev)¶
解锁 PCI 配置的读/写
参数
struct pci_dev *dev
pci 设备结构体
描述
此函数允许 PCI 配置访问恢复。
-
int pci_request_irq(struct pci_dev *dev, unsigned int nr, irq_handler_t handler, irq_handler_t thread_fn, void *dev_id, const char *fmt, ...)¶
为 PCI 设备分配中断线
参数
struct pci_dev *dev
要操作的 PCI 设备
unsigned int nr
设备相关中断向量索引(从 0 开始)。
irq_handler_t handler
发生 IRQ 时要调用的函数。线程中断的主处理程序。如果为 NULL 且 thread_fn != NULL,则安装默认主处理程序。
irq_handler_t thread_fn
从 IRQ 处理程序线程调用的函数。如果为 NULL,则不创建 IRQ 线程
void *dev_id
传递回处理程序的 Cookie
const char *fmt
命名处理程序的 Printf 式格式字符串
...
可变参数
描述
此调用会分配中断资源并启用中断线和 IRQ 处理。从发出此调用的那一刻起,可能会调用 handler 和 thread_fn。使用此函数请求的所有中断都可能是共享的。
dev_id 不能为 NULL,并且必须是全局唯一的。
-
void pci_free_irq(struct pci_dev *dev, unsigned int nr, void *dev_id)¶
释放使用 pci_request_irq 分配的中断
参数
struct pci_dev *dev
要操作的 PCI 设备
unsigned int nr
设备相关中断向量索引(从 0 开始)。
void *dev_id
要释放的设备标识
描述
删除中断处理程序。删除该处理程序,如果任何驱动程序都不再使用该中断线,则会禁用该中断线。调用者必须确保在调用此函数之前禁用设备上的中断。该函数在完成此 IRQ 的任何正在执行的中断之前不会返回。
不得从中断上下文中调用此函数。
-
u8 pci_common_swizzle(struct pci_dev *dev, u8 *pinp)¶
将 INTx 一路交换到根桥
参数
struct pci_dev *dev
PCI 设备
u8 *pinp
指向 INTx 引脚值的指针(1=INTA、2=INTB、3=INTD、4=INTD)
描述
为设备执行 INTx 交换。这会遍历所有 PCI 到 PCI 的桥,一直到 PCI 根总线。
-
bool pci_check_and_mask_intx(struct pci_dev *dev)¶
屏蔽挂起中断上的 INTx
参数
struct pci_dev *dev
要操作的 PCI 设备
描述
检查设备 dev 是否已断言其 INTx 线,如果断言,则将其屏蔽并返回 true。如果没有挂起中断,则返回 false。
-
bool pci_check_and_unmask_intx(struct pci_dev *dev)¶
如果没有挂起中断,则取消屏蔽 INTx
参数
struct pci_dev *dev
要操作的 PCI 设备
描述
检查设备 dev 是否已断言其 INTx 线,如果没有断言,则取消屏蔽它并返回 true。如果仍有挂起中断,则返回 false 并且屏蔽保持活动状态。
-
bool pcie_relaxed_ordering_enabled(struct pci_dev *dev)¶
探测 PCIe 宽松排序启用
参数
struct pci_dev *dev
要查询的 PCI 设备
描述
如果设备已启用宽松排序属性,则返回 true。
-
int pci_scan_slot(struct pci_bus *bus, int devfn)¶
扫描总线上的 PCI 插槽以查找设备
参数
struct pci_bus *bus
要扫描的 PCI 总线
int devfn
要扫描的插槽号(必须具有零功能)
描述
扫描指定的 PCI 总线上的 PCI 插槽以查找设备,并将发现的设备添加到 bus->devices 列表。新设备将不会设置 is_added。
返回找到的新设备数量。
-
unsigned int pci_scan_child_bus(struct pci_bus *bus)¶
扫描总线下方的设备
参数
struct pci_bus *bus
要扫描设备的总线
描述
扫描 bus 下方的设备,包括下级总线。返回新的下级编号,其中包含所有找到的设备。
-
unsigned int pci_rescan_bus(struct pci_bus *bus)¶
扫描 PCI 总线的设备
参数
struct pci_bus *bus
要扫描的 PCI 总线
描述
扫描 PCI 总线和子总线上的新设备,添加它们并启用它们。
返回发现的下级总线的最大数量。
-
struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr, const char *name, struct hotplug_slot *hotplug)¶
创建或增加物理 PCI 插槽的引用计数
参数
struct pci_bus *parent
父桥的 struct pci_bus
int slot_nr
PCI_SLOT(pci_dev->devfn) 或 -1 用于占位符
const char *name
在 /sys/bus/pci/slots/<name> 中显示的用户可见字符串
struct hotplug_slot *hotplug
如果调用者是热插拔驱动程序,则设置,否则为 NULL
描述
PCI 插槽具有诸如地址、速度、宽度等首要属性,并且使用 struct pci_slot
来管理它们。此接口将向调用者返回新的 struct pci_slot
,或者如果 pci_slot 已经存在,则其引用计数将递增。
插槽由 pci_bus,slot_nr 元组唯一标识。
已知存在固件损坏的平台,会将相同的名称分配给多个插槽。通过代表调用者重命名插槽来解决这些损坏的平台。如果固件将名称 N 分配给多个插槽
第一个插槽分配 N,第二个插槽分配 N-1,第三个插槽分配 N-2 等。
占位符插槽:在大多数情况下,pci_bus,slot_nr 足以唯一标识一个插槽。有一个值得注意的例外 - pSeries (rpaphp),其中 slot_nr 在设备实际插入插槽之前无法确定。在这种情况下,调用者可以为 slot_nr 传递 -1。
当调用者传递 slot_nr == -1 时,将强制执行以下语义。首先,我们不再检查是否存在 struct
pci_slot,因为可能存在许多 slot_nr 为 -1 的插槽。语义上的另一个变化是用户可见的,即 sysfs 中显示的 “address” 参数将仅由 dddd:bb 元组组成,其中 dddd 是 struct
pci_bus 的 PCI 域,而 bb 是总线号。换句话说,不会显示 “占位符” 插槽的 devfn。
-
void pci_destroy_slot(struct pci_slot *slot)¶
减少物理 PCI 插槽的引用计数
参数
struct pci_slot *slot
要减少引用的 struct pci_slot
描述
struct
pci_slot 是引用计数的,因此销毁它们非常容易;我们只需在其 kobj 上调用 kobject_put,并让我们的释放方法完成其余的工作。
参数
struct pci_slot *pci_slot
struct pci_slot
描述
pci_hotplug_core.c 的帮助函数,用于创建指向热插拔驱动程序模块的符号链接。
参数
struct pci_slot *pci_slot
struct pci_slot
描述
pci_hotplug_core.c 的帮助函数,用于删除指向热插拔驱动程序模块的符号链接。
-
int pci_enable_rom(struct pci_dev *pdev)¶
为 PCI 设备启用 ROM 解码
参数
struct pci_dev *pdev
要启用的 PCI 设备
描述
启用 dev 上的 ROM 解码。这仅仅涉及打开 PCI ROM BAR 的最后一位。请注意,某些卡可能在 ROM 和其他资源之间共享地址解码器,因此启用它可能会禁用对 MMIO 寄存器或其他卡内存的访问。
-
void pci_disable_rom(struct pci_dev *pdev)¶
禁用 PCI 设备的 ROM 解码
参数
struct pci_dev *pdev
要禁用的 PCI 设备
描述
通过关闭 ROM BAR 中的最后一位来禁用 PCI 设备上的 ROM 解码。
-
void __iomem *pci_map_rom(struct pci_dev *pdev, size_t *size)¶
将 PCI ROM 映射到内核空间
参数
struct pci_dev *pdev
指向 pci 设备结构的指针
size_t *size
指向接收 ROM 上 pci 窗口大小的指针
返回
指向 ROM 映像的内核虚拟指针
描述
将 PCI ROM 映射到内核空间。如果 ROM 是启动视频 ROM,将返回 BIOS 阴影副本而不是实际 ROM。
-
void pci_unmap_rom(struct pci_dev *pdev, void __iomem *rom)¶
从内核空间取消映射 ROM
参数
struct pci_dev *pdev
指向 pci 设备结构的指针
void __iomem *rom
先前映射的虚拟地址
描述
删除先前映射的 ROM 的映射
-
void *pci_iov_get_pf_drvdata(struct pci_dev *dev, struct pci_driver *pf_driver)¶
返回 PF 的 drvdata
参数
struct pci_dev *dev
VF pci_dev
struct pci_driver *pf_driver
拥有 PF 所需的设备驱动程序
描述
必须从确保附加 VF 驱动程序的上下文中调用此函数。一旦 VF 驱动程序完成其 remove() 回调,返回的值将无效。
锁定由驱动程序核心完成。在调用 pci_enable_sriov()
之前,无法探测 VF 驱动程序,并且 pci_disable_sriov()
在所有 VF 驱动程序完成其 remove() 之前不会返回。
PF 驱动程序必须在开始销毁 drvdata 之前调用 pci_disable_sriov()
。
-
int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn)¶
启用 SR-IOV 功能
参数
struct pci_dev *dev
PCI 设备
int nr_virtfn
要启用的虚拟功能的数量
描述
成功时返回 0,失败时返回负数。
-
void pci_disable_sriov(struct pci_dev *dev)¶
禁用 SR-IOV 功能
参数
struct pci_dev *dev
PCI 设备
-
int pci_num_vf(struct pci_dev *dev)¶
返回与 PF 设备关联的 VF 数量 device_release_driver
参数
struct pci_dev *dev
PCI 设备
描述
返回 VF 的数量,如果未启用 SR-IOV,则返回 0。
-
int pci_vfs_assigned(struct pci_dev *dev)¶
返回分配给客户机的 VF 数量
参数
struct pci_dev *dev
PCI 设备
描述
返回属于此设备且分配给客户机的 VF 数量。如果设备不是物理功能,则返回 0。
-
int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs)¶
减少可用的 TotalVFs
参数
struct pci_dev *dev
PCI PF 设备
u16 numvfs
应该用于支持的 TotalVFs 的数量
描述
应该从 PF 驱动程序的探测例程中调用,并持有设备的互斥锁。
如果 PF 是支持 SRIOV 的设备且 numvfs 的值有效,则返回 0。如果不是 PF,则返回 -ENOSYS;如果 numvfs 无效,则返回 -EINVAL;如果 VF 已启用,则返回 -EBUSY。
-
int pci_sriov_get_totalvfs(struct pci_dev *dev)¶
获取此设备上支持的 VF 总数
参数
struct pci_dev *dev
PCI PF 设备
描述
对于支持 SRIOV 的 PCIe 设备,返回 TotalVFs 的 PCIe SRIOV 功能值,或者如果驱动程序减少了该值,则返回 driver_max_VFs 的值。否则返回 0。
-
int pci_sriov_configure_simple(struct pci_dev *dev, int nr_virtfn)¶
用于配置 SR-IOV 的助手函数
参数
struct pci_dev *dev
PCI 设备
int nr_virtfn
要启用的虚拟功能数量,禁用则为 0
描述
为在启用 SR-IOV 之前不需要任何 PF 设置的设备启用或禁用 SR-IOV。错误时返回负值,成功时返回分配的 VF 数量。
-
ssize_t pci_read_legacy_io(struct file *filp, struct kobject *kobj, struct bin_attribute *bin_attr, char *buf, loff_t off, size_t count)¶
从旧式 I/O 端口空间读取字节
参数
struct file *filp
打开 sysfs 文件
struct kobject *kobj
要读取的文件的 kobject
struct bin_attribute *bin_attr
此文件的 struct bin_attribute
char *buf
用于存储结果的缓冲区
loff_t off
旧式 I/O 端口空间中的偏移量
size_t count
要读取的字节数
描述
使用特定于架构的回调例程 (pci_legacy_read) 从旧式 I/O 端口空间读取 1、2 或 4 个字节。
-
ssize_t pci_write_legacy_io(struct file *filp, struct kobject *kobj, struct bin_attribute *bin_attr, char *buf, loff_t off, size_t count)¶
将字节写入旧式 I/O 端口空间
参数
struct file *filp
打开 sysfs 文件
struct kobject *kobj
要读取的文件的 kobject
struct bin_attribute *bin_attr
此文件的 struct bin_attribute
char *buf
包含要写入的值的缓冲区
loff_t off
旧式 I/O 端口空间中的偏移量
size_t count
要写入的字节数
描述
使用特定于架构的回调例程 (pci_legacy_write) 从旧式 I/O 端口空间写入 1、2 或 4 个字节。
-
int pci_mmap_legacy_mem(struct file *filp, struct kobject *kobj, const struct bin_attribute *attr, struct vm_area_struct *vma)¶
将旧式 PCI 内存映射到用户内存空间
参数
struct file *filp
打开 sysfs 文件
struct kobject *kobj
要映射的设备对应的 kobject
const struct bin_attribute *attr
此文件的 struct bin_attribute
struct vm_area_struct *vma
传递给 mmap 的 struct vm_area_struct
描述
使用特定于架构的回调函数 pci_mmap_legacy_mem_page_range 将旧式内存空间(总线空间的前 1MB)映射到应用程序虚拟内存空间。
-
int pci_mmap_legacy_io(struct file *filp, struct kobject *kobj, const struct bin_attribute *attr, struct vm_area_struct *vma)¶
将旧式 PCI IO 映射到用户内存空间
参数
struct file *filp
打开 sysfs 文件
struct kobject *kobj
要映射的设备对应的 kobject
const struct bin_attribute *attr
此文件的 struct bin_attribute
struct vm_area_struct *vma
传递给 mmap 的 struct vm_area_struct
描述
使用特定于架构的回调函数 pci_mmap_legacy_io_page_range 将旧式 IO 空间(总线空间的前 1MB)映射到应用程序虚拟内存空间。如果不支持该操作,则返回 -ENOSYS
-
void pci_adjust_legacy_attr(struct pci_bus *b, enum pci_mmap_state mmap_type)¶
调整旧式文件属性
参数
struct pci_bus *b
要在其下创建文件的总线
enum pci_mmap_state mmap_type
I/O 端口或内存
描述
存根实现。如果需要,可以由架构覆盖。
-
void pci_create_legacy_files(struct pci_bus *b)¶
创建旧式 I/O 端口和内存文件
参数
struct pci_bus *b
要在其下创建文件的总线
描述
某些平台允许按总线访问旧式 I/O 端口和 ISA 内存空间。此例程创建文件,并将它们与 pci-sysfs.c 中的关联读取、写入和 mmap 文件关联。
如果出错,则回滚,但不要将错误传播给调用者,因为在没有这些文件的情况下设置 PCI 总线是可以的。
-
int pci_mmap_resource(struct kobject *kobj, const struct bin_attribute *attr, struct vm_area_struct *vma, int write_combine)¶
将 PCI 资源映射到用户内存空间
参数
struct kobject *kobj
用于映射的 kobject
const struct bin_attribute *attr
正在映射的文件的 struct bin_attribute
struct vm_area_struct *vma
传入 mmap 的 struct vm_area_struct
int write_combine
1 表示写入合并映射
描述
使用常规 PCI 映射例程将 PCI 资源映射到用户空间。
-
void pci_remove_resource_files(struct pci_dev *pdev)¶
清理资源文件
参数
struct pci_dev *pdev
要清理的设备
描述
如果我们为 pdev 创建了资源文件,则将其从 sysfs 中删除并释放其资源。
-
int pci_create_resource_files(struct pci_dev *pdev)¶
在 sysfs 中为 dev 创建资源文件
参数
struct pci_dev *pdev
有问题的设备
描述
遍历 pdev 中的资源,为每个可用的资源创建文件。
-
ssize_t pci_write_rom(struct file *filp, struct kobject *kobj, struct bin_attribute *bin_attr, char *buf, loff_t off, size_t count)¶
用于启用对 PCI ROM 显示的访问
参数
struct file *filp
sysfs 文件
struct kobject *kobj
内核对象句柄
struct bin_attribute *bin_attr
此文件的 struct bin_attribute
char *buf
用户输入
loff_t off
文件偏移量
size_t count
输入中的字节数
描述
写入除 0 以外的任何内容都会启用它
-
ssize_t pci_read_rom(struct file *filp, struct kobject *kobj, struct bin_attribute *bin_attr, char *buf, loff_t off, size_t count)¶
读取 PCI ROM
参数
struct file *filp
sysfs 文件
struct kobject *kobj
内核对象句柄
struct bin_attribute *bin_attr
此文件的 struct bin_attribute
char *buf
将从 ROM 读取的数据放入何处
loff_t off
文件偏移量
size_t count
要读取的字节数
描述
从与 kobj 对应的 PCI 设备中的 ROM 中,将从 off 开始的 count 个字节放入 buf。
-
void pci_remove_sysfs_dev_files(struct pci_dev *pdev)¶
清理 PCI 特定的 sysfs 文件
参数
struct pci_dev *pdev
应该释放其条目的设备
描述
当 pdev 从 sysfs 中移除时进行清理。
-
int pcie_tph_get_cpu_st(struct pci_dev *pdev, enum tph_mem_type mem_type, unsigned int cpu_uid, u16 *tag)¶
检索与特定 CPU 关联的目标内存的引导标签
参数
struct pci_dev *pdev
PCI 设备
enum tph_mem_type mem_type
目标内存类型(易失性或持久性 RAM)
unsigned int cpu_uid
关联的 CPU ID
u16 *tag
要返回的引导标签
描述
返回与 cpu_uid 指示的特定 CPU 关联的目标内存的引导标签。
返回
成功时为 0,否则为负值 (-errno)
-
int pcie_tph_set_st_entry(struct pci_dev *pdev, unsigned int index, u16 tag)¶
在 ST 表条目中设置引导标签
参数
struct pci_dev *pdev
PCI 设备
unsigned int index
ST 表条目索引
u16 tag
要写入的引导标签
描述
找出 ST 表的正确位置(在 MSI-X 表中或在 TPH 扩展能力空间中),并将引导标签写入 index 指向的 ST 条目中。
返回
成功时为 0,否则为负值 (-errno)
-
void pcie_disable_tph(struct pci_dev *pdev)¶
关闭设备的 TPH 支持
参数
struct pci_dev *pdev
PCI 设备
返回
无
-
int pcie_enable_tph(struct pci_dev *pdev, int mode)¶
使用特定的 ST 模式启用设备的 TPH 支持
参数
struct pci_dev *pdev
PCI 设备
int mode
要启用的 ST 模式。当前支持的模式包括
PCI_TPH_ST_NS_MODE:无 ST 模式
PCI_TPH_ST_IV_MODE:中断向量模式
PCI_TPH_ST_DS_MODE:设备特定模式
描述
在启用之前,检查设备是否实际支持该模式,如果不支持,则返回错误。此外,根据设备的 TPH 请求器能力和根端口的完成器能力,确定设备可以发出哪些类型的请求(TPH 或扩展 TPH)。
返回
成功时为 0,否则为负值 (-errno)
PCI 热插拔支持库¶
-
int __pci_hp_register(struct hotplug_slot *slot, struct pci_bus *bus, int devnr, const char *name, struct module *owner, const char *mod_name)¶
向 PCI 热插拔子系统注册 hotplug_slot
参数
struct hotplug_slot *slot
要注册的
struct hotplug_slot
的指针struct pci_bus *bus
此插槽所在的总线
int devnr
设备号
const char *name
在 kobject 核心中注册的名称
struct module *owner
调用者模块所有者
const char *mod_name
调用者模块名称
描述
准备好热插拔插槽以供内核使用,并立即将其发布到用户空间。驱动程序也可以通过调用 pci_hp_initialize() 和 pci_hp_add()
来单独执行这两个步骤。
如果成功则返回 0,如果出现错误则返回其他任何值。
-
int __pci_hp_initialize(struct hotplug_slot *slot, struct pci_bus *bus, int devnr, const char *name, struct module *owner, const char *mod_name)¶
为内核使用准备热插拔插槽。
参数
struct hotplug_slot *slot
指向要初始化的
struct hotplug_slot
的指针。struct pci_bus *bus
此插槽所在的总线
int devnr
插槽编号。
const char *name
在 kobject 核心中注册的名称
struct module *owner
调用者模块所有者
const char *mod_name
调用者模块名称
描述
分配并填充一个 PCI 插槽,供热插拔驱动程序使用。一旦调用此函数,驱动程序可以调用 hotplug_slot_name() 来获取插槽的唯一名称。驱动程序必须从此时起准备好处理 ->reset_slot 回调。
成功时返回 0,出错时返回负整数。
-
int pci_hp_add(struct hotplug_slot *slot)¶
向用户空间发布热插拔插槽。
参数
struct hotplug_slot *slot
指向要发布的
struct hotplug_slot
的指针。
描述
使热插拔插槽的 sysfs 接口可用,并通过发送 uevent 通知用户空间其添加。从此时起,热插拔驱动程序必须准备好处理所有 struct hotplug_slot_ops
回调。
成功时返回 0,出错时返回负整数。
-
void pci_hp_deregister(struct hotplug_slot *slot)¶
向 PCI 热插拔子系统取消注册热插拔插槽。
参数
struct hotplug_slot *slot
指向要取消注册的
struct hotplug_slot
的指针。
描述
slot 必须先通过调用 pci_hp_register() 向 pci 热插拔子系统注册。
-
void pci_hp_del(struct hotplug_slot *slot)¶
从用户空间取消发布热插拔插槽。
参数
struct hotplug_slot *slot
指向要取消发布的
struct hotplug_slot
的指针。
描述
删除热插拔插槽的 sysfs 接口。
-
void pci_hp_destroy(struct hotplug_slot *slot)¶
从内核使用中移除热插拔插槽。
参数
struct hotplug_slot *slot
指向要销毁的
struct hotplug_slot
的指针。
描述
销毁热插拔驱动程序使用的 PCI 插槽。一旦调用此函数,驱动程序可能不再调用 hotplug_slot_name() 来获取插槽的唯一名称。驱动程序不再需要从此点开始处理 ->reset_slot 回调。