diff options
Diffstat (limited to 'surface.c')
-rw-r--r-- | surface.c | 24 |
1 files changed, 24 insertions, 0 deletions
@@ -33,11 +33,35 @@ long draw_lines(struct file *filp, unsigned long arg) return param->lines_num; } +long fill_rects(struct file *filp, unsigned long arg) +{ + struct surface_data *surface_data; + struct doomdev_surf_ioctl_fill_rects *param; + struct doomdev_fill_rect *rects; + int i; + + surface_data = filp->private_data; + param = (struct doomdev_surf_ioctl_fill_rects *) arg; + rects = (struct doomdev_fill_rect *) param->rects_ptr; + + mutex_lock(&surface_data->doom_data->cmd_mutex); + + for (i = 0; i < param->rects_num; i++) { + fill_rect(surface_data, rects[i]); + } + + mutex_unlock(&surface_data->doom_data->cmd_mutex); + + return param->rects_num; +} + long surface_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { switch (cmd) { case DOOMDEV_SURF_IOCTL_DRAW_LINES: return draw_lines(filp, arg); + case DOOMDEV_SURF_IOCTL_FILL_RECTS: + return fill_rects(filp, arg); default: return -1; } |