]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
ALSA: emu10k1: Make uapi/emu10k1.h compilable again
authorTakashi Iwai <tiwai@suse.de>
Fri, 20 Dec 2019 15:34:11 +0000 (16:34 +0100)
committerTakashi Iwai <tiwai@suse.de>
Fri, 20 Dec 2019 15:45:10 +0000 (16:45 +0100)
Recently we updated the content in alsa-lib uapi header files by just
copying from the latest Linus kernel uapi/*.h, and noticed that it
broke the build of some alsa-tools programs.  The reason is that we
used to have a modified version in the past, so that the program can
be built without referring to the unexported stuff like
snd_ctl_elem_id or __user prefix.

This patch attempts to restore that, i.e. dropping the stuff that
can't be referred in the user-space.  For adapting the changes in
uapi/emu10k1.h, the emu10k1 driver code is also slightly modified.
Most of changes are pointer cast.

Link: https://lore.kernel.org/r/20191220153415.2740-2-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/uapi/sound/emu10k1.h
sound/pci/emu10k1/emufx.c

index 042c5a6f16ee6e3e0e90471da2db136b9a850b96..c1150e4d02315ff0871fcdff5bc22f66f0d94145 100644 (file)
@@ -23,9 +23,6 @@
 #ifndef _UAPI__SOUND_EMU10K1_H
 #define _UAPI__SOUND_EMU10K1_H
 
-#include <linux/types.h>
-#include <sound/asound.h>
-
 /*
  * ---- FX8010 ----
  */
