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-X PCI_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 呼叫此函式。

int pci_enable_wake(struct pci_dev *pci_dev, pci_power_t state, bool enable)

更改 PCI 裝置的喚醒設定

引數

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

整個系統的目標狀態。

描述

返回適用於 devstate 的 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 裝置寬度能力。返回裝置支援的最大鏈路寬度。

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

int devm_pci_remap_iospace(struct device *dev, const struct resource *res, phys_addr_t phys_addr)

託管的 pci_remap_iospace()

引數

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

引數

struct pci_dev *pdev

為其啟用 MWI 的 PCI 裝置

描述

託管的 pci_set_mwi()

返回

錯誤時為適當的 -ERRNO 錯誤值,成功時為零。

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)

託管的 pci_enable_device()

引數

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,範圍從 offsetoffset + 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 id

unsigned int device

要匹配的 PCI device id,或 PCI_ANY_ID 以匹配所有 device id

unsigned int ss_vendor

要匹配的 PCI 子系統 vendor id,或 PCI_ANY_ID 以匹配所有 vendor id

unsigned int ss_device

要匹配的 PCI 子系統 device id,或 PCI_ANY_ID 以匹配所有 device id

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

unsigned int device

要匹配的 PCI device id,或 PCI_ANY_ID 以匹配所有 device id

struct 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 裝置的型別。

描述

顯而易見的事實:您沒有對可能被此函式找到的任何裝置的引用,因此如果該裝置在此函式完成後立即從系統中刪除,則該值將失效。使用此函式查詢通常內建到系統中的裝置,或者作為關於另一裝置是否恰好在此時存在的通用提示。

void pci_msi_mask_irq(struct irq_data *data)

用於遮蔽 PCI/MSI 中斷的通用 IRQ 晶片回撥

引數

struct irq_data *data

指向與該中斷關聯的 irqdata 的指標

void pci_msi_unmask_irq(struct irq_data *data)

用於取消遮蔽 PCI/MSI 中斷的通用 IRQ 晶片回撥

引數

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 回撥。