Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/dev/agp/agppriv.h
39562 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2000 Doug Rabson
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
* 2. Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in the
14
* documentation and/or other materials provided with the distribution.
15
*
16
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26
* SUCH DAMAGE.
27
*/
28
29
#ifndef _PCI_AGPPRIV_H_
30
#define _PCI_AGPPRIV_H_
31
32
/*
33
* This file *must not* be included by code outside the agp driver itself.
34
*/
35
36
#include <sys/agpio.h>
37
#include <dev/agp/agpvar.h>
38
39
#ifdef AGP_DEBUG
40
#define AGP_DPF(fmt, ...) do { \
41
printf("agp: " fmt, ##__VA_ARGS__); \
42
} while (0)
43
#else
44
#define AGP_DPF(fmt, ...) do {} while (0)
45
#endif
46
47
#include "agp_if.h"
48
49
/*
50
* Data structure to describe an AGP memory allocation.
51
*/
52
TAILQ_HEAD(agp_memory_list, agp_memory);
53
struct agp_memory {
54
TAILQ_ENTRY(agp_memory) am_link; /* wiring for the tailq */
55
int am_id; /* unique id for block */
56
vm_size_t am_size; /* number of bytes allocated */
57
int am_type; /* chipset specific type */
58
struct vm_object *am_obj; /* VM object owning pages */
59
vm_offset_t am_physical; /* bogus hack for i810 */
60
vm_offset_t am_offset; /* page offset if bound */
61
int am_is_bound; /* non-zero if bound */
62
};
63
64
/*
65
* All chipset drivers must have this at the start of their softc.
66
*/
67
struct agp_softc {
68
struct resource *as_aperture; /* location of aperture */
69
int as_aperture_rid;
70
u_int32_t as_maxmem; /* allocation upper bound */
71
u_int32_t as_allocated; /* amount allocated */
72
enum agp_acquire_state as_state;
73
struct agp_memory_list as_memory; /* list of allocated memory */
74
int as_nextid; /* next memory block id */
75
int as_isopen; /* user device is open */
76
struct cdev *as_devnode; /* from make_dev */
77
struct cdev *as_devalias;
78
struct mtx as_lock; /* lock for access to GATT */
79
};
80
81
struct agp_gatt {
82
u_int32_t ag_entries;
83
u_int32_t *ag_virtual;
84
vm_offset_t ag_physical;
85
};
86
87
u_int8_t agp_find_caps(device_t dev);
88
struct agp_gatt *agp_alloc_gatt(device_t dev);
89
void agp_set_aperture_resource(device_t dev, int rid);
90
void agp_free_cdev(device_t dev);
91
void agp_free_gatt(struct agp_gatt *gatt);
92
void agp_free_res(device_t dev);
93
int agp_generic_attach(device_t dev);
94
int agp_generic_detach(device_t dev);
95
u_int32_t agp_generic_get_aperture(device_t dev);
96
int agp_generic_set_aperture(device_t dev,
97
u_int32_t aperture);
98
int agp_generic_enable(device_t dev, u_int32_t mode);
99
struct agp_memory *agp_generic_alloc_memory(device_t dev, int type,
100
vm_size_t size);
101
int agp_generic_free_memory(device_t dev,
102
struct agp_memory *mem);
103
int agp_generic_bind_memory(device_t dev,
104
struct agp_memory *mem,
105
vm_offset_t offset);
106
int agp_generic_unbind_memory(device_t dev,
107
struct agp_memory *mem);
108
109
#endif /* !_PCI_AGPPRIV_H_ */
110
111