root / lab4 / .minix-src / include / sys / agpio.h @ 13
History | View | Annotate | Download (5.5 KB)
1 | 13 | up20180614 | /* $NetBSD: agpio.h,v 1.11 2015/09/06 06:01:02 dholland Exp $ */
|
---|---|---|---|
2 | |||
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 | * $FreeBSD: src/sys/sys/agpio.h,v 1.1 2000/06/09 16:04:30 dfr Exp $
|
||
29 | */
|
||
30 | |||
31 | #ifndef _SYS_AGPIO_H_
|
||
32 | #define _SYS_AGPIO_H_
|
||
33 | |||
34 | #include <sys/ioccom.h> |
||
35 | |||
36 | /*
|
||
37 | * The AGP gatt uses 4k pages irrespective of the host page size.
|
||
38 | */
|
||
39 | #define AGP_PAGE_SIZE 4096 |
||
40 | #define AGP_PAGE_SHIFT 12 |
||
41 | |||
42 | /*
|
||
43 | * Macros to manipulate AGP mode words.
|
||
44 | */
|
||
45 | #define AGP_MODE_GET_RQ(x) (((x) & 0xff000000U) >> 24) |
||
46 | #define AGP_MODE_GET_ARQSZ(x) (((x) & 0x0000e000U) >> 13) |
||
47 | #define AGP_MODE_GET_CAL(x) (((x) & 0x00001c00U) >> 10) |
||
48 | #define AGP_MODE_GET_SBA(x) (((x) & 0x00000200U) >> 9) |
||
49 | #define AGP_MODE_GET_AGP(x) (((x) & 0x00000100U) >> 8) |
||
50 | #define AGP_MODE_GET_4G(x) (((x) & 0x00000020U) >> 5) |
||
51 | #define AGP_MODE_GET_FW(x) (((x) & 0x00000010U) >> 4) |
||
52 | #define AGP_MODE_GET_MODE_3(x) (((x) & 0x00000008U) >> 3) |
||
53 | #define AGP_MODE_GET_RATE(x) ((x) & 0x00000007U) |
||
54 | #define AGP_MODE_SET_RQ(x,v) (((x) & ~0xff000000U) | ((v) << 24)) |
||
55 | #define AGP_MODE_SET_ARQSZ(x,v) (((x) & ~0x0000e000U) | ((v) << 13)) |
||
56 | #define AGP_MODE_SET_CAL(x,v) (((x) & ~0x00001c00U) | ((v) << 10)) |
||
57 | #define AGP_MODE_SET_SBA(x,v) (((x) & ~0x00000200U) | ((v) << 9)) |
||
58 | #define AGP_MODE_SET_AGP(x,v) (((x) & ~0x00000100U) | ((v) << 8)) |
||
59 | #define AGP_MODE_SET_4G(x,v) (((x) & ~0x00000020U) | ((v) << 5)) |
||
60 | #define AGP_MODE_SET_FW(x,v) (((x) & ~0x00000010U) | ((v) << 4)) |
||
61 | #define AGP_MODE_SET_MODE_3(x,v) (((x) & ~0x00000008U) | ((v) << 3)) |
||
62 | #define AGP_MODE_SET_RATE(x,v) (((x) & ~0x00000007U) | (v)) |
||
63 | #define AGP_MODE_V2_RATE_1x 0x00000001 |
||
64 | #define AGP_MODE_V2_RATE_2x 0x00000002 |
||
65 | #define AGP_MODE_V2_RATE_4x 0x00000004 |
||
66 | #define AGP_MODE_V3_RATE_4x 0x00000001 |
||
67 | #define AGP_MODE_V3_RATE_8x 0x00000002 |
||
68 | #define AGP_MODE_V3_RATE_RSVD 0x00000004 |
||
69 | |||
70 | /* compat */
|
||
71 | #define AGP_MODE_RATE_1x AGP_MODE_V2_RATE_1x
|
||
72 | #define AGP_MODE_RATE_2x AGP_MODE_V2_RATE_2x
|
||
73 | #define AGP_MODE_RATE_4x AGP_MODE_V2_RATE_4x
|
||
74 | |||
75 | #define AGPIOC_BASE 'A' |
||
76 | #define AGPIOC_INFO _IOR (AGPIOC_BASE, 0, agp_info) |
||
77 | #define AGPIOC_ACQUIRE _IO (AGPIOC_BASE, 1) |
||
78 | #define AGPIOC_RELEASE _IO (AGPIOC_BASE, 2) |
||
79 | #define AGPIOC_SETUP _IOW (AGPIOC_BASE, 3, agp_setup) |
||
80 | #if 0
|
||
81 | #define AGPIOC_RESERVE _IOW (AGPIOC_BASE, 4, agp_region)
|
||
82 | #define AGPIOC_PROTECT _IOW (AGPIOC_BASE, 5, agp_region)
|
||
83 | #endif
|
||
84 | #define AGPIOC_ALLOCATE _IOWR(AGPIOC_BASE, 6, agp_allocate) |
||
85 | #define AGPIOC_DEALLOCATE _IOW (AGPIOC_BASE, 7, int) |
||
86 | #define AGPIOC_BIND _IOW (AGPIOC_BASE, 8, agp_bind) |
||
87 | #define AGPIOC_UNBIND _IOW (AGPIOC_BASE, 9, agp_unbind) |
||
88 | |||
89 | typedef struct _agp_version { |
||
90 | uint16_t major; |
||
91 | uint16_t minor; |
||
92 | } agp_version; |
||
93 | |||
94 | typedef struct _agp_info { |
||
95 | agp_version version; /* version of the driver */
|
||
96 | uint32_t bridge_id; /* bridge vendor/device */
|
||
97 | uint32_t agp_mode; /* mode info of bridge */
|
||
98 | off_t aper_base; /* base of aperture */
|
||
99 | size_t aper_size; /* size of aperture */
|
||
100 | size_t pg_total; /* max pages (swap + system) */
|
||
101 | size_t pg_system; /* max pages (system) */
|
||
102 | size_t pg_used; /* current pages used */
|
||
103 | } agp_info; |
||
104 | |||
105 | typedef struct _agp_setup { |
||
106 | uint32_t agp_mode; /* mode info of bridge */
|
||
107 | } agp_setup; |
||
108 | |||
109 | #if 0
|
||
110 | /*
|
||
111 | * The "prot" down below needs still a "sleep" flag somehow ...
|
||
112 | */
|
||
113 | typedef struct _agp_segment {
|
||
114 | off_t pg_start; /* starting page to populate */
|
||
115 | size_t pg_count; /* number of pages */
|
||
116 | int prot; /* prot flags for mmap */
|
||
117 | } agp_segment;
|
||
118 | |||
119 | typedef struct _agp_region {
|
||
120 | pid_t pid; /* pid of process */
|
||
121 | size_t seg_count; /* number of segments */
|
||
122 | struct _agp_segment *seg_list;
|
||
123 | } agp_region;
|
||
124 | #endif
|
||
125 | |||
126 | typedef struct _agp_allocate { |
||
127 | int key; /* tag of allocation */ |
||
128 | size_t pg_count; /* number of pages */
|
||
129 | uint32_t type; /* 0 == normal, other devspec */
|
||
130 | uint32_t physical; /* device specific (some devices
|
||
131 | * need a phys address of the
|
||
132 | * actual page behind the gatt
|
||
133 | * table) */
|
||
134 | } agp_allocate; |
||
135 | |||
136 | typedef struct _agp_bind { |
||
137 | int key; /* tag of allocation */ |
||
138 | off_t pg_start; /* starting page to populate */
|
||
139 | } agp_bind; |
||
140 | |||
141 | typedef struct _agp_unbind { |
||
142 | int key; /* tag of allocation */ |
||
143 | uint32_t priority; /* priority for paging out */
|
||
144 | } agp_unbind; |
||
145 | |||
146 | #endif /* !_SYS_AGPIO_H_ */ |