2026-01-29 22:25:33 +08:00

183 lines
4.0 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2023-2023. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* Description: vdpa vmstate header file
* Author: jiangdongxu
* Create: 2023-12-3
* Note:
* History: 2023-12-3: Create file
*/
#ifndef VDPA_VMSTATE_H
#define VDPA_VMSTATE_H
#include <linux/virtio_net.h>
#include <linux/virtio_scsi.h>
#define VIRTIO_MIG_STATE_TYPE_DEVICE 0
#define VIRTIO_MIG_STATE_TYPE_VQ 1
#define VIRTIO_MIG_STATE_TYPE_CONFIG 2
#define VIRTIO_MIG_STATE_TYPE_FEATURE 3
#define VIRTIO_MIG_STATE_TYPE_PLATFORM 4
#define VIRTIO_MIG_STATE_TYPE_VENDOR 255
#define VIRTIO_MIG_DEVICE_T_COMMON 0
#define VIRTIO_MIG_DEVICE_T_NET 1
#define VIRTIO_MIG_DEVICE_T_BLK 2
#define VIRTIO_MIG_DEVICE_T_SCSI 8
#define VIRTIO_MIG_CONFIG_T_NET 1
#define VIRTIO_MIG_CONFIG_T_BLK 2
#define VIRTIO_MIG_CONFIG_T_SCSI 8
#define MAC_LEN 6
struct virtio_mig_state_header {
le32 type;
le32 len;
};
struct virtio_mig_dev_common_data {
le32 vendor_id;
le32 device_id;
le32 device_features_l;
le32 device_features_h;
le32 driver_features_l;
le32 driver_features_h;
le32 status;
le32 generation;
le32 msix_en;
};
struct virtio_mig_dev_common_state {
struct virtio_mig_state_header hdr;
struct virtio_mig_dev_common_data data;
};
struct virtio_mig_vq_split_state {
le16 avail_index;
le16 used_index;
};
struct virtio_mig_vq_packed_state {
le16 avail_wrapped : 1;
le16 avail_index : 15;
le16 used_wrapped : 1;
le16 used_index : 15;
};
struct virtio_mig_per_vq_data {
le32 qsize;
u8 qenabled;
le16 msix_vector;
le32 desc_l;
le32 desc_h;
le32 avail_l;
le32 avail_h;
le32 used_l;
le32 used_h;
union {
struct virtio_mig_vq_split_state split;
struct virtio_mig_vq_packed_state packed;
} version;
};
/* vq state */
struct virtio_mig_vq_state {
struct virtio_mig_state_header hdr;
le16 msix_config;
le16 valid_queues;
le16 num_queues;
struct virtio_mig_per_vq_data vq_state[];
};
/* config space */
struct virtio_mig_config_state {
struct virtio_mig_state_header hdr;
union {
struct virtio_net_config net;
struct virtio_blk_config blk;
struct virtio_scsi_config scsi;
} dev;
};
struct virtio_mig_cfg_blk_features {
};
struct virtio_mig_cfg_scsi_features {
};
struct virtio_mig_cfg_net_ctrl_guest_offloads {
struct virtio_mig_state_header hdr;
le64 offloads;
le64 reserved;
};
struct virtio_mig_cfg_net_ctrl_mq_vq_pairs {
struct virtio_mig_state_header hdr;
le16 cur_virtqueue_pairs;
};
struct virtio_mig_cfg_net_ctrl_mac_table {
struct virtio_mig_state_header hdr;
le16 num_unicast;
/* TODO: need to be implemented later */
// u8 unicast_macs[][6];
le16 num_multicast;
/* TODO: need to be implemented later */
// u8 multicast_macs[][6];
};
struct virtio_mig_cfg_net_ctrl_vlan {
struct virtio_mig_state_header hdr;
le32 vlans[128];
};
struct virtio_mig_cfg_net_data {
le32 nfeatures;
struct virtio_mig_cfg_net_ctrl_guest_offloads offloads;
struct virtio_mig_cfg_net_ctrl_mq_vq_pairs mq_pairs;
struct virtio_mig_cfg_net_ctrl_mac_table mac_table;
struct virtio_mig_cfg_net_ctrl_vlan vlan_table;
};
struct virtio_mig_cfg_net_features {
struct virtio_mig_state_header hdr;
struct virtio_mig_cfg_net_data data;
};
/* feature */
struct virtio_mig_feat_state {
union {
struct virtio_mig_cfg_net_features net;
struct virtio_mig_cfg_blk_features blk;
struct virtio_mig_cfg_scsi_features scsi;
};
};
struct vdpa_mig_state {
struct virtio_mig_dev_common_state dev_state;
struct virtio_mig_config_state cfg_state;
struct virtio_mig_feat_state feat_state;
struct virtio_mig_vq_state vq_state;
};
#endif /* VDPA_VMSTATE_H */