diff options
Diffstat (limited to 'sound/isa/gus/gus_mem_proc.c')
| -rw-r--r-- | sound/isa/gus/gus_mem_proc.c | 75 |
1 files changed, 21 insertions, 54 deletions
diff --git a/sound/isa/gus/gus_mem_proc.c b/sound/isa/gus/gus_mem_proc.c index 886763f1213..2ccb3fadd7b 100644 --- a/sound/isa/gus/gus_mem_proc.c +++ b/sound/isa/gus/gus_mem_proc.c @@ -1,5 +1,5 @@ /* - * Copyright (c) by Jaroslav Kysela <perex@suse.cz> + * Copyright (c) by Jaroslav Kysela <perex@perex.cz> * GUS's memory access via proc filesystem * * @@ -19,86 +19,53 @@ * */ -#include <sound/driver.h> #include <linux/slab.h> #include <sound/core.h> #include <sound/gus.h> #include <sound/info.h> -typedef struct gus_proc_private { +struct gus_proc_private { int rom; /* data are in ROM */ unsigned int address; unsigned int size; - snd_gus_card_t * gus; -} gus_proc_private_t; + struct snd_gus_card * gus; +}; -static long snd_gf1_mem_proc_dump(snd_info_entry_t *entry, void *file_private_data, - struct file *file, char __user *buf, - unsigned long count, unsigned long pos) +static ssize_t snd_gf1_mem_proc_dump(struct snd_info_entry *entry, + void *file_private_data, + struct file *file, char __user *buf, + size_t count, loff_t pos) { - long size; - gus_proc_private_t *priv = entry->private_data; - snd_gus_card_t *gus = priv->gus; + struct gus_proc_private *priv = entry->private_data; + struct snd_gus_card *gus = priv->gus; int err; - size = count; - if (pos + size > priv->size) - size = (long)priv->size - pos; - if (size > 0) { - if ((err = snd_gus_dram_read(gus, buf, pos, size, priv->rom)) < 0) - return err; - return size; - } - return 0; + err = snd_gus_dram_read(gus, buf, pos, count, priv->rom); + if (err < 0) + return err; + return count; } -static long long snd_gf1_mem_proc_llseek(snd_info_entry_t *entry, - void *private_file_data, - struct file *file, - long long offset, - int orig) -{ - gus_proc_private_t *priv = entry->private_data; - - switch (orig) { - case 0: /* SEEK_SET */ - file->f_pos = offset; - break; - case 1: /* SEEK_CUR */ - file->f_pos += offset; - break; - case 2: /* SEEK_END, offset is negative */ - file->f_pos = priv->size + offset; - break; - default: - return -EINVAL; - } - if (file->f_pos > priv->size) - file->f_pos = priv->size; - return file->f_pos; -} - -static void snd_gf1_mem_proc_free(snd_info_entry_t *entry) +static void snd_gf1_mem_proc_free(struct snd_info_entry *entry) { - gus_proc_private_t *priv = entry->private_data; + struct gus_proc_private *priv = entry->private_data; kfree(priv); } static struct snd_info_entry_ops snd_gf1_mem_proc_ops = { .read = snd_gf1_mem_proc_dump, - .llseek = snd_gf1_mem_proc_llseek, }; -int snd_gf1_mem_proc_init(snd_gus_card_t * gus) +int snd_gf1_mem_proc_init(struct snd_gus_card * gus) { int idx; char name[16]; - gus_proc_private_t *priv; - snd_info_entry_t *entry; + struct gus_proc_private *priv; + struct snd_info_entry *entry; for (idx = 0; idx < 4; idx++) { if (gus->gf1.mem_alloc.banks_8[idx].size > 0) { - priv = kcalloc(1, sizeof(*priv), GFP_KERNEL); + priv = kzalloc(sizeof(*priv), GFP_KERNEL); if (priv == NULL) return -ENOMEM; priv->gus = gus; @@ -115,7 +82,7 @@ int snd_gf1_mem_proc_init(snd_gus_card_t * gus) } for (idx = 0; idx < 4; idx++) { if (gus->gf1.rom_present & (1 << idx)) { - priv = kcalloc(1, sizeof(*priv), GFP_KERNEL); + priv = kzalloc(sizeof(*priv), GFP_KERNEL); if (priv == NULL) return -ENOMEM; priv->rom = 1; |
