• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/video/matrox/

Lines Matching refs:minfo

126 static void matroxfb_unregister_device(struct matrox_fb_info* minfo);
158 static void update_crtc2(struct matrox_fb_info *minfo, unsigned int pos)
160 struct matroxfb_dh_fb_info *info = minfo->crtc2.info;
163 if (info && (info->fbcon.var.bits_per_pixel == minfo->fbcon.var.bits_per_pixel)
164 && (info->fbcon.var.xres_virtual == minfo->fbcon.var.xres_virtual)
165 && (info->fbcon.var.green.length == minfo->fbcon.var.green.length)
167 switch (minfo->fbcon.var.bits_per_pixel) {
173 mga_outl(0x3C28, pos + minfo->fbcon.var.xres_virtual * minfo->fbcon.var.bits_per_pixel / 8);
182 static void matroxfb_crtc1_panpos(struct matrox_fb_info *minfo)
184 if (minfo->crtc1.panpos >= 0) {
189 panpos = minfo->crtc1.panpos;
193 minfo->crtc1.panpos = -1; /* No update pending anymore */
208 struct matrox_fb_info *minfo = dev_id;
214 minfo->crtc1.vsync.cnt++;
215 matroxfb_crtc1_panpos(minfo);
216 wake_up_interruptible(&minfo->crtc1.vsync.wait);
221 minfo->crtc2.vsync.cnt++;
222 wake_up_interruptible(&minfo->crtc2.vsync.wait);
228 int matroxfb_enable_irq(struct matrox_fb_info *minfo, int reenable)
232 if (minfo->devflags.accelerator == FB_ACCEL_MATROX_MGAG400)
237 if (!test_and_set_bit(0, &minfo->irq_flags)) {
238 if (request_irq(minfo->pcidev->irq, matrox_irq,
239 IRQF_SHARED, "matroxfb", minfo)) {
240 clear_bit(0, &minfo->irq_flags);
258 static void matroxfb_disable_irq(struct matrox_fb_info *minfo)
260 if (test_and_clear_bit(0, &minfo->irq_flags)) {
262 matroxfb_crtc1_panpos(minfo);
263 if (minfo->devflags.accelerator == FB_ACCEL_MATROX_MGAG400)
267 free_irq(minfo->pcidev->irq, minfo);
271 int matroxfb_wait_for_sync(struct matrox_fb_info *minfo, u_int32_t crtc)
279 vs = &minfo->crtc1.vsync;
282 if (minfo->devflags.accelerator != FB_ACCEL_MATROX_MGAG400) {
285 vs = &minfo->crtc2.vsync;
290 ret = matroxfb_enable_irq(minfo, 0);
301 matroxfb_enable_irq(minfo, 1);
309 static void matrox_pan_var(struct matrox_fb_info *minfo,
322 if (minfo->dead)
325 minfo->fbcon.var.xoffset = var->xoffset;
326 minfo->fbcon.var.yoffset = var->yoffset;
327 pos = (minfo->fbcon.var.yoffset * minfo->fbcon.var.xres_virtual + minfo->fbcon.var.xoffset) * minfo->curr.final_bppShift / 32;
328 pos += minfo->curr.ydstorg.chunks;
329 p0 = minfo->hw.CRTC[0x0D] = pos & 0xFF;
330 p1 = minfo->hw.CRTC[0x0C] = (pos & 0xFF00) >> 8;
331 p2 = minfo->hw.CRTCEXT[0] = (minfo->hw.CRTCEXT[0] & 0xB0) | ((pos >> 16) & 0x0F) | ((pos >> 14) & 0x40);
332 p3 = minfo->hw.CRTCEXT[8] = pos >> 21;
335 vbl = (var->activate & FB_ACTIVATE_VBL) && (matroxfb_enable_irq(minfo, 0) == 0);
342 if (minfo->devflags.support32MB)
345 minfo->crtc1.panpos = p2;
348 minfo->crtc1.panpos = -1;
353 update_crtc2(minfo, pos);
358 static void matroxfb_remove(struct matrox_fb_info *minfo, int dummy)
368 minfo->dead = 1;
369 if (minfo->usecount) {
373 matroxfb_unregister_device(minfo);
374 unregister_framebuffer(&minfo->fbcon);
375 matroxfb_g450_shutdown(minfo);
377 if (minfo->mtrr.vram_valid)
378 mtrr_del(minfo->mtrr.vram, minfo->video.base, minfo->video.len);
380 mga_iounmap(minfo->mmio.vbase);
381 mga_iounmap(minfo->video.vbase);
382 release_mem_region(minfo->video.base, minfo->video.len_maximum);
383 release_mem_region(minfo->mmio.base, 16384);
384 kfree(minfo);
393 struct matrox_fb_info *minfo = info2minfo(info);
397 if (minfo->dead) {
400 minfo->usecount++;
402 minfo->userusecount++;
409 struct matrox_fb_info *minfo = info2minfo(info);
414 if (0 == --minfo->userusecount) {
415 matroxfb_disable_irq(minfo);
418 if (!(--minfo->usecount) && minfo->dead) {
419 matroxfb_remove(minfo, 0);
426 struct matrox_fb_info *minfo = info2minfo(info);
430 matrox_pan_var(minfo, var);
434 static int matroxfb_get_final_bppShift(const struct matrox_fb_info *minfo,
445 if (isInterleave(minfo))
447 if (minfo->devflags.video64bits)
452 static int matroxfb_test_and_set_rounding(const struct matrox_fb_info *minfo,
472 if (minfo->devflags.accelerator == FB_ACCEL_MATROX_MGAG400)
476 if (isInterleave(minfo)) {
485 static int matroxfb_pitch_adjust(const struct matrox_fb_info *minfo, int xres,
495 width = minfo->capable.vxres;
497 if (minfo->devflags.precise_width) {
499 if ((*width >= xres) && (matroxfb_test_and_set_rounding(minfo, *width, bpp) == *width)) {
506 xres_new = matroxfb_test_and_set_rounding(minfo, xres, bpp);
533 static int matroxfb_decode_var(const struct matrox_fb_info *minfo,
563 case 4: if (!minfo->capable.cfb4) return -EINVAL;
572 vramlen = minfo->video.len_usable;
578 var->xres_virtual = matroxfb_pitch_adjust(minfo, var->xres_virtual, bpp);
586 if (!minfo->capable.cross4MB && (memlen > 0x400000)) {
655 struct matrox_fb_info* minfo = container_of(fb_info, struct matrox_fb_info, fbcon);
666 if (regno >= minfo->curr.cmap_len)
669 if (minfo->fbcon.var.grayscale) {
674 red = CNVT_TOHW(red, minfo->fbcon.var.red.length);
675 green = CNVT_TOHW(green, minfo->fbcon.var.green.length);
676 blue = CNVT_TOHW(blue, minfo->fbcon.var.blue.length);
677 transp = CNVT_TOHW(transp, minfo->fbcon.var.transp.length);
679 switch (minfo->fbcon.var.bits_per_pixel) {
692 (red << minfo->fbcon.var.red.offset) |
693 (green << minfo->fbcon.var.green.offset) |
694 (blue << minfo->fbcon.var.blue.offset) |
695 (transp << minfo->fbcon.var.transp.offset); /* for 1:5:5:5 */
696 minfo->cmap[regno] = col | (col << 16);
703 minfo->cmap[regno] =
704 (red << minfo->fbcon.var.red.offset) |
705 (green << minfo->fbcon.var.green.offset) |
706 (blue << minfo->fbcon.var.blue.offset) |
707 (transp << minfo->fbcon.var.transp.offset); /* 8:8:8:8 */
713 static void matroxfb_init_fix(struct matrox_fb_info *minfo)
715 struct fb_fix_screeninfo *fix = &minfo->fbcon.fix;
723 fix->mmio_start = minfo->mmio.base;
724 fix->mmio_len = minfo->mmio.len;
725 fix->accel = minfo->devflags.accelerator;
728 static void matroxfb_update_fix(struct matrox_fb_info *minfo)
730 struct fb_fix_screeninfo *fix = &minfo->fbcon.fix;
733 mutex_lock(&minfo->fbcon.mm_lock);
734 fix->smem_start = minfo->video.base + minfo->curr.ydstorg.bytes;
735 fix->smem_len = minfo->video.len_usable - minfo->curr.ydstorg.bytes;
736 mutex_unlock(&minfo->fbcon.mm_lock);
745 struct matrox_fb_info *minfo = info2minfo(info);
747 if (minfo->dead) {
750 if ((err = matroxfb_decode_var(minfo, var, &visual, &cmap_len, &ydstorg)) != 0)
762 struct matrox_fb_info *minfo = info2minfo(info);
766 if (minfo->dead) {
771 if ((err = matroxfb_decode_var(minfo, var, &visual, &cmap_len, &ydstorg)) != 0)
773 minfo->fbcon.screen_base = vaddr_va(minfo->video.vbase) + ydstorg;
774 matroxfb_update_fix(minfo);
775 minfo->fbcon.fix.visual = visual;
776 minfo->fbcon.fix.type = FB_TYPE_PACKED_PIXELS;
777 minfo->fbcon.fix.type_aux = 0;
778 minfo->fbcon.fix.line_length = (var->xres_virtual * var->bits_per_pixel) >> 3;
782 minfo->curr.cmap_len = cmap_len;
783 ydstorg += minfo->devflags.ydstorg;
784 minfo->curr.ydstorg.bytes = ydstorg;
785 minfo->curr.ydstorg.chunks = ydstorg >> (isInterleave(minfo) ? 3 : 2);
787 minfo->curr.ydstorg.pixels = ydstorg;
789 minfo->curr.ydstorg.pixels = (ydstorg * 8) / var->bits_per_pixel;
790 minfo->curr.final_bppShift = matroxfb_get_final_bppShift(minfo, var->bits_per_pixel);
806 hw = &minfo->hw;
808 down_read(&minfo->altout.lock);
810 if (minfo->outputs[out].src == MATROXFB_SRC_CRTC1 &&
811 minfo->outputs[out].output->compute) {
812 minfo->outputs[out].output->compute(minfo->outputs[out].data, &mt);
815 up_read(&minfo->altout.lock);
816 minfo->crtc1.pixclock = mt.pixclock;
817 minfo->crtc1.mnp = mt.mnp;
818 minfo->hw_switch->init(minfo, &mt);
819 pos = (var->yoffset * var->xres_virtual + var->xoffset) * minfo->curr.final_bppShift / 32;
820 pos += minfo->curr.ydstorg.chunks;
826 minfo->hw_switch->restore(minfo);
827 update_crtc2(minfo, pos);
828 down_read(&minfo->altout.lock);
830 if (minfo->outputs[out].src == MATROXFB_SRC_CRTC1 &&
831 minfo->outputs[out].output->program) {
832 minfo->outputs[out].output->program(minfo->outputs[out].data);
836 if (minfo->outputs[out].src == MATROXFB_SRC_CRTC1 &&
837 minfo->outputs[out].output->start) {
838 minfo->outputs[out].output->start(minfo->outputs[out].data);
841 up_read(&minfo->altout.lock);
842 matrox_cfbX_init(minfo);
845 minfo->initialized = 1;
849 static int matroxfb_get_vblank(struct matrox_fb_info *minfo,
854 matroxfb_enable_irq(minfo, 0);
867 if (vblank->vcount >= minfo->fbcon.var.yres)
869 if (test_bit(0, &minfo->irq_flags)) {
873 vblank->count = minfo->crtc1.vsync.cnt;
886 struct matrox_fb_info *minfo = info2minfo(info);
890 if (minfo->dead) {
900 err = matroxfb_get_vblank(minfo, &vblank);
914 return matroxfb_wait_for_sync(minfo, crt);
926 down_read(&minfo->altout.lock);
927 oproc = minfo->outputs[mom.output].output;
937 val = oproc->verifymode(minfo->outputs[mom.output].data, mom.mode);
940 if (minfo->outputs[mom.output].mode != mom.mode) {
941 minfo->outputs[mom.output].mode = mom.mode;
945 up_read(&minfo->altout.lock);
948 switch (minfo->outputs[mom.output].src) {
956 down_read(&minfo->crtc2.lock);
957 crtc2 = minfo->crtc2.info;
960 up_read(&minfo->crtc2.lock);
976 down_read(&minfo->altout.lock);
977 oproc = minfo->outputs[mom.output].output;
981 mom.mode = minfo->outputs[mom.output].mode;
984 up_read(&minfo->altout.lock);
1003 if (!minfo->outputs[i].output)
1005 switch (minfo->outputs[i].src) {
1014 if (minfo->devflags.panellink) {
1019 if (minfo->outputs[i].src == MATROXFB_SRC_CRTC2) {
1028 if (minfo->outputs[i].src != MATROXFB_SRC_CRTC1) {
1030 minfo->outputs[i].src = MATROXFB_SRC_CRTC1;
1032 } else if (minfo->outputs[i].src == MATROXFB_SRC_CRTC1) {
1034 minfo->outputs[i].src = MATROXFB_SRC_NONE;
1048 if (minfo->outputs[i].src == MATROXFB_SRC_CRTC1) {
1062 if (minfo->outputs[i].output) {
1063 switch (minfo->outputs[i].src) {
1071 if (minfo->devflags.panellink) {
1087 if (minfo->outputs[i].output) {
1102 sprintf(r.bus_info, "PCI:%s", pci_name(minfo->pcidev));
1118 down_read(&minfo->altout.lock);
1119 if (!minfo->outputs[1].output) {
1121 } else if (minfo->outputs[1].output->getqueryctrl) {
1122 err = minfo->outputs[1].output->getqueryctrl(minfo->outputs[1].data, &qctrl);
1126 up_read(&minfo->altout.lock);
1140 down_read(&minfo->altout.lock);
1141 if (!minfo->outputs[1].output) {
1143 } else if (minfo->outputs[1].output->getctrl) {
1144 err = minfo->outputs[1].output->getctrl(minfo->outputs[1].data, &ctrl);
1148 up_read(&minfo->altout.lock);
1163 down_read(&minfo->altout.lock);
1164 if (!minfo->outputs[1].output) {
1166 } else if (minfo->outputs[1].output->setctrl) {
1167 err = minfo->outputs[1].output->setctrl(minfo->outputs[1].data, &ctrl);
1171 up_read(&minfo->altout.lock);
1185 struct matrox_fb_info *minfo = info2minfo(info);
1189 if (minfo->dead)
1291 static int matroxfb_getmemory(struct matrox_fb_info *minfo,
1303 vm = minfo->video.vbase;
1335 minfo->interleave = !(!isMillenium(minfo) || ((offs - 0x100000) & 0x3FFFFF));
1566 static void setDefaultOutputs(struct matrox_fb_info *minfo)
1571 minfo->outputs[0].default_src = MATROXFB_SRC_CRTC1;
1572 if (minfo->devflags.g450dac) {
1573 minfo->outputs[1].default_src = MATROXFB_SRC_CRTC1;
1574 minfo->outputs[2].default_src = MATROXFB_SRC_CRTC1;
1576 minfo->outputs[2].default_src = MATROXFB_SRC_CRTC1;
1586 minfo->outputs[i].default_src = MATROXFB_SRC_NONE;
1588 minfo->outputs[i].default_src = MATROXFB_SRC_CRTC1;
1589 } else if (c == '2' && minfo->devflags.crtc2) {
1590 minfo->outputs[i].default_src = MATROXFB_SRC_CRTC2;
1600 static int initMatrox2(struct matrox_fb_info *minfo, struct board *b)
1617 minfo->hw_switch = b->base->lowlevel;
1618 minfo->devflags.accelerator = b->base->accelID;
1619 minfo->max_pixel_clock = b->maxclk;
1622 minfo->capable.plnwt = 1;
1623 minfo->chip = b->chip;
1624 minfo->capable.srcorg = b->flags & DEVF_SRCORG;
1625 minfo->devflags.video64bits = b->flags & DEVF_VIDEO64BIT;
1627 minfo->devflags.vgastep = 4;
1628 minfo->devflags.textmode = 4;
1629 minfo->devflags.text_type_aux = FB_AUX_TEXT_MGA_STEP16;
1631 minfo->devflags.vgastep = 16;
1632 minfo->devflags.textmode = 1;
1633 minfo->devflags.text_type_aux = FB_AUX_TEXT_MGA_STEP16;
1635 minfo->devflags.vgastep = 8;
1636 minfo->devflags.textmode = 1;
1637 minfo->devflags.text_type_aux = FB_AUX_TEXT_MGA_STEP8;
1639 minfo->devflags.support32MB = (b->flags & DEVF_SUPPORT32MB) != 0;
1640 minfo->devflags.precise_width = !(b->flags & DEVF_ANY_VXRES);
1641 minfo->devflags.crtc2 = (b->flags & DEVF_CRTC2) != 0;
1642 minfo->devflags.maven_capable = (b->flags & DEVF_MAVEN_CAPABLE) != 0;
1643 minfo->devflags.dualhead = (b->flags & DEVF_DUALHEAD) != 0;
1644 minfo->devflags.dfp_type = dfp_type;
1645 minfo->devflags.g450dac = (b->flags & DEVF_G450DAC) != 0;
1646 minfo->devflags.textstep = minfo->devflags.vgastep * minfo->devflags.textmode;
1647 minfo->devflags.textvram = 65536 / minfo->devflags.textmode;
1648 setDefaultOutputs(minfo);
1650 minfo->outputs[2].data = minfo;
1651 minfo->outputs[2].output = &panellink_output;
1652 minfo->outputs[2].src = minfo->outputs[2].default_src;
1653 minfo->outputs[2].mode = MATROXFB_OUTPUT_MODE_MONITOR;
1654 minfo->devflags.panellink = 1;
1657 if (minfo->capable.cross4MB < 0)
1658 minfo->capable.cross4MB = b->flags & DEVF_CROSS4MB;
1660 ctrlptr_phys = pci_resource_start(minfo->pcidev, 1);
1661 video_base_phys = pci_resource_start(minfo->pcidev, 0);
1662 minfo->devflags.fbResource = PCI_BASE_ADDRESS_0;
1664 ctrlptr_phys = pci_resource_start(minfo->pcidev, 0);
1665 video_base_phys = pci_resource_start(minfo->pcidev, 1);
1666 minfo->devflags.fbResource = PCI_BASE_ADDRESS_1;
1684 minfo->video.len_maximum = memsize;
1692 if (mga_ioremap(ctrlptr_phys, 16384, MGA_IOREMAP_MMIO, &minfo->mmio.vbase)) {
1696 minfo->mmio.base = ctrlptr_phys;
1697 minfo->mmio.len = 16384;
1698 minfo->video.base = video_base_phys;
1699 if (mga_ioremap(video_base_phys, memsize, MGA_IOREMAP_FB, &minfo->video.vbase)) {
1708 pci_read_config_dword(minfo->pcidev, PCI_OPTION_REG, &mga_option);
1709 pci_read_config_dword(minfo->pcidev, PCI_COMMAND, &cmd);
1715 if (!(mga_option & 0x20000000) && !minfo->devflags.nopciretry) {
1719 minfo->devflags.nopciretry = 1;
1721 pci_write_config_dword(minfo->pcidev, PCI_COMMAND, cmd);
1722 pci_write_config_dword(minfo->pcidev, PCI_OPTION_REG, mga_option);
1723 minfo->hw.MXoptionReg = mga_option;
1727 pci_write_config_dword(minfo->pcidev, PCI_MGA_INDEX, 0x00003C00);
1731 matroxfb_read_pins(minfo);
1732 if (minfo->hw_switch->preinit(minfo)) {
1737 if (!matroxfb_getmemory(minfo, memsize, &minfo->video.len) || !minfo->video.len) {
1741 minfo->devflags.ydstorg = 0;
1743 minfo->video.base = video_base_phys;
1744 minfo->video.len_usable = minfo->video.len;
1745 if (minfo->video.len_usable > b->base->maxdisplayable)
1746 minfo->video.len_usable = b->base->maxdisplayable;
1749 minfo->mtrr.vram = mtrr_add(video_base_phys, minfo->video.len, MTRR_TYPE_WRCOMB, 1);
1750 minfo->mtrr.vram_valid = 1;
1755 if (!minfo->devflags.novga)
1757 matroxfb_g450_connect(minfo);
1758 minfo->hw_switch->reset(minfo);
1760 minfo->fbcon.monspecs.hfmin = 0;
1761 minfo->fbcon.monspecs.hfmax = fh;
1762 minfo->fbcon.monspecs.vfmin = 0;
1763 minfo->fbcon.monspecs.vfmax = fv;
1764 minfo->fbcon.monspecs.dpms = 0; /* TBD */
1776 minfo->fbops = matroxfb_ops;
1777 minfo->fbcon.fbops = &minfo->fbops;
1778 minfo->fbcon.pseudo_palette = minfo->cmap;
1780 minfo->fbcon.flags = hotplug ? FBINFO_FLAG_MODULE : FBINFO_FLAG_DEFAULT;
1781 minfo->fbcon.flags |= FBINFO_PARTIAL_PAN_OK | /* Prefer panning for scroll under MC viewer/edit */
1787 minfo->video.len_usable &= PAGE_MASK;
1788 fb_alloc_cmap(&minfo->fbcon.cmap, 256, 1);
1793 fb_find_mode(&vesafb_defined, &minfo->fbcon, videomode[0] ? videomode : NULL,
1881 matroxfb_init_fix(minfo);
1882 minfo->fbcon.screen_base = vaddr_va(minfo->video.vbase);
1884 matroxfb_check_var(&vesafb_defined, &minfo->fbcon);
1889 minfo->fbcon.var = vesafb_defined;
1896 minfo->video.base, vaddr_va(minfo->video.vbase), minfo->video.len);
1901 minfo->fbcon.device = &minfo->pcidev->dev;
1902 if (register_framebuffer(&minfo->fbcon) < 0) {
1906 minfo->fbcon.node, minfo->fbcon.fix.id);
1910 if (!minfo->initialized) {
1912 minfo->fbcon.node);
1916 fb_set_var(&minfo->fbcon, &vesafb_defined);
1921 matroxfb_g450_shutdown(minfo);
1922 mga_iounmap(minfo->video.vbase);
1924 mga_iounmap(minfo->mmio.vbase);
1926 release_mem_region(video_base_phys, minfo->video.len_maximum);
1939 struct matrox_fb_info* minfo;
1942 for (minfo = matroxfb_l(matroxfb_list.next);
1943 minfo != matroxfb_l(&matroxfb_list);
1944 minfo = matroxfb_l(minfo->next_fb.next)) {
1947 if (minfo->drivers_count == MATROXFB_MAX_FB_DRIVERS)
1949 p = drv->probe(minfo);
1951 minfo->drivers_data[minfo->drivers_count] = p;
1952 minfo->drivers[minfo->drivers_count++] = drv;
1959 struct matrox_fb_info* minfo;
1962 for (minfo = matroxfb_l(matroxfb_list.next);
1963 minfo != matroxfb_l(&matroxfb_list);
1964 minfo = matroxfb_l(minfo->next_fb.next)) {
1967 for (i = 0; i < minfo->drivers_count; ) {
1968 if (minfo->drivers[i] == drv) {
1970 drv->remove(minfo, minfo->drivers_data[i]);
1971 minfo->drivers[i] = minfo->drivers[--minfo->drivers_count];
1972 minfo->drivers_data[i] = minfo->drivers_data[minfo->drivers_count];
1979 static void matroxfb_register_device(struct matrox_fb_info* minfo) {
1982 list_add(&minfo->next_fb, &matroxfb_list);
1987 void *p = drv->probe(minfo);
1989 minfo->drivers_data[i] = p;
1990 minfo->drivers[i++] = drv;
1996 minfo->drivers_count = i;
1999 static void matroxfb_unregister_device(struct matrox_fb_info* minfo) {
2002 list_del(&minfo->next_fb);
2003 for (i = 0; i < minfo->drivers_count; i++) {
2004 struct matroxfb_driver* drv = minfo->drivers[i];
2007 drv->remove(minfo, minfo->drivers_data[i]);
2015 struct matrox_fb_info* minfo;
2041 minfo = kmalloc(sizeof(*minfo), GFP_KERNEL);
2042 if (!minfo)
2044 memset(minfo, 0, sizeof(*minfo));
2046 minfo->pcidev = pdev;
2047 minfo->dead = 0;
2048 minfo->usecount = 0;
2049 minfo->userusecount = 0;
2051 pci_set_drvdata(pdev, minfo);
2053 minfo->devflags.memtype = memtype;
2057 minfo->devflags.novga = novga;
2058 minfo->devflags.nobios = nobios;
2059 minfo->devflags.noinit = noinit;
2065 minfo->devflags.novga = 1;
2066 minfo->devflags.nobios = 1;
2067 minfo->devflags.noinit = 0;
2070 minfo->devflags.nopciretry = no_pci_retry;
2071 minfo->devflags.mga_24bpp_fix = inv24;
2072 minfo->devflags.precise_width = option_precise_width;
2073 minfo->devflags.sgram = sgram;
2074 minfo->capable.cross4MB = cross4MB;
2076 spin_lock_init(&minfo->lock.DAC);
2077 spin_lock_init(&minfo->lock.accel);
2078 init_rwsem(&minfo->crtc2.lock);
2079 init_rwsem(&minfo->altout.lock);
2080 mutex_init(&minfo->fbcon.mm_lock);
2081 minfo->irq_flags = 0;
2082 init_waitqueue_head(&minfo->crtc1.vsync.wait);
2083 init_waitqueue_head(&minfo->crtc2.vsync.wait);
2084 minfo->crtc1.panpos = -1;
2086 err = initMatrox2(minfo, b);
2088 matroxfb_register_device(minfo);
2091 kfree(minfo);
2096 struct matrox_fb_info* minfo;
2098 minfo = pci_get_drvdata(pdev);
2099 matroxfb_remove(minfo, 1);