sync with OpenBSD -current

This commit is contained in:
purplerain 2024-03-26 02:17:23 +00:00
parent fa20b4dfa4
commit 56a087cff9
Signed by: purplerain
GPG key ID: F42C07F07E2E35B7
61 changed files with 2001 additions and 1682 deletions

View file

@ -3491,16 +3491,15 @@ amdgpu_attachhook(struct device *self)
if (adev->mode_info.mode_config_initialized &&
!list_empty(&adev_to_drm(adev)->mode_config.connector_list)) {
/* OpenBSD specific backlight property on connector */
amdgpu_init_backlight(adev);
/*
* in linux via amdgpu_pci_probe -> drm_dev_register
* must be after (local) backlight property added not before
* and before drm_fbdev_generic_setup()
* must be before drm_fbdev_generic_setup()
*/
drm_dev_register(dev, adev->flags);
/* OpenBSD specific backlight property on connector */
amdgpu_init_backlight(adev);
/* select 8 bpp console on low vram cards */
if (adev->gmc.real_vram_size <= (32*1024*1024))
drm_fbdev_generic_setup(adev_to_drm(adev), 8);

View file

@ -1,4 +1,4 @@
/* $OpenBSD: if_igc.c,v 1.18 2024/02/23 01:06:18 kevlo Exp $ */
/* $OpenBSD: if_igc.c,v 1.19 2024/03/25 20:25:13 mbuhl Exp $ */
/*-
* SPDX-License-Identifier: BSD-2-Clause
*
@ -117,7 +117,8 @@ int igc_media_change(struct ifnet *);
void igc_iff(struct igc_softc *);
void igc_update_link_status(struct igc_softc *);
int igc_get_buf(struct rx_ring *, int);
int igc_tx_ctx_setup(struct tx_ring *, struct mbuf *, int, uint32_t *);
int igc_tx_ctx_setup(struct tx_ring *, struct mbuf *, int, uint32_t *,
uint32_t *);
void igc_configure_queues(struct igc_softc *);
void igc_set_queues(struct igc_softc *, uint32_t, uint32_t, int);
@ -790,10 +791,8 @@ igc_setup_interface(struct igc_softc *sc)
ifp->if_capabilities = IFCAP_VLAN_MTU;
#ifdef notyet
#if NVLAN > 0
ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING;
#endif
#endif
ifp->if_capabilities |= IFCAP_CSUM_IPv4;
@ -1001,7 +1000,11 @@ igc_start(struct ifqueue *ifq)
bus_dmamap_sync(txr->txdma.dma_tag, map, 0,
map->dm_mapsize, BUS_DMASYNC_PREWRITE);
if (igc_tx_ctx_setup(txr, m, prod, &olinfo_status)) {
cmd_type_len = IGC_ADVTXD_DCMD_IFCS | IGC_ADVTXD_DTYP_DATA |
IGC_ADVTXD_DCMD_DEXT;
if (igc_tx_ctx_setup(txr, m, prod, &cmd_type_len,
&olinfo_status)) {
/* Consume the first descriptor */
prod++;
prod &= mask;
@ -1011,13 +1014,14 @@ igc_start(struct ifqueue *ifq)
for (i = 0; i < map->dm_nsegs; i++) {
txdesc = &txr->tx_base[prod];
cmd_type_len = IGC_ADVTXD_DCMD_IFCS | IGC_ADVTXD_DTYP_DATA |
IGC_ADVTXD_DCMD_DEXT | map->dm_segs[i].ds_len;
CLR(cmd_type_len, IGC_ADVTXD_DTALEN_MASK);
cmd_type_len |= map->dm_segs[i].ds_len;
if (i == map->dm_nsegs - 1)
cmd_type_len |= IGC_ADVTXD_DCMD_EOP |
IGC_ADVTXD_DCMD_RS;
htolem64(&txdesc->read.buffer_addr, map->dm_segs[i].ds_addr);
htolem64(&txdesc->read.buffer_addr,
map->dm_segs[i].ds_addr);
htolem32(&txdesc->read.cmd_type_len, cmd_type_len);
htolem32(&txdesc->read.olinfo_status, olinfo_status);
@ -2019,7 +2023,7 @@ igc_free_transmit_buffers(struct tx_ring *txr)
int
igc_tx_ctx_setup(struct tx_ring *txr, struct mbuf *mp, int prod,
uint32_t *olinfo_status)
uint32_t *cmd_type_len, uint32_t *olinfo_status)
{
struct ether_extracted ext;
struct igc_adv_tx_context_desc *txdesc;
@ -2027,6 +2031,7 @@ igc_tx_ctx_setup(struct tx_ring *txr, struct mbuf *mp, int prod,
uint32_t vlan_macip_lens = 0;
int off = 0;
ether_extract_headers(mp, &ext);
vlan_macip_lens |= (sizeof(*ext.eh) << IGC_ADVTXD_MACLEN_SHIFT);
/*
@ -2034,17 +2039,14 @@ igc_tx_ctx_setup(struct tx_ring *txr, struct mbuf *mp, int prod,
* be placed into the context descriptor. Hence
* we need to make one even if not doing offloads.
*/
#ifdef notyet
#if NVLAN > 0
if (ISSET(mp->m_flags, M_VLANTAG)) {
uint32_t vtag = mp->m_pkthdr.ether_vtag;
vlan_macip_lens |= (vtag << IGC_ADVTXD_VLAN_SHIFT);
*cmd_type_len |= IGC_ADVTXD_DCMD_VLE;
off = 1;
}
#endif
#endif
ether_extract_headers(mp, &ext);
if (ext.ip4) {
type_tucmd_mlhl |= IGC_ADVTXD_TUCMD_IPV4;
@ -2056,8 +2058,6 @@ igc_tx_ctx_setup(struct tx_ring *txr, struct mbuf *mp, int prod,
} else if (ext.ip6) {
type_tucmd_mlhl |= IGC_ADVTXD_TUCMD_IPV6;
#endif
} else {
return 0;
}
vlan_macip_lens |= ext.iphlen;

View file

@ -1,4 +1,4 @@
/* $OpenBSD: igc_base.h,v 1.1 2021/10/31 14:52:57 patrick Exp $ */
/* $OpenBSD: igc_base.h,v 1.2 2024/03/25 20:25:13 mbuhl Exp $ */
/*-
* Copyright 2021 Intel Corp
* Copyright 2021 Rubicon Communications, LLC (Netgate)
@ -45,6 +45,7 @@ struct igc_adv_tx_context_desc {
};
/* Adv Transmit Descriptor Config Masks */
#define IGC_ADVTXD_DTALEN_MASK 0x0000FFFF
#define IGC_ADVTXD_DTYP_CTXT 0x00200000 /* Advanced Context Descriptor */
#define IGC_ADVTXD_DTYP_DATA 0x00300000 /* Advanced Data Descriptor */
#define IGC_ADVTXD_DCMD_EOP 0x01000000 /* End of Packet */

View file

@ -1,4 +1,4 @@
/* $OpenBSD: wsevent.c,v 1.27 2023/07/06 10:16:58 visa Exp $ */
/* $OpenBSD: wsevent.c,v 1.28 2024/03/25 13:01:49 mvs Exp $ */
/* $NetBSD: wsevent.c,v 1.16 2003/08/07 16:31:29 agc Exp $ */
/*
@ -101,20 +101,21 @@ wsevent_init(struct wseventvar *ev)
{
struct wscons_event *queue;
if (ev->q != NULL)
if (ev->ws_q != NULL)
return (0);
queue = mallocarray(WSEVENT_QSIZE, sizeof(struct wscons_event),
M_DEVBUF, M_WAITOK | M_ZERO);
if (ev->q != NULL) {
free(queue, M_DEVBUF, WSEVENT_QSIZE * sizeof(struct wscons_event));
if (ev->ws_q != NULL) {
free(queue, M_DEVBUF,
WSEVENT_QSIZE * sizeof(struct wscons_event));
return (1);
}
ev->q = queue;
ev->get = ev->put = 0;
ev->ws_q = queue;
ev->ws_get = ev->ws_put = 0;
sigio_init(&ev->sigio);
sigio_init(&ev->ws_sigio);
return (0);
}
@ -125,18 +126,18 @@ wsevent_init(struct wseventvar *ev)
void
wsevent_fini(struct wseventvar *ev)
{
if (ev->q == NULL) {
if (ev->ws_q == NULL) {
#ifdef DIAGNOSTIC
printf("wsevent_fini: already invoked\n");
#endif
return;
}
free(ev->q, M_DEVBUF, WSEVENT_QSIZE * sizeof(struct wscons_event));
ev->q = NULL;
free(ev->ws_q, M_DEVBUF, WSEVENT_QSIZE * sizeof(struct wscons_event));
ev->ws_q = NULL;
klist_invalidate(&ev->sel.si_note);
klist_invalidate(&ev->ws_sel.si_note);
sigio_free(&ev->sigio);
sigio_free(&ev->ws_sigio);
}
/*
@ -156,12 +157,12 @@ wsevent_read(struct wseventvar *ev, struct uio *uio, int flags)
if (uio->uio_resid < sizeof(struct wscons_event))
return (EMSGSIZE); /* ??? */
s = splwsevent();
while (ev->get == ev->put) {
while (ev->ws_get == ev->ws_put) {
if (flags & IO_NDELAY) {
splx(s);
return (EWOULDBLOCK);
}
ev->wanted = 1;
ev->ws_wanted = 1;
error = tsleep_nsec(ev, PWSEVENT | PCATCH,
"wsevent_read", INFSLP);
if (error) {
@ -173,15 +174,15 @@ wsevent_read(struct wseventvar *ev, struct uio *uio, int flags)
* Move wscons_event from tail end of queue (there is at least one
* there).
*/
if (ev->put < ev->get)
cnt = WSEVENT_QSIZE - ev->get; /* events in [get..QSIZE) */
if (ev->ws_put < ev->ws_get)
cnt = WSEVENT_QSIZE - ev->ws_get; /* events in [get..QSIZE) */
else
cnt = ev->put - ev->get; /* events in [get..put) */
cnt = ev->ws_put - ev->ws_get; /* events in [get..put) */
splx(s);
n = howmany(uio->uio_resid, sizeof(struct wscons_event));
if (cnt > n)
cnt = n;
error = uiomove((caddr_t)&ev->q[ev->get],
error = uiomove((caddr_t)&ev->ws_q[ev->ws_get],
cnt * sizeof(struct wscons_event), uio);
n -= cnt;
/*
@ -189,14 +190,14 @@ wsevent_read(struct wseventvar *ev, struct uio *uio, int flags)
* stop. Otherwise move from front of queue to put index, if there
* is anything there to move.
*/
if ((ev->get = (ev->get + cnt) % WSEVENT_QSIZE) != 0 ||
n == 0 || error || (cnt = ev->put) == 0)
if ((ev->ws_get = (ev->ws_get + cnt) % WSEVENT_QSIZE) != 0 ||
n == 0 || error || (cnt = ev->ws_put) == 0)
return (error);
if (cnt > n)
cnt = n;
error = uiomove((caddr_t)&ev->q[0],
error = uiomove((caddr_t)&ev->ws_q[0],
cnt * sizeof(struct wscons_event), uio);
ev->get = cnt;
ev->ws_get = cnt;
return (error);
}
@ -206,7 +207,7 @@ wsevent_kqfilter(struct wseventvar *ev, struct knote *kn)
struct klist *klist;
int s;
klist = &ev->sel.si_note;
klist = &ev->ws_sel.si_note;
switch (kn->kn_filter) {
case EVFILT_READ:
@ -229,7 +230,7 @@ void
filt_wseventdetach(struct knote *kn)
{
struct wseventvar *ev = kn->kn_hook;
struct klist *klist = &ev->sel.si_note;
struct klist *klist = &ev->ws_sel.si_note;
int s;
s = splwsevent();
@ -242,13 +243,13 @@ filt_wseventread(struct knote *kn, long hint)
{
struct wseventvar *ev = kn->kn_hook;
if (ev->get == ev->put)
if (ev->ws_get == ev->ws_put)
return (0);
if (ev->get < ev->put)
kn->kn_data = ev->put - ev->get;
if (ev->ws_get < ev->ws_put)
kn->kn_data = ev->ws_put - ev->ws_get;
else
kn->kn_data = (WSEVENT_QSIZE - ev->get) + ev->put;
kn->kn_data = (WSEVENT_QSIZE - ev->ws_get) + ev->ws_put;
return (1);
}

View file

@ -1,4 +1,4 @@
/* $OpenBSD: wseventvar.h,v 1.12 2023/09/08 20:00:28 mvs Exp $ */
/* $OpenBSD: wseventvar.h,v 1.13 2024/03/25 13:01:49 mvs Exp $ */
/* $NetBSD: wseventvar.h,v 1.1 1998/03/22 14:24:03 drochner Exp $ */
/*
@ -84,25 +84,27 @@
#define WSEVENT_QSIZE 256 /* may need tuning; this uses 2k */
struct wseventvar {
u_int get; /* get (read) index (modified synchronously) */
volatile u_int put; /* put (write) index (modified by interrupt) */
struct selinfo sel; /* process selecting */
struct sigio_ref sigio; /* async I/O registration */
int wanted; /* wake up on input ready */
int async; /* send SIGIO on input ready */
struct wscons_event *q; /* circular buffer (queue) of events */
u_int ws_get; /* get (read) index (modified
synchronously) */
volatile u_int ws_put; /* put (write) index (modified by
interrupt) */
struct selinfo ws_sel; /* process selecting */
struct sigio_ref ws_sigio; /* async I/O registration */
int ws_wanted; /* wake up on input ready */
int ws_async; /* send SIGIO on input ready */
struct wscons_event *ws_q; /* circular buffer (queue) of events */
};
#define splwsevent() spltty()
#define WSEVENT_WAKEUP(ev) { \
selwakeup(&(ev)->sel); \
if ((ev)->wanted) { \
(ev)->wanted = 0; \
selwakeup(&(ev)->ws_sel); \
if ((ev)->ws_wanted) { \
(ev)->ws_wanted = 0; \
wakeup((caddr_t)(ev)); \
} \
if ((ev)->async) \
pgsigio(&(ev)->sigio, SIGIO, 0); \
if ((ev)->ws_async) \
pgsigio(&(ev)->ws_sigio, SIGIO, 0); \
}
int wsevent_init(struct wseventvar *);

View file

@ -1,4 +1,4 @@
/* $OpenBSD: wskbd.c,v 1.118 2024/02/18 20:17:48 anton Exp $ */
/* $OpenBSD: wskbd.c,v 1.119 2024/03/25 13:01:49 mvs Exp $ */
/* $NetBSD: wskbd.c,v 1.80 2005/05/04 01:52:16 augustss Exp $ */
/*
@ -650,8 +650,8 @@ wskbd_detach(struct device *self, int flags)
s = spltty();
if (--sc->sc_refcnt >= 0) {
/* Wake everyone by generating a dummy event. */
if (++evar->put >= WSEVENT_QSIZE)
evar->put = 0;
if (++evar->ws_put >= WSEVENT_QSIZE)
evar->ws_put = 0;
WSEVENT_WAKEUP(evar);
/* Wait for processes to go away. */
if (tsleep_nsec(sc, PZERO, "wskdet", SEC_TO_NSEC(60)))
@ -757,16 +757,16 @@ wskbd_deliver_event(struct wskbd_softc *sc, u_int type, int value)
}
#ifdef DIAGNOSTIC
if (evar->q == NULL) {
if (evar->ws_q == NULL) {
printf("wskbd_input: evar->q=NULL\n");
return;
}
#endif
put = evar->put;
ev = &evar->q[put];
put = evar->ws_put;
ev = &evar->ws_q[put];
put = (put + 1) % WSEVENT_QSIZE;
if (put == evar->get) {
if (put == evar->ws_get) {
log(LOG_WARNING, "%s: event queue overflow\n",
sc->sc_base.me_dv.dv_xname);
return;
@ -774,7 +774,7 @@ wskbd_deliver_event(struct wskbd_softc *sc, u_int type, int value)
ev->type = type;
ev->value = value;
nanotime(&ev->time);
evar->put = put;
evar->ws_put = put;
WSEVENT_WAKEUP(evar);
}
@ -1008,7 +1008,7 @@ wskbd_do_ioctl_sc(struct wskbd_softc *sc, u_long cmd, caddr_t data, int flag,
case FIOASYNC:
if (sc->sc_base.me_evp == NULL)
return (EINVAL);
sc->sc_base.me_evp->async = *(int *)data != 0;
sc->sc_base.me_evp->ws_async = *(int *)data != 0;
return (0);
case FIOGETOWN:
@ -1016,7 +1016,7 @@ wskbd_do_ioctl_sc(struct wskbd_softc *sc, u_long cmd, caddr_t data, int flag,
evar = sc->sc_base.me_evp;
if (evar == NULL)
return (EINVAL);
sigio_getown(&evar->sigio, cmd, data);
sigio_getown(&evar->ws_sigio, cmd, data);
return (0);
case FIOSETOWN:
@ -1024,7 +1024,7 @@ wskbd_do_ioctl_sc(struct wskbd_softc *sc, u_long cmd, caddr_t data, int flag,
evar = sc->sc_base.me_evp;
if (evar == NULL)
return (EINVAL);
return (sigio_setown(&evar->sigio, cmd, data));
return (sigio_setown(&evar->ws_sigio, cmd, data));
}
/*

View file

@ -1,4 +1,4 @@
/* $OpenBSD: wsmouse.c,v 1.70 2022/10/16 18:23:44 bru Exp $ */
/* $OpenBSD: wsmouse.c,v 1.71 2024/03/25 13:01:49 mvs Exp $ */
/* $NetBSD: wsmouse.c,v 1.35 2005/02/27 00:27:52 perry Exp $ */
/*
@ -265,8 +265,8 @@ wsmouse_detach(struct device *self, int flags)
s = spltty();
if (--sc->sc_refcnt >= 0) {
/* Wake everyone by generating a dummy event. */
if (++evar->put >= WSEVENT_QSIZE)
evar->put = 0;
if (++evar->ws_put >= WSEVENT_QSIZE)
evar->ws_put = 0;
WSEVENT_WAKEUP(evar);
/* Wait for processes to go away. */
if (tsleep_nsec(sc, PZERO, "wsmdet", SEC_TO_NSEC(60)))
@ -498,7 +498,7 @@ wsmouse_do_ioctl(struct wsmouse_softc *sc, u_long cmd, caddr_t data, int flag,
case FIOASYNC:
if (sc->sc_base.me_evp == NULL)
return (EINVAL);
sc->sc_base.me_evp->async = *(int *)data != 0;
sc->sc_base.me_evp->ws_async = *(int *)data != 0;
return (0);
case FIOGETOWN:
@ -506,7 +506,7 @@ wsmouse_do_ioctl(struct wsmouse_softc *sc, u_long cmd, caddr_t data, int flag,
evar = sc->sc_base.me_evp;
if (evar == NULL)
return (EINVAL);
sigio_getown(&evar->sigio, cmd, data);
sigio_getown(&evar->ws_sigio, cmd, data);
return (0);
case FIOSETOWN:
@ -514,7 +514,7 @@ wsmouse_do_ioctl(struct wsmouse_softc *sc, u_long cmd, caddr_t data, int flag,
evar = sc->sc_base.me_evp;
if (evar == NULL)
return (EINVAL);
return (sigio_setown(&evar->sigio, cmd, data));
return (sigio_setown(&evar->ws_sigio, cmd, data));
case WSMOUSEIO_GETPARAMS:
case WSMOUSEIO_SETPARAMS:
@ -958,9 +958,9 @@ wsmouse_evq_put(struct evq_access *evq, int ev_type, int ev_value)
struct wscons_event *ev;
int space;
space = evq->evar->get - evq->put;
space = evq->evar->ws_get - evq->put;
if (space != 1 && space != 1 - WSEVENT_QSIZE) {
ev = &evq->evar->q[evq->put++];
ev = &evq->evar->ws_q[evq->put++];
evq->put %= WSEVENT_QSIZE;
ev->type = ev_type;
ev->value = ev_value;
@ -1102,12 +1102,12 @@ void
wsmouse_log_events(struct wsmouseinput *input, struct evq_access *evq)
{
struct wscons_event *ev;
int n = evq->evar->put;
int n = evq->evar->ws_put;
if (n != evq->put) {
printf("[%s-ev][%04d]", DEVNAME(input), LOGTIME(&evq->ts));
while (n != evq->put) {
ev = &evq->evar->q[n++];
ev = &evq->evar->ws_q[n++];
n %= WSEVENT_QSIZE;
printf(" %d:%d", ev->type, ev->value);
}
@ -1141,7 +1141,7 @@ wsmouse_input_sync(struct device *sc)
evq.evar = *input->evar;
if (evq.evar == NULL)
return;
evq.put = evq.evar->put;
evq.put = evq.evar->ws_put;
evq.result = EVQ_RESULT_NONE;
getnanotime(&evq.ts);
@ -1184,7 +1184,7 @@ wsmouse_input_sync(struct device *sc)
if (input->flags & LOG_EVENTS) {
wsmouse_log_events(input, &evq);
}
evq.evar->put = evq.put;
evq.evar->ws_put = evq.put;
WSEVENT_WAKEUP(evq.evar);
}
}

View file

@ -1,4 +1,4 @@
/* $OpenBSD: wsmux.c,v 1.56 2022/07/02 08:50:42 visa Exp $ */
/* $OpenBSD: wsmux.c,v 1.57 2024/03/25 13:01:49 mvs Exp $ */
/* $NetBSD: wsmux.c,v 1.37 2005/04/30 03:47:12 augustss Exp $ */
/*
@ -416,9 +416,9 @@ wsmux_do_ioctl(struct device *dv, u_long cmd, caddr_t data, int flag,
}
s = spltty();
get = evar->get;
put = evar->put;
ev = &evar->q[put];
get = evar->ws_get;
put = evar->ws_put;
ev = &evar->ws_q[put];
if (++put % WSEVENT_QSIZE == get) {
put--;
splx(s);
@ -428,7 +428,7 @@ wsmux_do_ioctl(struct device *dv, u_long cmd, caddr_t data, int flag,
put = 0;
*ev = *(struct wscons_event *)data;
nanotime(&ev->time);
evar->put = put;
evar->ws_put = put;
WSEVENT_WAKEUP(evar);
splx(s);
return (0);
@ -500,7 +500,7 @@ wsmux_do_ioctl(struct device *dv, u_long cmd, caddr_t data, int flag,
evar = sc->sc_base.me_evp;
if (evar == NULL)
return (EINVAL);
evar->async = *(int *)data != 0;
evar->ws_async = *(int *)data != 0;
return (0);
case FIOGETOWN:
case TIOCGPGRP:
@ -509,7 +509,7 @@ wsmux_do_ioctl(struct device *dv, u_long cmd, caddr_t data, int flag,
evar = sc->sc_base.me_evp;
if (evar == NULL)
return (EINVAL);
sigio_getown(&evar->sigio, cmd, data);
sigio_getown(&evar->ws_sigio, cmd, data);
return (0);
case FIOSETOWN:
case TIOCSPGRP:
@ -518,7 +518,7 @@ wsmux_do_ioctl(struct device *dv, u_long cmd, caddr_t data, int flag,
evar = sc->sc_base.me_evp;
if (evar == NULL)
return (EINVAL);
return (sigio_setown(&evar->sigio, cmd, data));
return (sigio_setown(&evar->ws_sigio, cmd, data));
default:
DPRINTF(("%s: unknown\n", sc->sc_base.me_dv.dv_xname));
break;

View file

@ -1,4 +1,4 @@
/* $OpenBSD: wstpad.c,v 1.33 2023/08/15 08:27:30 miod Exp $ */
/* $OpenBSD: wstpad.c,v 1.34 2024/03/25 13:01:49 mvs Exp $ */
/*
* Copyright (c) 2015, 2016 Ulf Brosziewski
@ -931,7 +931,7 @@ wstpad_tap_timeout(void *p)
tp->tap.state = TAP_DETECT;
}
if (ev) {
evq.put = evq.evar->put;
evq.put = evq.evar->ws_put;
evq.result = EVQ_RESULT_NONE;
getnanotime(&evq.ts);
wsmouse_evq_put(&evq, ev, btn);
@ -940,7 +940,7 @@ wstpad_tap_timeout(void *p)
if (input->flags & LOG_EVENTS) {
wsmouse_log_events(input, &evq);
}
evq.evar->put = evq.put;
evq.evar->ws_put = evq.put;
WSEVENT_WAKEUP(evq.evar);
} else {
input->sbtn.sync |= tp->tap.button;