其他韌體介面

DMI 介面

int dmi_check_system(const struct dmi_system_id *list)

檢查系統 DMI 資料

引數

const struct dmi_system_id *list

要匹配的 dmi_system_id 結構陣列。列表的所有非空元素必須匹配其槽位(欄位索引)的資料(即,每個列表字串必須是指定 DMI 槽位字串資料的子字串),才能被認為是成功的匹配。

遍歷黑名單表,執行匹配函式,直到有人返回非零值或到達末尾。對於每個成功的匹配,都會呼叫回撥函式。返回匹配的數量。

必須在呼叫此函式之前呼叫 dmi_setup。

const struct dmi_system_id *dmi_first_match(const struct dmi_system_id *list)

查詢與系統 DMI 資料匹配的 dmi_system_id 結構

引數

const struct dmi_system_id *list

要匹配的 dmi_system_id 結構陣列。列表的所有非空元素必須匹配其槽位(欄位索引)的資料(即,每個列表字串必須是指定 DMI 槽位字串資料的子字串),才能被認為是成功的匹配。

遍歷黑名單表,直到找到第一個匹配項。如果找不到匹配項,則返回指向匹配條目的指標或 NULL。

必須在呼叫此函式之前呼叫 dmi_setup。

const char *dmi_get_system_info(int field)

返回 DMI 資料值

引數

int field

資料索引(請參見 enum dmi_field)

返回一個 DMI 資料值,可用於執行復雜的 DMI 資料檢查。

int dmi_name_in_vendors(const char *str)

檢查字串是否在 DMI 系統或主機板供應商名稱中

引數

const char *str

區分大小寫的名稱

const struct dmi_device *dmi_find_device(int type, const char *name, const struct dmi_device *from)

按型別/名稱查詢板載裝置

引數

int type

裝置型別或 DMI_DEV_TYPE_ANY 以匹配所有裝置型別

const char *name

裝置名稱字串或 NULL 以匹配所有裝置

const struct dmi_device *from

搜尋中找到的先前裝置,或 NULL 以進行新搜尋。

迭代已知的板載裝置列表。如果找到具有匹配的 typename 的裝置,則返回指向其裝置結構的指標。否則,返回 NULL。透過傳遞 NULL 作為 from 引數來啟動新搜尋。如果 from 不為 NULL,則從下一個裝置繼續搜尋。

bool dmi_get_date(int field, int *yearp, int *monthp, int *dayp)

解析 DMI 日期

引數

int field

資料索引(請參見 enum dmi_field)

int *yearp

年份的可選輸出引數

int *monthp

月份的可選輸出引數

int *dayp

日期的可選輸出引數

假定日期欄位採用類似於 [mm[/dd]]/yy[yy] 的形式,並且結果儲存在輸出引數中,可以省略任何或所有引數。

如果該欄位不存在,則所有輸出引數都設定為零並返回 false。否則,將返回 true,並且日期的任何無效部分都設定為零。

返回時,保證年、月和日分別在 [0,9999]、[0,12] 和 [0,31] 範圍內。

int dmi_get_bios_year(void)

從 DMI_BIOS_DATE 欄位中獲取年份

引數

void

無引數

描述

成功時返回年份,如果未選擇 DMI,則返回 -ENXIO,如果 DMI 欄位不存在或無法解析,則返回不同的負錯誤程式碼。

int dmi_walk(void (*decode)(const struct dmi_header*, void*), void *private_data)

遍歷 DMI 表,併為每個記錄呼叫回撥

引數

void (*decode)(const struct dmi_header *, void *)

回撥函式

void *private_data

要傳遞給回撥函式的私有資料

成功時返回 0,如果未選擇或不存在 DMI,則返回 -ENXIO,如果 DMI 遍歷失敗,則返回不同的負錯誤程式碼。

bool dmi_match(enum dmi_field f, const char *str)

