1#- 2# Copyright (c) 2000 Doug Rabson 3# All rights reserved. 4# 5# Redistribution and use in source and binary forms, with or without 6# modification, are permitted provided that the following conditions 7# are met: 8# 1. Redistributions of source code must retain the above copyright 9# notice, this list of conditions and the following disclaimer. 10# 2. Redistributions in binary form must reproduce the above copyright 11# notice, this list of conditions and the following disclaimer in the 12# documentation and/or other materials provided with the distribution. 13# 14# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24# SUCH DAMAGE. 25# 26# 27 28#include <sys/bus.h> 29 30# 31# The AGP interface is used internally to the agp driver to isolate the 32# differences between various AGP chipsets into chipset mini drivers. It 33# should not be used outside the AGP driver. The kernel api for accessing 34# AGP functionality is described in <dev/agp/agpvar.h> 35# 36INTERFACE agp; 37 38CODE { 39 static int 40 null_agp_chipset_flush(device_t dev) 41 { 42 return (ENXIO); 43 } 44}; 45 46# 47# Return the current aperture size. 48# 49METHOD u_int32_t get_aperture { 50 device_t dev; 51}; 52 53# 54# Set the size of the aperture. Return EINVAL on error or 0 on success. 55# 56METHOD int set_aperture { 57 device_t dev; 58 u_int32_t aperture; 59}; 60 61# 62# Bind a single page in the AGP aperture to a given physical address. 63# The offset is a byte offset within the aperture which must be 64# aligned to an AGP page boundary. 65# 66METHOD int bind_page { 67 device_t dev; 68 vm_offset_t offset; 69 vm_offset_t physical; 70}; 71 72# 73# Unbind a single page in the AGP aperture. 74# 75METHOD int unbind_page { 76 device_t dev; 77 vm_offset_t offset; 78}; 79 80# 81# Flush the GATT TLB. This is used after a call to bind_page to 82# ensure that any mappings cached in the chipset are discarded. 83# 84METHOD void flush_tlb { 85 device_t dev; 86}; 87 88# 89# Enable the agp hardware with the relavent mode. The mode bits are 90# defined in <dev/agp/agpreg.h> 91# 92METHOD int enable { 93 device_t dev; 94 u_int32_t mode; 95}; 96 97# 98# Allocate memory of a given type. The type is a chipset-specific 99# code which is used by certain integrated agp graphics chips 100# (basically just the i810 for now) to access special features of 101# the chipset. An opaque handle representing the memory region is 102# returned and can be used as an argument to free_memory, bind_memory 103# and unbind_memory. 104# 105# The size is specified in bytes but must be a multiple of the AGP 106# page size. 107# 108METHOD struct agp_memory * alloc_memory { 109 device_t dev; 110 int type; 111 vm_size_t size; 112}; 113 114# 115# Free a memory region previously allocated with alloc_memory. Return 116# EBUSY if the memory is bound. 117# 118METHOD int free_memory { 119 device_t dev; 120 struct agp_memory *mem; 121}; 122 123# 124# Bind a memory region to a specific byte offset within the chipset's 125# AGP aperture. This effectively defines a range of contiguous 126# physical address which alias the (possibly uncontiguous) pages in 127# the memory region. 128# 129METHOD int bind_memory { 130 device_t dev; 131 struct agp_memory *mem; 132 vm_offset_t offset; 133}; 134 135# 136# Unbind a memory region bound with bind_memory. 137# 138METHOD int unbind_memory { 139 device_t dev; 140 struct agp_memory *handle; 141}; 142 143METHOD int chipset_flush { 144 device_t dev; 145} DEFAULT null_agp_chipset_flush; 146