ALSA: emu10k1: Make uapi/emu10k1.h compilable again
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>
This commit is contained in:
parent
a032ff0e80
commit
2e46886763
@ -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 */
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user