0,0 → 1,249 |
|
//#define ATOM_BIOS 1 |
//#define ATOM_BIOS_PARSER 1 |
|
#define OS_BASE 0x80000000 |
|
#include "xmd.h" |
|
#define NULL (void*)(0) |
|
#define FALSE 0 |
#define TRUE 1 |
|
typedef void *pointer; |
|
typedef unsigned int Bool; |
|
typedef unsigned char u8_t; |
typedef unsigned short u16_t; |
typedef unsigned int u32_t; |
|
typedef unsigned int memType; |
typedef unsigned int size_t; |
|
#define MAX_HSYNC 8 |
#define MAX_VREFRESH 8 |
#define INTERLACE_REFRESH_WEIGHT 1.5 |
#define SYNC_TOLERANCE 0.01 /* 1 percent */ |
#define CLOCK_TOLERANCE 2000 /* Clock matching tolerance (2MHz) */ |
|
typedef struct { float hi, lo; } range; |
|
|
#define STDCALL __attribute__ ((stdcall)) __attribute__ ((dllimport)) |
#define IMPORT __attribute__ ((dllimport)) |
|
|
CARD32 STDCALL AllocKernelSpace(unsigned size)__asm__("AllocKernelSpace"); |
void* STDCALL KernelAlloc(unsigned size)__asm__("KernelAlloc"); |
int KernelFree(void *); |
|
CARD32 STDCALL MapIoMem(CARD32 Base,CARD32 size,CARD32 flags)__asm__("MapIoMem"); |
|
u8_t STDCALL PciRead8 (u32_t bus, u32_t devfn, u32_t reg)__asm__("PciRead8"); |
u16_t STDCALL PciRead16(u32_t bus, u32_t devfn, u32_t reg)__asm__("PciRead16"); |
u32_t STDCALL PciRead32(u32_t bus, u32_t devfn, u32_t reg)__asm__("PciRead32"); |
|
#define pciReadLong(tag, reg) \ |
PciRead32(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg)) |
|
u32_t STDCALL PciWrite8 (u32_t bus, u32_t devfn, u32_t reg,u8_t val) __asm__("PciWrite8"); |
u32_t STDCALL PciWrite16(u32_t bus, u32_t devfn, u32_t reg,u16_t val)__asm__("PciWrite16"); |
u32_t STDCALL PciWrite32(u32_t bus, u32_t devfn, u32_t reg,u32_t val)__asm__("PciWrite32"); |
|
#define pciWriteLong(tag, reg, val) \ |
PciWrite32(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg),(val)) |
|
void usleep(u32_t delay); |
|
/////////////////////////////////////////////////////////////////////////////// |
|
void *malloc(size_t); |
void *calloc( size_t num, size_t size ); |
void *realloc(void*, size_t); |
void free(void*); |
|
|
#define xalloc malloc |
#define xnfalloc malloc |
|
#define xcalloc calloc |
#define xnfcalloc calloc |
|
#define xrealloc realloc |
|
#define xfree free |
|
/////////////////////////////////////////////////////////////////////////////// |
|
void* memset(void *s, int c, size_t n); |
void* memcpy(void * dest, const void *src, size_t n); |
int memcmp(const void *s1, const void *s2, size_t n); |
|
size_t strlen(const char *str); |
char* strcpy(char *to, const char *from); |
char* strcat(char *s, const char *append); |
char* strdup(const char *s); |
char* strchr(const char *s, int c); |
int strcmp(const char *s1, const char *s2); |
|
#define xstrdup strdup |
|
/////////////////////////////////////////////////////////////////////////////// |
|
int snprintf(char *s, size_t n, const char *format, ...); |
int printf(const char* format, ...); |
int dbg_open(char *path); |
int dbgprintf(const char* format, ...); |
|
/////////////////////////////////////////////////////////////////////////////// |
|
/* These are possible return values for xf86CheckMode() and ValidMode() */ |
typedef enum { |
MODE_OK = 0, /* Mode OK */ |
MODE_HSYNC, /* hsync out of range */ |
MODE_VSYNC, /* vsync out of range */ |
MODE_H_ILLEGAL, /* mode has illegal horizontal timings */ |
MODE_V_ILLEGAL, /* mode has illegal horizontal timings */ |
MODE_BAD_WIDTH, /* requires an unsupported linepitch */ |
MODE_NOMODE, /* no mode with a maching name */ |
MODE_NO_INTERLACE, /* interlaced mode not supported */ |
MODE_NO_DBLESCAN, /* doublescan mode not supported */ |
MODE_NO_VSCAN, /* multiscan mode not supported */ |
MODE_MEM, /* insufficient video memory */ |
MODE_VIRTUAL_X, /* mode width too large for specified virtual size */ |
MODE_VIRTUAL_Y, /* mode height too large for specified virtual size */ |
MODE_MEM_VIRT, /* insufficient video memory given virtual size */ |
MODE_NOCLOCK, /* no fixed clock available */ |
MODE_CLOCK_HIGH, /* clock required is too high */ |
MODE_CLOCK_LOW, /* clock required is too low */ |
MODE_CLOCK_RANGE, /* clock/mode isn't in a ClockRange */ |
MODE_BAD_HVALUE, /* horizontal timing was out of range */ |
MODE_BAD_VVALUE, /* vertical timing was out of range */ |
MODE_BAD_VSCAN, /* VScan value out of range */ |
MODE_HSYNC_NARROW, /* horizontal sync too narrow */ |
MODE_HSYNC_WIDE, /* horizontal sync too wide */ |
MODE_HBLANK_NARROW, /* horizontal blanking too narrow */ |
MODE_HBLANK_WIDE, /* horizontal blanking too wide */ |
MODE_VSYNC_NARROW, /* vertical sync too narrow */ |
MODE_VSYNC_WIDE, /* vertical sync too wide */ |
MODE_VBLANK_NARROW, /* vertical blanking too narrow */ |
MODE_VBLANK_WIDE, /* vertical blanking too wide */ |
MODE_PANEL, /* exceeds panel dimensions */ |
MODE_INTERLACE_WIDTH, /* width too large for interlaced mode */ |
MODE_ONE_WIDTH, /* only one width is supported */ |
MODE_ONE_HEIGHT, /* only one height is supported */ |
MODE_ONE_SIZE, /* only one resolution is supported */ |
MODE_BAD = -2, /* unspecified reason */ |
MODE_ERROR = -1 /* error condition */ |
} ModeStatus; |
|
typedef enum { |
V_PHSYNC = 0x0001, |
V_NHSYNC = 0x0002, |
V_PVSYNC = 0x0004, |
V_NVSYNC = 0x0008, |
V_INTERLACE = 0x0010, |
V_DBLSCAN = 0x0020, |
V_CSYNC = 0x0040, |
V_PCSYNC = 0x0080, |
V_NCSYNC = 0x0100, |
V_HSKEW = 0x0200, /* hskew provided */ |
V_BCAST = 0x0400, |
V_PIXMUX = 0x1000, |
V_DBLCLK = 0x2000, |
V_CLKDIV2 = 0x4000 |
} ModeFlags; |
|
# define M_T_DEFAULT 0x10 /* (VESA) default modes */ |
# define M_T_USERDEF 0x20 /* One of the modes from the config file */ |
|
|
/* Video mode */ |
typedef struct _DisplayModeRec { |
struct _DisplayModeRec * prev; |
struct _DisplayModeRec * next; |
char * name; /* identifier for the mode */ |
ModeStatus status; |
int type; |
|
/* These are the values that the user sees/provides */ |
int Clock; /* pixel clock freq */ |
int HDisplay; /* horizontal timing */ |
int HSyncStart; |
int HSyncEnd; |
int HTotal; |
int HSkew; |
int VDisplay; /* vertical timing */ |
int VSyncStart; |
int VSyncEnd; |
int VTotal; |
int VScan; |
int Flags; |
|
/* These are the values the hardware uses */ |
int ClockIndex; |
int SynthClock; /* Actual clock freq to |
* be programmed */ |
int CrtcHDisplay; |
int CrtcHBlankStart; |
int CrtcHSyncStart; |
int CrtcHSyncEnd; |
int CrtcHBlankEnd; |
int CrtcHTotal; |
int CrtcHSkew; |
int CrtcVDisplay; |
int CrtcVBlankStart; |
int CrtcVSyncStart; |
int CrtcVSyncEnd; |
int CrtcVBlankEnd; |
int CrtcVTotal; |
Bool CrtcHAdjusted; |
Bool CrtcVAdjusted; |
int PrivSize; |
CARD32* Private; |
int PrivFlags; |
|
float HSync, VRefresh; |
} DisplayModeRec, *DisplayModePtr; |
|
typedef struct |
{ |
unsigned short red, green, blue; |
} LOCO; |
|
|
static void __attribute__ ((always_inline)) |
__clear (void * dst, unsigned len) |
{ u32_t tmp; |
asm __volatile__ |
( |
"xor eax, eax \n\t" |
"cld \n\t" |
"rep stosb" |
:"=c"(tmp),"=D"(tmp) |
:"c"(len),"D"(dst) |
:"memory","eax","cc" |
); |
}; |
|
static int __attribute__ ((always_inline)) |
abs (int i) |
{ |
return i < 0 ? -i : i; |
}; |
|
#define DPMSModeOn 0 |
#define DPMSModeStandby 1 |
#define DPMSModeSuspend 2 |
#define DPMSModeOff 3 |
|
|
|
#define max(x,y) (((y)>(x))?(y):(x)) |
#define min(x,y) (((y)<(x))?(y):(x)) |
|
|
#define M_T_BUILTIN 0x01 /* built-in mode */ |
|