summaryrefslogtreecommitdiffstats
path: root/sys/pci/agp_if.m
diff options
context:
space:
mode:
authordfr <dfr@FreeBSD.org>2000-06-09 16:04:30 +0000
committerdfr <dfr@FreeBSD.org>2000-06-09 16:04:30 +0000
commitab33dfac0143d5afabdb2d640b8d7d47c43609f4 (patch)
tree7d9995e89a1113f6d052f26ef4daa5686f8efb76 /sys/pci/agp_if.m
parentfe0cef0780df985c05e3db3351ed16ef482b7c6a (diff)
downloadFreeBSD-src-ab33dfac0143d5afabdb2d640b8d7d47c43609f4.zip
FreeBSD-src-ab33dfac0143d5afabdb2d640b8d7d47c43609f4.tar.gz
A driver for programming the AGP hardware. This is only very lightly
tested on Intel BX chipsets only. The other agp minidrivers are totally untested. The programming api is a subset of the Linux api and is only intended to be enough for the X server to use. There is also an in-kernel api for the use of other kernel modules such as the 3D DRI.
Diffstat (limited to 'sys/pci/agp_if.m')
-rw-r--r--sys/pci/agp_if.m134
1 files changed, 134 insertions, 0 deletions
diff --git a/sys/pci/agp_if.m b/sys/pci/agp_if.m
new file mode 100644
index 0000000..06f64d3
--- /dev/null
+++ b/sys/pci/agp_if.m
@@ -0,0 +1,134 @@
+#
+# Copyright (c) 2000 Doug Rabson
+# 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.
+#
+# $FreeBSD$
+#
+
+#include <sys/bus.h>
+
+#
+# The AGP interface is used internally to the agp driver to isolate the
+# differences between various AGP chipsets into chipset mini drivers. It
+# should not be used outside the AGP driver. The kernel api for accessing
+# AGP functionality is described in <pci/agpvar,h>
+#
+INTERFACE agp;
+
+#
+# Return the current aperture size.
+#
+METHOD u_int32_t get_aperture {
+ device_t dev;
+};
+
+#
+# Set the size of the aperture. Return EINVAL on error or 0 on success.
+#
+METHOD int set_aperture {
+ device_t dev;
+ u_int32_t aperture;
+};
+
+#
+# Bind a single page in the AGP aperture to a given physical address.
+# The offset is a byte offset within the aperture which must be
+# aligned to an AGP page boundary.
+#
+METHOD int bind_page {
+ device_t dev;
+ vm_offset_t offset;
+ vm_offset_t physical;
+};
+
+#
+# Unbind a single page in the AGP aperture.
+#
+METHOD int unbind_page {
+ device_t dev;
+ vm_offset_t offset;
+};
+
+#
+# Flush the GATT TLB. This is used after a call to bind_page to
+# ensure that any mappings cached in the chipset are discarded.
+#
+METHOD void flush_tlb {
+ device_t dev;
+};
+
+#
+# Enable the agp hardware with the relavent mode. The mode bits are
+# defined in <pci/agpreg.h>
+#
+METHOD int enable {
+ device_t dev;
+ u_int32_t mode;
+};
+
+#
+# Allocate memory of a given type. The type is a chipset-specific
+# code which is used by certain integrated agp graphics chips
+# (basically just the i810 for now) to access special features of
+# the chipset. An opaque handle representing the memory region is
+# returned and can be used as an argument to free_memory, bind_memory
+# and unbind_memory.
+#
+# The size is specified in bytes but must be a multiple of the AGP
+# page size.
+#
+METHOD struct agp_memory * alloc_memory {
+ device_t dev;
+ int type;
+ vm_size_t size;
+};
+
+#
+# Free a memory region previously allocated with alloc_memory. Return
+# EBUSY if the memory is bound.
+#
+METHOD int free_memory {
+ device_t dev;
+ struct agp_memory *mem;
+};
+
+#
+# Bind a memory region to a specific byte offset within the chipset's
+# AGP aperture. This effectively defines a range of contiguous
+# physical address which alias the (possibly uncontiguous) pages in
+# the memory region.
+#
+METHOD int bind_memory {
+ device_t dev;
+ struct agp_memory *mem;
+ vm_offset_t offset;
+};
+
+#
+# Unbind a memory region bound with bind_memory.
+#
+METHOD int unbind_memory {
+ device_t dev;
+ struct agp_memory *handle;
+};
OpenPOWER on IntegriCloud