Module Name:    src
Committed By:   snj
Date:           Sun Mar 28 15:03:23 UTC 2010

Modified Files:
        src/share/man/man4 [netbsd-5]: mfi.4
        src/sys/dev/ic [netbsd-5]: mfi.c mfireg.h mfivar.h
        src/sys/dev/pci [netbsd-5]: mfi_pci.c pcidevs

Log Message:
Apply patch (requested by msaitoh in ticket #1326):
Add support for MFI gen2 devices.  Mention newer devices, RAID 6 and
RAID60 in mfi.4.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.7.8.1 src/share/man/man4/mfi.4
cvs rdiff -u -r1.19.4.3 -r1.19.4.4 src/sys/dev/ic/mfi.c
cvs rdiff -u -r1.3 -r1.3.14.1 src/sys/dev/ic/mfireg.h
cvs rdiff -u -r1.10 -r1.10.6.1 src/sys/dev/ic/mfivar.h
cvs rdiff -u -r1.5 -r1.5.14.1 src/sys/dev/pci/mfi_pci.c
cvs rdiff -u -r1.962.4.10 -r1.962.4.11 src/sys/dev/pci/pcidevs

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/share/man/man4/mfi.4
diff -u src/share/man/man4/mfi.4:1.7 src/share/man/man4/mfi.4:1.7.8.1
--- src/share/man/man4/mfi.4:1.7	Fri Feb 29 20:56:33 2008
+++ src/share/man/man4/mfi.4	Sun Mar 28 15:03:23 2010
@@ -1,4 +1,4 @@
-.\"	$NetBSD: mfi.4,v 1.7 2008/02/29 20:56:33 xtraeme Exp $
+.\"	$NetBSD: mfi.4,v 1.7.8.1 2010/03/28 15:03:23 snj Exp $
 .\"	$OpenBSD: mfi.4,v 1.7 2006/09/01 09:58:09 jmc Exp $
 .\"
 .\" Written by Marco Peereboom <ma...@peereboom.us>
@@ -24,7 +24,7 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd February 29, 2008
+.Dd February 9, 2010
 .Dt MFI 4
 .Os
 .Sh NAME
@@ -55,12 +55,14 @@
 MegaRAID SAS 8344ELP,
 MegaRAID SAS 8408E,
 MegaRAID SAS 8480E,
+MegaRAID SAS 8708ELP,
 MegaRAID SAS 8888ELP,
-MegaRAID SAS 8880EM2
+MegaRAID SAS 8880EM2,
+MegaRAID SAS 9260-8i
 .El
 .Pp
-These controllers support RAID 0, RAID 1, RAID 5, RAID 10, and RAID 50
-using either SAS or SATA II drives.
+These controllers support RAID 0, RAID 1, RAID 5, RAID 6, RAID 10, RAID 50 and
+RAID 60 using either SAS or SATA II drives.
 .Pp
 Although the controllers are actual RAID controllers,
 the driver makes them look just like SCSI controllers.

Index: src/sys/dev/ic/mfi.c
diff -u src/sys/dev/ic/mfi.c:1.19.4.3 src/sys/dev/ic/mfi.c:1.19.4.4
--- src/sys/dev/ic/mfi.c:1.19.4.3	Wed Jan 27 21:40:25 2010
+++ src/sys/dev/ic/mfi.c	Sun Mar 28 15:03:22 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: mfi.c,v 1.19.4.3 2010/01/27 21:40:25 sborrill Exp $ */
+/* $NetBSD: mfi.c,v 1.19.4.4 2010/03/28 15:03:22 snj Exp $ */
 /* $OpenBSD: mfi.c,v 1.66 2006/11/28 23:59:45 dlg Exp $ */
 /*
  * Copyright (c) 2006 Marco Peereboom <ma...@peereboom.us>
@@ -17,7 +17,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mfi.c,v 1.19.4.3 2010/01/27 21:40:25 sborrill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mfi.c,v 1.19.4.4 2010/03/28 15:03:22 snj Exp $");
 
 #include "bio.h"
 
@@ -92,7 +92,7 @@
 static void		mfi_mgmt_done(struct mfi_ccb *);
 
 #if NBIO > 0
-static int		mfi_ioctl(struct device *, u_long, void *);
+static int		mfi_ioctl(device_t, u_long, void *);
 static int		mfi_ioctl_inq(struct mfi_softc *, struct bioc_inq *);
 static int		mfi_ioctl_vol(struct mfi_softc *, struct bioc_vol *);
 static int		mfi_ioctl_disk(struct mfi_softc *, struct bioc_disk *);
@@ -112,26 +112,38 @@
 static void 		mfi_xscale_intr_ena(struct mfi_softc *sc);
 static int 		mfi_xscale_intr(struct mfi_softc *sc);
 static void 		mfi_xscale_post(struct mfi_softc *sc, struct mfi_ccb *ccb);
-			  	 
+
 static const struct mfi_iop_ops mfi_iop_xscale = {
 	mfi_xscale_fw_state,
 	mfi_xscale_intr_ena,
 	mfi_xscale_intr,
 	mfi_xscale_post
 };
- 	 
+
 static uint32_t 	mfi_ppc_fw_state(struct mfi_softc *sc);
 static void 		mfi_ppc_intr_ena(struct mfi_softc *sc);
 static int 		mfi_ppc_intr(struct mfi_softc *sc);
 static void 		mfi_ppc_post(struct mfi_softc *sc, struct mfi_ccb *ccb);
-		  	 
+
 static const struct mfi_iop_ops mfi_iop_ppc = {
 	mfi_ppc_fw_state,
 	mfi_ppc_intr_ena,
 	mfi_ppc_intr,
 	mfi_ppc_post
 };
- 	 
+
+uint32_t	mfi_gen2_fw_state(struct mfi_softc *sc);
+void		mfi_gen2_intr_ena(struct mfi_softc *sc);
+int		mfi_gen2_intr(struct mfi_softc *sc);
+void		mfi_gen2_post(struct mfi_softc *sc, struct mfi_ccb *ccb);
+
+static const struct mfi_iop_ops mfi_iop_gen2 = {
+	mfi_gen2_fw_state,
+	mfi_gen2_intr_ena,
+	mfi_gen2_intr,
+	mfi_gen2_post
+};
+
 #define mfi_fw_state(_s) 	((_s)->sc_iop->mio_fw_state(_s))
 #define mfi_intr_enable(_s) 	((_s)->sc_iop->mio_intr_ena(_s))
 #define mfi_my_intr(_s) 	((_s)->sc_iop->mio_intr(_s))
@@ -284,7 +296,7 @@
 
 	if (bus_dmamap_create(sc->sc_dmat, size, 1, size, 0,
 	    BUS_DMA_NOWAIT | BUS_DMA_ALLOCNOW, &mm->am_map) != 0)
-		goto amfree; 
+		goto amfree;
 
 	if (bus_dmamem_alloc(sc->sc_dmat, size, PAGE_SIZE, 0, &mm->am_seg, 1,
 	    &nsegs, BUS_DMA_NOWAIT) != 0)
@@ -617,6 +629,9 @@
 	case MFI_IOP_PPC:
 		sc->sc_iop = &mfi_iop_ppc;
 		break;
+	case MFI_IOP_GEN2:
+		sc->sc_iop = &mfi_iop_gen2;
+		break;
 	default:
 		 panic("%s: unknown iop %d", DEVNAME(sc), iop);
 	}
@@ -701,7 +716,7 @@
 		sc->sc_ld[i].ld_present = 1;
 
 	memset(adapt, 0, sizeof(*adapt));
-	adapt->adapt_dev = &sc->sc_dev;
+	adapt->adapt_dev = sc->sc_dev;
 	adapt->adapt_nchannels = 1;
 	if (sc->sc_ld_cnt)
 		adapt->adapt_openings = sc->sc_max_cmds / sc->sc_ld_cnt;
@@ -720,13 +735,13 @@
 	chan->chan_ntargets = MFI_MAX_LD;
 	chan->chan_id = MFI_MAX_LD;
 
-	(void)config_found(&sc->sc_dev, &sc->sc_chan, scsiprint);
+	(void)config_found(sc->sc_dev, &sc->sc_chan, scsiprint);
 
 	/* enable interrupts */
 	mfi_intr_enable(sc);
 
 #if NBIO > 0
-	if (bio_register(&sc->sc_dev, mfi_ioctl) != 0)
+	if (bio_register(sc->sc_dev, mfi_ioctl) != 0)
 		panic("%s: controller registration failed", DEVNAME(sc));
 	if (mfi_create_sensors(sc) != 0)
 		aprint_error("%s: unable to create sensors\n", DEVNAME(sc));
@@ -790,7 +805,7 @@
 		ccb->ccb_flags |= MFI_CCB_F_ERR;
 		return 1;
 	}
