ACPI: use macro to replace hard number
[safe/jmp/linux-2.6] / drivers / char / agp / backend.c
index 73f333f..8c617ad 100644 (file)
@@ -43,8 +43,8 @@
  * fix some real stupidity. It's only by chance we can bump
  * past 0.99 at all due to some boolean logic error. */
 #define AGPGART_VERSION_MAJOR 0
-#define AGPGART_VERSION_MINOR 101
-static struct agp_version agp_current_version =
+#define AGPGART_VERSION_MINOR 103
+static const struct agp_version agp_current_version =
 {
        .major = AGPGART_VERSION_MAJOR,
        .minor = AGPGART_VERSION_MINOR,
@@ -97,7 +97,7 @@ void agp_backend_release(struct agp_bridge_data *bridge)
 EXPORT_SYMBOL(agp_backend_release);
 
 
-static struct { int mem, agp; } maxes_table[] = {
+static const struct { int mem, agp; } maxes_table[] = {
        {0, 0},
        {32, 4},
        {64, 28},
@@ -144,7 +144,8 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge)
                void *addr = bridge->driver->agp_alloc_page(bridge);
 
                if (!addr) {
-                       printk(KERN_ERR PFX "unable to get memory for scratch page.\n");
+                       dev_err(&bridge->dev->dev,
+                               "can't get memory for scratch page\n");
                        return -ENOMEM;
                }
 
@@ -155,13 +156,13 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge)
 
        size_value = bridge->driver->fetch_size();
        if (size_value == 0) {
-               printk(KERN_ERR PFX "unable to determine aperture size.\n");
+               dev_err(&bridge->dev->dev, "can't determine aperture size\n");
                rc = -EINVAL;
                goto err_out;
        }
        if (bridge->driver->create_gatt_table(bridge)) {
-               printk(KERN_ERR PFX
-                   "unable to get memory for graphics translation table.\n");
+               dev_err(&bridge->dev->dev,
+                       "can't get memory for graphics translation table\n");
                rc = -ENOMEM;
                goto err_out;
        }
@@ -169,7 +170,8 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge)
 
        bridge->key_list = vmalloc(PAGE_SIZE * 4);
        if (bridge->key_list == NULL) {
-               printk(KERN_ERR PFX "error allocating memory for key lists.\n");
+               dev_err(&bridge->dev->dev,
+                       "can't allocate memory for key lists\n");
                rc = -ENOMEM;
                goto err_out;
        }
@@ -179,17 +181,22 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge)
        memset(bridge->key_list, 0, PAGE_SIZE * 4);
 
        if (bridge->driver->configure()) {
-               printk(KERN_ERR PFX "error configuring host chipset.\n");
+               dev_err(&bridge->dev->dev, "error configuring host chipset\n");
                rc = -EINVAL;
                goto err_out;
        }
+       INIT_LIST_HEAD(&bridge->mapped_list);
+       spin_lock_init(&bridge->mapped_lock);
 
        return 0;
 
 err_out:
-       if (bridge->driver->needs_scratch_page)
-               bridge->driver->agp_destroy_page(
-                               gart_to_virt(bridge->scratch_page_real));
+       if (bridge->driver->needs_scratch_page) {
+               void *va = gart_to_virt(bridge->scratch_page_real);
+
+               bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_UNMAP);
+               bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_FREE);
+       }
        if (got_gatt)
                bridge->driver->free_gatt_table(bridge);
        if (got_keylist) {
@@ -211,9 +218,12 @@ static void agp_backend_cleanup(struct agp_bridge_data *bridge)
        bridge->key_list = NULL;
 
        if (bridge->driver->agp_destroy_page &&
-           bridge->driver->needs_scratch_page)
-               bridge->driver->agp_destroy_page(
-                               gart_to_virt(bridge->scratch_page_real));
+           bridge->driver->needs_scratch_page) {
+               void *va = gart_to_virt(bridge->scratch_page_real);
+
+               bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_UNMAP);
+               bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_FREE);
+       }
 }
 
 /* When we remove the global variable agp_bridge from all drivers
@@ -223,7 +233,7 @@ static void agp_backend_cleanup(struct agp_bridge_data *bridge)
 struct agp_bridge_data *agp_alloc_bridge(void)
 {
        struct agp_bridge_data *bridge;
-       
+
        bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
        if (!bridge)
                return NULL;
@@ -263,25 +273,27 @@ int agp_add_bridge(struct agp_bridge_data *bridge)
 
        /* Grab reference on the chipset driver. */
        if (!try_module_get(bridge->driver->owner)) {
-               printk (KERN_INFO PFX "Couldn't lock chipset driver.\n");
+               dev_info(&bridge->dev->dev, "can't lock chipset driver\n");
                return -EINVAL;
        }
 
        error = agp_backend_initialize(bridge);
        if (error) {
-               printk (KERN_INFO PFX "agp_backend_initialize() failed.\n");
+               dev_info(&bridge->dev->dev,
+                        "agp_backend_initialize() failed\n");
                goto err_out;
        }
 
        if (list_empty(&agp_bridges)) {
                error = agp_frontend_initialize();
                if (error) {
-                       printk (KERN_INFO PFX "agp_frontend_initialize() failed.\n");
+                       dev_info(&bridge->dev->dev,
+                                "agp_frontend_initialize() failed\n");
                        goto frontend_err;
                }
 
-               printk(KERN_INFO PFX "AGP aperture is %dM @ 0x%lx\n",
-                       bridge->driver->fetch_size(), bridge->gart_bus_addr);
+               dev_info(&bridge->dev->dev, "AGP aperture is %dM @ 0x%lx\n",
+                        bridge->driver->fetch_size(), bridge->gart_bus_addr);
 
        }
 
@@ -316,7 +328,7 @@ EXPORT_SYMBOL(agp_try_unsupported_boot);
 static int __init agp_init(void)
 {
        if (!agp_off)
-               printk(KERN_INFO "Linux agpgart interface v%d.%d (c) Dave Jones\n",
+               printk(KERN_INFO "Linux agpgart interface v%d.%d\n",
                        AGPGART_VERSION_MAJOR, AGPGART_VERSION_MINOR);
        return 0;
 }
@@ -337,7 +349,7 @@ static __init int agp_setup(char *s)
 __setup("agp=", agp_setup);
 #endif
 
-MODULE_AUTHOR("Dave Jones <davej@codemonkey.org.uk>");
+MODULE_AUTHOR("Dave Jones <davej@redhat.com>");
 MODULE_DESCRIPTION("AGP GART driver");
 MODULE_LICENSE("GPL and additional rights");
 MODULE_ALIAS_MISCDEV(AGPGART_MINOR);