xref: /netbsd/sys/arch/sparc64/dev/viovar.h (revision 6c1ce2ef)
1 /*	$NetBSD: viovar.h,v 1.1 2016/08/19 19:40:27 palle Exp $	*/
2 /*	$OpenBSD: viovar.h,v 1.2 2009/01/12 19:52:39 kettenis Exp $	*/
3 /*
4  * Copyright (c) 2009 Mark Kettenis
5  *
6  * Permission to use, copy, modify, and distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 /*
20  * Virtual IO device protocol.
21  */
22 
23 struct vio_msg_tag {
24 	uint8_t		type;
25 	uint8_t		stype;
26 	uint16_t	stype_env;
27 	uint32_t	sid;
28 };
29 
30 struct vio_msg {
31 	uint64_t 	hdr;
32 	uint8_t		type;
33 	uint8_t		stype;
34 	uint16_t	stype_env;
35 	uint32_t	sid;
36 	uint16_t	major;
37 	uint16_t	minor;
38 	uint8_t		dev_class;
39 };
40 
41 /* Message types. */
42 #define VIO_TYPE_CTRL		0x01
43 #define VIO_TYPE_DATA		0x02
44 #define VIO_TYPE_ERR		0x04
45 
46 /* Sub-Message types. */
47 #define VIO_SUBTYPE_INFO	0x01
48 #define VIO_SUBTYPE_ACK		0x02
49 #define VIO_SUBTYPE_NACK	0x04
50 
51 /* Sub-Type envelopes. */
52 #define VIO_VER_INFO		0x0001
53 #define VIO_ATTR_INFO		0x0002
54 #define VIO_DRING_REG		0x0003
55 #define VIO_DRING_UNREG		0x0004
56 #define VIO_RDX			0x0005
57 
58 #define VIO_PKT_DATA		0x0040
59 #define VIO_DESC_DATA		0x0041
60 #define VIO_DRING_DATA		0x0042
61 
62 struct vio_ver_info {
63 	struct vio_msg_tag	tag;
64 	uint16_t		major;
65 	uint16_t		minor;
66 	uint8_t			dev_class;
67 	uint8_t			_reserved1[3];
68 	uint64_t		_reserved2[5];
69 };
70 
71 /* Device types. */
72 #define VDEV_NETWORK		0x01
73 #define VDEV_NETWORK_SWITCH	0x02
74 #define VDEV_DISK		0x03
75 #define VDEV_DISK_SERVER	0x04
76 
77 struct vio_dring_reg {
78 	struct vio_msg_tag	tag;
79 	uint64_t		dring_ident;
80 	uint32_t		num_descriptors;
81 	uint32_t		descriptor_size;
82 	uint16_t		options;
83 	uint16_t		_reserved;
84 	uint32_t		ncookies;
85 	struct ldc_cookie	cookie[1];
86 };
87 
88 /* Ring options. */
89 #define VIO_TX_RING		0x0001
90 #define VIO_RX_RING		0x0002
91 
92 /* Transfer modes. */
93 #define VIO_PKT_MODE		0x01
94 #define VIO_DESC_MODE		0x02
95 #define VIO_DRING_MODE		0x03
96 
97 struct vio_dring_hdr {
98 	uint8_t		dstate;
99 	uint8_t		ack: 1;
100 	uint16_t	_reserved[3];
101 };
102 
103 /* Descriptor states. */
104 #define VIO_DESC_FREE		0x01
105 #define VIO_DESC_READY		0x02
106 #define VIO_DESC_ACCEPTED	0x03
107 #define VIO_DESC_DONE		0x04
108 
109 struct vio_dring_msg {
110 	struct vio_msg_tag	tag;
111 	uint64_t		seq_no;
112 	uint64_t		dring_ident;
113 	uint32_t		start_idx;
114 	uint32_t		end_idx;
115 	uint8_t			proc_state;
116 	uint8_t			_reserved1[7];
117 	uint64_t		_reserved2[2];
118 };
119 
120 /* Ring states. */
121 #define VIO_DP_ACTIVE	0x01
122 #define VIO_DP_STOPPED	0x02
123 
124 struct vio_rdx {
125 	struct vio_msg_tag	tag;
126 	uint64_t		_reserved[6];
127 };
128 
129