Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 16 Jun 2008 06:04:46 GMT
From:      John Birrell <jb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 143568 for review
Message-ID:  <200806160604.m5G64krI062213@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=143568

Change 143568 by jb@freebsd3 on 2008/06/16 06:03:49

	IF7

Affected files ...

.. //depot/projects/dtrace7/src/sbin/geom/class/part/geom_part.c#2 integrate
.. //depot/projects/dtrace7/src/sbin/geom/class/part/gpart.8#2 integrate
.. //depot/projects/dtrace7/src/sbin/geom/misc/subr.c#2 integrate
.. //depot/projects/dtrace7/src/sbin/geom/misc/subr.h#2 integrate
.. //depot/projects/dtrace7/src/share/man/man4/ciss.4#3 integrate
.. //depot/projects/dtrace7/src/share/sendmail/Makefile#2 integrate
.. //depot/projects/dtrace7/src/sys/dev/ciss/ciss.c#4 integrate
.. //depot/projects/dtrace7/src/sys/dev/gem/if_gem.c#3 integrate
.. //depot/projects/dtrace7/src/sys/dev/gem/if_gem_pci.c#3 integrate
.. //depot/projects/dtrace7/src/sys/dev/gem/if_gemreg.h#3 integrate
.. //depot/projects/dtrace7/src/sys/dev/gem/if_gemvar.h#3 integrate
.. //depot/projects/dtrace7/src/sys/dev/hme/if_hme.c#2 integrate
.. //depot/projects/dtrace7/src/sys/dev/hme/if_hme_pci.c#2 integrate
.. //depot/projects/dtrace7/src/sys/dev/hme/if_hme_sbus.c#2 integrate
.. //depot/projects/dtrace7/src/sys/dev/hme/if_hmereg.h#2 integrate
.. //depot/projects/dtrace7/src/sys/dev/hme/if_hmevar.h#2 integrate
.. //depot/projects/dtrace7/src/sys/dev/mfi/mfi.c#4 integrate
.. //depot/projects/dtrace7/src/sys/dev/mfi/mfi_ioctl.h#2 integrate
.. //depot/projects/dtrace7/src/sys/dev/mfi/mfi_pci.c#2 integrate
.. //depot/projects/dtrace7/src/sys/dev/usb/ums.c#4 integrate
.. //depot/projects/dtrace7/src/sys/dev/usb/usbdevs#8 integrate
.. //depot/projects/dtrace7/src/sys/geom/geom.h#2 integrate
.. //depot/projects/dtrace7/src/sys/geom/geom_subr.c#2 integrate
.. //depot/projects/dtrace7/src/sys/geom/part/g_part.c#4 integrate
.. //depot/projects/dtrace7/src/sys/geom/part/g_part.h#4 integrate
.. //depot/projects/dtrace7/src/sys/geom/part/g_part_apm.c#2 integrate
.. //depot/projects/dtrace7/src/sys/geom/part/g_part_bsd.c#2 integrate
.. //depot/projects/dtrace7/src/sys/geom/part/g_part_gpt.c#3 integrate
.. //depot/projects/dtrace7/src/sys/geom/part/g_part_if.m#2 integrate
.. //depot/projects/dtrace7/src/sys/geom/part/g_part_mbr.c#3 integrate
.. //depot/projects/dtrace7/src/sys/geom/part/g_part_pc98.c#1 branch
.. //depot/projects/dtrace7/src/sys/geom/part/g_part_vtoc8.c#2 integrate
.. //depot/projects/dtrace7/src/sys/modules/geom/Makefile#4 integrate
.. //depot/projects/dtrace7/src/sys/modules/geom/geom_part/Makefile#1 branch
.. //depot/projects/dtrace7/src/sys/modules/geom/geom_part/geom_part_apm/Makefile#1 branch
.. //depot/projects/dtrace7/src/sys/modules/geom/geom_part/geom_part_bsd/Makefile#1 branch
.. //depot/projects/dtrace7/src/sys/modules/geom/geom_part/geom_part_gpt/Makefile#1 branch
.. //depot/projects/dtrace7/src/sys/modules/geom/geom_part/geom_part_mbr/Makefile#1 branch
.. //depot/projects/dtrace7/src/sys/modules/geom/geom_part/geom_part_pc98/Makefile#1 branch
.. //depot/projects/dtrace7/src/sys/modules/geom/geom_part/geom_part_vtoc8/Makefile#1 branch
.. //depot/projects/dtrace7/src/sys/nlm/nlm_prot_impl.c#5 integrate
.. //depot/projects/dtrace7/src/usr.bin/shar/shar.sh#2 integrate
.. //depot/projects/dtrace7/src/usr.bin/tar/matching.c#2 integrate
.. //depot/projects/dtrace7/src/usr.sbin/pkg_install/add/main.c#4 integrate
.. //depot/projects/dtrace7/src/usr.sbin/pkg_install/add/pkg_add.1#4 integrate
.. //depot/projects/dtrace7/src/usr.sbin/pkg_install/create/create.h#2 integrate
.. //depot/projects/dtrace7/src/usr.sbin/pkg_install/create/main.c#3 integrate
.. //depot/projects/dtrace7/src/usr.sbin/pkg_install/create/perform.c#2 integrate
.. //depot/projects/dtrace7/src/usr.sbin/pkg_install/create/pkg_create.1#3 integrate
.. //depot/projects/dtrace7/src/usr.sbin/pkg_install/delete/main.c#3 integrate
.. //depot/projects/dtrace7/src/usr.sbin/pkg_install/delete/pkg_delete.1#3 integrate
.. //depot/projects/dtrace7/src/usr.sbin/pkg_install/info/main.c#4 integrate
.. //depot/projects/dtrace7/src/usr.sbin/pkg_install/info/pkg_info.1#3 integrate
.. //depot/projects/dtrace7/src/usr.sbin/pkg_install/lib/lib.h#4 integrate
.. //depot/projects/dtrace7/src/usr.sbin/pkg_install/updating/main.c#2 integrate
.. //depot/projects/dtrace7/src/usr.sbin/pkg_install/updating/pkg_updating.1#2 integrate
.. //depot/projects/dtrace7/src/usr.sbin/pkg_install/version/main.c#3 integrate
.. //depot/projects/dtrace7/src/usr.sbin/pkg_install/version/pkg_version.1#4 integrate
.. //depot/projects/dtrace7/src/usr.sbin/rpc.lockd/lockd.c#4 integrate
.. //depot/projects/dtrace7/src/usr.sbin/tzsetup/tzsetup.c#2 integrate

Differences ...

==== //depot/projects/dtrace7/src/sbin/geom/class/part/geom_part.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sbin/geom/class/part/geom_part.c,v 1.1.2.1 2007/10/29 06:18:03 marcel Exp $");
+__FBSDID("$FreeBSD: src/sbin/geom/class/part/geom_part.c,v 1.1.2.2 2008/06/10 03:19:33 marcel Exp $");
 
 #include <stdio.h>
 #include <stdint.h>
