svn commit: r243653 - in projects/counters: . cddl/contrib/opensolaris/cmd/zfs cddl/contrib/opensolaris/cmd/zpool cddl/contrib/opensolaris/cmd/ztest contrib/libc++/include contrib/sendmail/src etc ...
Gleb Smirnoff
glebius at FreeBSD.org
Wed Nov 28 17:34:18 UTC 2012
Author: glebius
Date: Wed Nov 28 17:34:17 2012
New Revision: 243653
URL: http://svnweb.freebsd.org/changeset/base/243653
Log:
Merge r243428 through r243651 from head.
Added:
projects/counters/sys/arm/broadcom/bcm2835/bcm2835_gpio.c
- copied unchanged from r243651, head/sys/arm/broadcom/bcm2835/bcm2835_gpio.c
projects/counters/sys/arm/conf/Makefile
- copied unchanged from r243651, head/sys/arm/conf/Makefile
projects/counters/sys/arm/conf/NOTES
- copied unchanged from r243651, head/sys/arm/conf/NOTES
projects/counters/tools/tools/ath/athalq/ar5416_ds_tdma.c
- copied unchanged from r243651, head/tools/tools/ath/athalq/ar5416_ds_tdma.c
Modified:
projects/counters/UPDATING
projects/counters/cddl/contrib/opensolaris/cmd/zfs/zfs.8
projects/counters/cddl/contrib/opensolaris/cmd/zpool/zpool.8
projects/counters/cddl/contrib/opensolaris/cmd/ztest/ztest.c
projects/counters/contrib/libc++/include/__config
projects/counters/contrib/libc++/include/cstdlib
projects/counters/contrib/libc++/include/cwchar
projects/counters/contrib/sendmail/src/sasl.c
projects/counters/etc/newsyslog.conf
projects/counters/lib/libc/sys/getpeername.2
projects/counters/lib/libc/sys/getsockname.2
projects/counters/share/man/man4/ktr.4
projects/counters/share/man/man4/usb_quirk.4
projects/counters/share/misc/committers-ports.dot
projects/counters/sys/arm/arm/cpufunc.c
projects/counters/sys/arm/arm/locore.S
projects/counters/sys/arm/arm/machdep.c
projects/counters/sys/arm/arm/mpcore_timer.c
projects/counters/sys/arm/at91/files.at91
projects/counters/sys/arm/broadcom/bcm2835/bcm2835_systimer.c
projects/counters/sys/arm/broadcom/bcm2835/files.bcm2835
projects/counters/sys/arm/conf/RPI-B
projects/counters/sys/arm/include/cpufunc.h
projects/counters/sys/arm/mv/mvreg.h
projects/counters/sys/arm/ti/am335x/am335x_dmtimer.c
projects/counters/sys/arm/ti/ti_machdep.c
projects/counters/sys/boot/uboot/lib/elf_freebsd.c
projects/counters/sys/cam/ata/ata_xpt.c
projects/counters/sys/cddl/compat/opensolaris/kern/opensolaris_cmn_err.c
projects/counters/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/space_map.c
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dbuf.h
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab_impl.h
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/space_map.h
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_impl.h
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c
projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
projects/counters/sys/conf/Makefile.arm
projects/counters/sys/conf/NOTES
projects/counters/sys/conf/options.mips
projects/counters/sys/contrib/octeon-sdk/cvmx-dma-engine.c
projects/counters/sys/contrib/octeon-sdk/cvmx-pow.h
projects/counters/sys/contrib/octeon-sdk/cvmx-spi.c
projects/counters/sys/contrib/octeon-sdk/cvmx-utils.h
projects/counters/sys/contrib/octeon-sdk/cvmx-warn.c
projects/counters/sys/contrib/octeon-sdk/cvmx.h
projects/counters/sys/contrib/octeon-sdk/octeon-model.c
projects/counters/sys/contrib/octeon-sdk/octeon-model.h
projects/counters/sys/dev/ath/ath_hal/ah.h
projects/counters/sys/dev/ath/ath_hal/ar5212/ar5212_beacon.c
projects/counters/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c
projects/counters/sys/dev/ath/if_ath.c
projects/counters/sys/dev/ath/if_ath_alq.h
projects/counters/sys/dev/ath/if_ath_tdma.c
projects/counters/sys/dev/ath/if_ath_tx.c
projects/counters/sys/dev/bce/if_bce.c
projects/counters/sys/dev/bxe/if_bxe.c
projects/counters/sys/dev/e1000/if_igb.c
projects/counters/sys/dev/gpio/gpiobus.c
projects/counters/sys/dev/iwn/if_iwn.c
projects/counters/sys/dev/sound/pci/hda/hdaa.c
projects/counters/sys/dev/sound/pcm/buffer.c
projects/counters/sys/dev/sound/pcm/sound.c
projects/counters/sys/dev/usb/quirk/usb_quirk.c
projects/counters/sys/dev/usb/quirk/usb_quirk.h
projects/counters/sys/fs/ext2fs/ext2_alloc.c
projects/counters/sys/fs/smbfs/smbfs_node.c
projects/counters/sys/fs/smbfs/smbfs_vnops.c
projects/counters/sys/kern/capabilities.conf
projects/counters/sys/kern/init_sysent.c
projects/counters/sys/kern/kern_mbuf.c
projects/counters/sys/kern/kern_proc.c
projects/counters/sys/kern/kern_shutdown.c
projects/counters/sys/kern/kern_sig.c
projects/counters/sys/kern/subr_param.c
projects/counters/sys/kern/uipc_socket.c
projects/counters/sys/kern/vfs_lookup.c
projects/counters/sys/kern/vfs_subr.c
projects/counters/sys/kern/vfs_vnops.c
projects/counters/sys/mips/cavium/octeon_machdep.c
projects/counters/sys/mips/conf/OCTEON1
projects/counters/sys/net/if_ethersubr.c
projects/counters/sys/net/if_tap.c
projects/counters/sys/net/if_vlan.c
projects/counters/sys/net80211/ieee80211_freebsd.h
projects/counters/sys/netinet/ip_output.c
projects/counters/sys/netinet/sctp_pcb.c
projects/counters/sys/netinet/sctp_peeloff.c
projects/counters/sys/netinet/sctp_peeloff.h
projects/counters/sys/netinet/sctp_usrreq.c
projects/counters/sys/netinet/tcp_subr.c
projects/counters/sys/netinet/tcp_timer.c
projects/counters/sys/netinet/tcp_timer.h
projects/counters/sys/sys/eventhandler.h
projects/counters/sys/sys/mbuf.h
projects/counters/sys/sys/namei.h
projects/counters/sys/sys/param.h
projects/counters/sys/sys/vnode.h
projects/counters/sys/vm/vm_map.c
projects/counters/usr.bin/cut/cut.c
projects/counters/usr.bin/passwd/Makefile
projects/counters/usr.sbin/bsdconfig/networking/include/messages.subr
projects/counters/usr.sbin/bsdconfig/networking/share/ipaddr.subr
projects/counters/usr.sbin/bsdconfig/share/dialog.subr
projects/counters/usr.sbin/bsdconfig/share/mustberoot.subr
projects/counters/usr.sbin/bsdconfig/startup/share/rcedit.subr
projects/counters/usr.sbin/bsdconfig/timezone/share/zones.subr
projects/counters/usr.sbin/ifmcstat/ifmcstat.c
projects/counters/usr.sbin/nfsd/nfsd.c
projects/counters/usr.sbin/pkg_install/add/main.c
projects/counters/usr.sbin/pkg_install/add/pkg_add.1
projects/counters/usr.sbin/pkg_install/create/pkg_create.1
projects/counters/usr.sbin/pkg_install/delete/pkg_delete.1
projects/counters/usr.sbin/pkg_install/info/pkg_info.1
projects/counters/usr.sbin/pkg_install/lib/lib.h
projects/counters/usr.sbin/pkg_install/lib/pkgng.c
projects/counters/usr.sbin/pkg_install/updating/pkg_updating.1
projects/counters/usr.sbin/pkg_install/version/pkg_version.1
Directory Properties:
projects/counters/ (props changed)
projects/counters/cddl/contrib/opensolaris/ (props changed)
projects/counters/cddl/contrib/opensolaris/cmd/zfs/ (props changed)
projects/counters/contrib/libc++/ (props changed)
projects/counters/contrib/sendmail/ (props changed)
projects/counters/lib/libc/ (props changed)
projects/counters/share/man/man4/ (props changed)
projects/counters/sys/ (props changed)
projects/counters/sys/boot/ (props changed)
projects/counters/sys/cddl/contrib/opensolaris/ (props changed)
projects/counters/sys/conf/ (props changed)
projects/counters/sys/contrib/octeon-sdk/ (props changed)
Modified: projects/counters/UPDATING
==============================================================================
--- projects/counters/UPDATING Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/UPDATING Wed Nov 28 17:34:17 2012 (r243653)
@@ -24,6 +24,14 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 10
disable the most expensive debugging functionality run
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
+20121117:
+ The sin6_scope_id member variable in struct sockaddr_in6 is now
+ filled by the kernel before passing the structure to the userland via
+ sysctl or routing socket. This means the KAME-specific embedded scope
+ id in sin6_addr.s6_addr[2] is always cleared in userland application.
+ This behavior can be controlled by net.inet6.ip6.deembed_scopeid.
+ __FreeBSD_version is bumped to 1000025.
+
20121105:
On i386 and amd64 systems WITH_CLANG_IS_CC is now the default.
This means that the world and kernel will be compiled with clang
Modified: projects/counters/cddl/contrib/opensolaris/cmd/zfs/zfs.8
==============================================================================
--- projects/counters/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Wed Nov 28 17:34:17 2012 (r243653)
@@ -27,7 +27,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd September 5, 2012
+.Dd November 26, 2012
.Dt ZFS 8
.Os
.Sh NAME
@@ -760,7 +760,7 @@ If no inheritable
.Tn ACE Ns s
exist that affect the mode, then the mode is set in accordance to the requested
mode from the application.
-.It Sy aclmode Ns = Ns Cm discard | groupmask | passthrough
+.It Sy aclmode Ns = Ns Cm discard | groupmask | passthrough | restricted
Controls how an
.Tn ACL
is modified during
@@ -790,6 +790,32 @@ indicates that no changes are made to th
other than creating or updating the necessary
.Tn ACL
entries to represent the new mode of the file or directory.
+An
+.Sy aclmode
+property of
+.Cm restricted
+will cause the
+.Xr chmod 2
+operation to return an error when used on any file or directory which has
+a non-trivial
+.Tn ACL
+whose entries can not be represented by a mode.
+.Xr chmod 2
+is required to change the set user ID, set group ID, or sticky bits on a file
+or directory, as they do not have equivalent
+.Tn ACL
+entries.
+In order to use
+.Xr chmod 2
+on a file or directory with a non-trivial
+.Tn ACL
+when
+.Sy aclmode
+is set to
+.Cm restricted ,
+you must first remove all
+.Tn ACL
+entries which do not represent the current mode.
.It Sy atime Ns = Ns Cm on | off
Controls whether the access time for files is updated when they are read.
Turning this property off avoids producing write traffic when reading files and
@@ -830,7 +856,7 @@ command or unmounted by the
command.
.Pp
This property is not inherited.
-.It Sy checksum Ns = Ns Cm on | off | fletcher2 | fletcher4
+.It Sy checksum Ns = Ns Cm on | off | fletcher2 | fletcher4 | sha256
Controls the checksum used to verify data integrity. The default value is
.Cm on ,
which automatically selects an appropriate algorithm (currently,
Modified: projects/counters/cddl/contrib/opensolaris/cmd/zpool/zpool.8
==============================================================================
--- projects/counters/cddl/contrib/opensolaris/cmd/zpool/zpool.8 Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/cddl/contrib/opensolaris/cmd/zpool/zpool.8 Wed Nov 28 17:34:17 2012 (r243653)
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd November 28, 2011
+.Dd November 15, 2012
.Dt ZPOOL 8
.Os
.Sh NAME
Modified: projects/counters/cddl/contrib/opensolaris/cmd/ztest/ztest.c
==============================================================================
--- projects/counters/cddl/contrib/opensolaris/cmd/ztest/ztest.c Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/cddl/contrib/opensolaris/cmd/ztest/ztest.c Wed Nov 28 17:34:17 2012 (r243653)
@@ -204,6 +204,7 @@ enum ztest_io_type {
ZTEST_IO_WRITE_ZEROES,
ZTEST_IO_TRUNCATE,
ZTEST_IO_SETATTR,
+ ZTEST_IO_REWRITE,
ZTEST_IO_TYPES
};
@@ -330,6 +331,7 @@ ztest_func_t ztest_vdev_add_remove;
ztest_func_t ztest_vdev_aux_add_remove;
ztest_func_t ztest_split_pool;
ztest_func_t ztest_reguid;
+ztest_func_t ztest_spa_upgrade;
uint64_t zopt_always = 0ULL * NANOSEC; /* all the time */
uint64_t zopt_incessant = 1ULL * NANOSEC / 10; /* every 1/10 second */
@@ -363,6 +365,7 @@ ztest_info_t ztest_info[] = {
{ ztest_reguid, 1, &zopt_sometimes },
{ ztest_spa_rename, 1, &zopt_rarely },
{ ztest_scrub, 1, &zopt_rarely },
+ { ztest_spa_upgrade, 1, &zopt_rarely },
{ ztest_dsl_dataset_promote_busy, 1, &zopt_rarely },
{ ztest_vdev_attach_detach, 1, &zopt_rarely },
{ ztest_vdev_LUN_growth, 1, &zopt_rarely },
@@ -797,7 +800,7 @@ ztest_get_ashift(void)
}
static nvlist_t *
-make_vdev_file(char *path, char *aux, size_t size, uint64_t ashift)
+make_vdev_file(char *path, char *aux, char *pool, size_t size, uint64_t ashift)
{
char pathbuf[MAXPATHLEN];
uint64_t vdev;
@@ -813,12 +816,13 @@ make_vdev_file(char *path, char *aux, si
vdev = ztest_shared->zs_vdev_aux;
(void) snprintf(path, sizeof (pathbuf),
ztest_aux_template, ztest_opts.zo_dir,
- ztest_opts.zo_pool, aux, vdev);
+ pool == NULL ? ztest_opts.zo_pool : pool,
+ aux, vdev);
} else {
vdev = ztest_shared->zs_vdev_next_leaf++;
(void) snprintf(path, sizeof (pathbuf),
ztest_dev_template, ztest_opts.zo_dir,
- ztest_opts.zo_pool, vdev);
+ pool == NULL ? ztest_opts.zo_pool : pool, vdev);
}
}
@@ -840,17 +844,18 @@ make_vdev_file(char *path, char *aux, si
}
static nvlist_t *
-make_vdev_raidz(char *path, char *aux, size_t size, uint64_t ashift, int r)
+make_vdev_raidz(char *path, char *aux, char *pool, size_t size,
+ uint64_t ashift, int r)
{
nvlist_t *raidz, **child;
int c;
if (r < 2)
- return (make_vdev_file(path, aux, size, ashift));
+ return (make_vdev_file(path, aux, pool, size, ashift));
child = umem_alloc(r * sizeof (nvlist_t *), UMEM_NOFAIL);
for (c = 0; c < r; c++)
- child[c] = make_vdev_file(path, aux, size, ashift);
+ child[c] = make_vdev_file(path, aux, pool, size, ashift);
VERIFY(nvlist_alloc(&raidz, NV_UNIQUE_NAME, 0) == 0);
VERIFY(nvlist_add_string(raidz, ZPOOL_CONFIG_TYPE,
@@ -869,19 +874,19 @@ make_vdev_raidz(char *path, char *aux, s
}
static nvlist_t *
-make_vdev_mirror(char *path, char *aux, size_t size, uint64_t ashift,
- int r, int m)
+make_vdev_mirror(char *path, char *aux, char *pool, size_t size,
+ uint64_t ashift, int r, int m)
{
nvlist_t *mirror, **child;
int c;
if (m < 1)
- return (make_vdev_raidz(path, aux, size, ashift, r));
+ return (make_vdev_raidz(path, aux, pool, size, ashift, r));
child = umem_alloc(m * sizeof (nvlist_t *), UMEM_NOFAIL);
for (c = 0; c < m; c++)
- child[c] = make_vdev_raidz(path, aux, size, ashift, r);
+ child[c] = make_vdev_raidz(path, aux, pool, size, ashift, r);
VERIFY(nvlist_alloc(&mirror, NV_UNIQUE_NAME, 0) == 0);
VERIFY(nvlist_add_string(mirror, ZPOOL_CONFIG_TYPE,
@@ -898,8 +903,8 @@ make_vdev_mirror(char *path, char *aux,
}
static nvlist_t *
-make_vdev_root(char *path, char *aux, size_t size, uint64_t ashift,
- int log, int r, int m, int t)
+make_vdev_root(char *path, char *aux, char *pool, size_t size, uint64_t ashift,
+ int log, int r, int m, int t)
{
nvlist_t *root, **child;
int c;
@@ -909,7 +914,8 @@ make_vdev_root(char *path, char *aux, si
child = umem_alloc(t * sizeof (nvlist_t *), UMEM_NOFAIL);
for (c = 0; c < t; c++) {
- child[c] = make_vdev_mirror(path, aux, size, ashift, r, m);
+ child[c] = make_vdev_mirror(path, aux, pool, size, ashift,
+ r, m);
VERIFY(nvlist_add_uint64(child[c], ZPOOL_CONFIG_IS_LOG,
log) == 0);
}
@@ -927,6 +933,27 @@ make_vdev_root(char *path, char *aux, si
return (root);
}
+/*
+ * Find a random spa version. Returns back a random spa version in the
+ * range [initial_version, SPA_VERSION_FEATURES].
+ */
+static uint64_t
+ztest_random_spa_version(uint64_t initial_version)
+{
+ uint64_t version = initial_version;
+
+ if (version <= SPA_VERSION_BEFORE_FEATURES) {
+ version = version +
+ ztest_random(SPA_VERSION_BEFORE_FEATURES - version + 1);
+ }
+
+ if (version > SPA_VERSION_BEFORE_FEATURES)
+ version = SPA_VERSION_FEATURES;
+
+ ASSERT(SPA_VERSION_IS_SUPPORTED(version));
+ return (version);
+}
+
static int
ztest_random_blocksize(void)
{
@@ -1841,6 +1868,12 @@ ztest_get_data(void *arg, lr_write_t *lr
DMU_READ_NO_PREFETCH);
if (error == 0) {
+ blkptr_t *obp = dmu_buf_get_blkptr(db);
+ if (obp) {
+ ASSERT(BP_IS_HOLE(bp));
+ *bp = *obp;
+ }
+
zgd->zgd_db = db;
zgd->zgd_bp = bp;
@@ -1986,6 +2019,9 @@ ztest_remove(ztest_ds_t *zd, ztest_od_t
continue;
}
+ /*
+ * No object was found.
+ */
if (od->od_object == 0)
continue;
@@ -2101,6 +2137,7 @@ ztest_prealloc(ztest_ds_t *zd, uint64_t
static void
ztest_io(ztest_ds_t *zd, uint64_t object, uint64_t offset)
{
+ int err;
ztest_block_tag_t wbt;
dmu_object_info_t doi;
enum ztest_io_type io_type;
@@ -2153,6 +2190,25 @@ ztest_io(ztest_ds_t *zd, uint64_t object
case ZTEST_IO_SETATTR:
(void) ztest_setattr(zd, object);
break;
+
+ case ZTEST_IO_REWRITE:
+ (void) rw_rdlock(&ztest_name_lock);
+ err = ztest_dsl_prop_set_uint64(zd->zd_name,
+ ZFS_PROP_CHECKSUM, spa_dedup_checksum(ztest_spa),
+ B_FALSE);
+ VERIFY(err == 0 || err == ENOSPC);
+ err = ztest_dsl_prop_set_uint64(zd->zd_name,
+ ZFS_PROP_COMPRESSION,
+ ztest_random_dsl_prop(ZFS_PROP_COMPRESSION),
+ B_FALSE);
+ VERIFY(err == 0 || err == ENOSPC);
+ (void) rw_unlock(&ztest_name_lock);
+
+ VERIFY0(dmu_read(zd->zd_os, object, offset, blocksize, data,
+ DMU_READ_NO_PREFETCH));
+
+ (void) ztest_write(zd, object, offset, blocksize, data);
+ break;
}
(void) rw_unlock(&zd->zd_zilog_lock);
@@ -2240,7 +2296,12 @@ ztest_zil_remount(ztest_ds_t *zd, uint64
{
objset_t *os = zd->zd_os;
- VERIFY(mutex_lock(&zd->zd_dirobj_lock) == 0);
+ /*
+ * We grab the zd_dirobj_lock to ensure that no other thread is
+ * updating the zil (i.e. adding in-memory log records) and the
+ * zd_zilog_lock to block any I/O.
+ */
+ VERIFY0(mutex_lock(&zd->zd_dirobj_lock));
(void) rw_wrlock(&zd->zd_zilog_lock);
/* zfsvfs_teardown() */
@@ -2269,7 +2330,7 @@ ztest_spa_create_destroy(ztest_ds_t *zd,
/*
* Attempt to create using a bad file.
*/
- nvroot = make_vdev_root("/dev/bogus", NULL, 0, 0, 0, 0, 0, 1);
+ nvroot = make_vdev_root("/dev/bogus", NULL, NULL, 0, 0, 0, 0, 0, 1);
VERIFY3U(ENOENT, ==,
spa_create("ztest_bad_file", nvroot, NULL, NULL, NULL));
nvlist_free(nvroot);
@@ -2277,7 +2338,7 @@ ztest_spa_create_destroy(ztest_ds_t *zd,
/*
* Attempt to create using a bad mirror.
*/
- nvroot = make_vdev_root("/dev/bogus", NULL, 0, 0, 0, 0, 2, 1);
+ nvroot = make_vdev_root("/dev/bogus", NULL, NULL, 0, 0, 0, 0, 2, 1);
VERIFY3U(ENOENT, ==,
spa_create("ztest_bad_mirror", nvroot, NULL, NULL, NULL));
nvlist_free(nvroot);
@@ -2287,7 +2348,7 @@ ztest_spa_create_destroy(ztest_ds_t *zd,
* what's in the nvroot; we should fail with EEXIST.
*/
(void) rw_rdlock(&ztest_name_lock);
- nvroot = make_vdev_root("/dev/bogus", NULL, 0, 0, 0, 0, 0, 1);
+ nvroot = make_vdev_root("/dev/bogus", NULL, NULL, 0, 0, 0, 0, 0, 1);
VERIFY3U(EEXIST, ==, spa_create(zo->zo_pool, nvroot, NULL, NULL, NULL));
nvlist_free(nvroot);
VERIFY3U(0, ==, spa_open(zo->zo_pool, &spa, FTAG));
@@ -2297,6 +2358,78 @@ ztest_spa_create_destroy(ztest_ds_t *zd,
(void) rw_unlock(&ztest_name_lock);
}
+/* ARGSUSED */
+void
+ztest_spa_upgrade(ztest_ds_t *zd, uint64_t id)
+{
+ spa_t *spa;
+ uint64_t initial_version = SPA_VERSION_INITIAL;
+ uint64_t version, newversion;
+ nvlist_t *nvroot, *props;
+ char *name;
+
+ VERIFY0(mutex_lock(&ztest_vdev_lock));
+ name = kmem_asprintf("%s_upgrade", ztest_opts.zo_pool);
+
+ /*
+ * Clean up from previous runs.
+ */
+ (void) spa_destroy(name);
+
+ nvroot = make_vdev_root(NULL, NULL, name, ztest_opts.zo_vdev_size, 0,
+ 0, ztest_opts.zo_raidz, ztest_opts.zo_mirrors, 1);
+
+ /*
+ * If we're configuring a RAIDZ device then make sure that the
+ * the initial version is capable of supporting that feature.
+ */
+ switch (ztest_opts.zo_raidz_parity) {
+ case 0:
+ case 1:
+ initial_version = SPA_VERSION_INITIAL;
+ break;
+ case 2:
+ initial_version = SPA_VERSION_RAIDZ2;
+ break;
+ case 3:
+ initial_version = SPA_VERSION_RAIDZ3;
+ break;
+ }
+
+ /*
+ * Create a pool with a spa version that can be upgraded. Pick
+ * a value between initial_version and SPA_VERSION_BEFORE_FEATURES.
+ */
+ do {
+ version = ztest_random_spa_version(initial_version);
+ } while (version > SPA_VERSION_BEFORE_FEATURES);
+
+ props = fnvlist_alloc();
+ fnvlist_add_uint64(props,
+ zpool_prop_to_name(ZPOOL_PROP_VERSION), version);
+ VERIFY0(spa_create(name, nvroot, props, NULL, NULL));
+ fnvlist_free(nvroot);
+ fnvlist_free(props);
+
+ VERIFY0(spa_open(name, &spa, FTAG));
+ VERIFY3U(spa_version(spa), ==, version);
+ newversion = ztest_random_spa_version(version + 1);
+
+ if (ztest_opts.zo_verbose >= 4) {
+ (void) printf("upgrading spa version from %llu to %llu\n",
+ (u_longlong_t)version, (u_longlong_t)newversion);
+ }
+
+ spa_upgrade(spa, newversion);
+ VERIFY3U(spa_version(spa), >, version);
+ VERIFY3U(spa_version(spa), ==, fnvlist_lookup_uint64(spa->spa_config,
+ zpool_prop_to_name(ZPOOL_PROP_VERSION)));
+ spa_close(spa, FTAG);
+
+ strfree(name);
+ VERIFY0(mutex_unlock(&ztest_vdev_lock));
+}
+
static vdev_t *
vdev_lookup_by_path(vdev_t *vd, const char *path)
{
@@ -2386,7 +2519,7 @@ ztest_vdev_add_remove(ztest_ds_t *zd, ui
/*
* Make 1/4 of the devices be log devices.
*/
- nvroot = make_vdev_root(NULL, NULL,
+ nvroot = make_vdev_root(NULL, NULL, NULL,
ztest_opts.zo_vdev_size, 0,
ztest_random(4) == 0, ztest_opts.zo_raidz,
zs->zs_mirrors, 1);
@@ -2463,7 +2596,7 @@ ztest_vdev_aux_add_remove(ztest_ds_t *zd
/*
* Add a new device.
*/
- nvlist_t *nvroot = make_vdev_root(NULL, aux,
+ nvlist_t *nvroot = make_vdev_root(NULL, aux, NULL,
(ztest_opts.zo_vdev_size * 5) / 4, 0, 0, 0, 0, 1);
error = spa_vdev_add(spa, nvroot);
if (error != 0)
@@ -2732,7 +2865,7 @@ ztest_vdev_attach_detach(ztest_ds_t *zd,
/*
* Build the nvlist describing newpath.
*/
- root = make_vdev_root(newpath, NULL, newvd == NULL ? newsize : 0,
+ root = make_vdev_root(newpath, NULL, NULL, newvd == NULL ? newsize : 0,
ashift, 0, 0, 0, 1);
error = spa_vdev_attach(spa, oldguid, root, replacing);
@@ -4827,8 +4960,8 @@ ztest_ddt_repair(ztest_ds_t *zd, uint64_
*/
for (int i = 0; i < copies; i++) {
uint64_t offset = i * blocksize;
- VERIFY(dmu_buf_hold(os, object, offset, FTAG, &db,
- DMU_READ_NO_PREFETCH) == 0);
+ VERIFY0(dmu_buf_hold(os, object, offset, FTAG, &db,
+ DMU_READ_NO_PREFETCH));
ASSERT(db->db_offset == offset);
ASSERT(db->db_size == blocksize);
ASSERT(ztest_pattern_match(db->db_data, db->db_size, pattern) ||
@@ -4844,8 +4977,8 @@ ztest_ddt_repair(ztest_ds_t *zd, uint64_
/*
* Find out what block we got.
*/
- VERIFY(dmu_buf_hold(os, object, 0, FTAG, &db,
- DMU_READ_NO_PREFETCH) == 0);
+ VERIFY0(dmu_buf_hold(os, object, 0, FTAG, &db,
+ DMU_READ_NO_PREFETCH));
blk = *((dmu_buf_impl_t *)db)->db_blkptr;
dmu_buf_rele(db, FTAG);
@@ -4900,7 +5033,7 @@ ztest_reguid(ztest_ds_t *zd, uint64_t id
if (error != 0)
return;
- if (ztest_opts.zo_verbose >= 3) {
+ if (ztest_opts.zo_verbose >= 4) {
(void) printf("Changed guid old %llu -> %llu\n",
(u_longlong_t)orig, (u_longlong_t)spa_guid(spa));
}
@@ -5523,6 +5656,8 @@ ztest_freeze(void)
kernel_init(FREAD | FWRITE);
VERIFY3U(0, ==, spa_open(ztest_opts.zo_pool, &spa, FTAG));
VERIFY3U(0, ==, ztest_dataset_open(0));
+ spa->spa_debug = B_TRUE;
+ ztest_spa = spa;
/*
* Force the first log block to be transactionally allocated.
@@ -5647,7 +5782,7 @@ ztest_init(ztest_shared_t *zs)
ztest_shared->zs_vdev_next_leaf = 0;
zs->zs_splits = 0;
zs->zs_mirrors = ztest_opts.zo_mirrors;
- nvroot = make_vdev_root(NULL, NULL, ztest_opts.zo_vdev_size, 0,
+ nvroot = make_vdev_root(NULL, NULL, NULL, ztest_opts.zo_vdev_size, 0,
0, ztest_opts.zo_raidz, zs->zs_mirrors, 1);
props = make_random_props();
for (int i = 0; i < SPA_FEATURES; i++) {
Modified: projects/counters/contrib/libc++/include/__config
==============================================================================
--- projects/counters/contrib/libc++/include/__config Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/contrib/libc++/include/__config Wed Nov 28 17:34:17 2012 (r243653)
@@ -51,6 +51,9 @@
# define _LIBCPP_LITTLE_ENDIAN 0
# define _LIBCPP_BIG_ENDIAN 1
# endif // _BYTE_ORDER == _LITTLE_ENDIAN
+# ifndef __LONG_LONG_SUPPORTED
+# define _LIBCPP_HAS_NO_LONG_LONG
+# endif // __LONG_LONG_SUPPORTED
#endif // __FreeBSD__
#ifdef _WIN32
Modified: projects/counters/contrib/libc++/include/cstdlib
==============================================================================
--- projects/counters/contrib/libc++/include/cstdlib Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/contrib/libc++/include/cstdlib Wed Nov 28 17:34:17 2012 (r243653)
@@ -97,18 +97,26 @@ _LIBCPP_BEGIN_NAMESPACE_STD
using ::size_t;
using ::div_t;
using ::ldiv_t;
+#ifndef _LIBCPP_HAS_NO_LONG_LONG
using ::lldiv_t;
+#endif // _LIBCPP_HAS_NO_LONG_LONG
using ::atof;
using ::atoi;
using ::atol;
+#ifndef _LIBCPP_HAS_NO_LONG_LONG
using ::atoll;
+#endif // _LIBCPP_HAS_NO_LONG_LONG
using ::strtod;
using ::strtof;
using ::strtold;
using ::strtol;
+#ifndef _LIBCPP_HAS_NO_LONG_LONG
using ::strtoll;
+#endif // _LIBCPP_HAS_NO_LONG_LONG
using ::strtoul;
+#ifndef _LIBCPP_HAS_NO_LONG_LONG
using ::strtoull;
+#endif // _LIBCPP_HAS_NO_LONG_LONG
using ::rand;
using ::srand;
using ::calloc;
@@ -125,10 +133,14 @@ using ::bsearch;
using ::qsort;
using ::abs;
using ::labs;
+#ifndef _LIBCPP_HAS_NO_LONG_LONG
using ::llabs;
+#endif // _LIBCPP_HAS_NO_LONG_LONG
using ::div;
using ::ldiv;
+#ifndef _LIBCPP_HAS_NO_LONG_LONG
using ::lldiv;
+#endif // _LIBCPP_HAS_NO_LONG_LONG
using ::mblen;
using ::mbtowc;
using ::wctomb;
@@ -145,10 +157,14 @@ using ::aligned_alloc;
// MSVC already has the correct prototype in <stdlib.h.h> #ifdef __cplusplus
#if !defined(_MSC_VER) && !defined(__sun__)
inline _LIBCPP_INLINE_VISIBILITY long abs( long __x) _NOEXCEPT {return labs(__x);}
+#ifndef _LIBCPP_HAS_NO_LONG_LONG
inline _LIBCPP_INLINE_VISIBILITY long long abs(long long __x) _NOEXCEPT {return llabs(__x);}
+#endif // _LIBCPP_HAS_NO_LONG_LONG
inline _LIBCPP_INLINE_VISIBILITY ldiv_t div( long __x, long __y) _NOEXCEPT {return ldiv(__x, __y);}
+#ifndef _LIBCPP_HAS_NO_LONG_LONG
inline _LIBCPP_INLINE_VISIBILITY lldiv_t div(long long __x, long long __y) _NOEXCEPT {return lldiv(__x, __y);}
+#endif // _LIBCPP_HAS_NO_LONG_LONG
#endif // _MSC_VER
_LIBCPP_END_NAMESPACE_STD
Modified: projects/counters/contrib/libc++/include/cwchar
==============================================================================
--- projects/counters/contrib/libc++/include/cwchar Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/contrib/libc++/include/cwchar Wed Nov 28 17:34:17 2012 (r243653)
@@ -151,9 +151,13 @@ using ::wcstof;
using ::wcstold;
#endif // _MSC_VER
using ::wcstol;
+#ifndef _LIBCPP_HAS_NO_LONG_LONG
using ::wcstoll;
+#endif // _LIBCPP_HAS_NO_LONG_LONG
using ::wcstoul;
+#ifndef _LIBCPP_HAS_NO_LONG_LONG
using ::wcstoull;
+#endif // _LIBCPP_HAS_NO_LONG_LONG
using ::wcscpy;
using ::wcsncpy;
using ::wcscat;
Modified: projects/counters/contrib/sendmail/src/sasl.c
==============================================================================
--- projects/counters/contrib/sendmail/src/sasl.c Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/contrib/sendmail/src/sasl.c Wed Nov 28 17:34:17 2012 (r243653)
@@ -24,9 +24,15 @@ SM_RCSID("@(#)$Id: sasl.c,v 8.22 2006/08
** using unsigned long: for portability, it should be size_t.
*/
-void *sm_sasl_malloc __P((unsigned long));
-static void *sm_sasl_calloc __P((unsigned long, unsigned long));
-static void *sm_sasl_realloc __P((void *, unsigned long));
+#if defined(SASL_VERSION_FULL) && SASL_VERSION_FULL >= 0x02011a
+#define SM_SASL_SIZE_T size_t
+#else /* defined(SASL_VERSION_FULL) && SASL_VERSION_FULL >= 0x02011a */
+#define SM_SASL_SIZE_T unsigned long
+#endif /* defined(SASL_VERSION_FULL) && SASL_VERSION_FULL >= 0x02011a */
+
+void *sm_sasl_malloc __P((SM_SASL_SIZE_T));
+static void *sm_sasl_calloc __P((SM_SASL_SIZE_T, SM_SASL_SIZE_T));
+static void *sm_sasl_realloc __P((void *, SM_SASL_SIZE_T));
void sm_sasl_free __P((void *));
/*
@@ -50,7 +56,7 @@ void sm_sasl_free __P((void *));
void *
sm_sasl_malloc(size)
- unsigned long size;
+ SM_SASL_SIZE_T size;
{
return sm_malloc((size_t) size);
}
@@ -71,8 +77,8 @@ sm_sasl_malloc(size)
static void *
sm_sasl_calloc(nelem, elemsize)
- unsigned long nelem;
- unsigned long elemsize;
+ SM_SASL_SIZE_T nelem;
+ SM_SASL_SIZE_T elemsize;
{
size_t size;
void *p;
@@ -99,7 +105,7 @@ sm_sasl_calloc(nelem, elemsize)
static void *
sm_sasl_realloc(o, size)
void *o;
- unsigned long size;
+ SM_SASL_SIZE_T size;
{
return sm_realloc(o, (size_t) size);
}
Modified: projects/counters/etc/newsyslog.conf
==============================================================================
--- projects/counters/etc/newsyslog.conf Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/etc/newsyslog.conf Wed Nov 28 17:34:17 2012 (r243653)
@@ -35,5 +35,5 @@
/var/log/security 600 10 100 * JC
/var/log/sendmail.st 640 10 * 168 B
/var/log/utx.log 644 3 * @01T05 B
-/var/log/weekly.log 640 5 1 $W6D0 JN
+/var/log/weekly.log 640 5 * $W6D0 JN
/var/log/xferlog 600 7 100 * JC
Modified: projects/counters/lib/libc/sys/getpeername.2
==============================================================================
--- projects/counters/lib/libc/sys/getpeername.2 Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/lib/libc/sys/getpeername.2 Wed Nov 28 17:34:17 2012 (r243653)
@@ -67,6 +67,10 @@ The argument
is not a valid descriptor.
.It Bq Er ECONNRESET
The connection has been reset by the peer.
+.It Bq Er EINVAL
+The value of the
+.Fa namelen
+argument is not valid.
.It Bq Er ENOTSOCK
The argument
.Fa s
Modified: projects/counters/lib/libc/sys/getsockname.2
==============================================================================
--- projects/counters/lib/libc/sys/getsockname.2 Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/lib/libc/sys/getsockname.2 Wed Nov 28 17:34:17 2012 (r243653)
@@ -66,6 +66,10 @@ The argument
is not a valid descriptor.
.It Bq Er ECONNRESET
The connection has been reset by the peer.
+.It Bq Er EINVAL
+The value of the
+.Fa namelen
+argument is not valid.
.It Bq Er ENOTSOCK
The argument
.Fa s
Modified: projects/counters/share/man/man4/ktr.4
==============================================================================
--- projects/counters/share/man/man4/ktr.4 Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/share/man/man4/ktr.4 Wed Nov 28 17:34:17 2012 (r243653)
@@ -53,7 +53,7 @@ The
.Dv KTR_ENTRIES
option sets the size of the buffer of events.
The size of the buffer in the currently running kernel can be found via the
-read-only sysctl
+sysctl
.Va debug.ktr.entries .
By default the buffer contains 1024 entries.
.Ss Event Masking
Modified: projects/counters/share/man/man4/usb_quirk.4
==============================================================================
--- projects/counters/share/man/man4/usb_quirk.4 Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/share/man/man4/usb_quirk.4 Wed Nov 28 17:34:17 2012 (r243653)
@@ -76,8 +76,6 @@ mouse sends an unknown leading byte
mouse has Z-axis reversed
.It UQ_NO_STRINGS
string descriptors are broken
-.It UQ_OPEN_CLEARSTALL
-device needs clear endpoint stall
.It UQ_POWER_CLAIM
hub lies about power status
.It UQ_SPUR_BUT_UP
Modified: projects/counters/share/misc/committers-ports.dot
==============================================================================
--- projects/counters/share/misc/committers-ports.dot Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/share/misc/committers-ports.dot Wed Nov 28 17:34:17 2012 (r243653)
@@ -58,6 +58,7 @@ avilla [label="Alberto Villa\navilla at Fre
avl [label="Alexander Logvinov\navl at FreeBSD.org\n2009/05/27"]
az [label="Andrej Zverev\naz at FreeBSD.org\n2005/10/03"]
bapt [label="Baptiste Daroussin\nbapt at FreeBSD.org\n2010/07/27"]
+bar [label="Barbara Guida\nbar at FreeBSD.org\n2012/11/25"]
bdrewery [label="Bryan Drewery\nbdrewery at FreeBSD.org\n2012/07/31"]
beat [label="Beat Gaetzi\nbeat at FreeBSD.org\n2009/01/28"]
beech [label="Beech Rintoul\nbeech at FreeBSD.org\n2007/05/30"]
@@ -297,6 +298,7 @@ fjoe -> flo
fjoe -> krion
fjoe -> osa
+flo -> bar
flo -> jase
flz -> garga
@@ -437,6 +439,7 @@ philip -> koitsu
rafan -> chinsan
+rene -> bar
rene -> crees
rene -> jgh
rene -> olivierd
Modified: projects/counters/sys/arm/arm/cpufunc.c
==============================================================================
--- projects/counters/sys/arm/arm/cpufunc.c Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/sys/arm/arm/cpufunc.c Wed Nov 28 17:34:17 2012 (r243653)
@@ -74,7 +74,13 @@ __FBSDID("$FreeBSD$");
#include <arm/xscale/i80321/i80321var.h>
#endif
-#if defined(CPU_XSCALE_81342)
+/*
+ * Some definitions in i81342reg.h clash with i80321reg.h.
+ * This only happens for the LINT kernel. As it happens,
+ * we don't need anything from i81342reg.h that we already
+ * got from somewhere else during a LINT compile.
+ */
+#if defined(CPU_XSCALE_81342) && !defined(COMPILING_LINT)
#include <arm/xscale/i8134x/i81342reg.h>
#endif
Modified: projects/counters/sys/arm/arm/locore.S
==============================================================================
--- projects/counters/sys/arm/arm/locore.S Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/sys/arm/arm/locore.S Wed Nov 28 17:34:17 2012 (r243653)
@@ -181,7 +181,7 @@ Lunmapped:
#if defined(CPU_ARM11) || defined(CPU_CORTEXA) || defined(CPU_MV_PJ4B)
orr r0, r0, #CPU_CONTROL_V6_EXTPAGE
#endif
- orr r0, r0, #(CPU_CONTROL_MMU_ENABLE | CPU_CONTROL_DC_ENABLE)
+ orr r0, r0, #(CPU_CONTROL_MMU_ENABLE)
mcr p15, 0, r0, c1, c0, 0
nop
nop
Modified: projects/counters/sys/arm/arm/machdep.c
==============================================================================
--- projects/counters/sys/arm/arm/machdep.c Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/sys/arm/arm/machdep.c Wed Nov 28 17:34:17 2012 (r243653)
@@ -1038,18 +1038,6 @@ print_kenv(void)
}
static void
-print_kernel_section_addr(void)
-{
-
- debugf("kernel image addresses:\n");
- debugf(" kernbase = 0x%08x\n", (uint32_t)kernbase);
- debugf(" _etext (sdata) = 0x%08x\n", (uint32_t)_etext);
- debugf(" _edata = 0x%08x\n", (uint32_t)_edata);
- debugf(" __bss_start = 0x%08x\n", (uint32_t)__bss_start);
- debugf(" _end = 0x%08x\n", (uint32_t)_end);
-}
-
-static void
physmap_init(struct mem_region *availmem_regions, int availmem_regions_sz)
{
int i, j, cnt;
@@ -1344,7 +1332,6 @@ initarm(struct arm_boot_params *abp)
debugf(" arg1 kmdp = 0x%08x\n", (uint32_t)kmdp);
debugf(" boothowto = 0x%08x\n", boothowto);
debugf(" dtbp = 0x%08x\n", (uint32_t)dtbp);
- print_kernel_section_addr();
print_kenv();
env = getenv("kernelname");
Modified: projects/counters/sys/arm/arm/mpcore_timer.c
==============================================================================
--- projects/counters/sys/arm/arm/mpcore_timer.c Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/sys/arm/arm/mpcore_timer.c Wed Nov 28 17:34:17 2012 (r243653)
@@ -128,7 +128,7 @@ static struct arm_tmr_softc *arm_tmr_sc
static timecounter_get_t arm_tmr_get_timecount;
static struct timecounter arm_tmr_timecount = {
- .tc_name = "ARM MPCore Timecouter",
+ .tc_name = "ARM MPCore Timecounter",
.tc_get_timecount = arm_tmr_get_timecount,
.tc_poll_pps = NULL,
.tc_counter_mask = ~0u,
Modified: projects/counters/sys/arm/at91/files.at91
==============================================================================
--- projects/counters/sys/arm/at91/files.at91 Wed Nov 28 15:48:32 2012 (r243652)
+++ projects/counters/sys/arm/at91/files.at91 Wed Nov 28 17:34:17 2012 (r243653)
@@ -55,4 +55,3 @@ arm/at91/board_tsc4370.c optional at91_b
dev/usb/controller/at91dci.c optional at91_dci
dev/usb/controller/at91dci_atmelarm.c optional at91_dci
dev/usb/controller/ohci_atmelarm.c optional ohci
-dev/usb/controller/ehci_atmelarm.c optional ehci
Copied: projects/counters/sys/arm/broadcom/bcm2835/bcm2835_gpio.c (from r243651, head/sys/arm/broadcom/bcm2835/bcm2835_gpio.c)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/counters/sys/arm/broadcom/bcm2835/bcm2835_gpio.c Wed Nov 28 17:34:17 2012 (r243653, copy of r243651, head/sys/arm/broadcom/bcm2835/bcm2835_gpio.c)
@@ -0,0 +1,656 @@
+/*-
+ * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo at freebsd.org>
+ * Copyright (c) 2012 Luiz Otavio O Souza.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/rman.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/gpio.h>
+
+#include <machine/bus.h>
+#include <machine/cpu.h>
+#include <machine/cpufunc.h>
+#include <machine/resource.h>
+#include <machine/fdt.h>
+#include <machine/frame.h>
+#include <machine/intr.h>
+
+#include <dev/fdt/fdt_common.h>
+#include <dev/ofw/ofw_bus.h>
+#include <dev/ofw/ofw_bus_subr.h>
+
+#include "gpio_if.h"
+
+#undef DEBUG
+
+#ifdef DEBUG
+#define dprintf(fmt, args...) do { printf("%s(): ", __func__); \
+ printf(fmt,##args); } while (0)
+#else
+#define dprintf(fmt, args...)
+#endif
+
+#define BCM_GPIO_PINS 54
+#define BCM_GPIO_DEFAULT_CAPS (GPIO_PIN_INPUT | GPIO_PIN_OUTPUT | \
+ GPIO_PIN_PULLUP | GPIO_PIN_PULLDOWN)
+
+struct bcm_gpio_softc {
+ device_t sc_dev;
+ struct mtx sc_mtx;
+ struct resource * sc_mem_res;
+ struct resource * sc_irq_res;
+ bus_space_tag_t sc_bst;
+ bus_space_handle_t sc_bsh;
+ void * sc_intrhand;
+ int sc_gpio_npins;
+ int sc_ro_npins;
+ int sc_ro_pins[BCM_GPIO_PINS];
+ struct gpio_pin sc_gpio_pins[BCM_GPIO_PINS];
+};
+
+enum bcm_gpio_fsel {
+ BCM_GPIO_INPUT,
+ BCM_GPIO_OUTPUT,
+ BCM_GPIO_ALT5,
+ BCM_GPIO_ALT4,
+ BCM_GPIO_ALT0,
+ BCM_GPIO_ALT1,
+ BCM_GPIO_ALT2,
+ BCM_GPIO_ALT3,
+};
+
+enum bcm_gpio_pud {
+ BCM_GPIO_NONE,
+ BCM_GPIO_PULLDOWN,
+ BCM_GPIO_PULLUP,
+};
+
+#define BCM_GPIO_LOCK(_sc) mtx_lock(&_sc->sc_mtx)
+#define BCM_GPIO_UNLOCK(_sc) mtx_unlock(&_sc->sc_mtx)
+
+#define BCM_GPIO_GPFSEL(_bank) 0x00 + _bank * 4
+#define BCM_GPIO_GPSET(_bank) 0x1c + _bank * 4
+#define BCM_GPIO_GPCLR(_bank) 0x28 + _bank * 4
+#define BCM_GPIO_GPLEV(_bank) 0x34 + _bank * 4
+#define BCM_GPIO_GPPUD(_bank) 0x94
+#define BCM_GPIO_GPPUDCLK(_bank) 0x98 + _bank * 4
+
+#define BCM_GPIO_WRITE(_sc, _off, _val) \
+ bus_space_write_4(_sc->sc_bst, _sc->sc_bsh, _off, _val)
+#define BCM_GPIO_READ(_sc, _off) \
+ bus_space_read_4(_sc->sc_bst, _sc->sc_bsh, _off)
+
+static int
+bcm_gpio_pin_is_ro(struct bcm_gpio_softc *sc, int pin)
+{
+ int i;
+
+ for (i = 0; i < sc->sc_ro_npins; i++)
+ if (pin == sc->sc_ro_pins[i])
+ return (1);
+ return (0);
+}
+
+static uint32_t
+bcm_gpio_get_function(struct bcm_gpio_softc *sc, uint32_t pin)
+{
+ uint32_t bank, data, offset;
+
+ /* Five banks, 10 pins per bank, 3 bits per pin. */
+ bank = pin / 10;
+ offset = (pin - bank * 10) * 3;
+
+ BCM_GPIO_LOCK(sc);
+ data = (BCM_GPIO_READ(sc, BCM_GPIO_GPFSEL(bank)) >> offset) & 7;
+ BCM_GPIO_UNLOCK(sc);
+
+#ifdef DEBUG
+ device_printf(sc->sc_dev, "pin %d function: ", pin);
+ switch (data) {
+ case BCM_GPIO_INPUT:
+ printf("input\n");
+ break;
+ case BCM_GPIO_OUTPUT:
+ printf("output\n");
+ break;
+ case BCM_GPIO_ALT0:
+ printf("alt0\n");
+ break;
+ case BCM_GPIO_ALT1:
+ printf("alt1\n");
+ break;
+ case BCM_GPIO_ALT2:
+ printf("alt2\n");
+ break;
+ case BCM_GPIO_ALT3:
+ printf("alt3\n");
+ break;
+ case BCM_GPIO_ALT4:
+ printf("alt4\n");
+ break;
+ case BCM_GPIO_ALT5:
+ printf("alt5\n");
+ break;
+ }
+#endif
+
+ switch (data) {
+ case BCM_GPIO_INPUT:
+ return (GPIO_PIN_INPUT);
+ case BCM_GPIO_OUTPUT:
+ return (GPIO_PIN_OUTPUT);
+ }
+
+ return (0);
+}
+
+static void
+bcm_gpio_set_function(struct bcm_gpio_softc *sc, uint32_t pin, uint32_t f)
+{
+ uint32_t bank, data, offset;
+
+ /* Five banks, 10 pins per bank, 3 bits per pin. */
+ bank = pin / 10;
+ offset = (pin - bank * 10) * 3;
+
+ BCM_GPIO_LOCK(sc);
+ data = BCM_GPIO_READ(sc, BCM_GPIO_GPFSEL(bank));
+ data &= ~(7 << offset);
+ data |= (f << offset);
+ BCM_GPIO_WRITE(sc, BCM_GPIO_GPFSEL(bank), data);
+ BCM_GPIO_UNLOCK(sc);
+}
+
+static void
+bcm_gpio_set_pud(struct bcm_gpio_softc *sc, uint32_t pin, uint32_t state)
+{
+ uint32_t bank, offset;
+
+ bank = pin / 32;
+ offset = pin - 32 * bank;
+
+ BCM_GPIO_LOCK(sc);
+ BCM_GPIO_WRITE(sc, BCM_GPIO_GPPUD(0), state);
+ DELAY(10);
+ BCM_GPIO_WRITE(sc, BCM_GPIO_GPPUDCLK(bank), (1 << offset));
+ DELAY(10);
+ BCM_GPIO_WRITE(sc, BCM_GPIO_GPPUD(0), 0);
+ BCM_GPIO_WRITE(sc, BCM_GPIO_GPPUDCLK(bank), 0);
+ BCM_GPIO_UNLOCK(sc);
+}
+
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-projects
mailing list