Sat Aug 13 16:52:29 2022 UTC ()
viocon(4): Fix tty device number.


(riastradh)
diff -r1.1 -r1.2 src/sys/dev/virtio/viocon.c

cvs diff -r1.1 -r1.2 src/sys/dev/virtio/viocon.c (expand / switch to unified diff)

--- src/sys/dev/virtio/viocon.c 2022/08/12 11:15:42 1.1
+++ src/sys/dev/virtio/viocon.c 2022/08/13 16:52:29 1.2
@@ -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
88struct virtio_console_control_resize { 88struct 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
99struct viocon_port { 101struct 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;
318err: 320err:
319 panic("%s failed", __func__); 321 panic("%s failed", __func__);
320 return -1; 322 return -1;
321} 323}
322 324
323int 325int