1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef _SYS_VNET_MAILBOX_H
28 #define	_SYS_VNET_MAILBOX_H
29 
30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
31 
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35 
36 #include <sys/vio_mailbox.h>
37 #include <sys/ethernet.h>
38 
39 /*
40  * VNET specific Control envelopes: 0x0100 - 0x01FF
41  *	type == VIO_TYPE_CTRL
42  *	subtype == VIO_SUBTYPE_{INFO|ACK|NACK}
43  */
44 #define	VNET_MCAST_INFO		0x0101
45 
46 /*
47  * Vnet/Vswitch device attributes information message.
48  *
49  * tag.msgtype == VIO_TYPE_CTRL
50  * tag.submsgtype = VIO_SUBTYPE_{INFO|ACK|NACK}
51  * tag.subtype_env == VIO_ATTR_INFO
52  */
53 typedef struct vnet_attr_msg {
54 	/* Common tag */
55 	vio_msg_tag_t		tag;
56 
57 	/* attributes specific payload */
58 	uint8_t			xfer_mode;	/* data transfer mode */
59 	uint8_t			addr_type;	/* device address type */
60 	uint16_t		ack_freq;	/* ack after rcving # of pkts */
61 	uint32_t		resv1;		/* padding */
62 
63 	uint64_t		addr;		/* device address */
64 	uint64_t		mtu;		/* maximum data xfer unit */
65 
66 	/* padding to align things */
67 	uint64_t		resv2[3];
68 
69 } vnet_attr_msg_t;
70 
71 /*
72  * Vnet/Vswitch enable/disable multicast address msg
73  *
74  * tag.msgtype == VIO_TYPE_CTRL
75  * tag.subtype == VIO_SUBTYPE_{INFO|ACK|NACK}
76  * tag.subtype_env == VNET_MCAST_INFO
77  */
78 #define	VNET_NUM_MCAST	7	/* max # of multicast addresses in the msg */
79 
80 typedef struct vnet_mcast_msg {
81 	/* Common tag */
82 	vio_msg_tag_t		tag;
83 
84 	/* multicast address information */
85 	uint8_t			set;	/* add if set to 1, else remove */
86 	uint8_t			count;	/* number of addrs in the msg */
87 	struct ether_addr	mca[VNET_NUM_MCAST];	/* mcast addrs */
88 	uint32_t		resv1;	/* padding */
89 } vnet_mcast_msg_t;
90 
91 #ifdef __cplusplus
92 }
93 #endif
94 
95 #endif	/* _SYS_VNET_MAILBOX_H */
96