*
*/
-/** @file drm_agpsupport.c
+/*
* Support code for tying the kernel AGP support to DRM drivers and
* the DRM's AGP ioctls.
*/
*/
ret = (*dev->driver.device_is_agp)(dev);
if (ret != DRM_MIGHT_BE_AGP)
- return ret;
+ return (ret);
}
return (pci_get_capability(dev->pa.pa_pc, dev->pa.pa_tag, PCI_CAP_AGP,
int
drm_agp_info(struct drm_device * dev, drm_agp_info_t *info)
{
- struct agp_info *kern;
+ struct agp_info *kern;
- if (!dev->agp || !dev->agp->acquired)
- return EINVAL;
+ if (dev->agp == NULL || !dev->agp->acquired)
+ return (EINVAL);
kern = &dev->agp->info;
#ifndef DRM_NO_AGP
info->id_vendor = kern->ai_devid & 0xffff;
info->id_device = kern->ai_devid >> 16;
- return 0;
+ return (0);
}
int
drm_agp_info_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv)
{
- int err;
- drm_agp_info_t info;
+ drm_agp_info_t *info = data;
- err = drm_agp_info(dev, &info);
- if (err != 0)
- return err;
-
- *(drm_agp_info_t *)data = info;
- return 0;
+ return (drm_agp_info(dev, info));
}
int
drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv)
{
- return drm_agp_acquire(dev);
+ return (drm_agp_acquire(dev));
}
int
drm_agp_acquire(struct drm_device *dev)
{
#ifndef DRM_NO_AGP
- int retcode;
+ int retcode;
- if (!dev->agp || dev->agp->acquired)
- return EINVAL;
+ if (dev->agp == NULL || dev->agp->acquired)
+ return (EINVAL);
retcode = agp_acquire(dev->agp->agpdev);
if (retcode)
- return retcode;
+ return (retcode);
dev->agp->acquired = 1;
#endif
- return 0;
+ return (0);
}
int
drm_agp_release_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv)
{
- return drm_agp_release(dev);
+ return (drm_agp_release(dev));
}
int
drm_agp_release(struct drm_device * dev)
{
#ifndef DRM_NO_AGP
- if (!dev->agp || !dev->agp->acquired)
- return EINVAL;
+ if (dev->agp == NULL || !dev->agp->acquired)
+ return (EINVAL);
agp_release(dev->agp->agpdev);
dev->agp->acquired = 0;
#endif
- return 0;
+ return (0);
}
int
drm_agp_enable(struct drm_device *dev, drm_agp_mode_t mode)
{
-
+ int retcode = 0;
#ifndef DRM_NO_AGP
- if (!dev->agp || !dev->agp->acquired)
- return EINVAL;
+ if (dev->agp == NULL || !dev->agp->acquired)
+ return (EINVAL);
dev->agp->mode = mode.mode;
- agp_enable(dev->agp->agpdev, mode.mode);
- dev->agp->enabled = 1;
+ if ((retcode = agp_enable(dev->agp->agpdev, mode.mode)) == 0)
+ dev->agp->enabled = 1;
#endif
- return 0;
+ return (retcode);
}
int
drm_agp_enable_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv)
{
- drm_agp_mode_t mode;
-
- mode = *(drm_agp_mode_t *)data;
+ drm_agp_mode_t *mode = data;
- return drm_agp_enable(dev, mode);
+ return (drm_agp_enable(dev, *mode));
}
int
drm_agp_alloc(struct drm_device *dev, drm_agp_buffer_t *request)
{
#ifndef DRM_NO_AGP
- struct drm_agp_mem *entry;
- void *handle;
- unsigned long pages;
- u_int32_t type;
- struct agp_memory_info info;
+ struct drm_agp_mem *entry;
+ void *handle;
+ struct agp_memory_info info;
+ unsigned long pages;
+ u_int32_t type;
- if (!dev->agp || !dev->agp->acquired)
- return EINVAL;
+ if (dev->agp == NULL || !dev->agp->acquired)
+ return (EINVAL);
entry = drm_alloc(sizeof(*entry), DRM_MEM_AGPLISTS);
if (entry == NULL)
- return ENOMEM;
+ return (ENOMEM);
pages = (request->size + PAGE_SIZE - 1) / PAGE_SIZE;
type = (u_int32_t)request->type;
DRM_LOCK();
if (handle == NULL) {
drm_free(entry, sizeof(*entry), DRM_MEM_AGPLISTS);
- return ENOMEM;
+ return (ENOMEM);
}
entry->handle = handle;
request->physical = info.ami_physical;
#endif
- return 0;
+ return (0);
}
int
drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv)
{
- drm_agp_buffer_t request;
- int retcode;
-
- request = *(drm_agp_buffer_t *)data;
+ drm_agp_buffer_t *request = data;
+ int retcode;
DRM_LOCK();
- retcode = drm_agp_alloc(dev, &request);
+ retcode = drm_agp_alloc(dev, request);
DRM_UNLOCK();
-
- *(drm_agp_buffer_t *)data = request;
-
- return retcode;
+ return (retcode);
}
struct drm_agp_mem *
drm_agp_lookup_entry(struct drm_device *dev, void *handle)
{
- struct drm_agp_mem *entry;
+ struct drm_agp_mem *entry;
TAILQ_FOREACH(entry, &dev->agp->memory, link) {
if (entry->handle == handle)
- return entry;
+ break;
}
- return NULL;
+ return (entry);
}
int
drm_agp_unbind(struct drm_device *dev, drm_agp_binding_t *request)
{
- struct drm_agp_mem *entry;
- int retcode;
+ struct drm_agp_mem *entry;
+ int retcode;
- if (!dev->agp || !dev->agp->acquired)
- return EINVAL;
+ if (dev->agp == NULL || !dev->agp->acquired)
+ return (EINVAL);
entry = drm_agp_lookup_entry(dev, (void *)request->handle);
if (entry == NULL || !entry->bound)
- return EINVAL;
+ return (EINVAL);
DRM_UNLOCK();
retcode = drm_agp_unbind_memory(entry->handle);
if (retcode == 0)
entry->bound = 0;
- return retcode;
+ return (retcode);
}
int
drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv)
{
- drm_agp_binding_t request;
- int retcode;
-
- request = *(drm_agp_binding_t *)data;
+ drm_agp_binding_t *request = data;
+ int retcode;
DRM_LOCK();
- retcode = drm_agp_unbind(dev, &request);
+ retcode = drm_agp_unbind(dev, request);
DRM_UNLOCK();
- return retcode;
+ return (retcode);
}
int
drm_agp_bind(struct drm_device *dev, drm_agp_binding_t *request)
{
- struct drm_agp_mem *entry;
- int retcode;
- int page;
+ struct drm_agp_mem *entry;
+ int retcode, page;
- if (!dev->agp || !dev->agp->acquired)
- return EINVAL;
+ if (dev->agp == NULL || !dev->agp->acquired)
+ return (EINVAL);
DRM_DEBUG("agp_bind, page_size=%x\n", PAGE_SIZE);
entry = drm_agp_lookup_entry(dev, (void *)request->handle);
if (entry == NULL || entry->bound)
- return EINVAL;
+ return (EINVAL);
page = (request->offset + PAGE_SIZE - 1) / PAGE_SIZE;
if (retcode == 0)
entry->bound = dev->agp->base + (page << PAGE_SHIFT);
- return retcode;
+ return (retcode);
}
int
drm_agp_bind_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv)
{
- drm_agp_binding_t request;
- int retcode;
-
- request = *(drm_agp_binding_t *)data;
+ drm_agp_binding_t *request = data;
+ int retcode;
DRM_LOCK();
- retcode = drm_agp_bind(dev, &request);
+ retcode = drm_agp_bind(dev, request);
DRM_UNLOCK();
- return retcode;
+ return (retcode);
}
int
drm_agp_free(struct drm_device *dev, drm_agp_buffer_t *request)
{
- struct drm_agp_mem *entry;
+ struct drm_agp_mem *entry;
- if (!dev->agp || !dev->agp->acquired)
- return EINVAL;
+ if (dev->agp == NULL || !dev->agp->acquired)
+ return (EINVAL);
entry = drm_agp_lookup_entry(dev, (void*)request->handle);
if (entry == NULL)
- return EINVAL;
+ return (EINVAL);
TAILQ_REMOVE(&dev->agp->memory, entry, link);
drm_free(entry, sizeof(*entry), DRM_MEM_AGPLISTS);
- return 0;
+ return (0);
}
drm_agp_free_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv)
{
- drm_agp_buffer_t request;
- int retcode;
-
- request = *(drm_agp_buffer_t *)data;
+ drm_agp_buffer_t *request = data;
+ int retcode;
DRM_LOCK();
- retcode = drm_agp_free(dev, &request);
+ retcode = drm_agp_free(dev, request);
DRM_UNLOCK();
- return retcode;
+ return (retcode);
}
drm_agp_head_t *
drm_agp_init(void)
{
#ifndef DRM_NO_AGP
- struct device *agpdev;
- drm_agp_head_t *head = NULL;
- int agp_available = 1;
+ struct device *agpdev;
+ drm_agp_head_t *head = NULL;
+ int agp_available = 1;
agpdev = DRM_AGP_FIND_DEVICE();
- if (!agpdev)
+ if (agpdev == NULL)
agp_available = 0;
DRM_DEBUG("agp_available = %d\n", agp_available);
if (agp_available) {
head = drm_calloc(1, sizeof(*head), DRM_MEM_AGPLISTS);
if (head == NULL)
- return NULL;
+ return (NULL);
head->agpdev = agpdev;
agp_get_info(agpdev, &head->info);
head->base = head->info.ai_aperture_base;
TAILQ_INIT(&head->memory);
}
- return head;
+ return (head);
#else
return (NULL);
#endif
void *
drm_agp_allocate_memory(size_t pages, u32 type)
{
- struct device *agpdev;
+ struct device *agpdev;
agpdev = DRM_AGP_FIND_DEVICE();
- if (!agpdev)
- return NULL;
+ if (agpdev == NULL)
+ return (NULL);
- return agp_alloc_memory(agpdev, type, pages << AGP_PAGE_SHIFT);
+ return (agp_alloc_memory(agpdev, type, pages << AGP_PAGE_SHIFT));
}
int
drm_agp_free_memory(void *handle)
{
- struct device *agpdev;
+ struct device *agpdev;
agpdev = DRM_AGP_FIND_DEVICE();
- if (!agpdev || !handle)
- return 0;
+ if (agpdev == NULL || handle == NULL)
+ return (0);
agp_free_memory(agpdev, handle);
- return 1;
+ return (1);
}
int
drm_agp_bind_memory(void *handle, off_t start)
{
#ifndef DRM_NO_AGP
- struct device *agpdev;
+ struct device *agpdev;
agpdev = DRM_AGP_FIND_DEVICE();
- if (!agpdev || !handle)
- return EINVAL;
+ if (agpdev == NULL || handle == NULL)
+ return (EINVAL);
- return agp_bind_memory(agpdev, handle, start * PAGE_SIZE);
+ return (agp_bind_memory(agpdev, handle, start * PAGE_SIZE));
#else
- return 0;
+ return (0);
#endif
}
drm_agp_unbind_memory(void *handle)
{
#ifndef DRM_NO_AGP
- struct device *agpdev;
+ struct device *agpdev;
agpdev = DRM_AGP_FIND_DEVICE();
- if (!agpdev || !handle)
- return EINVAL;
+ if (agpdev == NULL || handle == NULL)
+ return (EINVAL);
- return agp_unbind_memory(agpdev, handle);
+ return (agp_unbind_memory(agpdev, handle));
#else
- return 0;
+ return (0);
#endif
}