/*
 * Copyright © 2004 Keith Packard
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 * the above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the name of Keith Packard not be used in
 * advertising or publicity pertaining to distribution of the software without
 * specific, written prior permission.  Keith Packard makes no
 * representations about the suitability of this software for any purpose.  It
 * is provided "as is" without express or implied warranty.
 *
 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */

#ifndef _FBDEV_H_
#define _FBDEV_H_
#include <stdio.h>
#include <unistd.h>
#include "kdrive.h"

#ifdef RANDR
#include "randrstr.h"
#endif

typedef struct _fakePriv {
    CARD8 *base;
    int bytes_per_line;
} FakePriv;

typedef struct _fakeScrPriv {
    Rotation randr;
    Bool shadow;
} FakeScrPriv;

extern KdCardFuncs fakeFuncs;

Bool
 fakeInitialize(KdCardInfo * card, FakePriv * priv);

Bool
 fakeCardInit(KdCardInfo * card);

Bool
 fakeScreenInit(KdScreenInfo * screen);

Bool
 fakeScreenInitialize(KdScreenInfo * screen, FakeScrPriv * scrpriv);

Bool
 fakeInitScreen(ScreenPtr pScreen);

Bool
 fakeFinishInitScreen(ScreenPtr pScreen);

Bool
 fakeCreateResources(ScreenPtr pScreen);

void
 fakePreserve(KdCardInfo * card);

Bool
 fakeEnable(ScreenPtr pScreen);

Bool
 fakeDPMS(ScreenPtr pScreen, int mode);

void
 fakeDisable(ScreenPtr pScreen);

void
 fakeRestore(KdCardInfo * card);

void
 fakeScreenFini(KdScreenInfo * screen);

void
 fakeCardFini(KdCardInfo * card);

void
 fakeGetColors(ScreenPtr pScreen, int n, xColorItem * pdefs);

void
 fakePutColors(ScreenPtr pScreen, int n, xColorItem * pdefs);

Bool
 fakeMapFramebuffer(KdScreenInfo * screen);

void *fakeWindowLinear(ScreenPtr pScreen,
                       CARD32 row,
                       CARD32 offset, int mode, CARD32 *size, void *closure);

void
 fakeSetScreenSizes(ScreenPtr pScreen);

Bool
 fakeUnmapFramebuffer(KdScreenInfo * screen);

Bool
 fakeSetShadow(ScreenPtr pScreen);

Bool
 fakeCreateColormap(ColormapPtr pmap);

#ifdef RANDR
Bool
 fakeRandRGetInfo(ScreenPtr pScreen, Rotation * rotations);

Bool

fakeRandRSetConfig(ScreenPtr pScreen,
                   Rotation randr, int rate, RRScreenSizePtr pSize);
Bool
 fakeRandRInit(ScreenPtr pScreen);

#endif

extern KdPointerDriver FakePointerDriver;

extern KdKeyboardDriver FakeKeyboardDriver;

extern KdOsFuncs FakeOsFuncs;

#endif                          /* _FBDEV_H_ */