Date: Mon, 25 May 2009 16:32:23 GMT From: Edward Tomasz Napierala <trasz@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 162725 for review Message-ID: <200905251632.n4PGWNpp080135@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=162725 Change 162725 by trasz@trasz_victim on 2009/05/25 16:32:02 IFC. Affected files ... .. //depot/projects/soc2008/trasz_nfs4acl/sbin/fdisk/fdisk.8#3 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sbin/fdisk/fdisk.c#6 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sbin/geom/class/journal/gjournal.8#5 integrate .. //depot/projects/soc2008/trasz_nfs4acl/share/man/man4/msk.4#2 integrate .. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VFS_MOUNT.9#2 integrate .. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VFS_QUOTACTL.9#2 integrate .. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VFS_ROOT.9#2 integrate .. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VFS_STATFS.9#2 integrate .. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VFS_SYNC.9#2 integrate .. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VFS_UNMOUNT.9#2 integrate .. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/acl.9#7 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sys/cddl/compat/opensolaris/kern/opensolaris_policy.c#8 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sys/compat/ndis/kern_ndis.c#5 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sys/conf/files#39 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/mii/e1000phy.c#5 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/mii/e1000phyreg.h#2 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/mii/miidevs#8 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/msk/if_msk.c#8 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/msk/if_mskreg.h#4 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/nfe/if_nfe.c#4 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sys/fs/nfs/nfs_commonkrpc.c#5 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sys/fs/nfs/nfs_commonport.c#2 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sys/fs/nfs/nfsport.h#3 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sys/fs/nfsserver/nfs_nfsdkrpc.c#3 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sys/fs/nfsserver/nfs_nfsdserv.c#3 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sys/netinet/tcp_reass.c#8 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sys/netipx/spx.h#2 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sys/netipx/spx_reass.c#1 branch .. //depot/projects/soc2008/trasz_nfs4acl/sys/netipx/spx_usrreq.c#5 integrate .. //depot/projects/soc2008/trasz_nfs4acl/sys/netipx/spx_var.h#2 integrate .. //depot/projects/soc2008/trasz_nfs4acl/tools/regression/usr.bin/sed/multitest.t#2 integrate .. //depot/projects/soc2008/trasz_nfs4acl/tools/regression/usr.bin/sed/regress.multitest.out/40_2.21#1 branch .. //depot/projects/soc2008/trasz_nfs4acl/tools/regression/usr.bin/sed/regress.multitest.out/41_2.22#1 branch .. //depot/projects/soc2008/trasz_nfs4acl/usr.bin/sed/compile.c#4 integrate .. //depot/projects/soc2008/trasz_nfs4acl/usr.bin/sed/defs.h#2 integrate .. //depot/projects/soc2008/trasz_nfs4acl/usr.bin/sed/process.c#2 integrate .. //depot/projects/soc2008/trasz_nfs4acl/usr.bin/sed/sed.1#4 integrate Differences ... ==== //depot/projects/soc2008/trasz_nfs4acl/sbin/fdisk/fdisk.8#3 (text+ko) ==== @@ -1,4 +1,4 @@ -.\" $FreeBSD: src/sbin/fdisk/fdisk.8,v 1.40 2008/07/31 00:55:29 obrien Exp $ +.\" $FreeBSD: src/sbin/fdisk/fdisk.8,v 1.41 2009/05/25 09:23:26 brian Exp $ .\" .Dd April 30, 2007 .Dt FDISK 8 @@ -372,6 +372,31 @@ for .Ar length sectors. +If the +.Ar start +or +.Ar length +is suffixed with a +.Em K , +.Em M +or +.Em G , +it is taken as a +.Em Kilobyte , +.Em Megabyte +or +.Em Gigabyte +measurement respectively. +If the +.Ar start +is given as +.Qq * +it is set to the value of the previous partition end. +If the +.Ar length +is given as +.Qq * +the partition end is set to the end of the disk. .Pp Only those slices explicitly mentioned by these lines are modified; any slice not referenced by a @@ -421,6 +446,17 @@ downwards to correspond to head and cylinder boundaries): .Pp .Dl "p 1 165 1 2503871" +.Pp +Example: to set slices 1, 2 and 4 to +.Fx +slices, the first being 2 Gigabytes, the second being 10 Gigabytes and the +forth being the remainder of the disk (again, numbers will be rounded +appropriately): +.Pp +.Dl "p 1 165 63 2G" +.Dl "p 2 165 * 10G" +.Dl "p 3 0 0 0" +.Dl "p 4 165 * *" .It Ic a Ar slice Make .Ar slice ==== //depot/projects/soc2008/trasz_nfs4acl/sbin/fdisk/fdisk.c#6 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sbin/fdisk/fdisk.c,v 1.92 2009/01/14 22:05:51 luigi Exp $"); +__FBSDID("$FreeBSD: src/sbin/fdisk/fdisk.c,v 1.93 2009/05/25 09:23:26 brian Exp $"); #include <sys/disk.h> #include <sys/disklabel.h> @@ -49,6 +49,7 @@ int iotest; +#define NOSECTORS ((u_int32_t)-1) #define LBUF 100 static char lbuf[LBUF]; @@ -106,6 +107,7 @@ struct arg { char argtype; int arg_val; + char *arg_str; } args[MAX_ARGS]; } CMD; @@ -970,16 +972,23 @@ */ while (1) { while (isspace(*cp)) ++cp; + if (*cp == '\0') + break; /* eol */ if (*cp == '#') break; /* found comment */ if (isalpha(*cp)) command->args[command->n_args].argtype = *cp++; - if (!isdigit(*cp)) - break; /* assume end of line */ end = NULL; command->args[command->n_args].arg_val = strtol(cp, &end, 0); - if (cp == end) - break; /* couldn't parse number */ + if (cp == end || (!isspace(*end) && *end != '\0')) { + char ch; + end = cp; + while (!isspace(*end) && *end != '\0') ++end; + ch = *end; *end = '\0'; + command->args[command->n_args].arg_str = strdup(cp); + *end = ch; + } else + command->args[command->n_args].arg_str = NULL; cp = end; command->n_args++; } @@ -1078,6 +1087,33 @@ return (status); } +static u_int32_t +str2sectors(const char *str) +{ + char *end; + unsigned long val; + + val = strtoul(str, &end, 0); + if (str == end || *end == '\0') { + warnx("ERROR line %d: unexpected size: \'%s\'", + current_line_number, str); + return NOSECTORS; + } + + if (*end == 'K') + val *= 1024UL / secsize; + else if (*end == 'M') + val *= 1024UL * 1024UL / secsize; + else if (*end == 'G') + val *= 1024UL * 1024UL * 1024UL / secsize; + else { + warnx("ERROR line %d: unexpected modifier: %c " + "(not K/M/G)", current_line_number, *end); + return NOSECTORS; + } + + return val; +} static int process_partition(CMD *command) @@ -1103,8 +1139,48 @@ partp = &mboot.parts[partition - 1]; bzero(partp, sizeof (*partp)); partp->dp_typ = command->args[1].arg_val; - partp->dp_start = command->args[2].arg_val; - partp->dp_size = command->args[3].arg_val; + if (command->args[2].arg_str != NULL) { + if (strcmp(command->args[2].arg_str, "*") == 0) { + int i; + partp->dp_start = dos_sectors; + for (i = 1; i < partition; i++) { + struct dos_partition *prev_partp; + prev_partp = ((struct dos_partition *) + &mboot.parts) + i - 1; + if (prev_partp->dp_typ != 0) + partp->dp_start = prev_partp->dp_start + + prev_partp->dp_size; + } + if (partp->dp_start % dos_sectors != 0) { + prev_head_boundary = partp->dp_start / + dos_sectors * dos_sectors; + partp->dp_start = prev_head_boundary + + dos_sectors; + } + } else { + partp->dp_start = str2sectors(command->args[2].arg_str); + if (partp->dp_start == NOSECTORS) + break; + } + } else + partp->dp_start = command->args[2].arg_val; + + if (command->args[3].arg_str != NULL) { + if (strcmp(command->args[3].arg_str, "*") == 0) + partp->dp_size = ((disksecs / dos_cylsecs) * + dos_cylsecs) - partp->dp_start; + else { + partp->dp_size = str2sectors(command->args[3].arg_str); + if (partp->dp_size == NOSECTORS) + break; + } + prev_cyl_boundary = ((partp->dp_start + partp->dp_size) / + dos_cylsecs) * dos_cylsecs; + if (prev_cyl_boundary > partp->dp_start) + partp->dp_size = prev_cyl_boundary - partp->dp_start; + } else + partp->dp_size = command->args[3].arg_val; + max_end = partp->dp_start + partp->dp_size; if (partp->dp_typ == 0) { ==== //depot/projects/soc2008/trasz_nfs4acl/sbin/geom/class/journal/gjournal.8#5 (text+ko) ==== @@ -22,7 +22,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $FreeBSD: src/sbin/geom/class/journal/gjournal.8,v 1.9 2009/04/29 10:02:50 trasz Exp $ +.\" $FreeBSD: src/sbin/geom/class/journal/gjournal.8,v 1.10 2009/05/25 09:52:58 maxim Exp $ .\" .Dd February 17, 2009 .Dt GJOURNAL 8 @@ -220,7 +220,7 @@ .Bd -literal -offset indent umount /dev/da0s1d gjournal label da0s1d da0s1e && \e - tunefs -J enable -n disable da01sd.journal && \e + tunefs -J enable -n disable da0s1d.journal && \e mount -o async /dev/da0s1d.journal /mnt || \e mount /dev/da0s1d /mnt .Ed ==== //depot/projects/soc2008/trasz_nfs4acl/share/man/man4/msk.4#2 (text+ko) ==== @@ -22,9 +22,9 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $FreeBSD: src/share/man/man4/msk.4,v 1.6 2007/12/05 09:41:58 remko Exp $ +.\" $FreeBSD: src/share/man/man4/msk.4,v 1.8 2009/05/25 08:27:52 yongari Exp $ .\" -.Dd December 5, 2007 +.Dd May 25, 2009 .Dt MSK 4 .Os .Sh NAME @@ -176,13 +176,19 @@ .It Marvell Yukon 88E8062 SX/LX Gigabit Ethernet .It -Marvell Yukon 88E8035 Gigabit Ethernet +Marvell Yukon 88E8035 Fast Ethernet +.It +Marvell Yukon 88E8036 Fast Ethernet +.It +Marvell Yukon 88E8038 Fast Ethernet +.It +Marvell Yukon 88E8039 Fast Ethernet .It -Marvell Yukon 88E8036 Gigabit Ethernet +Marvell Yukon 88E8040 Fast Ethernet .It -Marvell Yukon 88E8038 Gigabit Ethernet +Marvell Yukon 88E8040T Fast Ethernet .It -Marvell Yukon 88E8039 Gigabit Ethernet +Marvell Yukon 88E8048 Fast Ethernet .It Marvell Yukon 88E8050 Gigabit Ethernet .It @@ -196,6 +202,8 @@ .It Marvell Yukon 88E8058 Gigabit Ethernet .It +Marvell Yukon 88E8070 Fast Ethernet +.It SysKonnect SK-9Sxx Gigabit Ethernet .It SysKonnect SK-9Exx Gigabit Ethernet ==== //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VFS_MOUNT.9#2 (text+ko) ==== @@ -26,9 +26,9 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $FreeBSD: src/share/man/man9/VFS_MOUNT.9,v 1.14 2005/01/07 10:57:33 keramida Exp $ +.\" $FreeBSD: src/share/man/man9/VFS_MOUNT.9,v 1.15 2009/05/24 18:34:54 tmclaugh Exp $ .\" -.Dd January 7, 2005 +.Dd May 23, 2009 .Os .Dt VFS_MOUNT 9 .Sh NAME @@ -39,7 +39,7 @@ .In sys/mount.h .In sys/vnode.h .Ft int -.Fn VFS_MOUNT "struct mount *mp" "struct thread *td" +.Fn VFS_MOUNT "struct mount *mp" .Sh DESCRIPTION The .Fn VFS_MOUNT @@ -50,8 +50,6 @@ .Bl -tag -width data .It Fa mp Structure representing the file system. -.It Fa td -Thread which is mounting the file system. .El .Pp The ==== //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VFS_QUOTACTL.9#2 (text+ko) ==== @@ -26,9 +26,9 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $FreeBSD: src/share/man/man9/VFS_QUOTACTL.9,v 1.10 2003/10/23 06:24:55 hmp Exp $ +.\" $FreeBSD: src/share/man/man9/VFS_QUOTACTL.9,v 1.11 2009/05/24 18:34:54 tmclaugh Exp $ .\" -.Dd July 24, 1996 +.Dd May 23, 2009 .Os .Dt VFS_QUOTACTL 9 .Sh NAME @@ -39,7 +39,7 @@ .In sys/mount.h .In sys/vnode.h .Ft int -.Fn VFS_QUOTACTL "struct mount *mp" "int cmds" "uid_t uid" "caddr_t arg" "struct thread *td" +.Fn VFS_QUOTACTL "struct mount *mp" "int cmds" "uid_t uid" "caddr_t arg" .Sh DESCRIPTION Implement file system quotas. See ==== //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VFS_ROOT.9#2 (text+ko) ==== @@ -26,9 +26,9 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $FreeBSD: src/share/man/man9/VFS_ROOT.9,v 1.12 2006/09/18 15:24:20 ru Exp $ +.\" $FreeBSD: src/share/man/man9/VFS_ROOT.9,v 1.13 2009/05/24 18:34:54 tmclaugh Exp $ .\" -.Dd August 26, 2006 +.Dd May 23, 2009 .Os .Dt VFS_ROOT 9 .Sh NAME @@ -39,7 +39,7 @@ .In sys/mount.h .In sys/vnode.h .Ft int -.Fn VFS_ROOT "struct mount *mp" "int flags" "struct vnode **vpp" "struct thread *td" +.Fn VFS_ROOT "struct mount *mp" "int flags" "struct vnode **vpp" .Sh DESCRIPTION Return a locked vnode for the root directory of the file system. .Pp @@ -58,8 +58,6 @@ argument and instead acquire an exclusive lock. .It Fa vpp Return parameter for the root vnode. -.It Fa td -The calling thread. .El .Sh SEE ALSO .Xr VFS 9 , ==== //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VFS_STATFS.9#2 (text+ko) ==== @@ -26,9 +26,9 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $FreeBSD: src/share/man/man9/VFS_STATFS.9,v 1.12 2005/01/13 09:33:06 ru Exp $ +.\" $FreeBSD: src/share/man/man9/VFS_STATFS.9,v 1.13 2009/05/24 18:34:54 tmclaugh Exp $ .\" -.Dd January 7, 2005 +.Dd May 23, 2009 .Os .Dt VFS_STATFS 9 .Sh NAME @@ -39,7 +39,7 @@ .In sys/mount.h .In sys/vnode.h .Ft int -.Fn VFS_STATFS "struct mount *mp" "struct statfs *sbp" "struct thread *td" +.Fn VFS_STATFS "struct mount *mp" "struct statfs *sbp" .Sh DESCRIPTION The .Fn VFS_STATFS @@ -56,8 +56,6 @@ structure, as defined by .In sys/mount.h , into which information is placed about the file system. -.It Fa td -The thread which is querying the file system. .El .Pp The fields of ==== //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VFS_SYNC.9#2 (text+ko) ==== @@ -26,9 +26,9 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $FreeBSD: src/share/man/man9/VFS_SYNC.9,v 1.16 2007/05/12 13:10:55 pav Exp $ +.\" $FreeBSD: src/share/man/man9/VFS_SYNC.9,v 1.17 2009/05/24 18:34:54 tmclaugh Exp $ .\" -.Dd January 7, 2005 +.Dd May 23, 2009 .Os .Dt VFS_SYNC 9 .Sh NAME @@ -39,7 +39,7 @@ .In sys/mount.h .In sys/vnode.h .Ft int -.Fn VFS_SYNC "struct mount *mp" "int waitfor" "struct thread *td" +.Fn VFS_SYNC "struct mount *mp" "int waitfor" .Sh DESCRIPTION The .Fn VFS_SYNC @@ -61,8 +61,6 @@ .It Dv MNT_LAZY push data not written by file system syncer .El -.It Fa td -The calling thread. .El .Pp The ==== //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VFS_UNMOUNT.9#2 (text+ko) ==== @@ -26,9 +26,9 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $FreeBSD: src/share/man/man9/VFS_UNMOUNT.9,v 1.11 2005/01/07 11:45:11 keramida Exp $ +.\" $FreeBSD: src/share/man/man9/VFS_UNMOUNT.9,v 1.12 2009/05/24 18:34:54 tmclaugh Exp $ .\" -.Dd January 7, 2005 +.Dd May 23, 2009 .Os .Dt VFS_UNMOUNT 9 .Sh NAME @@ -39,7 +39,7 @@ .In sys/mount.h .In sys/vnode.h .Ft int -.Fn VFS_UNMOUNT "struct mount *mp" "int mntflags" "struct thread *td" +.Fn VFS_UNMOUNT "struct mount *mp" "int mntflags" .Sh DESCRIPTION The .Fn VFS_UNMOUNT @@ -58,8 +58,6 @@ .It Dv MNT_FORCE Open files are forcibly closed before the file system is unmounted. .El -.It Fa td -Thread which is unmounting the file system. .El .Sh SEE ALSO .Xr vflush 9 , ==== //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/acl.9#7 (text+ko) ==== @@ -23,7 +23,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $FreeBSD: src/share/man/man9/acl.9,v 1.17 2009/05/24 09:42:53 trasz Exp $ +.\" $FreeBSD: src/share/man/man9/acl.9,v 1.19 2009/05/24 20:34:29 trasz Exp $ .\" .Dd December 23, 1999 .Os ==== //depot/projects/soc2008/trasz_nfs4acl/sys/cddl/compat/opensolaris/kern/opensolaris_policy.c#8 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/cddl/compat/opensolaris/kern/opensolaris_policy.c,v 1.6 2008/11/23 20:14:19 pjd Exp $"); +__FBSDID("$FreeBSD: src/sys/cddl/compat/opensolaris/kern/opensolaris_policy.c,v 1.7 2009/05/24 19:21:49 trasz Exp $"); #include <sys/param.h> #include <sys/priv.h> ==== //depot/projects/soc2008/trasz_nfs4acl/sys/compat/ndis/kern_ndis.c#5 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/compat/ndis/kern_ndis.c,v 1.103 2009/03/07 07:26:22 weongyo Exp $"); +__FBSDID("$FreeBSD: src/sys/compat/ndis/kern_ndis.c,v 1.104 2009/05/24 18:35:53 antoine Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -543,7 +543,7 @@ return; } -int in_reset = 0; + void ndis_free_packet(p) ndis_packet *p; ==== //depot/projects/soc2008/trasz_nfs4acl/sys/conf/files#39 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/files,v 1.1402 2009/05/22 12:35:12 rwatson Exp $ +# $FreeBSD: src/sys/conf/files,v 1.1403 2009/05/25 09:28:54 rwatson Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -2428,6 +2428,7 @@ netipx/ipx_proto.c optional ipx netipx/ipx_usrreq.c optional ipx netipx/spx_debug.c optional ipx +netipx/spx_reass.c optional ipx netipx/spx_usrreq.c optional ipx netnatm/natm.c optional natm netnatm/natm_pcb.c optional natm ==== //depot/projects/soc2008/trasz_nfs4acl/sys/dev/mii/e1000phy.c#5 (text+ko) ==== @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/mii/e1000phy.c,v 1.23 2008/10/17 05:26:51 yongari Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/mii/e1000phy.c,v 1.28 2009/05/25 02:36:29 yongari Exp $"); /* * driver for the Marvell 88E1000 series external 1000/100/10-BT PHY. @@ -107,6 +107,7 @@ MII_PHY_DESC(MARVELL, E1116), MII_PHY_DESC(MARVELL, E1116R), MII_PHY_DESC(MARVELL, E1118), + MII_PHY_DESC(MARVELL, E3016), MII_PHY_DESC(xxMARVELL, E1000), MII_PHY_DESC(xxMARVELL, E1011), MII_PHY_DESC(xxMARVELL, E1000_3), @@ -129,7 +130,6 @@ struct mii_softc *sc; struct mii_attach_args *ma; struct mii_data *mii; - int fast_ether; esc = device_get_softc(dev); sc = &esc->mii_sc; @@ -142,10 +142,8 @@ sc->mii_phy = ma->mii_phyno; sc->mii_service = e1000phy_service; sc->mii_pdata = mii; - sc->mii_anegticks = MII_ANEGTICKS_GIGE; mii->mii_instance++; - fast_ether = 0; esc->mii_model = MII_MODEL(ma->mii_id2); switch (esc->mii_model) { case MII_MODEL_MARVELL_E1011: @@ -167,54 +165,16 @@ */ PHY_WRITE(sc, E1000_EADR, 0); break; - case MII_MODEL_MARVELL_E3082: - /* 88E3082 10/100 Fast Ethernet PHY. */ - sc->mii_anegticks = MII_ANEGTICKS; - fast_ether = 1; - break; } e1000phy_reset(sc); + sc->mii_capabilities = PHY_READ(sc, MII_BMSR) & ma->mii_capmask; + if (sc->mii_capabilities & BMSR_EXTSTAT) + sc->mii_extcapabilities = PHY_READ(sc, MII_EXTSR); device_printf(dev, " "); - -#define ADD(m, c) ifmedia_add(&mii->mii_media, (m), (c), NULL) - ADD(IFM_MAKEWORD(IFM_ETHER, IFM_NONE, 0, sc->mii_inst), - E1000_CR_ISOLATE); - if ((sc->mii_flags & MIIF_HAVEFIBER) == 0) { - ADD(IFM_MAKEWORD(IFM_ETHER, IFM_10_T, 0, sc->mii_inst), - E1000_CR_SPEED_10); - printf("10baseT, "); - ADD(IFM_MAKEWORD(IFM_ETHER, IFM_10_T, IFM_FDX, sc->mii_inst), - E1000_CR_SPEED_10 | E1000_CR_FULL_DUPLEX); - printf("10baseT-FDX, "); - ADD(IFM_MAKEWORD(IFM_ETHER, IFM_100_TX, 0, sc->mii_inst), - E1000_CR_SPEED_100); - printf("100baseTX, "); - ADD(IFM_MAKEWORD(IFM_ETHER, IFM_100_TX, IFM_FDX, sc->mii_inst), - E1000_CR_SPEED_100 | E1000_CR_FULL_DUPLEX); - printf("100baseTX-FDX, "); - if (fast_ether == 0) { - /* - * 1000BT-simplex not supported; driver must ignore - * this entry, but it must be present in order to - * manually set full-duplex. - */ - ADD(IFM_MAKEWORD(IFM_ETHER, IFM_1000_T, 0, - sc->mii_inst), E1000_CR_SPEED_1000); - ADD(IFM_MAKEWORD(IFM_ETHER, IFM_1000_T, IFM_FDX, - sc->mii_inst), - E1000_CR_SPEED_1000 | E1000_CR_FULL_DUPLEX); - printf("1000baseTX-FDX, "); - } - } else { - ADD(IFM_MAKEWORD(IFM_ETHER, IFM_1000_SX, IFM_FDX, sc->mii_inst), - E1000_CR_SPEED_1000 | E1000_CR_FULL_DUPLEX); - printf("1000baseSX-FDX, "); - } - ADD(IFM_MAKEWORD(IFM_ETHER, IFM_AUTO, 0, sc->mii_inst), 0); - printf("auto\n"); -#undef ADD + mii_phy_add_media(sc); + printf("\n"); MIIBUS_MEDIAINIT(sc->mii_dev); return (0); @@ -253,18 +213,29 @@ reg |= E1000_SCR_AUTO_X_MODE; if (esc->mii_model == MII_MODEL_MARVELL_E1116) reg &= ~E1000_SCR_POWER_DOWN; + reg |= E1000_SCR_ASSERT_CRS_ON_TX; break; case MII_MODEL_MARVELL_E3082: reg |= (E1000_SCR_AUTO_X_MODE >> 1); + reg |= E1000_SCR_ASSERT_CRS_ON_TX; + break; + case MII_MODEL_MARVELL_E3016: + reg |= E1000_SCR_AUTO_MDIX; + reg &= ~(E1000_SCR_EN_DETECT | + E1000_SCR_SCRAMBLER_DISABLE); + reg |= E1000_SCR_LPNP; + /* XXX Enable class A driver for Yukon FE+ A0. */ + PHY_WRITE(sc, 0x1C, PHY_READ(sc, 0x1C) | 0x0001); break; default: reg &= ~E1000_SCR_AUTO_X_MODE; + reg |= E1000_SCR_ASSERT_CRS_ON_TX; break; } - /* Enable CRS on TX. */ - reg |= E1000_SCR_ASSERT_CRS_ON_TX; - /* Auto correction for reversed cable polarity. */ - reg &= ~E1000_SCR_POLARITY_REVERSAL; + if (esc->mii_model != MII_MODEL_MARVELL_E3016) { + /* Auto correction for reversed cable polarity. */ + reg &= ~E1000_SCR_POLARITY_REVERSAL; + } PHY_WRITE(sc, E1000_SCR, reg); if (esc->mii_model == MII_MODEL_MARVELL_E1116) { @@ -283,6 +254,13 @@ case MII_MODEL_MARVELL_E1118: case MII_MODEL_MARVELL_E1149: break; + case MII_MODEL_MARVELL_E3016: + /* LED2 -> ACT, LED1 -> LINK, LED0 -> SPEED. */ + PHY_WRITE(sc, 0x16, 0x0B << 8 | 0x05 << 4 | 0x04); + /* Integrated register calibration workaround. */ + PHY_WRITE(sc, 0x1D, 17); + PHY_WRITE(sc, 0x1E, 0x3F60); + break; default: /* Force TX_CLK to 25MHz clock. */ reg = PHY_READ(sc, E1000_ESCR); @@ -339,12 +317,14 @@ speed = 0; switch (IFM_SUBTYPE(ife->ifm_media)) { case IFM_1000_T: - if (esc->mii_model == MII_MODEL_MARVELL_E3082) + if ((sc->mii_extcapabilities & + (EXTSR_1000TFDX | EXTSR_1000THDX)) == 0) return (EINVAL); speed = E1000_CR_SPEED_1000; break; case IFM_1000_SX: - if (esc->mii_model == MII_MODEL_MARVELL_E3082) + if ((sc->mii_extcapabilities & + (EXTSR_1000XFDX | EXTSR_1000XHDX)) == 0) return (EINVAL); speed = E1000_CR_SPEED_1000; break; @@ -390,7 +370,8 @@ PHY_WRITE(sc, E1000_1GCR, gig | E1000_1GCR_MS_ENABLE); } else { - if (esc->mii_model != MII_MODEL_MARVELL_E3082) + if ((sc->mii_extcapabilities & + (EXTSR_1000TFDX | EXTSR_1000THDX)) != 0) PHY_WRITE(sc, E1000_1GCR, 0); } PHY_WRITE(sc, E1000_AR, E1000_AR_SELECTOR_FIELD); @@ -432,7 +413,7 @@ if (sc->mii_ticks++ == 0) break; if (sc->mii_ticks <= sc->mii_anegticks) - return (0); + break; sc->mii_ticks = 0; e1000phy_reset(sc); @@ -452,18 +433,14 @@ e1000phy_status(struct mii_softc *sc) { struct mii_data *mii = sc->mii_pdata; - int bmsr, bmcr, esr, gsr, ssr, isr, ar, lpar; + int bmcr, bmsr, gsr, ssr, ar, lpar; mii->mii_media_status = IFM_AVALID; mii->mii_media_active = IFM_ETHER; bmsr = PHY_READ(sc, E1000_SR) | PHY_READ(sc, E1000_SR); - esr = PHY_READ(sc, E1000_ESR); bmcr = PHY_READ(sc, E1000_CR); ssr = PHY_READ(sc, E1000_SSR); - isr = PHY_READ(sc, E1000_ISR); - ar = PHY_READ(sc, E1000_AR); - lpar = PHY_READ(sc, E1000_LPAR); if (bmsr & E1000_SR_LINK_STATUS) mii->mii_media_status |= IFM_ACTIVE; @@ -471,22 +448,28 @@ if (bmcr & E1000_CR_LOOPBACK) mii->mii_media_active |= IFM_LOOP; - if ((((bmcr & E1000_CR_AUTO_NEG_ENABLE) != 0) && - ((bmsr & E1000_SR_AUTO_NEG_COMPLETE) == 0)) || - ((ssr & E1000_SSR_LINK) == 0) || - ((ssr & E1000_SSR_SPD_DPLX_RESOLVED) == 0)) { + if ((bmcr & E1000_CR_AUTO_NEG_ENABLE) != 0 && + (ssr & E1000_SSR_SPD_DPLX_RESOLVED) == 0) { /* Erg, still trying, I guess... */ mii->mii_media_active |= IFM_NONE; return; } if ((sc->mii_flags & MIIF_HAVEFIBER) == 0) { - if (ssr & E1000_SSR_1000MBS) + switch (ssr & E1000_SSR_SPEED) { + case E1000_SSR_1000MBS: mii->mii_media_active |= IFM_1000_T; - else if (ssr & E1000_SSR_100MBS) + break; + case E1000_SSR_100MBS: mii->mii_media_active |= IFM_100_TX; - else + break; + case E1000_SSR_10MBS: mii->mii_media_active |= IFM_10_T; + break; + default: + mii->mii_media_active |= IFM_NONE; + return; + } } else { if (ssr & E1000_SSR_1000MBS) mii->mii_media_active |= IFM_1000_SX; @@ -498,6 +481,8 @@ mii->mii_media_active |= IFM_HDX; if ((sc->mii_flags & MIIF_HAVEFIBER) == 0) { + ar = PHY_READ(sc, E1000_AR); + lpar = PHY_READ(sc, E1000_LPAR); /* FLAG0==rx-flow-control FLAG1==tx-flow-control */ if ((ar & E1000_AR_PAUSE) && (lpar & E1000_LPAR_PAUSE)) { mii->mii_media_active |= IFM_FLAG0 | IFM_FLAG1; @@ -524,16 +509,19 @@ e1000phy_mii_phy_auto(struct e1000phy_softc *esc) { struct mii_softc *sc; + uint16_t reg; sc = &esc->mii_sc; - if ((sc->mii_flags & MIIF_HAVEFIBER) == 0) - PHY_WRITE(sc, E1000_AR, E1000_AR_10T | E1000_AR_10T_FD | + if ((sc->mii_flags & MIIF_HAVEFIBER) == 0) { + reg = PHY_READ(sc, E1000_AR); + reg |= E1000_AR_10T | E1000_AR_10T_FD | E1000_AR_100TX | E1000_AR_100TX_FD | - E1000_AR_PAUSE | E1000_AR_ASM_DIR); - else + E1000_AR_PAUSE | E1000_AR_ASM_DIR; + PHY_WRITE(sc, E1000_AR, reg | E1000_AR_SELECTOR_FIELD); + } else PHY_WRITE(sc, E1000_AR, E1000_FA_1000X_FD | E1000_FA_1000X | E1000_FA_SYM_PAUSE | E1000_FA_ASYM_PAUSE); - if (esc->mii_model != MII_MODEL_MARVELL_E3082) + if ((sc->mii_extcapabilities & (EXTSR_1000TFDX | EXTSR_1000THDX)) != 0) PHY_WRITE(sc, E1000_1GCR, E1000_1GCR_1000T_FD | E1000_1GCR_1000T); PHY_WRITE(sc, E1000_CR, ==== //depot/projects/soc2008/trasz_nfs4acl/sys/dev/mii/e1000phyreg.h#2 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/dev/mii/e1000phyreg.h,v 1.5 2007/10/29 05:50:22 yongari Exp $ */ +/* $FreeBSD: src/sys/dev/mii/e1000phyreg.h,v 1.6 2009/05/25 02:36:29 yongari Exp $ */ /*- * Principal Author: Parag Patel * Copyright (c) 2001 @@ -236,6 +236,16 @@ #define E1000_SCR_TX_FIFO_DEPTH_10 0x8000 #define E1000_SCR_TX_FIFO_DEPTH_12 0xC000 +/* 88E3016 only */ +#define E1000_SCR_AUTO_MDIX 0x0030 +#define E1000_SCR_SIGDET_POLARITY 0x0040 +#define E1000_SCR_EXT_DISTANCE 0x0080 +#define E1000_SCR_FEFI_DISABLE 0x0100 +#define E1000_SCR_NLP_GEN_DISABLE 0x0800 +#define E1000_SCR_LPNP 0x1000 +#define E1000_SCR_NLP_CHK_DISABLE 0x2000 +#define E1000_SCR_EN_DETECT 0x4000 + #define E1000_SCR_EN_DETECT_MASK 0x0300 /* 88E1112 page 2 */ ==== //depot/projects/soc2008/trasz_nfs4acl/sys/dev/mii/miidevs#8 (text+ko) ==== @@ -1,4 +1,4 @@ -$FreeBSD: src/sys/dev/mii/miidevs,v 1.63 2009/03/30 01:47:32 imp Exp $ +$FreeBSD: src/sys/dev/mii/miidevs,v 1.64 2009/05/25 02:36:29 yongari Exp $ /*$NetBSD: miidevs,v 1.6 1999/05/14 11:37:30 drochner Exp $*/ /*- @@ -247,6 +247,7 @@ model MARVELL E1116 0x0021 Marvell 88E1116 Gigabit PHY model MARVELL E1116R 0x0024 Marvell 88E1116R Gigabit PHY model MARVELL E1118 0x0022 Marvell 88E1118 Gigabit PHY +model MARVELL E3016 0x0026 Marvell 88E3016 10/100 Fast Ethernet PHY model xxMARVELL E1000 0x0005 Marvell 88E1000 Gigabit PHY model xxMARVELL E1011 0x0002 Marvell 88E1011 Gigabit PHY model xxMARVELL E1000_3 0x0003 Marvell 88E1000 Gigabit PHY ==== //depot/projects/soc2008/trasz_nfs4acl/sys/dev/msk/if_msk.c#8 (text+ko) ==== @@ -99,7 +99,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/msk/if_msk.c,v 1.40 2009/03/25 07:05:23 yongari Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/msk/if_msk.c,v 1.59 2009/05/25 08:26:39 yongari Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -190,13 +190,21 @@ { VENDORID_MARVELL, DEVICEID_MRVL_8062X, "Marvell Yukon 88E8062 SX/LX Gigabit Ethernet" }, { VENDORID_MARVELL, DEVICEID_MRVL_8035, - "Marvell Yukon 88E8035 Gigabit Ethernet" }, + "Marvell Yukon 88E8035 Fast Ethernet" }, { VENDORID_MARVELL, DEVICEID_MRVL_8036, - "Marvell Yukon 88E8036 Gigabit Ethernet" }, + "Marvell Yukon 88E8036 Fast Ethernet" }, { VENDORID_MARVELL, DEVICEID_MRVL_8038, - "Marvell Yukon 88E8038 Gigabit Ethernet" }, + "Marvell Yukon 88E8038 Fast Ethernet" }, { VENDORID_MARVELL, DEVICEID_MRVL_8039, - "Marvell Yukon 88E8039 Gigabit Ethernet" }, + "Marvell Yukon 88E8039 Fast Ethernet" }, + { VENDORID_MARVELL, DEVICEID_MRVL_8040, + "Marvell Yukon 88E8040 Fast Ethernet" }, + { VENDORID_MARVELL, DEVICEID_MRVL_8040T, + "Marvell Yukon 88E8040T Fast Ethernet" }, + { VENDORID_MARVELL, DEVICEID_MRVL_8048, + "Marvell Yukon 88E8048 Fast Ethernet" }, + { VENDORID_MARVELL, DEVICEID_MRVL_8070, + "Marvell Yukon 88E8070 Fast Ethernet" }, { VENDORID_MARVELL, DEVICEID_MRVL_4361, "Marvell Yukon 88E8050 Gigabit Ethernet" }, { VENDORID_MARVELL, DEVICEID_MRVL_4360, @@ -220,7 +228,8 @@ "Yukon EC Ultra", "Yukon Unknown", "Yukon EC", - "Yukon FE" + "Yukon FE", + "Yukon FE+" }; static int mskc_probe(device_t); @@ -285,7 +294,6 @@ static int msk_miibus_readreg(device_t, int, int); static int msk_miibus_writereg(device_t, int, int, int); static void msk_miibus_statchg(device_t); -static void msk_link_task(void *, int); static void msk_rxfilter(struct msk_if_softc *); static void msk_setvlan(struct msk_if_softc *, struct ifnet *); @@ -459,40 +467,44 @@ static void msk_miibus_statchg(device_t dev) { - struct msk_if_softc *sc_if; - - sc_if = device_get_softc(dev); - taskqueue_enqueue(taskqueue_swi, &sc_if->msk_link_task); -} - -static void -msk_link_task(void *arg, int pending) -{ struct msk_softc *sc; struct msk_if_softc *sc_if; struct mii_data *mii; struct ifnet *ifp; uint32_t gmac; - sc_if = (struct msk_if_softc *)arg; + sc_if = device_get_softc(dev); sc = sc_if->msk_softc; - MSK_IF_LOCK(sc_if); + MSK_IF_LOCK_ASSERT(sc_if); mii = device_get_softc(sc_if->msk_miibus); ifp = sc_if->msk_ifp; - if (mii == NULL || ifp == NULL) { - MSK_IF_UNLOCK(sc_if); + if (mii == NULL || ifp == NULL || + (ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) return; + + sc_if->msk_flags &= ~MSK_FLAG_LINK; + if ((mii->mii_media_status & (IFM_AVALID | IFM_ACTIVE)) == + (IFM_AVALID | IFM_ACTIVE)) { + switch (IFM_SUBTYPE(mii->mii_media_active)) { + case IFM_10_T: + case IFM_100_TX: + sc_if->msk_flags |= MSK_FLAG_LINK; + break; + case IFM_1000_T: + case IFM_1000_SX: + case IFM_1000_LX: + case IFM_1000_CX: + if ((sc_if->msk_flags & MSK_FLAG_FASTETHER) == 0) + sc_if->msk_flags |= MSK_FLAG_LINK; + break; + default: + break; + } } - if (mii->mii_media_status & IFM_ACTIVE) { - if (IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) - sc_if->msk_link = 1; - } else - sc_if->msk_link = 0; - - if (sc_if->msk_link != 0) { + if ((sc_if->msk_flags & MSK_FLAG_LINK) != 0) { /* Enable Tx FIFO Underrun. */ >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200905251632.n4PGWNpp080135>