}
-static void xgi_submit_cmdlist(struct xgi_info * info,
- const struct xgi_cmd_info * pCmdInfo)
+int xgi_submit_cmdlist(struct drm_device * dev, void * data,
+ struct drm_file * filp)
{
+ struct xgi_info *const info = dev->dev_private;
+ const struct xgi_cmd_info *const pCmdInfo =
+ (struct xgi_cmd_info *) data;
const unsigned int cmd = get_batch_command(pCmdInfo->type);
u32 begin[4];
}
info->cmdring.last_ptr = xgi_find_pcie_virt(info, pCmdInfo->hw_addr);
-}
-
-
-int xgi_submit_cmdlist_ioctl(DRM_IOCTL_ARGS)
-{
- DRM_DEVICE;
- struct xgi_cmd_info cmd_list;
- struct xgi_info *info = dev->dev_private;
-
- DRM_COPY_FROM_USER_IOCTL(cmd_list,
- (struct xgi_cmd_info __user *) data,
- sizeof(cmd_list));
-
- if (cmd_list.type > BTYPE_CTRL) {
- return -EINVAL;
- }
-
- xgi_submit_cmdlist(info, &cmd_list);
return 0;
}
}
-int xgi_state_change_ioctl(DRM_IOCTL_ARGS)
+int xgi_state_change_ioctl(struct drm_device * dev, void * data,
+ struct drm_file * filp)
{
- DRM_DEVICE;
- struct xgi_state_info state;
+ struct xgi_state_info *const state =
+ (struct xgi_state_info *) data;
struct xgi_info *info = dev->dev_private;
- DRM_COPY_FROM_USER_IOCTL(state, (struct xgi_state_info __user *) data,
- sizeof(state));
- return xgi_state_change(info, state._toState, state._fromState);
+ return xgi_state_change(info, state->_toState, state->_fromState);
}
xgi_PCI_IDS
};
-static int xgi_bootstrap(DRM_IOCTL_ARGS);
+static int xgi_bootstrap(struct drm_device *, void *, struct drm_file *);
-static drm_ioctl_desc_t xgi_ioctls[] = {
- [DRM_IOCTL_NR(DRM_XGI_BOOTSTRAP)] = {xgi_bootstrap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
+static struct drm_ioctl_desc xgi_ioctls[] = {
+ DRM_IOCTL_DEF(DRM_XGI_BOOTSTRAP, xgi_bootstrap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
- [DRM_IOCTL_NR(DRM_XGI_FB_ALLOC)] = {xgi_fb_alloc_ioctl, DRM_AUTH},
- [DRM_IOCTL_NR(DRM_XGI_FB_FREE)] = {xgi_fb_free_ioctl, DRM_AUTH},
+ DRM_IOCTL_DEF(DRM_XGI_FB_ALLOC, xgi_fb_alloc_ioctl, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_XGI_FB_FREE, xgi_fb_free_ioctl, DRM_AUTH),
- [DRM_IOCTL_NR(DRM_XGI_PCIE_ALLOC)] = {xgi_pcie_alloc_ioctl, DRM_AUTH},
- [DRM_IOCTL_NR(DRM_XGI_PCIE_FREE)] = {xgi_pcie_free_ioctl, DRM_AUTH},
+ DRM_IOCTL_DEF(DRM_XGI_PCIE_ALLOC, xgi_pcie_alloc_ioctl, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_XGI_PCIE_FREE, xgi_pcie_free_ioctl, DRM_AUTH),
- [DRM_IOCTL_NR(DRM_XGI_GE_RESET)] = {xgi_ge_reset_ioctl, DRM_AUTH},
- [DRM_IOCTL_NR(DRM_XGI_DUMP_REGISTER)] = {xgi_dump_register_ioctl, DRM_AUTH},
- [DRM_IOCTL_NR(DRM_XGI_DEBUG_INFO)] = {xgi_restore_registers_ioctl, DRM_AUTH},
- [DRM_IOCTL_NR(DRM_XGI_SUBMIT_CMDLIST)] = {xgi_submit_cmdlist_ioctl, DRM_AUTH},
- [DRM_IOCTL_NR(DRM_XGI_TEST_RWINKERNEL)] = {xgi_test_rwinkernel_ioctl, DRM_AUTH},
- [DRM_IOCTL_NR(DRM_XGI_STATE_CHANGE)] = {xgi_state_change_ioctl, DRM_AUTH|DRM_MASTER},
+ DRM_IOCTL_DEF(DRM_XGI_GE_RESET, xgi_ge_reset_ioctl, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_XGI_DUMP_REGISTER, xgi_dump_register_ioctl, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_XGI_DEBUG_INFO, xgi_restore_registers_ioctl, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_XGI_SUBMIT_CMDLIST, xgi_submit_cmdlist, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_XGI_TEST_RWINKERNEL, xgi_test_rwinkernel_ioctl, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_XGI_STATE_CHANGE, xgi_state_change_ioctl, DRM_AUTH|DRM_MASTER),
};
static const int xgi_max_ioctl = DRM_ARRAY_SIZE(xgi_ioctls);
static int probe(struct pci_dev *pdev, const struct pci_device_id *ent);
static int xgi_driver_load(struct drm_device *dev, unsigned long flags);
static int xgi_driver_unload(struct drm_device *dev);
-static void xgi_driver_preclose(struct drm_device * dev, DRMFILE filp);
-static void xgi_driver_lastclose(drm_device_t * dev);
+static void xgi_driver_preclose(struct drm_device * dev,
+ struct drm_file * filp);
+static void xgi_driver_lastclose(struct drm_device * dev);
static irqreturn_t xgi_kern_isr(DRM_IRQ_ARGS);
void xgi_kern_isr_bh(struct drm_device *dev);
-int xgi_bootstrap(DRM_IOCTL_ARGS)
+int xgi_bootstrap(struct drm_device * dev, void * data,
+ struct drm_file * filp)
{
- DRM_DEVICE;
struct xgi_info *info = dev->dev_private;
- struct xgi_bootstrap bs;
+ struct xgi_bootstrap * bs = (struct xgi_bootstrap *) data;
struct drm_map_list *maplist;
int err;
- DRM_COPY_FROM_USER_IOCTL(bs, (struct xgi_bootstrap __user *) data,
- sizeof(bs));
-
if (info->mmio_map == NULL) {
err = drm_addmap(dev, info->mmio.base, info->mmio.size,
_DRM_REGISTERS, _DRM_KERNEL,
}
- info->pcie.size = bs.gart.size;
+ info->pcie.size = bs->gart.size;
/* Init the resource manager */
if (!info->pcie_heap.initialized) {
return -EINVAL;
}
- bs.gart = *info->pcie_map;
- bs.gart.handle = (void *)(unsigned long) maplist->user_token;
- DRM_COPY_TO_USER_IOCTL((struct xgi_bootstrap __user *) data,
- bs, sizeof(bs));
-
+ bs->gart = *info->pcie_map;
+ bs->gart.handle = (void *)(unsigned long) maplist->user_token;
return 0;
}
-void xgi_driver_preclose(struct drm_device * dev, DRMFILE filp)
+void xgi_driver_preclose(struct drm_device * dev, struct drm_file * filp)
{
struct xgi_info * info = dev->dev_private;
}
-void xgi_driver_lastclose(drm_device_t * dev)
+void xgi_driver_lastclose(struct drm_device * dev)
{
struct xgi_info * info = dev->dev_private;
struct list_head list;
unsigned long offset;
unsigned long size;
- DRMFILE filp;
+ struct drm_file * filp;
unsigned int owner;
};
extern struct xgi_mem_block *xgi_mem_alloc(struct xgi_mem_heap * heap,
unsigned long size, enum PcieOwner owner);
extern int xgi_mem_free(struct xgi_mem_heap * heap, unsigned long offset,
- DRMFILE filp);
+ struct drm_file * filp);
extern int xgi_mem_heap_init(struct xgi_mem_heap * heap, unsigned int start,
unsigned int end);
extern void xgi_mem_heap_cleanup(struct xgi_mem_heap * heap);
extern int xgi_fb_heap_init(struct xgi_info * info);
extern int xgi_fb_alloc(struct xgi_info * info, struct xgi_mem_alloc * alloc,
- DRMFILE filp);
+ struct drm_file * filp);
extern int xgi_fb_free(struct xgi_info * info, unsigned long offset,
- DRMFILE filp);
+ struct drm_file * filp);
extern int xgi_pcie_heap_init(struct xgi_info * info);
extern void xgi_pcie_lut_cleanup(struct xgi_info * info);
extern int xgi_pcie_alloc(struct xgi_info * info,
- struct xgi_mem_alloc * alloc, DRMFILE filp);
+ struct xgi_mem_alloc * alloc, struct drm_file * filp);
extern int xgi_pcie_free(struct xgi_info * info, unsigned long offset,
- DRMFILE filp);
+ struct drm_file * filp);
extern void *xgi_find_pcie_virt(struct xgi_info * info, u32 address);
-extern void xgi_pcie_free_all(struct xgi_info *, DRMFILE);
-extern void xgi_fb_free_all(struct xgi_info *, DRMFILE);
-
-extern int xgi_fb_alloc_ioctl(DRM_IOCTL_ARGS);
-extern int xgi_fb_free_ioctl(DRM_IOCTL_ARGS);
-extern int xgi_pcie_alloc_ioctl(DRM_IOCTL_ARGS);
-extern int xgi_pcie_free_ioctl(DRM_IOCTL_ARGS);
-extern int xgi_ge_reset_ioctl(DRM_IOCTL_ARGS);
-extern int xgi_dump_register_ioctl(DRM_IOCTL_ARGS);
-extern int xgi_restore_registers_ioctl(DRM_IOCTL_ARGS);
-extern int xgi_submit_cmdlist_ioctl(DRM_IOCTL_ARGS);
-extern int xgi_test_rwinkernel_ioctl(DRM_IOCTL_ARGS);
-extern int xgi_state_change_ioctl(DRM_IOCTL_ARGS);
+extern void xgi_pcie_free_all(struct xgi_info *, struct drm_file *);
+extern void xgi_fb_free_all(struct xgi_info *, struct drm_file *);
+
+extern int xgi_fb_alloc_ioctl(struct drm_device * dev, void * data,
+ struct drm_file * filp);
+extern int xgi_fb_free_ioctl(struct drm_device * dev, void * data,
+ struct drm_file * filp);
+extern int xgi_pcie_alloc_ioctl(struct drm_device * dev, void * data,
+ struct drm_file * filp);
+extern int xgi_pcie_free_ioctl(struct drm_device * dev, void * data,
+ struct drm_file * filp);
+extern int xgi_ge_reset_ioctl(struct drm_device * dev, void * data,
+ struct drm_file * filp);
+extern int xgi_dump_register_ioctl(struct drm_device * dev, void * data,
+ struct drm_file * filp);
+extern int xgi_restore_registers_ioctl(struct drm_device * dev, void * data,
+ struct drm_file * filp);
+extern int xgi_submit_cmdlist(struct drm_device * dev, void * data,
+ struct drm_file * filp);
+extern int xgi_test_rwinkernel_ioctl(struct drm_device * dev, void * data,
+ struct drm_file * filp);
+extern int xgi_state_change_ioctl(struct drm_device * dev, void * data,
+ struct drm_file * filp);
#endif
block->offset = 0;
block->size = 0;
block->owner = PCIE_INVALID;
- block->filp = (DRMFILE) -1;
+ block->filp = (struct drm_file *) -1;
return block;
}
}
int xgi_mem_free(struct xgi_mem_heap * heap, unsigned long offset,
- DRMFILE filp)
+ struct drm_file * filp)
{
struct xgi_mem_block *used_block = NULL, *block;
struct xgi_mem_block *prev, *next;
int xgi_fb_alloc(struct xgi_info * info, struct xgi_mem_alloc * alloc,
- DRMFILE filp)
+ struct drm_file * filp)
{
struct xgi_mem_block *block;
}
-int xgi_fb_alloc_ioctl(DRM_IOCTL_ARGS)
+int xgi_fb_alloc_ioctl(struct drm_device * dev, void * data,
+ struct drm_file * filp)
{
- DRM_DEVICE;
- struct xgi_mem_alloc alloc;
+ struct xgi_mem_alloc *alloc =
+ (struct xgi_mem_alloc *) data;
struct xgi_info *info = dev->dev_private;
- int err;
- DRM_COPY_FROM_USER_IOCTL(alloc, (struct xgi_mem_alloc __user *) data,
- sizeof(alloc));
-
- err = xgi_fb_alloc(info, & alloc, filp);
- if (err) {
- return err;
- }
-
- DRM_COPY_TO_USER_IOCTL((struct xgi_mem_alloc __user *) data,
- alloc, sizeof(alloc));
-
- return 0;
+ return xgi_fb_alloc(info, alloc, filp);
}
-int xgi_fb_free(struct xgi_info * info, unsigned long offset, DRMFILE filp)
+int xgi_fb_free(struct xgi_info * info, unsigned long offset,
+ struct drm_file * filp)
{
int err = 0;
}
-int xgi_fb_free_ioctl(DRM_IOCTL_ARGS)
+int xgi_fb_free_ioctl(struct drm_device * dev, void * data,
+ struct drm_file * filp)
{
- DRM_DEVICE;
struct xgi_info *info = dev->dev_private;
- u32 offset;
-
- DRM_COPY_FROM_USER_IOCTL(offset, (unsigned long __user *) data,
- sizeof(offset));
- return xgi_fb_free(info, offset, filp);
+ return xgi_fb_free(info, *(u32 *) data, filp);
}
/**
* Free all blocks associated with a particular file handle.
*/
-void xgi_fb_free_all(struct xgi_info * info, DRMFILE filp)
+void xgi_fb_free_all(struct xgi_info * info, struct drm_file * filp)
{
if (!info->fb_heap.initialized) {
return;
#include "xgi_drv.h"
#include "xgi_regs.h"
-int xgi_ge_reset_ioctl(DRM_IOCTL_ARGS)
+int xgi_ge_reset_ioctl(struct drm_device * dev, void * data,
+ struct drm_file * filp)
{
- DRM_DEVICE;
struct xgi_info *info = dev->dev_private;
xgi_disable_ge(info);
}
-int xgi_dump_register_ioctl(DRM_IOCTL_ARGS)
+int xgi_dump_register_ioctl(struct drm_device * dev, void * data,
+ struct drm_file * filp)
{
- DRM_DEVICE;
struct xgi_info *info = dev->dev_private;
xgi_dump_register(info);
-
return 0;
}
-int xgi_restore_registers_ioctl(DRM_IOCTL_ARGS)
+int xgi_restore_registers_ioctl(struct drm_device * dev, void * data,
+ struct drm_file * filp)
{
- DRM_DEVICE;
struct xgi_info *info = dev->dev_private;
OUT3X5B(info->mmio_map, 0x13, 0);
OUT3X5B(info->mmio_map, 0x8b, 2);
-
return 0;
}
static struct xgi_mem_block *xgi_pcie_scratchpad_block = NULL;
static int xgi_pcie_free_locked(struct xgi_info * info,
- unsigned long offset, DRMFILE filp);
+ unsigned long offset, struct drm_file * filp);
static int xgi_pcie_lut_init(struct xgi_info * info)
{
int xgi_pcie_alloc(struct xgi_info * info, struct xgi_mem_alloc * alloc,
- DRMFILE filp)
+ struct drm_file * filp)
{
struct xgi_mem_block *block;
}
-int xgi_pcie_alloc_ioctl(DRM_IOCTL_ARGS)
+int xgi_pcie_alloc_ioctl(struct drm_device * dev, void * data,
+ struct drm_file * filp)
{
- DRM_DEVICE;
- struct xgi_mem_alloc alloc;
+ struct xgi_mem_alloc *const alloc =
+ (struct xgi_mem_alloc *) data;
struct xgi_info *info = dev->dev_private;
- int err;
-
- DRM_COPY_FROM_USER_IOCTL(alloc, (struct xgi_mem_alloc __user *) data,
- sizeof(alloc));
-
- err = xgi_pcie_alloc(info, & alloc, filp);
- if (err) {
- return err;
- }
-
- DRM_COPY_TO_USER_IOCTL((struct xgi_mem_alloc __user *) data,
- alloc, sizeof(alloc));
- return 0;
+ return xgi_pcie_alloc(info, alloc, filp);
}
/**
* Free all blocks associated with a particular file handle.
*/
-void xgi_pcie_free_all(struct xgi_info * info, DRMFILE filp)
+void xgi_pcie_free_all(struct xgi_info * info, struct drm_file * filp)
{
if (!info->pcie_heap.initialized) {
return;
}
-int xgi_pcie_free_locked(struct xgi_info * info,
- unsigned long offset, DRMFILE filp)
+int xgi_pcie_free_locked(struct xgi_info * info, unsigned long offset,
+ struct drm_file * filp)
{
const bool isvertex = (xgi_pcie_vertex_block
&& (xgi_pcie_vertex_block->offset == offset));
}
-int xgi_pcie_free(struct xgi_info * info, unsigned long offset, DRMFILE filp)
+int xgi_pcie_free(struct xgi_info * info, unsigned long offset,
+ struct drm_file * filp)
{
int err;
}
-int xgi_pcie_free_ioctl(DRM_IOCTL_ARGS)
+int xgi_pcie_free_ioctl(struct drm_device * dev, void * data,
+ struct drm_file * filp)
{
- DRM_DEVICE;
struct xgi_info *info = dev->dev_private;
- u32 offset;
-
- DRM_COPY_FROM_USER_IOCTL(offset, (unsigned long __user *) data,
- sizeof(offset));
- return xgi_pcie_free(info, offset, filp);
+ return xgi_pcie_free(info, *(u32 *) data, filp);
}
/*
address -- GE hw address
*/
-int xgi_test_rwinkernel_ioctl(DRM_IOCTL_ARGS)
+int xgi_test_rwinkernel_ioctl(struct drm_device * dev, void * data,
+ struct drm_file * filp)
{
- DRM_DEVICE;
struct xgi_info *info = dev->dev_private;
- u32 address;
+ u32 address = *(u32 *) data;
u32 *virtaddr = 0;
- DRM_COPY_FROM_USER_IOCTL(address, (unsigned long __user *) data,
- sizeof(address));
DRM_INFO("input GE HW addr is 0x%x\n", address);