將字串與 dmi 欄位(如果存在)進行比較

引數

enum dmi_field f

DMI 欄位識別符號

const char *str

要與 DMI 欄位比較的字串

描述

如果請求的欄位等於 str(包括 NULL),則返回 true。

u8 dmi_memdev_type(u16 handle)

獲取記憶體型別

引數

u16 handle

DMI 結構控制代碼

描述

返回與給定 DMI 控制代碼關聯的插槽中模組的 DMI 記憶體型別,如果不存在此類 DMI 控制代碼,則返回 0x0。

u16 dmi_memdev_handle(int slot)

獲取記憶體插槽的 DMI 控制代碼

引數

int slot

插槽號

返回與給定記憶體插槽關聯的 DMI 控制代碼,如果不存在此類插槽,則返回 0xFFFF

EDD 介面

ssize_t edd_show_raw_data(struct edd_device *edev, char *buf)

將原始資料複製到緩衝區以供使用者空間解析

引數

struct edd_device *edev

目標 edd_device

char *buf

輸出緩衝區

返回

寫入的位元組數,或者失敗時返回 -EINVAL

void edd_release(struct kobject *kobj)

釋放 edd 結構

引數

struct kobject * kobj

edd 結構的 kobject

當 edd 結構的引用計數達到 0 時,會呼叫此函式。這應該在我們取消註冊後立即發生,但以防萬一,我們仍然使用釋放回調。

int edd_dev_is_type(struct edd_device *edev, const char *type)

此 EDD 裝置是否為“型別”裝置?

引數

struct edd_device *edev

目標 edd_device

const char *type

每個 EDD 規範的主機匯流排或介面識別符號字串

描述

如果是“型別”裝置,則返回 1 (TRUE),否則返回 0。

struct pci_dev *edd_get_pci_dev(struct edd_device *edev)

查詢與 edev 匹配的 pci_dev

引數

struct edd_device *edev

edd_device

描述

如果找到,則返回 pci_dev,否則返回 NULL

int edd_init(void)

建立 EDD 資料的 sysfs 樹

引數

void

無引數

通用系統幀緩衝區介面

void sysfb_disable(struct device *dev)

停用通用系統幀緩衝區支援

引數

struct device *dev

要檢查是否為非 NULL 的裝置

描述

這將停用註冊與通用驅動程式匹配的系統幀緩衝區裝置,這些驅動程式使用由韌體設定的系統幀緩衝區。

如果裝置已由 sysfb_init() 註冊,它也會取消註冊該裝置。

上下文

該函式可以休眠。 會獲取一個 disable_lock 互斥鎖,以針對註冊系統幀緩衝裝置的 sysfb_init() 進行序列化。

bool sysfb_handles_screen_info(void)

報告 sysfb 是否處理全域性 screen_info

引數

void

無引數

描述

呼叫者可以使用 sysfb_handles_screen_info() 來確定通用系統幀緩衝區 (sysfb) 是否可以處理全域性 screen_info 資料結構。驅動程式可能需要此資訊來了解它們是否必須設定系統幀緩衝區,或者是否必須將此操作委託給 sysfb。

返回

如果 sysfb 處理全域性 screen_info 資料結構,則為 True。

Intel Stratix10 SoC 服務層

Intel Stratix10 SoC 的某些功能需要比核心被授予的更高的許可權級別。此類安全功能包括 FPGA 程式設計。就 ARMv8 架構而言,核心在異常級別 1 (EL1) 執行,訪問這些功能需要異常級別 3 (EL3)。

Intel Stratix10 SoC 服務層提供了一個核心 API,供驅動程式請求訪問安全功能。這些請求會被排隊並逐個處理。ARM 的 SMCCC 用於將請求的執行傳遞到安全監視器 (EL3)。

enum stratix10_svc_command_code

支援的服務命令

常量

COMMAND_NOOP

為整合/除錯/故障排除執行“虛擬”請求

