summaryrefslogtreecommitdiff
path: root/include/arch/x86_64/linux/agpgart.h
blob: 191d29fc1993d4bb48ab92d7cb0a4469facbb5b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*
 * AGPGART module version 0.99
 * Copyright (C) 1999 Jeff Hartmann
 * Copyright (C) 1999 Precision Insight, Inc.
 * Copyright (C) 1999 Xi Graphics, Inc.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM,
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
 * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *
 */

#ifndef _AGP_H
#define _AGP_H

#define AGPIOC_BASE	     'A'
#define AGPIOC_INFO	     _IOR(AGPIOC_BASE, 0, struct agp_info *)
#define AGPIOC_ACQUIRE	     _IO(AGPIOC_BASE, 1)
#define AGPIOC_RELEASE	     _IO(AGPIOC_BASE, 2)
#define AGPIOC_SETUP	     _IOW(AGPIOC_BASE, 3, struct agp_setup *)
#define AGPIOC_RESERVE	     _IOW(AGPIOC_BASE, 4, struct agp_region *)
#define AGPIOC_PROTECT	     _IOW(AGPIOC_BASE, 5, struct agp_region *)
#define AGPIOC_ALLOCATE	     _IOWR(AGPIOC_BASE, 6, struct agp_allocate *)
#define AGPIOC_DEALLOCATE    _IOW(AGPIOC_BASE, 7, int)
#define AGPIOC_BIND	     _IOW(AGPIOC_BASE, 8, struct agp_bind *)
#define AGPIOC_UNBIND	     _IOW(AGPIOC_BASE, 9, struct agp_unbind *)
#define AGPIOC_CHIPSET_FLUSH _IO(AGPIOC_BASE, 10)

#define AGP_DEVICE "/dev/agpgart"

#ifndef TRUE
#define TRUE 1
#endif

#ifndef FALSE
#define FALSE 0
#endif

#include <linux/types.h>

struct agp_version {
	__u16 major;
	__u16 minor;
};

typedef struct _agp_info {
	struct agp_version version; /* version of the driver        */
	__u32 bridge_id;	    /* bridge vendor/device         */
	__u32 agp_mode;		    /* mode info of bridge          */
	unsigned long aper_base;    /* base of aperture             */
	__kernel_size_t aper_size;  /* size of aperture             */
	__kernel_size_t pg_total;   /* max pages (swap + system)    */
	__kernel_size_t pg_system;  /* max pages (system)           */
	__kernel_size_t pg_used;    /* current pages used           */
} agp_info;

typedef struct _agp_setup {
	__u32 agp_mode; /* mode info of bridge          */
} agp_setup;

/*
 * The "prot" down below needs still a "sleep" flag somehow ...
 */
typedef struct _agp_segment {
	__kernel_off_t pg_start;  /* starting page to populate    */
	__kernel_size_t pg_count; /* number of pages              */
	int prot;		  /* prot flags for mmap          */
} agp_segment;

typedef struct _agp_region {
	__kernel_pid_t pid;	   /* pid of process       */
	__kernel_size_t seg_count; /* number of segments   */
	struct _agp_segment *seg_list;
} agp_region;

typedef struct _agp_allocate {
	int key;		  /* tag of allocation            */
	__kernel_size_t pg_count; /* number of pages             */
	__u32 type;		  /* 0 == normal, other devspec   */
	__u32 physical;		  /* device specific (some devices
				   * need a phys address of the
				   * actual page behind the gatt
				   * table)                        */
} agp_allocate;

typedef struct _agp_bind {
	int key;		 /* tag of allocation            */
	__kernel_off_t pg_start; /* starting page to populate    */
} agp_bind;

typedef struct _agp_unbind {
	int key;	/* tag of allocation            */
	__u32 priority; /* priority for paging out      */
} agp_unbind;

#endif /* _AGP_H */