agpgart.h revision 64b33619a30ff18c1535ee779572ecffcc4711d2
11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * AGPGART module version 0.99
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1999 Jeff Hartmann
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1999 Precision Insight, Inc.
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1999 Xi Graphics, Inc.
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Permission is hereby granted, free of charge, to any person obtaining a
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * copy of this software and associated documentation files (the "Software"),
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * to deal in the Software without restriction, including without limitation
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the rights to use, copy, modify, merge, publish, distribute, sublicense,
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * and/or sell copies of the Software, and to permit persons to whom the
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Software is furnished to do so, subject to the following conditions:
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The above copyright notice and this permission notice shall be included
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * in all copies or substantial portions of the Software.
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM,
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _AGP_H
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _AGP_H 1
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGPIOC_BASE       'A'
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGPIOC_INFO       _IOR (AGPIOC_BASE, 0, struct agp_info*)
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGPIOC_ACQUIRE    _IO  (AGPIOC_BASE, 1)
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGPIOC_RELEASE    _IO  (AGPIOC_BASE, 2)
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGPIOC_SETUP      _IOW (AGPIOC_BASE, 3, struct agp_setup*)
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGPIOC_RESERVE    _IOW (AGPIOC_BASE, 4, struct agp_region*)
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGPIOC_PROTECT    _IOW (AGPIOC_BASE, 5, struct agp_region*)
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGPIOC_ALLOCATE   _IOWR(AGPIOC_BASE, 6, struct agp_allocate*)
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGPIOC_DEALLOCATE _IOW (AGPIOC_BASE, 7, int)
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGPIOC_BIND       _IOW (AGPIOC_BASE, 8, struct agp_bind*)
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGPIOC_UNBIND     _IOW (AGPIOC_BASE, 9, struct agp_unbind*)
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGP_DEVICE      "/dev/agpgart"
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef TRUE
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TRUE 1
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef FALSE
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FALSE 0
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __KERNEL__
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/types.h>
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/types.h>
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_version {
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u16 major;
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u16 minor;
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct _agp_info {
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct agp_version version;	/* version of the driver        */
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32 bridge_id;	/* bridge vendor/device         */
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32 agp_mode;		/* mode info of bridge          */
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long aper_base;/* base of aperture             */
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t aper_size;	/* size of aperture             */
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t pg_total;	/* max pages (swap + system)    */
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t pg_system;	/* max pages (system)           */
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t pg_used;		/* current pages used           */
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} agp_info;
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct _agp_setup {
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32 agp_mode;		/* mode info of bridge          */
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} agp_setup;
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The "prot" down below needs still a "sleep" flag somehow ...
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct _agp_segment {
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	off_t pg_start;		/* starting page to populate    */
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t pg_count;	/* number of pages              */
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int prot;		/* prot flags for mmap          */
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} agp_segment;
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct _agp_region {
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	pid_t pid;		/* pid of process               */
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t seg_count;	/* number of segments           */
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct _agp_segment *seg_list;
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} agp_region;
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct _agp_allocate {
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int key;		/* tag of allocation            */
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t pg_count;	/* number of pages              */
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32 type;		/* 0 == normal, other devspec   */
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   	__u32 physical;         /* device specific (some devices
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * need a phys address of the
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * actual page behind the gatt
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * table)                        */
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} agp_allocate;
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct _agp_bind {
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int key;		/* tag of allocation            */
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	off_t pg_start;		/* starting page to populate    */
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} agp_bind;
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct _agp_unbind {
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int key;		/* tag of allocation            */
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32 priority;		/* priority for paging out      */
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} agp_unbind;
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else				/* __KERNEL__ */
112168678233ca45af3f74fef60c4265fa5dd217e29Andrew Morton#include <linux/mutex.h>
11372b9760b65cbe0d24e668c34c8fefb2ba417f14bDavid Woodhouse#include <linux/agp_backend.h>
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGPGART_MINOR 175
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_info {
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct agp_version version;	/* version of the driver        */
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 bridge_id;		/* bridge vendor/device         */
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 agp_mode;		/* mode info of bridge          */
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long aper_base;/* base of aperture             */
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t aper_size;	/* size of aperture             */
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t pg_total;	/* max pages (swap + system)    */
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t pg_system;	/* max pages (system)           */
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t pg_used;		/* current pages used           */
1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_setup {
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 agp_mode;		/* mode info of bridge          */
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The "prot" down below needs still a "sleep" flag somehow ...
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_segment {
1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	off_t pg_start;		/* starting page to populate    */
1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t pg_count;	/* number of pages              */
1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int prot;		/* prot flags for mmap          */
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_segment_priv {
1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	off_t pg_start;
1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t pg_count;
1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	pgprot_t prot;
1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_region {
1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	pid_t pid;		/* pid of process               */
1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t seg_count;	/* number of segments           */
1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct agp_segment *seg_list;
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_allocate {
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int key;		/* tag of allocation            */
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t pg_count;	/* number of pages              */
1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 type;		/* 0 == normal, other devspec   */
1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 physical;           /* device specific (some devices
1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * need a phys address of the
1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * actual page behind the gatt
1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * table)                        */
1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_bind {
1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int key;		/* tag of allocation            */
1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	off_t pg_start;		/* starting page to populate    */
1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_unbind {
1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int key;		/* tag of allocation            */
1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 priority;		/* priority for paging out      */
1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_client {
1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct agp_client *next;
1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct agp_client *prev;
1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	pid_t pid;
1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int num_segments;
1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct agp_segment_priv **segments;
1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_controller {
1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct agp_controller *next;
1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct agp_controller *prev;
1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	pid_t pid;
1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int num_clients;
1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct agp_memory *pool;
1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct agp_client *clients;
1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGP_FF_ALLOW_CLIENT		0
1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGP_FF_ALLOW_CONTROLLER 	1
1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGP_FF_IS_CLIENT		2
1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGP_FF_IS_CONTROLLER		3
1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGP_FF_IS_VALID 		4
1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_file_private {
1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct agp_file_private *next;
1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct agp_file_private *prev;
1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	pid_t my_pid;
20064b33619a30ff18c1535ee779572ecffcc4711d2Al Viro	unsigned long access_flags;	/* long req'd for set_bit --RR */
2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_front_data {
204168678233ca45af3f74fef60c4265fa5dd217e29Andrew Morton	struct mutex agp_mutex;
2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct agp_controller *current_controller;
2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct agp_controller *controllers;
2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct agp_file_private *file_priv_list;
2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 used_by_controller;
2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 backend_acquired;
2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif				/* __KERNEL__ */
2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif				/* _AGP_H */
215