~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/sound/isa/gus/gus_mem_proc.c

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0-or-later
  2 /*
  3  *  Copyright (c) by Jaroslav Kysela <perex@perex.cz>
  4  *  GUS's memory access via proc filesystem
  5  */
  6 
  7 #include <linux/slab.h>
  8 #include <sound/core.h>
  9 #include <sound/gus.h>
 10 #include <sound/info.h>
 11 
 12 struct gus_proc_private {
 13         int rom;                /* data are in ROM */
 14         unsigned int address;
 15         unsigned int size;
 16         struct snd_gus_card * gus;
 17 };
 18 
 19 static ssize_t snd_gf1_mem_proc_dump(struct snd_info_entry *entry,
 20                                      void *file_private_data,
 21                                      struct file *file, char __user *buf,
 22                                      size_t count, loff_t pos)
 23 {
 24         struct gus_proc_private *priv = entry->private_data;
 25         struct snd_gus_card *gus = priv->gus;
 26         int err;
 27 
 28         err = snd_gus_dram_read(gus, buf, pos, count, priv->rom);
 29         if (err < 0)
 30                 return err;
 31         return count;
 32 }                       
 33 
 34 static void snd_gf1_mem_proc_free(struct snd_info_entry *entry)
 35 {
 36         struct gus_proc_private *priv = entry->private_data;
 37         kfree(priv);
 38 }
 39 
 40 static const struct snd_info_entry_ops snd_gf1_mem_proc_ops = {
 41         .read = snd_gf1_mem_proc_dump,
 42 };
 43 
 44 int snd_gf1_mem_proc_init(struct snd_gus_card * gus)
 45 {
 46         int idx;
 47         char name[16];
 48         struct gus_proc_private *priv;
 49         struct snd_info_entry *entry;
 50 
 51         for (idx = 0; idx < 4; idx++) {
 52                 if (gus->gf1.mem_alloc.banks_8[idx].size > 0) {
 53                         priv = kzalloc(sizeof(*priv), GFP_KERNEL);
 54                         if (priv == NULL)
 55                                 return -ENOMEM;
 56                         priv->gus = gus;
 57                         sprintf(name, "gus-ram-%i", idx);
 58                         if (! snd_card_proc_new(gus->card, name, &entry)) {
 59                                 entry->content = SNDRV_INFO_CONTENT_DATA;
 60                                 entry->private_data = priv;
 61                                 entry->private_free = snd_gf1_mem_proc_free;
 62                                 entry->c.ops = &snd_gf1_mem_proc_ops;
 63                                 priv->address = gus->gf1.mem_alloc.banks_8[idx].address;
 64                                 priv->size = entry->size = gus->gf1.mem_alloc.banks_8[idx].size;
 65                         }
 66                 }
 67         }
 68         for (idx = 0; idx < 4; idx++) {
 69                 if (gus->gf1.rom_present & (1 << idx)) {
 70                         priv = kzalloc(sizeof(*priv), GFP_KERNEL);
 71                         if (priv == NULL)
 72                                 return -ENOMEM;
 73                         priv->rom = 1;
 74                         priv->gus = gus;
 75                         sprintf(name, "gus-rom-%i", idx);
 76                         if (! snd_card_proc_new(gus->card, name, &entry)) {
 77                                 entry->content = SNDRV_INFO_CONTENT_DATA;
 78                                 entry->private_data = priv;
 79                                 entry->private_free = snd_gf1_mem_proc_free;
 80                                 entry->c.ops = &snd_gf1_mem_proc_ops;
 81                                 priv->address = idx * 4096 * 1024;
 82                                 priv->size = entry->size = gus->gf1.rom_memory;
 83                         }
 84                 }
 85         }
 86         return 0;
 87 }
 88 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php