Commit | Line | Data |
---|---|---|
a09e091a JB |
1 | /* |
2 | * Copyright 1998 by Alan Hourihane, Wigan, England. | |
3 | * | |
4 | * Permission to use, copy, modify, distribute, and sell this software and its | |
5 | * documentation for any purpose is hereby granted without fee, provided that | |
6 | * the above copyright notice appear in all copies and that both that | |
7 | * copyright notice and this permission notice appear in supporting | |
8 | * documentation, and that the name of Alan Hourihane not be used in | |
9 | * advertising or publicity pertaining to distribution of the software without | |
10 | * specific, written prior permission. Alan Hourihane makes no representations | |
11 | * about the suitability of this software for any purpose. It is provided | |
12 | * "as is" without express or implied warranty. | |
13 | * | |
14 | * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, | |
15 | * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO | |
16 | * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR | |
17 | * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, | |
18 | * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER | |
19 | * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR | |
20 | * PERFORMANCE OF THIS SOFTWARE. | |
21 | * | |
22 | * Authors: Alan Hourihane, <alanh@fairlite.demon.co.uk> | |
23 | * | |
24 | * Generic RAMDAC access routines. | |
25 | */ | |
26 | ||
27 | #ifdef HAVE_XORG_CONFIG_H | |
28 | #include <xorg-config.h> | |
29 | #endif | |
30 | ||
31 | #include "xf86.h" | |
32 | #include "xf86_OSproc.h" | |
33 | ||
34 | #include "xf86RamDacPriv.h" | |
35 | ||
36 | int RamDacHWPrivateIndex = -1; | |
37 | int RamDacScreenPrivateIndex = -1; | |
38 | ||
39 | RamDacRecPtr | |
40 | RamDacCreateInfoRec(void) | |
41 | { | |
42 | RamDacRecPtr infoRec; | |
43 | ||
44 | infoRec = calloc(1, sizeof(RamDacRec)); | |
45 | ||
46 | return infoRec; | |
47 | } | |
48 | ||
49 | RamDacHelperRecPtr | |
50 | RamDacHelperCreateInfoRec(void) | |
51 | { | |
52 | RamDacHelperRecPtr infoRec; | |
53 | ||
54 | infoRec = calloc(1, sizeof(RamDacHelperRec)); | |
55 | ||
56 | return infoRec; | |
57 | } | |
58 | ||
59 | void | |
60 | RamDacDestroyInfoRec(RamDacRecPtr infoRec) | |
61 | { | |
62 | free(infoRec); | |
63 | } | |
64 | ||
65 | void | |
66 | RamDacHelperDestroyInfoRec(RamDacHelperRecPtr infoRec) | |
67 | { | |
68 | free(infoRec); | |
69 | } | |
70 | ||
71 | Bool | |
72 | RamDacInit(ScrnInfoPtr pScrn, RamDacRecPtr ramdacPriv) | |
73 | { | |
74 | RamDacScreenRecPtr ramdacScrPtr; | |
75 | ||
76 | /* | |
77 | * make sure the RamDacRec is allocated | |
78 | */ | |
79 | if (!RamDacGetRec(pScrn)) | |
80 | return FALSE; | |
81 | ramdacScrPtr = | |
82 | ((RamDacScreenRecPtr) (pScrn)->privates[RamDacGetScreenIndex()].ptr); | |
83 | ramdacScrPtr->RamDacRec = ramdacPriv; | |
84 | ||
85 | return TRUE; | |
86 | } | |
87 | ||
88 | void | |
89 | RamDacGetRecPrivate(void) | |
90 | { | |
91 | if (RamDacHWPrivateIndex < 0) | |
92 | RamDacHWPrivateIndex = xf86AllocateScrnInfoPrivateIndex(); | |
93 | if (RamDacScreenPrivateIndex < 0) | |
94 | RamDacScreenPrivateIndex = xf86AllocateScrnInfoPrivateIndex(); | |
95 | return; | |
96 | } | |
97 | ||
98 | Bool | |
99 | RamDacGetRec(ScrnInfoPtr scrp) | |
100 | { | |
101 | RamDacGetRecPrivate(); | |
102 | /* | |
103 | * New privates are always set to NULL, so we can check if the allocation | |
104 | * has already been done. | |
105 | */ | |
106 | if (scrp->privates[RamDacHWPrivateIndex].ptr != NULL) | |
107 | return TRUE; | |
108 | if (scrp->privates[RamDacScreenPrivateIndex].ptr != NULL) | |
109 | return TRUE; | |
110 | ||
111 | scrp->privates[RamDacHWPrivateIndex].ptr = | |
112 | xnfcalloc(sizeof(RamDacHWRec), 1); | |
113 | scrp->privates[RamDacScreenPrivateIndex].ptr = | |
114 | xnfcalloc(sizeof(RamDacScreenRec), 1); | |
115 | ||
116 | return TRUE; | |
117 | } | |
118 | ||
119 | void | |
120 | RamDacFreeRec(ScrnInfoPtr pScrn) | |
121 | { | |
122 | RamDacHWRecPtr ramdacHWPtr; | |
123 | RamDacScreenRecPtr ramdacScrPtr; | |
124 | ||
125 | if (RamDacHWPrivateIndex < 0) | |
126 | return; | |
127 | ||
128 | if (RamDacScreenPrivateIndex < 0) | |
129 | return; | |
130 | ||
131 | ramdacHWPtr = RAMDACHWPTR(pScrn); | |
132 | ramdacScrPtr = ((RamDacScreenRecPtr) | |
133 | (pScrn)->privates[RamDacGetScreenIndex()].ptr); | |
134 | ||
135 | free(ramdacHWPtr); | |
136 | ramdacHWPtr = NULL; | |
137 | ||
138 | free(ramdacScrPtr); | |
139 | ramdacScrPtr = NULL; | |
140 | } | |
141 | ||
142 | int | |
143 | RamDacGetHWIndex(void) | |
144 | { | |
145 | return RamDacHWPrivateIndex; | |
146 | } | |
147 | ||
148 | int | |
149 | RamDacGetScreenIndex(void) | |
150 | { | |
151 | return RamDacScreenPrivateIndex; | |
152 | } |