@@ -39,28 +39,48 @@
 #include <paths.h>
 #include <errno.h>
 #include <assert.h>
+#include <sys/stat.h>
 
 #include "core/geom.h"
 #include "misc/subr.h"
 
-uint32_t lib_version = G_LIB_VERSION;
-uint32_t version = 0;
+#ifdef STATIC_GEOM_CLASSES
+#define	PUBSYM(x)	gpart_##x
+#else
+#define	PUBSYM(x)	x
+#endif
+
+uint32_t PUBSYM(lib_version) = G_LIB_VERSION;
+uint32_t PUBSYM(version) = 0;
 
 static char optional[] = "";
 static char flags[] = "C";
 
-static void gpart_show(struct gctl_req *, unsigned);
+static char bootcode_param[] = "bootcode";
+static char index_param[] = "index";
+static char partcode_param[] = "partcode";
+
+static void gpart_bootcode(struct gctl_req *, unsigned int);
+static void gpart_show(struct gctl_req *, unsigned int);
 
-struct g_command class_commands[] = {
+struct g_command PUBSYM(class_commands)[] = {
 	{ "add", 0, NULL, {
 		{ 'b', "start", NULL, G_TYPE_STRING },
 		{ 's', "size", NULL, G_TYPE_STRING },
 		{ 't', "type", NULL, G_TYPE_STRING },
-		{ 'i', "index", optional, G_TYPE_STRING },
+		{ 'i', index_param, optional, G_TYPE_STRING },
 		{ 'l', "label", optional, G_TYPE_STRING },
 		{ 'f', "flags", flags, G_TYPE_STRING },
 		G_OPT_SENTINEL },
-	  "geom", NULL,
+	  "geom", NULL
+	},
+	{ "bootcode", 0, gpart_bootcode, {
+		{ 'b', bootcode_param, optional, G_TYPE_STRING },
+		{ 'p', partcode_param, optional, G_TYPE_STRING },
+		{ 'i', index_param, optional, G_TYPE_STRING },
+		{ 'f', "flags", flags, G_TYPE_STRING },
+		G_OPT_SENTINEL },
+	  "geom", NULL
 	},
 	{ "commit", 0, NULL, G_NULL_OPTS, "geom", NULL },
 	{ "create", 0, NULL, {
@@ -71,7 +91,7 @@
 	  "provider", NULL
 	},
 	{ "delete", 0, NULL, {
-		{ 'i', "index", NULL, G_TYPE_STRING },
+		{ 'i', index_param, NULL, G_TYPE_STRING },
 		{ 'f', "flags", flags, G_TYPE_STRING },
 		G_OPT_SENTINEL },
 	  "geom", NULL
@@ -81,7 +101,7 @@
 		G_OPT_SENTINEL },
 	  "geom", NULL },
 	{ "modify", 0, NULL, {
-		{ 'i', "index", NULL, G_TYPE_STRING },
+		{ 'i', index_param, NULL, G_TYPE_STRING },
 		{ 'l', "label", optional, G_TYPE_STRING },
 		{ 't', "type", optional, G_TYPE_STRING },
 		{ 'f', "flags", flags, G_TYPE_STRING },
@@ -235,7 +255,7 @@
 }
 
 static void
-gpart_show(struct gctl_req *req, unsigned fl __unused)
+gpart_show(struct gctl_req *req, unsigned int fl __unused)
 {
 	struct gmesh mesh;
 	struct gclass *classp;
@@ -271,3 +291,151 @@
 	}
 	geom_deletetree(&mesh);
 }
+
+static void *
+gpart_bootfile_read(const char *bootfile, ssize_t *size)
+{
+	struct stat sb;
+	void *code;
+	int fd;
+
+	if (stat(bootfile, &sb) == -1)
+		err(EXIT_FAILURE, "%s", bootfile);
+	if (!S_ISREG(sb.st_mode))
+		errx(EXIT_FAILURE, "%s: not a regular file", bootfile);
+	if (sb.st_size == 0)
+		errx(EXIT_FAILURE, "%s: empty file", bootfile);
+	if (*size > 0 && sb.st_size >= *size)
+		errx(EXIT_FAILURE, "%s: file too big (%zu limit)", bootfile,
+		    *size);
+
+	*size = sb.st_size;
+
+	fd = open(bootfile, O_RDONLY);
+	if (fd == -1)
+		err(EXIT_FAILURE, "%s", bootfile);
+	code = malloc(*size);
+	if (code == NULL)
+		err(EXIT_FAILURE, NULL);
+	if (read(fd, code, *size) != *size)
+		err(EXIT_FAILURE, "%s", bootfile);
+	close(fd);
+
+	return (code);
+}
+
+static void
+gpart_write_partcode(struct gctl_req *req, int idx, void *code, ssize_t size)
+{
+	char dsf[128];
+	struct gmesh mesh;
+	struct gclass *classp;
+	struct ggeom *gp;
+	struct gprovider *pp;
+	const char *s;
+	int error, fd;
+
+	s = gctl_get_ascii(req, "class");
+	if (s == NULL)
+		abort();
+	error = geom_gettree(&mesh);
+	if (error != 0)
+		errc(EXIT_FAILURE, error, "Cannot get GEOM tree");
+	classp = find_class(&mesh, s);
+	if (classp == NULL) {
+		geom_deletetree(&mesh);
+		errx(EXIT_FAILURE, "Class %s not found.", s);
+	}
+	s = gctl_get_ascii(req, "geom");
+	gp = find_geom(classp, s);
+	if (gp == NULL)
+		errx(EXIT_FAILURE, "No such geom: %s.", s);
+
+	LIST_FOREACH(pp, &gp->lg_provider, lg_provider) {
+		s = find_provcfg(pp, "index");
+		if (s == NULL)
+			continue;
+		if (atoi(s) == idx)
+			break;
+	}
+
+	if (pp != NULL) {
+		snprintf(dsf, sizeof(dsf), "/dev/%s", pp->lg_name);
+		fd = open(dsf, O_WRONLY);
+		if (fd == -1)
+			err(EXIT_FAILURE, "%s", dsf);
+		if (lseek(fd, size, SEEK_SET) != size)
+			errx(EXIT_FAILURE, "%s: not enough space", dsf);
+		if (lseek(fd, 0, SEEK_SET) != 0)
+			err(EXIT_FAILURE, "%s", dsf);
+		if (write(fd, code, size) != size)
+			err(EXIT_FAILURE, "%s", dsf);
+		close(fd);
+	} else
+		errx(EXIT_FAILURE, "invalid partition index");
+
+	geom_deletetree(&mesh);
+}
+
+static void
+gpart_bootcode(struct gctl_req *req, unsigned int fl __unused)
+{
+	const char *s;
+	char *sp;
+	void *bootcode, *partcode;
+	size_t bootsize, partsize;
+	int error, idx;
+
+	if (gctl_has_param(req, bootcode_param)) {
+		s = gctl_get_ascii(req, bootcode_param);
+		bootsize = 64 * 1024;		/* Arbitrary limit. */
+		bootcode = gpart_bootfile_read(s, &bootsize);
+		error = gctl_change_param(req, bootcode_param, bootsize,
+		    bootcode);
+		if (error)
+			errc(EXIT_FAILURE, error, "internal error");
+	} else {
+		bootcode = NULL;
+		bootsize = 0;
+	}
+
+	if (gctl_has_param(req, partcode_param)) {
+		s = gctl_get_ascii(req, partcode_param);
+		partsize = bootsize * 1024;
+		partcode = gpart_bootfile_read(s, &partsize);
+		error = gctl_delete_param(req, partcode_param);
+		if (error)
+			errc(EXIT_FAILURE, error, "internal error");
+	} else {
+		partcode = NULL;
+		partsize = 0;
+	}
+
+	if (gctl_has_param(req, index_param)) {
+		if (partcode == NULL)
+			errx(EXIT_FAILURE, "-i is only valid with -p");
+		s = gctl_get_ascii(req, index_param);
+		idx = strtol(s, &sp, 10);
+		if (idx < 1 || *s == '\0' || *sp != '\0')
+			errx(EXIT_FAILURE, "invalid partition index");
+		error = gctl_delete_param(req, index_param);
+		if (error)
+			errc(EXIT_FAILURE, error, "internal error");
+	} else
+		idx = 0;
+
+	if (partcode != NULL) {
+		if (idx == 0)
+			errx(EXIT_FAILURE, "missing -i option");
+		gpart_write_partcode(req, idx, partcode, partsize);
+	} else {
+		if (bootcode == NULL)
+			errx(EXIT_FAILURE, "no -b nor -p");
+	}
+
+	if (bootcode != NULL) {
+		s = gctl_issue(req);
+		if (s != NULL)
+			errx(EXIT_FAILURE, "%s", s);
+	}
+}

==== //depot/projects/dtrace7/src/sbin/geom/class/part/gpart.8#2 (text+ko) ====

@@ -1,4 +1,4 @@
-.\" Copyright (c) 2007 Marcel Moolenaar
+.\" Copyright (c) 2007, 2008 Marcel Moolenaar
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/sbin/geom/class/part/gpart.8,v 1.1.2.1 2007/10/29 06:18:03 marcel Exp $
+.\" $FreeBSD: src/sbin/geom/class/part/gpart.8,v 1.1.2.2 2008/06/10 03:19:33 marcel Exp $
 .\"
-.Dd Oct 20, 2007
+.Dd Jun 6, 2008
 .Dt GPART 8
 .Os
 .Sh NAME
@@ -36,16 +36,24 @@
 lines in your kernel configuration file:
 .Bd -ragged -offset indent
 .Cd "options GEOM_PART_APM"
+.Cd "options GEOM_PART_BSD"
 .Cd "options GEOM_PART_GPT"
 .Cd "options GEOM_PART_MBR"
+.Cd "options GEOM_PART_PC98"
+.Cd "options GEOM_PART_VTOC8"
 .Ed
 .Pp
 The GEOM_PART_APM option adds support for the Apple Partition Map (APM)
 found on Apple Macintosh computers.
+The GEOM_PART_BSD option adds support for the traditional BSD disklabel.
 The GEOM_PART_GPT option adds support for the GUID Partition Table (GPT)
 found on Intel Itanium computers and Intel-based Macintosh computers.
 The GEOM_PART_MBR option adds support for the Master Boot Record (MBR)
 found on PCs and used on many removable media.
+The GEOM_PART_PC98 option adds support for the MBR variant as used on
+NEC PC-98 computers.
+The GEOM_PART_VTOC8 option adds support for Sun's SMI VTOC8 label as
+found on UltraSPARC-based computers.
 .Pp
 Usage of the
 .Xr gpart 8
@@ -61,6 +69,13 @@
 .Op Fl l Ar label
 .Op Fl f Ar flags
 .Ar geom
+.\" ==== BOOTCODE ====
+.Nm
+.Cm bootcode
+.Op Fl b Ar bootcode
+.Op Fl p Ar partcode Fl i Ar index
+.Op Fl f Ar flags
+.Ar geom
 .\" ==== COMMIT ====
 .Nm
 .Cm commit
@@ -122,7 +137,7 @@
 Partition types are discussed in the section entitled "Partition Types".
 .Pp
 Addition options include:
-.Bl -tag -width ".Fl w Ar wwwwwww"
+.Bl -tag -width ".Fl w Ar wwwwwwww"
 .It Fl i Ar index
 The index in the partition table at which the new partition is to be
 placed. The index determines the name of the device special file used
@@ -136,6 +151,36 @@
 See the section entitled "Operational flags" below for a discussion
 about its use.
 .El
+.\" ==== BOOTCODE ====
+.It Cm bootcode
+Embed bootstrap code into the partitioning scheme's metadata on the
+.Ar geom
+(using
+.Fl b Ar bootcode )
+or write bootstrap code into a partition (using
+.Fl p Ar partcode
+and
+.Fl i Ar index ) .
+Not all partitioning schemes have embedded bootstrap code, so the
+.Fl b Ar bootcode
+option is scheme-specific in nature.
+For the GPT scheme, embedded bootstrap code is supported.
+The bootstrap code is embedded in the protective MBR rather than the GPT.
+The
+.Fl b Ar bootcode
+option specifies a file that contains the bootstrap code.
+The contents and size of the file are determined by the partitioning
+scheme.
+For the MBR scheme, it's a 512 byte file of which the first 446 bytes
+are installed as bootstrap code.
+The
+.Fl p Ar partcode
+option specifies a file that contains the bootstrap code intended to be
+written to a partition.
+The partition is specified by the
+.Fl i Ar index
+option.
+The size of the file must be smaller than the size of the partition.
 .\" ==== COMMIT ====
 .It Cm commit
 Commit any pending changes for geom

==== //depot/projects/dtrace7/src/sbin/geom/misc/subr.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sbin/geom/misc/subr.c,v 1.7 2007/01/25 11:35:27 pjd Exp $");
+__FBSDID("$FreeBSD: src/sbin/geom/misc/subr.c,v 1.7.2.1 2008/06/10 03:02:51 marcel Exp $");
 
 #include <sys/param.h>
 #include <sys/disk.h>
@@ -414,3 +414,47 @@
 	}
 	return (ENOENT);
 }
