summaryrefslogtreecommitdiff
path: root/src/geode.h
diff options
context:
space:
mode:
authorJordan Crouse <jordan.crouse@amd.com>2008-03-11 15:43:00 -0600
committerJordan Crouse <jordan.crouse@amd.com>2008-03-14 14:16:42 -0600
commitec8edd1393f482ca42b401463f0f09580aa263a0 (patch)
tree62892967de07f4db2d66f98e4d4c1001262dce9c /src/geode.h
parenta7bc1a7f6b439419fc27b669d9d7f99f882d83fe (diff)
First stage of the rename process - get rid of all amd_ prefixes -
change either to geode_ or just to lx_ or gx_ depending on the processor. Change the name in the Makefiles and other collateral
Diffstat (limited to 'src/geode.h')
-rw-r--r--src/geode.h534
1 files changed, 534 insertions, 0 deletions
diff --git a/src/geode.h b/src/geode.h
new file mode 100644
index 0000000..b9e6956
--- /dev/null
+++ b/src/geode.h
@@ -0,0 +1,534 @@
+ /*
+ * (c) 2006 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Neither the name of the Advanced Micro Devices, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ */
+
+
+#ifndef _AMD_GEODE_H_
+#define _AMD_GEODE_H_
+
+#include "geode_pcirename.h"
+
+#include "xaa.h"
+#include "exa.h"
+#include "xf86Cursor.h"
+
+#include "vgaHW.h"
+#include "xf86int10.h"
+#include <X11/extensions/randr.h>
+
+#include "xf86xv.h"
+
+/* We only support EXA version >=2 */
+
+#if (EXA_VERSION_MAJOR >= 2)
+#ifndef XF86EXA
+#define XF86EXA 1
+#endif
+#else
+#undef XF86EXA
+#endif
+
+#define CFB 0
+#define INT10_SUPPORT 1
+
+/* Existing Processor Models */
+#define GX1 0x1
+#define GX2 0x10
+#define GX2_CRT 0x11
+#define GX2_TFT 0x12
+#define LX 0x20
+#define LX_CRT 0x21
+#define LX_TFT 0x22
+
+#define PCI_VENDOR_ID_CYRIX 0x1078
+#define PCI_VENDOR_ID_NS 0x100B
+#define PCI_VENDOR_ID_AMD 0x1022
+
+#define PCI_CHIP_5530 0x0104
+#define PCI_CHIP_SC1200 0x0504
+#define PCI_CHIP_SC1400 0x0104
+#define PCI_CHIP_REDCLOUD 0x0030
+#define PCI_CHIP_GEODELX 0x2081
+#define GFX_CPU_GEODELX 4
+
+#ifdef HAVE_GX
+#define GX_FILL_RECT_SUPPORT 1
+#define GX_BRES_LINE_SUPPORT 1
+#define GX_DASH_LINE_SUPPORT 0 /* does not do dashed lines */
+#define GX_MONO_8X8_PAT_SUPPORT 1
+#define GX_CLREXP_8X8_PAT_SUPPORT 1
+#define GX_SCR2SCREXP_SUPPORT 1
+#define GX_SCR2SCRCPY_SUPPORT 1
+#define GX_CPU2SCREXP_SUPPORT 1
+#define GX_SCANLINE_SUPPORT 1
+#define GX_USE_OFFSCRN_MEM 0
+#define GX_ONE_LINE_AT_A_TIME 1
+#define GX_WRITE_PIXMAP_SUPPORT 1
+
+#define GFX(func) gfx_##func
+#define GFX2(func) gfx2_##func
+#endif
+
+#ifdef HAVE_LX
+#define LX_FILL_RECT_SUPPORT 1
+#define LX_BRES_LINE_SUPPORT 1
+#define LX_DASH_LINE_SUPPORT 1
+#define LX_MONO_8X8_PAT_SUPPORT 1
+#define LX_CLREXP_8X8_PAT_SUPPORT 1
+#define LX_SCR2SCREXP_SUPPORT 1
+#define LX_SCR2SCRCPY_SUPPORT 1
+#define LX_CPU2SCREXP_SUPPORT 1
+#define LX_SCANLINE_SUPPORT 1
+#define LX_USE_OFFSCRN_MEM 1
+#define LX_WRITE_PIXMAP_SUPPORT 1
+#endif
+
+#define DEBUGTIM 0
+#define DEBUGLVL 0
+
+#ifndef DEBUGTIM
+#define DEBUGTIM 0
+#endif
+#ifndef DEBUGLVL
+#define DEBUGLVL 0
+#endif
+
+#define GEODEPTR(p) ((GeodeRec *)((p)->driverPrivate))
+
+#define DEFAULT_IMG_LINE_BUFS 20
+#define DEFAULT_CLR_LINE_BUFS 20
+#define DEFAULT_EXA_SCRATCH_BFRSZ 0x40000
+
+/* 64x64 cursor used as 32x32 */
+#define HW_CURSOR_W 64
+#define HW_CURSOR_H 64
+
+#define MYDBG 1
+#if defined(MYDBG)
+#define DEBUGMSG(cond, drv_msg) if((cond)) xf86DrvMsg drv_msg
+#else
+#define DEBUGMSG(cond, drv_msg)
+#endif
+
+#ifdef HAVE_LX
+extern unsigned char cim_inb(unsigned short port);
+extern void cim_outb(unsigned short port, unsigned char data);
+extern unsigned short cim_inw(unsigned short port);
+extern void cim_outw(unsigned short port, unsigned short data);
+extern unsigned long cim_ind(unsigned short port);
+extern void cim_outd(unsigned short port, unsigned long data);
+
+#include "cim_rtns.h"
+
+#define CIM_CMD_BFR_SZ 0x200000L
+#define CIM_CMD_BFR_MIN 0x20000L
+
+typedef struct tag_CIM_DISPLAYTIMING
+{
+ unsigned short wPitch;
+ unsigned short wBpp;
+
+ VG_DISPLAY_MODE vgDisplayMode;
+}
+CIM_DISPLAYTIMING;
+#endif
+
+#ifdef HAVE_GX
+extern void gfx_write_reg32(int offset, int data);
+extern void gfx_write_reg16(int offset, short data);
+extern void gfx_write_reg8(int offset, char data);
+extern int gfx_read_reg32(int offset);
+extern short gfx_read_reg16(int offset);
+extern void gfx_write_vid32(int offset, int data);
+extern int gfx_read_vid32(int offset);
+extern unsigned char gfx_inb(unsigned short port);
+extern void gfx_outb(unsigned short port, unsigned char data);
+extern unsigned short gfx_inw(unsigned short port);
+extern void gfx_outw(unsigned short port, unsigned short data);
+extern unsigned long gfx_ind(unsigned short port);
+extern void gfx_outd(unsigned short port, unsigned long data);
+
+#define Q_WORD QQ_WORD
+#include "gfx_rtns.h"
+#undef Q_WORD
+#include "panel.h"
+
+typedef struct __TVPARAMS
+{
+ unsigned int dwFlags;
+ unsigned short wWidth;
+ unsigned short wHeight;
+ unsigned short wStandard;
+ unsigned short wType;
+ unsigned short wOutput;
+ unsigned short wResolution;
+ Bool bState;
+} TVPARAMS;
+
+typedef struct tag_GFX_DISPLAYTIMING
+{
+ unsigned int dwDotClock;
+ unsigned short wPitch;
+ unsigned short wBpp;
+ unsigned short wHTotal;
+ unsigned short wHActive;
+ unsigned short wHSyncStart;
+ unsigned short wHSyncEnd;
+ unsigned short wHBlankStart;
+ unsigned short wHBlankEnd;
+ unsigned short wVTotal;
+ unsigned short wVActive;
+ unsigned short wVSyncStart;
+ unsigned short wVSyncEnd;
+ unsigned short wVBlankStart;
+ unsigned short wVBlankEnd;
+ unsigned short wPolarity;
+} GFX_DISPLAYTIMING;
+
+/* TV Timings */
+typedef struct __TVTIMING
+{
+ unsigned long HorzTim;
+ unsigned long HorzSync;
+ unsigned long VertSync;
+ unsigned long LineEnd;
+ unsigned long VertDownscale;
+ unsigned long HorzScaling;
+ unsigned long TimCtrl1;
+ unsigned long TimCtrl2;
+ unsigned long Subfreq;
+ unsigned long DispPos;
+ unsigned long DispSize;
+ unsigned long Debug;
+ unsigned long DacCtrl;
+ unsigned int DotClock;
+} TVTIMING;
+#endif
+
+typedef struct _VESARec
+{
+ xf86Int10InfoPtr pInt;
+}
+VESARec;
+
+#define OUTPUT_PANEL 0x01
+#define OUTPUT_CRT 0x02
+#define OUTPUT_TV 0x04
+#define OUTPUT_VOP 0x08
+
+typedef struct _geodeRec
+{
+ /* Common */
+
+ int Output; /* Bitmask indicating the valid output options */
+
+ Bool HWCursor;
+ Bool NoAccel;
+ Bool useVGA;
+ Bool VGAActive; /* Flag indicating if LX VGA is active */
+ Bool Compression;
+ Bool useEXA;
+
+ int rotation;
+ int displayWidth;
+ Bool starting;
+ Bool tryCompression;
+ Bool tryHWCursor;
+ unsigned int shadowSize;
+ unsigned int shadowOffset;
+
+ ExaOffscreenArea *shadowArea;
+
+ DisplayModePtr curMode;
+ VG_COMPRESSION_DATA CBData;
+
+ unsigned long CursorStartOffset;
+ unsigned int CursorSize;
+ xf86CursorInfoPtr CursorInfo;
+ int CursorXHot;
+ int CursorYHot;
+
+ /* Geometry information */
+ unsigned int maxWidth; /* Maximum possible width of the screen */
+ unsigned int maxHeight; /* Maximum possible height of the screen */
+
+ int Pitch; /* display FB pitch */
+
+ int displayPitch; /* The pitch ofthe visible area */
+ int displayOffset; /* The offset of the visible area */
+ int displaySize; /* The size of the visibile area */
+
+ int PanelX;
+ int PanelY;
+
+ /* Framebuffer memory */
+
+ unsigned long FBLinearAddr;
+ unsigned char *FBBase;
+ unsigned int FBAvail;
+ unsigned int FBOffset;
+ unsigned int FBSize;
+
+ /* Video information */
+ int video_x;
+ int video_y;
+ short video_w;
+ short video_h;
+ short video_srcw;
+ short video_srch;
+ short video_dstw;
+ short video_dsth;
+ int video_id;
+ int video_offset;
+ ScrnInfoPtr video_scrnptr;
+ BOOL OverlayON;
+ int videoKey;
+
+ /* EXA structures */
+
+ ExaDriverPtr pExa;
+ unsigned int exaBfrOffset;
+ unsigned int exaBfrSz;
+
+ /* XAA structures */
+ unsigned char **AccelImageWriteBuffers;
+ int NoOfImgBuffers;
+ unsigned char **AccelColorExpandBuffers;
+ int NoOfColorExpandLines;
+ XAAInfoRecPtr AccelInfoRec;
+
+ /* Other structures */
+
+ EntityInfoPtr pEnt;
+ ScreenBlockHandlerProcPtr BlockHandler; /* needed for video */
+ XF86VideoAdaptorPtr adaptor;
+
+ /* State save structures */
+
+ gfx_vga_struct FBgfxVgaRegs;
+ TVTIMING FBtvtiming;
+ GFX_DISPLAYTIMING FBgfxdisplaytiming;
+ CIM_DISPLAYTIMING FBcimdisplaytiming;
+
+ unsigned int FBTVActive;
+ unsigned int FBSupport;
+ unsigned long FBDisplayOffset;
+ unsigned long PrevDisplayOffset;
+
+ VESARec *vesa;
+
+ int FBCompressionEnable;
+ VG_COMPRESSION_DATA FBCBData;
+ VG_CURSOR_DATA FBCursor;
+ unsigned long FBCompressionOffset;
+ unsigned short FBCompressionPitch;
+ unsigned short FBCompressionSize;
+
+ /* Save the Cursor offset of the FB */
+ unsigned long FBCursorOffset;
+ unsigned char FBBIOSMode;
+
+ /* Hooks */
+
+ void (*WritePixmap) (ScrnInfoPtr pScrni, int x, int y, int w, int h,
+ unsigned char *src, int srcwidth, int rop,
+ unsigned int planemask, int trans, int bpp, int depth);
+
+ void (*PointerMoved) (int index, int x, int y);
+ CloseScreenProcPtr CloseScreen;
+ Bool (*CreateScreenResources)(ScreenPtr);
+
+ /* LX only */
+
+ unsigned long CmdBfrOffset;
+ unsigned long CmdBfrSize;
+
+#ifdef HAVE_TVSUPPORT
+ Bool TVSupport;
+ int tv_encoder;
+ int tv_bus_fmt;
+ int tv_flags;
+ int tv_601_fmt;
+ int tv_601_flags;
+ int tv_conversion;
+ int tv_vsync_shift;
+ int tv_vsync_shift_count;
+ int tv_vsync_select;
+ int tvox, tvoy;
+
+ TVPARAMS TvParam;
+
+ int TVOx, TVOy, TVOw, TVOh;
+ Bool TV_Overscan_On;
+#endif
+
+ /* To be killed! */
+
+ int FBVGAActive;
+ unsigned int cpySrcOffset;
+ int cpySrcPitch, cpySrcBpp;
+ int cpyDx, cpyDy;
+ unsigned int cmpSrcOffset;
+ int cmpSrcPitch, cmpSrcBpp;
+ unsigned int cmpSrcFmt, cmpDstFmt;
+ int cmpOp;
+
+ Bool Panel;
+
+}
+GeodeRec, *GeodePtr;
+
+/* option flags are self-explanatory */
+#ifdef HAVE_LX
+enum
+{
+ LX_OPTION_SW_CURSOR,
+ LX_OPTION_HW_CURSOR,
+ LX_OPTION_NOCOMPRESSION,
+ LX_OPTION_NOACCEL,
+ LX_OPTION_ACCEL_METHOD,
+ LX_OPTION_EXA_SCRATCH_BFRSZ,
+ LX_OPTION_TV_SUPPORT,
+ LX_OPTION_TV_OUTPUT,
+ LX_OPTION_TV_OVERSCAN,
+ LX_OPTION_ROTATE,
+ LX_OPTION_NOPANEL,
+ LX_OPTION_COLOR_KEY,
+ LX_OPTION_FBSIZE,
+ LX_OPTION_PANEL_GEOMETRY,
+ LX_OPTION_DONT_PROGRAM
+}
+LX_GeodeOpts;
+#endif
+
+#ifdef HAVE_GX
+enum
+{
+ GX_OPTION_SW_CURSOR,
+ GX_OPTION_HW_CURSOR,
+ GX_OPTION_NOCOMPRESSION,
+ GX_OPTION_NOACCEL,
+ GX_OPTION_ACCEL_METHOD,
+ GX_OPTION_EXA_SCRATCH_BFRSZ,
+ GX_OPTION_TV_SUPPORT,
+ GX_OPTION_TV_OUTPUT,
+ GX_OPTION_TV_OVERSCAN,
+ GX_OPTION_ROTATE,
+ GX_OPTION_NOPANEL,
+ GX_OPTION_FLATPANEL_INFO,
+ GX_OPTION_FLATPANEL_IN_BIOS,
+ GX_OPTION_COLOR_KEY,
+ GX_OPTION_OSM,
+ GX_OPTION_OSM_IMG_BUFS,
+ GX_OPTION_OSM_CLR_BUFS,
+ GX_OPTION_FBSIZE,
+ GX_OPTION_PANEL_GEOMETRY,
+ GX_OPTION_DONT_PROGRAM
+}
+GX_GeodeOpts;
+#endif
+
+/* OLPC defines */
+
+#define DCON_DEFAULT_XRES 1200
+#define DCON_DEFAULT_YRES 900
+#define DCON_DEFAULT_BPP 16
+#define DCON_DEFAULT_REFRESH 50
+
+/* amd_dcon.c */
+extern Bool dcon_init(ScrnInfoPtr pScrni);
+extern int DCONDPMSSet(ScrnInfoPtr pScrni, int mode, int flags);
+
+/* amd_common.c */
+
+void geode_memory_to_screen_blt(unsigned long, unsigned long,
+ unsigned long, unsigned long, long, long, int);
+int GeodeGetRefreshRate(DisplayModePtr);
+void GeodeCopyGreyscale(unsigned char *, unsigned char *, int, int, int, int);
+int GeodeGetSizeFromFB(unsigned int *);
+
+/* amd_gx_video.c */
+
+int
+GeodeQueryImageAttributes(ScrnInfoPtr, int id, unsigned short *w,
+ unsigned short *h, int *pitches, int *offsets);
+
+
+Bool RegionsEqual(RegionPtr A, RegionPtr B);
+
+/* amd_gx_driver.c */
+
+void GeodeProbeDDC(ScrnInfoPtr pScrni, int index);
+xf86MonPtr GeodeDoDDC(ScrnInfoPtr pScrni, int index);
+int GeodeGetFPGeometry(const char *str, int *width, int *height);
+void GeodePointerMoved(int index, int x, int y);
+void GeodeFreeScreen(int scrnIndex, int flags);
+int GeodeCalculatePitchBytes(unsigned int width, unsigned int bpp);
+
+/* amd_msr.c */
+int GeodeReadMSR(unsigned long addr, unsigned long *lo, unsigned long *hi);
+int GeodeWriteMSR(unsigned long addr, unsigned long lo, unsigned long hi);
+
+/* amd_gx_cursor.c */
+Bool GXHWCursorInit(ScreenPtr pScrn);
+void GXLoadCursorImage(ScrnInfoPtr pScrni, unsigned char *src);
+void GXHideCursor(ScrnInfoPtr pScrni);
+void GXShowCursor(ScrnInfoPtr pScrni);
+
+/* amd_gx_randr.c */
+Rotation GXGetRotation(ScreenPtr pScreen);
+Bool GXRandRInit(ScreenPtr pScreen, int rotation);
+
+/* amd_gx_rotate.c */
+Bool GXRotate(ScrnInfoPtr pScrni, DisplayModePtr mode);
+
+/* amd_gx_accel.c */
+Bool GXAccelInit(ScreenPtr pScrn);
+
+/* amd_gx_video.c */
+void GXInitVideo(ScreenPtr pScrn);
+
+/* amd_lx_cursor.c */
+Bool LXHWCursorInit(ScreenPtr pScrn);
+void LXLoadCursorImage(ScrnInfoPtr pScrni, unsigned char *src);
+void LXHideCursor(ScrnInfoPtr pScrni);
+void LXShowCursor(ScrnInfoPtr pScrni);
+
+/* amd_lx_randr.c */
+Rotation LXGetRotation(ScreenPtr pScreen);
+Bool LXRandRInit(ScreenPtr pScreen, int rotation);
+
+/* amd_lx_rotate.c */
+Bool LXSetRotatePitch(ScrnInfoPtr pScrni);
+Bool LXRotate(ScrnInfoPtr pScrni, DisplayModePtr mode);
+Bool LXAllocShadow(ScrnInfoPtr pScrni);
+
+/* amd_lx_exa.c */
+Bool LXExaInit(ScreenPtr pScreen);
+
+/* amd_lx_video.c */
+void LXInitVideo(ScreenPtr pScrn);
+
+#endif /* _AMD_GEODE_H_ */