以下各节列出了 PF 驱动程序在实现 ioctl 之前应该定义并初始化的数据结构:
iov_param_ver_info 结构定义如下所示:
#define IOV_IOCTL (('I' << 24) | ('O' << 16) | ('V' << 8))
#define IOV_GET_VER_INFO (IOV_IOCTL | 0)
#define IOV_GET_PARAM_INFO (IOV_IOCTL | 1)
#define IOV_VALIDATE_PARAM (IOV_IOCTL | 2)
#define IOV_PARAM_DESC_VERSION 1iov_param_ver_info 结构包含以下字段:
typedef struct iov_param_ver_info {
uint32_t version;
uint32_t num_params;
} iov_param_ver_info_t;其中:
版本信息
参数个数
iov_param_validate 结构定义如下所示:
#define IOV_IOCTL (('I' << 24) | ('O' << 16) | ('V' << 8))
#define IOV_GET_VER_INFO (IOV_IOCTL | 0)
#define IOV_GET_PARAM_INFO (IOV_IOCTL | 1)
#define IOV_VALIDATE_PARAM (IOV_IOCTL | 2)
#define IOV_PARAM_DESC_VERSION 1iov_param_validate 包含以下字段:
typedef struct iov_param_validate {
char pv_reason[MAX_REASON_LEN + 1];
int32_t pv_buflen;
/* encoded buffer containing params */
char pv_buf[1]; /* size of buf is pv_buflen */
} iov_param_validate_t;其中:
ioctl 调用失败时用于解释失败原因的一个 ASCII 字符串
缓冲区 pv_buf 的长度
包含参数的缓冲区
iov_param_desc 结构定义如下所示:
#define IOV_IOCTL (('I' << 24) | ('O' << 16) | ('V' << 8))
#define IOV_GET_VER_INFO (IOV_IOCTL | 0)
#define IOV_GET_PARAM_INFO (IOV_IOCTL | 1)
#define IOV_VALIDATE_PARAM (IOV_IOCTL | 2)
#define IOV_PARAM_DESC_VERSION 1iov_param_desc 结构包含以下字段:
typedef struct iov_param_desc {
char pd_name[MAX_PARAM_NAME_SIZE];
char pd_desc[MAX_PARAM_DESC_SIZE];
int32_t pd_flag; /* applicable for PF or VF or both */
int32_t pd_data_type; /* integer, string, plist */
/* Following 3 are applicable for integer data types */
uint64_t pd_default_value;
uint64_t pd_min64;
uint64_t pd_max64;
char pd_default_string [MAX_PARAM_DEFAULT_STRING_SIZE];
} iov_param_desc_t; 其中:
在 ldm (1M) 命令或 pci.conf 文件中使用,用于为参数指定值。
参数的简短说明。
指示参数是仅适用于 PF,还是仅适用于 VF,亦或是同时适用于 PF 和 VF。
未在 ldm() 命令或 pci.conf 文件中指定参数时由驱动程序指定的值。
指定整数参数值的最小范围。
指定整数参数值的最大范围。
指定将使用的缺省字符串(如果参数是字符串)。