+
+int
+gctl_delete_param(struct gctl_req *req, const char *name)
+{
+	struct gctl_req_arg *ap;
+	unsigned int i;
+
+	if (req == NULL || req->error != NULL)
+		return (EDOOFUS);
+
+	i = 0;
+	while (i < req->narg) {
+		ap = &req->arg[i];
+		if (strcmp(ap->name, name) == 0)
+			break;
+		i++;
+	}
+	if (i == req->narg)
+		return (ENOENT);
+
+	req->narg--;
+	while (i < req->narg) {
+		req->arg[i] = req->arg[i + 1];
+		i++;
+	}
+	return (0);
+}
+
+int
+gctl_has_param(struct gctl_req *req, const char *name)
+{
+	struct gctl_req_arg *ap;
+	unsigned int i;
+
+	if (req == NULL || req->error != NULL)
+		return (0);
+
+	for (i = 0; i < req->narg; i++) {
+		ap = &req->arg[i];
+		if (strcmp(ap->name, name) == 0)
+			return (1);
+	}
+	return (0);
+}

==== //depot/projects/dtrace7/src/sbin/geom/misc/subr.h#2 (text+ko) ====

@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sbin/geom/misc/subr.h,v 1.8 2007/01/25 11:35:27 pjd Exp $
+ * $FreeBSD: src/sbin/geom/misc/subr.h,v 1.8.2.1 2008/06/10 03:02:51 marcel Exp $
  */
 
 #ifndef _SUBR_H_
