
#ifndef _FBDEVHW_H_
#define _FBDEVHW_H_

#include "xf86str.h"
#include "colormapst.h"

#include <pciaccess.h>

#define FBDEVHW_PACKED_PIXELS		0	/* Packed Pixels	*/
#define FBDEVHW_PLANES			1	/* Non interleaved planes */
#define FBDEVHW_INTERLEAVED_PLANES	2	/* Interleaved planes	*/
#define FBDEVHW_TEXT			3	/* Text/attributes	*/
#define FBDEVHW_VGA_PLANES		4	/* EGA/VGA planes       */

Bool  fbdevHWGetRec(ScrnInfoPtr pScrn);
void  fbdevHWFreeRec(ScrnInfoPtr pScrn);

Bool  fbdevHWProbe(struct pci_device * pPci, char *device, char **namep);
Bool  fbdevHWInit(ScrnInfoPtr pScrn, struct pci_device * pPci, char *device);

char* fbdevHWGetName(ScrnInfoPtr pScrn);
int   fbdevHWGetDepth(ScrnInfoPtr pScrn, int *fbbpp);
int   fbdevHWGetLineLength(ScrnInfoPtr pScrn);
int   fbdevHWGetType(ScrnInfoPtr pScrn);
int   fbdevHWGetVidmem(ScrnInfoPtr pScrn);

void* fbdevHWMapVidmem(ScrnInfoPtr pScrn);
int   fbdevHWLinearOffset(ScrnInfoPtr pScrn);
Bool  fbdevHWUnmapVidmem(ScrnInfoPtr pScrn);
void* fbdevHWMapMMIO(ScrnInfoPtr pScrn);
Bool  fbdevHWUnmapMMIO(ScrnInfoPtr pScrn);

void  fbdevHWSetVideoModes(ScrnInfoPtr pScrn);
DisplayModePtr fbdevHWGetBuildinMode(ScrnInfoPtr pScrn);
void  fbdevHWUseBuildinMode(ScrnInfoPtr pScrn);
Bool  fbdevHWModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode);
void  fbdevHWSave(ScrnInfoPtr pScrn);
void  fbdevHWRestore(ScrnInfoPtr pScrn);

void  fbdevHWLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices,
		 LOCO *colors, VisualPtr pVisual);

ModeStatus fbdevHWValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags);
Bool  fbdevHWSwitchMode(int scrnIndex, DisplayModePtr mode, int flags);
void  fbdevHWAdjustFrame(int scrnIndex, int x, int y, int flags);
Bool  fbdevHWEnterVT(int scrnIndex, int flags);
void  fbdevHWLeaveVT(int scrnIndex, int flags);
void  fbdevHWDPMSSet(ScrnInfoPtr pScrn, int mode, int flags);

Bool  fbdevHWSaveScreen(ScreenPtr pScreen, int mode);

xf86SwitchModeProc	*fbdevHWSwitchModeWeak(void);
xf86AdjustFrameProc	*fbdevHWAdjustFrameWeak(void);
xf86EnterVTProc		*fbdevHWEnterVTWeak(void);
xf86LeaveVTProc		*fbdevHWLeaveVTWeak(void);
xf86ValidModeProc	*fbdevHWValidModeWeak(void);
xf86DPMSSetProc		*fbdevHWDPMSSetWeak(void);
xf86LoadPaletteProc	*fbdevHWLoadPaletteWeak(void);
SaveScreenProcPtr	fbdevHWSaveScreenWeak(void);

#endif
