| @@ -8,27 +8,27 @@ | | | @@ -8,27 +8,27 @@ |
8 | * purpose with or without fee is hereby granted, provided that the above | | 8 | * purpose with or without fee is hereby granted, provided that the above |
9 | * copyright notice and this permission notice appear in all copies. | | 9 | * copyright notice and this permission notice appear in all copies. |
10 | * | | 10 | * |
11 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | | 11 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
12 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | | 12 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
13 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | | 13 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
14 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | | 14 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
15 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | | 15 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
16 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | | 16 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
17 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | | 17 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
18 | */ | | 18 | */ |
19 | | | 19 | |
20 | #include <sys/cdefs.h> | | 20 | #include <sys/cdefs.h> |
21 | __KERNEL_RCSID(0, "$NetBSD: viocon.c,v 1.1 2022/08/12 11:15:42 riastradh Exp $"); | | 21 | __KERNEL_RCSID(0, "$NetBSD: viocon.c,v 1.2 2022/08/13 16:52:29 riastradh Exp $"); |
22 | | | 22 | |
23 | #include <sys/param.h> | | 23 | #include <sys/param.h> |
24 | #include <sys/types.h> | | 24 | #include <sys/types.h> |
25 | | | 25 | |
26 | #include <sys/bus.h> | | 26 | #include <sys/bus.h> |
27 | #include <sys/conf.h> | | 27 | #include <sys/conf.h> |
28 | #include <sys/device.h> | | 28 | #include <sys/device.h> |
29 | #include <sys/kauth.h> | | 29 | #include <sys/kauth.h> |
30 | #include <sys/kernel.h> | | 30 | #include <sys/kernel.h> |
31 | #include <sys/kmem.h> | | 31 | #include <sys/kmem.h> |
32 | #include <sys/lwp.h> | | 32 | #include <sys/lwp.h> |
33 | #include <sys/systm.h> | | 33 | #include <sys/systm.h> |
34 | #include <sys/tty.h> | | 34 | #include <sys/tty.h> |
| @@ -83,26 +83,28 @@ struct virtio_console_control { | | | @@ -83,26 +83,28 @@ struct virtio_console_control { |
83 | uint16_t event; | | 83 | uint16_t event; |
84 | | | 84 | |
85 | uint16_t value; | | 85 | uint16_t value; |
86 | }; | | 86 | }; |
87 | | | 87 | |
88 | struct virtio_console_control_resize { | | 88 | struct virtio_console_control_resize { |
89 | /* yes, the order is different than in config space */ | | 89 | /* yes, the order is different than in config space */ |
90 | uint16_t rows; | | 90 | uint16_t rows; |
91 | uint16_t cols; | | 91 | uint16_t cols; |
92 | }; | | 92 | }; |
93 | | | 93 | |
94 | #define BUFSIZE 128 | | 94 | #define BUFSIZE 128 |
95 | | | 95 | |
| | | 96 | #define VIOCONDEV(u,p) makedev(cdevsw_lookup_major(&viocon_cdevsw), \ |
| | | 97 | ((u) << 4) | (p)) |
96 | #define VIOCONUNIT(x) (minor(x) >> 4) | | 98 | #define VIOCONUNIT(x) (minor(x) >> 4) |
97 | #define VIOCONPORT(x) (minor(x) & 0x0f) | | 99 | #define VIOCONPORT(x) (minor(x) & 0x0f) |
98 | | | 100 | |
99 | struct viocon_port { | | 101 | struct viocon_port { |
100 | struct viocon_softc *vp_sc; | | 102 | struct viocon_softc *vp_sc; |
101 | struct virtqueue *vp_rx; | | 103 | struct virtqueue *vp_rx; |
102 | struct virtqueue *vp_tx; | | 104 | struct virtqueue *vp_tx; |
103 | void *vp_si; | | 105 | void *vp_si; |
104 | struct tty *vp_tty; | | 106 | struct tty *vp_tty; |
105 | const char *vp_name; | | 107 | const char *vp_name; |
106 | bus_dma_segment_t vp_dmaseg; | | 108 | bus_dma_segment_t vp_dmaseg; |
107 | bus_dmamap_t vp_dmamap; | | 109 | bus_dmamap_t vp_dmamap; |
108 | #ifdef NOTYET | | 110 | #ifdef NOTYET |
| @@ -297,27 +299,27 @@ viocon_port_create(struct viocon_softc * | | | @@ -297,27 +299,27 @@ viocon_port_create(struct viocon_softc * |
297 | vp->vp_tx_buf = vp->vp_rx_buf + vp->vp_rx->vq_num * BUFSIZE; | | 299 | vp->vp_tx_buf = vp->vp_rx_buf + vp->vp_rx->vq_num * BUFSIZE; |
298 | | | 300 | |
299 | if (virtio_features(vsc) & VIRTIO_CONSOLE_F_SIZE) { | | 301 | if (virtio_features(vsc) & VIRTIO_CONSOLE_F_SIZE) { |
300 | vp->vp_cols = virtio_read_device_config_2(vsc, | | 302 | vp->vp_cols = virtio_read_device_config_2(vsc, |
301 | VIRTIO_CONSOLE_COLS); | | 303 | VIRTIO_CONSOLE_COLS); |
302 | vp->vp_rows = virtio_read_device_config_2(vsc, | | 304 | vp->vp_rows = virtio_read_device_config_2(vsc, |
303 | VIRTIO_CONSOLE_ROWS); | | 305 | VIRTIO_CONSOLE_ROWS); |
304 | } | | 306 | } |
305 | | | 307 | |
306 | tp = ttymalloc(1000000); | | 308 | tp = ttymalloc(1000000); |
307 | tp->t_oproc = vioconstart; | | 309 | tp->t_oproc = vioconstart; |
308 | tp->t_param = vioconparam; | | 310 | tp->t_param = vioconparam; |
309 | tp->t_hwiflow = vioconhwiflow; | | 311 | tp->t_hwiflow = vioconhwiflow; |
310 | tp->t_dev = (device_unit(sc->sc_dev) << 4) | portidx; | | 312 | tp->t_dev = VIOCONDEV(device_unit(sc->sc_dev), portidx); |
311 | vp->vp_tty = tp; | | 313 | vp->vp_tty = tp; |
312 | DPRINTF("%s: tty: %p\n", __func__, tp); | | 314 | DPRINTF("%s: tty: %p\n", __func__, tp); |
313 | | | 315 | |
314 | virtio_start_vq_intr(vsc, vp->vp_rx); | | 316 | virtio_start_vq_intr(vsc, vp->vp_rx); |
315 | virtio_start_vq_intr(vsc, vp->vp_tx); | | 317 | virtio_start_vq_intr(vsc, vp->vp_tx); |
316 | | | 318 | |
317 | return 0; | | 319 | return 0; |
318 | err: | | 320 | err: |
319 | panic("%s failed", __func__); | | 321 | panic("%s failed", __func__); |
320 | return -1; | | 322 | return -1; |
321 | } | | 323 | } |
322 | | | 324 | |
323 | int | | 325 | int |