• 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/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);
359 static void cleanup(struct intelfb_info *dinfo)
363 if (!dinfo)
366 intelfbhw_disable_irq(dinfo);
368 fb_dealloc_cmap(&dinfo->info->cmap);
369 kfree(dinfo->info->pixmap.addr);
371 if (dinfo->registered)
372 unregister_framebuffer(dinfo->info);
374 unset_mtrr(dinfo);
376 if (dinfo->fbmem_gart && dinfo->gtt_fb_mem) {
377 agp_unbind_memory(dinfo->gtt_fb_mem);
378 agp_free_memory(dinfo->gtt_fb_mem);
380 if (dinfo->gtt_cursor_mem) {
381 agp_unbind_memory(dinfo->gtt_cursor_mem);
382 agp_free_memory(dinfo->gtt_cursor_mem);
384 if (dinfo->gtt_ring_mem) {
385 agp_unbind_memory(dinfo->gtt_ring_mem);
386 agp_free_memory(dinfo->gtt_ring_mem);
391 intelfb_delete_i2c_busses(dinfo);
394 if (dinfo->mmio_base)
395 iounmap((void __iomem *)dinfo->mmio_base);
396 if (dinfo->aperture.virtual)
397 iounmap((void __iomem *)dinfo->aperture.virtual);
399 if (dinfo->flag & INTELFB_MMIO_ACQUIRED)
400 release_mem_region(dinfo->mmio_base_phys, INTEL_REG_SIZE);
401 if (dinfo->flag & INTELFB_FB_ACQUIRED)
402 release_mem_region(dinfo->aperture.physical,
403 dinfo->aperture.size);
404 framebuffer_release(dinfo->info);
407 #define bailout(dinfo) do { \
409 cleanup(dinfo); \
419 struct intelfb_info *dinfo;
450 dinfo = info->par;
451 dinfo->info = info;
452 dinfo->fbops = &intel_fb_ops;
453 dinfo->pdev = pdev;
464 dinfo->fixed_mode = fixed;
469 cleanup(dinfo);
485 dinfo->aperture.physical = pci_resource_start(pdev, aperture_bar);
486 dinfo->aperture.size = pci_resource_len(pdev, aperture_bar);
487 dinfo->mmio_base_phys = pci_resource_start(pdev, mmio_bar);
495 if (!request_mem_region(dinfo->aperture.physical, dinfo->aperture.size,
498 cleanup(dinfo);
502 dinfo->flag |= INTELFB_FB_ACQUIRED;
504 if (!request_mem_region(dinfo->mmio_base_phys,
508 cleanup(dinfo);
512 dinfo->flag |= INTELFB_MMIO_ACQUIRED;
515 dinfo->pci_chipset = pdev->device;
517 if (intelfbhw_get_chipset(pdev, dinfo)) {
518 cleanup(dinfo);
523 cleanup(dinfo);
530 PCI_FUNC(pdev->devfn), dinfo->name,
534 dinfo->accel = accel;
535 dinfo->hwcursor = hwcursor;
537 if (NOACCEL_CHIPSET(dinfo) && dinfo->accel == 1) {
539 dinfo->name);
540 dinfo->accel = 0;
545 dinfo->fb.size = ROUND_UP_TO_PAGE(stolen_size);
546 dinfo->fbmem_gart = 0;
548 dinfo->fb.size = MB(vram);
549 dinfo->fbmem_gart = 1;
553 if (dinfo->accel) {
554 dinfo->ring.size = RINGBUFFER_SIZE;
555 dinfo->ring_tail_mask = dinfo->ring.size - 1;
557 if (dinfo->hwcursor)
558 dinfo->cursor.size = HW_CURSOR_SIZE;
563 cleanup(dinfo);
571 cleanup(dinfo);
581 if (dinfo->accel)
582 dinfo->ring.offset = offset + gtt_info.current_memory;
583 if (dinfo->hwcursor)
584 dinfo->cursor.offset = offset +
585 + 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);
594 dinfo->aperture.virtual = (u8 __iomem *)ioremap_nocache
595 (dinfo->aperture.physical, ((offset + dinfo->fb.offset) << 12)
596 + dinfo->fb.size);
597 if (!dinfo->aperture.virtual) {
599 cleanup(dinfo);
603 dinfo->mmio_base =
604 (u8 __iomem *)ioremap_nocache(dinfo->mmio_base_phys,
606 if (!dinfo->mmio_base) {
608 cleanup(dinfo);
612 if (dinfo->accel) {
613 if (!(dinfo->gtt_ring_mem =
614 agp_allocate_memory(bridge, dinfo->ring.size >> 12,
618 cleanup(dinfo);
621 if (agp_bind_memory(dinfo->gtt_ring_mem,
622 dinfo->ring.offset)) {
625 cleanup(dinfo);
628 dinfo->ring.physical = dinfo->aperture.physical
629 + (dinfo->ring.offset << 12);
630 dinfo->ring.virtual = dinfo->aperture.virtual
631 + (dinfo->ring.offset << 12);
632 dinfo->ring_head = 0;
634 if (dinfo->hwcursor) {
635 agp_memtype = dinfo->mobile ? AGP_PHYSICAL_MEMORY
637 if (!(dinfo->gtt_cursor_mem =
638 agp_allocate_memory(bridge, dinfo->cursor.size >> 12,
642 cleanup(dinfo);
645 if (agp_bind_memory(dinfo->gtt_cursor_mem,
646 dinfo->cursor.offset)) {
649 cleanup(dinfo);
652 if (dinfo->mobile)
653 dinfo->cursor.physical
654 = dinfo->gtt_cursor_mem->physical;
656 dinfo->cursor.physical = dinfo->aperture.physical
657 + (dinfo->cursor.offset << 12);
658 dinfo->cursor.virtual = dinfo->aperture.virtual
659 + (dinfo->cursor.offset << 12);
661 if (dinfo->fbmem_gart) {
662 if (!(dinfo->gtt_fb_mem =
663 agp_allocate_memory(bridge, dinfo->fb.size >> 12,
667 dinfo->fbmem_gart = 0;
669 if (agp_bind_memory(dinfo->gtt_fb_mem,
670 dinfo->fb.offset)) {
673 dinfo->fbmem_gart = 0;
678 if (!dinfo->fbmem_gart)
679 dinfo->fb.offset = 0; /* starts at offset 0 */
680 dinfo->fb.physical = dinfo->aperture.physical
681 + (dinfo->fb.offset << 12);
682 dinfo->fb.virtual = dinfo->aperture.virtual + (dinfo->fb.offset << 12);
683 dinfo->fb_start = dinfo->fb.offset << 12;
689 set_mtrr(dinfo);
692 dinfo->fb.physical, dinfo->fb.offset, dinfo->fb.size,
693 dinfo->fb.virtual);
695 dinfo->mmio_base_phys, INTEL_REG_SIZE,
696 dinfo->mmio_base);
698 dinfo->ring.physical, dinfo->ring.size,
699 dinfo->ring.virtual);
701 dinfo->cursor.physical, dinfo->cursor.size,
702 dinfo->cursor.virtual, dinfo->cursor.offset,
703 dinfo->cursor.physical);
710 bailout(dinfo);
716 dvo = intelfbhw_check_non_crt(dinfo);
718 dinfo->fixed_mode = 1;
734 bailout(dinfo);
736 if (FIXED_MODE(dinfo) &&
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)) /* remap fb address */
755 update_dinfo(dinfo, &dinfo->initial_var);
758 bailout(dinfo);
761 if (intelfb_set_fbinfo(dinfo)) {
762 cleanup(dinfo);
767 bailout(dinfo);
771 intelfb_create_i2c_busses(dinfo);
775 bailout(dinfo);
777 pci_set_drvdata(pdev, dinfo);
780 i = intelfbhw_read_hw_state(dinfo, &dinfo->save_state,
784 bailout(dinfo);
787 intelfbhw_print_hw_state(dinfo, &dinfo->save_state);
790 bailout(dinfo);
793 dinfo->pipe = intelfbhw_active_pipe(&dinfo->save_state);
796 if (dinfo->hwcursor) {
797 intelfbhw_cursor_init(dinfo);
798 intelfbhw_cursor_reset(dinfo);
802 bailout(dinfo);
805 if (dinfo->accel)
806 intelfbhw_2d_start(dinfo);
809 bailout(dinfo);
812 bailout(dinfo);
814 if (register_framebuffer(dinfo->info) < 0) {
816 cleanup(dinfo);
820 dinfo->registered = 1;
821 dinfo->open = 0;
823 init_waitqueue_head(&dinfo->vsync.wait);
824 spin_lock_init(&dinfo->int_lock);
825 dinfo->irq_flags = 0;
826 dinfo->vsync.pan_display = 0;
827 dinfo->vsync.pan_offset = 0;
841 struct intelfb_info *dinfo = pci_get_drvdata(pdev);
845 if (!dinfo)
848 cleanup(dinfo);
887 static void __devinit get_initial_mode(struct intelfb_info *dinfo)
894 dinfo->initial_vga = 1;
895 dinfo->initial_fb_base = screen_info.lfb_base;
896 dinfo->initial_video_ram = screen_info.lfb_size * KB(64);
897 dinfo->initial_pitch = screen_info.lfb_linelength;
899 var = &dinfo->initial_var;
914 dinfo->initial_fb_base, dinfo->initial_video_ram,
915 BtoKB(dinfo->initial_video_ram));
919 dinfo->initial_pitch);
954 static int __devinit intelfb_init_var(struct intelfb_info *dinfo)
961 var = &dinfo->info->var;
962 if (FIXED_MODE(dinfo)) {
963 memcpy(var, &dinfo->initial_var,
967 const u8 *edid_s = fb_firmware_edid(&dinfo->pdev->dev);
975 &dinfo->info->monspecs);
983 msrc = fb_find_mode(var, dinfo->info, mode,
984 dinfo->info->monspecs.modedb,
985 dinfo->info->monspecs.modedb_len,
992 msrc = fb_find_mode(var, dinfo->info, mode,
1002 msrc = fb_find_mode(var, dinfo->info, PREFERRED_MODE,
1020 dinfo->fb.size / 2 / (var->bits_per_pixel * var->xres);
1027 if (dinfo->accel)
1035 static int __devinit intelfb_set_fbinfo(struct intelfb_info *dinfo)
1037 struct fb_info *info = dinfo->info;
1043 info->pseudo_palette = dinfo->pseudo_palette;
1050 if (intelfb_init_var(dinfo))
1054 strcpy(info->fix.id, dinfo->name);
1055 info->fix.smem_start = dinfo->fb.physical;
1056 info->fix.smem_len = dinfo->fb.size;
1062 info->fix.mmio_start = dinfo->mmio_base_phys;
1065 update_dinfo(dinfo, &info->var);
1070 /* Update dinfo to match the active video mode. */
1071 static void update_dinfo(struct intelfb_info *dinfo,
1076 dinfo->bpp = var->bits_per_pixel;
1077 dinfo->depth = intelfb_var_to_depth(var);
1078 dinfo->xres = var->xres;
1079 dinfo->yres = var->xres;
1080 dinfo->pixclock = var->pixclock;
1082 dinfo->info->fix.visual = dinfo->visual;
1083 dinfo->info->fix.line_length = dinfo->pitch;
1085 switch (dinfo->bpp) {
1087 dinfo->visual = FB_VISUAL_PSEUDOCOLOR;
1088 dinfo->pitch = var->xres_virtual;
1091 dinfo->visual = FB_VISUAL_TRUECOLOR;
1092 dinfo->pitch = var->xres_virtual * 2;
1095 dinfo->visual = FB_VISUAL_TRUECOLOR;
1096 dinfo->pitch = var->xres_virtual * 4;
1101 if (IS_I9XX(dinfo))
1102 dinfo->pitch = ROUND_UP_TO(dinfo->pitch, STRIDE_ALIGNMENT_I9XX);
1104 dinfo->pitch = ROUND_UP_TO(dinfo->pitch, STRIDE_ALIGNMENT);
1106 if (FIXED_MODE(dinfo))
1107 dinfo->pitch = dinfo->initial_pitch;
1109 dinfo->info->screen_base = (char __iomem *)dinfo->fb.virtual;
1110 dinfo->info->fix.line_length = dinfo->pitch;
1111 dinfo->info->fix.visual = dinfo->visual;
1122 struct intelfb_info *dinfo = GET_DINFO(info);
1125 dinfo->open++;
1132 struct intelfb_info *dinfo = GET_DINFO(info);
1135 dinfo->open--;
1137 if (!dinfo->open)
1138 intelfbhw_disable_irq(dinfo);
1149 struct intelfb_info *dinfo;
1163 dinfo = GET_DINFO(info);
1166 if (intelfbhw_validate_mode(dinfo, var) != 0)
1200 if (FIXED_MODE(dinfo) &&
1202 var->yres_virtual > dinfo->initial_var.yres_virtual ||
1203 var->yres_virtual < dinfo->initial_var.yres ||
1272 struct intelfb_info *dinfo = GET_DINFO(info);
1274 if (FIXED_MODE(dinfo)) {
1293 if (ACCEL(dinfo, info))
1294 intelfbhw_2d_stop(dinfo);
1296 memcpy(hw, &dinfo->save_state, sizeof(*hw));
1297 if (intelfbhw_mode_to_hw(dinfo, hw, &info->var))
1299 if (intelfbhw_program_mode(dinfo, hw, 0))
1303 intelfbhw_read_hw_state(dinfo, hw, 0);
1304 intelfbhw_print_hw_state(dinfo, hw);
1307 update_dinfo(dinfo, &info->var);
1309 if (ACCEL(dinfo, info))
1310 intelfbhw_2d_start(dinfo);
1316 if (ACCEL(dinfo, info)) {
1334 struct intelfb_info *dinfo = GET_DINFO(info);
1337 DBG_MSG("intelfb_setcolreg: regno %d, depth %d\n", regno, dinfo->depth);
1343 if (dinfo->depth == 8) {
1348 intelfbhw_setcolreg(dinfo, regno, red, green, blue,
1353 switch (dinfo->depth) {
1355 dinfo->pseudo_palette[regno] = ((red & 0xf800) >> 1) |
1360 dinfo->pseudo_palette[regno] = (red & 0xf800) |
1365 dinfo->pseudo_palette[regno] = ((red & 0xff00) << 8) |
1393 struct intelfb_info *dinfo = GET_DINFO(info);
1401 retval = intelfbhw_wait_for_vsync(dinfo, pipe);
1413 struct intelfb_info *dinfo = GET_DINFO(info);
1420 if (!ACCEL(dinfo, info) || dinfo->depth == 4) {
1430 if (dinfo->depth != 8)
1431 color = dinfo->pseudo_palette[rect->color];
1435 intelfbhw_do_fillrect(dinfo, rect->dx, rect->dy,
1437 dinfo->pitch, info->var.bits_per_pixel,
1444 struct intelfb_info *dinfo = GET_DINFO(info);
1450 if (!ACCEL(dinfo, info) || dinfo->depth == 4) {
1455 intelfbhw_do_bitblt(dinfo, region->sx, region->sy, region->dx,
1457 dinfo->pitch, info->var.bits_per_pixel);
1463 struct intelfb_info *dinfo = GET_DINFO(info);
1470 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)) {
1495 struct intelfb_info *dinfo = GET_DINFO(info);
1501 if (!dinfo->hwcursor)
1504 intelfbhw_cursor_hide(dinfo);
1507 physical = (dinfo->mobile || IS_I9XX(dinfo)) ? dinfo->cursor.physical :
1508 (dinfo->cursor.offset << 12);
1518 intelfbhw_cursor_init(dinfo);
1519 intelfbhw_cursor_reset(dinfo);
1520 intelfbhw_cursor_setpos(dinfo, cursor->image.dx,
1523 if (dinfo->depth != 8) {
1524 fg =dinfo->pseudo_palette[cursor->image.fg_color];
1525 bg =dinfo->pseudo_palette[cursor->image.bg_color];
1530 intelfbhw_cursor_setcolor(dinfo, bg, fg);
1531 intelfbhw_cursor_load(dinfo, cursor->image.width,
1533 dinfo->cursor_src);
1536 intelfbhw_cursor_show(dinfo);
1546 intelfbhw_cursor_setpos(dinfo, dx, dy);
1553 intelfbhw_cursor_reset(dinfo);
1559 if (dinfo->depth != 8) {
1560 fg = dinfo->pseudo_palette[cursor->image.fg_color];
1561 bg = dinfo->pseudo_palette[cursor->image.bg_color];
1567 intelfbhw_cursor_setcolor(dinfo, bg, fg);
1595 memcpy(dinfo->cursor_src, src, size);
1597 intelfbhw_cursor_load(dinfo, cursor->image.width,
1602 intelfbhw_cursor_show(dinfo);
1609 struct intelfb_info *dinfo = GET_DINFO(info);
1615 if (dinfo->ring_lockup)
1618 intelfbhw_do_sync(dinfo);