其他固件接口¶
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
数据索引(参见枚举 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
数据索引(参见枚举 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 时调用此函数。这应该在注销后立即发生,但以防万一,我们仍然使用 release 回调。
-
int edd_dev_is_type(struct edd_device *edev, const char *type)¶
此 EDD 设备是否为“type”设备?
参数
struct edd_device *edev
目标 edd_device
const char *type
每个 EDD 规范的主机总线或接口标识符字符串
描述
如果是“type”设备,则返回 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
无参数
通用系统帧缓冲接口¶
参数
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
要释放的内存
描述
此函数由服务客户端用于释放已分配的缓冲区。