|
40 | 40 | #define _LINUX_VIRTIO_PCI_H
|
41 | 41 |
|
42 | 42 | #include <linux/types.h>
|
| 43 | +#include <linux/kernel.h> |
43 | 44 |
|
44 | 45 | #ifndef VIRTIO_PCI_NO_LEGACY
|
45 | 46 |
|
@@ -240,6 +241,17 @@ struct virtio_pci_cfg_cap {
|
240 | 241 | #define VIRTIO_ADMIN_CMD_LEGACY_DEV_CFG_READ 0x5
|
241 | 242 | #define VIRTIO_ADMIN_CMD_LEGACY_NOTIFY_INFO 0x6
|
242 | 243 |
|
| 244 | +/* Device parts access commands. */ |
| 245 | +#define VIRTIO_ADMIN_CMD_CAP_ID_LIST_QUERY 0x7 |
| 246 | +#define VIRTIO_ADMIN_CMD_DEVICE_CAP_GET 0x8 |
| 247 | +#define VIRTIO_ADMIN_CMD_DRIVER_CAP_SET 0x9 |
| 248 | +#define VIRTIO_ADMIN_CMD_RESOURCE_OBJ_CREATE 0xa |
| 249 | +#define VIRTIO_ADMIN_CMD_RESOURCE_OBJ_DESTROY 0xd |
| 250 | +#define VIRTIO_ADMIN_CMD_DEV_PARTS_METADATA_GET 0xe |
| 251 | +#define VIRTIO_ADMIN_CMD_DEV_PARTS_GET 0xf |
| 252 | +#define VIRTIO_ADMIN_CMD_DEV_PARTS_SET 0x10 |
| 253 | +#define VIRTIO_ADMIN_CMD_DEV_MODE_SET 0x11 |
| 254 | + |
243 | 255 | struct virtio_admin_cmd_hdr {
|
244 | 256 | __le16 opcode;
|
245 | 257 | /*
|
@@ -286,4 +298,123 @@ struct virtio_admin_cmd_notify_info_result {
|
286 | 298 | struct virtio_admin_cmd_notify_info_data entries[VIRTIO_ADMIN_CMD_MAX_NOTIFY_INFO];
|
287 | 299 | };
|
288 | 300 |
|
| 301 | +#define VIRTIO_DEV_PARTS_CAP 0x0000 |
| 302 | + |
| 303 | +struct virtio_dev_parts_cap { |
| 304 | + __u8 get_parts_resource_objects_limit; |
| 305 | + __u8 set_parts_resource_objects_limit; |
| 306 | +}; |
| 307 | + |
| 308 | +#define MAX_CAP_ID __KERNEL_DIV_ROUND_UP(VIRTIO_DEV_PARTS_CAP + 1, 64) |
| 309 | + |
| 310 | +struct virtio_admin_cmd_query_cap_id_result { |
| 311 | + __le64 supported_caps[MAX_CAP_ID]; |
| 312 | +}; |
| 313 | + |
| 314 | +struct virtio_admin_cmd_cap_get_data { |
| 315 | + __le16 id; |
| 316 | + __u8 reserved[6]; |
| 317 | +}; |
| 318 | + |
| 319 | +struct virtio_admin_cmd_cap_set_data { |
| 320 | + __le16 id; |
| 321 | + __u8 reserved[6]; |
| 322 | + __u8 cap_specific_data[]; |
| 323 | +}; |
| 324 | + |
| 325 | +struct virtio_admin_cmd_resource_obj_cmd_hdr { |
| 326 | + __le16 type; |
| 327 | + __u8 reserved[2]; |
| 328 | + __le32 id; /* Indicates unique resource object id per resource object type */ |
| 329 | +}; |
| 330 | + |
| 331 | +struct virtio_admin_cmd_resource_obj_create_data { |
| 332 | + struct virtio_admin_cmd_resource_obj_cmd_hdr hdr; |
| 333 | + __le64 flags; |
| 334 | + __u8 resource_obj_specific_data[]; |
| 335 | +}; |
| 336 | + |
| 337 | +#define VIRTIO_RESOURCE_OBJ_DEV_PARTS 0 |
| 338 | + |
| 339 | +#define VIRTIO_RESOURCE_OBJ_DEV_PARTS_TYPE_GET 0 |
| 340 | +#define VIRTIO_RESOURCE_OBJ_DEV_PARTS_TYPE_SET 1 |
| 341 | + |
| 342 | +struct virtio_resource_obj_dev_parts { |
| 343 | + __u8 type; |
| 344 | + __u8 reserved[7]; |
| 345 | +}; |
| 346 | + |
| 347 | +#define VIRTIO_ADMIN_CMD_DEV_PARTS_METADATA_TYPE_SIZE 0 |
| 348 | +#define VIRTIO_ADMIN_CMD_DEV_PARTS_METADATA_TYPE_COUNT 1 |
| 349 | +#define VIRTIO_ADMIN_CMD_DEV_PARTS_METADATA_TYPE_LIST 2 |
| 350 | + |
| 351 | +struct virtio_admin_cmd_dev_parts_metadata_data { |
| 352 | + struct virtio_admin_cmd_resource_obj_cmd_hdr hdr; |
| 353 | + __u8 type; |
| 354 | + __u8 reserved[7]; |
| 355 | +}; |
| 356 | + |
| 357 | +#define VIRTIO_DEV_PART_F_OPTIONAL 0 |
| 358 | + |
| 359 | +struct virtio_dev_part_hdr { |
| 360 | + __le16 part_type; |
| 361 | + __u8 flags; |
| 362 | + __u8 reserved; |
| 363 | + union { |
| 364 | + struct { |
| 365 | + __le32 offset; |
| 366 | + __le32 reserved; |
| 367 | + } pci_common_cfg; |
| 368 | + struct { |
| 369 | + __le16 index; |
| 370 | + __u8 reserved[6]; |
| 371 | + } vq_index; |
| 372 | + } selector; |
| 373 | + __le32 length; |
| 374 | +}; |
| 375 | + |
| 376 | +struct virtio_dev_part { |
| 377 | + struct virtio_dev_part_hdr hdr; |
| 378 | + __u8 value[]; |
| 379 | +}; |
| 380 | + |
| 381 | +struct virtio_admin_cmd_dev_parts_metadata_result { |
| 382 | + union { |
| 383 | + struct { |
| 384 | + __le32 size; |
| 385 | + __le32 reserved; |
| 386 | + } parts_size; |
| 387 | + struct { |
| 388 | + __le32 count; |
| 389 | + __le32 reserved; |
| 390 | + } hdr_list_count; |
| 391 | + struct { |
| 392 | + __le32 count; |
| 393 | + __le32 reserved; |
| 394 | + struct virtio_dev_part_hdr hdrs[]; |
| 395 | + } hdr_list; |
| 396 | + }; |
| 397 | +}; |
| 398 | + |
| 399 | +#define VIRTIO_ADMIN_CMD_DEV_PARTS_GET_TYPE_SELECTED 0 |
| 400 | +#define VIRTIO_ADMIN_CMD_DEV_PARTS_GET_TYPE_ALL 1 |
| 401 | + |
| 402 | +struct virtio_admin_cmd_dev_parts_get_data { |
| 403 | + struct virtio_admin_cmd_resource_obj_cmd_hdr hdr; |
| 404 | + __u8 type; |
| 405 | + __u8 reserved[7]; |
| 406 | + struct virtio_dev_part_hdr hdr_list[]; |
| 407 | +}; |
| 408 | + |
| 409 | +struct virtio_admin_cmd_dev_parts_set_data { |
| 410 | + struct virtio_admin_cmd_resource_obj_cmd_hdr hdr; |
| 411 | + struct virtio_dev_part parts[]; |
| 412 | +}; |
| 413 | + |
| 414 | +#define VIRTIO_ADMIN_CMD_DEV_MODE_F_STOPPED 0 |
| 415 | + |
| 416 | +struct virtio_admin_cmd_dev_mode_set_data { |
| 417 | + __u8 flags; |
| 418 | +}; |
| 419 | + |
289 | 420 | #endif
|
0 commit comments