Module Name:    src
Committed By:   kiyohara
Date:           Tue Jul 13 12:53:43 UTC 2010

Modified Files:
        src/sys/dev/ic: mvsata.c mvsatavar.h
        src/sys/dev/pci: mvsata_pci.c

Log Message:
Move to pci/mvsata_pci.c (marvell/mvsata_mv.c) splitting mvsata_products[].
mvsata(4) uses these to match.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/dev/ic/mvsata.c
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/ic/mvsatavar.h
cvs rdiff -u -r1.3 -r1.4 src/sys/dev/pci/mvsata_pci.c

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

Modified files:

Index: src/sys/dev/ic/mvsata.c
diff -u src/sys/dev/ic/mvsata.c:1.4 src/sys/dev/ic/mvsata.c:1.5
--- src/sys/dev/ic/mvsata.c:1.4	Sun Mar 28 20:46:18 2010
+++ src/sys/dev/ic/mvsata.c	Tue Jul 13 12:53:42 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: mvsata.c,v 1.4 2010/03/28 20:46:18 snj Exp $	*/
+/*	$NetBSD: mvsata.c,v 1.5 2010/07/13 12:53:42 kiyohara Exp $	*/
 /*
  * Copyright (c) 2008 KIYOHARA Takashi
  * All rights reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mvsata.c,v 1.4 2010/03/28 20:46:18 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mvsata.c,v 1.5 2010/07/13 12:53:42 kiyohara Exp $");
 
 #include "opt_mvsata.h"
 
@@ -226,39 +226,9 @@
 #endif /* NATAPIBUS */
 #endif
 
-struct mvsata_product {
-	int model;
-	int hc;
-	int port;
-	int generation;
-	int flags;
-} mvsata_products[] = {
-	{ PCI_PRODUCT_MARVELL_88SX5040,		1, 4, gen1, 0 },
-	{ PCI_PRODUCT_MARVELL_88SX5041,		1, 4, gen1, 0 },
-	{ PCI_PRODUCT_MARVELL_88SX5080,		2, 4, gen1, 0 },
-	{ PCI_PRODUCT_MARVELL_88SX5081,		2, 4, gen1, 0 },
-	{ PCI_PRODUCT_MARVELL_88SX6040,		1, 4, gen2, 0 },
-	{ PCI_PRODUCT_MARVELL_88SX6041,		1, 4, gen2, 0 },
-	{ PCI_PRODUCT_MARVELL_88SX6042,		1, 4, gen2e, 0 },
-	{ PCI_PRODUCT_MARVELL_88SX6080,		2, 4, gen2, MVSATA_FLAGS_PCIE },
-	{ PCI_PRODUCT_MARVELL_88SX6081,		2, 4, gen2, MVSATA_FLAGS_PCIE },
-	{ PCI_PRODUCT_ADP2_1420SA,		2, 4, gen2, MVSATA_FLAGS_PCIE },
-	{ PCI_PRODUCT_MARVELL_88SX7042,		1, 4, gen2e, 0 },
-	{ PCI_PRODUCT_ADP2_1430SA,		1, 4, gen2e, 0 },
-	{ PCI_PRODUCT_TRIONES_ROCKETRAID_2310,	1, 4, gen2e, 0 },
-	{ PCI_PRODUCT_MARVELL_88F5082,		1, 1, gen2e, 0 }, /* Orion */
-	{ PCI_PRODUCT_MARVELL_88F5182,		1, 2, gen2e, 0 }, /* Orion */
-	{ PCI_PRODUCT_MARVELL_88F6082,		1, 1, gen2e, 0 }, /* Orion */
-#if 0	/* Marvell MV64660 Disco5: Product is 0x6490 ?? */
-	{ PCI_PRODUCT_MARVELL_88F6490,		1, 1, gen2e, 0 }, /* Discover?*/
-#endif
-
-	{ -1,					0, 0, gen_unknown, 0 }
-};
-
 
 int
