summaryrefslogtreecommitdiffstats
path: root/drivers/video/cyber2000fb.h
blob: bbbd1edbb9e0edabcdcd7f17cdecc04b4a38ce50 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/*
 * linux/drivers/video/cyber2000fb.h
 *
 * Integraphics Cyber2000 frame buffer device
 */

#define arraysize(x)    (sizeof(x)/sizeof(*(x)))
#define cyber2000_outb(dat,reg)	(CyberRegs[reg] = dat)
#define cyber2000_outw(dat,reg)	(*(unsigned short *)&CyberRegs[reg] = dat)
#define cyber2000_outl(dat,reg)	(*(unsigned long *)&CyberRegs[reg] = dat)

#define cyber2000_inb(reg)	(CyberRegs[reg])
#define cyber2000_inw(reg)	(*(unsigned short *)&CyberRegs[reg])
#define cyber2000_inl(reg)	(*(unsigned long *)&CyberRegs[reg])

static inline void cyber2000_crtcw(int reg, int val)
{
	cyber2000_outb(reg, 0x3d4);
	cyber2000_outb(val, 0x3d5);
}

static inline void cyber2000_grphw(int reg, int val)
{
	cyber2000_outb(reg, 0x3ce);
	cyber2000_outb(val, 0x3cf);
}

static inline void cyber2000_attrw(int reg, int val)
{
	cyber2000_inb(0x3da);
	cyber2000_outb(reg, 0x3c0);
	cyber2000_inb(0x3c1);
	cyber2000_outb(val, 0x3c0);
}

static inline void cyber2000_seqw(int reg, int val)
{
	cyber2000_outb(reg, 0x3c4);
	cyber2000_outb(val, 0x3c5);
}

struct cyber2000fb_par {
	unsigned long	screen_base;
	unsigned long	screen_base_p;
	unsigned long	regs_base;
	unsigned long	regs_base_p;
	unsigned long	screen_end;
	unsigned long	screen_size;
	unsigned int	palette_size;
	  signed int	currcon;
	/*
	 * palette
	 */
	struct {
		u8			red;
		u8			green;
		u8			blue;
	} palette[256];
	/*
	 * colour mapping table
	 */
	union {
#ifdef FBCON_HAS_CFB16
		u16			cfb16[16];
#endif
#ifdef FBCON_HAS_CFB24
		u32			cfb24[16];
#endif
	} c_table;
};

struct res {
	int	xres;
	int	yres;
	unsigned char crtc_regs[18];
	unsigned char crtc_ofl;
	unsigned char clk_regs[4];
};