sync code with last improvements from OpenBSD

This commit is contained in:
purplerain 2023-10-02 04:00:10 +00:00
parent 0095d6bf71
commit 4366cfe9ca
Signed by: purplerain
GPG key ID: F42C07F07E2E35B7
20 changed files with 247 additions and 44 deletions

View file

@ -1,4 +1,4 @@
/* $OpenBSD: if_aq_pci.c,v 1.24 2023/09/19 14:14:35 jsg Exp $ */
/* $OpenBSD: if_aq_pci.c,v 1.25 2023/10/01 09:03:14 kettenis Exp $ */
/* $NetBSD: if_aq.c,v 1.27 2021/06/16 00:21:18 riastradh Exp $ */
/*
@ -339,6 +339,8 @@
#define TPS_DATA_TCT_REG(i) (0x7110 + (i) * 4)
#define TPS_DATA_TCT_CREDIT_MAX 0xFFF0000
#define TPS_DATA_TCT_WEIGHT 0x1FF
#define TPS2_DATA_TCT_CREDIT_MAX 0xFFFF0000
#define TPS2_DATA_TCT_WEIGHT 0x7FFF
/* TPS_DATA_TCT_REG[AQ_TRAFFICCLASS_NUM] 0x7210-0x7230 */
#define TPS_DESC_TCT_REG(i) (0x7210 + (i) * 4)
#define TPS_DESC_TCT_CREDIT_MAX 0xFFF0000
@ -346,6 +348,8 @@
#define AQ_HW_TXBUF_MAX 160
#define AQ_HW_RXBUF_MAX 320
#define AQ2_HW_TXBUF_MAX 128
#define AQ2_HW_RXBUF_MAX 192
#define TPO_HWCSUM_REG 0x7800
#define TPO_HWCSUM_L4CSUM_EN (1 << 0)
@ -2760,10 +2764,17 @@ aq_hw_qos_set(struct aq_softc *sc)
AQ_WRITE_REG_BIT(sc, TPS_DESC_TC_ARB_MODE_REG, TPS_DESC_TC_ARB_MODE, 0);
AQ_WRITE_REG_BIT(sc, TPS_DATA_TC_ARB_MODE_REG, TPS_DATA_TC_ARB_MODE, 0);
AQ_WRITE_REG_BIT(sc, TPS_DATA_TCT_REG(tc),
TPS_DATA_TCT_CREDIT_MAX, 0xfff);
AQ_WRITE_REG_BIT(sc, TPS_DATA_TCT_REG(tc),
TPS_DATA_TCT_WEIGHT, 0x64);
if (HWTYPE_AQ2_P(sc)) {
AQ_WRITE_REG_BIT(sc, TPS_DATA_TCT_REG(tc),
TPS2_DATA_TCT_CREDIT_MAX, 0xfff0);
AQ_WRITE_REG_BIT(sc, TPS_DATA_TCT_REG(tc),
TPS2_DATA_TCT_WEIGHT, 0x640);
} else {
AQ_WRITE_REG_BIT(sc, TPS_DATA_TCT_REG(tc),
TPS_DATA_TCT_CREDIT_MAX, 0xfff);
AQ_WRITE_REG_BIT(sc, TPS_DATA_TCT_REG(tc),
TPS_DATA_TCT_WEIGHT, 0x64);
}
AQ_WRITE_REG_BIT(sc, TPS_DESC_TCT_REG(tc),
TPS_DESC_TCT_CREDIT_MAX, 0x50);
AQ_WRITE_REG_BIT(sc, TPS_DESC_TCT_REG(tc),
@ -2771,7 +2782,7 @@ aq_hw_qos_set(struct aq_softc *sc)
/* Tx buf size */
tc = 0;
buff_size = AQ_HW_TXBUF_MAX;
buff_size = HWTYPE_AQ2_P(sc) ? AQ2_HW_TXBUF_MAX : AQ_HW_TXBUF_MAX;
AQ_WRITE_REG_BIT(sc, TPB_TXB_BUFSIZE_REG(tc), TPB_TXB_BUFSIZE,
buff_size);
AQ_WRITE_REG_BIT(sc, TPB_TXB_THRESH_REG(tc), TPB_TXB_THRESH_HI,
@ -2781,7 +2792,7 @@ aq_hw_qos_set(struct aq_softc *sc)
/* QoS Rx buf size per TC */
tc = 0;
buff_size = AQ_HW_RXBUF_MAX;
buff_size = HWTYPE_AQ2_P(sc) ? AQ2_HW_RXBUF_MAX : AQ_HW_RXBUF_MAX;
AQ_WRITE_REG_BIT(sc, RPB_RXB_BUFSIZE_REG(tc), RPB_RXB_BUFSIZE,
buff_size);
AQ_WRITE_REG_BIT(sc, RPB_RXB_XOFF_REG(tc), RPB_RXB_XOFF_EN, 0);

View file

@ -1,4 +1,4 @@
/* $OpenBSD: sdhc.c,v 1.75 2023/04/19 02:01:02 dlg Exp $ */
/* $OpenBSD: sdhc.c,v 1.76 2023/10/01 08:56:24 kettenis Exp $ */
/*
* Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org>
@ -244,6 +244,7 @@ sdhc_host_found(struct sdhc_softc *sc, bus_space_tag_t iot,
struct sdmmcbus_attach_args saa;
struct sdhc_host *hp;
uint32_t caps;
int major, minor;
int error = 1;
int max_clock;
@ -310,8 +311,20 @@ sdhc_host_found(struct sdhc_softc *sc, bus_space_tag_t iot,
goto err;
}
printf("%s: SDHC %d.0, %d MHz base clock\n", DEVNAME(sc),
SDHC_SPEC_VERSION(hp->version) + 1, hp->clkbase / 1000);
switch (SDHC_SPEC_VERSION(hp->version)) {
case SDHC_SPEC_VERS_4_10:
major = 4, minor = 10;
break;
case SDHC_SPEC_VERS_4_20:
major = 4, minor = 20;
break;
default:
major = SDHC_SPEC_VERSION(hp->version) + 1, minor = 0;
break;
}
printf("%s: SDHC %d.%02d, %d MHz base clock\n", DEVNAME(sc),
major, minor, hp->clkbase / 1000);
/*
* XXX Set the data timeout counter value according to

View file

@ -1,4 +1,4 @@
/* $OpenBSD: sdhcreg.h,v 1.9 2018/09/06 10:15:17 patrick Exp $ */
/* $OpenBSD: sdhcreg.h,v 1.10 2023/10/01 08:56:24 kettenis Exp $ */
/*
* Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org>
@ -201,6 +201,8 @@
#define SDHC_HOST_CTL_VERSION 0xfe
#define SDHC_SPEC_VERS_SHIFT 0
#define SDHC_SPEC_VERS_MASK 0xff
#define SDHC_SPEC_VERS_4_10 0x04
#define SDHC_SPEC_VERS_4_20 0x05
#define SDHC_VENDOR_VERS_SHIFT 8
#define SDHC_VENDOR_VERS_MASK 0xff
#define SDHC_SPEC_V1 0

View file

@ -1,4 +1,4 @@
/* $OpenBSD: ucom.c,v 1.75 2023/09/21 00:05:36 krw Exp $ */
/* $OpenBSD: ucom.c,v 1.76 2023/10/01 15:58:11 krw Exp $ */
/* $NetBSD: ucom.c,v 1.49 2003/01/01 00:10:25 thorpej Exp $ */
/*
@ -44,6 +44,7 @@
#include <sys/fcntl.h>
#include <sys/vnode.h>
#include <sys/device.h>
#include <sys/malloc.h>
#include <dev/usb/usb.h>
@ -153,6 +154,9 @@ const struct cfattach ucom_ca = {
ucom_detach,
};
static int ucom_change;
struct rwlock sysctl_ucomlock = RWLOCK_INITIALIZER("sysctlulk");
void
ucom_lock(struct ucom_softc *sc)
{
@ -201,6 +205,7 @@ ucom_attach(struct device *parent, struct device *self, void *aux)
sc->sc_tty = tp;
sc->sc_cua = 0;
ucom_change = 1;
rw_init(&sc->sc_lock, "ucomlk");
}
@ -273,6 +278,7 @@ ucom_detach(struct device *self, int flags)
sc->sc_tty = NULL;
}
ucom_change = 1;
return (0);
}
@ -1223,7 +1229,53 @@ ucom_cleanup(struct ucom_softc *sc)
}
}
#endif /* NUCOM > 0 */
/*
* Update ucom names for export by sysctl.
*/
char *
sysctl_ucominit(void)
{
static char *ucoms = NULL;
static size_t ucomslen = 0;
char name[34]; /* sizeof(dv_xname) + strlen(":usb000.00000.000,") */
struct ucom_softc *sc;
int rslt;
unsigned int unit;
uint32_t route;
uint8_t bus, ifaceidx;
KERNEL_ASSERT_LOCKED();
if (rw_enter(&sysctl_ucomlock, RW_WRITE|RW_INTR) != 0)
return NULL;
if (ucoms == NULL || ucom_change) {
free(ucoms, M_SYSCTL, ucomslen);
ucomslen = ucom_cd.cd_ndevs * sizeof(name);
ucoms = malloc(ucomslen, M_SYSCTL, M_WAITOK | M_ZERO);
for (unit = 0; unit < ucom_cd.cd_ndevs; unit++) {
sc = ucom_cd.cd_devs[unit];
if (sc == NULL || sc->sc_iface == NULL)
continue;
if (usbd_get_location(sc->sc_uparent, sc->sc_iface,
&bus, &route, &ifaceidx) == -1)
continue;
rslt = snprintf(name, sizeof(name), "%s:usb%u.%05x.%u,",
sc->sc_dev.dv_xname, bus, route, ifaceidx);
if (rslt < sizeof(name) && (strlen(ucoms) + rslt) < ucomslen)
strlcat(ucoms, name, ucomslen);
}
}
/* Remove trailing ','. */
if (strlen(ucoms))
ucoms[strlen(ucoms) - 1] = '\0';
rw_exit_write(&sysctl_ucomlock);
return ucoms;
}
#endif /* NUCOM > 0 */
int
ucomprint(void *aux, const char *pnp)

View file

@ -1,4 +1,4 @@
/* $OpenBSD: ucomvar.h,v 1.19 2022/04/09 20:07:44 naddy Exp $ */
/* $OpenBSD: ucomvar.h,v 1.20 2023/10/01 15:58:11 krw Exp $ */
/* $NetBSD: ucomvar.h,v 1.10 2001/12/31 12:15:21 augustss Exp $ */
/*
@ -99,5 +99,7 @@ struct ucom_attach_args {
int ucomsubmatch(struct device *, void *, void *);
char *sysctl_ucominit(void);
int ucomprint(void *aux, const char *pnp);
void ucom_status_change(struct ucom_softc *);

View file

@ -1,4 +1,4 @@
/* $OpenBSD: usb_subr.c,v 1.159 2023/09/11 08:41:27 mvs Exp $ */
/* $OpenBSD: usb_subr.c,v 1.160 2023/10/01 15:58:11 krw Exp $ */
/* $NetBSD: usb_subr.c,v 1.103 2003/01/10 11:19:13 augustss Exp $ */
/* $FreeBSD: src/sys/dev/usb/usb_subr.c,v 1.18 1999/11/17 22:33:47 n_hibma Exp $ */
@ -1330,6 +1330,59 @@ usbd_fill_deviceinfo(struct usbd_device *dev, struct usb_device_info *di)
sizeof(di->udi_serial));
}
int
usbd_get_routestring(struct usbd_device *dev, uint32_t *route)
{
struct usbd_device *hub;
uint32_t r;
uint8_t port;
/*
* Calculate the Route String. Assume that there is no hub with
* more than 15 ports and that they all have a depth < 6. See
* section 8.9 of USB 3.1 Specification for more details.
*/
r = dev->powersrc ? dev->powersrc->portno : 0;
for (hub = dev->myhub; hub && hub->depth; hub = hub->myhub) {
port = hub->powersrc ? hub->powersrc->portno : 0;
if (port > 15)
return -1;
r <<= 4;
r |= port;
}
*route = r;
return 0;
}
int
usbd_get_location(struct usbd_device *dev, struct usbd_interface *iface,
uint8_t *bus, uint32_t *route, uint8_t *ifaceidx)
{
int i;
uint32_t r;
if (dev == NULL || usbd_is_dying(dev) ||
dev->cdesc == NULL ||
dev->cdesc->bNumInterfaces == 0 ||
dev->bus == NULL ||
dev->bus->usbctl == NULL ||
dev->myhub == NULL ||
dev->powersrc == NULL)
return -1;
for(i = 0; i < dev->cdesc->bNumInterfaces; i++) {
if (iface == &dev->ifaces[i]) {
*bus = dev->bus->usbctl->dv_unit;
*route = (usbd_get_routestring(dev, &r)) ? 0 : r;
*ifaceidx = i;
return 0;
}
}
return -1;
}
/* Retrieve a complete descriptor for a certain device and index. */
usb_config_descriptor_t *
usbd_get_cdesc(struct usbd_device *dev, int index, u_int *lenp)

View file

@ -1,4 +1,4 @@
/* $OpenBSD: usbdi.h,v 1.72 2022/02/16 06:23:42 anton Exp $ */
/* $OpenBSD: usbdi.h,v 1.73 2023/10/01 15:58:12 krw Exp $ */
/* $NetBSD: usbdi.h,v 1.62 2002/07/11 21:14:35 augustss Exp $ */
/* $FreeBSD: src/sys/dev/usb/usbdi.h,v 1.18 1999/11/17 22:33:49 n_hibma Exp $ */
@ -130,6 +130,9 @@ usb_device_descriptor_t *usbd_get_device_descriptor(struct usbd_device *dev);
usbd_status usbd_set_interface(struct usbd_interface *, int);
int usbd_get_no_alts(usb_config_descriptor_t *, int);
void usbd_fill_deviceinfo(struct usbd_device *, struct usb_device_info *);
int usbd_get_routestring(struct usbd_device *, uint32_t *);
int usbd_get_location(struct usbd_device *, struct usbd_interface *, uint8_t *,
uint32_t *, uint8_t *);
usb_config_descriptor_t *usbd_get_cdesc(struct usbd_device *, int, u_int *);
int usbd_get_interface_altindex(struct usbd_interface *iface);