其他韌體介面¶
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以進行新搜尋。迭代已知的板載裝置列表。如果找到具有匹配的 type 和 name 的裝置,則返回指向其裝置結構的指標。否則,返回
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 fDMI 欄位識別符號
const char *str要與 DMI 欄位比較的字串
描述
如果請求的欄位等於 str(包括 NULL),則返回 true。
-
u8 dmi_memdev_type(u16 handle)¶
獲取記憶體型別
引數
u16 handleDMI 結構控制代碼
描述
返回與給定 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 * kobjedd 結構的 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 *edevedd_device
描述
如果找到,則返回 pci_dev,否則返回 NULL
-
int edd_init(void)¶
建立 EDD 資料的 sysfs 樹
引數
void無引數
通用系統幀緩衝區介面¶
引數
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;
};
成員
flagsFPGA 配置型別的標誌位
-
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要釋放的記憶體
描述
服務客戶端使用此函式來釋放已分配的緩衝區。