-	
+
 	return 0;
 }
 
@@ -1003,7 +1018,7 @@
 	struct scsipi_periph	*periph;
 	struct scsipi_xfer	*xs;
 	struct scsipi_adapter	*adapt = chan->chan_adapter;
-	struct mfi_softc	*sc = (void *) adapt->adapt_dev;
+	struct mfi_softc	*sc = device_private(adapt->adapt_dev);
 	struct mfi_ccb		*ccb;
 	struct scsi_rw_6	*rw;
 	struct scsipi_rw_10	*rwb;
@@ -1087,7 +1102,7 @@
 	case SCSI_TEST_UNIT_READY:
 		/* save off sd? after autoconf */
 		if (!cold)	/* XXX bogus */
-			strlcpy(sc->sc_ld[target].ld_dev, device_xname(&sc->sc_dev),
+			strlcpy(sc->sc_ld[target].ld_dev, device_xname(sc->sc_dev),
 			    sizeof(sc->sc_ld[target].ld_dev));
 		/* FALLTHROUGH */
 
@@ -1207,7 +1222,8 @@
 
 static int
 mfi_mgmt_internal(struct mfi_softc *sc, uint32_t opc, uint32_t dir,
-    uint32_t len, void *buf, uint8_t *mbox) {
+    uint32_t len, void *buf, uint8_t *mbox)
+{
 	struct mfi_ccb		*ccb;
 	int			rv = 1;
 
@@ -1310,15 +1326,15 @@
 		}
 		mfi_put_ccb(ccb);
 		scsipi_done(xs);
-	} else 
+	} else
 		wakeup(ccb);
 }
 
 #if NBIO > 0
 int
