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 ID 为 cap 的 VSEC 功能。如果找到,则返回配置空间中的功能偏移量;否则返回 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 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”表示禁用它。
描述
调用者必须先验证设备是否能够生成 PME#,然后才能使用等于“true”的 enable 调用此函数。
参数
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,位 31=128TB)。如果 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 *name)¶
保留 PCI I/O 和内存资源
参数
struct pci_dev *pdev
要保留其资源的 PCI 设备
int bar
要保留的 BAR
const char *name
请求资源的驱动程序的名称
返回
成功时返回 0,失败时返回负错误代码。
描述
将与 PCI 设备 pdev BAR bar 关联的 PCI 区域标记为由所有者 name 保留。除非此调用成功返回,否则不要访问 PCI 区域内的任何地址。
成功时返回 0,或错误时返回 EBUSY
。失败时还会打印警告消息。
-
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 *name)¶
保留选定的 PCI I/O 和内存资源
参数
struct pci_dev *pdev
要保留其资源的 PCI 设备
int bars
要请求的 BAR 的位掩码
const char *name
请求资源的驱动程序的名称
返回
成功时返回 0,失败时返回负错误代码。
-
int pci_request_selected_regions_exclusive(struct pci_dev *pdev, int bars, const char *name)¶
独占地请求区域
参数
struct pci_dev *pdev
从中请求区域的 PCI 设备
int bars
要请求的 BAR 的位掩码
const char *name
请求资源的驱动程序的名称
返回
成功时返回 0,失败时返回负错误代码。
-
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 *name)¶
保留 PCI I/O 和内存资源
参数
struct pci_dev *pdev
要保留其资源的 PCI 设备
const char *name
请求资源的驱动程序的名称
描述
将与 PCI 设备 pdev 相关的所有 PCI 区域标记为由所有者 name 保留。 除非此调用成功返回,否则不要访问 PCI 区域内的任何地址。
成功时返回 0,或错误时返回 EBUSY
。失败时还会打印警告消息。
-
int pci_request_regions_exclusive(struct pci_dev *pdev, const char *name)¶
保留 PCI I/O 和内存资源
参数
struct pci_dev *pdev
要保留其资源的 PCI 设备
const char *name
请求资源的驱动程序的名称
返回
成功时返回 0,失败时返回负错误代码。
描述
将与 PCI 设备 pdev 相关的所有 PCI 区域标记为由所有者 name 保留。 除非此调用成功返回,否则不要访问 PCI 区域内的任何地址。
pci_request_regions_exclusive()
将标记该区域,以便不允许 /dev/mem 和 sysfs MMIO 访问。
成功时返回 0,或错误时返回 EBUSY
。失败时还会打印警告消息。
-
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 复制。 Copyright 1998-2001 by Jes Sorensen, <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
-
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
。
-
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
。
-
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
。
-
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
。
参数
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 cfg 资源
参数
struct device *dev
用于处理资源的通用设备
struct resource *res
要处理的配置空间资源
描述
检查资源是否为有效的内存区域,请求内存区域并使用 pci_remap_cfgspace() API 进行 ioremap,以确保保证正确的 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_intx(struct pci_dev *pdev, int enable)¶
托管的
pci_intx()
参数
struct pci_dev *pdev
要操作的 PCI 设备
int enable
布尔值:是否启用或禁用 PCI INTx
返回
成功时为 0,出错时为 -ENOMEM。
描述
为设备 pdev 启用/禁用 PCI INTx。在驱动程序分离时恢复原始状态。
-
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
要执行 iounmap 的 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 __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-Mapping,范围从 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)¶
开始或继续按 vendor/subvendor/device/subdevice id 搜索 PCI 设备
参数
unsigned int vendor
要匹配的 PCI vendor id,或
PCI_ANY_ID
以匹配所有 vendor idunsigned int device
要匹配的 PCI device id,或
PCI_ANY_ID
以匹配所有 device idunsigned int ss_vendor
要匹配的 PCI 子系统 vendor id,或
PCI_ANY_ID
以匹配所有 vendor idunsigned int ss_device
要匹配的 PCI 子系统 device id,或
PCI_ANY_ID
以匹配所有 device idstruct pci_dev *from
搜索中找到的上一个 PCI 设备,或
NULL
用于新的搜索。
描述
遍历已知 PCI 设备列表。如果找到一个 PCI 设备,其 **vendor**、**device**、**ss_vendor** 和 **ss_device** 匹配,则返回指向其设备结构的指针,并且设备的引用计数会增加。否则,返回 NULL
。通过传递 NULL
作为 **from** 参数来启动新的搜索。否则,如果 **from** 不为 NULL
,则从全局列表中的下一个设备继续搜索。如果 **from** 不为 NULL
,则始终会减少 **from** 的引用计数。
-
struct pci_dev *pci_get_device(unsigned int vendor, unsigned int device, struct pci_dev *from)¶
开始或继续按 vendor/device id 搜索 PCI 设备
参数
unsigned int vendor
要匹配的 PCI vendor id,或
PCI_ANY_ID
以匹配所有 vendor idunsigned int device
要匹配的 PCI device id,或
PCI_ANY_ID
以匹配所有 device idstruct pci_dev *from
搜索中找到的上一个 PCI 设备,或
NULL
用于新的搜索。
描述
遍历已知 PCI 设备列表。如果找到一个 PCI 设备,其 **vendor** 和 **device** 匹配,则设备的引用计数会增加,并且返回指向其设备结构的指针。否则,返回 NULL
。通过传递 NULL
作为 **from** 参数来启动新的搜索。否则,如果 **from** 不为 NULL
,则从全局列表中的下一个设备继续搜索。如果 **from** 不为 NULL
,则始终会减少 **from** 的引用计数。
-
struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from)¶
开始或继续按 class 搜索 PCI 设备
参数
unsigned int class
搜索具有此类别的 PCI 设备
struct pci_dev *from
搜索中找到的上一个 PCI 设备,或
NULL
用于新的搜索。
描述
遍历已知 PCI 设备列表。如果找到一个 PCI 设备,其 **class** 匹配,则设备的引用计数会增加,并且返回指向其设备结构的指针。否则,返回 NULL
。通过传递 NULL
作为 **from** 参数来启动新的搜索。否则,如果 **from** 不为 NULL
,则从全局列表中的下一个设备继续搜索。如果 **from** 不为 NULL
,则始终会减少 **from** 的引用计数。
-
struct pci_dev *pci_get_base_class(unsigned int class, struct pci_dev *from)¶
仅通过匹配基类代码来搜索 PCI 设备
参数
unsigned int class
搜索具有此基类代码的 PCI 设备
struct pci_dev *from
搜索中找到的上一个 PCI 设备,或
NULL
用于新的搜索。
描述
遍历已知 PCI 设备列表。如果找到一个 PCI 设备,其基类代码匹配,则设备的引用计数会增加。请参阅 pci_match_one_device() 以了解其工作原理。通过传递 NULL
作为 **from** 参数来启动新的搜索。否则,如果 **from** 不为 NULL
,则从全局列表中的下一个设备继续搜索。如果 **from** 不为 NULL
,则始终会减少 **from** 的引用计数。
返回
指向匹配的 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。否则,调用成功并返回 2 的幂,最大值为 2^5 (32),根据 MSI 规范。
-
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,然后让我们的释放方法完成其余工作。
-
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 device_release_driver 关联的 VF 的数量
参数
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设备,返回PCIe SRIOV capability中的TotalVFs值,或者如果驱动减少了VF数量,则返回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, const struct bin_attribute *bin_attr, char *buf, loff_t off, size_t count)¶
从传统的I/O端口空间读取字节
参数
struct file *filp
打开的sysfs文件
struct kobject *kobj
要读取的文件对应的kobject
const 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, const struct bin_attribute *bin_attr, char *buf, loff_t off, size_t count)¶
将字节写入传统的I/O端口空间
参数
struct file *filp
打开的sysfs文件
struct kobject *kobj
要读取的文件对应的kobject
const struct bin_attribute *bin_attr
此文件的struct bin_attribute
char *buf
包含要写入的值的缓冲区
loff_t off
传统的I/O端口空间中的偏移量
size_t count
要写入的字节数
描述
使用特定于架构的回调例程(pci_legacy_write)将1、2或4个字节写入传统的I/O端口空间。
-
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)¶
调整传统的file属性
参数
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表示write_combine映射
描述
使用常规的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, const struct bin_attribute *bin_attr, char *buf, loff_t off, size_t count)¶
用于启用对PCI ROM显示的访问
参数
struct file *filp
sysfs文件
struct kobject *kobj
内核对象句柄
const 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, const struct bin_attribute *bin_attr, char *buf, loff_t off, size_t count)¶
读取PCI ROM
参数
struct file *filp
sysfs文件
struct kobject *kobj
内核对象句柄
const 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
应该释放其条目的设备
描述
当从sysfs中删除pdev时进行清理。
-
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(由cpu_uid指示)关联的目标内存的导向标签。
返回
成功时返回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扩展Capability空间中,并将导向标签写入由索引指向的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: NO 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热插拔子系统注销一个hotplug_slot
参数
struct hotplug_slot *slot
指向要注销的
struct hotplug_slot
的指针
描述
在先前调用 pci_hp_register() 时,slot 必须已在 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 回调。