185 lines
3.8 KiB
C
185 lines
3.8 KiB
C
#ifndef _PM2_H_
|
|
#define _PM2_H_
|
|
#include <vesa.h>
|
|
#include "kxv.h"
|
|
#include "klinux.h"
|
|
|
|
#include "glint_regs.h"
|
|
|
|
typedef volatile CARD8 VOL8;
|
|
typedef volatile CARD16 VOL16;
|
|
typedef volatile CARD32 VOL32;
|
|
|
|
#if 0
|
|
typedef struct {
|
|
VOL32 StartXDom;
|
|
VOL32 dXDom;
|
|
VOL32 StartXSub;
|
|
VOL32 dXSub;
|
|
VOL32 StartY;
|
|
VOL32 dY;
|
|
VOL32 GLINTCount;
|
|
VOL32 Render;
|
|
VOL32 ContinueNewLine;
|
|
VOL32 ContinueNewDom;
|
|
VOL32 ContinueNewSub;
|
|
VOL32 Continue;
|
|
VOL32 FlushSpan;
|
|
VOL32 BitMaskPattern;
|
|
} PMRender;
|
|
|
|
typedef struct {
|
|
VOL32 PointTable0;
|
|
VOL32 PointTable1;
|
|
VOL32 PointTable2;
|
|
VOL32 PointTable3;
|
|
VOL32 RasterizerMode;
|
|
VOL32 YLimits;
|
|
VOL32 ScanLineOwnership;
|
|
VOL32 WaitForCompletion;
|
|
VOL32 PixelSize;
|
|
VOL32 XLimits;
|
|
VOL32 RectangleOrigin;
|
|
VOL32 RectangleSize;
|
|
} PMRectangle;
|
|
|
|
typedef struct {
|
|
VOL32 FilterMode;
|
|
VOL32 StatisticMode;
|
|
VOL32 MinRegion;
|
|
VOL32 MaxRegion;
|
|
VOL32 ResetPickResult;
|
|
VOL32 MitHitRegion;
|
|
VOL32 MaxHitRegion;
|
|
VOL32 PickResult;
|
|
VOL32 GlintSync;
|
|
VOL32 reserved00;
|
|
VOL32 reserved01;
|
|
VOL32 reserved02;
|
|
VOL32 reserved03;
|
|
VOL32 FBBlockColorU;
|
|
VOL32 FBBlockColorL;
|
|
VOL32 SuspendUntilFrameBlank;
|
|
} PMMode;
|
|
|
|
typedef struct {
|
|
VOL32 ScissorMode;
|
|
VOL32 ScissorMinXY;
|
|
VOL32 ScissorMaxXY;
|
|
VOL32 ScreenSize;
|
|
VOL32 AreaStippleMode;
|
|
VOL32 LineStippleMode;
|
|
VOL32 LoadLineStippleCounters;
|
|
VOL32 UpdateLineStippleCounters;
|
|
VOL32 SaveLineStippleState;
|
|
VOL32 WindowOrigin;
|
|
} PMScissor;
|
|
|
|
typedef struct {
|
|
VOL32 RStart;
|
|
VOL32 dRdx;
|
|
VOL32 dRdyDom;
|
|
VOL32 GStart;
|
|
VOL32 dGdx;
|
|
VOL32 dGdyDom;
|
|
VOL32 BStart;
|
|
VOL32 dBdx;
|
|
VOL32 dBdyDom;
|
|
VOL32 AStart;
|
|
VOL32 dAdx;
|
|
VOL32 dAdyDom;
|
|
VOL32 ColorDDAMode;
|
|
VOL32 ConstantColor;
|
|
VOL32 GLINTColor;
|
|
} PMColor;
|
|
#endif
|
|
|
|
#define PM2_REG_BASE(c) ((c)->attr.address[0] & 0xFFFFC000)
|
|
#define PM2_REG_SIZE(c) (0x10000)
|
|
|
|
#define minb(p) *(volatile CARD8 *)(pm2c->reg_base + (p))
|
|
#define moutb(p,v) *(volatile CARD8 *)(pm2c->reg_base + (p)) = (v)
|
|
|
|
|
|
/* Memory mapped register access macros */
|
|
#define INREG8(addr) *(volatile CARD8 *)(pm2c->reg_base + (addr))
|
|
#define INREG16(addr) *(volatile CARD16 *)(pm2c->reg_base + (addr))
|
|
#define INREG(addr) *(volatile CARD32 *)(pm2c->reg_base + (addr))
|
|
|
|
#define OUTREG8(addr, val) do { \
|
|
*(volatile CARD8 *)(pm2c->reg_base + (addr)) = (val); \
|
|
} while (0)
|
|
|
|
#define OUTREG16(addr, val) do { \
|
|
*(volatile CARD16 *)(pm2c->reg_base + (addr)) = (val); \
|
|
} while (0)
|
|
|
|
#define OUTREG(addr, val) do { \
|
|
*(volatile CARD32 *)(pm2c->reg_base + (addr)) = (val); \
|
|
} while (0)
|
|
|
|
typedef struct _PM2CardInfo {
|
|
VesaCardPrivRec vesa;
|
|
CARD8 *reg_base;
|
|
|
|
int in_fifo_space;
|
|
int fifo_size;
|
|
|
|
int pprod;
|
|
int bppalign;
|
|
|
|
int clipping_on;
|
|
|
|
int ROP;
|
|
|
|
} PM2CardInfo;
|
|
|
|
#define getPM2CardInfo(kd) ((PM2CardInfo *) ((kd)->card->driver))
|
|
#define pmCardInfo(kd) PM2CardInfo *pm2c = getPM2CardInfo(kd)
|
|
|
|
typedef struct _PM2ScreenInfo {
|
|
VesaScreenPrivRec vesa;
|
|
CARD8 *cursor_base;
|
|
CARD8 *screen;
|
|
CARD8 *off_screen;
|
|
int off_screen_size;
|
|
KdVideoAdaptorPtr pAdaptor;
|
|
} PM2ScreenInfo;
|
|
|
|
#define getPM2ScreenInfo(kd) ((PM2ScreenInfo *) ((kd)->screen->driver))
|
|
#define pmScreenInfo(kd) PM2ScreenInfo *pm2s = getPM2ScreenInfo(kd)
|
|
|
|
Bool
|
|
pmCardInit (KdCardInfo *card);
|
|
|
|
Bool
|
|
pmScreenInit (KdScreenInfo *screen);
|
|
|
|
Bool
|
|
pmDrawInit(ScreenPtr);
|
|
|
|
void
|
|
pmDrawEnable (ScreenPtr);
|
|
|
|
void
|
|
pmDrawSync (ScreenPtr);
|
|
|
|
void
|
|
pmDrawDisable (ScreenPtr);
|
|
|
|
void
|
|
pmDrawFini (ScreenPtr);
|
|
|
|
|
|
extern KdCardFuncs PM2Funcs;
|
|
|
|
#define PM2R_MEM_CONFIG 0x10c0
|
|
|
|
#define PM2F_MEM_CONFIG_RAM_MASK (3L<<29)
|
|
#define PM2F_MEM_BANKS_1 0L
|
|
#define PM2F_MEM_BANKS_2 (1L<<29)
|
|
#define PM2F_MEM_BANKS_3 (2L<<29)
|
|
#define PM2F_MEM_BANKS_4 (3L<<29)
|
|
|
|
#endif /* _PM2_H_ */
|