sync code with last improvements from OpenBSD
This commit is contained in:
parent
0095d6bf71
commit
4366cfe9ca
20 changed files with 247 additions and 44 deletions
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 *);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue