vio_mailbox.h revision 17cadca83cc82e37ff517ea2783eb4bfcc07b950
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER START
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 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * See the License for the specific language governing permissions
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * and limitations under the License.
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 * CDDL HEADER END
17cadca83cc82e37ff517ea2783eb4bfcc07b950lm * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Use is subject to license terms.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#pragma ident "%Z%%M% %I% %E% SMI"
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoextern "C" {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Message types */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Message sub-types */
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 * Generic Control Subtype Envelopes:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * type == VIO_TYPE_CTRL
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * subtype == VIO_SUBTYPE_{INFO|ACK|NACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 0x0000 - 0x003F
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Generic subtype Data envelopes
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * type == VIO_TYPE_DATA
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * subtype == VIO_SUBTYPE_{INFO|ACK|NACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 0x0040 - 0x007F
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Generic subtype Error envelopes
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * type == VIO_TYPE_ERR
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * subtype == VIO_SUBTYPE_{INFO|ACK|NACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 0x0080 - 0x00FF
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Currently unused
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Supported Device Types
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO data transfer mode
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO Descriptor Ring registration options
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * (intended use for Descriptor Ring)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Size of message payload
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 */
d10e4ef2fabf16c3237c6d6592496df3eac6a1efnarayan * Peer dring processing state. Either actively processing dring
d10e4ef2fabf16c3237c6d6592496df3eac6a1efnarayan * or stopped.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO device message tag.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * These 64 bits are used as a common header for all VIO message types.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef union vio_msg_tag {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO version negotation message.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.msgtype == VIO_TYPE_CTRL
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.submsgtype = VIO_SUBTYPE_{INFO|ACK|NACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype_env == VIO_VER_INFO
0a55fbb79ee31ed09f84a9ae28e9747bc23f4a08lm/* Structure to store a version tuple */
0a55fbb79ee31ed09f84a9ae28e9747bc23f4a08lmtypedef struct vio_ver {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vio_ver_msg {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Common tag */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* version specific payload */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* padding */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO Descriptor Ring Register message.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.msgtype == VIO_TYPE_CTRL
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.submsgtype = VIO_SUBTYPE_{INFO|ACK|NACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype_env == VIO_DRING_REG
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vio_dring_reg_msg {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Common tag */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Descriptor ring information */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * cookie is a variable sized array. If the number of cookies is 1,
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * the message can be sent by LDC without fragmentation.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO Descriptor Ring Unregister message.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.msgtype == VIO_TYPE_CTRL
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.submsgtype = VIO_SUBTYPE_{INFO|ACK|NACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype_env == VIO_DRING_UNREG
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vio_dring_unreg_msg {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Common tag */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Descriptor ring information */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Definition of a generic VIO message (with no payload) which can be cast
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * to other message types.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vio_msg {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Common tag */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* no payload */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO Ready to Receive message.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.msgtype == VIO_TYPE_CTRL
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.submsgtype = VIO_SUBTYPE_{INFO|ACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype_env == VIO_RDX
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO error message.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.msgtype == VIO_TYPE_ERR
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype == VIO_SUBTYPE_{INFO|ACK|NACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype_env == TBD
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO descriptor ring data message.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.msgtype == VIO_TYPE_DATA
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype == VIO_SUBTYPE_{INFO|ACK|NACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype_env == VIO_DRING_DATA
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vio_dring_msg {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Common message tag */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Data dring info */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO Common header for inband descriptor messages.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Clients will then combine this header with a device specific payload.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vio_inband_desc_msg_hdr {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Common message tag */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VIO raw data message.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.msgtype == VIO_TYPE_DATA
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype == VIO_SUBTYPE_{INFO|ACK|NACK}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * tag.subtype_env == VIO_PKT_DATA
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
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vio_raw_data_msg {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Common message tag */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Raw data packet payload */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Definitions of the valid states a Descriptor can be in.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Macro to populate the generic fields of the DRing data msg */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#endif /* _SYS_VIO_MAILBOX_H */