@@ -47,4 +47,7 @@
 const char *gctl_get_ascii(struct gctl_req *req, const char *pfmt, ...) __printflike(2, 3);
 int gctl_change_param(struct gctl_req *req, const char *name, int len,
     const void *value);
+int gctl_delete_param(struct gctl_req *req, const char *name);
+int gctl_has_param(struct gctl_req *req, const char *name);
+
 #endif	/* !_SUBR_H_ */

==== //depot/projects/dtrace7/src/share/man/man4/ciss.4#3 (text+ko) ====

@@ -1,4 +1,4 @@
-.\" $FreeBSD: src/share/man/man4/ciss.4,v 1.14.2.1 2008/02/14 17:01:32 iwasaki Exp $
+.\" $FreeBSD: src/share/man/man4/ciss.4,v 1.14.2.2 2008/06/10 18:11:14 ps Exp $
 .\" Written by Tom Rhodes
 .\" This file is in the public domain.
 .\"
@@ -119,14 +119,24 @@
 .It
 HP Smart Array E200i
 .It
+HP Smart Array P212
+.It
 HP Smart Array P400
 .It
 HP Smart Array P400i
 .It
+HP Smart Array P410
+.It
+HP Smart Array P410i
+.It
+HP Smart Array P411
+.It
 HP Smart Array P600
 .It
 HP Smart Array P800
 .It
+HP Smart Array P812
+.It
 HP Modular Smart Array 20 (MSA20)
 .It
 HP Modular Smart Array 500 (MSA500)

==== //depot/projects/dtrace7/src/share/sendmail/Makefile#2 (text+ko) ====

@@ -1,11 +1,11 @@
-# $FreeBSD: src/share/sendmail/Makefile,v 1.10 2004/12/21 08:46:54 ru Exp $
+# $FreeBSD: src/share/sendmail/Makefile,v 1.10.10.1 2008/06/15 20:12:11 remko Exp $
 #
 # Doing a make install builds /usr/share/sendmail/
 
 SENDMAIL_DIR=${.CURDIR}/../../contrib/sendmail
 CFDIR=	cf
-CFDIRS!=	(cd ${SENDMAIL_DIR}; find -L ${CFDIR} \( -name CVS -prune \) -o -type d -print)
-CFFILES!=	(cd ${SENDMAIL_DIR}; find -L ${CFDIR} \( -name CVS -prune \) -o -type f -print)
+CFDIRS!=	(cd ${SENDMAIL_DIR}; find -L ${CFDIR} \( \( -name CVS -o -name .svn \) -prune \) -o -type d -print)
+CFFILES!=	(cd ${SENDMAIL_DIR}; find -L ${CFDIR} \( \( -name CVS -o -name .svn \) -prune \) -o -type f -print)
 
 DDIR=	${DESTDIR}/usr/share/sendmail
 

==== //depot/projects/dtrace7/src/sys/dev/ciss/ciss.c#4 (text+ko) ====

@@ -24,7 +24,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *	$FreeBSD: src/sys/dev/ciss/ciss.c,v 1.81.2.4 2008/05/16 08:28:47 ps Exp $
+ *	$FreeBSD: src/sys/dev/ciss/ciss.c,v 1.81.2.5 2008/06/10 18:11:14 ps Exp $
  */
 
 /*
@@ -298,6 +298,11 @@
     { 0x103C, 0x323A, CISS_BOARD_SA5,	"HP Smart Array" },
     { 0x103C, 0x323B, CISS_BOARD_SA5,	"HP Smart Array" },
     { 0x103C, 0x323C, CISS_BOARD_SA5,	"HP Smart Array" },
+    { 0x103C, 0x3241, CISS_BOARD_SA5,	"HP Smart Array P212" },
+    { 0x103C, 0x3243, CISS_BOARD_SA5,	"HP Smart Array P410" },
+    { 0x103C, 0x3245, CISS_BOARD_SA5,	"HP Smart Array P410i" },
+    { 0x103C, 0x3247, CISS_BOARD_SA5,	"HP Smart Array P411" },
+    { 0x103C, 0x3249, CISS_BOARD_SA5,	"HP Smart Array P812" },
     { 0, 0, 0, NULL }
 };
 

==== //depot/projects/dtrace7/src/sys/dev/gem/if_gem.c#3 (text+ko) ====

@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/gem/if_gem.c,v 1.44.2.3 2008/03/18 00:42:25 yongari Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/gem/if_gem.c,v 1.44.2.4 2008/06/11 21:10:06 marius Exp $");
 
 /*
  * Driver for Apple GMAC, Sun ERI and Sun GEM Ethernet controllers
@@ -96,8 +96,8 @@
 #define	GEM_CSUM_FEATURES	(CSUM_TCP)
 
 static int	gem_add_rxbuf(struct gem_softc *sc, int idx);
-static int	gem_bitwait(struct gem_softc *sc, bus_addr_t r, uint32_t clr,
-		    uint32_t set);
+static int	gem_bitwait(struct gem_softc *sc, u_int bank, bus_addr_t r,
+		    uint32_t clr, uint32_t set);
 static void	gem_cddma_callback(void *xsc, bus_dma_segment_t *segs,
 		    int nsegs, int error);
 static int	gem_disable_rx(struct gem_softc *sc);
@@ -140,6 +140,11 @@
 #define	KTR_GEM		KTR_CT2
 #endif
 
+#define	GEM_BANK1_BITWAIT(sc, r, clr, set)				\
+	gem_bitwait((sc), GEM_RES_BANK1, (r), (clr), (set))
+#define	GEM_BANK2_BITWAIT(sc, r, clr, set)				\
+	gem_bitwait((sc), GEM_RES_BANK2, (r), (clr), (set))
+
 int
 gem_attach(struct gem_softc *sc)
 {
@@ -252,7 +257,7 @@
 
 	/* Bad things will happen when touching this register on ERI. */
 	if (sc->sc_variant != GEM_SUN_ERI)
