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