sync with OpenBSD -current
This commit is contained in:
parent
eb9d621948
commit
f36b410006
37 changed files with 350 additions and 317 deletions
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: audio.c,v 1.207 2024/06/07 08:48:10 jsg Exp $ */
|
||||
/* $OpenBSD: audio.c,v 1.208 2024/08/20 07:44:36 mvs Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2015 Alexandre Ratchov <alex@caoua.org>
|
||||
*
|
||||
|
@ -27,11 +27,17 @@
|
|||
#include <sys/malloc.h>
|
||||
#include <sys/device.h>
|
||||
#include <sys/audioio.h>
|
||||
#include <sys/atomic.h>
|
||||
#include <dev/audio_if.h>
|
||||
#include <dev/mulaw.h>
|
||||
#include "audio.h"
|
||||
#include "wskbd.h"
|
||||
|
||||
/*
|
||||
* Locks used to protect data:
|
||||
* a atomic
|
||||
*/
|
||||
|
||||
#ifdef AUDIO_DEBUG
|
||||
#define DPRINTF(...) \
|
||||
do { \
|
||||
|
@ -225,7 +231,7 @@ struct mutex audio_lock = MUTEX_INITIALIZER(IPL_AUDIO);
|
|||
* Global flag to control if audio recording is enabled when the
|
||||
* mixerctl setting is record.enable=sysctl
|
||||
*/
|
||||
int audio_record_enable = 0;
|
||||
int audio_record_enable = 0; /* [a] */
|
||||
|
||||
#ifdef AUDIO_DEBUG
|
||||
/*
|
||||
|
@ -590,7 +596,7 @@ audio_rintr(void *addr)
|
|||
|
||||
sc->rec.pos += sc->rec.blksz;
|
||||
if ((sc->record_enable == MIXER_RECORD_ENABLE_SYSCTL &&
|
||||
!audio_record_enable) ||
|
||||
atomic_load_int(&audio_record_enable) == 0) ||
|
||||
sc->record_enable == MIXER_RECORD_ENABLE_OFF) {
|
||||
ptr = audio_buf_wgetblk(&sc->rec, &count);
|
||||
audio_fill_sil(sc, ptr, sc->rec.blksz);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: virtio_mmio.c,v 1.13 2024/05/17 16:37:10 sf Exp $ */
|
||||
/* $OpenBSD: virtio_mmio.c,v 1.14 2024/08/20 07:04:29 sf Exp $ */
|
||||
/* $NetBSD: virtio.c,v 1.3 2011/11/02 23:05:52 njoly Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -271,16 +271,16 @@ virtio_mmio_attach(struct device *parent, struct device *self, void *aux)
|
|||
id = bus_space_read_4(sc->sc_iot, sc->sc_ioh, VIRTIO_MMIO_DEVICE_ID);
|
||||
printf(": Virtio %s Device", virtio_device_string(id));
|
||||
|
||||
if (sc->sc_version == 1)
|
||||
bus_space_write_4(sc->sc_iot, sc->sc_ioh,
|
||||
VIRTIO_MMIO_GUEST_PAGE_SIZE, PAGE_SIZE);
|
||||
|
||||
printf("\n");
|
||||
|
||||
/* No device connected. */
|
||||
if (id == 0)
|
||||
return;
|
||||
|
||||
if (sc->sc_version == 1)
|
||||
bus_space_write_4(sc->sc_iot, sc->sc_ioh,
|
||||
VIRTIO_MMIO_GUEST_PAGE_SIZE, PAGE_SIZE);
|
||||
|
||||
vsc->sc_ops = &virtio_mmio_ops;
|
||||
vsc->sc_dmat = sc->sc_dmat;
|
||||
sc->sc_config_offset = VIRTIO_MMIO_CONFIG;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: ufshci.c,v 1.39 2024/06/27 21:35:34 mglocker Exp $ */
|
||||
/* $OpenBSD: ufshci.c,v 1.40 2024/08/20 05:36:38 jsg Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022 Marcus Glocker <mglocker@openbsd.org>
|
||||
|
@ -347,7 +347,7 @@ ufshci_dmamem_alloc(struct ufshci_softc *sc, size_t size)
|
|||
|
||||
if (bus_dmamap_create(sc->sc_dmat, size, 1, size, 0,
|
||||
BUS_DMA_WAITOK | BUS_DMA_ALLOCNOW |
|
||||
(sc->sc_cap & UFSHCI_REG_CAP_64AS) ? BUS_DMA_64BIT : 0,
|
||||
((sc->sc_cap & UFSHCI_REG_CAP_64AS) ? BUS_DMA_64BIT : 0),
|
||||
&udm->udm_map) != 0)
|
||||
goto udmfree;
|
||||
|
||||
|
@ -1428,7 +1428,7 @@ ufshci_ccb_alloc(struct ufshci_softc *sc, int nccbs)
|
|||
if (bus_dmamap_create(sc->sc_dmat, UFSHCI_UCD_PRDT_MAX_XFER,
|
||||
UFSHCI_UCD_PRDT_MAX_SEGS, UFSHCI_UCD_PRDT_MAX_XFER, 0,
|
||||
BUS_DMA_WAITOK | BUS_DMA_ALLOCNOW |
|
||||
(sc->sc_cap & UFSHCI_REG_CAP_64AS) ? BUS_DMA_64BIT : 0,
|
||||
((sc->sc_cap & UFSHCI_REG_CAP_64AS) ? BUS_DMA_64BIT : 0),
|
||||
&ccb->ccb_dmamap) != 0)
|
||||
goto free_maps;
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: if_rge.c,v 1.29 2024/08/12 06:47:11 dlg Exp $ */
|
||||
/* $OpenBSD: if_rge.c,v 1.30 2024/08/20 00:09:12 dlg Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019, 2020, 2023, 2024
|
||||
|
@ -65,7 +65,6 @@ int rge_match(struct device *, void *, void *);
|
|||
void rge_attach(struct device *, struct device *, void *);
|
||||
int rge_activate(struct device *, int);
|
||||
int rge_intr(void *);
|
||||
int rge_encap(struct rge_queues *, struct mbuf *, int);
|
||||
int rge_ioctl(struct ifnet *, u_long, caddr_t);
|
||||
void rge_start(struct ifqueue *);
|
||||
void rge_watchdog(struct ifnet *);
|
||||
|
@ -413,29 +412,27 @@ rge_intr(void *arg)
|
|||
return (claimed);
|
||||
}
|
||||
|
||||
int
|
||||
rge_encap(struct rge_queues *q, struct mbuf *m, int idx)
|
||||
static inline void
|
||||
rge_tx_list_sync(struct rge_softc *sc, struct rge_queues *q,
|
||||
unsigned int idx, unsigned int len, int ops)
|
||||
{
|
||||
bus_dmamap_sync(sc->sc_dmat, q->q_tx.rge_tx_list_map,
|
||||
idx * sizeof(struct rge_tx_desc), len * sizeof(struct rge_tx_desc),
|
||||
ops);
|
||||
}
|
||||
|
||||
static int
|
||||
rge_encap(struct ifnet *ifp, struct rge_queues *q, struct mbuf *m, int idx)
|
||||
{
|
||||
struct rge_softc *sc = q->q_sc;
|
||||
struct rge_tx_desc *d = NULL;
|
||||
struct rge_txq *txq;
|
||||
bus_dmamap_t txmap;
|
||||
uint32_t cmdsts, cflags = 0;
|
||||
int cur, error, i, last, nsegs;
|
||||
|
||||
/*
|
||||
* Set RGE_TDEXTSTS_IPCSUM if any checksum offloading is requested.
|
||||
* Otherwise, RGE_TDEXTSTS_TCPCSUM / RGE_TDEXTSTS_UDPCSUM does not
|
||||
* take affect.
|
||||
*/
|
||||
if ((m->m_pkthdr.csum_flags &
|
||||
(M_IPV4_CSUM_OUT | M_TCP_CSUM_OUT | M_UDP_CSUM_OUT)) != 0) {
|
||||
cflags |= RGE_TDEXTSTS_IPCSUM;
|
||||
if (m->m_pkthdr.csum_flags & M_TCP_CSUM_OUT)
|
||||
cflags |= RGE_TDEXTSTS_TCPCSUM;
|
||||
if (m->m_pkthdr.csum_flags & M_UDP_CSUM_OUT)
|
||||
cflags |= RGE_TDEXTSTS_UDPCSUM;
|
||||
}
|
||||
int cur, error, i;
|
||||
#if NBPFILTER > 0
|
||||
caddr_t if_bpf;
|
||||
#endif
|
||||
|
||||
txq = &q->q_tx.rge_txq[idx];
|
||||
txmap = txq->txq_dmamap;
|
||||
|
@ -455,10 +452,28 @@ rge_encap(struct rge_queues *q, struct mbuf *m, int idx)
|
|||
return (0);
|
||||
}
|
||||
|
||||
#if NBPFILTER > 0
|
||||
if_bpf = READ_ONCE(ifp->if_bpf);
|
||||
if (if_bpf)
|
||||
bpf_mtap_ether(if_bpf, m, BPF_DIRECTION_OUT);
|
||||
#endif
|
||||
|
||||
bus_dmamap_sync(sc->sc_dmat, txmap, 0, txmap->dm_mapsize,
|
||||
BUS_DMASYNC_PREWRITE);
|
||||
|
||||
nsegs = txmap->dm_nsegs;
|
||||
/*
|
||||
* Set RGE_TDEXTSTS_IPCSUM if any checksum offloading is requested.
|
||||
* Otherwise, RGE_TDEXTSTS_TCPCSUM / RGE_TDEXTSTS_UDPCSUM does not
|
||||
* take affect.
|
||||
*/
|
||||
if ((m->m_pkthdr.csum_flags &
|
||||
(M_IPV4_CSUM_OUT | M_TCP_CSUM_OUT | M_UDP_CSUM_OUT)) != 0) {
|
||||
cflags |= RGE_TDEXTSTS_IPCSUM;
|
||||
if (m->m_pkthdr.csum_flags & M_TCP_CSUM_OUT)
|
||||
cflags |= RGE_TDEXTSTS_TCPCSUM;
|
||||
if (m->m_pkthdr.csum_flags & M_UDP_CSUM_OUT)
|
||||
cflags |= RGE_TDEXTSTS_UDPCSUM;
|
||||
}
|
||||
|
||||
/* Set up hardware VLAN tagging. */
|
||||
#if NVLAN > 0
|
||||
|
@ -467,47 +482,57 @@ rge_encap(struct rge_queues *q, struct mbuf *m, int idx)
|
|||
#endif
|
||||
|
||||
cur = idx;
|
||||
cmdsts = RGE_TDCMDSTS_SOF;
|
||||
|
||||
for (i = 0; i < txmap->dm_nsegs; i++) {
|
||||
d = &q->q_tx.rge_tx_list[cur];
|
||||
|
||||
d->rge_extsts = htole32(cflags);
|
||||
d->rge_addrlo = htole32(RGE_ADDR_LO(txmap->dm_segs[i].ds_addr));
|
||||
d->rge_addrhi = htole32(RGE_ADDR_HI(txmap->dm_segs[i].ds_addr));
|
||||
for (i = 1; i < txmap->dm_nsegs; i++) {
|
||||
cur = RGE_NEXT_TX_DESC(cur);
|
||||
|
||||
cmdsts = RGE_TDCMDSTS_OWN;
|
||||
cmdsts |= txmap->dm_segs[i].ds_len;
|
||||
|
||||
if (cur == RGE_TX_LIST_CNT - 1)
|
||||
cmdsts |= RGE_TDCMDSTS_EOR;
|
||||
if (i == (txmap->dm_nsegs - 1))
|
||||
if (i == txmap->dm_nsegs - 1)
|
||||
cmdsts |= RGE_TDCMDSTS_EOF;
|
||||
|
||||
d = &q->q_tx.rge_tx_list[cur];
|
||||
d->rge_cmdsts = htole32(cmdsts);
|
||||
|
||||
bus_dmamap_sync(sc->sc_dmat, q->q_tx.rge_tx_list_map,
|
||||
cur * sizeof(struct rge_tx_desc), sizeof(struct rge_tx_desc),
|
||||
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
|
||||
|
||||
last = cur;
|
||||
cmdsts = RGE_TDCMDSTS_OWN;
|
||||
cur = RGE_NEXT_TX_DESC(cur);
|
||||
d->rge_extsts = htole32(cflags);
|
||||
d->rge_addr = htole64(txmap->dm_segs[i].ds_addr);
|
||||
}
|
||||
|
||||
/* Transfer ownership of packet to the chip. */
|
||||
d = &q->q_tx.rge_tx_list[idx];
|
||||
|
||||
d->rge_cmdsts |= htole32(RGE_TDCMDSTS_OWN);
|
||||
|
||||
bus_dmamap_sync(sc->sc_dmat, q->q_tx.rge_tx_list_map,
|
||||
idx * sizeof(struct rge_tx_desc), sizeof(struct rge_tx_desc),
|
||||
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
|
||||
|
||||
/* Update info of TX queue and descriptors. */
|
||||
txq->txq_mbuf = m;
|
||||
txq->txq_descidx = last;
|
||||
txq->txq_descidx = cur;
|
||||
|
||||
return (nsegs);
|
||||
cmdsts = RGE_TDCMDSTS_SOF;
|
||||
cmdsts |= txmap->dm_segs[0].ds_len;
|
||||
|
||||
if (idx == RGE_TX_LIST_CNT - 1)
|
||||
cmdsts |= RGE_TDCMDSTS_EOR;
|
||||
if (txmap->dm_nsegs == 1)
|
||||
cmdsts |= RGE_TDCMDSTS_EOF;
|
||||
|
||||
d = &q->q_tx.rge_tx_list[idx];
|
||||
d->rge_cmdsts = htole32(cmdsts);
|
||||
d->rge_extsts = htole32(cflags);
|
||||
d->rge_addr = htole64(txmap->dm_segs[0].ds_addr);
|
||||
|
||||
if (cur >= idx) {
|
||||
rge_tx_list_sync(sc, q, idx, txmap->dm_nsegs,
|
||||
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
|
||||
} else {
|
||||
rge_tx_list_sync(sc, q, idx, RGE_TX_LIST_CNT - idx,
|
||||
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
|
||||
rge_tx_list_sync(sc, q, 0, cur + 1,
|
||||
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
|
||||
}
|
||||
|
||||
/* Transfer ownership of packet to the chip. */
|
||||
cmdsts |= RGE_TDCMDSTS_OWN;
|
||||
rge_tx_list_sync(sc, q, idx, 1, BUS_DMASYNC_POSTWRITE);
|
||||
d->rge_cmdsts = htole32(cmdsts);
|
||||
rge_tx_list_sync(sc, q, idx, 1, BUS_DMASYNC_PREWRITE);
|
||||
|
||||
return (txmap->dm_nsegs);
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -590,20 +615,15 @@ rge_start(struct ifqueue *ifq)
|
|||
if (m == NULL)
|
||||
break;
|
||||
|
||||
used = rge_encap(q, m, idx);
|
||||
used = rge_encap(ifp, q, m, idx);
|
||||
if (used == 0) {
|
||||
m_freem(m);
|
||||
continue;
|
||||
}
|
||||
|
||||
KASSERT(used <= free);
|
||||
KASSERT(used < free);
|
||||
free -= used;
|
||||
|
||||
#if NBPFILTER > 0
|
||||
if (ifp->if_bpf)
|
||||
bpf_mtap_ether(ifp->if_bpf, m, BPF_DIRECTION_OUT);
|
||||
#endif
|
||||
|
||||
idx += used;
|
||||
if (idx >= RGE_TX_LIST_CNT)
|
||||
idx -= RGE_TX_LIST_CNT;
|
||||
|
@ -1357,24 +1377,21 @@ rge_txeof(struct rge_queues *q)
|
|||
struct ifnet *ifp = &sc->sc_arpcom.ac_if;
|
||||
struct rge_txq *txq;
|
||||
uint32_t txstat;
|
||||
int cons, idx, prod;
|
||||
int cons, prod, cur, idx;
|
||||
int free = 0;
|
||||
|
||||
prod = q->q_tx.rge_txq_prodidx;
|
||||
cons = q->q_tx.rge_txq_considx;
|
||||
|
||||
while (prod != cons) {
|
||||
txq = &q->q_tx.rge_txq[cons];
|
||||
idx = txq->txq_descidx;
|
||||
idx = cons;
|
||||
while (idx != prod) {
|
||||
txq = &q->q_tx.rge_txq[idx];
|
||||
cur = txq->txq_descidx;
|
||||
|
||||
bus_dmamap_sync(sc->sc_dmat, q->q_tx.rge_tx_list_map,
|
||||
idx * sizeof(struct rge_tx_desc),
|
||||
sizeof(struct rge_tx_desc),
|
||||
BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
|
||||
|
||||
txstat = letoh32(q->q_tx.rge_tx_list[idx].rge_cmdsts);
|
||||
|
||||
if (txstat & RGE_TDCMDSTS_OWN) {
|
||||
rge_tx_list_sync(sc, q, cur, 1, BUS_DMASYNC_POSTREAD);
|
||||
txstat = q->q_tx.rge_tx_list[cur].rge_cmdsts;
|
||||
rge_tx_list_sync(sc, q, cur, 1, BUS_DMASYNC_PREREAD);
|
||||
if (ISSET(txstat, htole32(RGE_TDCMDSTS_OWN))) {
|
||||
free = 2;
|
||||
break;
|
||||
}
|
||||
|
@ -1385,24 +1402,30 @@ rge_txeof(struct rge_queues *q)
|
|||
m_freem(txq->txq_mbuf);
|
||||
txq->txq_mbuf = NULL;
|
||||
|
||||
if (txstat & (RGE_TDCMDSTS_EXCESSCOLL | RGE_TDCMDSTS_COLL))
|
||||
if (ISSET(txstat,
|
||||
htole32(RGE_TDCMDSTS_EXCESSCOLL | RGE_TDCMDSTS_COLL)))
|
||||
ifp->if_collisions++;
|
||||
if (txstat & RGE_TDCMDSTS_TXERR)
|
||||
if (ISSET(txstat, htole32(RGE_TDCMDSTS_TXERR)))
|
||||
ifp->if_oerrors++;
|
||||
|
||||
bus_dmamap_sync(sc->sc_dmat, q->q_tx.rge_tx_list_map,
|
||||
idx * sizeof(struct rge_tx_desc),
|
||||
sizeof(struct rge_tx_desc),
|
||||
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
|
||||
|
||||
cons = RGE_NEXT_TX_DESC(idx);
|
||||
idx = RGE_NEXT_TX_DESC(cur);
|
||||
free = 1;
|
||||
}
|
||||
|
||||
if (free == 0)
|
||||
return (0);
|
||||
|
||||
q->q_tx.rge_txq_considx = cons;
|
||||
if (idx >= cons) {
|
||||
rge_tx_list_sync(sc, q, cons, idx - cons,
|
||||
BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
|
||||
} else {
|
||||
rge_tx_list_sync(sc, q, cons, RGE_TX_LIST_CNT - cons,
|
||||
BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
|
||||
rge_tx_list_sync(sc, q, 0, idx,
|
||||
BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
|
||||
}
|
||||
|
||||
q->q_tx.rge_txq_considx = idx;
|
||||
|
||||
if (ifq_is_oactive(&ifp->if_snd))
|
||||
ifq_restart(&ifp->if_snd);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: if_rgereg.h,v 1.11 2024/06/30 08:13:02 kevlo Exp $ */
|
||||
/* $OpenBSD: if_rgereg.h,v 1.12 2024/08/20 00:09:12 dlg Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019, 2020 Kevin Lo <kevlo@openbsd.org>
|
||||
|
@ -206,10 +206,9 @@
|
|||
struct rge_tx_desc {
|
||||
uint32_t rge_cmdsts;
|
||||
uint32_t rge_extsts;
|
||||
uint32_t rge_addrlo;
|
||||
uint32_t rge_addrhi;
|
||||
uint64_t rge_addr;
|
||||
uint32_t reserved[4];
|
||||
};
|
||||
} __packed __aligned(16);
|
||||
|
||||
#define RGE_TDCMDSTS_COLL 0x000f0000
|
||||
#define RGE_TDCMDSTS_EXCESSCOLL 0x00100000
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
$OpenBSD: pcidevs,v 1.2084 2024/08/15 11:25:37 patrick Exp $
|
||||
$OpenBSD: pcidevs,v 1.2085 2024/08/20 12:17:48 jsg Exp $
|
||||
/* $NetBSD: pcidevs,v 1.30 1997/06/24 06:20:24 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -8956,6 +8956,8 @@ product SAMSUNG2 SM981_NVME 0xa808 SM981/PM981 NVMe
|
|||
product SAMSUNG2 PM991_NVME 0xa809 PM991 NVMe
|
||||
product SAMSUNG2 PM9A1_NVME 0xa80a PM9A1 NVMe
|
||||
product SAMSUNG2 PM9B1_NVME 0xa80b PM9B1 NVMe
|
||||
product SAMSUNG2 PM9C1_NVME 0xa80c PM9C1 NVMe
|
||||
product SAMSUNG2 PM9C1A_NVME 0xa80d PM9C1a NVMe
|
||||
product SAMSUNG2 NVME_171X 0xa820 NVMe
|
||||
product SAMSUNG2 NVME_172X 0xa821 NVMe
|
||||
product SAMSUNG2 NVME_172X_A_B 0xa822 NVMe
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* THIS FILE AUTOMATICALLY GENERATED. DO NOT EDIT.
|
||||
*
|
||||
* generated from:
|
||||
* OpenBSD: pcidevs,v 1.2084 2024/08/15 11:25:37 patrick Exp
|
||||
* OpenBSD: pcidevs,v 1.2085 2024/08/20 12:17:48 jsg Exp
|
||||
*/
|
||||
/* $NetBSD: pcidevs,v 1.30 1997/06/24 06:20:24 thorpej Exp $ */
|
||||
|
||||
|
@ -8961,6 +8961,8 @@
|
|||
#define PCI_PRODUCT_SAMSUNG2_PM991_NVME 0xa809 /* PM991 NVMe */
|
||||
#define PCI_PRODUCT_SAMSUNG2_PM9A1_NVME 0xa80a /* PM9A1 NVMe */
|
||||
#define PCI_PRODUCT_SAMSUNG2_PM9B1_NVME 0xa80b /* PM9B1 NVMe */
|
||||
#define PCI_PRODUCT_SAMSUNG2_PM9C1_NVME 0xa80c /* PM9C1 NVMe */
|
||||
#define PCI_PRODUCT_SAMSUNG2_PM9C1A_NVME 0xa80d /* PM9C1a NVMe */
|
||||
#define PCI_PRODUCT_SAMSUNG2_NVME_171X 0xa820 /* NVMe */
|
||||
#define PCI_PRODUCT_SAMSUNG2_NVME_172X 0xa821 /* NVMe */
|
||||
#define PCI_PRODUCT_SAMSUNG2_NVME_172X_A_B 0xa822 /* NVMe */
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* THIS FILE AUTOMATICALLY GENERATED. DO NOT EDIT.
|
||||
*
|
||||
* generated from:
|
||||
* OpenBSD: pcidevs,v 1.2084 2024/08/15 11:25:37 patrick Exp
|
||||
* OpenBSD: pcidevs,v 1.2085 2024/08/20 12:17:48 jsg Exp
|
||||
*/
|
||||
|
||||
/* $NetBSD: pcidevs,v 1.30 1997/06/24 06:20:24 thorpej Exp $ */
|
||||
|
@ -32307,6 +32307,14 @@ static const struct pci_known_product pci_known_products[] = {
|
|||
PCI_VENDOR_SAMSUNG2, PCI_PRODUCT_SAMSUNG2_PM9B1_NVME,
|
||||
"PM9B1 NVMe",
|
||||
},
|
||||
{
|
||||
PCI_VENDOR_SAMSUNG2, PCI_PRODUCT_SAMSUNG2_PM9C1_NVME,
|
||||
"PM9C1 NVMe",
|
||||
},
|
||||
{
|
||||
PCI_VENDOR_SAMSUNG2, PCI_PRODUCT_SAMSUNG2_PM9C1A_NVME,
|
||||
"PM9C1a NVMe",
|
||||
},
|
||||
{
|
||||
PCI_VENDOR_SAMSUNG2, PCI_PRODUCT_SAMSUNG2_NVME_171X,
|
||||
"NVMe",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue