Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/lib/libarch/x86_64 libarch for x86_64, mtrr only for now. Th...



details:   https://anonhg.NetBSD.org/src/rev/8b17a64566be
branches:  trunk
changeset: 532956:8b17a64566be
user:      fvdl <fvdl%NetBSD.org@localhost>
date:      Tue Jun 18 08:29:35 2002 +0000

description:
libarch for x86_64, mtrr only for now. This must later be fixed so
that code is shared with i386.

diffstat:

 lib/libarch/x86_64/Makefile.inc      |    9 +
 lib/libarch/x86_64/shlib_version     |    5 +
 lib/libarch/x86_64/x86_64_get_mtrr.2 |  172 +++++++++++++++++++++++++++++++++++
 lib/libarch/x86_64/x86_64_mtrr.c     |   26 +++++
 4 files changed, 212 insertions(+), 0 deletions(-)

diffs (228 lines):

diff -r 8e0e1aef3a61 -r 8b17a64566be lib/libarch/x86_64/Makefile.inc
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/libarch/x86_64/Makefile.inc   Tue Jun 18 08:29:35 2002 +0000
@@ -0,0 +1,9 @@
+#      $NetBSD: Makefile.inc,v 1.1 2002/06/18 08:29:35 fvdl Exp $
+
+.if (${MACHINE_ARCH} == "x86_64")
+SRCS+= x86_64_mtrr.c
+.endif
+
+MAN+=  x86_64_get_mtrr.2
+
+MLINKS+=x86_64_get_mtrr.2 x86_64_set_mtrr.2
diff -r 8e0e1aef3a61 -r 8b17a64566be lib/libarch/x86_64/shlib_version
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/libarch/x86_64/shlib_version  Tue Jun 18 08:29:35 2002 +0000
@@ -0,0 +1,5 @@
+#       $NetBSD: shlib_version,v 1.1 2002/06/18 08:29:35 fvdl Exp $
+#       Remember to update distrib/sets/lists/base/md.x86_64 when changing
+#
+major=0
+minor=0
diff -r 8e0e1aef3a61 -r 8b17a64566be lib/libarch/x86_64/x86_64_get_mtrr.2
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/libarch/x86_64/x86_64_get_mtrr.2      Tue Jun 18 08:29:35 2002 +0000
@@ -0,0 +1,172 @@
+.\"     $NetBSD: x86_64_get_mtrr.2,v 1.1 2002/06/18 08:29:35 fvdl Exp $
+.\"
+.\" Copyright (c) 2001 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Gregory McGarry.
+.\"
+.\" 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.
+.\" 3. All advertising materials mentioning features or use of this software
+.\"    must display the following acknowledgement:
+.\"        This product includes software developed by the NetBSD
+.\"        Foundation, Inc. and its contributors.
+.\" 4. Neither the name of The NetBSD Foundation nor the names of its
+.\"    contributors may be used to endorse or promote products derived
+.\"    from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
+.\"
+.Dd November 10, 2001
+.Dt X86_64_GET_MTRR 3 x86_64
+.Os
+.Sh NAME
+.Nm x86_64_get_mtrr ,
+.Nm x86_64_set_mtrr
+.Nd access Memory Type Range Registers
+.Sh LIBRARY
+.Lb libx86_64
+.Sh SYNOPSIS
+.Fd #include \*[Lt]sys/types.h\*[Gt]
+.Fd #include \*[Lt]machine/sysarch.h\*[Gt]
+.Fd #include \*[Lt]machine/mtrr.h\*[Gt]
+.Ft int
+.Fn x86_64_get_mtrr "struct mtrr *mtrrp" "int *n"
+.Ft int
+.Fn x86_64_set_mtrr "struct mtrr *mtrrp" "int *n"
+.Sh DESCRIPTION
+These functions provide an interface to the MTRR registers found on
+686-class processors for controlling processor access to memory ranges.
+This is most useful for accessing devices such as video accelerators
+on
+.Xr pci 4
+and
+.Xr agp 4
+busses.  For example, enabling write-combining allows bus-write transfers
+to be combined into a larger transfer before bursting over the bus.  This
+can increase performance of write operations 2.5 times or more. 
+.Pp
+.Fa mtrrp
+is a pointer to one or more mtrr structures, as described below. The
+.Fa n
+argument is a pointer to an integer containing the number of structures
+pointed to by
+.Fa mtrrp .
+For
+.Fn x86_64_set_mtrr
+the integer pointed to by
+.Fa n
+will be updated to reflect the actual number of MTRRs successfully set.
+For
+.Fn x86_64_get_mtrr
+no more than
+.Fa n
+structures will be copied out, and the integer value pointed to by
+.Fa n
+will be updated to reflect the actual number of valid structures
+retrieved.
+A NULL argument to
+.Fa mtrrp
+will result in just the number of MTRRs available being returned
+in the integer pointed to by
+.Fa n .
+.Pp
+The argument
+.Fa mtrrp
+has the following structure:
+.Bd -literal
+struct mtrr {
+        uint64_t base;
+        uint64_t len;
+        uint8_t type;
+        int flags;
+        pid_t owner;
+};
+.Ed
+.Pp
+The location of the mapping is described by its physical base address
+.Em base
+and length
+.Em len .
+Valid values for
+.Em type
+are:
+.Pp
+.Bl -tag -offset indent -width MTRR_TYPE_UNDEF1 -compact
+.It MTRR_TYPE_UC
+uncached memory
+.It MTRR_TYPE_WC
+use write-combining
+.It MTRR_TYPE_WT
+use write-through caching
+.It MTRR_TYPE_WP
+write-protected memory
+.It MTRR_TYPE_WB
+use write-back caching
+.El
+.Pp
+Valid values for
+.Em flags
+are:
+.Pp
+.Bl -tag -offset indent -width MTRR_PRIVATE -compact
+.It MTRR_PRIVATE
+own range, reset the MTRR when the current process exits
+.It MTRR_FIXED
+use fixed range MTRR
+.It MTRR_VALID
+entry is valid
+.El
+.Pp
+The
+.Em owner
+member the PID of the user process which claims the mapping.  It is
+only valid if MTRR_PRIVATE is set in
+.Em flags .
+To clear/reset MTRRs, use a
+.Em flags
+field without MTRR_VALID set.
+.Sh RETURN VALUES
+Upon successful completion zero is returned, otherwise -1 is returned
+on failure, and the global variable
+.Va errno
+is set to indicate the error. The integer value pointed to by
+.Fa n
+will be container the number of successfully processed mtrr structures
+in both cases.
+.Sh ERRORS
+.Bl -tag -width [EINVAL]
+.It Bq Er ENOSYS
+The currently running kernel or CPU has no MTRR support.
+.It Bq Er EINVAL
+The currently running kernel has no MTRR support, or one of the mtrr
+structures pointed to by
+.Fa mtrrp
+is invalid.
+.It Bq Er EBUSY
+No unused MTRRs are available.
+.El
+.Sh HISTORY
+The
+.Fn x86_64_get_mtrr
+and
+.Fn x86_64_set_mtrr
+were derived from their i386 counterparts, which appeared in
+.Nx 1.6 .
diff -r 8e0e1aef3a61 -r 8b17a64566be lib/libarch/x86_64/x86_64_mtrr.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/libarch/x86_64/x86_64_mtrr.c  Tue Jun 18 08:29:35 2002 +0000
@@ -0,0 +1,26 @@
+/*     $NetBSD: x86_64_mtrr.c,v 1.1 2002/06/18 08:29:36 fvdl Exp $     */
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+#include <machine/sysarch.h>
+
+int
+x86_64_get_mtrr(struct mtrr *mtrrp, int *n)
+{
+       struct x86_64_get_mtrr_args a;
+
+       a.mtrrp = mtrrp;
+       a.n = n;
+       return sysarch(X86_64_GET_MTRR, (void *)&a);
+}
+
+int
+x86_64_set_mtrr(struct mtrr *mtrrp, int *n)
+{
+       struct x86_64_set_mtrr_args a;
+
+       a.mtrrp = mtrrp;
+       a.n = n;
+       return sysarch(X86_64_SET_MTRR, (void *)&a);
+}



Home | Main Index | Thread Index | Old Index