Lines Matching refs:bridge

70 	struct agp_bridge_data *bridge;
72 bridge = agp_find_bridge(pdev);
74 if (!bridge)
77 if (atomic_read(&bridge->agp_in_use))
79 atomic_inc(&bridge->agp_in_use);
80 return bridge;
87 * @bridge: the AGP backend to release
94 void agp_backend_release(struct agp_bridge_data *bridge)
97 if (bridge)
98 atomic_dec(&bridge->agp_in_use);
139 static int agp_backend_initialize(struct agp_bridge_data *bridge)
143 bridge->max_memory_agp = agp_find_max();
144 bridge->version = &agp_current_version;
146 if (bridge->driver->needs_scratch_page) {
147 struct page *page = bridge->driver->agp_alloc_page(bridge);
150 dev_err(&bridge->dev->dev,
155 bridge->scratch_page_page = page;
156 bridge->scratch_page_dma = page_to_phys(page);
158 bridge->scratch_page = bridge->driver->mask_memory(bridge,
159 bridge->scratch_page_dma, 0);
162 size_value = bridge->driver->fetch_size();
164 dev_err(&bridge->dev->dev, "can't determine aperture size\n");
168 if (bridge->driver->create_gatt_table(bridge)) {
169 dev_err(&bridge->dev->dev,
176 bridge->key_list = vzalloc(PAGE_SIZE * 4);
177 if (bridge->key_list == NULL) {
178 dev_err(&bridge->dev->dev,
187 if (bridge->driver->configure()) {
188 dev_err(&bridge->dev->dev, "error configuring host chipset\n");
192 INIT_LIST_HEAD(&bridge->mapped_list);
193 spin_lock_init(&bridge->mapped_lock);
198 if (bridge->driver->needs_scratch_page) {
199 struct page *page = bridge->scratch_page_page;
201 bridge->driver->agp_destroy_page(page, AGP_PAGE_DESTROY_UNMAP);
202 bridge->driver->agp_destroy_page(page, AGP_PAGE_DESTROY_FREE);
205 bridge->driver->free_gatt_table(bridge);
207 vfree(bridge->key_list);
208 bridge->key_list = NULL;
214 static void agp_backend_cleanup(struct agp_bridge_data *bridge)
216 if (bridge->driver->cleanup)
217 bridge->driver->cleanup();
218 if (bridge->driver->free_gatt_table)
219 bridge->driver->free_gatt_table(bridge);
221 vfree(bridge->key_list);
222 bridge->key_list = NULL;
224 if (bridge->driver->agp_destroy_page &&
225 bridge->driver->needs_scratch_page) {
226 struct page *page = bridge->scratch_page_page;
228 bridge->driver->agp_destroy_page(page, AGP_PAGE_DESTROY_UNMAP);
229 bridge->driver->agp_destroy_page(page, AGP_PAGE_DESTROY_FREE);
239 struct agp_bridge_data *bridge;
241 bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
242 if (!bridge)
245 atomic_set(&bridge->agp_in_use, 0);
246 atomic_set(&bridge->current_memory_agp, 0);
249 agp_bridge = bridge;
251 return bridge;
256 void agp_put_bridge(struct agp_bridge_data *bridge)
258 kfree(bridge);
266 int agp_add_bridge(struct agp_bridge_data *bridge)
275 if (!bridge->dev) {
282 if (!try_module_get(bridge->driver->owner)) {
283 dev_info(&bridge->dev->dev, "can't lock chipset driver\n");
288 error = agp_backend_initialize(bridge);
290 dev_info(&bridge->dev->dev,
296 dev_info(&bridge->dev->dev, "AGP aperture is %dM @ 0x%lx\n",
297 bridge->driver->fetch_size(), bridge->gart_bus_addr);
301 list_add(&bridge->list, &agp_bridges);
305 module_put(bridge->driver->owner);
307 agp_put_bridge(bridge);
313 void agp_remove_bridge(struct agp_bridge_data *bridge)
315 agp_backend_cleanup(bridge);
316 list_del(&bridge->list);
317 module_put(bridge->driver->owner);