31 #include <linux/module.h>
32 #include <linux/kernel.h>
33 #include <linux/errno.h>
34 #include <linux/string.h>
36 #include <linux/slab.h>
42 #include <linux/pci.h>
43 #include <linux/nvram.h>
104 .xres_virtual = 1024,
127 .xres_virtual = 1152,
131 .green = { 0, 8, 0 },
150 .xres_virtual = 1280,
151 .yres_virtual = 1024,
174 #define pci_inb(par, reg) readb(par->io_base+(reg))
175 #define pci_outb(par, val, reg) writeb(val, par->io_base+(reg))
177 static inline unsigned int iga_inb(
struct iga_par *par,
unsigned int reg,
180 pci_outb(par, idx, reg);
181 return pci_inb(par, reg + 1);
184 static inline void iga_outb(
struct iga_par *par,
unsigned char val,
185 unsigned int reg,
unsigned int idx )
187 pci_outb(par, idx, reg);
188 pci_outb(par, val, reg+1);
197 static void iga_blank_border(
struct iga_par *par)
205 (
void) pci_inb(par, 0x3DA);
216 for (i=0; i < 3; i++)
225 unsigned int size,
page, map_size = 0;
226 unsigned long map_offset = 0;
237 for (i = 0; par->
mmap_map[
i].size; i++) {
255 if (
page + map_size > size)
256 map_size = size -
page;
276 static int igafb_setcolreg(
unsigned regno,
unsigned red,
unsigned green,
288 if (regno >= info->
cmap.len)
297 switch (info->
var.bits_per_pixel) {
300 (regno << 10) | (regno << 5) | regno;
304 (regno << 16) | (regno << 8) | regno;
308 i = (regno << 8) | regno;
320 static struct fb_ops igafb_ops = {
322 .fb_setcolreg = igafb_setcolreg,
327 .fb_mmap = igafb_mmap,
339 info->
fix.smem_len = 0x100000;
342 info->
fix.smem_len = 0x200000;
346 info->
fix.smem_len = 0x400000;
350 if (info->
var.bits_per_pixel > 8)
353 video_cmap_len = 256;
355 info->
fbops = &igafb_ops;
363 printk(
"fb%d: %s frame buffer device at 0x%08lx [%dMB VRAM]\n",
367 iga_blank_border(par);
371 static int __init igafb_init(
void)
377 int size, iga2000 = 0;
402 printk(
"igafb_init: can't alloc fb_info\n");
409 if ((addr = pdev->
resource[0].start) == 0) {
410 printk(
"igafb_init: no memory start\n");
417 printk(
"igafb_init: can't remap %lx[2M]\n", addr);
448 igafb_fix.mmio_start = 0x30000000;
450 if ((par->
io_base = (
int)
ioremap(igafb_fix.mmio_start, igafb_fix.smem_len)) == 0) {
451 printk(
"igafb_init: can't remap %lx[4K]\n", igafb_fix.mmio_start);
468 printk(
"igafb_init: can't alloc mmap_map\n");
488 default_var = default_var_1024x768;
492 default_var = default_var_1152x900;
496 default_var = default_var_1280x1024;
526 info->
fix = igafb_fix;
529 if (!iga_init(info, par)) {
564 if (!options || !*options)
567 while ((this_opt =
strsep(&options,
",")) !=
NULL) {