Lines Matching refs:bridge

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