以下各节列出了 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 1
iov_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 1
iov_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 1
iov_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 文件中指定参数时由驱动程序指定的值。
指定整数参数值的最小范围。
指定整数参数值的最大范围。
指定将使用的缺省字符串(如果参数是字符串)。