Lines Matching refs:minfo
125 static void matroxfb_unregister_device(struct matrox_fb_info* minfo);
156 static void update_crtc2(struct matrox_fb_info *minfo, unsigned int pos) in update_crtc2() argument
158 struct matroxfb_dh_fb_info *info = minfo->crtc2.info; in update_crtc2()
161 if (info && (info->fbcon.var.bits_per_pixel == minfo->fbcon.var.bits_per_pixel) in update_crtc2()
162 && (info->fbcon.var.xres_virtual == minfo->fbcon.var.xres_virtual) in update_crtc2()
163 && (info->fbcon.var.green.length == minfo->fbcon.var.green.length) in update_crtc2()
165 switch (minfo->fbcon.var.bits_per_pixel) { in update_crtc2()
171 mga_outl(0x3C28, pos + minfo->fbcon.var.xres_virtual * minfo->fbcon.var.bits_per_pixel / 8); in update_crtc2()
180 static void matroxfb_crtc1_panpos(struct matrox_fb_info *minfo) in matroxfb_crtc1_panpos() argument
182 if (minfo->crtc1.panpos >= 0) { in matroxfb_crtc1_panpos()
187 panpos = minfo->crtc1.panpos; in matroxfb_crtc1_panpos()
191 minfo->crtc1.panpos = -1; /* No update pending anymore */ in matroxfb_crtc1_panpos()
206 struct matrox_fb_info *minfo = dev_id; in matrox_irq() local
212 minfo->crtc1.vsync.cnt++; in matrox_irq()
213 matroxfb_crtc1_panpos(minfo); in matrox_irq()
214 wake_up_interruptible(&minfo->crtc1.vsync.wait); in matrox_irq()
219 minfo->crtc2.vsync.cnt++; in matrox_irq()
220 wake_up_interruptible(&minfo->crtc2.vsync.wait); in matrox_irq()
226 int matroxfb_enable_irq(struct matrox_fb_info *minfo, int reenable) in matroxfb_enable_irq() argument
230 if (minfo->devflags.accelerator == FB_ACCEL_MATROX_MGAG400) in matroxfb_enable_irq()
235 if (!test_and_set_bit(0, &minfo->irq_flags)) { in matroxfb_enable_irq()
236 if (request_irq(minfo->pcidev->irq, matrox_irq, in matroxfb_enable_irq()
237 IRQF_SHARED, "matroxfb", minfo)) { in matroxfb_enable_irq()
238 clear_bit(0, &minfo->irq_flags); in matroxfb_enable_irq()
256 static void matroxfb_disable_irq(struct matrox_fb_info *minfo) in matroxfb_disable_irq() argument
258 if (test_and_clear_bit(0, &minfo->irq_flags)) { in matroxfb_disable_irq()
260 matroxfb_crtc1_panpos(minfo); in matroxfb_disable_irq()
261 if (minfo->devflags.accelerator == FB_ACCEL_MATROX_MGAG400) in matroxfb_disable_irq()
265 free_irq(minfo->pcidev->irq, minfo); in matroxfb_disable_irq()
269 int matroxfb_wait_for_sync(struct matrox_fb_info *minfo, u_int32_t crtc) in matroxfb_wait_for_sync() argument
277 vs = &minfo->crtc1.vsync; in matroxfb_wait_for_sync()
280 if (minfo->devflags.accelerator != FB_ACCEL_MATROX_MGAG400) { in matroxfb_wait_for_sync()
283 vs = &minfo->crtc2.vsync; in matroxfb_wait_for_sync()
288 ret = matroxfb_enable_irq(minfo, 0); in matroxfb_wait_for_sync()
299 matroxfb_enable_irq(minfo, 1); in matroxfb_wait_for_sync()
307 static void matrox_pan_var(struct matrox_fb_info *minfo, in matrox_pan_var() argument
320 if (minfo->dead) in matrox_pan_var()
323 minfo->fbcon.var.xoffset = var->xoffset; in matrox_pan_var()
324 minfo->fbcon.var.yoffset = var->yoffset; in matrox_pan_var()
325 …pos = (minfo->fbcon.var.yoffset * minfo->fbcon.var.xres_virtual + minfo->fbcon.var.xoffset) * minf… in matrox_pan_var()
326 pos += minfo->curr.ydstorg.chunks; in matrox_pan_var()
327 p0 = minfo->hw.CRTC[0x0D] = pos & 0xFF; in matrox_pan_var()
328 p1 = minfo->hw.CRTC[0x0C] = (pos & 0xFF00) >> 8; in matrox_pan_var()
329 …p2 = minfo->hw.CRTCEXT[0] = (minfo->hw.CRTCEXT[0] & 0xB0) | ((pos >> 16) & 0x0F) | ((pos >> 14) & … in matrox_pan_var()
330 p3 = minfo->hw.CRTCEXT[8] = pos >> 21; in matrox_pan_var()
333 vbl = (var->activate & FB_ACTIVATE_VBL) && (matroxfb_enable_irq(minfo, 0) == 0); in matrox_pan_var()
340 if (minfo->devflags.support32MB) in matrox_pan_var()
343 minfo->crtc1.panpos = p2; in matrox_pan_var()
346 minfo->crtc1.panpos = -1; in matrox_pan_var()
351 update_crtc2(minfo, pos); in matrox_pan_var()
356 static void matroxfb_remove(struct matrox_fb_info *minfo, int dummy) in matroxfb_remove() argument
366 minfo->dead = 1; in matroxfb_remove()
367 if (minfo->usecount) { in matroxfb_remove()
371 matroxfb_unregister_device(minfo); in matroxfb_remove()
372 unregister_framebuffer(&minfo->fbcon); in matroxfb_remove()
373 matroxfb_g450_shutdown(minfo); in matroxfb_remove()
374 arch_phys_wc_del(minfo->wc_cookie); in matroxfb_remove()
375 iounmap(minfo->mmio.vbase.vaddr); in matroxfb_remove()
376 iounmap(minfo->video.vbase.vaddr); in matroxfb_remove()
377 release_mem_region(minfo->video.base, minfo->video.len_maximum); in matroxfb_remove()
378 release_mem_region(minfo->mmio.base, 16384); in matroxfb_remove()
379 kfree(minfo); in matroxfb_remove()
388 struct matrox_fb_info *minfo = info2minfo(info); in matroxfb_open() local
392 if (minfo->dead) { in matroxfb_open()
395 minfo->usecount++; in matroxfb_open()
397 minfo->userusecount++; in matroxfb_open()
404 struct matrox_fb_info *minfo = info2minfo(info); in matroxfb_release() local
409 if (0 == --minfo->userusecount) { in matroxfb_release()
410 matroxfb_disable_irq(minfo); in matroxfb_release()
413 if (!(--minfo->usecount) && minfo->dead) { in matroxfb_release()
414 matroxfb_remove(minfo, 0); in matroxfb_release()
421 struct matrox_fb_info *minfo = info2minfo(info); in matroxfb_pan_display() local
425 matrox_pan_var(minfo, var); in matroxfb_pan_display()
429 static int matroxfb_get_final_bppShift(const struct matrox_fb_info *minfo, in matroxfb_get_final_bppShift() argument
440 if (isInterleave(minfo)) in matroxfb_get_final_bppShift()
442 if (minfo->devflags.video64bits) in matroxfb_get_final_bppShift()
447 static int matroxfb_test_and_set_rounding(const struct matrox_fb_info *minfo, in matroxfb_test_and_set_rounding() argument
467 if (minfo->devflags.accelerator == FB_ACCEL_MATROX_MGAG400) in matroxfb_test_and_set_rounding()
471 if (isInterleave(minfo)) { in matroxfb_test_and_set_rounding()
480 static int matroxfb_pitch_adjust(const struct matrox_fb_info *minfo, int xres, in matroxfb_pitch_adjust() argument
490 width = minfo->capable.vxres; in matroxfb_pitch_adjust()
492 if (minfo->devflags.precise_width) { in matroxfb_pitch_adjust()
494 if ((*width >= xres) && (matroxfb_test_and_set_rounding(minfo, *width, bpp) == *width)) { in matroxfb_pitch_adjust()
501 xres_new = matroxfb_test_and_set_rounding(minfo, xres, bpp); in matroxfb_pitch_adjust()
528 static int matroxfb_decode_var(const struct matrox_fb_info *minfo, in matroxfb_decode_var() argument
558 case 4: if (!minfo->capable.cfb4) return -EINVAL; in matroxfb_decode_var()
567 vramlen = minfo->video.len_usable; in matroxfb_decode_var()
573 var->xres_virtual = matroxfb_pitch_adjust(minfo, var->xres_virtual, bpp); in matroxfb_decode_var()
582 if (!minfo->capable.cross4MB && (memlen > 0x400000)) { in matroxfb_decode_var()
647 struct matrox_fb_info* minfo = container_of(fb_info, struct matrox_fb_info, fbcon); in matroxfb_setcolreg() local
658 if (regno >= minfo->curr.cmap_len) in matroxfb_setcolreg()
661 if (minfo->fbcon.var.grayscale) { in matroxfb_setcolreg()
666 red = CNVT_TOHW(red, minfo->fbcon.var.red.length); in matroxfb_setcolreg()
667 green = CNVT_TOHW(green, minfo->fbcon.var.green.length); in matroxfb_setcolreg()
668 blue = CNVT_TOHW(blue, minfo->fbcon.var.blue.length); in matroxfb_setcolreg()
669 transp = CNVT_TOHW(transp, minfo->fbcon.var.transp.length); in matroxfb_setcolreg()
671 switch (minfo->fbcon.var.bits_per_pixel) { in matroxfb_setcolreg()
684 (red << minfo->fbcon.var.red.offset) | in matroxfb_setcolreg()
685 (green << minfo->fbcon.var.green.offset) | in matroxfb_setcolreg()
686 (blue << minfo->fbcon.var.blue.offset) | in matroxfb_setcolreg()
687 (transp << minfo->fbcon.var.transp.offset); /* for 1:5:5:5 */ in matroxfb_setcolreg()
688 minfo->cmap[regno] = col | (col << 16); in matroxfb_setcolreg()
695 minfo->cmap[regno] = in matroxfb_setcolreg()
696 (red << minfo->fbcon.var.red.offset) | in matroxfb_setcolreg()
697 (green << minfo->fbcon.var.green.offset) | in matroxfb_setcolreg()
698 (blue << minfo->fbcon.var.blue.offset) | in matroxfb_setcolreg()
699 (transp << minfo->fbcon.var.transp.offset); /* 8:8:8:8 */ in matroxfb_setcolreg()
705 static void matroxfb_init_fix(struct matrox_fb_info *minfo) in matroxfb_init_fix() argument
707 struct fb_fix_screeninfo *fix = &minfo->fbcon.fix; in matroxfb_init_fix()
715 fix->mmio_start = minfo->mmio.base; in matroxfb_init_fix()
716 fix->mmio_len = minfo->mmio.len; in matroxfb_init_fix()
717 fix->accel = minfo->devflags.accelerator; in matroxfb_init_fix()
720 static void matroxfb_update_fix(struct matrox_fb_info *minfo) in matroxfb_update_fix() argument
722 struct fb_fix_screeninfo *fix = &minfo->fbcon.fix; in matroxfb_update_fix()
725 mutex_lock(&minfo->fbcon.mm_lock); in matroxfb_update_fix()
726 fix->smem_start = minfo->video.base + minfo->curr.ydstorg.bytes; in matroxfb_update_fix()
727 fix->smem_len = minfo->video.len_usable - minfo->curr.ydstorg.bytes; in matroxfb_update_fix()
728 mutex_unlock(&minfo->fbcon.mm_lock); in matroxfb_update_fix()
737 struct matrox_fb_info *minfo = info2minfo(info); in matroxfb_check_var() local
739 if (minfo->dead) { in matroxfb_check_var()
742 if ((err = matroxfb_decode_var(minfo, var, &visual, &cmap_len, &ydstorg)) != 0) in matroxfb_check_var()
754 struct matrox_fb_info *minfo = info2minfo(info); in matroxfb_set_par() local
758 if (minfo->dead) { in matroxfb_set_par()
763 if ((err = matroxfb_decode_var(minfo, var, &visual, &cmap_len, &ydstorg)) != 0) in matroxfb_set_par()
765 minfo->fbcon.screen_base = vaddr_va(minfo->video.vbase) + ydstorg; in matroxfb_set_par()
766 matroxfb_update_fix(minfo); in matroxfb_set_par()
767 minfo->fbcon.fix.visual = visual; in matroxfb_set_par()
768 minfo->fbcon.fix.type = FB_TYPE_PACKED_PIXELS; in matroxfb_set_par()
769 minfo->fbcon.fix.type_aux = 0; in matroxfb_set_par()
770 minfo->fbcon.fix.line_length = (var->xres_virtual * var->bits_per_pixel) >> 3; in matroxfb_set_par()
774 minfo->curr.cmap_len = cmap_len; in matroxfb_set_par()
775 ydstorg += minfo->devflags.ydstorg; in matroxfb_set_par()
776 minfo->curr.ydstorg.bytes = ydstorg; in matroxfb_set_par()
777 minfo->curr.ydstorg.chunks = ydstorg >> (isInterleave(minfo) ? 3 : 2); in matroxfb_set_par()
779 minfo->curr.ydstorg.pixels = ydstorg; in matroxfb_set_par()
781 minfo->curr.ydstorg.pixels = (ydstorg * 8) / var->bits_per_pixel; in matroxfb_set_par()
782 minfo->curr.final_bppShift = matroxfb_get_final_bppShift(minfo, var->bits_per_pixel); in matroxfb_set_par()
798 hw = &minfo->hw; in matroxfb_set_par()
800 down_read(&minfo->altout.lock); in matroxfb_set_par()
802 if (minfo->outputs[out].src == MATROXFB_SRC_CRTC1 && in matroxfb_set_par()
803 minfo->outputs[out].output->compute) { in matroxfb_set_par()
804 minfo->outputs[out].output->compute(minfo->outputs[out].data, &mt); in matroxfb_set_par()
807 up_read(&minfo->altout.lock); in matroxfb_set_par()
808 minfo->crtc1.pixclock = mt.pixclock; in matroxfb_set_par()
809 minfo->crtc1.mnp = mt.mnp; in matroxfb_set_par()
810 minfo->hw_switch->init(minfo, &mt); in matroxfb_set_par()
811 pos = (var->yoffset * var->xres_virtual + var->xoffset) * minfo->curr.final_bppShift / 32; in matroxfb_set_par()
812 pos += minfo->curr.ydstorg.chunks; in matroxfb_set_par()
818 minfo->hw_switch->restore(minfo); in matroxfb_set_par()
819 update_crtc2(minfo, pos); in matroxfb_set_par()
820 down_read(&minfo->altout.lock); in matroxfb_set_par()
822 if (minfo->outputs[out].src == MATROXFB_SRC_CRTC1 && in matroxfb_set_par()
823 minfo->outputs[out].output->program) { in matroxfb_set_par()
824 minfo->outputs[out].output->program(minfo->outputs[out].data); in matroxfb_set_par()
828 if (minfo->outputs[out].src == MATROXFB_SRC_CRTC1 && in matroxfb_set_par()
829 minfo->outputs[out].output->start) { in matroxfb_set_par()
830 minfo->outputs[out].output->start(minfo->outputs[out].data); in matroxfb_set_par()
833 up_read(&minfo->altout.lock); in matroxfb_set_par()
834 matrox_cfbX_init(minfo); in matroxfb_set_par()
837 minfo->initialized = 1; in matroxfb_set_par()
841 static int matroxfb_get_vblank(struct matrox_fb_info *minfo, in matroxfb_get_vblank() argument
846 matroxfb_enable_irq(minfo, 0); in matroxfb_get_vblank()
859 if (vblank->vcount >= minfo->fbcon.var.yres) in matroxfb_get_vblank()
861 if (test_bit(0, &minfo->irq_flags)) { in matroxfb_get_vblank()
865 vblank->count = minfo->crtc1.vsync.cnt; in matroxfb_get_vblank()
878 struct matrox_fb_info *minfo = info2minfo(info); in matroxfb_ioctl() local
882 if (minfo->dead) { in matroxfb_ioctl()
892 err = matroxfb_get_vblank(minfo, &vblank); in matroxfb_ioctl()
906 return matroxfb_wait_for_sync(minfo, crt); in matroxfb_ioctl()
918 down_read(&minfo->altout.lock); in matroxfb_ioctl()
919 oproc = minfo->outputs[mom.output].output; in matroxfb_ioctl()
929 val = oproc->verifymode(minfo->outputs[mom.output].data, mom.mode); in matroxfb_ioctl()
932 if (minfo->outputs[mom.output].mode != mom.mode) { in matroxfb_ioctl()
933 minfo->outputs[mom.output].mode = mom.mode; in matroxfb_ioctl()
937 up_read(&minfo->altout.lock); in matroxfb_ioctl()
940 switch (minfo->outputs[mom.output].src) { in matroxfb_ioctl()
948 down_read(&minfo->crtc2.lock); in matroxfb_ioctl()
949 crtc2 = minfo->crtc2.info; in matroxfb_ioctl()
952 up_read(&minfo->crtc2.lock); in matroxfb_ioctl()
968 down_read(&minfo->altout.lock); in matroxfb_ioctl()
969 oproc = minfo->outputs[mom.output].output; in matroxfb_ioctl()
973 mom.mode = minfo->outputs[mom.output].mode; in matroxfb_ioctl()
976 up_read(&minfo->altout.lock); in matroxfb_ioctl()
995 if (!minfo->outputs[i].output) in matroxfb_ioctl()
997 switch (minfo->outputs[i].src) { in matroxfb_ioctl()
1006 if (minfo->devflags.panellink) { in matroxfb_ioctl()
1011 if (minfo->outputs[i].src == MATROXFB_SRC_CRTC2) { in matroxfb_ioctl()
1020 if (minfo->outputs[i].src != MATROXFB_SRC_CRTC1) { in matroxfb_ioctl()
1022 minfo->outputs[i].src = MATROXFB_SRC_CRTC1; in matroxfb_ioctl()
1024 } else if (minfo->outputs[i].src == MATROXFB_SRC_CRTC1) { in matroxfb_ioctl()
1026 minfo->outputs[i].src = MATROXFB_SRC_NONE; in matroxfb_ioctl()
1040 if (minfo->outputs[i].src == MATROXFB_SRC_CRTC1) { in matroxfb_ioctl()
1054 if (minfo->outputs[i].output) { in matroxfb_ioctl()
1055 switch (minfo->outputs[i].src) { in matroxfb_ioctl()
1063 if (minfo->devflags.panellink) { in matroxfb_ioctl()
1079 if (minfo->outputs[i].output) { in matroxfb_ioctl()
1094 sprintf(r.bus_info, "PCI:%s", pci_name(minfo->pcidev)); in matroxfb_ioctl()
1110 down_read(&minfo->altout.lock); in matroxfb_ioctl()
1111 if (!minfo->outputs[1].output) { in matroxfb_ioctl()
1113 } else if (minfo->outputs[1].output->getqueryctrl) { in matroxfb_ioctl()
1114 err = minfo->outputs[1].output->getqueryctrl(minfo->outputs[1].data, &qctrl); in matroxfb_ioctl()
1118 up_read(&minfo->altout.lock); in matroxfb_ioctl()
1132 down_read(&minfo->altout.lock); in matroxfb_ioctl()
1133 if (!minfo->outputs[1].output) { in matroxfb_ioctl()
1135 } else if (minfo->outputs[1].output->getctrl) { in matroxfb_ioctl()
1136 err = minfo->outputs[1].output->getctrl(minfo->outputs[1].data, &ctrl); in matroxfb_ioctl()
1140 up_read(&minfo->altout.lock); in matroxfb_ioctl()
1154 down_read(&minfo->altout.lock); in matroxfb_ioctl()
1155 if (!minfo->outputs[1].output) { in matroxfb_ioctl()
1157 } else if (minfo->outputs[1].output->setctrl) { in matroxfb_ioctl()
1158 err = minfo->outputs[1].output->setctrl(minfo->outputs[1].data, &ctrl); in matroxfb_ioctl()
1162 up_read(&minfo->altout.lock); in matroxfb_ioctl()
1176 struct matrox_fb_info *minfo = info2minfo(info); in matroxfb_blank() local
1180 if (minfo->dead) in matroxfb_blank()
1280 static int matroxfb_getmemory(struct matrox_fb_info *minfo, in matroxfb_getmemory() argument
1292 vm = minfo->video.vbase; in matroxfb_getmemory()
1324 minfo->interleave = !(!isMillenium(minfo) || ((offs - 0x100000) & 0x3FFFFF)); in matroxfb_getmemory()
1586 static void setDefaultOutputs(struct matrox_fb_info *minfo) in setDefaultOutputs() argument
1591 minfo->outputs[0].default_src = MATROXFB_SRC_CRTC1; in setDefaultOutputs()
1592 if (minfo->devflags.g450dac) { in setDefaultOutputs()
1593 minfo->outputs[1].default_src = MATROXFB_SRC_CRTC1; in setDefaultOutputs()
1594 minfo->outputs[2].default_src = MATROXFB_SRC_CRTC1; in setDefaultOutputs()
1596 minfo->outputs[2].default_src = MATROXFB_SRC_CRTC1; in setDefaultOutputs()
1606 minfo->outputs[i].default_src = MATROXFB_SRC_NONE; in setDefaultOutputs()
1608 minfo->outputs[i].default_src = MATROXFB_SRC_CRTC1; in setDefaultOutputs()
1609 } else if (c == '2' && minfo->devflags.crtc2) { in setDefaultOutputs()
1610 minfo->outputs[i].default_src = MATROXFB_SRC_CRTC2; in setDefaultOutputs()
1620 static int initMatrox2(struct matrox_fb_info *minfo, struct board *b) in initMatrox2() argument
1637 minfo->hw_switch = b->base->lowlevel; in initMatrox2()
1638 minfo->devflags.accelerator = b->base->accelID; in initMatrox2()
1639 minfo->max_pixel_clock = b->maxclk; in initMatrox2()
1642 minfo->capable.plnwt = 1; in initMatrox2()
1643 minfo->chip = b->chip; in initMatrox2()
1644 minfo->capable.srcorg = b->flags & DEVF_SRCORG; in initMatrox2()
1645 minfo->devflags.video64bits = b->flags & DEVF_VIDEO64BIT; in initMatrox2()
1647 minfo->devflags.vgastep = 4; in initMatrox2()
1648 minfo->devflags.textmode = 4; in initMatrox2()
1649 minfo->devflags.text_type_aux = FB_AUX_TEXT_MGA_STEP16; in initMatrox2()
1651 minfo->devflags.vgastep = 16; in initMatrox2()
1652 minfo->devflags.textmode = 1; in initMatrox2()
1653 minfo->devflags.text_type_aux = FB_AUX_TEXT_MGA_STEP16; in initMatrox2()
1655 minfo->devflags.vgastep = 8; in initMatrox2()
1656 minfo->devflags.textmode = 1; in initMatrox2()
1657 minfo->devflags.text_type_aux = FB_AUX_TEXT_MGA_STEP8; in initMatrox2()
1659 minfo->devflags.support32MB = (b->flags & DEVF_SUPPORT32MB) != 0; in initMatrox2()
1660 minfo->devflags.precise_width = !(b->flags & DEVF_ANY_VXRES); in initMatrox2()
1661 minfo->devflags.crtc2 = (b->flags & DEVF_CRTC2) != 0; in initMatrox2()
1662 minfo->devflags.maven_capable = (b->flags & DEVF_MAVEN_CAPABLE) != 0; in initMatrox2()
1663 minfo->devflags.dualhead = (b->flags & DEVF_DUALHEAD) != 0; in initMatrox2()
1664 minfo->devflags.dfp_type = dfp_type; in initMatrox2()
1665 minfo->devflags.g450dac = (b->flags & DEVF_G450DAC) != 0; in initMatrox2()
1666 minfo->devflags.textstep = minfo->devflags.vgastep * minfo->devflags.textmode; in initMatrox2()
1667 minfo->devflags.textvram = 65536 / minfo->devflags.textmode; in initMatrox2()
1668 setDefaultOutputs(minfo); in initMatrox2()
1670 minfo->outputs[2].data = minfo; in initMatrox2()
1671 minfo->outputs[2].output = &panellink_output; in initMatrox2()
1672 minfo->outputs[2].src = minfo->outputs[2].default_src; in initMatrox2()
1673 minfo->outputs[2].mode = MATROXFB_OUTPUT_MODE_MONITOR; in initMatrox2()
1674 minfo->devflags.panellink = 1; in initMatrox2()
1677 if (minfo->capable.cross4MB < 0) in initMatrox2()
1678 minfo->capable.cross4MB = b->flags & DEVF_CROSS4MB; in initMatrox2()
1680 ctrlptr_phys = pci_resource_start(minfo->pcidev, 1); in initMatrox2()
1681 video_base_phys = pci_resource_start(minfo->pcidev, 0); in initMatrox2()
1682 minfo->devflags.fbResource = PCI_BASE_ADDRESS_0; in initMatrox2()
1684 ctrlptr_phys = pci_resource_start(minfo->pcidev, 0); in initMatrox2()
1685 video_base_phys = pci_resource_start(minfo->pcidev, 1); in initMatrox2()
1686 minfo->devflags.fbResource = PCI_BASE_ADDRESS_1; in initMatrox2()
1704 minfo->video.len_maximum = memsize; in initMatrox2()
1713 minfo->mmio.vbase.vaddr = ioremap_nocache(ctrlptr_phys, 16384); in initMatrox2()
1714 if (!minfo->mmio.vbase.vaddr) { in initMatrox2()
1718 minfo->mmio.base = ctrlptr_phys; in initMatrox2()
1719 minfo->mmio.len = 16384; in initMatrox2()
1720 minfo->video.base = video_base_phys; in initMatrox2()
1721 minfo->video.vbase.vaddr = ioremap_wc(video_base_phys, memsize); in initMatrox2()
1722 if (!minfo->video.vbase.vaddr) { in initMatrox2()
1731 pci_read_config_dword(minfo->pcidev, PCI_OPTION_REG, &mga_option); in initMatrox2()
1732 pci_read_config_dword(minfo->pcidev, PCI_COMMAND, &cmd); in initMatrox2()
1738 if (!(mga_option & 0x20000000) && !minfo->devflags.nopciretry) { in initMatrox2()
1742 minfo->devflags.nopciretry = 1; in initMatrox2()
1744 pci_write_config_dword(minfo->pcidev, PCI_COMMAND, cmd); in initMatrox2()
1745 pci_write_config_dword(minfo->pcidev, PCI_OPTION_REG, mga_option); in initMatrox2()
1746 minfo->hw.MXoptionReg = mga_option; in initMatrox2()
1750 pci_write_config_dword(minfo->pcidev, PCI_MGA_INDEX, 0x00003C00); in initMatrox2()
1754 matroxfb_read_pins(minfo); in initMatrox2()
1755 if (minfo->hw_switch->preinit(minfo)) { in initMatrox2()
1760 if (!matroxfb_getmemory(minfo, memsize, &minfo->video.len) || !minfo->video.len) { in initMatrox2()
1764 minfo->devflags.ydstorg = 0; in initMatrox2()
1766 minfo->video.base = video_base_phys; in initMatrox2()
1767 minfo->video.len_usable = minfo->video.len; in initMatrox2()
1768 if (minfo->video.len_usable > b->base->maxdisplayable) in initMatrox2()
1769 minfo->video.len_usable = b->base->maxdisplayable; in initMatrox2()
1771 minfo->wc_cookie = arch_phys_wc_add(video_base_phys, in initMatrox2()
1772 minfo->video.len); in initMatrox2()
1774 if (!minfo->devflags.novga) in initMatrox2()
1776 matroxfb_g450_connect(minfo); in initMatrox2()
1777 minfo->hw_switch->reset(minfo); in initMatrox2()
1779 minfo->fbcon.monspecs.hfmin = 0; in initMatrox2()
1780 minfo->fbcon.monspecs.hfmax = fh; in initMatrox2()
1781 minfo->fbcon.monspecs.vfmin = 0; in initMatrox2()
1782 minfo->fbcon.monspecs.vfmax = fv; in initMatrox2()
1783 minfo->fbcon.monspecs.dpms = 0; /* TBD */ in initMatrox2()
1795 minfo->fbops = matroxfb_ops; in initMatrox2()
1796 minfo->fbcon.fbops = &minfo->fbops; in initMatrox2()
1797 minfo->fbcon.pseudo_palette = minfo->cmap; in initMatrox2()
1798 minfo->fbcon.flags = FBINFO_PARTIAL_PAN_OK | /* Prefer panning for scroll under MC viewer/edit */ in initMatrox2()
1805 minfo->video.len_usable &= PAGE_MASK; in initMatrox2()
1806 fb_alloc_cmap(&minfo->fbcon.cmap, 256, 1); in initMatrox2()
1811 fb_find_mode(&vesafb_defined, &minfo->fbcon, videomode[0] ? videomode : NULL, in initMatrox2()
1901 matroxfb_init_fix(minfo); in initMatrox2()
1902 minfo->fbcon.screen_base = vaddr_va(minfo->video.vbase); in initMatrox2()
1904 matroxfb_check_var(&vesafb_defined, &minfo->fbcon); in initMatrox2()
1909 minfo->fbcon.var = vesafb_defined; in initMatrox2()
1916 minfo->video.base, vaddr_va(minfo->video.vbase), minfo->video.len); in initMatrox2()
1921 minfo->fbcon.device = &minfo->pcidev->dev; in initMatrox2()
1922 if (register_framebuffer(&minfo->fbcon) < 0) { in initMatrox2()
1925 fb_info(&minfo->fbcon, "%s frame buffer device\n", minfo->fbcon.fix.id); in initMatrox2()
1929 if (!minfo->initialized) { in initMatrox2()
1930 fb_info(&minfo->fbcon, "initializing hardware\n"); in initMatrox2()
1934 fb_set_var(&minfo->fbcon, &vesafb_defined); in initMatrox2()
1939 matroxfb_g450_shutdown(minfo); in initMatrox2()
1940 iounmap(minfo->video.vbase.vaddr); in initMatrox2()
1942 iounmap(minfo->mmio.vbase.vaddr); in initMatrox2()
1944 release_mem_region(video_base_phys, minfo->video.len_maximum); in initMatrox2()
1957 struct matrox_fb_info* minfo; in matroxfb_register_driver() local
1960 for (minfo = matroxfb_l(matroxfb_list.next); in matroxfb_register_driver()
1961 minfo != matroxfb_l(&matroxfb_list); in matroxfb_register_driver()
1962 minfo = matroxfb_l(minfo->next_fb.next)) { in matroxfb_register_driver()
1965 if (minfo->drivers_count == MATROXFB_MAX_FB_DRIVERS) in matroxfb_register_driver()
1967 p = drv->probe(minfo); in matroxfb_register_driver()
1969 minfo->drivers_data[minfo->drivers_count] = p; in matroxfb_register_driver()
1970 minfo->drivers[minfo->drivers_count++] = drv; in matroxfb_register_driver()
1977 struct matrox_fb_info* minfo; in matroxfb_unregister_driver() local
1980 for (minfo = matroxfb_l(matroxfb_list.next); in matroxfb_unregister_driver()
1981 minfo != matroxfb_l(&matroxfb_list); in matroxfb_unregister_driver()
1982 minfo = matroxfb_l(minfo->next_fb.next)) { in matroxfb_unregister_driver()
1985 for (i = 0; i < minfo->drivers_count; ) { in matroxfb_unregister_driver()
1986 if (minfo->drivers[i] == drv) { in matroxfb_unregister_driver()
1988 drv->remove(minfo, minfo->drivers_data[i]); in matroxfb_unregister_driver()
1989 minfo->drivers[i] = minfo->drivers[--minfo->drivers_count]; in matroxfb_unregister_driver()
1990 minfo->drivers_data[i] = minfo->drivers_data[minfo->drivers_count]; in matroxfb_unregister_driver()
1997 static void matroxfb_register_device(struct matrox_fb_info* minfo) { in matroxfb_register_device() argument
2000 list_add(&minfo->next_fb, &matroxfb_list); in matroxfb_register_device()
2005 void *p = drv->probe(minfo); in matroxfb_register_device()
2007 minfo->drivers_data[i] = p; in matroxfb_register_device()
2008 minfo->drivers[i++] = drv; in matroxfb_register_device()
2014 minfo->drivers_count = i; in matroxfb_register_device()
2017 static void matroxfb_unregister_device(struct matrox_fb_info* minfo) { in matroxfb_unregister_device() argument
2020 list_del(&minfo->next_fb); in matroxfb_unregister_device()
2021 for (i = 0; i < minfo->drivers_count; i++) { in matroxfb_unregister_device()
2022 struct matroxfb_driver* drv = minfo->drivers[i]; in matroxfb_unregister_device()
2025 drv->remove(minfo, minfo->drivers_data[i]); in matroxfb_unregister_device()
2033 struct matrox_fb_info* minfo; in matroxfb_probe() local
2059 minfo = kzalloc(sizeof(*minfo), GFP_KERNEL); in matroxfb_probe()
2060 if (!minfo) in matroxfb_probe()
2063 minfo->pcidev = pdev; in matroxfb_probe()
2064 minfo->dead = 0; in matroxfb_probe()
2065 minfo->usecount = 0; in matroxfb_probe()
2066 minfo->userusecount = 0; in matroxfb_probe()
2068 pci_set_drvdata(pdev, minfo); in matroxfb_probe()
2070 minfo->devflags.memtype = memtype; in matroxfb_probe()
2074 minfo->devflags.novga = novga; in matroxfb_probe()
2075 minfo->devflags.nobios = nobios; in matroxfb_probe()
2076 minfo->devflags.noinit = noinit; in matroxfb_probe()
2082 minfo->devflags.novga = 1; in matroxfb_probe()
2083 minfo->devflags.nobios = 1; in matroxfb_probe()
2084 minfo->devflags.noinit = 0; in matroxfb_probe()
2087 minfo->devflags.nopciretry = no_pci_retry; in matroxfb_probe()
2088 minfo->devflags.mga_24bpp_fix = inv24; in matroxfb_probe()
2089 minfo->devflags.precise_width = option_precise_width; in matroxfb_probe()
2090 minfo->devflags.sgram = sgram; in matroxfb_probe()
2091 minfo->capable.cross4MB = cross4MB; in matroxfb_probe()
2093 spin_lock_init(&minfo->lock.DAC); in matroxfb_probe()
2094 spin_lock_init(&minfo->lock.accel); in matroxfb_probe()
2095 init_rwsem(&minfo->crtc2.lock); in matroxfb_probe()
2096 init_rwsem(&minfo->altout.lock); in matroxfb_probe()
2097 mutex_init(&minfo->fbcon.mm_lock); in matroxfb_probe()
2098 minfo->irq_flags = 0; in matroxfb_probe()
2099 init_waitqueue_head(&minfo->crtc1.vsync.wait); in matroxfb_probe()
2100 init_waitqueue_head(&minfo->crtc2.vsync.wait); in matroxfb_probe()
2101 minfo->crtc1.panpos = -1; in matroxfb_probe()
2103 err = initMatrox2(minfo, b); in matroxfb_probe()
2105 matroxfb_register_device(minfo); in matroxfb_probe()
2108 kfree(minfo); in matroxfb_probe()
2113 struct matrox_fb_info* minfo; in pci_remove_matrox() local
2115 minfo = pci_get_drvdata(pdev); in pci_remove_matrox()
2116 matroxfb_remove(minfo, 1); in pci_remove_matrox()