diff options
Diffstat (limited to 'char.c')
-rw-r--r-- | char.c | 39 |
1 files changed, 37 insertions, 2 deletions
@@ -4,8 +4,10 @@ #include <linux/device.h> #include <linux/fs.h> +#include "doomdev.h" #include "util.h" #include "pci.h" +#include "surface.h" #define DOOMDEV_COUNT 256 #define DOOMDEV_NAME "doom" @@ -14,16 +16,49 @@ dev_t first; int major; int next_minor = 0; -long doom_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) +long doom_create_surface(struct file *filp, unsigned long arg) +{ + struct doomdev_ioctl_create_surface *params; + params = (struct doomdev_ioctl_create_surface *)arg; + return new_surface(params); +} + +long doom_create_texture(struct file *filp, unsigned long arg) { return -1; } -int doom_open(struct inode *inode, struct file *filp) +long doom_create_flat(struct file *filp, unsigned long arg) { return -1; } +long doom_create_colormaps(struct file *filp, unsigned long arg) +{ + return -1; +} + +long doom_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) +{ + switch (cmd) { + case DOOMDEV_IOCTL_CREATE_SURFACE: + return doom_create_surface(filp, arg); + case DOOMDEV_IOCTL_CREATE_TEXTURE: + return doom_create_texture(filp, arg); + case DOOMDEV_IOCTL_CREATE_FLAT: + return doom_create_flat(filp, arg); + case DOOMDEV_IOCTL_CREATE_COLORMAPS: + return doom_create_colormaps(filp, arg); + default: + return -EINVAL; + } +} + +int doom_open(struct inode *inode, struct file *filp) +{ + return 0; +} + struct file_operations doomdev_fops = { .owner = THIS_MODULE, .unlocked_ioctl = doom_ioctl, |