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