COMMAND_RECONFIG

請求 FPGA 配置準備,返回狀態為 SVC_STATUS_OK

COMMAND_RECONFIG_DATA_SUBMIT

提交用於 FPGA 配置的位元流資料的緩衝區,返回狀態為 SVC_STATUS_SUBMITTED 或 SVC_STATUS_ERROR

COMMAND_RECONFIG_DATA_CLAIM

檢查配置的狀態,返回狀態為 SVC_STATUS_COMPLETED、SVC_STATUS_BUSY 或 SVC_STATUS_ERROR

COMMAND_RECONFIG_STATUS

檢查配置的狀態,返回狀態為 SVC_STATUS_COMPLETED、SVC_STATUS_BUSY 或 SVC_STATUS_ERROR

COMMAND_RSU_STATUS

請求遠端系統更新啟動日誌,返回狀態為日誌資料或 SVC_STATUS_RSU_ERROR

COMMAND_RSU_UPDATE

設定重新啟動後要啟動的位元流的偏移量,返回狀態為 SVC_STATUS_OK 或 SVC_STATUS_ERROR

COMMAND_RSU_NOTIFY

向韌體報告硬處理器系統軟體的狀態,返回狀態為 SVC_STATUS_OK 或 SVC_STATUS_ERROR

COMMAND_RSU_RETRY

查詢韌體以獲取當前映像的重試計數器,返回狀態為 SVC_STATUS_OK 或 SVC_STATUS_ERROR

COMMAND_RSU_MAX_RETRY

查詢韌體以獲取最大重試值,返回狀態為 SVC_STATUS_OK 或 SVC_STATUS_ERROR

COMMAND_RSU_DCMF_VERSION

查詢韌體以獲取 DCMF 版本,返回狀態為 SVC_STATUS_OK 或 SVC_STATUS_ERROR

COMMAND_RSU_DCMF_STATUS

查詢韌體以獲取 DCMF 狀態,返回狀態為 SVC_STATUS_OK 或 SVC_STATUS_ERROR

COMMAND_FIRMWARE_VERSION

查詢正在執行的韌體版本,返回狀態為 SVC_STATUS_OK 或 SVC_STATUS_ERROR

COMMAND_FCS_REQUEST_SERVICE

請求韌體驗證映像,返回狀態為 SVC_STATUS_OK、SVC_STATUS_INVALID_PARAM

COMMAND_FCS_SEND_CERTIFICATE

傳送證書,返回狀態為 SVC_STATUS_OK、SVC_STATUS_INVALID_PARAM、SVC_STATUS_ERROR

COMMAND_FCS_GET_PROVISION_DATA

讀取配置資料,返回狀態為 SVC_STATUS_OK、SVC_STATUS_INVALID_PARAM、SVC_STATUS_ERROR

COMMAND_FCS_DATA_ENCRYPTION

加密資料,返回狀態為 SVC_STATUS_OK、SVC_STATUS_INVALID_PARAM、SVC_STATUS_ERROR

COMMAND_FCS_DATA_DECRYPTION

解密資料,返回狀態為 SVC_STATUS_OK、SVC_STATUS_INVALID_PARAM、SVC_STATUS_ERROR

COMMAND_FCS_RANDOM_NUMBER_GEN

生成一個隨機數,返回狀態為 SVC_STATUS_OK、SVC_STATUS_ERROR

COMMAND_POLL_SERVICE_STATUS

輪詢服務請求是否完成,返回狀態為 SVC_STATUS_OK、SVC_STATUS_ERROR 或 SVC_STATUS_BUSY

COMMAND_MBOX_SEND_CMD

傳送通用郵箱命令,返回狀態為 SVC_STATUS_OK 或 SVC_STATUS_ERROR

COMMAND_SMC_SVC_VERSION

非郵箱 SMC SVC API 版本,返回狀態為 SVC_STATUS_OK

