编写适用于 Oracle® Solaris 11.2 的设备驱动程序

退出打印视图

更新时间: 2014 年 9 月
 
 

数据结构

以下各节列出了 PF 驱动程序在实现 ioctl 之前应该定义并初始化的数据结构:

iov_param_ver_info 结构

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;

其中:

version

版本信息

num_params

参数个数

iov_param_validate 结构

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;

其中:

pv_reason

ioctl 调用失败时用于解释失败原因的一个 ASCII 字符串

pv_buflen

缓冲区 pv_buf 的长度

pv_buf

包含参数的缓冲区

iov_param_desc 结构

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; 

其中:

pd_name

ldm (1M) 命令或 pci.conf 文件中使用,用于为参数指定值。

pd_desc

参数的简短说明。

pd_flag

指示参数是仅适用于 PF,还是仅适用于 VF,亦或是同时适用于 PF 和 VF。

pd_default_value

未在 ldm() 命令或 pci.conf 文件中指定参数时由驱动程序指定的值。

pd_min64

指定整数参数值的最小范围。

pd_max64

指定整数参数值的最大范围。

pd_default_string

指定将使用的缺省字符串(如果参数是字符串)。