-mvsata_attach(struct mvsata_softc *sc,
+mvsata_attach(struct mvsata_softc *sc, struct mvsata_product *product,
 	      int (*mvsata_sreset)(struct mvsata_softc *),
 	      int (*mvsata_misc_reset)(struct mvsata_softc *),
 	      int read_pre_amps)
@@ -271,18 +241,8 @@
 	void (*edma_setup_crqb)
 	    (struct mvsata_port *, int, int, struct ata_bio *) = NULL;
 #endif
-	struct mvsata_product *product;
-	int hc, port, channel, i;
+	int hc, port, channel;
 
-	for (i = 0; mvsata_products[i].model != -1; i++)
-		if (sc->sc_model == mvsata_products[i].model)
-			break;
-	if (mvsata_products[i].model == -1) {
-		aprint_error_dev(MVSATA_DEV(sc), "unknown product 0x%04x\n",
-		    sc->sc_model);
-		return EINVAL;
-	}
-	product = &mvsata_products[i];
 	aprint_normal_dev(MVSATA_DEV(sc), "Gen%s, %dhc, %dport/hc\n",
 	    (product->generation == gen1) ? "I" :
 	    ((product->generation == gen2) ? "II" : "IIe"),
@@ -317,10 +277,10 @@
 		break;
 	}
 
-	sc->sc_gen = mvsata_products[i].generation;
-	sc->sc_hc = mvsata_products[i].hc;
-	sc->sc_port = mvsata_products[i].port;
-	sc->sc_flags = mvsata_products[i].flags;
+	sc->sc_gen = product->generation;
+	sc->sc_hc = product->hc;
+	sc->sc_port = product->port;
+	sc->sc_flags = product->flags;
 
 #ifdef MVSATA_WITHOUTDMA
 	sc->sc_wdcdev.sc_atac.atac_cap |= ATAC_CAP_DATA16;

Index: src/sys/dev/ic/mvsatavar.h
diff -u src/sys/dev/ic/mvsatavar.h:1.1 src/sys/dev/ic/mvsatavar.h:1.2
--- src/sys/dev/ic/mvsatavar.h:1.1	Mon Jul 27 12:34:14 2009
+++ src/sys/dev/ic/mvsatavar.h	Tue Jul 13 12:53:42 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: mvsatavar.h,v 1.1 2009/07/27 12:34:14 kiyohara Exp $	*/
+/*	$NetBSD: mvsatavar.h,v 1.2 2010/07/13 12:53:42 kiyohara Exp $	*/
 /*
  * Copyright (c) 2008 KIYOHARA Takashi
  * All rights reserved.
@@ -28,6 +28,15 @@
 #ifndef _MVSATAVAR_H_
 #define _MVSATAVAR_H_
 
+struct mvsata_product {
+	int vendor;
+	int model;
+	int hc;
+	int port;
+	int generation;
+	int flags;
+};
+
 #define MVSATA_EDMAQ_LEN	32	/* keep compatibility to gen1 */
 #define MVSATA_EDMAQ_INC(i)	((i) = ((i) + 1) % MVSATA_EDMAQ_LEN)
 #define MVSATA_HC_MAX		2
@@ -128,7 +137,7 @@
 	void (*sc_enable_intr)(struct mvsata_port *, int);
 };
 
