[alsa-cvslog] CVS: alsa-kernel/core/ioctl32 hwdep32.c,1.4,1.5
Brought to you by:
perex
From: Takashi I. <ti...@us...> - 2003-02-20 14:52:54
|
Update of /cvsroot/alsa/alsa-kernel/core/ioctl32 In directory sc8-pr-cvs1:/tmp/cvs-serv7920/core/ioctl32 Modified Files: hwdep32.c Log Message: - fixed compatible entries. - added the dsp loader ioctls. Index: hwdep32.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/core/ioctl32/hwdep32.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- hwdep32.c 29 Aug 2002 16:23:05 -0000 1.4 +++ hwdep32.c 20 Feb 2003 14:52:49 -0000 1.5 @@ -20,13 +20,52 @@ #include <sound/driver.h> #include <linux/time.h> +#include <linux/fs.h> #include <sound/core.h> -#include <sound/timer.h> +#include <sound/hwdep.h> #include <asm/uaccess.h> #include "ioctl32.h" +struct sndrv_hwdep_dsp_image32 { + u32 index; + unsigned char name[64]; + u32 image; /* pointer */ + u32 length; +} /* don't set packed attribute here */; + +static int _snd_ioctl32_hwdep_dsp_image(unsigned int fd, unsigned int cmd, unsigned long arg, struct file *file, unsigned int native_ctl) +{ + struct sndrv_hwdep_dsp_image data; + struct sndrv_hwdep_dsp_image data32; + mm_segment_t oldseg; + int err; + + if (copy_from_user(&data32, (void*)arg, sizeof(data32))) + return -EFAULT; + memset(&data, 0, sizeof(data)); + data.index = data32.index; + memcpy(data.name, data32.name, sizeof(data.name)); + data.image = A(data32.image); + data.length = data32.length; + oldseg = get_fs(); + set_fs(KERNEL_DS); + err = file->f_op->ioctl(file->f_dentry->d_inode, file, native_ctl, (unsigned long)&data); + set_fs(oldseg); + return err; +} + +DEFINE_ALSA_IOCTL_ENTRY(hwdep_dsp_image, hwdep_dsp_image, SNDRV_HWDEP_IOCTL_DSP_LOAD); + +#define AP(x) snd_ioctl32_##x + +enum { + SNDRV_HWDEP_IOCTL_DSP_LOAD32 = _IOW('H', 0x03, struct sndrv_hwdep_dsp_image32) +} + struct ioctl32_mapper hwdep_mappers[] = { - { SNDRV_HWDEP_IOCTL_PVERSION, NULL }, - { SNDRV_HWDEP_IOCTL_INFO, NULL }, + MAP_COMPAT(SNDRV_HWDEP_IOCTL_PVERSION), + MAP_COMPAT(SNDRV_HWDEP_IOCTL_INFO), + MAP_COMPAT(SNDRV_HWDEP_IOCTL_DSP_STATUS), + { SNDRV_HWDEP_IOCTL_DSP_LOAD32, AP(hwdep_dsp_image) }, { 0 }, }; |