diff options
author | dfr <dfr@FreeBSD.org> | 2000-06-09 16:04:30 +0000 |
---|---|---|
committer | dfr <dfr@FreeBSD.org> | 2000-06-09 16:04:30 +0000 |
commit | ab33dfac0143d5afabdb2d640b8d7d47c43609f4 (patch) | |
tree | 7d9995e89a1113f6d052f26ef4daa5686f8efb76 /sys/pci/agp_if.m | |
parent | fe0cef0780df985c05e3db3351ed16ef482b7c6a (diff) | |
download | FreeBSD-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.m | 134 |
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; +}; |