-int mvsata_attach(struct mvsata_softc *,
+int mvsata_attach(struct mvsata_softc *, struct mvsata_product *,
 		  int (*mvsata_sreset)(struct mvsata_softc *),
 		  int (*mvsata_misc_reset)(struct mvsata_softc *), int);
 int mvsata_intr(struct mvsata_hc *);

Index: src/sys/dev/pci/mvsata_pci.c
diff -u src/sys/dev/pci/mvsata_pci.c:1.3 src/sys/dev/pci/mvsata_pci.c:1.4
--- src/sys/dev/pci/mvsata_pci.c:1.3	Wed Feb 24 22:38:01 2010
+++ src/sys/dev/pci/mvsata_pci.c	Tue Jul 13 12:53:43 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: mvsata_pci.c,v 1.3 2010/02/24 22:38:01 dyoung Exp $	*/
+/*	$NetBSD: mvsata_pci.c,v 1.4 2010/07/13 12:53:43 kiyohara Exp $	*/
 /*
  * Copyright (c) 2008 KIYOHARA Takashi
  * All rights reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mvsata_pci.c,v 1.3 2010/02/24 22:38:01 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mvsata_pci.c,v 1.4 2010/07/13 12:53:43 kiyohara Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -108,6 +108,26 @@
 CFATTACH_DECL_NEW(mvsata_pci, sizeof(struct mvsata_pci_softc),
     mvsata_pci_match, mvsata_pci_attach, mvsata_pci_detach, NULL);
 
+struct mvsata_product mvsata_pci_products[] = {
+#define PCI_VP(v, p)	PCI_VENDOR_ ## v, PCI_PRODUCT_ ## v ## _ ## p
+	{ PCI_VP(MARVELL, 88SX5040),		1, 4, gen1, 0 },
+	{ PCI_VP(MARVELL, 88SX5041),		1, 4, gen1, 0 },
+	{ PCI_VP(MARVELL, 88SX5080),		2, 4, gen1, 0 },
+	{ PCI_VP(MARVELL, 88SX5081),		2, 4, gen1, 0 },
+	{ PCI_VP(MARVELL, 88SX6040),		1, 4, gen2, 0 },
+	{ PCI_VP(MARVELL, 88SX6041),		1, 4, gen2, 0 },
+	{ PCI_VP(MARVELL, 88SX6042),		1, 4, gen2e, 0 },
+	{ PCI_VP(MARVELL, 88SX6080),		2, 4, gen2, MVSATA_FLAGS_PCIE },
+	{ PCI_VP(MARVELL, 88SX6081),		2, 4, gen2, MVSATA_FLAGS_PCIE },
+	{ PCI_VP(ADP2, 1420SA),			2, 4, gen2, MVSATA_FLAGS_PCIE },
+	{ PCI_VP(MARVELL, 88SX7042),		1, 4, gen2e, 0 },
+	{ PCI_VP(ADP2, 1430SA),			1, 4, gen2e, 0 },
+	{ PCI_VP(TRIONES, ROCKETRAID_2310),	1, 4, gen2e, 0 },
+#undef PCI_VP
+
+	{ -1, -1,				0, 0, gen_unknown, 0 }
+};
+
 
 /*
  * mvsata_pci_match()
@@ -117,29 +137,11 @@
 mvsata_pci_match(device_t parent, struct cfdata *match, void *aux)
 {
 	struct pci_attach_args *pa = aux;
+	int i;
 
-	if (PCI_VENDOR(pa->pa_id) == PCI_VENDOR_MARVELL)
-		switch (PCI_PRODUCT(pa->pa_id)) {
-		case PCI_PRODUCT_MARVELL_88SX5040:
-		case PCI_PRODUCT_MARVELL_88SX5041:
-		case PCI_PRODUCT_MARVELL_88SX5080:
-		case PCI_PRODUCT_MARVELL_88SX5081:
-		case PCI_PRODUCT_MARVELL_88SX6040:
-		case PCI_PRODUCT_MARVELL_88SX6041:
-		case PCI_PRODUCT_MARVELL_88SX6042:
-		case PCI_PRODUCT_MARVELL_88SX6080:
-		case PCI_PRODUCT_MARVELL_88SX6081:
-		case PCI_PRODUCT_MARVELL_88SX7042:
-			return 2;
-		}
-	if (PCI_VENDOR(pa->pa_id) == PCI_VENDOR_ADP2)
-		switch (PCI_PRODUCT(pa->pa_id)) {
-		case PCI_PRODUCT_ADP2_1420SA:
-		case PCI_PRODUCT_ADP2_1430SA:
-			return 2;
-		}
-	if (PCI_VENDOR(pa->pa_id) == PCI_VENDOR_TRIONES &&
-	    PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_TRIONES_ROCKETRAID_2310)
+	for (i = 0; i < __arraycount(mvsata_pci_products); i++)
+		if (PCI_VENDOR(pa->pa_id) == mvsata_pci_products[i].vendor &&
+		    PCI_PRODUCT(pa->pa_id) == mvsata_pci_products[i].model)
 			return 2;
 	return 0;
 }
@@ -154,7 +156,7 @@
 	pcireg_t csr;
 	bus_size_t size;
 	uint32_t reg, mask;
-	int read_pre_amps, hc, port, rv;
+	int read_pre_amps, hc, port, rv, i;
 	char devinfo[256];
 	const char *intrstr;
 
@@ -214,8 +216,14 @@
 	reg = bus_space_read_4(psc->psc_iot, psc->psc_ioh, MVSATA_PCI_RESETCFG);
 	read_pre_amps = (reg & 0x00000001) ? 1 : 0;
 
-	rv = mvsata_attach(sc, mvsata_pci_sreset, mvsata_pci_misc_reset,
-	    read_pre_amps);
+	for (i = 0; i < __arraycount(mvsata_pci_products); i++)
+		if (PCI_VENDOR(pa->pa_id) == mvsata_pci_products[i].vendor &&
+		    PCI_PRODUCT(pa->pa_id) == mvsata_pci_products[i].model)
+			break;
+	KASSERT(i < __arraycount(mvsata_pci_products));
+
+	rv = mvsata_attach(sc, &mvsata_pci_products[i],
+	    mvsata_pci_sreset, mvsata_pci_misc_reset, read_pre_amps);
 	if (rv != 0) {
 		pci_intr_disestablish(psc->psc_pc, psc->psc_ih);
 		return;

Reply via email to