Messages in this thread Patch in this message | | | Date | Sun, 24 Oct 2004 00:28:18 +1000 | From | Dave Airlie <> | Subject | Re: [PATCH} Trivial - fix drm_agp symbol export |
| |
> > Sorry, wrong API. At least export the individual functions and use them > directly (and without the symbol_get abnomination that's not any better > than inter_module_*).
I wonder what the reasoning behind the old drm_agp structure was in the first place?
What about this patch?
The 2.6 kernel module stuff should sort out the dependencies itself, I haven't had a chance to test this yet....
Dave. ===== drivers/char/drm/drm_agpsupport.h 1.29 vs edited ===== --- 1.29/drivers/char/drm/drm_agpsupport.h 2004-09-05 09:22:42 +10:00 +++ edited/drivers/char/drm/drm_agpsupport.h 2004-10-24 00:21:46 +10:00 @@ -36,14 +36,6 @@ #if __OS_HAS_AGP -#define DRM_AGP_GET (drm_agp_t *)inter_module_get("drm_agp") -#define DRM_AGP_PUT inter_module_put("drm_agp") - -/** - * Pointer to the drm_agp_t structure made available by the agpgart module. - */ -static const drm_agp_t *drm_agp = NULL; - /** * AGP information ioctl. * @@ -64,7 +56,7 @@ DRM_AGP_KERN *kern; drm_agp_info_t info; - if (!dev->agp || !dev->agp->acquired || !drm_agp->copy_info) + if (!dev->agp || !dev->agp->acquired) return -EINVAL; kern = &dev->agp->agp_info; @@ -93,7 +85,7 @@ * \return zero on success or a negative number on failure. * * Verifies the AGP device hasn't been acquired before and calls - * drm_agp->acquire(). + * agp_backend_acquire(). */ int DRM(agp_acquire)(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) @@ -106,9 +98,7 @@ return -ENODEV; if (dev->agp->acquired) return -EBUSY; - if (!drm_agp->acquire) - return -EINVAL; - if ((retcode = drm_agp->acquire())) + if ((retcode = agp_backend_acquire())) return retcode; dev->agp->acquired = 1; return 0; @@ -123,7 +113,7 @@ * \param arg user argument. * \return zero on success or a negative number on failure. * - * Verifies the AGP device has been acquired and calls drm_agp->release(). + * Verifies the AGP device has been acquired and calls agp_backend_release(). */ int DRM(agp_release)(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) @@ -131,9 +121,9 @@ drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev; - if (!dev->agp || !dev->agp->acquired || !drm_agp->release) + if (!dev->agp || !dev->agp->acquired) return -EINVAL; - drm_agp->release(); + agp_backend_release(); dev->agp->acquired = 0; return 0; @@ -142,12 +132,11 @@ /** * Release the AGP device. * - * Calls drm_agp->release(). + * Calls agp_backend_release(). */ void DRM(agp_do_release)(void) { - if (drm_agp->release) - drm_agp->release(); + agp_backend_release(); } /** @@ -169,14 +158,14 @@ drm_device_t *dev = priv->dev; drm_agp_mode_t mode; - if (!dev->agp || !dev->agp->acquired || !drm_agp->enable) + if (!dev->agp || !dev->agp->acquired) return -EINVAL; if (copy_from_user(&mode, (drm_agp_mode_t __user *)arg, sizeof(mode))) return -EFAULT; dev->agp->mode = mode.mode; - drm_agp->enable(mode.mode); + agp_enable(mode.mode); dev->agp->base = dev->agp->agp_info.aper_base; dev->agp->enabled = 1; return 0; @@ -325,7 +314,7 @@ int retcode; int page; - if (!dev->agp || !dev->agp->acquired || !drm_agp->bind_memory) + if (!dev->agp || !dev->agp->acquired) return -EINVAL; if (copy_from_user(&request, (drm_agp_binding_t __user *)arg, sizeof(request))) return -EFAULT; @@ -399,25 +388,17 @@ { drm_agp_head_t *head = NULL; - drm_agp = DRM_AGP_GET; - if (drm_agp) { - if (!(head = DRM(alloc)(sizeof(*head), DRM_MEM_AGPLISTS))) - return NULL; - memset((void *)head, 0, sizeof(*head)); - drm_agp->copy_info(&head->agp_info); - if (head->agp_info.chipset == NOT_SUPPORTED) { - DRM(free)(head, sizeof(*head), DRM_MEM_AGPLISTS); - return NULL; - } - head->memory = NULL; -#if LINUX_VERSION_CODE <= 0x020408 - head->cant_use_aperture = 0; - head->page_mask = ~(0xfff); -#else - head->cant_use_aperture = head->agp_info.cant_use_aperture; - head->page_mask = head->agp_info.page_mask; -#endif + if (!(head = DRM(alloc)(sizeof(*head), DRM_MEM_AGPLISTS))) + return NULL; + memset((void *)head, 0, sizeof(*head)); + agp_copy_info(&head->agp_info); + if (head->agp_info.chipset == NOT_SUPPORTED) { + DRM(free)(head, sizeof(*head), DRM_MEM_AGPLISTS); + return NULL; } + head->memory = NULL; + head->cant_use_aperture = head->agp_info.cant_use_aperture; + head->page_mask = head->agp_info.page_mask; return head; } @@ -428,41 +409,37 @@ */ void DRM(agp_uninit)(void) { - DRM_AGP_PUT; - drm_agp = NULL; } /** Calls drm_agp->allocate_memory() */ DRM_AGP_MEM *DRM(agp_allocate_memory)(size_t pages, u32 type) { - if (!drm_agp->allocate_memory) - return NULL; - return drm_agp->allocate_memory(pages, type); + return agp_allocate_memory(pages, type); } /** Calls drm_agp->free_memory() */ int DRM(agp_free_memory)(DRM_AGP_MEM *handle) { - if (!handle || !drm_agp->free_memory) + if (!handle) return 0; - drm_agp->free_memory(handle); + agp_free_memory(handle); return 1; } /** Calls drm_agp->bind_memory() */ int DRM(agp_bind_memory)(DRM_AGP_MEM *handle, off_t start) { - if (!handle || !drm_agp->bind_memory) + if (!handle) return -EINVAL; - return drm_agp->bind_memory(handle, start); + return agp_bind_memory(handle, start); } /** Calls drm_agp->unbind_memory() */ int DRM(agp_unbind_memory)(DRM_AGP_MEM *handle) { - if (!handle || !drm_agp->unbind_memory) + if (!handle) return -EINVAL; - return drm_agp->unbind_memory(handle); + return agp_unbind_memory(handle); } #endif /* __OS_HAS_AGP */ | |