Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/dev/agp/agp_if.m
39507 views
1
#-
2
# Copyright (c) 2000 Doug Rabson
3
# All rights reserved.
4
#
5
# Redistribution and use in source and binary forms, with or without
6
# modification, are permitted provided that the following conditions
7
# are met:
8
# 1. Redistributions of source code must retain the above copyright
9
# notice, this list of conditions and the following disclaimer.
10
# 2. Redistributions in binary form must reproduce the above copyright
11
# notice, this list of conditions and the following disclaimer in the
12
# documentation and/or other materials provided with the distribution.
13
#
14
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24
# SUCH DAMAGE.
25
#
26
#
27
28
#include <sys/bus.h>
29
30
#
31
# The AGP interface is used internally to the agp driver to isolate the
32
# differences between various AGP chipsets into chipset mini drivers. It
33
# should not be used outside the AGP driver. The kernel api for accessing
34
# AGP functionality is described in <dev/agp/agpvar.h>
35
#
36
INTERFACE agp;
37
38
CODE {
39
static int
40
null_agp_chipset_flush(device_t dev)
41
{
42
return (ENXIO);
43
}
44
};
45
46
#
47
# Return the current aperture size.
48
#
49
METHOD u_int32_t get_aperture {
50
device_t dev;
51
};
52
53
#
54
# Set the size of the aperture. Return EINVAL on error or 0 on success.
55
#
56
METHOD int set_aperture {
57
device_t dev;
58
u_int32_t aperture;
59
};
60
61
#
62
# Bind a single page in the AGP aperture to a given physical address.
63
# The offset is a byte offset within the aperture which must be
64
# aligned to an AGP page boundary.
65
#
66
METHOD int bind_page {
67
device_t dev;
68
vm_offset_t offset;
69
vm_offset_t physical;
70
};
71
72
#
73
# Unbind a single page in the AGP aperture.
74
#
75
METHOD int unbind_page {
76
device_t dev;
77
vm_offset_t offset;
78
};
79
80
#
81
# Flush the GATT TLB. This is used after a call to bind_page to
82
# ensure that any mappings cached in the chipset are discarded.
83
#
84
METHOD void flush_tlb {
85
device_t dev;
86
};
87
88
#
89
# Enable the agp hardware with the relavent mode. The mode bits are
90
# defined in <dev/agp/agpreg.h>
91
#
92
METHOD int enable {
93
device_t dev;
94
u_int32_t mode;
95
};
96
97
#
98
# Allocate memory of a given type. The type is a chipset-specific
99
# code which is used by certain integrated agp graphics chips
100
# (basically just the i810 for now) to access special features of
101
# the chipset. An opaque handle representing the memory region is
102
# returned and can be used as an argument to free_memory, bind_memory
103
# and unbind_memory.
104
#
105
# The size is specified in bytes but must be a multiple of the AGP
106
# page size.
107
#
108
METHOD struct agp_memory * alloc_memory {
109
device_t dev;
110
int type;
111
vm_size_t size;
112
};
113
114
#
115
# Free a memory region previously allocated with alloc_memory. Return
116
# EBUSY if the memory is bound.
117
#
118
METHOD int free_memory {
119
device_t dev;
120
struct agp_memory *mem;
121
};
122
123
#
124
# Bind a memory region to a specific byte offset within the chipset's
125
# AGP aperture. This effectively defines a range of contiguous
126
# physical address which alias the (possibly uncontiguous) pages in
127
# the memory region.
128
#
129
METHOD int bind_memory {
130
device_t dev;
131
struct agp_memory *mem;
132
vm_offset_t offset;
133
};
134
135
#
136
# Unbind a memory region bound with bind_memory.
137
#
138
METHOD int unbind_memory {
139
device_t dev;
140
struct agp_memory *handle;
141
};
142
143
METHOD int chipset_flush {
144
device_t dev;
145
} DEFAULT null_agp_chipset_flush;
146
147