1*1da177e4SLinus Torvalds /* 2*1da177e4SLinus Torvalds * AGPGART backend specific includes. Not for userspace consumption. 3*1da177e4SLinus Torvalds * 4*1da177e4SLinus Torvalds * Copyright (C) 2004 Silicon Graphics, Inc. 5*1da177e4SLinus Torvalds * Copyright (C) 2002-2003 Dave Jones 6*1da177e4SLinus Torvalds * Copyright (C) 1999 Jeff Hartmann 7*1da177e4SLinus Torvalds * Copyright (C) 1999 Precision Insight, Inc. 8*1da177e4SLinus Torvalds * Copyright (C) 1999 Xi Graphics, Inc. 9*1da177e4SLinus Torvalds * 10*1da177e4SLinus Torvalds * Permission is hereby granted, free of charge, to any person obtaining a 11*1da177e4SLinus Torvalds * copy of this software and associated documentation files (the "Software"), 12*1da177e4SLinus Torvalds * to deal in the Software without restriction, including without limitation 13*1da177e4SLinus Torvalds * the rights to use, copy, modify, merge, publish, distribute, sublicense, 14*1da177e4SLinus Torvalds * and/or sell copies of the Software, and to permit persons to whom the 15*1da177e4SLinus Torvalds * Software is furnished to do so, subject to the following conditions: 16*1da177e4SLinus Torvalds * 17*1da177e4SLinus Torvalds * The above copyright notice and this permission notice shall be included 18*1da177e4SLinus Torvalds * in all copies or substantial portions of the Software. 19*1da177e4SLinus Torvalds * 20*1da177e4SLinus Torvalds * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 21*1da177e4SLinus Torvalds * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22*1da177e4SLinus Torvalds * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 23*1da177e4SLinus Torvalds * JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 24*1da177e4SLinus Torvalds * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 25*1da177e4SLinus Torvalds * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 26*1da177e4SLinus Torvalds * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27*1da177e4SLinus Torvalds * 28*1da177e4SLinus Torvalds */ 29*1da177e4SLinus Torvalds 30*1da177e4SLinus Torvalds #ifndef _AGP_BACKEND_H 31*1da177e4SLinus Torvalds #define _AGP_BACKEND_H 1 32*1da177e4SLinus Torvalds 33*1da177e4SLinus Torvalds #ifdef __KERNEL__ 34*1da177e4SLinus Torvalds 35*1da177e4SLinus Torvalds #ifndef TRUE 36*1da177e4SLinus Torvalds #define TRUE 1 37*1da177e4SLinus Torvalds #endif 38*1da177e4SLinus Torvalds 39*1da177e4SLinus Torvalds #ifndef FALSE 40*1da177e4SLinus Torvalds #define FALSE 0 41*1da177e4SLinus Torvalds #endif 42*1da177e4SLinus Torvalds 43*1da177e4SLinus Torvalds enum chipset_type { 44*1da177e4SLinus Torvalds NOT_SUPPORTED, 45*1da177e4SLinus Torvalds SUPPORTED, 46*1da177e4SLinus Torvalds }; 47*1da177e4SLinus Torvalds 48*1da177e4SLinus Torvalds struct agp_version { 49*1da177e4SLinus Torvalds u16 major; 50*1da177e4SLinus Torvalds u16 minor; 51*1da177e4SLinus Torvalds }; 52*1da177e4SLinus Torvalds 53*1da177e4SLinus Torvalds struct agp_kern_info { 54*1da177e4SLinus Torvalds struct agp_version version; 55*1da177e4SLinus Torvalds struct pci_dev *device; 56*1da177e4SLinus Torvalds enum chipset_type chipset; 57*1da177e4SLinus Torvalds unsigned long mode; 58*1da177e4SLinus Torvalds unsigned long aper_base; 59*1da177e4SLinus Torvalds size_t aper_size; 60*1da177e4SLinus Torvalds int max_memory; /* In pages */ 61*1da177e4SLinus Torvalds int current_memory; 62*1da177e4SLinus Torvalds int cant_use_aperture; 63*1da177e4SLinus Torvalds unsigned long page_mask; 64*1da177e4SLinus Torvalds struct vm_operations_struct *vm_ops; 65*1da177e4SLinus Torvalds }; 66*1da177e4SLinus Torvalds 67*1da177e4SLinus Torvalds /* 68*1da177e4SLinus Torvalds * The agp_memory structure has information about the block of agp memory 69*1da177e4SLinus Torvalds * allocated. A caller may manipulate the next and prev pointers to link 70*1da177e4SLinus Torvalds * each allocated item into a list. These pointers are ignored by the backend. 71*1da177e4SLinus Torvalds * Everything else should never be written to, but the caller may read any of 72*1da177e4SLinus Torvalds * the items to determine the status of this block of agp memory. 73*1da177e4SLinus Torvalds */ 74*1da177e4SLinus Torvalds 75*1da177e4SLinus Torvalds struct agp_bridge_data; 76*1da177e4SLinus Torvalds 77*1da177e4SLinus Torvalds struct agp_memory { 78*1da177e4SLinus Torvalds struct agp_memory *next; 79*1da177e4SLinus Torvalds struct agp_memory *prev; 80*1da177e4SLinus Torvalds struct agp_bridge_data *bridge; 81*1da177e4SLinus Torvalds unsigned long *memory; 82*1da177e4SLinus Torvalds size_t page_count; 83*1da177e4SLinus Torvalds int key; 84*1da177e4SLinus Torvalds int num_scratch_pages; 85*1da177e4SLinus Torvalds off_t pg_start; 86*1da177e4SLinus Torvalds u32 type; 87*1da177e4SLinus Torvalds u32 physical; 88*1da177e4SLinus Torvalds u8 is_bound; 89*1da177e4SLinus Torvalds u8 is_flushed; 90*1da177e4SLinus Torvalds }; 91*1da177e4SLinus Torvalds 92*1da177e4SLinus Torvalds #define AGP_NORMAL_MEMORY 0 93*1da177e4SLinus Torvalds 94*1da177e4SLinus Torvalds extern struct agp_bridge_data *agp_bridge; 95*1da177e4SLinus Torvalds extern struct list_head agp_bridges; 96*1da177e4SLinus Torvalds 97*1da177e4SLinus Torvalds extern struct agp_bridge_data *(*agp_find_bridge)(struct pci_dev *); 98*1da177e4SLinus Torvalds 99*1da177e4SLinus Torvalds extern void agp_free_memory(struct agp_memory *); 100*1da177e4SLinus Torvalds extern struct agp_memory *agp_allocate_memory(struct agp_bridge_data *, size_t, u32); 101*1da177e4SLinus Torvalds extern int agp_copy_info(struct agp_bridge_data *, struct agp_kern_info *); 102*1da177e4SLinus Torvalds extern int agp_bind_memory(struct agp_memory *, off_t); 103*1da177e4SLinus Torvalds extern int agp_unbind_memory(struct agp_memory *); 104*1da177e4SLinus Torvalds extern void agp_enable(struct agp_bridge_data *, u32); 105*1da177e4SLinus Torvalds extern struct agp_bridge_data *agp_backend_acquire(struct pci_dev *); 106*1da177e4SLinus Torvalds extern void agp_backend_release(struct agp_bridge_data *); 107*1da177e4SLinus Torvalds 108*1da177e4SLinus Torvalds #endif /* __KERNEL__ */ 109*1da177e4SLinus Torvalds #endif /* _AGP_BACKEND_H */ 110