1 /* $OpenBSD: agpvar.h,v 1.33 2015/12/19 16:07:20 kettenis Exp $ */ 2 /* $NetBSD: agpvar.h,v 1.4 2001/10/01 21:54:48 fvdl Exp $ */ 3 4 /*- 5 * Copyright (c) 2000 Doug Rabson 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 * 29 * $FreeBSD: src/sys/pci/agppriv.h,v 1.3 2000/07/12 10:13:04 dfr Exp $ 30 */ 31 32 #ifndef _PCI_AGPVAR_H_ 33 #define _PCI_AGPVAR_H_ 34 35 /* #define AGP_DEBUG */ 36 #ifdef AGP_DEBUG 37 #define AGP_DPF(fmt, arg...) do { printf("agp: " fmt ,##arg); } while (0) 38 #else 39 #define AGP_DPF(fmt, arg...) do {} while (0) 40 #endif 41 42 #define AGPUNIT(x) minor(x) 43 44 struct agp_attach_args { 45 char *aa_busname; 46 struct pci_attach_args *aa_pa; 47 }; 48 49 struct agpbus_attach_args { 50 char *aa_busname; /*so pci doesn't conflict*/ 51 struct pci_attach_args *aa_pa; 52 const struct agp_methods *aa_methods; 53 bus_addr_t aa_apaddr; 54 bus_size_t aa_apsize; 55 }; 56 57 enum agp_acquire_state { 58 AGP_ACQUIRE_FREE, 59 AGP_ACQUIRE_USER, 60 AGP_ACQUIRE_KERNEL 61 }; 62 63 /* 64 * This structure is used to query the state of the AGP system. 65 */ 66 struct agp_info { 67 u_int32_t ai_mode; 68 bus_addr_t ai_aperture_base; 69 bus_size_t ai_aperture_size; 70 vsize_t ai_memory_allowed; 71 vsize_t ai_memory_used; 72 u_int32_t ai_devid; 73 }; 74 75 struct agp_memory_info { 76 vsize_t ami_size; /* size in bytes */ 77 bus_addr_t ami_physical; /* bogus hack for i810 */ 78 off_t ami_offset; /* page offset if bound */ 79 int ami_is_bound; /* non-zero if bound */ 80 }; 81 82 struct agp_methods { 83 void (*bind_page)(void *, bus_addr_t, paddr_t, int); 84 void (*unbind_page)(void *, bus_addr_t); 85 void (*flush_tlb)(void *); 86 int (*enable)(void *, u_int32_t mode); 87 }; 88 89 /* 90 * All chipset drivers must have this at the start of their softc. 91 */ 92 struct agp_softc { 93 struct device sc_dev; 94 95 const struct agp_methods *sc_methods; /* callbacks */ 96 void *sc_chipc; /* chipset softc */ 97 98 bus_dma_tag_t sc_dmat; 99 bus_space_tag_t sc_memt; 100 pci_chipset_tag_t sc_pc; 101 pcitag_t sc_pcitag; 102 bus_addr_t sc_apaddr; 103 bus_size_t sc_apsize; 104 uint32_t sc_stolen_entries; 105 pcireg_t sc_id; 106 107 int sc_opened; 108 int sc_capoff; 109 int sc_nextid; /* next mem block id */ 110 enum agp_acquire_state sc_state; 111 112 u_int32_t sc_maxmem; /* mem upper bound */ 113 u_int32_t sc_allocated; /* amount allocated */ 114 }; 115 116 struct agp_gatt { 117 u_int32_t ag_entries; 118 u_int32_t *ag_virtual; 119 bus_addr_t ag_physical; 120 bus_dmamap_t ag_dmamap; 121 bus_dma_segment_t ag_dmaseg; 122 size_t ag_size; 123 }; 124 125 struct agp_map; 126 127 /* 128 * Functions private to the AGP code. 129 */ 130 struct device *agp_attach_bus(struct pci_attach_args *, 131 const struct agp_methods *, bus_addr_t, bus_size_t, 132 struct device *); 133 struct agp_gatt * 134 agp_alloc_gatt(bus_dma_tag_t, u_int32_t); 135 void agp_free_gatt(bus_dma_tag_t, struct agp_gatt *); 136 void agp_flush_cache(void); 137 void agp_flush_cache_range(vaddr_t, vsize_t); 138 int agp_generic_enable(struct agp_softc *, u_int32_t); 139 int agp_init_map(bus_space_tag_t, bus_addr_t, bus_size_t, int, struct 140 agp_map **); 141 void agp_destroy_map(struct agp_map *); 142 int agp_map_subregion(struct agp_map *, bus_size_t, bus_size_t, 143 bus_space_handle_t *); 144 void agp_unmap_subregion(struct agp_map *, bus_space_handle_t, 145 bus_size_t); 146 void agp_map_atomic(struct agp_map *, bus_size_t, bus_space_handle_t *); 147 void agp_unmap_atomic(struct agp_map *, bus_space_handle_t); 148 149 int agp_alloc_dmamem(bus_dma_tag_t, size_t, bus_dmamap_t *, 150 bus_addr_t *, bus_dma_segment_t *); 151 void agp_free_dmamem(bus_dma_tag_t, size_t, bus_dmamap_t, 152 bus_dma_segment_t *); 153 int agpdev_print(void *, const char *); 154 int agpbus_probe(struct agp_attach_args *aa); 155 156 paddr_t agp_mmap(struct agp_softc *, off_t, int); 157 158 /* 159 * Kernel API 160 */ 161 /* 162 * Find the AGP device and return it. 163 */ 164 void *agp_find_device(int); 165 166 /* 167 * Return the current owner of the AGP chipset. 168 */ 169 enum agp_acquire_state agp_state(void *); 170 171 /* 172 * Query the state of the AGP system. 173 */ 174 void agp_get_info(void *, struct agp_info *); 175 176 /* 177 * Acquire the AGP chipset for use by the kernel. Returns EBUSY if the 178 * AGP chipset is already acquired by another user. 179 */ 180 int agp_acquire(void *); 181 182 /* 183 * Release the AGP chipset. 184 */ 185 int agp_release(void *); 186 187 /* 188 * Enable the agp hardware with the relavent mode. The mode bits are 189 * defined in <dev/pci/agpreg.h> 190 */ 191 int agp_enable(void *, u_int32_t); 192 193 /* 194 * Retrieve information about a memory block allocated with 195 * agp_alloc_memory(). 196 */ 197 void agp_memory_info(void *, void *, struct agp_memory_info *); 198 199 #endif /* !_PCI_AGPVAR_H_ */ 200