sync with OpenBSD -current
This commit is contained in:
parent
eff43bb1fd
commit
a2b5593ce1
76 changed files with 1704 additions and 1876 deletions
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: hidkbd.c,v 1.11 2023/11/30 12:50:41 miod Exp $ */
|
||||
/* $OpenBSD: hidkbd.c,v 1.12 2024/01/03 21:41:44 tobhe Exp $ */
|
||||
/* $NetBSD: ukbd.c,v 1.85 2003/03/11 16:44:00 augustss Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -126,9 +126,9 @@ static const struct hidkbd_translation apple_tb_trans[] = {
|
|||
static const struct hidkbd_translation apple_fn_trans[] = {
|
||||
{ 40, 73 }, /* return -> insert */
|
||||
{ 42, 76 }, /* backspace -> delete */
|
||||
{ 58, 233 }, /* F1 -> screen brightness down */
|
||||
{ 59, 232 }, /* F2 -> screen brightness up */
|
||||
#ifdef notyet
|
||||
{ 58, 0 }, /* F1 -> screen brightness down */
|
||||
{ 59, 0 }, /* F2 -> screen brightness up */
|
||||
{ 60, 0 }, /* F3 */
|
||||
{ 61, 0 }, /* F4 */
|
||||
{ 62, 0 }, /* F5 -> keyboard backlight down */
|
||||
|
@ -138,8 +138,6 @@ static const struct hidkbd_translation apple_fn_trans[] = {
|
|||
{ 66, 0 }, /* F9 -> audio next */
|
||||
#endif
|
||||
#ifdef __macppc__
|
||||
{ 58, 233 }, /* F1 -> screen brightness down */
|
||||
{ 59, 232 }, /* F2 -> screen brightness up */
|
||||
{ 60, 127 }, /* F3 -> audio mute */
|
||||
{ 61, 129 }, /* F4 -> audio lower */
|
||||
{ 62, 128 }, /* F5 -> audio raise */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: ufshci.c,v 1.3 2023/04/05 17:23:30 mglocker Exp $ */
|
||||
/* $OpenBSD: ufshci.c,v 1.6 2024/01/04 21:35:56 mglocker Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022 Marcus Glocker <mglocker@openbsd.org>
|
||||
|
@ -76,13 +76,14 @@ int ufshci_utr_cmd_capacity16(struct ufshci_softc *,
|
|||
int ufshci_utr_cmd_capacity(struct ufshci_softc *,
|
||||
struct ufshci_ccb *, int, int);
|
||||
int ufshci_utr_cmd_read(struct ufshci_softc *,
|
||||
struct ufshci_ccb *, int, int, uint32_t, uint16_t);
|
||||
struct ufshci_ccb *, int, int,
|
||||
struct scsi_generic *);
|
||||
int ufshci_utr_cmd_write(struct ufshci_softc *,
|
||||
struct ufshci_ccb *, int, int, uint32_t, uint16_t);
|
||||
struct ufshci_ccb *, int, int,
|
||||
struct scsi_generic *);
|
||||
int ufshci_utr_cmd_sync(struct ufshci_softc *,
|
||||
struct ufshci_ccb *, int, uint32_t, uint16_t);
|
||||
int ufshci_xfer_complete(struct ufshci_softc *);
|
||||
void ufshci_hexdump(void *, int, char *, int);
|
||||
|
||||
/* SCSI */
|
||||
int ufshci_ccb_alloc(struct ufshci_softc *, int);
|
||||
|
@ -105,12 +106,6 @@ void ufshci_scsi_io_done(struct ufshci_softc *,
|
|||
void ufshci_scsi_done(struct ufshci_softc *,
|
||||
struct ufshci_ccb *);
|
||||
|
||||
#if 0
|
||||
const struct scsi_adapter ufshci_switch = {
|
||||
ufshci_scsi_cmd, ufshci_minphys, ufshci_scsi_probe, ufshci_scsi_free,
|
||||
NULL
|
||||
};
|
||||
#endif
|
||||
const struct scsi_adapter ufshci_switch = {
|
||||
ufshci_scsi_cmd, NULL, NULL, NULL, NULL
|
||||
};
|
||||
|
@ -1067,7 +1062,7 @@ ufshci_utr_cmd_capacity(struct ufshci_softc *sc, struct ufshci_ccb *ccb,
|
|||
|
||||
int
|
||||
ufshci_utr_cmd_read(struct ufshci_softc *sc, struct ufshci_ccb *ccb,
|
||||
int rsp_size, int flags, uint32_t lba, uint16_t blocks)
|
||||
int rsp_size, int flags, struct scsi_generic *scsi_cmd)
|
||||
{
|
||||
int slot, off, len, i;
|
||||
uint64_t dva;
|
||||
|
@ -1112,14 +1107,8 @@ ufshci_utr_cmd_read(struct ufshci_softc *sc, struct ufshci_ccb *ccb,
|
|||
|
||||
ucd->cmd.expected_xfer_len = htobe32(rsp_size);
|
||||
|
||||
ucd->cmd.cdb[0] = READ_10; /* 0x28 */
|
||||
memcpy(ucd->cmd.cdb, scsi_cmd, sizeof(ucd->cmd.cdb));
|
||||
//ucd->cmd.cdb[1] = (1 << 3); /* FUA: Force Unit Access */
|
||||
ucd->cmd.cdb[2] = (lba >> 24) & 0xff;
|
||||
ucd->cmd.cdb[3] = (lba >> 16) & 0xff;
|
||||
ucd->cmd.cdb[4] = (lba >> 8) & 0xff;
|
||||
ucd->cmd.cdb[5] = (lba >> 0) & 0xff;
|
||||
ucd->cmd.cdb[7] = (blocks >> 8) & 0xff;
|
||||
ucd->cmd.cdb[8] = (blocks >> 0) & 0xff;
|
||||
|
||||
/* 7.2.1 Basic Steps when Building a UTP Transfer Request: 2g) */
|
||||
/* Already done with above memset */
|
||||
|
@ -1181,7 +1170,7 @@ ufshci_utr_cmd_read(struct ufshci_softc *sc, struct ufshci_ccb *ccb,
|
|||
|
||||
int
|
||||
ufshci_utr_cmd_write(struct ufshci_softc *sc, struct ufshci_ccb *ccb,
|
||||
int rsp_size, int flags, uint32_t lba, uint16_t blocks)
|
||||
int rsp_size, int flags, struct scsi_generic *scsi_cmd)
|
||||
{
|
||||
int slot, off, len, i;
|
||||
uint64_t dva;
|
||||
|
@ -1226,14 +1215,8 @@ ufshci_utr_cmd_write(struct ufshci_softc *sc, struct ufshci_ccb *ccb,
|
|||
|
||||
ucd->cmd.expected_xfer_len = htobe32(rsp_size);
|
||||
|
||||
ucd->cmd.cdb[0] = WRITE_10; /* 0x2a */
|
||||
memcpy(ucd->cmd.cdb, scsi_cmd, sizeof(ucd->cmd.cdb));
|
||||
ucd->cmd.cdb[1] = (1 << 3); /* FUA: Force Unit Access */
|
||||
ucd->cmd.cdb[2] = (lba >> 24) & 0xff;
|
||||
ucd->cmd.cdb[3] = (lba >> 16) & 0xff;
|
||||
ucd->cmd.cdb[4] = (lba >> 8) & 0xff;
|
||||
ucd->cmd.cdb[5] = (lba >> 0) & 0xff;
|
||||
ucd->cmd.cdb[7] = (blocks >> 8) & 0xff;
|
||||
ucd->cmd.cdb[8] = (blocks >> 0) & 0xff;
|
||||
|
||||
/* 7.2.1 Basic Steps when Building a UTP Transfer Request: 2g) */
|
||||
/* Already done with above memset */
|
||||
|
@ -1284,7 +1267,7 @@ ufshci_utr_cmd_write(struct ufshci_softc *sc, struct ufshci_ccb *ccb,
|
|||
UFSHCI_REG_UTRIACR_IAEN |
|
||||
UFSHCI_REG_UTRIACR_IAPWEN |
|
||||
UFSHCI_REG_UTRIACR_IACTH(UFSHCI_INTR_AGGR_COUNT) |
|
||||
UFSHCI_REG_UTRIACR_IATOVAL(UFSHCI_INTR_AGGR_COUNT));
|
||||
UFSHCI_REG_UTRIACR_IATOVAL(UFSHCI_INTR_AGGR_TIMEOUT));
|
||||
}
|
||||
|
||||
/* 7.2.1 Basic Steps when Building a UTP Transfer Request: 14) */
|
||||
|
@ -1425,51 +1408,6 @@ ufshci_xfer_complete(struct ufshci_softc *sc)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef UFSHCI_DEBUG
|
||||
void
|
||||
ufshci_hexdump(void *buf, int len, char *title, int dbglvl)
|
||||
{
|
||||
u_char b[16];
|
||||
int i, j, l;
|
||||
|
||||
if (dbglvl > ufshci_dbglvl)
|
||||
return;
|
||||
|
||||
printf("hexdump for %s (size=%d bytes)\n", title, len);
|
||||
|
||||
for (i = 0; i < len; i += l) {
|
||||
printf("%4i:", i);
|
||||
l = min(sizeof(b), len - i);
|
||||
bcopy(buf + i, b, l);
|
||||
|
||||
for (j = 0; j < sizeof(b); j++) {
|
||||
if (j % 2 == 0)
|
||||
printf(" ");
|
||||
if (j % 8 == 0)
|
||||
printf(" ");
|
||||
if (j < l)
|
||||
printf("%02x", (int)b[j]);
|
||||
else
|
||||
printf(" ");
|
||||
}
|
||||
printf(" |");
|
||||
for (j = 0; j < l; j++) {
|
||||
if (b[j] >= 0x20 && b[j] <= 0x7e)
|
||||
printf("%c", b[j]);
|
||||
else
|
||||
printf(".");
|
||||
}
|
||||
printf("|\n");
|
||||
}
|
||||
}
|
||||
#else
|
||||
void
|
||||
ufshci_hexdump(void *buf, int len, char *title, int dbglvl)
|
||||
{
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
/* SCSI */
|
||||
|
||||
int
|
||||
|
@ -1859,15 +1797,11 @@ ufshci_scsi_io(struct scsi_xfer *xs, int dir)
|
|||
struct ufshci_softc *sc = link->bus->sb_adapter_softc;
|
||||
struct ufshci_ccb *ccb = xs->io;
|
||||
bus_dmamap_t dmap = ccb->ccb_dmamap;
|
||||
uint64_t lba;
|
||||
uint32_t blocks;
|
||||
int error;
|
||||
|
||||
if ((xs->flags & (SCSI_DATA_IN | SCSI_DATA_OUT)) != dir)
|
||||
goto error1;
|
||||
|
||||
scsi_cmd_rw_decode(&xs->cmd, &lba, &blocks);
|
||||
|
||||
DPRINTF("%s: %s, lba=%llu, blocks=%u, datalen=%d (%s)\n",
|
||||
__func__,
|
||||
ISSET(xs->flags, SCSI_DATA_IN) ? "READ" : "WRITE",
|
||||
|
@ -1890,10 +1824,10 @@ ufshci_scsi_io(struct scsi_xfer *xs, int dir)
|
|||
|
||||
if (dir == SCSI_DATA_IN) {
|
||||
ccb->ccb_slot = ufshci_utr_cmd_read(sc, ccb, xs->datalen,
|
||||
xs->flags, (uint32_t)lba, (uint16_t)blocks);
|
||||
xs->flags, &xs->cmd);
|
||||
} else {
|
||||
ccb->ccb_slot = ufshci_utr_cmd_write(sc, ccb, xs->datalen,
|
||||
xs->flags, (uint32_t)lba, (uint16_t)blocks);
|
||||
xs->flags, &xs->cmd);
|
||||
}
|
||||
|
||||
if (ccb->ccb_slot == -1)
|
||||
|
@ -1924,33 +1858,11 @@ ufshci_scsi_io_done(struct ufshci_softc *sc, struct ufshci_ccb *ccb)
|
|||
{
|
||||
struct scsi_xfer *xs = ccb->ccb_cookie;
|
||||
bus_dmamap_t dmap = ccb->ccb_dmamap;
|
||||
#if 0
|
||||
struct ufshci_utrd *utrd;
|
||||
struct ufshci_ucd *ucd;
|
||||
int slot = ccb->ccb_slot;
|
||||
#endif
|
||||
|
||||
bus_dmamap_sync(sc->sc_dmat, dmap, 0, dmap->dm_mapsize,
|
||||
ISSET(xs->flags, SCSI_DATA_IN) ? BUS_DMASYNC_POSTREAD :
|
||||
BUS_DMASYNC_POSTWRITE);
|
||||
#if 0
|
||||
ufshci_hexdump(xs->data, xs->datalen, "xs->data", 1);
|
||||
|
||||
utrd = UFSHCI_DMA_KVA(sc->sc_dmamem_utrd) + (sizeof(*utrd) * slot);
|
||||
ucd = UFSHCI_DMA_KVA(sc->sc_dmamem_ucd) + (sizeof(*ucd) * slot);
|
||||
|
||||
printf("ucd rsp tc=0x%02x\n", ucd->rsp.hdr.tc);
|
||||
printf("ucd rsp flags=0x%02x\n", ucd->rsp.hdr.flags);
|
||||
printf("ucd rsp lun=%d\n", ucd->rsp.hdr.lun);
|
||||
printf("ucd rsp taskid=%d\n", ucd->rsp.hdr.taskid);
|
||||
printf("ucd rsp cmd_set_type=0x%02x\n", ucd->rsp.hdr.cmd_set_type);
|
||||
printf("ucd rsp query=0x%02x\n", ucd->rsp.hdr.query);
|
||||
printf("ucd rsp response=0x%02x\n", ucd->rsp.hdr.response);
|
||||
printf("ucd rsp status=0x%02x\n", ucd->rsp.hdr.status);
|
||||
printf("ucd rsp ehs_len=%d\n", ucd->rsp.hdr.ehs_len);
|
||||
printf("ucd rsp device_info=0x%02x\n", ucd->rsp.hdr.device_info);
|
||||
printf("ucd rsp ds_len=%d\n", ucd->rsp.hdr.ds_len);
|
||||
printf("ucd rsp rxl=%d\n", be32toh(ucd->rsp.residual_xfer_len));
|
||||
#endif
|
||||
bus_dmamap_unload(sc->sc_dmat, dmap);
|
||||
|
||||
ccb->ccb_cookie = NULL;
|
||||
|
@ -1967,29 +1879,7 @@ void
|
|||
ufshci_scsi_done(struct ufshci_softc *sc, struct ufshci_ccb *ccb)
|
||||
{
|
||||
struct scsi_xfer *xs = ccb->ccb_cookie;
|
||||
#if 0
|
||||
struct ufshci_utrd *utrd;
|
||||
struct ufshci_ucd *ucd;
|
||||
int slot = ccb->ccb_slot;
|
||||
|
||||
ufshci_hexdump(xs->data, xs->datalen, "xs->data", 1);
|
||||
|
||||
utrd = UFSHCI_DMA_KVA(sc->sc_dmamem_utrd) + (sizeof(*utrd) * slot);
|
||||
ucd = UFSHCI_DMA_KVA(sc->sc_dmamem_ucd) + (sizeof(*ucd) * slot);
|
||||
|
||||
printf("ucd rsp tc=0x%02x\n", ucd->rsp.hdr.tc);
|
||||
printf("ucd rsp flags=0x%02x\n", ucd->rsp.hdr.flags);
|
||||
printf("ucd rsp lun=%d\n", ucd->rsp.hdr.lun);
|
||||
printf("ucd rsp taskid=%d\n", ucd->rsp.hdr.taskid);
|
||||
printf("ucd rsp cmd_set_type=0x%02x\n", ucd->rsp.hdr.cmd_set_type);
|
||||
printf("ucd rsp query=0x%02x\n", ucd->rsp.hdr.query);
|
||||
printf("ucd rsp response=0x%02x\n", ucd->rsp.hdr.response);
|
||||
printf("ucd rsp status=0x%02x\n", ucd->rsp.hdr.status);
|
||||
printf("ucd rsp ehs_len=%d\n", ucd->rsp.hdr.ehs_len);
|
||||
printf("ucd rsp device_info=0x%02x\n", ucd->rsp.hdr.device_info);
|
||||
printf("ucd rsp ds_len=%d\n", ucd->rsp.hdr.ds_len);
|
||||
printf("ucd rsp rxl=%d\n", be32toh(ucd->rsp.residual_xfer_len));
|
||||
#endif
|
||||
ccb->ccb_cookie = NULL;
|
||||
ccb->ccb_slot = -1;
|
||||
ccb->ccb_done = NULL;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: ufshcireg.h,v 1.3 2023/08/15 08:27:30 miod Exp $ */
|
||||
/* $OpenBSD: ufshcireg.h,v 1.4 2024/01/04 21:02:30 mglocker Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022 Marcus Glocker <mglocker@openbsd.org>
|
||||
|
@ -21,7 +21,7 @@
|
|||
*/
|
||||
#define UFSHCI_UCD_PRDT_MAX_SEGS 64
|
||||
#define UFSHCI_UCD_PRDT_MAX_XFER (UFSHCI_UCD_PRDT_MAX_SEGS * PAGE_SIZE)
|
||||
#define UFSHCI_INTR_AGGR_COUNT 6
|
||||
#define UFSHCI_INTR_AGGR_COUNT 1 /* Max. allowed value = 31 */
|
||||
#define UFSHCI_INTR_AGGR_TIMEOUT 0x64 /* 4ms */
|
||||
#define UFSHCI_MAX_UNITS 32
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: if_bnxt.c,v 1.39 2023/11/10 15:51:20 bluhm Exp $ */
|
||||
/* $OpenBSD: if_bnxt.c,v 1.40 2024/01/04 07:08:47 jmatthew Exp $ */
|
||||
/*-
|
||||
* Broadcom NetXtreme-C/E network driver.
|
||||
*
|
||||
|
@ -1158,12 +1158,16 @@ bnxt_down(struct bnxt_softc *sc)
|
|||
|
||||
CLR(ifp->if_flags, IFF_RUNNING);
|
||||
|
||||
intr_barrier(sc->sc_ih);
|
||||
|
||||
for (i = 0; i < sc->sc_nqueues; i++) {
|
||||
ifq_clr_oactive(ifp->if_ifqs[i]);
|
||||
ifq_barrier(ifp->if_ifqs[i]);
|
||||
/* intr barrier? */
|
||||
|
||||
timeout_del(&sc->sc_queues[i].q_rx.rx_refill);
|
||||
timeout_del_barrier(&sc->sc_queues[i].q_rx.rx_refill);
|
||||
|
||||
if (sc->sc_intrmap != NULL)
|
||||
intr_barrier(sc->sc_queues[i].q_ihc);
|
||||
}
|
||||
|
||||
bnxt_hwrm_free_filter(sc, &sc->sc_vnic);
|
||||
|
|
|
@ -846,7 +846,7 @@ kvp_get_ip_info(struct hv_kvp *kvp, const uint8_t *mac, uint8_t *family,
|
|||
struct sockaddr_in6 *sin6, sa6;
|
||||
uint8_t enaddr[ETHER_ADDR_LEN];
|
||||
uint8_t ipaddr[INET6_ADDRSTRLEN];
|
||||
int i, j, lo, hi, af;
|
||||
int i, j, lo, hi, s, af;
|
||||
|
||||
/* Convert from the UTF-16LE string format to binary */
|
||||
for (i = 0, j = 0; j < ETHER_ADDR_LEN; i += 6) {
|
||||
|
@ -870,14 +870,16 @@ kvp_get_ip_info(struct hv_kvp *kvp, const uint8_t *mac, uint8_t *family,
|
|||
return (-1);
|
||||
}
|
||||
|
||||
NET_LOCK_SHARED();
|
||||
KERNEL_LOCK();
|
||||
s = splnet();
|
||||
|
||||
TAILQ_FOREACH(ifp, &ifnetlist, if_list) {
|
||||
if (!memcmp(LLADDR(ifp->if_sadl), enaddr, ETHER_ADDR_LEN))
|
||||
break;
|
||||
}
|
||||
if (ifp == NULL) {
|
||||
NET_UNLOCK_SHARED();
|
||||
splx(s);
|
||||
KERNEL_UNLOCK();
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
@ -917,7 +919,8 @@ kvp_get_ip_info(struct hv_kvp *kvp, const uint8_t *mac, uint8_t *family,
|
|||
else if (ifa6ll != NULL)
|
||||
ifa = ifa6ll;
|
||||
else {
|
||||
NET_UNLOCK_SHARED();
|
||||
splx(s);
|
||||
KERNEL_UNLOCK();
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
|
@ -953,7 +956,8 @@ kvp_get_ip_info(struct hv_kvp *kvp, const uint8_t *mac, uint8_t *family,
|
|||
break;
|
||||
}
|
||||
|
||||
NET_UNLOCK_SHARED();
|
||||
splx(s);
|
||||
KERNEL_UNLOCK();
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: if_axen.c,v 1.31 2022/01/09 05:43:00 jsg Exp $ */
|
||||
/* $OpenBSD: if_axen.c,v 1.32 2024/01/04 08:41:59 kevlo Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2013 Yojiro UO <yuo@openbsd.org>
|
||||
|
@ -17,8 +17,8 @@
|
|||
*/
|
||||
|
||||
/*
|
||||
* ASIX Electronics AX88178a USB 2.0 ethernet and AX88179 USB 3.0 Ethernet
|
||||
* driver.
|
||||
* ASIX Electronics AX88178a USB 2.0 ethernet and
|
||||
* AX88179/AX88179a USB 3.0 Ethernet driver.
|
||||
*/
|
||||
|
||||
#include "bpfilter.h"
|
||||
|
@ -600,6 +600,7 @@ axen_attach(struct device *parent, struct device *self, void *aux)
|
|||
struct usb_attach_arg *uaa = aux;
|
||||
usb_interface_descriptor_t *id;
|
||||
usb_endpoint_descriptor_t *ed;
|
||||
usb_device_descriptor_t *dd;
|
||||
struct mii_data *mii;
|
||||
u_char eaddr[ETHER_ADDR_LEN];
|
||||
char *devname = sc->axen_dev.dv_xname;
|
||||
|
@ -658,6 +659,10 @@ axen_attach(struct device *parent, struct device *self, void *aux)
|
|||
}
|
||||
}
|
||||
|
||||
dd = usbd_get_device_descriptor(sc->axen_udev);
|
||||
if (UGETW(dd->bcdDevice) == 0x200)
|
||||
sc->axen_flags = AX179A;
|
||||
|
||||
s = splnet();
|
||||
|
||||
sc->axen_phyno = AXEN_PHY_ID;
|
||||
|
@ -680,6 +685,8 @@ axen_attach(struct device *parent, struct device *self, void *aux)
|
|||
printf(" AX88178a");
|
||||
else if (sc->axen_flags & AX179)
|
||||
printf(" AX88179");
|
||||
else
|
||||
printf(" AX88179A");
|
||||
printf(", address %s\n", ether_sprintf(eaddr));
|
||||
|
||||
bcopy(eaddr, (char *)&sc->arpcom.ac_enaddr, ETHER_ADDR_LEN);
|
||||
|
@ -885,7 +892,7 @@ axen_rxeof(struct usbd_xfer *xfer, void *priv, usbd_status status)
|
|||
u_int16_t hdr_offset, pkt_count;
|
||||
size_t pkt_len;
|
||||
size_t temp;
|
||||
int s;
|
||||
int padlen, s;
|
||||
|
||||
DPRINTFN(10,("%s: %s: enter\n", sc->axen_dev.dv_xname,__func__));
|
||||
|
||||
|
@ -916,7 +923,14 @@ axen_rxeof(struct usbd_xfer *xfer, void *priv, usbd_status status)
|
|||
|
||||
/*
|
||||
* buffer map
|
||||
*
|
||||
* for ax88179
|
||||
* [packet #0]...[packet #n][pkt hdr#0]..[pkt hdr#n][recv_hdr]
|
||||
*
|
||||
* for ax88179a
|
||||
* [packet #0]...[packet #n][pkt hdr#0][dummy_hdr]..
|
||||
* [pkt hdr#n][dummy_hdr][recv_hdr]
|
||||
*
|
||||
* each packet has 0xeeee as pseudo header..
|
||||
*/
|
||||
hdr_p = (u_int32_t *)(buf + total_len - sizeof(u_int32_t));
|
||||
|
@ -953,7 +967,23 @@ axen_rxeof(struct usbd_xfer *xfer, void *priv, usbd_status status)
|
|||
}
|
||||
#endif
|
||||
|
||||
/* skip pseudo header (2byte) */
|
||||
padlen = 2;
|
||||
/* skip trailer padding (4Byte) for ax88179 */
|
||||
if (!(sc->axen_flags & AX179A))
|
||||
padlen += 4;
|
||||
|
||||
do {
|
||||
pkt_hdr = letoh32(*hdr_p);
|
||||
pkt_len = (pkt_hdr >> 16) & 0x1fff;
|
||||
|
||||
DPRINTFN(10,("rxeof: packet#%d, pkt_hdr 0x%08x, pkt_len %zu\n",
|
||||
pkt_count, pkt_hdr, pkt_len));
|
||||
|
||||
/* skip dummy packet header */
|
||||
if (pkt_len == 0)
|
||||
goto nextpkt;
|
||||
|
||||
if ((buf[0] != 0xee) || (buf[1] != 0xee)){
|
||||
printf("%s: invalid buffer(pkt#%d), continue\n",
|
||||
sc->axen_dev.dv_xname, pkt_count);
|
||||
|
@ -961,12 +991,6 @@ axen_rxeof(struct usbd_xfer *xfer, void *priv, usbd_status status)
|
|||
goto done;
|
||||
}
|
||||
|
||||
pkt_hdr = letoh32(*hdr_p);
|
||||
pkt_len = (pkt_hdr >> 16) & 0x1fff;
|
||||
|
||||
DPRINTFN(10,("rxeof: packet#%d, pkt_hdr 0x%08x, pkt_len %zu\n",
|
||||
pkt_count, pkt_hdr, pkt_len));
|
||||
|
||||
if ((pkt_hdr & AXEN_RXHDR_CRC_ERR) ||
|
||||
(pkt_hdr & AXEN_RXHDR_DROP_ERR)) {
|
||||
ifp->if_ierrors++;
|
||||
|
@ -983,8 +1007,7 @@ axen_rxeof(struct usbd_xfer *xfer, void *priv, usbd_status status)
|
|||
goto nextpkt;
|
||||
}
|
||||
|
||||
/* skip pseudo header (2byte) and trailer padding (4Byte) */
|
||||
m->m_pkthdr.len = m->m_len = pkt_len - 6;
|
||||
m->m_pkthdr.len = m->m_len = pkt_len - padlen;
|
||||
|
||||
#ifdef AXEN_TOE
|
||||
/* checksum err */
|
||||
|
@ -1007,7 +1030,7 @@ axen_rxeof(struct usbd_xfer *xfer, void *priv, usbd_status status)
|
|||
M_UDP_CSUM_IN_OK;
|
||||
#endif
|
||||
|
||||
memcpy(mtod(m, char *), buf + 2, pkt_len - 6);
|
||||
memcpy(mtod(m, char *), buf + 2, pkt_len - padlen);
|
||||
|
||||
ml_enqueue(&ml, m);
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: if_axenreg.h,v 1.6 2016/09/14 12:41:09 mpi Exp $ */
|
||||
/* $OpenBSD: if_axenreg.h,v 1.7 2024/01/04 08:41:59 kevlo Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2013 Yojiro UO <yuo@openbsd.org>. All right reserved.
|
||||
|
@ -227,6 +227,7 @@ struct axen_type {
|
|||
u_int16_t axen_flags;
|
||||
#define AX178A 0x0001 /* AX88178a */
|
||||
#define AX179 0x0002 /* AX88179 */
|
||||
#define AX179A 0x0004 /* AX88179a */
|
||||
};
|
||||
|
||||
struct axen_softc;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: if_cdce.c,v 1.81 2023/04/27 08:33:59 gerhard Exp $ */
|
||||
/* $OpenBSD: if_cdce.c,v 1.82 2024/01/04 08:41:59 kevlo Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1997, 1998, 1999, 2000-2003 Bill Paul <wpaul@windriver.com>
|
||||
|
@ -59,11 +59,8 @@
|
|||
#include <netinet/in.h>
|
||||
#include <netinet/if_ether.h>
|
||||
|
||||
#include <machine/bus.h>
|
||||
|
||||
#include <dev/usb/usb.h>
|
||||
#include <dev/usb/usbdi.h>
|
||||
#include <dev/usb/usbdivar.h>
|
||||
#include <dev/usb/usbdi_util.h>
|
||||
#include <dev/usb/usbdevs.h>
|
||||
#include <dev/usb/usbcdc.h>
|
||||
|
@ -93,19 +90,18 @@ void cdce_stop(struct cdce_softc *);
|
|||
void cdce_intr(struct usbd_xfer *, void *, usbd_status);
|
||||
|
||||
const struct cdce_type cdce_devs[] = {
|
||||
{{ USB_VENDOR_ACERLABS, USB_PRODUCT_ACERLABS_M5632 }, 0, 0, -1 },
|
||||
{{ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2501 }, 0, 0, -1 },
|
||||
{{ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SL5500 }, 0, CDCE_CRC32, -1 },
|
||||
{{ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_A300 }, 0, CDCE_CRC32, -1 },
|
||||
{{ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SL5600 }, 0, CDCE_CRC32, -1 },
|
||||
{{ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_C700 }, 0, CDCE_CRC32, -1 },
|
||||
{{ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_C750 }, 0, CDCE_CRC32, -1 },
|
||||
{{ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_USBLAN }, 0, CDCE_CRC32, -1 },
|
||||
{{ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_USBLAN2 }, 0, CDCE_CRC32, -1 },
|
||||
{{ USB_VENDOR_GMATE, USB_PRODUCT_GMATE_YP3X00 }, 0, 0, -1 },
|
||||
{{ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQLINUX }, 0, 0, -1 },
|
||||
{{ USB_VENDOR_AMBIT, USB_PRODUCT_AMBIT_NTL_250 }, 0, CDCE_SWAPUNION, -1 },
|
||||
{{ USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88179 }, 0x0200, CDCE_MATCHREV, 3 },
|
||||
{{ USB_VENDOR_ACERLABS, USB_PRODUCT_ACERLABS_M5632 }, 0 },
|
||||
{{ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2501 }, 0 },
|
||||
{{ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SL5500 }, CDCE_CRC32 },
|
||||
{{ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_A300 }, CDCE_CRC32 },
|
||||
{{ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SL5600 }, CDCE_CRC32 },
|
||||
{{ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_C700 }, CDCE_CRC32 },
|
||||
{{ USB_VENDOR_SHARP, USB_PRODUCT_SHARP_C750 }, CDCE_CRC32 },
|
||||
{{ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_USBLAN }, CDCE_CRC32 },
|
||||
{{ USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_USBLAN2 }, CDCE_CRC32 },
|
||||
{{ USB_VENDOR_GMATE, USB_PRODUCT_GMATE_YP3X00 }, 0 },
|
||||
{{ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQLINUX }, 0 },
|
||||
{{ USB_VENDOR_AMBIT, USB_PRODUCT_AMBIT_NTL_250 }, CDCE_SWAPUNION },
|
||||
};
|
||||
#define cdce_lookup(v, p) \
|
||||
((const struct cdce_type *)usb_lookup(cdce_devs, v, p))
|
||||
|
@ -127,15 +123,6 @@ cdce_match(struct device *parent, void *match, void *aux)
|
|||
{
|
||||
struct usb_attach_arg *uaa = aux;
|
||||
usb_interface_descriptor_t *id;
|
||||
const struct cdce_type *type;
|
||||
|
||||
if ((type = cdce_lookup(uaa->vendor, uaa->product)) != NULL) {
|
||||
if (type->cdce_flags & CDCE_MATCHREV) {
|
||||
if (type->cdce_rev == uaa->release)
|
||||
return (UMATCH_VENDOR_PRODUCT_REV);
|
||||
} else
|
||||
return (UMATCH_VENDOR_PRODUCT);
|
||||
}
|
||||
|
||||
if (uaa->iface == NULL)
|
||||
return (UMATCH_NONE);
|
||||
|
@ -144,6 +131,9 @@ cdce_match(struct device *parent, void *match, void *aux)
|
|||
if (id == NULL)
|
||||
return (UMATCH_NONE);
|
||||
|
||||
if (cdce_lookup(uaa->vendor, uaa->product) != NULL)
|
||||
return (UMATCH_VENDOR_PRODUCT);
|
||||
|
||||
if (id->bInterfaceClass == UICLASS_CDC &&
|
||||
(id->bInterfaceSubClass ==
|
||||
UISUBCLASS_ETHERNET_NETWORKING_CONTROL_MODEL ||
|
||||
|
@ -160,6 +150,7 @@ cdce_attach(struct device *parent, struct device *self, void *aux)
|
|||
struct usb_attach_arg *uaa = aux;
|
||||
int s;
|
||||
struct ifnet *ifp = GET_IFP(sc);
|
||||
struct usbd_device *dev = uaa->device;
|
||||
const struct cdce_type *t;
|
||||
usb_interface_descriptor_t *id;
|
||||
usb_endpoint_descriptor_t *ed;
|
||||
|
@ -172,51 +163,19 @@ cdce_attach(struct device *parent, struct device *self, void *aux)
|
|||
int i, j, numalts, len;
|
||||
int ctl_ifcno = -1;
|
||||
int data_ifcno = -1;
|
||||
usbd_status err;
|
||||
|
||||
t = cdce_lookup(uaa->vendor, uaa->product);
|
||||
if (uaa->configno < 0) {
|
||||
if (t == NULL || t->cdce_cfgno < 0) {
|
||||
printf("%s: unknown configuration for vid/pid match\n",
|
||||
sc->cdce_dev.dv_xname);
|
||||
return;
|
||||
}
|
||||
uaa->configno = t->cdce_cfgno;
|
||||
DPRINTF(("%s: switching to config #%d\n",
|
||||
sc->cdce_dev.dv_xname));
|
||||
err = usbd_set_config_no(uaa->device, uaa->configno, 1);
|
||||
if (err) {
|
||||
printf("%s: failed to switch to config #%d: %s\n",
|
||||
sc->cdce_dev.dv_xname, uaa->configno,
|
||||
usbd_errstr(err));
|
||||
return;
|
||||
}
|
||||
for (i = 0; i < uaa->device->cdesc->bNumInterfaces; i++) {
|
||||
if (usbd_iface_claimed(uaa->device, i))
|
||||
continue;
|
||||
id = usbd_get_interface_descriptor(
|
||||
&uaa->device->ifaces[i]);
|
||||
if (id != NULL && id->bInterfaceClass == UICLASS_CDC &&
|
||||
id->bInterfaceSubClass ==
|
||||
UISUBCLASS_ETHERNET_NETWORKING_CONTROL_MODEL) {
|
||||
uaa->iface = &uaa->device->ifaces[i];
|
||||
uaa->ifaceno = uaa->iface->idesc->bInterfaceNumber;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sc->cdce_udev = uaa->device;
|
||||
sc->cdce_ctl_iface = uaa->iface;
|
||||
id = usbd_get_interface_descriptor(sc->cdce_ctl_iface);
|
||||
ctl_ifcno = id->bInterfaceNumber;
|
||||
|
||||
t = cdce_lookup(uaa->vendor, uaa->product);
|
||||
if (t)
|
||||
sc->cdce_flags = t->cdce_flags;
|
||||
|
||||
/* Get the data interface no. and capabilities */
|
||||
ethd = NULL;
|
||||
usbd_desc_iter_init(sc->cdce_udev, &iter);
|
||||
usbd_desc_iter_init(dev, &iter);
|
||||
desc = usbd_desc_iter_next(&iter);
|
||||
while (desc) {
|
||||
if (desc->bDescriptorType != UDESC_CS_INTERFACE) {
|
||||
|
@ -251,13 +210,12 @@ cdce_attach(struct device *parent, struct device *self, void *aux)
|
|||
} else {
|
||||
DPRINTF(("cdce_attach: union interface: ctl=%d, data=%d\n",
|
||||
ctl_ifcno, data_ifcno));
|
||||
for (i = 0; i < uaa->device->cdesc->bNumInterfaces; i++) {
|
||||
for (i = 0; i < uaa->nifaces; i++) {
|
||||
if (usbd_iface_claimed(sc->cdce_udev, i))
|
||||
continue;
|
||||
id = usbd_get_interface_descriptor(
|
||||
&uaa->device->ifaces[i]);
|
||||
id = usbd_get_interface_descriptor(uaa->ifaces[i]);
|
||||
if (id != NULL && id->bInterfaceNumber == data_ifcno) {
|
||||
sc->cdce_data_iface = &uaa->device->ifaces[i];
|
||||
sc->cdce_data_iface = uaa->ifaces[i];
|
||||
usbd_claim_iface(sc->cdce_udev, i);
|
||||
}
|
||||
}
|
||||
|
@ -345,8 +303,8 @@ cdce_attach(struct device *parent, struct device *self, void *aux)
|
|||
found:
|
||||
s = splnet();
|
||||
|
||||
if (!ethd || usbd_get_string_desc(sc->cdce_udev, ethd->iMacAddress,
|
||||
sc->cdce_udev->langid, &eaddr_str, &len)) {
|
||||
if (!ethd || usbd_get_string_desc(sc->cdce_udev, ethd->iMacAddress, 0,
|
||||
&eaddr_str, &len)) {
|
||||
ether_fakeaddr(ifp);
|
||||
} else {
|
||||
for (i = 0; i < ETHER_ADDR_LEN * 2; i++) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: if_cdcereg.h,v 1.8 2023/04/27 08:33:59 gerhard Exp $ */
|
||||
/* $OpenBSD: if_cdcereg.h,v 1.9 2024/01/04 08:41:59 kevlo Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1997, 1998, 1999, 2000-2003 Bill Paul <wpaul@windriver.com>
|
||||
|
@ -40,12 +40,9 @@
|
|||
|
||||
struct cdce_type {
|
||||
struct usb_devno cdce_dev;
|
||||
u_int16_t cdce_rev;
|
||||
u_int16_t cdce_flags;
|
||||
#define CDCE_CRC32 1
|
||||
#define CDCE_SWAPUNION 2
|
||||
#define CDCE_MATCHREV 4
|
||||
int cdce_cfgno;
|
||||
};
|
||||
|
||||
struct cdce_softc;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue