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 2008 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/dds.h>
38 #include <sys/ethernet.h>
39 
40 /*
41  * VNET specific Control envelopes: 0x0100 - 0x01FF
42  *	type == VIO_TYPE_CTRL
43  *	subtype == VIO_SUBTYPE_{INFO|ACK|NACK}
44  */
45 #define	VNET_MCAST_INFO		0x0101
46 #define	VNET_DDS_INFO		0x0102
47 
48 /*
49  * Vnet/Vswitch device attributes information message.
50  *
51  * tag.msgtype == VIO_TYPE_CTRL
52  * tag.submsgtype = VIO_SUBTYPE_{INFO|ACK|NACK}
53  * tag.subtype_env == VIO_ATTR_INFO
54  */
55 
56 /* Value for 'addr_type' in vnet attribute message */
57 #define	ADDR_TYPE_MAC		0x1
58 
59 typedef struct vnet_attr_msg {
60 	/* Common tag */
61 	vio_msg_tag_t		tag;
62 
63 	/* attributes specific payload */
64 	uint8_t			xfer_mode;	/* data transfer mode */
65 	uint8_t			addr_type;	/* device address type */
66 	uint16_t		ack_freq;	/* ack after rcving # of pkts */
67 	uint32_t		resv1;		/* padding */
68 
69 	uint64_t		addr;		/* device address */
70 	uint64_t		mtu;		/* maximum data xfer unit */
71 
72 	/* padding to align things */
73 	uint64_t		resv2[3];
74 
75 } vnet_attr_msg_t;
76 
77 /*
78  * Vnet/Vswitch enable/disable multicast address msg
79  *
80  * tag.msgtype == VIO_TYPE_CTRL
81  * tag.subtype == VIO_SUBTYPE_{INFO|ACK|NACK}
82  * tag.subtype_env == VNET_MCAST_INFO
83  */
84 #define	VNET_NUM_MCAST	7	/* max # of multicast addresses in the msg */
85 
86 typedef struct vnet_mcast_msg {
87 	/* Common tag */
88 	vio_msg_tag_t		tag;
89 
90 	/* multicast address information */
91 	uint8_t			set;	/* add if set to 1, else remove */
92 	uint8_t			count;	/* number of addrs in the msg */
93 	struct ether_addr	mca[VNET_NUM_MCAST];	/* mcast addrs */
94 	uint32_t		resv1;	/* padding */
95 } vnet_mcast_msg_t;
96 
97 #ifdef __cplusplus
98 }
99 #endif
100 
101 #endif	/* _SYS_VNET_MAILBOX_H */
102