• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/video/intelfb/

Lines Matching refs:dinfo

50 static void __devinit get_initial_mode(struct intelfb_info *dinfo);
51 static void update_dinfo(struct intelfb_info *dinfo,
83 static int __devinit intelfb_set_fbinfo(struct intelfb_info *dinfo);
333 static inline void __devinit set_mtrr(struct intelfb_info *dinfo)
335 dinfo->mtrr_reg = mtrr_add(dinfo->aperture.physical,
336 dinfo->aperture.size, MTRR_TYPE_WRCOMB, 1);
337 if (dinfo->mtrr_reg < 0) {
341 dinfo->has_mtrr = 1;
343 static inline void unset_mtrr(struct intelfb_info *dinfo)
345 if (dinfo->has_mtrr)
346 mtrr_del(dinfo->mtrr_reg, dinfo->aperture.physical,
347 dinfo->aperture.size);
360 cleanup(struct intelfb_info *dinfo)
364 if (!dinfo)
367 intelfbhw_disable_irq(dinfo);
369 fb_dealloc_cmap(&dinfo->info->cmap);
370 kfree(dinfo->info->pixmap.addr);
372 if (dinfo->registered)
373 unregister_framebuffer(dinfo->info);
375 unset_mtrr(dinfo);
377 if (dinfo->fbmem_gart && dinfo->gtt_fb_mem) {
378 agp_unbind_memory(dinfo->gtt_fb_mem);
379 agp_free_memory(dinfo->gtt_fb_mem);
381 if (dinfo->gtt_cursor_mem) {
382 agp_unbind_memory(dinfo->gtt_cursor_mem);
383 agp_free_memory(dinfo->gtt_cursor_mem);
385 if (dinfo->gtt_ring_mem) {
386 agp_unbind_memory(dinfo->gtt_ring_mem);
387 agp_free_memory(dinfo->gtt_ring_mem);
392 intelfb_delete_i2c_busses(dinfo);
395 if (dinfo->mmio_base)
396 iounmap((void __iomem *)dinfo->mmio_base);
397 if (dinfo->aperture.virtual)
398 iounmap((void __iomem *)dinfo->aperture.virtual);
400 if (dinfo->flag & INTELFB_MMIO_ACQUIRED)
401 release_mem_region(dinfo->mmio_base_phys, INTEL_REG_SIZE);
402 if (dinfo->flag & INTELFB_FB_ACQUIRED)
403 release_mem_region(dinfo->aperture.physical,
404 dinfo->aperture.size);
405 framebuffer_release(dinfo->info);
408 #define bailout(dinfo) do { \
410 cleanup(dinfo); \
420 struct intelfb_info *dinfo;
451 dinfo = info->par;
452 dinfo->info = info;
453 dinfo->fbops = &intel_fb_ops;
454 dinfo->pdev = pdev;
465 dinfo->fixed_mode = fixed;
470 cleanup(dinfo);
482 dinfo->aperture.physical = pci_resource_start(pdev, aperture_bar);
483 dinfo->aperture.size = pci_resource_len(pdev, aperture_bar);
484 dinfo->mmio_base_phys = pci_resource_start(pdev, mmio_bar);
492 if (!request_mem_region(dinfo->aperture.physical, dinfo->aperture.size,
495 cleanup(dinfo);
499 dinfo->flag |= INTELFB_FB_ACQUIRED;
501 if (!request_mem_region(dinfo->mmio_base_phys,
505 cleanup(dinfo);
509 dinfo->flag |= INTELFB_MMIO_ACQUIRED;
512 dinfo->pci_chipset = pdev->device;
514 if (intelfbhw_get_chipset(pdev, dinfo)) {
515 cleanup(dinfo);
520 cleanup(dinfo);
527 PCI_FUNC(pdev->devfn), dinfo->name,
531 dinfo->accel = accel;
532 dinfo->hwcursor = hwcursor;
534 if (NOACCEL_CHIPSET(dinfo) && dinfo->accel == 1) {
536 dinfo->name);
537 dinfo->accel = 0;
542 dinfo->fb.size = ROUND_UP_TO_PAGE(stolen_size);
543 dinfo->fbmem_gart = 0;
545 dinfo->fb.size = MB(vram);
546 dinfo->fbmem_gart = 1;
550 if (dinfo->accel) {
551 dinfo->ring.size = RINGBUFFER_SIZE;
552 dinfo->ring_tail_mask = dinfo->ring.size - 1;
554 if (dinfo->hwcursor) {
555 dinfo->cursor.size = HW_CURSOR_SIZE;
561 cleanup(dinfo);
569 cleanup(dinfo);
579 if (dinfo->accel) {
580 dinfo->ring.offset = offset + gtt_info.current_memory;
582 if (dinfo->hwcursor) {
583 dinfo->cursor.offset = offset +
584 + gtt_info.current_memory + (dinfo->ring.size >> 12);
586 if (dinfo->fbmem_gart) {
587 dinfo->fb.offset = offset +
588 + gtt_info.current_memory + (dinfo->ring.size >> 12)
589 + (dinfo->cursor.size >> 12);
595 dinfo->aperture.virtual = (u8 __iomem *)ioremap_nocache
596 (dinfo->aperture.physical, ((offset + dinfo->fb.offset) << 12)
597 + dinfo->fb.size);
598 if (!dinfo->aperture.virtual) {
600 cleanup(dinfo);
604 dinfo->mmio_base =
605 (u8 __iomem *)ioremap_nocache(dinfo->mmio_base_phys,
607 if (!dinfo->mmio_base) {
609 cleanup(dinfo);
613 if (dinfo->accel) {
614 if (!(dinfo->gtt_ring_mem =
615 agp_allocate_memory(bridge, dinfo->ring.size >> 12,
619 cleanup(dinfo);
622 if (agp_bind_memory(dinfo->gtt_ring_mem,
623 dinfo->ring.offset)) {
626 cleanup(dinfo);
629 dinfo->ring.physical = dinfo->aperture.physical
630 + (dinfo->ring.offset << 12);
631 dinfo->ring.virtual = dinfo->aperture.virtual
632 + (dinfo->ring.offset << 12);
633 dinfo->ring_head = 0;
635 if (dinfo->hwcursor) {
636 agp_memtype = dinfo->mobile ? AGP_PHYSICAL_MEMORY
638 if (!(dinfo->gtt_cursor_mem =
639 agp_allocate_memory(bridge, dinfo->cursor.size >> 12,
643 cleanup(dinfo);
646 if (agp_bind_memory(dinfo->gtt_cursor_mem,
647 dinfo->cursor.offset)) {
650 cleanup(dinfo);
653 if (dinfo->mobile)
654 dinfo->cursor.physical
655 = dinfo->gtt_cursor_mem->physical;
657 dinfo->cursor.physical = dinfo->aperture.physical
658 + (dinfo->cursor.offset << 12);
659 dinfo->cursor.virtual = dinfo->aperture.virtual
660 + (dinfo->cursor.offset << 12);
662 if (dinfo->fbmem_gart) {
663 if (!(dinfo->gtt_fb_mem =
664 agp_allocate_memory(bridge, dinfo->fb.size >> 12,
668 dinfo->fbmem_gart = 0;
670 if (agp_bind_memory(dinfo->gtt_fb_mem,
671 dinfo->fb.offset)) {
674 dinfo->fbmem_gart = 0;
679 if (!dinfo->fbmem_gart)
680 dinfo->fb.offset = 0; /* starts at offset 0 */
681 dinfo->fb.physical = dinfo->aperture.physical
682 + (dinfo->fb.offset << 12);
683 dinfo->fb.virtual = dinfo->aperture.virtual + (dinfo->fb.offset << 12);
684 dinfo->fb_start = dinfo->fb.offset << 12;
690 set_mtrr(dinfo);
693 dinfo->fb.physical, dinfo->fb.offset, dinfo->fb.size,
694 dinfo->fb.virtual);
696 dinfo->mmio_base_phys, INTEL_REG_SIZE,
697 dinfo->mmio_base);
699 dinfo->ring.physical, dinfo->ring.size,
700 dinfo->ring.virtual);
702 dinfo->cursor.physical, dinfo->cursor.size,
703 dinfo->cursor.virtual, dinfo->cursor.offset,
704 dinfo->cursor.physical);
711 bailout(dinfo);
717 dvo = intelfbhw_check_non_crt(dinfo);
719 dinfo->fixed_mode = 1;
735 bailout(dinfo);
737 if (FIXED_MODE(dinfo) && ORIG_VIDEO_ISVGA != VIDEO_TYPE_VLFB) {
739 cleanup(dinfo);
744 bailout(dinfo);
746 /* Initialise dinfo and related data. */
749 get_initial_mode(dinfo);
752 bailout(dinfo);
754 if (FIXED_MODE(dinfo)) {
756 update_dinfo(dinfo, &dinfo->initial_var);
760 bailout(dinfo);
763 if (intelfb_set_fbinfo(dinfo)) {
764 cleanup(dinfo);
769 bailout(dinfo);
773 intelfb_create_i2c_busses(dinfo);
777 bailout(dinfo);
779 pci_set_drvdata(pdev, dinfo);
782 i = intelfbhw_read_hw_state(dinfo, &dinfo->save_state,
786 bailout(dinfo);
789 intelfbhw_print_hw_state(dinfo, &dinfo->save_state);
792 bailout(dinfo);
795 if (dinfo->hwcursor) {
796 intelfbhw_cursor_init(dinfo);
797 intelfbhw_cursor_reset(dinfo);
801 bailout(dinfo);
804 if (dinfo->accel)
805 intelfbhw_2d_start(dinfo);
808 bailout(dinfo);
811 bailout(dinfo);
813 if (register_framebuffer(dinfo->info) < 0) {
815 cleanup(dinfo);
819 dinfo->registered = 1;
820 dinfo->open = 0;
822 init_waitqueue_head(&dinfo->vsync.wait);
823 spin_lock_init(&dinfo->int_lock);
824 dinfo->irq_flags = 0;
825 dinfo->vsync.pan_display = 0;
826 dinfo->vsync.pan_offset = 0;
840 struct intelfb_info *dinfo = pci_get_drvdata(pdev);
844 if (!dinfo)
847 cleanup(dinfo);
889 get_initial_mode(struct intelfb_info *dinfo)
896 dinfo->initial_vga = 1;
897 dinfo->initial_fb_base = screen_info.lfb_base;
898 dinfo->initial_video_ram = screen_info.lfb_size * KB(64);
899 dinfo->initial_pitch = screen_info.lfb_linelength;
901 var = &dinfo->initial_var;
916 dinfo->initial_fb_base, dinfo->initial_video_ram,
917 BtoKB(dinfo->initial_video_ram));
921 dinfo->initial_pitch);
957 intelfb_init_var(struct intelfb_info *dinfo)
964 var = &dinfo->info->var;
965 if (FIXED_MODE(dinfo)) {
966 memcpy(var, &dinfo->initial_var,
970 const u8 *edid_s = fb_firmware_edid(&dinfo->pdev->dev);
978 &dinfo->info->monspecs);
986 msrc = fb_find_mode(var, dinfo->info, mode,
987 dinfo->info->monspecs.modedb,
988 dinfo->info->monspecs.modedb_len,
995 msrc = fb_find_mode(var, dinfo->info, mode,
1005 msrc = fb_find_mode(var, dinfo->info, PREFERRED_MODE,
1024 dinfo->fb.size / 2 / (var->bits_per_pixel * var->xres);
1031 if (dinfo->accel)
1040 intelfb_set_fbinfo(struct intelfb_info *dinfo)
1042 struct fb_info *info = dinfo->info;
1048 info->pseudo_palette = dinfo->pseudo_palette;
1055 if (intelfb_init_var(dinfo))
1059 strcpy(info->fix.id, dinfo->name);
1060 info->fix.smem_start = dinfo->fb.physical;
1061 info->fix.smem_len = dinfo->fb.size;
1067 info->fix.mmio_start = dinfo->mmio_base_phys;
1070 update_dinfo(dinfo, &info->var);
1075 /* Update dinfo to match the active video mode. */
1077 update_dinfo(struct intelfb_info *dinfo, struct fb_var_screeninfo *var)
1081 dinfo->bpp = var->bits_per_pixel;
1082 dinfo->depth = intelfb_var_to_depth(var);
1083 dinfo->xres = var->xres;
1084 dinfo->yres = var->xres;
1085 dinfo->pixclock = var->pixclock;
1087 dinfo->info->fix.visual = dinfo->visual;
1088 dinfo->info->fix.line_length = dinfo->pitch;
1090 switch (dinfo->bpp) {
1092 dinfo->visual = FB_VISUAL_PSEUDOCOLOR;
1093 dinfo->pitch = var->xres_virtual;
1096 dinfo->visual = FB_VISUAL_TRUECOLOR;
1097 dinfo->pitch = var->xres_virtual * 2;
1100 dinfo->visual = FB_VISUAL_TRUECOLOR;
1101 dinfo->pitch = var->xres_virtual * 4;
1106 if (IS_I9XX(dinfo))
1107 dinfo->pitch = ROUND_UP_TO(dinfo->pitch, STRIDE_ALIGNMENT_I9XX);
1109 dinfo->pitch = ROUND_UP_TO(dinfo->pitch, STRIDE_ALIGNMENT);
1111 if (FIXED_MODE(dinfo))
1112 dinfo->pitch = dinfo->initial_pitch;
1114 dinfo->info->screen_base = (char __iomem *)dinfo->fb.virtual;
1115 dinfo->info->fix.line_length = dinfo->pitch;
1116 dinfo->info->fix.visual = dinfo->visual;
1128 struct intelfb_info *dinfo = GET_DINFO(info);
1131 dinfo->open++;
1140 struct intelfb_info *dinfo = GET_DINFO(info);
1143 dinfo->open--;
1145 if (!dinfo->open) {
1146 intelfbhw_disable_irq(dinfo);
1158 struct intelfb_info *dinfo;
1172 dinfo = GET_DINFO(info);
1175 if (intelfbhw_validate_mode(dinfo, var) != 0)
1209 if (FIXED_MODE(dinfo) &&
1211 var->yres_virtual > dinfo->initial_var.yres_virtual ||
1212 var->yres_virtual < dinfo->initial_var.yres ||
1282 struct intelfb_info *dinfo = GET_DINFO(info);
1284 if (FIXED_MODE(dinfo)) {
1298 if (ACCEL(dinfo, info))
1299 intelfbhw_2d_stop(dinfo);
1301 memcpy(hw, &dinfo->save_state, sizeof(*hw));
1302 if (intelfbhw_mode_to_hw(dinfo, hw, &info->var))
1304 if (intelfbhw_program_mode(dinfo, hw, 0))
1308 intelfbhw_read_hw_state(dinfo, hw, 0);
1309 intelfbhw_print_hw_state(dinfo, hw);
1312 update_dinfo(dinfo, &info->var);
1314 if (ACCEL(dinfo, info))
1315 intelfbhw_2d_start(dinfo);
1321 if (ACCEL(dinfo, info)) {
1339 struct intelfb_info *dinfo = GET_DINFO(info);
1342 DBG_MSG("intelfb_setcolreg: regno %d, depth %d\n", regno, dinfo->depth);
1348 if (dinfo->depth == 8) {
1353 intelfbhw_setcolreg(dinfo, regno, red, green, blue,
1358 switch (dinfo->depth) {
1360 dinfo->pseudo_palette[regno] = ((red & 0xf800) >> 1) |
1365 dinfo->pseudo_palette[regno] = (red & 0xf800) |
1370 dinfo->pseudo_palette[regno] = ((red & 0xff00) << 8) |
1399 struct intelfb_info *dinfo = GET_DINFO(info);
1407 retval = intelfbhw_wait_for_vsync(dinfo, pipe);
1419 struct intelfb_info *dinfo = GET_DINFO(info);
1426 if (!ACCEL(dinfo, info) || dinfo->depth == 4)
1434 if (dinfo->depth != 8)
1435 color = dinfo->pseudo_palette[rect->color];
1439 intelfbhw_do_fillrect(dinfo, rect->dx, rect->dy,
1441 dinfo->pitch, info->var.bits_per_pixel,
1448 struct intelfb_info *dinfo = GET_DINFO(info);
1454 if (!ACCEL(dinfo, info) || dinfo->depth == 4)
1457 intelfbhw_do_bitblt(dinfo, region->sx, region->sy, region->dx,
1459 dinfo->pitch, info->var.bits_per_pixel);
1465 struct intelfb_info *dinfo = GET_DINFO(info);
1472 if (!ACCEL(dinfo, info) || dinfo->depth == 4
1476 if (dinfo->depth != 8) {
1477 fgcolor = dinfo->pseudo_palette[image->fg_color];
1478 bgcolor = dinfo->pseudo_palette[image->bg_color];
1484 if (!intelfbhw_do_drawglyph(dinfo, fgcolor, bgcolor, image->width,
1487 dinfo->pitch, info->var.bits_per_pixel))
1494 struct intelfb_info *dinfo = GET_DINFO(info);
1500 if (!dinfo->hwcursor)
1503 intelfbhw_cursor_hide(dinfo);
1506 physical = (dinfo->mobile || IS_I9XX(dinfo)) ? dinfo->cursor.physical :
1507 (dinfo->cursor.offset << 12);
1517 intelfbhw_cursor_init(dinfo);
1518 intelfbhw_cursor_reset(dinfo);
1519 intelfbhw_cursor_setpos(dinfo, cursor->image.dx,
1522 if (dinfo->depth != 8) {
1523 fg =dinfo->pseudo_palette[cursor->image.fg_color];
1524 bg =dinfo->pseudo_palette[cursor->image.bg_color];
1529 intelfbhw_cursor_setcolor(dinfo, bg, fg);
1530 intelfbhw_cursor_load(dinfo, cursor->image.width,
1532 dinfo->cursor_src);
1535 intelfbhw_cursor_show(dinfo);
1545 intelfbhw_cursor_setpos(dinfo, dx, dy);
1552 intelfbhw_cursor_reset(dinfo);
1558 if (dinfo->depth != 8) {
1559 fg = dinfo->pseudo_palette[cursor->image.fg_color];
1560 bg = dinfo->pseudo_palette[cursor->image.bg_color];
1566 intelfbhw_cursor_setcolor(dinfo, bg, fg);
1594 memcpy(dinfo->cursor_src, src, size);
1596 intelfbhw_cursor_load(dinfo, cursor->image.width,
1601 intelfbhw_cursor_show(dinfo);
1609 struct intelfb_info *dinfo = GET_DINFO(info);
1615 if (dinfo->ring_lockup)
1618 intelfbhw_do_sync(dinfo);