backend.c (56ec4c1e72865c6d99f643b6574e6e074c3e8823) | backend.c (c2980d8c2961113f24863f70d8ad016f55224c81) |
---|---|
1/* 2 * AGPGART driver backend routines. 3 * Copyright (C) 2004 Silicon Graphics, Inc. 4 * Copyright (C) 2002-2003 Dave Jones. 5 * Copyright (C) 1999 Jeff Hartmann. 6 * Copyright (C) 1999 Precision Insight, Inc. 7 * Copyright (C) 1999 Xi Graphics, Inc. 8 * --- 135 unchanged lines hidden (view full) --- 144 struct page *page = bridge->driver->agp_alloc_page(bridge); 145 146 if (!page) { 147 dev_err(&bridge->dev->dev, 148 "can't get memory for scratch page\n"); 149 return -ENOMEM; 150 } 151 | 1/* 2 * AGPGART driver backend routines. 3 * Copyright (C) 2004 Silicon Graphics, Inc. 4 * Copyright (C) 2002-2003 Dave Jones. 5 * Copyright (C) 1999 Jeff Hartmann. 6 * Copyright (C) 1999 Precision Insight, Inc. 7 * Copyright (C) 1999 Xi Graphics, Inc. 8 * --- 135 unchanged lines hidden (view full) --- 144 struct page *page = bridge->driver->agp_alloc_page(bridge); 145 146 if (!page) { 147 dev_err(&bridge->dev->dev, 148 "can't get memory for scratch page\n"); 149 return -ENOMEM; 150 } 151 |
152 bridge->scratch_page_real = phys_to_gart(page_to_phys(page)); | 152 bridge->scratch_page_page = page; |
153 if (bridge->driver->agp_map_page) { | 153 if (bridge->driver->agp_map_page) { |
154 if (bridge->driver->agp_map_page(phys_to_virt(page_to_phys(page)), | 154 if (bridge->driver->agp_map_page(page, |
155 &bridge->scratch_page_dma)) { 156 dev_err(&bridge->dev->dev, 157 "unable to dma-map scratch page\n"); 158 rc = -ENOMEM; 159 goto err_out_nounmap; 160 } 161 } else { 162 bridge->scratch_page_dma = phys_to_gart(page_to_phys(page)); --- 37 unchanged lines hidden (view full) --- 200 INIT_LIST_HEAD(&bridge->mapped_list); 201 spin_lock_init(&bridge->mapped_lock); 202 203 return 0; 204 205err_out: 206 if (bridge->driver->needs_scratch_page && 207 bridge->driver->agp_unmap_page) { | 155 &bridge->scratch_page_dma)) { 156 dev_err(&bridge->dev->dev, 157 "unable to dma-map scratch page\n"); 158 rc = -ENOMEM; 159 goto err_out_nounmap; 160 } 161 } else { 162 bridge->scratch_page_dma = phys_to_gart(page_to_phys(page)); --- 37 unchanged lines hidden (view full) --- 200 INIT_LIST_HEAD(&bridge->mapped_list); 201 spin_lock_init(&bridge->mapped_lock); 202 203 return 0; 204 205err_out: 206 if (bridge->driver->needs_scratch_page && 207 bridge->driver->agp_unmap_page) { |
208 void *va = gart_to_virt(bridge->scratch_page_real); 209 210 bridge->driver->agp_unmap_page(va, bridge->scratch_page_dma); | 208 bridge->driver->agp_unmap_page(bridge->scratch_page_page, 209 bridge->scratch_page_dma); |
211 } 212err_out_nounmap: 213 if (bridge->driver->needs_scratch_page) { | 210 } 211err_out_nounmap: 212 if (bridge->driver->needs_scratch_page) { |
214 void *va = gart_to_virt(bridge->scratch_page_real); | 213 void *va = page_address(bridge->scratch_page_page); |
215 216 bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_UNMAP); 217 bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_FREE); 218 } 219 if (got_gatt) 220 bridge->driver->free_gatt_table(bridge); 221 if (got_keylist) { 222 vfree(bridge->key_list); --- 10 unchanged lines hidden (view full) --- 233 if (bridge->driver->free_gatt_table) 234 bridge->driver->free_gatt_table(bridge); 235 236 vfree(bridge->key_list); 237 bridge->key_list = NULL; 238 239 if (bridge->driver->agp_destroy_page && 240 bridge->driver->needs_scratch_page) { | 214 215 bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_UNMAP); 216 bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_FREE); 217 } 218 if (got_gatt) 219 bridge->driver->free_gatt_table(bridge); 220 if (got_keylist) { 221 vfree(bridge->key_list); --- 10 unchanged lines hidden (view full) --- 232 if (bridge->driver->free_gatt_table) 233 bridge->driver->free_gatt_table(bridge); 234 235 vfree(bridge->key_list); 236 bridge->key_list = NULL; 237 238 if (bridge->driver->agp_destroy_page && 239 bridge->driver->needs_scratch_page) { |
241 void *va = gart_to_virt(bridge->scratch_page_real); | 240 void *va = page_address(bridge->scratch_page_page); |
242 243 if (bridge->driver->agp_unmap_page) | 241 242 if (bridge->driver->agp_unmap_page) |
244 bridge->driver->agp_unmap_page(va, 245 bridge->scratch_page_dma); | 243 bridge->driver->agp_unmap_page(bridge->scratch_page_page, 244 bridge->scratch_page_dma); |
246 247 bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_UNMAP); 248 bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_FREE); 249 } 250} 251 252/* When we remove the global variable agp_bridge from all drivers 253 * then agp_alloc_bridge and agp_generic_find_bridge need to be updated --- 129 unchanged lines hidden --- | 245 246 bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_UNMAP); 247 bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_FREE); 248 } 249} 250 251/* When we remove the global variable agp_bridge from all drivers 252 * then agp_alloc_bridge and agp_generic_find_bridge need to be updated --- 129 unchanged lines hidden --- |