struct stratix10_svc_client_msg

客戶端傳送到服務的訊息

定義:

struct stratix10_svc_client_msg {
    void *payload;
    size_t payload_length;
    void *payload_output;
    size_t payload_length_output;
    enum stratix10_svc_command_code command;
    u64 arg[3];
};

成員

payload

需要處理的資料的起始地址

payload_length

要處理的資料大小(以位元組為單位)

payload_output

處理後的資料的起始地址

payload_length_output

處理後的資料大小(以位元組為單位)

command

服務命令

arg

要透過暫存器傳遞而不是物理對映的緩衝區的引數

struct stratix10_svc_command_config_type

配置型別

定義:

struct stratix10_svc_command_config_type {
    u32 flags;
};

成員

flags

FPGA 配置型別的標誌位

struct stratix10_svc_cb_data

來自服務層的回撥資料結構

定義:

struct stratix10_svc_cb_data {
    u32 status;
    void *kaddr1;
    void *kaddr2;
    void *kaddr3;
};

成員

status

已傳送命令的狀態

kaddr1

第一個已完成資料塊的地址

kaddr2

第二個已完成資料塊的地址

kaddr3

第三個已完成資料塊的地址

struct stratix10_svc_client

服務客戶端結構

定義:

struct stratix10_svc_client {
    struct device *dev;
    void (*receive_cb)(struct stratix10_svc_client *client, struct stratix10_svc_cb_data *cb_data);
    void *priv;
};

成員

dev

客戶端裝置

receive_cb

向服務客戶端提供接收到的資料的回撥

priv

客戶端私有資料

struct stratix10_svc_chan *stratix10_svc_request_channel_byname(struct stratix10_svc_client *client, const char *name)

請求服務通道

引數

struct stratix10_svc_client *client

指向服務客戶端的指標

const char *name

服務客戶端名稱

描述

服務客戶端使用此函式來請求服務通道。

返回

成功時指向分配給客戶端的通道的指標,或者在出錯時指向 ERR_PTR()

void stratix10_svc_free_channel(struct stratix10_svc_chan *chan)

釋放服務通道

引數

struct stratix10_svc_chan *chan

要釋放的服務通道

描述

服務客戶端使用此函式來釋放服務通道。

int stratix10_svc_send(struct stratix10_svc_chan *chan, void *msg)

向遠端傳送訊息資料

引數

struct stratix10_svc_chan *chan

分配給客戶端的服務通道

void *msg

要傳送的訊息資料,格式為“struct stratix10_svc_client_msg

描述

服務客戶端使用此函式將訊息新增到服務層驅動程式的佇列中,以便傳送到安全世界。

返回

成功時為 0,出錯時為 -ENOMEM 或 -ENOBUFS。

void stratix10_svc_done(struct stratix10_svc_chan *chan)

完成服務請求事務

引數

struct stratix10_svc_chan *chan

分配給客戶端的服務通道

描述

當客戶端完成其請求或請求過程中出現錯誤時,應呼叫此函式。它允許服務層停止執行的執行緒,以最大程度地節省核心資源。

void *stratix10_svc_allocate_memory(struct stratix10_svc_chan *chan, size_t size)

分配記憶體

引數

struct stratix10_svc_chan *chan

分配給客戶端的服務通道

size_t size

特定服務客戶端請求的記憶體大小

描述

服務層從記憶體池分配請求的位元組數緩衝區,服務客戶端使用此函式來獲取已分配的緩衝區。

返回

成功時為分配的記憶體的地址,或者在出錯時為 ERR_PTR()

void stratix10_svc_free_memory(struct stratix10_svc_chan *chan, void *kaddr)

釋放已分配的記憶體

引數

struct stratix10_svc_chan *chan

分配給客戶端的服務通道

void *kaddr

要釋放的記憶體

描述

服務客戶端使用此函式來釋放已分配的緩衝區。