xref: /linux-6.15/include/linux/agp_backend.h (revision 1da177e4)
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