Skip to content

Commit 7c1ae15

Browse files
yishaihawilliam
authored andcommitted
virtio_pci: Introduce device parts access commands
Introduce device parts access commands via the admin queue. These commands and their structure adhere to the Virtio 1.4 specification. Acked-by: Michael S. Tsirkin <[email protected]> Signed-off-by: Yishai Hadas <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Alex Williamson <[email protected]>
1 parent a13bf78 commit 7c1ae15

File tree

1 file changed

+131
-0
lines changed

1 file changed

+131
-0
lines changed

include/uapi/linux/virtio_pci.h

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
#define _LINUX_VIRTIO_PCI_H
4141

4242
#include <linux/types.h>
43+
#include <linux/kernel.h>
4344

4445
#ifndef VIRTIO_PCI_NO_LEGACY
4546

@@ -240,6 +241,17 @@ struct virtio_pci_cfg_cap {
240241
#define VIRTIO_ADMIN_CMD_LEGACY_DEV_CFG_READ 0x5
241242
#define VIRTIO_ADMIN_CMD_LEGACY_NOTIFY_INFO 0x6
242243

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+
243255
struct virtio_admin_cmd_hdr {
244256
__le16 opcode;
245257
/*
@@ -286,4 +298,123 @@ struct virtio_admin_cmd_notify_info_result {
286298
struct virtio_admin_cmd_notify_info_data entries[VIRTIO_ADMIN_CMD_MAX_NOTIFY_INFO];
287299
};
288300

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+
289420
#endif

0 commit comments

Comments
 (0)