SRU - LP #316780 - Poulsbo driver 2.3.0.32L.0029 update
Loïc Minier
loic.minier at ubuntu.com
Wed Jan 14 15:07:45 UTC 2009
Hi
The two patches below start a new release in hardy-lum and update the
Poulsbo DRM driver to 2.3.0.32L.0029.
I did a test build of the new version of the driver on hardy/lpia; it's
in my ppa.
Cheers,
>From 1252ec2807ff371a918fb1c0f887e2e551f0ad01 Mon Sep 17 00:00:00 2001
From: Loïc Minier <lool at dooz.org>
Date: Wed, 14 Jan 2009 11:59:21 +0100
Subject: [PATCH] UBUNTU: Start new release Ubuntu-2.6.24-23.37
Ignore: yes
Signed-off-by: Loïc Minier <lool at dooz.org>
---
debian/changelog | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index 575c2ae..e0be17a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+linux-ubuntu-modules-2.6.24 (2.6.24-23.37) UNRELEASED; urgency=low
+
+ CHANGELOG: Do not edit directly. Autogenerated at release.
+ CHANGELOG: Use the printchanges target to see the curent changes.
+ CHANGELOG: Use the insertchanges target to create the final log.
+
+ -- Loic Minier <lool at ubuntu.com> Wed, 14 Jan 2009 11:58:56 +0100
+
linux-ubuntu-modules-2.6.24 (2.6.24-23.36) hardy-proposed; urgency=low
[Adrian Bunk]
--
1.6.0.4
>From a84002c5e457ac7408ee39b08c9abb699d980025 Mon Sep 17 00:00:00 2001
From: Loïc Minier <lool at dooz.org>
Date: Wed, 14 Jan 2009 10:46:41 +0100
Subject: [PATCH] UBUNTU: LPIA: Poulsbo driver 2.3.0.32L.0029 update
Bug: #316780
Signed-off-by: Loïc Minier <lool at dooz.org>
---
ubuntu/media/drm-poulsbo/Makefile | 2 +-
ubuntu/media/drm-poulsbo/Module.symvers | 340 ++++++++++----------
ubuntu/media/drm-poulsbo/drmP.h | 8 +
ubuntu/media/drm-poulsbo/drm_compat.c | 5 +
ubuntu/media/drm-poulsbo/drm_compat.h | 26 ++-
ubuntu/media/drm-poulsbo/drm_ttm.c | 6 +
ubuntu/media/drm-poulsbo/drm_vm.c | 387 ++++++++++++++++++-----
ubuntu/media/drm-poulsbo/drm_vm_nopage_compat.c | 279 ++++++++++++++++
ubuntu/media/drm-poulsbo/psb_drm.h | 2 +-
ubuntu/media/drm-poulsbo/psb_drv.c | 8 +
ubuntu/media/drm-poulsbo/psb_drv.h | 5 +-
ubuntu/media/drm-poulsbo/psb_fb.c | 22 ++-
ubuntu/media/drm-poulsbo/psb_gtt.c | 1 +
ubuntu/media/drm-poulsbo/psb_msvdx.c | 9 +-
ubuntu/media/drm-poulsbo/psb_schedule.c | 3 +-
15 files changed, 835 insertions(+), 268 deletions(-)
create mode 100644 ubuntu/media/drm-poulsbo/drm_vm_nopage_compat.c
diff --git a/ubuntu/media/drm-poulsbo/Makefile b/ubuntu/media/drm-poulsbo/Makefile
index 2550e51..075352e 100644
--- a/ubuntu/media/drm-poulsbo/Makefile
+++ b/ubuntu/media/drm-poulsbo/Makefile
@@ -8,7 +8,7 @@ drm-objs := drm_auth.o drm_bufs.o drm_context.o drm_dma.o drm_drawable.o \
drm_memory_debug.o ati_pcigart.o drm_sman.o \
drm_hashtab.o drm_mm.o drm_object.o drm_compat.o \
drm_fence.o drm_ttm.o drm_bo.o drm_bo_move.o drm_bo_lock.o \
- drm_crtc.o drm_edid.o drm_modes.o drm_regman.o
+ drm_crtc.o drm_edid.o drm_modes.o drm_regman.o drm_vm_nopage_compat.o
psb-objs := psb_drv.o psb_mmu.o psb_sgx.o psb_irq.o psb_fence.o psb_buffer.o \
psb_gtt.o psb_setup.o psb_i2c.o psb_fb.o psb_msvdx.o \
diff --git a/ubuntu/media/drm-poulsbo/Module.symvers b/ubuntu/media/drm-poulsbo/Module.symvers
index e28928d..a69c52a 100644
--- a/ubuntu/media/drm-poulsbo/Module.symvers
+++ b/ubuntu/media/drm-poulsbo/Module.symvers
@@ -1,171 +1,169 @@
-0x374b6080 drm_agp_enable /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x9681710c drm_fence_buffer_objects /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xcbd39421 drm_mm_takedown /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x949ed565 drm_bo_mem_space /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x4523014f drm_bo_same_page /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xdd6c0e4b drm_unlocked_ioctl /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x074519c2 drm_core_get_reg_ofs /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xc968c39f drm_bind_ttm /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x4a9656f3 drm_output_create /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x949332d8 drm_agp_unbind /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x89dee44a drm_bo_wait /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xc572eb3a drm_pci_free /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x8887452c drm_idlelock_release /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x8c71d2fd drm_mode_detachmode_crtc /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x9147871a drm_fence_reference_unlocked /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xc0269560 drm_get_acpi_edid /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xa2eda2af drm_agp_bind /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x7b84cfc9 drm_ddc_read /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x0074a214 psbfb_remove /usr/src/Build14/psb-kmd/psb EXPORT_SYMBOL
-0xd9f99279 drm_idlelock_take /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xecb88906 drm_init /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x23d096b9 drm_mode_config_init /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xabb2fda9 drm_lookup_buffer_object /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x5d08cf26 drm_remove_ref_object /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x65845ec2 drm_mode_config_cleanup /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xbcc1d2e9 drm_fence_add_user_object /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x7991ca39 drm_vbl_send_signals /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x77bc9429 drm_init_mode /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xc79167bd drm_irq_uninstall /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x602b5d78 drm_exit /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xcc2bf129 drm_mode_equal /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x561e1d24 drm_framebuffer_create /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xbd47cc5e drm_core_ioremapfree /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL_GPL
-0x4b8082b9 drm_mm_put_block /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x9400f72f drm_get_dev /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x958b9ad2 drm_mode_remove /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x2e506b91 drm_ioctl /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x3d8b36f9 drm_mode_duplicate /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x6fc257c8 drm_mem_reg_ioremap /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xd24c386d idr_for_each /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x9d6775c2 drm_output_destroy /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xf1bf4e37 drm_agp_init_ttm /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xd3028e75 drm_sman_set_manager /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x95dfd0b5 drm_initial_config /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xfdfbad19 drm_sman_alloc /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x967e7712 drm_get_resource_start /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x21451ac4 drm_sman_owner_cleanup /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x80c50ec3 drm_irq_install /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x23b4f5e3 drm_bo_read_unlock /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x80391d54 drm_fence_usage_deref_unlocked /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xa2e328d5 drm_crtc_create /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xd6448db6 drm_crtc_destroy /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x2c7cc63e drm_regs_add /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xaa04a2a0 drm_init_pat /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xb8ac2985 drm_bo_vm_nopfn /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xc4b88d39 drm_rmmap_locked /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x8aa3f9f4 drm_mode_validate_clocks /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x0351e8d3 drm_add_user_object /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xb522f97d drm_pick_crtcs /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xe7cfbc7e drm_get_edid /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xef8a9172 drm_mode_attachmode_crtc /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x2916bf63 drm_sman_cleanup /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x049158c9 drm_fasync /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xd34cb865 drm_bo_driver_finish /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xb3a6456b drm_psb_debug /usr/src/Build14/psb-kmd/psb EXPORT_SYMBOL
-0x38a40c4f drm_crtc_in_use /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xa66b7943 drm_bo_kmap /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x0836695c drm_sman_takedown /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x60a03838 drm_poll /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xd7089f8a drm_regs_init /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x7a93ffe3 drm_bo_move_accel_cleanup /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x8ea685d3 drm_i_have_hw_lock /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x04642110 drm_mmap /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x387a4852 drm_bo_move_memcpy /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x7b57f79a drm_agp_alloc /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xc6102f55 drm_bo_usage_deref_unlocked /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x2eb2f903 drm_sman_free_key /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x68d3ccdf drm_sg_alloc /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x8ddceca3 drm_fence_object_emit /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xf7225dc3 drm_fence_object_wait /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xc2390644 ati_pcigart_init_ttm /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x20645642 drm_debug /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xc2d97d54 drm_find_matching_map /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xe53dad64 drm_ati_pcigart_init /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xce080d24 drm_property_add_enum /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xba576ed3 drm_mode_width /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x5a1c23b1 drm_ati_pcigart_cleanup /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x30ee067b drm_fence_usage_deref_locked /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x4cf71cd2 idr_remove_all /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x1522ff1c drm_bo_clean_mm /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x862230c6 drm_addbufs_fb /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x2ebeb6b2 drm_property_destroy /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xeb4ee560 drm_fence_object_signaled /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xa4ca8131 drm_property_create /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xdc661a69 drm_getsarea /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x15a1203b drm_addbufs_pci /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x93449b9b drm_addbufs_agp /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x6a337ba3 drm_calloc /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x23dc7de1 drm_core_get_map_ofs /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xe6f2c757 drm_regs_fence /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xdaa7653a drm_bo_move_ttm /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xe22df699 drm_buffer_object_create /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xdd8fe54b drm_free_memctl /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x3074f033 drm_order /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x6307ddaa drm_bo_usage_deref_locked /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x8c792097 drm_bo_kunmap /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xea10965a drm_regs_free /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xb28ee9a8 drm_core_ioremap /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL_GPL
-0x71f4da33 drm_fence_wait_polling /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xa1ccb3ce drm_mode_rmmode /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xe919dd5c drm_sman_owner_clean /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x305dfe25 drm_bo_do_validate /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xbf1041c6 drm_get_resource_len /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xdd7a3f4b drm_lookup_ref_object /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x5070a0ab drm_bo_read_lock /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xdf072f63 drm_crtc_probe_output_modes /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xdee943f9 drm_release /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x9207ec5f drm_mode_validate_size /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x8873dc30 drm_mm_init /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x4bec7c9e drm_fence_fill_arg /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xd960ae18 drm_disable_unused_functions /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x99e1ddda drm_cleanup_pci /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x7589bb4a drm_putback_buffer_objects /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x96987c63 drm_framebuffer_destroy /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xfb53c4cd drm_addmap /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x0004d31e drm_mode_create /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xb2e20675 drm_mode_destroy /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xb879fb62 drm_bo_offset_end /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x06356c41 drm_add_edid_modes /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x55f060ee drm_sman_set_range /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x20af51d4 drm_rmmap /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xd578de06 drm_get_drawable_info /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xf167f778 drm_agp_free /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x282b1899 drm_agp_bind_memory /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x609b8898 drm_bo_driver_init /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x05c116ce psbfb_probe /usr/src/Build14/psb-kmd/psb EXPORT_SYMBOL
-0xfc6e54b8 drm_lookup_user_object /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xff8ec813 drm_regs_alloc /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x91e1396e drm_mode_probed_add /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xd4216dce drm_mode_height /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x81e0a82e drm_agp_release /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x0829b22a drm_fence_object_create /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x196c0211 drm_mem_reg_iounmap /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x09838841 drm_pci_alloc /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x930ea23c drm_fence_handler /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xb99820c9 drm_bo_init_mm /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xfcabad2c drm_bo_handle_validate /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x2399d607 drm_bo_fill_rep_arg /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x7f297356 drm_open /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x0da88f6a drm_sg_cleanup /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x27d8d38c drm_output_rename /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x59a23695 drm_mode_set_name /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xd38e6e8f drm_locked_tasklet /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x23336410 drm_fence_object_flush /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x6884872f drm_mode_debug_printmodeline /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x0c7e9508 drm_init_yres /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x311ebcb8 drm_init_xres /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xf1395144 drm_agp_acquire /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xe154a9e9 drm_core_reclaim_buffers /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xf6bd2837 drm_query_memctl /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x846da362 drm_fence_flush_old /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x5ce87594 drm_agp_info /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x61fc5864 drm_mode_set_crtcinfo /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x282fad09 drm_mode_vrefresh /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x03f29474 drm_mem_reg_is_pci /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x7861a0cb drm_crtc_set_mode /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x6d8171ce drm_mode_addmode /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x0aec7e20 drm_output_attach_property /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x945e2f21 drm_ttm_cache_flush /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0xaf29788e drm_sman_init /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
-0x1597222b drm_ttm_get_page /usr/src/Build14/psb-kmd/drm EXPORT_SYMBOL
+0x41bfddeb drm_agp_enable /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xa7130ef9 drm_fence_buffer_objects /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xcbd39421 drm_mm_takedown /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x86c71e3e drm_bo_mem_space /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x4523014f drm_bo_same_page /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x79815eb6 drm_bind_ttm /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x114ad870 drm_unlocked_ioctl /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x175a8f25 drm_core_get_reg_ofs /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xc8a297e1 drm_output_create /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xaa627561 drm_agp_unbind /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x6ff1ad66 drm_bo_wait /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x5be9c285 drm_pci_free /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xe67aa926 drm_idlelock_release /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x8d521d45 drm_mode_detachmode_crtc /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xc0269560 drm_get_acpi_edid /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xbfeb6176 drm_fence_reference_unlocked /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x788dff7a drm_agp_bind /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x8d8c64ef drm_ddc_read /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x0beaae52 psbfb_remove /home/toe/psb-kmd/psb EXPORT_SYMBOL
+0x74a97fad drm_idlelock_take /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x4137b22f drm_init /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xc3ebc294 drm_mode_config_init /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x2eda3945 drm_lookup_buffer_object /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x8a5ad3cd drm_remove_ref_object /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x154e2150 drm_mode_config_cleanup /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x7aba7bf2 drm_fence_add_user_object /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x46a51a64 drm_vbl_send_signals /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x77bc9429 drm_init_mode /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xe2170a8f drm_irq_uninstall /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x38fc6bb8 drm_exit /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xcc2bf129 drm_mode_equal /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x31ee7d7a drm_framebuffer_create /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x0c5fdc46 drm_core_ioremapfree /home/toe/psb-kmd/drm EXPORT_SYMBOL_GPL
+0x4b8082b9 drm_mm_put_block /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xad41c8c9 drm_get_dev /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x265b1031 drm_mode_remove /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x727f3221 drm_ioctl /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xad417d41 drm_mode_duplicate /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x377fa39f drm_mem_reg_ioremap /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x527e4001 drm_output_destroy /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xd7fffa10 drm_initial_config /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x6e896d37 drm_agp_init_ttm /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xd3028e75 drm_sman_set_manager /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xfdfbad19 drm_sman_alloc /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xb1d084a0 drm_get_resource_start /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x21451ac4 drm_sman_owner_cleanup /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x9e1a02ac drm_irq_install /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xd3aec72f drm_bo_read_unlock /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x0fe271f0 drm_fence_usage_deref_unlocked /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x7997ef71 drm_crtc_create /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x0019d590 drm_crtc_destroy /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x113bf91b drm_regs_add /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xaa04a2a0 drm_init_pat /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xe9b13da2 drm_bo_vm_nopfn /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xfdac9ebb drm_mode_validate_clocks /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x19d44109 drm_rmmap_locked /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xb581016c drm_add_user_object /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xf8a4b8b9 drm_pick_crtcs /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x127829bf drm_get_edid /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xb721360d drm_mode_attachmode_crtc /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x2916bf63 drm_sman_cleanup /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xaccaa737 drm_fasync /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x39bf1080 drm_bo_driver_finish /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xb3a6456b drm_psb_debug /home/toe/psb-kmd/psb EXPORT_SYMBOL
+0x3e6ee1ef drm_crtc_in_use /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x3b0d10ef drm_bo_kmap /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x0836695c drm_sman_takedown /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xb8e20e0e drm_poll /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x5e183339 drm_regs_init /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x008aa24e drm_bo_move_accel_cleanup /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xaadec8e8 drm_i_have_hw_lock /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xb118d538 drm_mmap /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x6e8e143b drm_bo_move_memcpy /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x746b0735 drm_agp_alloc /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xaa487532 drm_bo_usage_deref_unlocked /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x2eb2f903 drm_sman_free_key /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xa53980ee drm_sg_alloc /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xbcab2fa5 drm_fence_object_wait /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xcadd26cc drm_fence_object_emit /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xf977e811 ati_pcigart_init_ttm /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x20645642 drm_debug /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xca37012d drm_find_matching_map /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x57b911e1 drm_ati_pcigart_init /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xce080d24 drm_property_add_enum /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xba576ed3 drm_mode_width /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xe61d07f4 drm_fence_usage_deref_locked /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x0d8a9570 drm_ati_pcigart_cleanup /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xd843b853 drm_bo_clean_mm /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x80808cfe drm_addbufs_fb /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x2151b130 drm_property_destroy /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xea77c55b drm_fence_object_signaled /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x4601bd00 drm_property_create /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x1b0388f8 drm_getsarea /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xc51b8b3f drm_addbufs_pci /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x2da49754 drm_addbufs_agp /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x6a337ba3 drm_calloc /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x23dc7de1 drm_core_get_map_ofs /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xe62aab88 drm_regs_fence /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x6abc30d4 drm_bo_move_ttm /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xa41e733a drm_buffer_object_create /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xdd8fe54b drm_free_memctl /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x3074f033 drm_order /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xa56b3da2 drm_regs_free /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x18a76b3d drm_bo_kunmap /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x5c8dd78b drm_bo_usage_deref_locked /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xe126dc7f drm_core_ioremap /home/toe/psb-kmd/drm EXPORT_SYMBOL_GPL
+0xba02523d drm_fence_wait_polling /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x8800292c drm_mode_rmmode /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xe919dd5c drm_sman_owner_clean /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x8fe9d391 drm_bo_do_validate /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x8003444a drm_get_resource_len /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xad23ec17 drm_lookup_ref_object /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x4791a9fe drm_bo_read_lock /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xd7dfc576 drm_crtc_probe_output_modes /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x759bc49a drm_release /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x7117d258 drm_mode_validate_size /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x8873dc30 drm_mm_init /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x77fc9572 drm_fence_fill_arg /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x90c609cd drm_disable_unused_functions /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x6ef5cef8 drm_cleanup_pci /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xee4d3b12 drm_putback_buffer_objects /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x3ab1508e drm_framebuffer_destroy /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x6d0ddb46 drm_addmap /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x2f5df68d drm_mode_create /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x69d92887 drm_mode_destroy /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xb879fb62 drm_bo_offset_end /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x4acca023 drm_add_edid_modes /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x55f060ee drm_sman_set_range /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x2afec532 drm_rmmap /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xa00148c8 drm_get_drawable_info /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x37e175d1 drm_agp_free /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x282b1899 drm_agp_bind_memory /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x1a67b7cb drm_bo_driver_init /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x8ea7ea2e psbfb_probe /home/toe/psb-kmd/psb EXPORT_SYMBOL
+0xacfec19b drm_regs_alloc /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x057c7703 drm_lookup_user_object /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xbc487b6f drm_mode_probed_add /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xd4216dce drm_mode_height /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xc6df1250 drm_agp_release /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xc6349b08 drm_fence_object_create /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x4059bd6a drm_mem_reg_iounmap /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x955a8e91 drm_pci_alloc /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xa2500344 drm_fence_handler /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xabb70657 drm_bo_handle_validate /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x5de1e038 drm_bo_init_mm /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x7b30b68f drm_bo_fill_rep_arg /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x57c2a89e drm_open /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x10bdf987 drm_sg_cleanup /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xc33732a5 drm_output_rename /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x59a23695 drm_mode_set_name /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x72067dc1 drm_locked_tasklet /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xaefe2bca drm_fence_object_flush /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x46d51893 drm_mode_debug_printmodeline /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x311ebcb8 drm_init_xres /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x0c7e9508 drm_init_yres /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xe297cf82 drm_agp_acquire /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x58dde7ee drm_core_reclaim_buffers /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xf6bd2837 drm_query_memctl /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x300a064d drm_fence_flush_old /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xb55721f1 drm_agp_info /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x282fad09 drm_mode_vrefresh /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x61fc5864 drm_mode_set_crtcinfo /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xc6a75842 drm_mem_reg_is_pci /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x4657f2fc drm_crtc_set_mode /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x44338411 drm_mode_addmode /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xb105fd90 drm_output_attach_property /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x945e2f21 drm_ttm_cache_flush /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0xaf29788e drm_sman_init /home/toe/psb-kmd/drm EXPORT_SYMBOL
+0x62e05388 drm_ttm_get_page /home/toe/psb-kmd/drm EXPORT_SYMBOL
diff --git a/ubuntu/media/drm-poulsbo/drmP.h b/ubuntu/media/drm-poulsbo/drmP.h
index abbc975..2449fe0 100644
--- a/ubuntu/media/drm-poulsbo/drmP.h
+++ b/ubuntu/media/drm-poulsbo/drmP.h
@@ -82,6 +82,14 @@
#define __OS_HAS_AGP (defined(CONFIG_AGP) || (defined(CONFIG_AGP_MODULE) && defined(MODULE)))
#define __OS_HAS_MTRR (defined(CONFIG_MTRR))
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 1
+#endif
+
#include "drm_os_linux.h"
#include "drm_hashtab.h"
#include "drm_internal.h"
diff --git a/ubuntu/media/drm-poulsbo/drm_compat.c b/ubuntu/media/drm-poulsbo/drm_compat.c
index de9257e..9022923 100644
--- a/ubuntu/media/drm-poulsbo/drm_compat.c
+++ b/ubuntu/media/drm-poulsbo/drm_compat.c
@@ -592,7 +592,12 @@ void drm_init_pat(void)
if (!boot_cpu_has(X86_FEATURE_PAT)) {
return;
}
+
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27))
+ if (on_each_cpu(drm_pat_ipi_handler,NULL,1) != 0) {
+ #else
if (on_each_cpu(drm_pat_ipi_handler, NULL, 1, 1) != 0) {
+ #endif
DRM_ERROR("Timed out setting up CPU PAT.\n");
return;
}
diff --git a/ubuntu/media/drm-poulsbo/drm_compat.h b/ubuntu/media/drm-poulsbo/drm_compat.h
index f7eb1e4..4895635 100644
--- a/ubuntu/media/drm-poulsbo/drm_compat.h
+++ b/ubuntu/media/drm-poulsbo/drm_compat.h
@@ -337,16 +337,17 @@ extern int drm_bo_map_bound(struct vm_area_struct *vma);
#ifndef _PAGE_PAT
#define _PAGE_PAT 0x080 /* Note that this is the same value as _PAGE_PROTNONE */
+#endif
extern void drm_init_pat(void);
extern int drm_use_pat(void);
#endif
-#endif
-
/* fixme when functions are upstreamed - upstreamed for 2.6.23 */
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
+//#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
+#if ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)) && \
+ (LINUX_VERSION_CODE != KERNEL_VERSION(2,6,21)))
#define DRM_IDR_COMPAT_FN
#endif
#ifdef DRM_IDR_COMPAT_FN
@@ -360,4 +361,23 @@ void idr_remove_all(struct idr *idp);
void *idr_replace(struct idr *idp, void *ptr, int id);
#endif
+#ifndef VM_CAN_NONLINEAR
+#define DRM_VM_NOPAGE 1
+#endif
+
+#ifdef DRM_VM_NOPAGE
+
+extern struct page *drm_vm_nopage(struct vm_area_struct *vma,
+ unsigned long address, int *type);
+
+extern struct page *drm_vm_shm_nopage(struct vm_area_struct *vma,
+ unsigned long address, int *type);
+
+extern struct page *drm_vm_dma_nopage(struct vm_area_struct *vma,
+ unsigned long address, int *type);
+
+extern struct page *drm_vm_sg_nopage(struct vm_area_struct *vma,
+ unsigned long address, int *type);
+#endif
+
#endif
diff --git a/ubuntu/media/drm-poulsbo/drm_ttm.c b/ubuntu/media/drm-poulsbo/drm_ttm.c
index 5c8538d..2eb6a17 100644
--- a/ubuntu/media/drm-poulsbo/drm_ttm.c
+++ b/ubuntu/media/drm-poulsbo/drm_ttm.c
@@ -37,7 +37,11 @@ static void drm_ttm_ipi_handler(void *null)
void drm_ttm_cache_flush(void)
{
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27))
+ if (on_each_cpu(drm_ttm_ipi_handler, NULL, 1) != 0)
+ #else
if (on_each_cpu(drm_ttm_ipi_handler, NULL, 1, 1) != 0)
+ #endif
DRM_ERROR("Timed out waiting for drm cache flush.\n");
}
EXPORT_SYMBOL(drm_ttm_cache_flush);
@@ -117,8 +121,10 @@ static int drm_set_caching(struct drm_ttm *ttm, int noncached)
}
}
}
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25))
if (do_tlbflush)
flush_agp_mappings();
+#endif
DRM_FLAG_MASKED(ttm->page_flags, noncached, DRM_TTM_PAGE_UNCACHED);
diff --git a/ubuntu/media/drm-poulsbo/drm_vm.c b/ubuntu/media/drm-poulsbo/drm_vm.c
index fa98405..0959ebe 100644
--- a/ubuntu/media/drm-poulsbo/drm_vm.c
+++ b/ubuntu/media/drm-poulsbo/drm_vm.c
@@ -1,4 +1,4 @@
-/**
+/*
* \file drm_vm.c
* Memory mapping for DRM
*
@@ -45,7 +45,6 @@ static int drm_bo_mmap_locked(struct vm_area_struct *vma,
struct file *filp,
drm_local_map_t *map);
-
pgprot_t drm_io_prot(uint32_t map_type, struct vm_area_struct *vma)
{
pgprot_t tmp = vm_get_page_prot(vma->vm_flags);
@@ -77,9 +76,9 @@ pgprot_t drm_io_prot(uint32_t map_type, struct vm_area_struct *vma)
return tmp;
}
-
+#ifndef DRM_VM_NOPAGE
/**
- * \c nopage method for AGP virtual memory.
+ * \c fault method for AGP virtual memory.
*
* \param vma virtual memory area.
* \param address access address.
@@ -89,8 +88,7 @@ pgprot_t drm_io_prot(uint32_t map_type, struct vm_area_struct *vma)
* map, get the page, increment the use count and return it.
*/
#if __OS_HAS_AGP
-static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
- unsigned long address)
+static int drm_do_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
{
struct drm_file *priv = vma->vm_file->private_data;
struct drm_device *dev = priv->head->dev;
@@ -102,19 +100,24 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
* Find the right map
*/
if (!drm_core_has_AGP(dev))
- goto vm_nopage_error;
+ goto vm_fault_error;
if (!dev->agp || !dev->agp->cant_use_aperture)
- goto vm_nopage_error;
+ goto vm_fault_error;
if (drm_ht_find_item(&dev->map_hash, vma->vm_pgoff, &hash))
- goto vm_nopage_error;
+ goto vm_fault_error;
r_list = drm_hash_entry(hash, struct drm_map_list, hash);
map = r_list->map;
if (map && map->type == _DRM_AGP) {
- unsigned long offset = address - vma->vm_start;
+ /*
+ * Using vm_pgoff as a selector forces us to use this unusual
+ * addressing scheme.
+ */
+ unsigned long offset = (unsigned long)vmf->virtual_address -
+ vma->vm_start;
unsigned long baddr = map->offset + offset;
struct drm_agp_mem *agpmem;
struct page *page;
@@ -136,7 +139,7 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
}
if (!agpmem)
- goto vm_nopage_error;
+ goto vm_fault_error;
/*
* Get the page, inc the use count, and return it
@@ -144,25 +147,21 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
offset = (baddr - agpmem->bound) >> PAGE_SHIFT;
page = virt_to_page(__va(agpmem->memory->memory[offset]));
get_page(page);
+ vmf->page = page;
-#if 0
- /* page_count() not defined everywhere */
DRM_DEBUG
("baddr = 0x%lx page = 0x%p, offset = 0x%lx, count=%d\n",
baddr, __va(agpmem->memory->memory[offset]), offset,
page_count(page));
-#endif
-
- return page;
+ return 0;
}
- vm_nopage_error:
- return NOPAGE_SIGBUS; /* Disallow mremap */
+vm_fault_error:
+ return VM_FAULT_SIGBUS; /* Disallow mremap */
}
#else /* __OS_HAS_AGP */
-static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
- unsigned long address)
+static int drm_do_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
{
- return NOPAGE_SIGBUS;
+ return VM_FAULT_SIGBUS;
}
#endif /* __OS_HAS_AGP */
@@ -176,29 +175,28 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
* Get the mapping, find the real physical page to map, get the page, and
* return it.
*/
-static __inline__ struct page *drm_do_vm_shm_nopage(struct vm_area_struct *vma,
- unsigned long address)
+static int drm_do_vm_shm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
{
struct drm_map *map = (struct drm_map *) vma->vm_private_data;
unsigned long offset;
unsigned long i;
struct page *page;
- if (address > vma->vm_end)
- return NOPAGE_SIGBUS; /* Disallow mremap */
if (!map)
- return NOPAGE_SIGBUS; /* Nothing allocated */
+ return VM_FAULT_SIGBUS; /* Nothing allocated */
- offset = address - vma->vm_start;
+ offset = (unsigned long)vmf->virtual_address - vma->vm_start;
i = (unsigned long)map->handle + offset;
page = vmalloc_to_page((void *)i);
if (!page)
- return NOPAGE_SIGBUS;
+ return VM_FAULT_SIGBUS;
get_page(page);
+ vmf->page = page;
- DRM_DEBUG("shm_nopage 0x%lx\n", address);
- return page;
+ DRM_DEBUG("shm_fault 0x%lx\n", offset);
+ return 0;
}
+#endif
/**
* \c close method for shared virtual memory.
@@ -280,8 +278,9 @@ static void drm_vm_shm_close(struct vm_area_struct *vma)
mutex_unlock(&dev->struct_mutex);
}
+#ifndef DRM_VM_NOPAGE
/**
- * \c nopage method for DMA virtual memory.
+ * \c fault method for DMA virtual memory.
*
* \param vma virtual memory area.
* \param address access address.
@@ -289,8 +288,7 @@ static void drm_vm_shm_close(struct vm_area_struct *vma)
*
* Determine the page number from the page offset and get it from drm_device_dma::pagelist.
*/
-static __inline__ struct page *drm_do_vm_dma_nopage(struct vm_area_struct *vma,
- unsigned long address)
+static int drm_do_vm_dma_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
{
struct drm_file *priv = vma->vm_file->private_data;
struct drm_device *dev = priv->head->dev;
@@ -300,24 +298,23 @@ static __inline__ struct page *drm_do_vm_dma_nopage(struct vm_area_struct *vma,
struct page *page;
if (!dma)
- return NOPAGE_SIGBUS; /* Error */
- if (address > vma->vm_end)
- return NOPAGE_SIGBUS; /* Disallow mremap */
+ return VM_FAULT_SIGBUS; /* Error */
if (!dma->pagelist)
- return NOPAGE_SIGBUS; /* Nothing allocated */
+ return VM_FAULT_SIGBUS; /* Nothing allocated */
- offset = address - vma->vm_start; /* vm_[pg]off[set] should be 0 */
- page_nr = offset >> PAGE_SHIFT;
+ offset = (unsigned long)vmf->virtual_address - vma->vm_start; /* vm_[pg]off[set] should be 0 */
+ page_nr = offset >> PAGE_SHIFT; /* page_nr could just be vmf->pgoff */
page = virt_to_page((dma->pagelist[page_nr] + (offset & (~PAGE_MASK))));
get_page(page);
+ vmf->page = page;
- DRM_DEBUG("dma_nopage 0x%lx (page %lu)\n", address, page_nr);
- return page;
+ DRM_DEBUG("dma_fault 0x%lx (page %lu)\n", offset, page_nr);
+ return 0;
}
/**
- * \c nopage method for scatter-gather virtual memory.
+ * \c fault method for scatter-gather virtual memory.
*
* \param vma virtual memory area.
* \param address access address.
@@ -325,8 +322,7 @@ static __inline__ struct page *drm_do_vm_dma_nopage(struct vm_area_struct *vma,
*
* Determine the map offset from the page offset and get it from drm_sg_mem::pagelist.
*/
-static __inline__ struct page *drm_do_vm_sg_nopage(struct vm_area_struct *vma,
- unsigned long address)
+static int drm_do_vm_sg_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
{
struct drm_map *map = (struct drm_map *) vma->vm_private_data;
struct drm_file *priv = vma->vm_file->private_data;
@@ -337,80 +333,62 @@ static __inline__ struct page *drm_do_vm_sg_nopage(struct vm_area_struct *vma,
unsigned long page_offset;
struct page *page;
- DRM_DEBUG("\n");
if (!entry)
- return NOPAGE_SIGBUS; /* Error */
- if (address > vma->vm_end)
- return NOPAGE_SIGBUS; /* Disallow mremap */
+ return VM_FAULT_SIGBUS; /* Error */
if (!entry->pagelist)
- return NOPAGE_SIGBUS; /* Nothing allocated */
+ return VM_FAULT_SIGBUS; /* Nothing allocated */
- offset = address - vma->vm_start;
+ offset = (unsigned long)vmf->virtual_address - vma->vm_start;
map_offset = map->offset - (unsigned long)dev->sg->virtual;
page_offset = (offset >> PAGE_SHIFT) + (map_offset >> PAGE_SHIFT);
page = entry->pagelist[page_offset];
get_page(page);
+ vmf->page = page;
- return page;
-}
-
-static struct page *drm_vm_nopage(struct vm_area_struct *vma,
- unsigned long address, int *type)
-{
- if (type)
- *type = VM_FAULT_MINOR;
- return drm_do_vm_nopage(vma, address);
-}
-
-static struct page *drm_vm_shm_nopage(struct vm_area_struct *vma,
- unsigned long address, int *type)
-{
- if (type)
- *type = VM_FAULT_MINOR;
- return drm_do_vm_shm_nopage(vma, address);
-}
-
-static struct page *drm_vm_dma_nopage(struct vm_area_struct *vma,
- unsigned long address, int *type)
-{
- if (type)
- *type = VM_FAULT_MINOR;
- return drm_do_vm_dma_nopage(vma, address);
-}
-
-static struct page *drm_vm_sg_nopage(struct vm_area_struct *vma,
- unsigned long address, int *type)
-{
- if (type)
- *type = VM_FAULT_MINOR;
- return drm_do_vm_sg_nopage(vma, address);
+ return 0;
}
-
+#endif
/** AGP virtual memory operations */
static struct vm_operations_struct drm_vm_ops = {
+#ifdef DRM_VM_NOPAGE
.nopage = drm_vm_nopage,
+#else
+ .fault = drm_do_vm_fault,
+#endif
.open = drm_vm_open,
.close = drm_vm_close,
};
/** Shared virtual memory operations */
static struct vm_operations_struct drm_vm_shm_ops = {
+#ifdef DRM_VM_NOPAGE
.nopage = drm_vm_shm_nopage,
+#else
+ .fault = drm_do_vm_shm_fault,
+#endif
.open = drm_vm_open,
.close = drm_vm_shm_close,
};
/** DMA virtual memory operations */
static struct vm_operations_struct drm_vm_dma_ops = {
+#ifdef DRM_VM_NOPAGE
.nopage = drm_vm_dma_nopage,
+#else
+ .fault = drm_do_vm_dma_fault,
+#endif
.open = drm_vm_open,
.close = drm_vm_close,
};
/** Scatter-gather virtual memory operations */
static struct vm_operations_struct drm_vm_sg_ops = {
+#ifdef DRM_VM_NOPAGE
.nopage = drm_vm_sg_nopage,
+#else
+ .fault = drm_do_vm_sg_fault,
+#endif
.open = drm_vm_open,
.close = drm_vm_close,
};
@@ -715,11 +693,242 @@ EXPORT_SYMBOL(drm_mmap);
* These bits are not used by the mm subsystem code, and we consider them
* protected by the bo->mutex lock.
*/
-
#ifdef DRM_FULL_MM_COMPAT
-
#define DRM_NOPFN_EXTRA 15 /* Fault 16 pages at a time in */
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27))
+int drm_bo_vm_fault(struct vm_area_struct *vma,
+ struct vm_fault *vmf)
+{
+ struct drm_buffer_object *bo = (struct drm_buffer_object *) vma->vm_private_data;
+ unsigned long page_offset;
+ struct page *page = NULL;
+ struct drm_ttm *ttm = NULL;
+ struct drm_device *dev;
+ unsigned long pfn;
+ int err;
+ unsigned long bus_base;
+ unsigned long bus_offset;
+ unsigned long bus_size;
+ int i;
+
+ unsigned long ret = VM_FAULT_NOPAGE;
+
+ unsigned long address = (unsigned long)vmf->virtual_address;
+
+ if (address > vma->vm_end)
+ return VM_FAULT_SIGBUS;
+
+ dev = bo->dev;
+ err = drm_bo_read_lock(&dev->bm.bm_lock, 1);
+ if (err)
+ return VM_FAULT_NOPAGE;
+
+ err = mutex_lock_interruptible(&bo->mutex);
+ if (err) {
+ drm_bo_read_unlock(&dev->bm.bm_lock);
+ return VM_FAULT_NOPAGE;
+ }
+
+ err = drm_bo_wait(bo, 0, 0, 0);
+ if (err) {
+ ret = (err != -EAGAIN) ? VM_FAULT_SIGBUS : VM_FAULT_NOPAGE;
+ goto out_unlock;
+ }
+
+ /*
+ * If buffer happens to be in a non-mappable location,
+ * move it to a mappable.
+ */
+
+ if (!(bo->mem.flags & DRM_BO_FLAG_MAPPABLE)) {
+ uint32_t new_mask = bo->mem.mask |
+ DRM_BO_FLAG_MAPPABLE |
+ DRM_BO_FLAG_FORCE_MAPPABLE;
+ err = drm_bo_move_buffer(bo, new_mask, 0, 0);
+ if (err) {
+ ret = (err != -EAGAIN) ? VM_FAULT_SIGBUS : VM_FAULT_NOPAGE;
+ goto out_unlock;
+ }
+ }
+
+ err = drm_bo_pci_offset(dev, &bo->mem, &bus_base, &bus_offset,
+ &bus_size);
+
+ if (err) {
+ ret = VM_FAULT_SIGBUS;
+ goto out_unlock;
+ }
+
+ page_offset = (address - vma->vm_start) >> PAGE_SHIFT;
+
+ if (bus_size) {
+ struct drm_mem_type_manager *man = &dev->bm.man[bo->mem.mem_type];
+
+ pfn = ((bus_base + bus_offset) >> PAGE_SHIFT) + page_offset;
+ vma->vm_page_prot = drm_io_prot(man->drm_bus_maptype, vma);
+ } else {
+ ttm = bo->ttm;
+
+ drm_ttm_fixup_caching(ttm);
+ page = drm_ttm_get_page(ttm, page_offset);
+ if (!page) {
+ ret = VM_FAULT_OOM;
+ goto out_unlock;
+ }
+ pfn = page_to_pfn(page);
+ vma->vm_page_prot = (bo->mem.flags & DRM_BO_FLAG_CACHED) ?
+ vm_get_page_prot(vma->vm_flags) :
+ drm_io_prot(_DRM_TTM, vma);
+ }
+
+ err = vm_insert_pfn(vma, address, pfn);
+ if (err) {
+ ret = (err != -EAGAIN) ? VM_FAULT_OOM : VM_FAULT_NOPAGE;
+ goto out_unlock;
+ }
+
+ for (i=0; i<DRM_NOPFN_EXTRA; ++i) {
+
+ if (++page_offset == bo->mem.num_pages)
+ break;
+ address = vma->vm_start + (page_offset << PAGE_SHIFT);
+ if (address >= vma->vm_end)
+ break;
+ if (bus_size) {
+ pfn = ((bus_base + bus_offset) >> PAGE_SHIFT)
+ + page_offset;
+ } else {
+ page = drm_ttm_get_page(ttm, page_offset);
+ if (!page)
+ break;
+ pfn = page_to_pfn(page);
+ }
+ if (vm_insert_pfn(vma, address, pfn))
+ break;
+ }
+out_unlock:
+ mutex_unlock(&bo->mutex);
+ drm_bo_read_unlock(&dev->bm.bm_lock);
+ return ret;
+}
+
+int drm_bo_vm_nopfn(struct vm_area_struct *vma,
+ struct vm_fault *vmf )
+{
+ struct drm_buffer_object *bo = (struct drm_buffer_object *) vma->vm_private_data;
+ unsigned long page_offset;
+ struct page *page = NULL;
+ struct drm_ttm *ttm = NULL;
+ struct drm_device *dev;
+ unsigned long pfn;
+ int err;
+ unsigned long bus_base;
+ unsigned long bus_offset;
+ unsigned long bus_size;
+ int i;
+ unsigned long ret = VM_FAULT_NOPAGE;
+
+ unsigned long address = (unsigned long)vmf->virtual_address;
+
+ if (address > vma->vm_end)
+ return VM_FAULT_SIGBUS;
+
+ dev = bo->dev;
+ err = drm_bo_read_lock(&dev->bm.bm_lock, 1);
+ if (err)
+ return VM_FAULT_NOPAGE;
+
+ err = mutex_lock_interruptible(&bo->mutex);
+ if (err) {
+ drm_bo_read_unlock(&dev->bm.bm_lock);
+ return VM_FAULT_NOPAGE;
+ }
+
+ err = drm_bo_wait(bo, 0, 0, 0);
+ if (err) {
+ ret = (err != -EAGAIN) ? VM_FAULT_SIGBUS : VM_FAULT_NOPAGE;
+ goto out_unlock;
+ }
+
+ /*
+ * If buffer happens to be in a non-mappable location,
+ * move it to a mappable.
+ */
+
+ if (!(bo->mem.flags & DRM_BO_FLAG_MAPPABLE)) {
+ uint32_t new_mask = bo->mem.mask |
+ DRM_BO_FLAG_MAPPABLE |
+ DRM_BO_FLAG_FORCE_MAPPABLE;
+ err = drm_bo_move_buffer(bo, new_mask, 0, 0);
+ if (err) {
+ ret = (err != -EAGAIN) ? VM_FAULT_SIGBUS : VM_FAULT_NOPAGE;
+ goto out_unlock;
+ }
+ }
+
+ err = drm_bo_pci_offset(dev, &bo->mem, &bus_base, &bus_offset,
+ &bus_size);
+
+ if (err) {
+ ret = VM_FAULT_SIGBUS;
+ goto out_unlock;
+ }
+
+ page_offset = (address - vma->vm_start) >> PAGE_SHIFT;
+
+ if (bus_size) {
+ struct drm_mem_type_manager *man = &dev->bm.man[bo->mem.mem_type];
+
+ pfn = ((bus_base + bus_offset) >> PAGE_SHIFT) + page_offset;
+ vma->vm_page_prot = drm_io_prot(man->drm_bus_maptype, vma);
+ } else {
+ ttm = bo->ttm;
+
+ drm_ttm_fixup_caching(ttm);
+ page = drm_ttm_get_page(ttm, page_offset);
+ if (!page) {
+ ret = VM_FAULT_OOM;
+ goto out_unlock;
+ }
+ pfn = page_to_pfn(page);
+ vma->vm_page_prot = (bo->mem.flags & DRM_BO_FLAG_CACHED) ?
+ vm_get_page_prot(vma->vm_flags) :
+ drm_io_prot(_DRM_TTM, vma);
+ }
+
+ err = vm_insert_pfn(vma, address, pfn);
+ if (err) {
+ ret = (err != -EAGAIN) ? VM_FAULT_OOM : VM_FAULT_NOPAGE;
+ goto out_unlock;
+ }
+
+ for (i=0; i<DRM_NOPFN_EXTRA; ++i) {
+
+ if (++page_offset == bo->mem.num_pages)
+ break;
+ address = vma->vm_start + (page_offset << PAGE_SHIFT);
+ if (address >= vma->vm_end)
+ break;
+ if (bus_size) {
+ pfn = ((bus_base + bus_offset) >> PAGE_SHIFT)
+ + page_offset;
+ } else {
+ page = drm_ttm_get_page(ttm, page_offset);
+ if (!page)
+ break;
+ pfn = page_to_pfn(page);
+ }
+ if (vm_insert_pfn(vma, address, pfn))
+ break;
+ }
+out_unlock:
+ mutex_unlock(&bo->mutex);
+ drm_bo_read_unlock(&dev->bm.bm_lock);
+ return ret;
+}
+
+#else
unsigned long drm_bo_vm_nopfn(struct vm_area_struct *vma,
unsigned long address)
{
@@ -832,6 +1041,8 @@ out_unlock:
drm_bo_read_unlock(&dev->bm.bm_lock);
return ret;
}
+#endif
+
EXPORT_SYMBOL(drm_bo_vm_nopfn);
#endif
@@ -887,6 +1098,9 @@ static void drm_bo_vm_close(struct vm_area_struct *vma)
}
static struct vm_operations_struct drm_bo_vm_ops = {
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27))
+ .fault = drm_bo_vm_fault,
+ #else
#ifdef DRM_FULL_MM_COMPAT
.nopfn = drm_bo_vm_nopfn,
#else
@@ -896,6 +1110,7 @@ static struct vm_operations_struct drm_bo_vm_ops = {
.nopage = drm_bo_vm_nopage,
#endif
#endif
+ #endif
.open = drm_bo_vm_open,
.close = drm_bo_vm_close,
};
diff --git a/ubuntu/media/drm-poulsbo/drm_vm_nopage_compat.c b/ubuntu/media/drm-poulsbo/drm_vm_nopage_compat.c
new file mode 100644
index 0000000..d0c7c5a
--- /dev/null
+++ b/ubuntu/media/drm-poulsbo/drm_vm_nopage_compat.c
@@ -0,0 +1,279 @@
+/**
+ * \file drm_vm.c
+ * Memory mapping for DRM
+ *
+ * \author Rickard E. (Rik) Faith <faith at valinux.com>
+ * \author Gareth Hughes <gareth at valinux.com>
+ */
+
+/*
+ * Created: Mon Jan 4 08:58:31 1999 by faith at valinux.com
+ *
+ * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
+ * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include "drmP.h"
+
+#ifdef DRM_VM_NOPAGE
+/**
+ * \c nopage method for AGP virtual memory.
+ *
+ * \param vma virtual memory area.
+ * \param address access address.
+ * \return pointer to the page structure.
+ *
+ * Find the right map and if it's AGP memory find the real physical page to
+ * map, get the page, increment the use count and return it.
+ */
+#if __OS_HAS_AGP
+static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
+ unsigned long address)
+{
+ struct drm_file *priv = vma->vm_file->private_data;
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26))
+ struct drm_device *dev = priv->minor->dev;
+ #else
+ struct drm_device *dev = priv->head->dev;
+ #endif
+ struct drm_map *map = NULL;
+ struct drm_map_list *r_list;
+ struct drm_hash_item *hash;
+
+ /*
+ * Find the right map
+ */
+ if (!drm_core_has_AGP(dev))
+ goto vm_nopage_error;
+
+ if (!dev->agp || !dev->agp->cant_use_aperture)
+ goto vm_nopage_error;
+
+ if (drm_ht_find_item(&dev->map_hash, vma->vm_pgoff, &hash))
+ goto vm_nopage_error;
+
+ r_list = drm_hash_entry(hash, struct drm_map_list, hash);
+ map = r_list->map;
+
+ if (map && map->type == _DRM_AGP) {
+ unsigned long offset = address - vma->vm_start;
+ unsigned long baddr = map->offset + offset;
+ struct drm_agp_mem *agpmem;
+ struct page *page;
+
+#ifdef __alpha__
+ /*
+ * Adjust to a bus-relative address
+ */
+ baddr -= dev->hose->mem_space->start;
+#endif
+
+ /*
+ * It's AGP memory - find the real physical page to map
+ */
+ list_for_each_entry(agpmem, &dev->agp->memory, head) {
+ if (agpmem->bound <= baddr &&
+ agpmem->bound + agpmem->pages * PAGE_SIZE > baddr)
+ break;
+ }
+
+ if (!agpmem)
+ goto vm_nopage_error;
+
+ /*
+ * Get the page, inc the use count, and return it
+ */
+ offset = (baddr - agpmem->bound) >> PAGE_SHIFT;
+ page = virt_to_page(__va(agpmem->memory->memory[offset]));
+ get_page(page);
+
+#if 0
+ /* page_count() not defined everywhere */
+ DRM_DEBUG
+ ("baddr = 0x%lx page = 0x%p, offset = 0x%lx, count=%d\n",
+ baddr, __va(agpmem->memory->memory[offset]), offset,
+ page_count(page));
+#endif
+
+ return page;
+ }
+ vm_nopage_error:
+ return NOPAGE_SIGBUS; /* Disallow mremap */
+}
+#else /* __OS_HAS_AGP */
+static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
+ unsigned long address)
+{
+ return NOPAGE_SIGBUS;
+}
+#endif /* __OS_HAS_AGP */
+
+/**
+ * \c nopage method for shared virtual memory.
+ *
+ * \param vma virtual memory area.
+ * \param address access address.
+ * \return pointer to the page structure.
+ *
+ * Get the mapping, find the real physical page to map, get the page, and
+ * return it.
+ */
+static __inline__ struct page *drm_do_vm_shm_nopage(struct vm_area_struct *vma,
+ unsigned long address)
+{
+ struct drm_map *map = (struct drm_map *) vma->vm_private_data;
+ unsigned long offset;
+ unsigned long i;
+ struct page *page;
+
+ if (address > vma->vm_end)
+ return NOPAGE_SIGBUS; /* Disallow mremap */
+ if (!map)
+ return NOPAGE_SIGBUS; /* Nothing allocated */
+
+ offset = address - vma->vm_start;
+ i = (unsigned long)map->handle + offset;
+ page = vmalloc_to_page((void *)i);
+ if (!page)
+ return NOPAGE_SIGBUS;
+ get_page(page);
+
+ DRM_DEBUG("0x%lx\n", address);
+ return page;
+}
+
+/**
+ * \c nopage method for DMA virtual memory.
+ *
+ * \param vma virtual memory area.
+ * \param address access address.
+ * \return pointer to the page structure.
+ *
+ * Determine the page number from the page offset and get it from drm_device_dma::pagelist.
+ */
+static __inline__ struct page *drm_do_vm_dma_nopage(struct vm_area_struct *vma,
+ unsigned long address)
+{
+ struct drm_file *priv = vma->vm_file->private_data;
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26))
+ struct drm_device *dev = priv->minor->dev;
+ #else
+ struct drm_device *dev = priv->head->dev;
+ #endif
+ struct drm_device_dma *dma = dev->dma;
+ unsigned long offset;
+ unsigned long page_nr;
+ struct page *page;
+
+ if (!dma)
+ return NOPAGE_SIGBUS; /* Error */
+ if (address > vma->vm_end)
+ return NOPAGE_SIGBUS; /* Disallow mremap */
+ if (!dma->pagelist)
+ return NOPAGE_SIGBUS; /* Nothing allocated */
+
+ offset = address - vma->vm_start; /* vm_[pg]off[set] should be 0 */
+ page_nr = offset >> PAGE_SHIFT;
+ page = virt_to_page((dma->pagelist[page_nr] + (offset & (~PAGE_MASK))));
+
+ get_page(page);
+
+ DRM_DEBUG("0x%lx (page %lu)\n", address, page_nr);
+ return page;
+}
+
+/**
+ * \c nopage method for scatter-gather virtual memory.
+ *
+ * \param vma virtual memory area.
+ * \param address access address.
+ * \return pointer to the page structure.
+ *
+ * Determine the map offset from the page offset and get it from drm_sg_mem::pagelist.
+ */
+static __inline__ struct page *drm_do_vm_sg_nopage(struct vm_area_struct *vma,
+ unsigned long address)
+{
+ struct drm_map *map = (struct drm_map *) vma->vm_private_data;
+ struct drm_file *priv = vma->vm_file->private_data;
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26))
+ struct drm_device *dev = priv->minor->dev;
+ #else
+ struct drm_device *dev = priv->head->dev;
+ #endif
+ struct drm_sg_mem *entry = dev->sg;
+ unsigned long offset;
+ unsigned long map_offset;
+ unsigned long page_offset;
+ struct page *page;
+
+ DRM_DEBUG("\n");
+ if (!entry)
+ return NOPAGE_SIGBUS; /* Error */
+ if (address > vma->vm_end)
+ return NOPAGE_SIGBUS; /* Disallow mremap */
+ if (!entry->pagelist)
+ return NOPAGE_SIGBUS; /* Nothing allocated */
+
+ offset = address - vma->vm_start;
+ map_offset = map->offset - (unsigned long)dev->sg->virtual;
+ page_offset = (offset >> PAGE_SHIFT) + (map_offset >> PAGE_SHIFT);
+ page = entry->pagelist[page_offset];
+ get_page(page);
+
+ return page;
+}
+
+
+struct page *drm_vm_nopage(struct vm_area_struct *vma,
+ unsigned long address, int *type)
+{
+ if (type)
+ *type = VM_FAULT_MINOR;
+ return drm_do_vm_nopage(vma, address);
+}
+
+struct page *drm_vm_shm_nopage(struct vm_area_struct *vma,
+ unsigned long address, int *type)
+{
+ if (type)
+ *type = VM_FAULT_MINOR;
+ return drm_do_vm_shm_nopage(vma, address);
+}
+
+struct page *drm_vm_dma_nopage(struct vm_area_struct *vma,
+ unsigned long address, int *type)
+{
+ if (type)
+ *type = VM_FAULT_MINOR;
+ return drm_do_vm_dma_nopage(vma, address);
+}
+
+struct page *drm_vm_sg_nopage(struct vm_area_struct *vma,
+ unsigned long address, int *type)
+{
+ if (type)
+ *type = VM_FAULT_MINOR;
+ return drm_do_vm_sg_nopage(vma, address);
+}
+#endif
diff --git a/ubuntu/media/drm-poulsbo/psb_drm.h b/ubuntu/media/drm-poulsbo/psb_drm.h
index ffd196b..518206b 100644
--- a/ubuntu/media/drm-poulsbo/psb_drm.h
+++ b/ubuntu/media/drm-poulsbo/psb_drm.h
@@ -34,7 +34,7 @@
*
*/
/* #define PSB_PACKAGE_VERSION "ED"__DATE__*/
-#define PSB_PACKAGE_VERSION "2.2.0.32L.0020"
+#define PSB_PACKAGE_VERSION "2.3.0.32L.0029"
#define DRM_PSB_SAREA_MAJOR 0
#define DRM_PSB_SAREA_MINOR 1
diff --git a/ubuntu/media/drm-poulsbo/psb_drv.c b/ubuntu/media/drm-poulsbo/psb_drv.c
index 831631e..017ddf3 100644
--- a/ubuntu/media/drm-poulsbo/psb_drv.c
+++ b/ubuntu/media/drm-poulsbo/psb_drv.c
@@ -268,7 +268,11 @@ static int psb_do_init(struct drm_device *dev)
if (!dev_priv->comm_page)
goto out_err;
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25))
change_page_attr(dev_priv->comm_page, 1, PAGE_KERNEL_NOCACHE);
+#else
+ map_page_into_agp(dev_priv->comm_page);
+#endif
dev_priv->comm = kmap(dev_priv->comm_page);
memset((void *)dev_priv->comm, 0, PAGE_SIZE);
@@ -582,7 +586,11 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset)
if (!dev_priv->scratch_page)
goto out_err;
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25))
change_page_attr(dev_priv->scratch_page, 1, PAGE_KERNEL_NOCACHE);
+#else
+ map_page_into_agp(dev_priv->scratch_page);
+#endif
dev_priv->pg = psb_gtt_alloc(dev);
if (!dev_priv->pg)
diff --git a/ubuntu/media/drm-poulsbo/psb_drv.h b/ubuntu/media/drm-poulsbo/psb_drv.h
index 8eb76a4..6912df2 100644
--- a/ubuntu/media/drm-poulsbo/psb_drv.h
+++ b/ubuntu/media/drm-poulsbo/psb_drv.h
@@ -46,9 +46,9 @@ enum {
#define DRIVER_DESC "drm driver for the Intel GMA500"
#define DRIVER_AUTHOR "Tungsten Graphics Inc."
-#define PSB_DRM_DRIVER_DATE "20080731"
+#define PSB_DRM_DRIVER_DATE "20081219"
#define PSB_DRM_DRIVER_MAJOR 4
-#define PSB_DRM_DRIVER_MINOR 13
+#define PSB_DRM_DRIVER_MINOR 23
#define PSB_DRM_DRIVER_PATCHLEVEL 0
#define PSB_VDC_OFFSET 0x00000000
@@ -263,6 +263,7 @@ struct drm_psb_private {
int has_msvdx;
uint32_t gatt_free_offset;
atomic_t msvdx_mmu_invaldc;
+ int msvdx_power_saving;
/*
* Fencing / irq.
diff --git a/ubuntu/media/drm-poulsbo/psb_fb.c b/ubuntu/media/drm-poulsbo/psb_fb.c
index 9e21914..a65a7f0 100644
--- a/ubuntu/media/drm-poulsbo/psb_fb.c
+++ b/ubuntu/media/drm-poulsbo/psb_fb.c
@@ -1015,7 +1015,24 @@ static unsigned long psbfb_nopfn(struct vm_area_struct *vma,
mutex_unlock(&vi->vm_mutex);
return ret;
}
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27))
+static int psbfb_fault(struct vm_area_struct *vma,
+ struct vm_fault *vmf)
+{
+ struct psbfb_vm_info *vi = (struct psbfb_vm_info *)vma->vm_private_data;
+ struct vm_area_struct tmp_vma;
+ unsigned long ret;
+ unsigned long address = (unsigned long)vmf->virtual_address;
+
+ mutex_lock(&vi->vm_mutex);
+ tmp_vma = *vma;
+ tmp_vma.vm_private_data = vi->bo;
+ ret = drm_bo_vm_nopfn(&tmp_vma, address);
+ mutex_unlock(&vi->vm_mutex);
+ return ret;
+}
+#endif
static void psbfb_vm_open(struct vm_area_struct *vma)
{
struct psbfb_vm_info *vi = (struct psbfb_vm_info *)vma->vm_private_data;
@@ -1029,8 +1046,11 @@ static void psbfb_vm_close(struct vm_area_struct *vma)
}
static struct vm_operations_struct psbfb_vm_ops = {
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27))
+ .fault = psbfb_fault,
+ #else
.nopfn = psbfb_nopfn,
- .nopage = NULL,
+ #endif
.open = psbfb_vm_open,
.close = psbfb_vm_close,
};
diff --git a/ubuntu/media/drm-poulsbo/psb_gtt.c b/ubuntu/media/drm-poulsbo/psb_gtt.c
index ce8c616..91d54be 100644
--- a/ubuntu/media/drm-poulsbo/psb_gtt.c
+++ b/ubuntu/media/drm-poulsbo/psb_gtt.c
@@ -119,6 +119,7 @@ int psb_gtt_init(struct psb_gtt *pg, int resume)
pg->gtt_pages = gtt_pages;
pg->stolen_size = stolen_size;
+ if(!resume)
pg->gtt_map =
ioremap_nocache(pg->gtt_phys_start, gtt_pages << PAGE_SHIFT);
if (!pg->gtt_map) {
diff --git a/ubuntu/media/drm-poulsbo/psb_msvdx.c b/ubuntu/media/drm-poulsbo/psb_msvdx.c
index 678088d..74850a5 100644
--- a/ubuntu/media/drm-poulsbo/psb_msvdx.c
+++ b/ubuntu/media/drm-poulsbo/psb_msvdx.c
@@ -199,6 +199,8 @@ psb_submit_video_cmdbuf (struct drm_device *dev,
psb_schedule_watchdog (dev_priv);
spin_lock_irqsave (&dev_priv->msvdx_lock, irq_flags);
+ dev_priv->msvdx_power_saving = 0;
+
if (dev_priv->msvdx_needs_reset)
{
spin_unlock_irqrestore (&dev_priv->msvdx_lock, irq_flags);
@@ -647,7 +649,8 @@ psb_msvdx_lockup (struct drm_psb_private *dev_priv,
}
else
{
- if (dev_priv->msvdx_needs_reset == 0)
+ //if (dev_priv->msvdx_needs_reset == 0)
+ if (dev_priv->msvdx_power_saving == 0)
{
if (dev_priv->msvdx_start_idle && (dev_priv->msvdx_finished_sequence == dev_priv->msvdx_current_sequence))
{
@@ -656,7 +659,9 @@ psb_msvdx_lockup (struct drm_psb_private *dev_priv,
{
printk("set the msvdx clock to 0 in the %s\n", __FUNCTION__);
PSB_WMSVDX32 (0, MSVDX_MAN_CLK_ENABLE);
- dev_priv->msvdx_needs_reset = 1;
+ // MSVDX needn't to be reset for the latter commands after pausing and resuming playing.
+ //dev_priv->msvdx_needs_reset = 1;
+ dev_priv->msvdx_power_saving = 1;
}
else
{
diff --git a/ubuntu/media/drm-poulsbo/psb_schedule.c b/ubuntu/media/drm-poulsbo/psb_schedule.c
index 224ab08..54637dd 100644
--- a/ubuntu/media/drm-poulsbo/psb_schedule.c
+++ b/ubuntu/media/drm-poulsbo/psb_schedule.c
@@ -346,7 +346,8 @@ static void psb_schedule_raster(struct drm_psb_private *dev_priv,
PSB_DEBUG_RENDER("Raster busy.\n");
return;
}
-#ifdef PSB_BLOCK_OVERLAP
+//#ifdef PSB_BLOCK_OVERLAP
+#if 1
if (scheduler->current_task[PSB_SCENE_ENGINE_TA] != NULL) {
PSB_DEBUG_RENDER("TA busy.\n");
return;
--
1.6.0.4
--
Loïc Minier
More information about the kernel-team
mailing list