-mfi_ioctl(struct device *dev, u_long cmd, void *addr)
+mfi_ioctl(device_t dev, u_long cmd, void *addr)
 {
-	struct mfi_softc	*sc = (struct mfi_softc *)dev;
+	struct mfi_softc *sc = device_private(dev);
 	int error = 0;
 	int s;
 
@@ -1687,7 +1703,7 @@
 
 	memset(mbox, 0, sizeof mbox);
 
-	*((uint16_t *)&mbox) = pd->mpl_address[i].mpa_pd_id;;
+	*((uint16_t *)&mbox) = pd->mpl_address[i].mpa_pd_id;
 
 	switch (bb->bb_status) {
 	case BIOC_SBUNBLINK:
@@ -1744,7 +1760,7 @@
 
 	memset(mbox, 0, sizeof mbox);
 
-	*((uint16_t *)&mbox) = pd->mpl_address[i].mpa_pd_id;;
+	*((uint16_t *)&mbox) = pd->mpl_address[i].mpa_pd_id;
 
 	switch (bs->bs_status) {
 	case BIOC_SSONLINE:
@@ -1980,13 +1996,13 @@
 {
 	return mfi_read(sc, MFI_OMSG0);
 }
- 	 
+
 static void
 mfi_xscale_intr_ena(struct mfi_softc *sc)
 {
 	mfi_write(sc, MFI_OMSK, MFI_ENABLE_INTR);
 }
- 	 
+
 static int
 mfi_xscale_intr(struct mfi_softc *sc)
 {
@@ -2000,7 +2016,7 @@
 	mfi_write(sc, MFI_OSTS, status);
 	return 1;
 }
- 	 
+
 static void
 mfi_xscale_post(struct mfi_softc *sc, struct mfi_ccb *ccb)
 {
@@ -2014,37 +2030,72 @@
 	mfi_write(sc, MFI_IQP, (ccb->ccb_pframe >> 3) |
 	    ccb->ccb_extra_frames);
 }
- 	 
+
 static uint32_t
 mfi_ppc_fw_state(struct mfi_softc *sc)
 {
 	return mfi_read(sc, MFI_OSP);
 }
- 	 
+
 static void
 mfi_ppc_intr_ena(struct mfi_softc *sc)
 {
 	mfi_write(sc, MFI_ODC, 0xffffffff);
 	mfi_write(sc, MFI_OMSK, ~0x80000004);
 }
- 	 
+
 static int
 mfi_ppc_intr(struct mfi_softc *sc)
 {
 	uint32_t status;
- 	 
+
 	status = mfi_read(sc, MFI_OSTS);
 	if (!ISSET(status, MFI_OSTS_PPC_INTR_VALID))
 		return 0;
-							  	 
+
 	/* write status back to acknowledge interrupt */
 	mfi_write(sc, MFI_ODC, status);
 	return 1;
 }
- 	 
+
 static void
 mfi_ppc_post(struct mfi_softc *sc, struct mfi_ccb *ccb)
 {
 	mfi_write(sc, MFI_IQP, 0x1 | ccb->ccb_pframe |
 	    (ccb->ccb_extra_frames << 1));
 }
+
+u_int32_t
+mfi_gen2_fw_state(struct mfi_softc *sc)
+{
+	return (mfi_read(sc, MFI_OSP));
+}
+
+void
+mfi_gen2_intr_ena(struct mfi_softc *sc)
+{
+	mfi_write(sc, MFI_ODC, 0xffffffff);
+	mfi_write(sc, MFI_OMSK, ~MFI_OSTS_GEN2_INTR_VALID);
+}
+
+int
+mfi_gen2_intr(struct mfi_softc *sc)
+{
+	u_int32_t status;
+
+	status = mfi_read(sc, MFI_OSTS);
+	if (!ISSET(status, MFI_OSTS_GEN2_INTR_VALID))
+		return (0);
+
+	/* write status back to acknowledge interrupt */
+	mfi_write(sc, MFI_ODC, status);
+
+	return (1);
+}
+
+void
+mfi_gen2_post(struct mfi_softc *sc, struct mfi_ccb *ccb)
+{
+	mfi_write(sc, MFI_IQP, 0x1 | ccb->ccb_pframe |
+	    (ccb->ccb_extra_frames << 1));
+}

Index: src/sys/dev/ic/mfireg.h
diff -u src/sys/dev/ic/mfireg.h:1.3 src/sys/dev/ic/mfireg.h:1.3.14.1
--- src/sys/dev/ic/mfireg.h:1.3	Mon Feb 25 10:46:02 2008
+++ src/sys/dev/ic/mfireg.h	Sun Mar 28 15:03:22 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: mfireg.h,v 1.3 2008/02/25 10:46:02 xtraeme Exp $ */
+/* $NetBSD: mfireg.h,v 1.3.14.1 2010/03/28 15:03:22 snj Exp $ */
 /* $OpenBSD: mfireg.h,v 1.24 2006/06/19 19:05:45 marco Exp $ */
 /*
  * Copyright (c) 2006 Marco Peereboom <ma...@peereboom.us>
@@ -25,6 +25,7 @@
 #define MFI_SENSE_SIZE				128
 #define MFI_OSTS_INTR_VALID			0x00000002 /* valid interrupt */
 #define MFI_OSTS_PPC_INTR_VALID			0x80000000
+#define MFI_OSTS_GEN2_INTR_VALID		(0x00000001 | 0x00000004)
 #define MFI_INVALID_CTX				0xffffffff
 #define MFI_ENABLE_INTR				0x01
 #define MFI_MAXFER				MAXPHYS	/* XXX bogus */

Index: src/sys/dev/ic/mfivar.h
diff -u src/sys/dev/ic/mfivar.h:1.10 src/sys/dev/ic/mfivar.h:1.10.6.1
--- src/sys/dev/ic/mfivar.h:1.10	Tue Jun 24 10:09:24 2008
+++ src/sys/dev/ic/mfivar.h	Sun Mar 28 15:03:22 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: mfivar.h,v 1.10 2008/06/24 10:09:24 gmcgarry Exp $ */
+/* $NetBSD: mfivar.h,v 1.10.6.1 2010/03/28 15:03:22 snj Exp $ */
 /* $OpenBSD: mfivar.h,v 1.28 2006/08/31 18:18:46 marco Exp $ */
 /*
  * Copyright (c) 2006 Marco Peereboom <ma...@peereboom.us>
@@ -19,7 +19,7 @@
 #include <dev/sysmon/sysmonvar.h>
 #include <sys/envsys.h>
 
-#define DEVNAME(_s)     (device_xname(&(_s)->sc_dev))
+#define DEVNAME(_s)     (device_xname((_s)->sc_dev))
 
 /* #define MFI_DEBUG */
 #ifdef MFI_DEBUG
@@ -98,7 +98,8 @@
 
 enum mfi_iop {
 	MFI_IOP_XSCALE,
-	MFI_IOP_PPC
+	MFI_IOP_PPC,
+	MFI_IOP_GEN2
 };
 
 struct mfi_iop_ops {
@@ -109,7 +110,7 @@
 };
 
 struct mfi_softc {
-	struct device		sc_dev;
+	device_t		sc_dev;
 	struct scsipi_channel	sc_chan;
 	struct scsipi_adapter	sc_adapt;
 

Index: src/sys/dev/pci/mfi_pci.c
diff -u src/sys/dev/pci/mfi_pci.c:1.5 src/sys/dev/pci/mfi_pci.c:1.5.14.1
--- src/sys/dev/pci/mfi_pci.c:1.5	Tue Feb 26 18:16:51 2008
+++ src/sys/dev/pci/mfi_pci.c	Sun Mar 28 15:03:22 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: mfi_pci.c,v 1.5 2008/02/26 18:16:51 xtraeme Exp $ */
+/* $NetBSD: mfi_pci.c,v 1.5.14.1 2010/03/28 15:03:22 snj Exp $ */
 /* $OpenBSD: mfi_pci.c,v 1.11 2006/08/06 04:40:08 brad Exp $ */
 /*
  * Copyright (c) 2006 Marco Peereboom <ma...@peereboom.us>
@@ -17,7 +17,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mfi_pci.c,v 1.5 2008/02/26 18:16:51 xtraeme Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mfi_pci.c,v 1.5.14.1 2010/03/28 15:03:22 snj Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -38,13 +38,14 @@
 #include <dev/ic/mfivar.h>
 
 #define	MFI_BAR		0x10
+#define	MFI_BAR_GEN2	0x14
 #define	MFI_PCI_MEMSIZE	0x2000 /* 8k */
 
 const struct mfi_pci_device *mfi_pci_find_device(struct pci_attach_args *);
-int	mfi_pci_match(struct device *, struct cfdata *, void *);
-void	mfi_pci_attach(struct device *, struct device *, void *);
+int	mfi_pci_match(device_t, cfdata_t, void *);
+void	mfi_pci_attach(device_t, device_t, void *);
 
-CFATTACH_DECL(mfi_pci, sizeof(struct mfi_softc),
+CFATTACH_DECL_NEW(mfi_pci, sizeof(struct mfi_softc),
     mfi_pci_match, mfi_pci_attach, NULL, NULL);
 
 struct mfi_pci_subtype {
@@ -75,6 +76,11 @@
 	{ 0, 			0, 		NULL }
 };
 
+static const struct mfi_pci_subtype mfi_gen2_subtypes[] = {
+	{ PCI_VENDOR_SYMBIOS,	0x9261,		"SAS 9260-8i" },
+	{ 0x0,			0,		"" }
+};
+
 static const
 struct mfi_pci_device {
 	pcireg_t			mpd_vendor;
@@ -88,10 +94,16 @@
 	  MFI_IOP_XSCALE,	NULL },
 	{ PCI_VENDOR_SYMBIOS,	PCI_PRODUCT_SYMBIOS_SAS1078,
 	  MFI_IOP_PPC,		mfi_1078_subtypes },
+	{ PCI_VENDOR_SYMBIOS,	PCI_PRODUCT_SYMBIOS_SAS1078DE,
+	  MFI_IOP_PPC,		mfi_1078_subtypes },
 	{ PCI_VENDOR_DELL,	PCI_PRODUCT_DELL_PERC_5,
 	  MFI_IOP_XSCALE,	mfi_perc5_subtypes },
 	{ PCI_VENDOR_DELL,	PCI_PRODUCT_DELL_PERC_6,
 	  MFI_IOP_PPC, 		mfi_1078_subtypes },
+	{ PCI_VENDOR_SYMBIOS,	PCI_PRODUCT_SYMBIOS_SAS2108_1,
+	  MFI_IOP_GEN2,		mfi_gen2_subtypes },
+	{ PCI_VENDOR_SYMBIOS,	PCI_PRODUCT_SYMBIOS_SAS2108_2,
+	  MFI_IOP_GEN2,		mfi_gen2_subtypes },
 };
 
 const struct mfi_pci_device *
@@ -112,15 +124,15 @@
 }
 
 int
-mfi_pci_match(struct device *parent, struct cfdata *match, void *aux)
+mfi_pci_match(device_t parent, cfdata_t match, void *aux)
 {
 	return (mfi_pci_find_device(aux) != NULL) ? 1 : 0;
 }
 
 void
-mfi_pci_attach(struct device *parent, struct device *self, void *aux)
+mfi_pci_attach(device_t parent, device_t self, void *aux)
 {
-	struct mfi_softc	*sc = (struct mfi_softc *)self;
+	struct mfi_softc	*sc = device_private(self);
 	struct pci_attach_args	*pa = aux;
 	const struct mfi_pci_device *mpd;
 	const struct mfi_pci_subtype *st;
@@ -128,12 +140,25 @@
 	pci_intr_handle_t	ih;
 	bus_size_t		size;
 	pcireg_t		csr;
+	int			regbar;
 	const char 		*subtype = NULL;
 	uint32_t		subsysid;
 
-	csr = pci_mapreg_type(pa->pa_pc, pa->pa_tag, MFI_BAR);
+	sc->sc_dev = self;
+	mpd = mfi_pci_find_device(pa);
+	if (mpd == NULL) {
+		printf(": can't find matching pci device\n");
+		return;
+	}
+
+	if (mpd->mpd_iop == MFI_IOP_GEN2)
+		regbar = MFI_BAR_GEN2;
+	else
+		regbar = MFI_BAR;
+
+	csr = pci_mapreg_type(pa->pa_pc, pa->pa_tag, regbar);
 	csr |= PCI_MAPREG_MEM_TYPE_32BIT;
-	if (pci_mapreg_map(pa, MFI_BAR, csr, 0,
+	if (pci_mapreg_map(pa, regbar, csr, 0,
 	    &sc->sc_iot, &sc->sc_ioh, NULL, &size)) {
 		aprint_error(": can't map controller pci space\n");
 		return;
@@ -157,8 +182,6 @@
 		return;
 	}
 
-	mpd = mfi_pci_find_device(pa);
-
 	subsysid = pci_conf_read(pa->pa_pc, pa->pa_tag, PCI_SUBSYS_ID_REG);
 	if (mpd->mpd_subtype != NULL) {
 		st = mpd->mpd_subtype;

Index: src/sys/dev/pci/pcidevs
diff -u src/sys/dev/pci/pcidevs:1.962.4.10 src/sys/dev/pci/pcidevs:1.962.4.11
--- src/sys/dev/pci/pcidevs:1.962.4.10	Wed Jan 27 22:27:42 2010
+++ src/sys/dev/pci/pcidevs	Sun Mar 28 15:03:22 2010
@@ -1,4 +1,4 @@
-$NetBSD: pcidevs,v 1.962.4.10 2010/01/27 22:27:42 sborrill Exp $
+$NetBSD: pcidevs,v 1.962.4.11 2010/03/28 15:03:22 snj Exp $
 
 /*
  * Copyright (c) 1995, 1996 Christopher G. Demetriou
@@ -2967,6 +2967,10 @@
 product SYMBIOS SAS1066			0x005E	SAS1066
 product SYMBIOS SAS1078			0x0060	SAS1078 PCI
 product SYMBIOS SAS1078_PCIE		0x0062	SAS1078 PCI Express
+product SYMBIOS SAS2008			0x0072	SAS2008
+product SYMBIOS SAS2108_1		0x0078	MegaRAID SAS2108 CRYPTO GEN2
+product SYMBIOS SAS2108_2		0x0079	MegaRAID SAS2108 GEN2
+product SYMBIOS SAS1078DE		0x007c	SAS1078DE
 product SYMBIOS 875J			0x008f	53c875J
 product SYMBIOS FC909			0x0620	FC909
 product SYMBIOS FC909A			0x0621	FC909A

Reply via email to