Lines Matching full:bridge

69 	struct agp_bridge_data *bridge;  in agp_backend_acquire()  local
71 bridge = agp_find_bridge(pdev); in agp_backend_acquire()
73 if (!bridge) in agp_backend_acquire()
76 if (atomic_read(&bridge->agp_in_use)) in agp_backend_acquire()
78 atomic_inc(&bridge->agp_in_use); in agp_backend_acquire()
79 return bridge; in agp_backend_acquire()
92 void agp_backend_release(struct agp_bridge_data *bridge) in agp_backend_release() argument
95 if (bridge) in agp_backend_release()
96 atomic_dec(&bridge->agp_in_use); in agp_backend_release()
137 static int agp_backend_initialize(struct agp_bridge_data *bridge) in agp_backend_initialize() argument
141 bridge->max_memory_agp = agp_find_max(); in agp_backend_initialize()
142 bridge->version = &agp_current_version; in agp_backend_initialize()
144 if (bridge->driver->needs_scratch_page) { in agp_backend_initialize()
145 struct page *page = bridge->driver->agp_alloc_page(bridge); in agp_backend_initialize()
148 dev_err(&bridge->dev->dev, in agp_backend_initialize()
153 bridge->scratch_page_page = page; in agp_backend_initialize()
154 bridge->scratch_page_dma = page_to_phys(page); in agp_backend_initialize()
156 bridge->scratch_page = bridge->driver->mask_memory(bridge, in agp_backend_initialize()
157 bridge->scratch_page_dma, 0); in agp_backend_initialize()
160 size_value = bridge->driver->fetch_size(); in agp_backend_initialize()
162 dev_err(&bridge->dev->dev, "can't determine aperture size\n"); in agp_backend_initialize()
166 if (bridge->driver->create_gatt_table(bridge)) { in agp_backend_initialize()
167 dev_err(&bridge->dev->dev, in agp_backend_initialize()
174 bridge->key_list = vzalloc(PAGE_SIZE * 4); in agp_backend_initialize()
175 if (bridge->key_list == NULL) { in agp_backend_initialize()
176 dev_err(&bridge->dev->dev, in agp_backend_initialize()
185 if (bridge->driver->configure()) { in agp_backend_initialize()
186 dev_err(&bridge->dev->dev, "error configuring host chipset\n"); in agp_backend_initialize()
190 INIT_LIST_HEAD(&bridge->mapped_list); in agp_backend_initialize()
191 spin_lock_init(&bridge->mapped_lock); in agp_backend_initialize()
196 if (bridge->driver->needs_scratch_page) { in agp_backend_initialize()
197 struct page *page = bridge->scratch_page_page; in agp_backend_initialize()
199 bridge->driver->agp_destroy_page(page, AGP_PAGE_DESTROY_UNMAP); in agp_backend_initialize()
200 bridge->driver->agp_destroy_page(page, AGP_PAGE_DESTROY_FREE); in agp_backend_initialize()
203 bridge->driver->free_gatt_table(bridge); in agp_backend_initialize()
205 vfree(bridge->key_list); in agp_backend_initialize()
206 bridge->key_list = NULL; in agp_backend_initialize()
212 static void agp_backend_cleanup(struct agp_bridge_data *bridge) in agp_backend_cleanup() argument
214 if (bridge->driver->cleanup) in agp_backend_cleanup()
215 bridge->driver->cleanup(); in agp_backend_cleanup()
216 if (bridge->driver->free_gatt_table) in agp_backend_cleanup()
217 bridge->driver->free_gatt_table(bridge); in agp_backend_cleanup()
219 vfree(bridge->key_list); in agp_backend_cleanup()
220 bridge->key_list = NULL; in agp_backend_cleanup()
222 if (bridge->driver->agp_destroy_page && in agp_backend_cleanup()
223 bridge->driver->needs_scratch_page) { in agp_backend_cleanup()
224 struct page *page = bridge->scratch_page_page; in agp_backend_cleanup()
226 bridge->driver->agp_destroy_page(page, AGP_PAGE_DESTROY_UNMAP); in agp_backend_cleanup()
227 bridge->driver->agp_destroy_page(page, AGP_PAGE_DESTROY_FREE); in agp_backend_cleanup()
237 struct agp_bridge_data *bridge; in agp_alloc_bridge() local
239 bridge = kzalloc(sizeof(*bridge), GFP_KERNEL); in agp_alloc_bridge()
240 if (!bridge) in agp_alloc_bridge()
243 atomic_set(&bridge->agp_in_use, 0); in agp_alloc_bridge()
244 atomic_set(&bridge->current_memory_agp, 0); in agp_alloc_bridge()
247 agp_bridge = bridge; in agp_alloc_bridge()
249 return bridge; in agp_alloc_bridge()
254 void agp_put_bridge(struct agp_bridge_data *bridge) in agp_put_bridge() argument
256 kfree(bridge); in agp_put_bridge()
264 int agp_add_bridge(struct agp_bridge_data *bridge) in agp_add_bridge() argument
273 if (!bridge->dev) { in agp_add_bridge()
280 if (!try_module_get(bridge->driver->owner)) { in agp_add_bridge()
281 dev_info(&bridge->dev->dev, "can't lock chipset driver\n"); in agp_add_bridge()
286 error = agp_backend_initialize(bridge); in agp_add_bridge()
288 dev_info(&bridge->dev->dev, in agp_add_bridge()
296 dev_info(&bridge->dev->dev, in agp_add_bridge()
301 dev_info(&bridge->dev->dev, "AGP aperture is %dM @ 0x%lx\n", in agp_add_bridge()
302 bridge->driver->fetch_size(), bridge->gart_bus_addr); in agp_add_bridge()
306 list_add(&bridge->list, &agp_bridges); in agp_add_bridge()
310 agp_backend_cleanup(bridge); in agp_add_bridge()
312 module_put(bridge->driver->owner); in agp_add_bridge()
314 agp_put_bridge(bridge); in agp_add_bridge()
320 void agp_remove_bridge(struct agp_bridge_data *bridge) in agp_remove_bridge() argument
322 agp_backend_cleanup(bridge); in agp_remove_bridge()
323 list_del(&bridge->list); in agp_remove_bridge()
326 module_put(bridge->driver->owner); in agp_remove_bridge()