-		bus_write_4(sc->sc_res[0], GEM_MII_DATAPATH_MODE,
+		GEM_BANK1_WRITE_4(sc, GEM_MII_DATAPATH_MODE,
 		    GEM_MII_DATAPATH_MII);
 
 	gem_mifinit(sc);
@@ -261,10 +266,10 @@
 	 * Look for an external PHY.
 	 */
 	error = ENXIO;
-	v = bus_read_4(sc->sc_res[0], GEM_MIF_CONFIG);
+	v = GEM_BANK1_READ_4(sc, GEM_MIF_CONFIG);
 	if ((v & GEM_MIF_CONFIG_MDI1) != 0) {
 		v |= GEM_MIF_CONFIG_PHY_SEL;
-		bus_write_4(sc->sc_res[0], GEM_MIF_CONFIG, v);
+		GEM_BANK1_WRITE_4(sc, GEM_MIF_CONFIG, v);
 		switch (sc->sc_variant) {
 		case GEM_SUN_ERI:
 			sc->sc_phyad = GEM_PHYAD_EXTERNAL;
@@ -282,7 +287,7 @@
 	 */
 	if (error != 0 && (v & GEM_MIF_CONFIG_MDI0) != 0) {
 		v &= ~GEM_MIF_CONFIG_PHY_SEL;
-		bus_write_4(sc->sc_res[0], GEM_MIF_CONFIG, v);
+		GEM_BANK1_WRITE_4(sc, GEM_MIF_CONFIG, v);
 		switch (sc->sc_variant) {
 		case GEM_SUN_ERI:
 		case GEM_APPLE_K2_GMAC:
@@ -303,12 +308,11 @@
 	 * Try the external PCS SERDES if we didn't find any PHYs.
 	 */
 	if (error != 0 && sc->sc_variant == GEM_SUN_GEM) {
-		bus_write_4(sc->sc_res[0], GEM_MII_DATAPATH_MODE,
+		GEM_BANK1_WRITE_4(sc, GEM_MII_DATAPATH_MODE,
 		    GEM_MII_DATAPATH_SERDES);
-		bus_write_4(sc->sc_res[0], GEM_MII_SLINK_CONTROL,
+		GEM_BANK1_WRITE_4(sc, GEM_MII_SLINK_CONTROL,
 		    GEM_MII_SLINK_LOOPBACK | GEM_MII_SLINK_EN_SYNC_D);
-		bus_write_4(sc->sc_res[0], GEM_MII_CONFIG,
-		    GEM_MII_CONFIG_ENABLE);
+		GEM_BANK1_WRITE_4(sc, GEM_MII_CONFIG, GEM_MII_CONFIG_ENABLE);
 		sc->sc_flags |= GEM_SERDES;
 		sc->sc_phyad = GEM_PHYAD_EXTERNAL;
 		error = mii_phy_probe(sc->sc_dev, &sc->sc_miibus,
@@ -327,12 +331,12 @@
 	 * allocated.
 	 */
 
-	/* Get RX FIFO size */
+	/* Get RX FIFO size. */
 	sc->sc_rxfifosize = 64 *
-	    bus_read_4(sc->sc_res[0], GEM_RX_FIFO_SIZE);
+	    GEM_BANK1_READ_4(sc, GEM_RX_FIFO_SIZE);
 
-	/* Get TX FIFO size */
-	v = bus_read_4(sc->sc_res[0], GEM_TX_FIFO_SIZE);
+	/* Get TX FIFO size. */
+	v = GEM_BANK1_READ_4(sc, GEM_TX_FIFO_SIZE);
 	device_printf(sc->sc_dev, "%ukB RX FIFO, %ukB TX FIFO\n",
 	    sc->sc_rxfifosize / 1024, v / 16);
 
@@ -592,18 +596,18 @@
 	 * Unload collision counters.
 	 */
 	ifp->if_collisions +=
-	    bus_read_4(sc->sc_res[0], GEM_MAC_NORM_COLL_CNT) +
-	    bus_read_4(sc->sc_res[0], GEM_MAC_FIRST_COLL_CNT) +
-	    bus_read_4(sc->sc_res[0], GEM_MAC_EXCESS_COLL_CNT) +
-	    bus_read_4(sc->sc_res[0], GEM_MAC_LATE_COLL_CNT);
+	    GEM_BANK1_READ_4(sc, GEM_MAC_NORM_COLL_CNT) +
+	    GEM_BANK1_READ_4(sc, GEM_MAC_FIRST_COLL_CNT) +
+	    GEM_BANK1_READ_4(sc, GEM_MAC_EXCESS_COLL_CNT) +
+	    GEM_BANK1_READ_4(sc, GEM_MAC_LATE_COLL_CNT);
 
 	/*
-	 * then clear the hardware counters.
+	 * Then clear the hardware counters.
 	 */
-	bus_write_4(sc->sc_res[0], GEM_MAC_NORM_COLL_CNT, 0);
-	bus_write_4(sc->sc_res[0], GEM_MAC_FIRST_COLL_CNT, 0);
-	bus_write_4(sc->sc_res[0], GEM_MAC_EXCESS_COLL_CNT, 0);
-	bus_write_4(sc->sc_res[0], GEM_MAC_LATE_COLL_CNT, 0);
+	GEM_BANK1_WRITE_4(sc, GEM_MAC_NORM_COLL_CNT, 0);
+	GEM_BANK1_WRITE_4(sc, GEM_MAC_FIRST_COLL_CNT, 0);
+	GEM_BANK1_WRITE_4(sc, GEM_MAC_EXCESS_COLL_CNT, 0);
+	GEM_BANK1_WRITE_4(sc, GEM_MAC_LATE_COLL_CNT, 0);
 
 	mii_tick(sc->sc_mii);
 
@@ -614,13 +618,14 @@
 }
 
 static int
-gem_bitwait(struct gem_softc *sc, bus_addr_t r, uint32_t clr, uint32_t set)
+gem_bitwait(struct gem_softc *sc, u_int bank, bus_addr_t r, uint32_t clr,
+    uint32_t set)
 {
 	int i;
 	uint32_t reg;
 
 	for (i = TRIES; i--; DELAY(100)) {
-		reg = bus_read_4(sc->sc_res[0], r);
+		reg = GEM_BANKN_READ_M(bank, 4, sc, r);
 		if ((reg & clr) == 0 && (reg & set) == set)
 			return (1);
 	}
@@ -639,9 +644,9 @@
 	gem_reset_tx(sc);
 
 	/* Do a full reset. */
-	bus_write_4(sc->sc_res[0], GEM_RESET, GEM_RESET_RX | GEM_RESET_TX);
-	bus_barrier(sc->sc_res[0], GEM_RESET, 4, BUS_SPACE_BARRIER_WRITE);
-	if (!gem_bitwait(sc, GEM_RESET, GEM_RESET_RX | GEM_RESET_TX, 0))
+	GEM_BANK2_WRITE_4(sc, GEM_RESET, GEM_RESET_RX | GEM_RESET_TX);
+	GEM_BANK2_BARRIER(sc, GEM_RESET, 4, BUS_SPACE_BARRIER_WRITE);
+	if (!GEM_BANK2_BITWAIT(sc, GEM_RESET, GEM_RESET_RX | GEM_RESET_TX, 0))
 		device_printf(sc->sc_dev, "cannot reset device\n");
 }
 
@@ -719,15 +724,16 @@
 	 * disable DMA first.
 	 */
 	gem_disable_rx(sc);
-	bus_write_4(sc->sc_res[0], GEM_RX_CONFIG, 0);
-	bus_barrier(sc->sc_res[0], GEM_RX_CONFIG, 4, BUS_SPACE_BARRIER_WRITE);
-	if (!gem_bitwait(sc, GEM_RX_CONFIG, GEM_RX_CONFIG_RXDMA_EN, 0))
+	GEM_BANK1_WRITE_4(sc, GEM_RX_CONFIG, 0);
+	GEM_BANK1_BARRIER(sc, GEM_RX_CONFIG, 4, BUS_SPACE_BARRIER_WRITE);
+	if (!GEM_BANK1_BITWAIT(sc, GEM_RX_CONFIG, GEM_RX_CONFIG_RXDMA_EN, 0))
 		device_printf(sc->sc_dev, "cannot disable RX DMA\n");
 
-	/* Finally, reset the ERX */
-	bus_write_4(sc->sc_res[0], GEM_RESET, GEM_RESET_RX);
-	bus_barrier(sc->sc_res[0], GEM_RESET, 4, BUS_SPACE_BARRIER_WRITE);
-	if (!gem_bitwait(sc, GEM_RESET, GEM_RESET_RX | GEM_RESET_TX, 0)) {
+	/* Finally, reset the ERX. */
+	GEM_BANK2_WRITE_4(sc, GEM_RESET, GEM_RESET_RX);
+	GEM_BANK2_BARRIER(sc, GEM_RESET, 4, BUS_SPACE_BARRIER_WRITE);
+	if (!GEM_BANK2_BITWAIT(sc, GEM_RESET, GEM_RESET_RX | GEM_RESET_TX,
+	    0)) {
 		device_printf(sc->sc_dev, "cannot reset receiver\n");
 		return (1);
 	}
@@ -756,28 +762,26 @@
 	GEM_CDSYNC(sc, BUS_DMASYNC_PREREAD);
 
 	/* NOTE: we use only 32-bit DMA addresses here. */
-	bus_write_4(sc->sc_res[0], GEM_RX_RING_PTR_HI, 0);
-	bus_write_4(sc->sc_res[0], GEM_RX_RING_PTR_LO, GEM_CDRXADDR(sc, 0));
-	bus_write_4(sc->sc_res[0], GEM_RX_KICK, GEM_NRXDESC - 4);
-	bus_write_4(sc->sc_res[0], GEM_RX_CONFIG,
+	GEM_BANK1_WRITE_4(sc, GEM_RX_RING_PTR_HI, 0);
+	GEM_BANK1_WRITE_4(sc, GEM_RX_RING_PTR_LO, GEM_CDRXADDR(sc, 0));
+	GEM_BANK1_WRITE_4(sc, GEM_RX_KICK, GEM_NRXDESC - 4);
+	GEM_BANK1_WRITE_4(sc, GEM_RX_CONFIG,
 	    gem_ringsize(GEM_NRXDESC /* XXX */) |
 	    ((ETHER_HDR_LEN + sizeof(struct ip)) <<
 	    GEM_RX_CONFIG_CXM_START_SHFT) |
 	    (GEM_THRSH_1024 << GEM_RX_CONFIG_FIFO_THRS_SHIFT) |
 	    (2 << GEM_RX_CONFIG_FBOFF_SHFT));
-	bus_write_4(sc->sc_res[0], GEM_RX_BLANKING,
+	GEM_BANK1_WRITE_4(sc, GEM_RX_BLANKING,
 	    (6 << GEM_RX_BLANKING_TIME_SHIFT) | 6);
-	bus_write_4(sc->sc_res[0], GEM_RX_PAUSE_THRESH,
+	GEM_BANK1_WRITE_4(sc, GEM_RX_PAUSE_THRESH,
 	    (3 * sc->sc_rxfifosize / 256) |
 	    ((sc->sc_rxfifosize / 256) << 12));
-	bus_write_4(sc->sc_res[0], GEM_RX_CONFIG,
-	    bus_read_4(sc->sc_res[0], GEM_RX_CONFIG) |
-	    GEM_RX_CONFIG_RXDMA_EN);
-	bus_write_4(sc->sc_res[0], GEM_MAC_RX_MASK,
+	GEM_BANK1_WRITE_4(sc, GEM_RX_CONFIG,
+	    GEM_BANK1_READ_4(sc, GEM_RX_CONFIG) | GEM_RX_CONFIG_RXDMA_EN);
+	GEM_BANK1_WRITE_4(sc, GEM_MAC_RX_MASK,
 	    GEM_MAC_RX_DONE | GEM_MAC_RX_FRAME_CNT);
-	bus_write_4(sc->sc_res[0], GEM_MAC_RX_CONFIG,
-	    bus_read_4(sc->sc_res[0], GEM_MAC_RX_CONFIG) |
-	    GEM_MAC_RX_ENABLE);
+	GEM_BANK1_WRITE_4(sc, GEM_MAC_RX_CONFIG,
+	    GEM_BANK1_READ_4(sc, GEM_MAC_RX_CONFIG) | GEM_MAC_RX_ENABLE);
 }
 
 static int
@@ -789,15 +793,16 @@
 	 * disable DMA first.
 	 */
 	gem_disable_tx(sc);
-	bus_write_4(sc->sc_res[0], GEM_TX_CONFIG, 0);
-	bus_barrier(sc->sc_res[0], GEM_TX_CONFIG, 4, BUS_SPACE_BARRIER_WRITE);
-	if (!gem_bitwait(sc, GEM_TX_CONFIG, GEM_TX_CONFIG_TXDMA_EN, 0))
+	GEM_BANK1_WRITE_4(sc, GEM_TX_CONFIG, 0);
+	GEM_BANK1_BARRIER(sc, GEM_TX_CONFIG, 4, BUS_SPACE_BARRIER_WRITE);
+	if (!GEM_BANK1_BITWAIT(sc, GEM_TX_CONFIG, GEM_TX_CONFIG_TXDMA_EN, 0))
 		device_printf(sc->sc_dev, "cannot disable TX DMA\n");
 
-	/* Finally, reset the ETX */
-	bus_write_4(sc->sc_res[0], GEM_RESET, GEM_RESET_TX);
-	bus_barrier(sc->sc_res[0], GEM_RESET, 4, BUS_SPACE_BARRIER_WRITE);
-	if (!gem_bitwait(sc, GEM_RESET, GEM_RESET_RX | GEM_RESET_TX, 0)) {
+	/* Finally, reset the ETX. */
+	GEM_BANK2_WRITE_4(sc, GEM_RESET, GEM_RESET_TX);
+	GEM_BANK2_BARRIER(sc, GEM_RESET, 4, BUS_SPACE_BARRIER_WRITE);
+	if (!GEM_BANK2_BITWAIT(sc, GEM_RESET, GEM_RESET_RX | GEM_RESET_TX,
+	    0)) {
 		device_printf(sc->sc_dev, "cannot reset transmitter\n");
 		return (1);
 	}
@@ -807,30 +812,23 @@
 static int
 gem_disable_rx(struct gem_softc *sc)
 {
-	uint32_t cfg;
 
-	cfg = bus_read_4(sc->sc_res[0], GEM_MAC_RX_CONFIG);
-	cfg &= ~GEM_MAC_RX_ENABLE;
-	bus_write_4(sc->sc_res[0], GEM_MAC_RX_CONFIG, cfg);
-	bus_barrier(sc->sc_res[0], GEM_MAC_RX_CONFIG, 4,
-	    BUS_SPACE_BARRIER_WRITE);
-	return (gem_bitwait(sc, GEM_MAC_RX_CONFIG, GEM_MAC_RX_ENABLE, 0));
+	GEM_BANK1_WRITE_4(sc, GEM_MAC_RX_CONFIG,
+	    GEM_BANK1_READ_4(sc, GEM_MAC_RX_CONFIG) & ~GEM_MAC_RX_ENABLE);
+	GEM_BANK1_BARRIER(sc, GEM_MAC_RX_CONFIG, 4, BUS_SPACE_BARRIER_WRITE);
+	return (GEM_BANK1_BITWAIT(sc, GEM_MAC_RX_CONFIG, GEM_MAC_RX_ENABLE,
+	    0));
 }
 
-/*
- * disable transmitter.
- */
 static int
 gem_disable_tx(struct gem_softc *sc)
 {
-	uint32_t cfg;
 
-	cfg = bus_read_4(sc->sc_res[0], GEM_MAC_TX_CONFIG);
-	cfg &= ~GEM_MAC_TX_ENABLE;
-	bus_write_4(sc->sc_res[0], GEM_MAC_TX_CONFIG, cfg);
-	bus_barrier(sc->sc_res[0], GEM_MAC_TX_CONFIG, 4,
-	    BUS_SPACE_BARRIER_WRITE);
-	return (gem_bitwait(sc, GEM_MAC_TX_CONFIG, GEM_MAC_TX_ENABLE, 0));
+	GEM_BANK1_WRITE_4(sc, GEM_MAC_TX_CONFIG,
+	    GEM_BANK1_READ_4(sc, GEM_MAC_TX_CONFIG) & ~GEM_MAC_TX_ENABLE);
+	GEM_BANK1_BARRIER(sc, GEM_MAC_TX_CONFIG, 4, BUS_SPACE_BARRIER_WRITE);
+	return (GEM_BANK1_BITWAIT(sc, GEM_MAC_TX_CONFIG, GEM_MAC_TX_ENABLE,
+	    0));
 }
 
 static int
@@ -964,18 +962,18 @@
 
 	/* step 6 & 7.  Program Descriptor Ring Base Addresses. */
 	/* NOTE: we use only 32-bit DMA addresses here. */
-	bus_write_4(sc->sc_res[0], GEM_TX_RING_PTR_HI, 0);
-	bus_write_4(sc->sc_res[0], GEM_TX_RING_PTR_LO, GEM_CDTXADDR(sc, 0));
+	GEM_BANK1_WRITE_4(sc, GEM_TX_RING_PTR_HI, 0);
+	GEM_BANK1_WRITE_4(sc, GEM_TX_RING_PTR_LO, GEM_CDTXADDR(sc, 0));
 
-	bus_write_4(sc->sc_res[0], GEM_RX_RING_PTR_HI, 0);
-	bus_write_4(sc->sc_res[0], GEM_RX_RING_PTR_LO, GEM_CDRXADDR(sc, 0));
+	GEM_BANK1_WRITE_4(sc, GEM_RX_RING_PTR_HI, 0);
+	GEM_BANK1_WRITE_4(sc, GEM_RX_RING_PTR_LO, GEM_CDRXADDR(sc, 0));
 #ifdef GEM_DEBUG
 	CTR3(KTR_GEM, "loading RX ring %lx, TX ring %lx, cddma %lx",
 	    GEM_CDRXADDR(sc, 0), GEM_CDTXADDR(sc, 0), sc->sc_cddma);
 #endif
 
 	/* step 8.  Global Configuration & Interrupt Mask */
-	bus_write_4(sc->sc_res[0], GEM_INTMASK,
+	GEM_BANK1_WRITE_4(sc, GEM_INTMASK,
 	    ~(GEM_INTR_TX_INTME | GEM_INTR_TX_EMPTY | GEM_INTR_RX_DONE |
 	    GEM_INTR_RX_NOBUF | GEM_INTR_RX_TAG_ERR | GEM_INTR_PERR |
 	    GEM_INTR_BERR
@@ -983,15 +981,15 @@
 	    | GEM_INTR_PCS | GEM_INTR_MIF
 #endif
 	    ));
-	bus_write_4(sc->sc_res[0], GEM_MAC_RX_MASK,
+	GEM_BANK1_WRITE_4(sc, GEM_MAC_RX_MASK,
 	    GEM_MAC_RX_DONE | GEM_MAC_RX_FRAME_CNT);
-	bus_write_4(sc->sc_res[0], GEM_MAC_TX_MASK,
+	GEM_BANK1_WRITE_4(sc, GEM_MAC_TX_MASK,
 	    GEM_MAC_TX_XMIT_DONE | GEM_MAC_TX_DEFER_EXP);
 #ifdef GEM_DEBUG
-	bus_write_4(sc->sc_res[0], GEM_MAC_CONTROL_MASK,
+	GEM_BANK1_WRITE_4(sc, GEM_MAC_CONTROL_MASK,
 	    ~(GEM_MAC_PAUSED | GEM_MAC_PAUSE | GEM_MAC_RESUME));
 #else
-	bus_write_4(sc->sc_res[0], GEM_MAC_CONTROL_MASK,
+	GEM_BANK1_WRITE_4(sc, GEM_MAC_CONTROL_MASK,
 	    GEM_MAC_PAUSED | GEM_MAC_PAUSE | GEM_MAC_RESUME);
 #endif
 
@@ -999,7 +997,7 @@
 
 	/* Enable DMA. */
 	v = gem_ringsize(GEM_NTXDESC /* XXX */);
-	bus_write_4(sc->sc_res[0], GEM_TX_CONFIG,
+	GEM_BANK1_WRITE_4(sc, GEM_TX_CONFIG,
 	    v | GEM_TX_CONFIG_TXDMA_EN |
 	    ((0x400 << 10) & GEM_TX_CONFIG_TXFIFO_TH));
 
@@ -1012,37 +1010,36 @@
 	    GEM_RX_CONFIG_CXM_START_SHFT);
 
 	/* Enable DMA. */
-	bus_write_4(sc->sc_res[0], GEM_RX_CONFIG,
+	GEM_BANK1_WRITE_4(sc, GEM_RX_CONFIG,
 	    v | (GEM_THRSH_1024 << GEM_RX_CONFIG_FIFO_THRS_SHIFT) |
 	    (2 << GEM_RX_CONFIG_FBOFF_SHFT) | GEM_RX_CONFIG_RXDMA_EN);
 
-	bus_write_4(sc->sc_res[0], GEM_RX_BLANKING,
+	GEM_BANK1_WRITE_4(sc, GEM_RX_BLANKING,
 	    (6 << GEM_RX_BLANKING_TIME_SHIFT) | 6);
 
 	/*
 	 * The following value is for an OFF Threshold of about 3/4 full
 	 * and an ON Threshold of 1/4 full.
 	 */
-	bus_write_4(sc->sc_res[0], GEM_RX_PAUSE_THRESH,
+	GEM_BANK1_WRITE_4(sc, GEM_RX_PAUSE_THRESH,
 	    (3 * sc->sc_rxfifosize / 256) |
 	    ((sc->sc_rxfifosize / 256) << 12));
 
 	/* step 11.  Configure Media. */
 
 	/* step 12.  RX_MAC Configuration Register */
-	v = bus_read_4(sc->sc_res[0], GEM_MAC_RX_CONFIG);
+	v = GEM_BANK1_READ_4(sc, GEM_MAC_RX_CONFIG);
 	v |= GEM_MAC_RX_STRIP_CRC;
-	bus_write_4(sc->sc_res[0], GEM_MAC_RX_CONFIG, 0);
-	bus_barrier(sc->sc_res[0], GEM_MAC_RX_CONFIG, 4,
-	    BUS_SPACE_BARRIER_WRITE);
-	if (!gem_bitwait(sc, GEM_MAC_RX_CONFIG, GEM_MAC_RX_ENABLE, 0))
+	GEM_BANK1_WRITE_4(sc, GEM_MAC_RX_CONFIG, 0);
+	GEM_BANK1_BARRIER(sc, GEM_MAC_RX_CONFIG, 4, BUS_SPACE_BARRIER_WRITE);
+	if (!GEM_BANK1_BITWAIT(sc, GEM_MAC_RX_CONFIG, GEM_MAC_RX_ENABLE, 0))
 		device_printf(sc->sc_dev, "cannot disable RX MAC\n");
-	bus_write_4(sc->sc_res[0], GEM_MAC_RX_CONFIG, v);
+	GEM_BANK1_WRITE_4(sc, GEM_MAC_RX_CONFIG, v);
 
 	/* step 14.  Issue Transmit Pending command. */
 
 	/* step 15.  Give the reciever a swift kick. */
-	bus_write_4(sc->sc_res[0], GEM_RX_KICK, GEM_NRXDESC - 4);
+	GEM_BANK1_WRITE_4(sc, GEM_RX_KICK, GEM_NRXDESC - 4);
 
 	ifp->if_drv_flags |= IFF_DRV_RUNNING;
 	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
@@ -1090,6 +1087,9 @@
 		}
 	} else if (error != 0)
 		return (error);
+	/* If nsegs is wrong then the stack is corrupt. */
+	KASSERT(nsegs <= GEM_NTXSEGS,
+	    ("%s: too many DMA segments (%d)", __func__, nsegs));
 	if (nsegs == 0) {
 		m_freem(*m_head);
 		*m_head = NULL;
@@ -1183,60 +1183,59 @@
 	/* These registers are not cleared on reset. */
 	if ((sc->sc_flags & GEM_INITED) == 0) {
 		/* magic values */
-		bus_write_4(sc->sc_res[0], GEM_MAC_IPG0, 0);
-		bus_write_4(sc->sc_res[0], GEM_MAC_IPG1, 8);
-		bus_write_4(sc->sc_res[0], GEM_MAC_IPG2, 4);
+		GEM_BANK1_WRITE_4(sc, GEM_MAC_IPG0, 0);
+		GEM_BANK1_WRITE_4(sc, GEM_MAC_IPG1, 8);
+		GEM_BANK1_WRITE_4(sc, GEM_MAC_IPG2, 4);
 
-		bus_write_4(sc->sc_res[0], GEM_MAC_MAC_MIN_FRAME,
-		    ETHER_MIN_LEN);
+		GEM_BANK1_WRITE_4(sc, GEM_MAC_MAC_MIN_FRAME, ETHER_MIN_LEN);
 		/* max frame and max burst size */
-		bus_write_4(sc->sc_res[0], GEM_MAC_MAC_MAX_FRAME,
+		GEM_BANK1_WRITE_4(sc, GEM_MAC_MAC_MAX_FRAME,
 		    (ETHER_MAX_LEN + ETHER_VLAN_ENCAP_LEN) | (0x2000 << 16));
 
-		bus_write_4(sc->sc_res[0], GEM_MAC_PREAMBLE_LEN, 0x7);
-		bus_write_4(sc->sc_res[0], GEM_MAC_JAM_SIZE, 0x4);
-		bus_write_4(sc->sc_res[0], GEM_MAC_ATTEMPT_LIMIT, 0x10);
+		GEM_BANK1_WRITE_4(sc, GEM_MAC_PREAMBLE_LEN, 0x7);
+		GEM_BANK1_WRITE_4(sc, GEM_MAC_JAM_SIZE, 0x4);
+		GEM_BANK1_WRITE_4(sc, GEM_MAC_ATTEMPT_LIMIT, 0x10);
 		/* dunno... */
-		bus_write_4(sc->sc_res[0], GEM_MAC_CONTROL_TYPE, 0x8088);
-		bus_write_4(sc->sc_res[0], GEM_MAC_RANDOM_SEED,

>>> TRUNCATED FOR MAIL (1000 lines) <<<



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200806160604.m5G64krI062213>