struct vio_msg_tag {
uint8_t type;
uint8_t stype;
uint16_t stype_env;
uint32_t sid;
};
struct vio_msg {
uint64_t hdr;
uint8_t type;
uint8_t stype;
uint16_t stype_env;
uint32_t sid;
uint16_t major;
uint16_t minor;
uint8_t dev_class;
};
#define VIO_TYPE_CTRL 0x01
#define VIO_TYPE_DATA 0x02
#define VIO_TYPE_ERR 0x04
#define VIO_SUBTYPE_INFO 0x01
#define VIO_SUBTYPE_ACK 0x02
#define VIO_SUBTYPE_NACK 0x04
#define VIO_VER_INFO 0x0001
#define VIO_ATTR_INFO 0x0002
#define VIO_DRING_REG 0x0003
#define VIO_DRING_UNREG 0x0004
#define VIO_RDX 0x0005
#define VIO_PKT_DATA 0x0040
#define VIO_DESC_DATA 0x0041
#define VIO_DRING_DATA 0x0042
struct vio_ver_info {
struct vio_msg_tag tag;
uint16_t major;
uint16_t minor;
uint8_t dev_class;
uint8_t _reserved1[3];
uint64_t _reserved2[5];
};
#define VDEV_NETWORK 0x01
#define VDEV_NETWORK_SWITCH 0x02
#define VDEV_DISK 0x03
#define VDEV_DISK_SERVER 0x04
struct vio_dring_reg {
struct vio_msg_tag tag;
uint64_t dring_ident;
uint32_t num_descriptors;
uint32_t descriptor_size;
uint16_t options;
uint16_t _reserved;
uint32_t ncookies;
struct ldc_cookie cookie[1];
};
#define VIO_TX_RING 0x0001
#define VIO_RX_RING 0x0002
#define VIO_PKT_MODE 0x01
#define VIO_DESC_MODE 0x02
#define VIO_DRING_MODE 0x03
struct vio_dring_hdr {
uint8_t dstate;
uint8_t ack: 1;
uint16_t _reserved[3];
};
#define VIO_DESC_FREE 0x01
#define VIO_DESC_READY 0x02
#define VIO_DESC_ACCEPTED 0x03
#define VIO_DESC_DONE 0x04
struct vio_dring_msg {
struct vio_msg_tag tag;
uint64_t seq_no;
uint64_t dring_ident;
uint32_t start_idx;
uint32_t end_idx;
uint8_t proc_state;
uint8_t _reserved1[7];
uint64_t _reserved2[2];
};
#define VIO_DP_ACTIVE 0x01
#define VIO_DP_STOPPED 0x02
struct vio_rdx {
struct vio_msg_tag tag;
uint64_t _reserved[6];
};