1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER START
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * The contents of this file are subject to the terms of the
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Common Development and Distribution License (the "License").
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * You may not use this file except in compliance with the License.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * or http://www.opensolaris.org/os/licensing.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * See the License for the specific language governing permissions
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * and limitations under the License.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * When distributing Covered Code, include this CDDL HEADER in each
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * If applicable, add the following below this CDDL HEADER, with the
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * fields enclosed by brackets "[]" replaced with your own identifying
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * information: Portions Copyright [yyyy] [name of copyright owner]
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER END
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
0e26330710421d79f1fbb73c4f5f75086785b207WENTAO YANG * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#ifndef _SYS_VIO_MAILBOX_H
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define _SYS_VIO_MAILBOX_H
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#ifdef __cplusplus
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoextern "C" {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#endif
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <sys/ldc.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Message types */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_TYPE_CTRL 0x1
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_TYPE_DATA 0x2
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_TYPE_ERR 0x4
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Message sub-types */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_SUBTYPE_INFO 0x1
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_SUBTYPE_ACK 0x2
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_SUBTYPE_NACK 0x4
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO specific control envelopes: 0x0000 - 0x00FF
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNET specific control envelopes: 0x0100 - 0x01FF
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VDSK specific control envelopes: 0x0200 - 0x02FF
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * UNUSED envelopes: 0x0300 - 0x0FFF
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Generic Control Subtype Envelopes:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * type == VIO_TYPE_CTRL
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * subtype == VIO_SUBTYPE_{INFO|ACK|NACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 0x0000 - 0x003F
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_VER_INFO 0x0001
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_ATTR_INFO 0x0002
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_DRING_REG 0x0003
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_DRING_UNREG 0x0004
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_RDX 0x0005
678453a8ed49104d8adad58f3ba591bdc39883e8speer#define VIO_DDS_INFO 0x0006
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Generic subtype Data envelopes
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * type == VIO_TYPE_DATA
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * subtype == VIO_SUBTYPE_{INFO|ACK|NACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 0x0040 - 0x007F
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_PKT_DATA 0x0040
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_DESC_DATA 0x0041
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_DRING_DATA 0x0042
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Generic subtype Error envelopes
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * type == VIO_TYPE_ERR
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * subtype == VIO_SUBTYPE_{INFO|ACK|NACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 0x0080 - 0x00FF
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Currently unused
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Supported Device Types
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VDEV_NETWORK 0x1
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VDEV_NETWORK_SWITCH 0x2
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VDEV_DISK 0x3
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VDEV_DISK_SERVER 0x4
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO data transfer mode
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_PKT_MODE 0x1
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_DESC_MODE 0x2
f0ca1d9a12d54d304791bc74525e2010ca924726sb#define VIO_DRING_MODE_V1_0 0x3
f0ca1d9a12d54d304791bc74525e2010ca924726sb#define VIO_DRING_MODE_V1_2 0x4
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO Descriptor Ring registration options
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * (intended use for Descriptor Ring)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna#define VIO_TX_DRING 0x1
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna#define VIO_RX_DRING 0x2
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna#define VIO_RX_DRING_DATA 0x4
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Size of message payload
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_MSGTAG_SZ (sizeof (vio_msg_tag_t)) /* bytes */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_PAYLOAD_SZ (LDC_PAYLOAD_SIZE_UNRELIABLE - VIO_MSGTAG_SZ)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_PAYLOAD_ELEMS (VIO_PAYLOAD_SZ / LDC_ELEM_SIZE) /* num words */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
d10e4ef2fabf16c3237c6d6592496df3eac6a1efnarayan/*
d10e4ef2fabf16c3237c6d6592496df3eac6a1efnarayan * Peer dring processing state. Either actively processing dring
d10e4ef2fabf16c3237c6d6592496df3eac6a1efnarayan * or stopped.
d10e4ef2fabf16c3237c6d6592496df3eac6a1efnarayan */
d10e4ef2fabf16c3237c6d6592496df3eac6a1efnarayan#define VIO_DP_ACTIVE 1
d10e4ef2fabf16c3237c6d6592496df3eac6a1efnarayan#define VIO_DP_STOPPED 2
d10e4ef2fabf16c3237c6d6592496df3eac6a1efnarayan
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO device message tag.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * These 64 bits are used as a common header for all VIO message types.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef union vio_msg_tag {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo struct {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint8_t _msgtype;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint8_t _subtype;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint16_t _subtype_env;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint32_t _sid; /* session id */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo } _hdr;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint64_t tagword;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo} vio_msg_tag_t;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define vio_msgtype _hdr._msgtype
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define vio_subtype _hdr._subtype
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define vio_subtype_env _hdr._subtype_env
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define vio_sid _hdr._sid
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO version negotation message.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.msgtype == VIO_TYPE_CTRL
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.submsgtype = VIO_SUBTYPE_{INFO|ACK|NACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype_env == VIO_VER_INFO
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
0a55fbb79ee31ed09f84a9ae28e9747bc23f4a08lm
0a55fbb79ee31ed09f84a9ae28e9747bc23f4a08lm/* Structure to store a version tuple */
0a55fbb79ee31ed09f84a9ae28e9747bc23f4a08lmtypedef struct vio_ver {
0a55fbb79ee31ed09f84a9ae28e9747bc23f4a08lm uint16_t major; /* major version number */
0a55fbb79ee31ed09f84a9ae28e9747bc23f4a08lm uint16_t minor; /* minor version number */
0a55fbb79ee31ed09f84a9ae28e9747bc23f4a08lm} vio_ver_t;
0a55fbb79ee31ed09f84a9ae28e9747bc23f4a08lm
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vio_ver_msg {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Common tag */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo vio_msg_tag_t tag;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* version specific payload */
f2b610cf6e03184d9538e3aaec99bcaf65124714wentaoy uint16_t ver_major; /* major version number */
f2b610cf6e03184d9538e3aaec99bcaf65124714wentaoy uint16_t ver_minor; /* minor version number */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint8_t dev_class; /* type of device */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* padding */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint8_t resv1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint16_t resv2;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint64_t resv3[VIO_PAYLOAD_ELEMS - 1];
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo} vio_ver_msg_t;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO Descriptor Ring Register message.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.msgtype == VIO_TYPE_CTRL
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.submsgtype = VIO_SUBTYPE_{INFO|ACK|NACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype_env == VIO_DRING_REG
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vio_dring_reg_msg {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Common tag */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo vio_msg_tag_t tag;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Descriptor ring information */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint64_t dring_ident; /* =0 for SUBTYPE_INFO msg */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint32_t num_descriptors; /* # of desc in the ring */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint32_t descriptor_size; /* size of each entry */
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna uint16_t options; /* dring mode */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint16_t resv; /* padding */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint32_t ncookies; /* # cookies exporting ring */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /*
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna * The rest of the structure is variable in size. The first member that
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna * follows is the descriptor ring cookie(s), that is used in all dring
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna * modes. Following that are the members that are needed only in
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna * RxDringData mode. If the dring mode is not RxDringData and the # of
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna * dring cookies is 1, the message can be sent by LDC without
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna * fragmentation. As dring cookie array is variable in size depending
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna * on ncookies, the subsequent members are defined in a separate
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna * structure vio_dring_reg_msg_ext_t as shown below.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ldc_mem_cookie_t cookie[1];
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo} vio_dring_reg_msg_t;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna/*
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna * VIO Descriptor Ring Register Extended message; used in RxDringData mode.
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna */
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatnatypedef struct vio_dring_reg_extended_msg {
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna uint32_t data_ncookies; /* # of data area cookies */
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna uint32_t data_area_size; /* size of data area */
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna /*
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna * The data_cookie[] array is variable in size based on data_ncookies.
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna */
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna ldc_mem_cookie_t data_cookie[1]; /* data cookies */
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna} vio_dring_reg_ext_msg_t;
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO Descriptor Ring Unregister message.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.msgtype == VIO_TYPE_CTRL
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.submsgtype = VIO_SUBTYPE_{INFO|ACK|NACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype_env == VIO_DRING_UNREG
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vio_dring_unreg_msg {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Common tag */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo vio_msg_tag_t tag;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Descriptor ring information */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint64_t dring_ident;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint64_t resv[VIO_PAYLOAD_ELEMS - 1];
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo} vio_dring_unreg_msg_t;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Definition of a generic VIO message (with no payload) which can be cast
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * to other message types.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vio_msg {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Common tag */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo vio_msg_tag_t tag;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* no payload */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint64_t resv[VIO_PAYLOAD_ELEMS];
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo} vio_msg_t;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO Ready to Receive message.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.msgtype == VIO_TYPE_CTRL
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.submsgtype = VIO_SUBTYPE_{INFO|ACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype_env == VIO_RDX
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef vio_msg_t vio_rdx_msg_t;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO error message.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.msgtype == VIO_TYPE_ERR
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype == VIO_SUBTYPE_{INFO|ACK|NACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype_env == TBD
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef vio_msg_t vio_err_msg_t;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO descriptor ring data message.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.msgtype == VIO_TYPE_DATA
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype == VIO_SUBTYPE_{INFO|ACK|NACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype_env == VIO_DRING_DATA
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vio_dring_msg {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Common message tag */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo vio_msg_tag_t tag;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Data dring info */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint64_t seq_num;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint64_t dring_ident; /* ident of modified DRing */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint32_t start_idx; /* Indx of first updated elem */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo int32_t end_idx; /* Indx of last updated elem */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
d10e4ef2fabf16c3237c6d6592496df3eac6a1efnarayan uint8_t dring_process_state; /* Processing state */
d10e4ef2fabf16c3237c6d6592496df3eac6a1efnarayan
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Padding.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
d10e4ef2fabf16c3237c6d6592496df3eac6a1efnarayan uint8_t resv1;
d10e4ef2fabf16c3237c6d6592496df3eac6a1efnarayan uint16_t resv2;
d10e4ef2fabf16c3237c6d6592496df3eac6a1efnarayan uint32_t resv3;
d10e4ef2fabf16c3237c6d6592496df3eac6a1efnarayan uint64_t resv4[VIO_PAYLOAD_ELEMS - 4];
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo} vio_dring_msg_t;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO Common header for inband descriptor messages.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Clients will then combine this header with a device specific payload.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vio_inband_desc_msg_hdr {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Common message tag */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo vio_msg_tag_t tag;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint64_t seq_num; /* sequence number */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint64_t desc_handle; /* opaque descriptor handle */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo} vio_inband_desc_msg_hdr_t;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO raw data message.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.msgtype == VIO_TYPE_DATA
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype == VIO_SUBTYPE_{INFO|ACK|NACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype_env == VIO_PKT_DATA
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Note the data payload is so small to keep this message
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * within the size LDC can cope with without fragmentation.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * If it turns out in the future that we are not concerned
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * with fragmentation then we can increase the size of this
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * field.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vio_raw_data_msg {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Common message tag */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo vio_msg_tag_t tag;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Raw data packet payload */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint64_t seq_num; /* sequence number */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint64_t data[VIO_PAYLOAD_ELEMS - 1];
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo} vio_raw_data_msg_t;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
f0ca1d9a12d54d304791bc74525e2010ca924726sb#define VIO_PKT_DATA_HDRSIZE \
f0ca1d9a12d54d304791bc74525e2010ca924726sb (sizeof (vio_msg_tag_t) + sizeof (uint64_t))
f0ca1d9a12d54d304791bc74525e2010ca924726sb
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Definitions of the valid states a Descriptor can be in.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_DESC_FREE 0x1
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_DESC_READY 0x2
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_DESC_ACCEPTED 0x3
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_DESC_DONE 0x4
0e26330710421d79f1fbb73c4f5f75086785b207WENTAO YANG#define VIO_DESC_INITIALIZING 0x5
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_DESC_MASK 0xf
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Macro to populate the generic fields of the DRing data msg */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VIO_INIT_DRING_DATA_TAG(dmsg) \
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo dmsg.tag.vio_msgtype = VIO_TYPE_DATA; \
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo dmsg.tag.vio_subtype = VIO_SUBTYPE_INFO; \
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo dmsg.tag.vio_subtype_env = VIO_DRING_DATA;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#ifdef __cplusplus
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#endif
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#endif /* _SYS_VIO_MAILBOX_H */