@@ -282,8 +279,22 @@ struct snd_emu10k1_fx8010_info {
 #define EMU10K1_GPR_TRANSLATION_TREBLE         3
 #define EMU10K1_GPR_TRANSLATION_ONOFF          4
 
+enum emu10k1_ctl_elem_iface {
+       EMU10K1_CTL_ELEM_IFACE_MIXER = 2,       /* virtual mixer device */
+       EMU10K1_CTL_ELEM_IFACE_PCM = 3,         /* PCM device */
+};
+
+struct emu10k1_ctl_elem_id {
+       unsigned int pad;               /* don't use */
+       int iface;                      /* interface identifier */
+       unsigned int device;            /* device/client number */
+       unsigned int subdevice;         /* subdevice (substream) number */
+       unsigned char name[44];         /* ASCII name of item */
+       unsigned int index;             /* index of item */
+};
+
 struct snd_emu10k1_fx8010_control_gpr {
-       struct snd_ctl_elem_id id;              /* full control ID definition */
+       struct emu10k1_ctl_elem_id id;  /* full control ID definition */
        unsigned int vcount;            /* visible count */
        unsigned int count;             /* count of GPR (1..16) */
        unsigned short gpr[32];         /* GPR number(s) */
@@ -296,7 +307,7 @@ struct snd_emu10k1_fx8010_control_gpr {
 
 /* old ABI without TLV support */
 struct snd_emu10k1_fx8010_control_old_gpr {
-       struct snd_ctl_elem_id id;
+       struct emu10k1_ctl_elem_id id;
        unsigned int vcount;
        unsigned int count;
        unsigned short gpr[32];
@@ -310,24 +321,24 @@ struct snd_emu10k1_fx8010_code {
        char name[128];
 
        __EMU10K1_DECLARE_BITMAP(gpr_valid, 0x200); /* bitmask of valid initializers */
-       __u32 __user *gpr_map;          /* initializers */
+       __u32 *gpr_map;                 /* initializers */
 
        unsigned int gpr_add_control_count; /* count of GPR controls to add/replace */
-       struct snd_emu10k1_fx8010_control_gpr __user *gpr_add_controls; /* GPR controls to add/replace */
+       struct snd_emu10k1_fx8010_control_gpr *gpr_add_controls; /* GPR controls to add/replace */
 
        unsigned int gpr_del_control_count; /* count of GPR controls to remove */
-       struct snd_ctl_elem_id __user *gpr_del_controls; /* IDs of GPR controls to remove */
+       struct emu10k1_ctl_elem_id *gpr_del_controls; /* IDs of GPR controls to remove */
 
        unsigned int gpr_list_control_count; /* count of GPR controls to list */
        unsigned int gpr_list_control_total; /* total count of GPR controls */
-       struct snd_emu10k1_fx8010_control_gpr __user *gpr_list_controls; /* listed GPR controls */
+       struct snd_emu10k1_fx8010_control_gpr *gpr_list_controls; /* listed GPR controls */
 
        __EMU10K1_DECLARE_BITMAP(tram_valid, 0x100); /* bitmask of valid initializers */
-       __u32 __user *tram_data_map;      /* data initializers */
-       __u32 __user *tram_addr_map;      /* map initializers */
+       __u32 *tram_data_map;             /* data initializers */
+       __u32 *tram_addr_map;             /* map initializers */
 
        __EMU10K1_DECLARE_BITMAP(code_valid, 1024); /* bitmask of valid instructions */
-       __u32 __user *code;               /* one instruction - 64 bits */
+       __u32 *code;                      /* one instruction - 64 bits */
 };
 
 struct snd_emu10k1_fx8010_tram {
@@ -371,11 +382,14 @@ struct snd_emu10k1_fx8010_pcm_rec {
 #define SNDRV_EMU10K1_IOCTL_SINGLE_STEP        _IOW ('H', 0x83, int)
 #define SNDRV_EMU10K1_IOCTL_DBG_READ   _IOR ('H', 0x84, int)
 
+#ifndef __KERNEL__
 /* typedefs for compatibility to user-space */
 typedef struct snd_emu10k1_fx8010_info emu10k1_fx8010_info_t;
 typedef struct snd_emu10k1_fx8010_control_gpr emu10k1_fx8010_control_gpr_t;
 typedef struct snd_emu10k1_fx8010_code emu10k1_fx8010_code_t;
 typedef struct snd_emu10k1_fx8010_tram emu10k1_fx8010_tram_t;
 typedef struct snd_emu10k1_fx8010_pcm_rec emu10k1_fx8010_pcm_t;
+typedef struct emu10k1_ctl_elem_id emu10k1_ctl_elem_id_t;
+#endif
 
 #endif /* _UAPI__SOUND_EMU10K1_H */
index a31adecfe608af21626c8916112668fb26f2ea16..e0e076a9c321bb42f3d8d3c341aeb319faceb906 100644 (file)
@@ -628,7 +628,7 @@ static int snd_emu10k1_code_peek(struct snd_emu10k1 *emu,
 }
 
 static struct snd_emu10k1_fx8010_ctl *
-snd_emu10k1_look_for_ctl(struct snd_emu10k1 *emu, struct snd_ctl_elem_id *id)
+snd_emu10k1_look_for_ctl(struct snd_emu10k1 *emu, struct emu10k1_ctl_elem_id *id)
 {
        struct snd_emu10k1_fx8010_ctl *ctl;
        struct snd_kcontrol *kcontrol;
@@ -714,15 +714,15 @@ static int snd_emu10k1_verify_controls(struct snd_emu10k1 *emu,
                                       bool in_kernel)
 {
        unsigned int i;
-       struct snd_ctl_elem_id __user *_id;
-       struct snd_ctl_elem_id id;
+       struct emu10k1_ctl_elem_id __user *_id;
+       struct emu10k1_ctl_elem_id id;
        struct snd_emu10k1_fx8010_control_gpr *gctl;
        int err;
        
-       for (i = 0, _id = icode->gpr_del_controls;
-            i < icode->gpr_del_control_count; i++, _id++) {
+       _id = (__force struct emu10k1_ctl_elem_id __user *)icode->gpr_del_controls;
+       for (i = 0; i < icode->gpr_del_control_count; i++, _id++) {
                if (in_kernel)
-                       id = *(__force struct snd_ctl_elem_id *)_id;
+                       id = *(__force struct emu10k1_ctl_elem_id *)_id;
                else if (copy_from_user(&id, _id, sizeof(id)))
                        return -EFAULT;
                if (snd_emu10k1_look_for_ctl(emu, &id) == NULL)
@@ -741,7 +741,8 @@ static int snd_emu10k1_verify_controls(struct snd_emu10k1 *emu,
                if (snd_emu10k1_look_for_ctl(emu, &gctl->id))
                        continue;
                down_read(&emu->card->controls_rwsem);
-               if (snd_ctl_find_id(emu->card, &gctl->id) != NULL) {
+               if (snd_ctl_find_id(emu->card,
+                                   (struct snd_ctl_elem_id *)&gctl->id)) {
                        up_read(&emu->card->controls_rwsem);
                        err = -EEXIST;
                        goto __error;
@@ -876,15 +877,16 @@ static int snd_emu10k1_del_controls(struct snd_emu10k1 *emu,
                                    bool in_kernel)
 {
        unsigned int i;
-       struct snd_ctl_elem_id id;
-       struct snd_ctl_elem_id __user *_id;
+       struct emu10k1_ctl_elem_id id;
+       struct emu10k1_ctl_elem_id __user *_id;
        struct snd_emu10k1_fx8010_ctl *ctl;
        struct snd_card *card = emu->card;
        
-       for (i = 0, _id = icode->gpr_del_controls;
-            i < icode->gpr_del_control_count; i++, _id++) {
+       _id = (__force struct emu10k1_ctl_elem_id __user *)icode->gpr_del_controls;
+
+       for (i = 0; i < icode->gpr_del_control_count; i++, _id++) {
                if (in_kernel)
-                       id = *(__force struct snd_ctl_elem_id *)_id;
+                       id = *(__force struct emu10k1_ctl_elem_id *)_id;
                else if (copy_from_user(&id, _id, sizeof(id)))
                        return -EFAULT;
                down_write(&card->controls_rwsem);