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 ---