Initial commit
[xorg_rtime.git] / xorg-server-1.4 / hw / kdrive / src / ktest.c
blob150af56398af850107c6e93430c1b3d9999732fe
1 /*
2 * Copyright © 1999 Keith Packard
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 Keith Packard not be used in
9 * advertising or publicity pertaining to distribution of the software without
10 * specific, written prior permission. Keith Packard makes no
11 * representations about the suitability of this software for any purpose. It
12 * is provided "as is" without express or implied warranty.
14 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16 * EVENT SHALL KEITH PACKARD 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.
23 #ifdef HAVE_CONFIG_H
24 #include <kdrive-config.h>
25 #endif
26 #include "kdrive.h"
29 static CARD8 memoryPatterns[] = { 0xff, 0x00, 0x5a, 0xa5, 0xaa, 0x55 };
31 #define NUM_PATTERNS (sizeof (memoryPatterns) / sizeof (memoryPatterns[0]))
33 Bool
34 KdFrameBufferValid (CARD8 *base, int size)
36 volatile CARD8 *b = (volatile CARD8 *) base;
37 CARD8 save, test, compare;
38 int i, j;
40 b = base + (size - 1);
41 save = *b;
43 for (i = 0; i < NUM_PATTERNS; i++)
45 test = memoryPatterns[i];
46 *b = test;
47 for (j = 0; j < 1000; j++)
49 compare = *b;
50 if (compare != test)
51 return FALSE;
54 *b = save;
55 return TRUE;
58 int
59 KdFrameBufferSize (CARD8 *base, int max)
61 int min, cur;
63 min = 0;
64 while (min + 1 < max)
66 cur = (max + min) / 2;
67 if (KdFrameBufferValid (base, cur))
68 min = cur;
69 else
70 max = cur;
72 if (KdFrameBufferValid (base, max))
73 return max;
74 else
75 return min;