1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (c) by Jaroslav Kysela <perex@perex.cz>
4 * GUS's memory access via proc filesystem
7 #include <linux/slab.h>
8 #include <sound/core.h>
10 #include <sound/info.h>
12 struct gus_proc_private
{
13 int rom
; /* data are in ROM */
16 struct snd_gus_card
* gus
;
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
)
24 struct gus_proc_private
*priv
= entry
->private_data
;
25 struct snd_gus_card
*gus
= priv
->gus
;
28 err
= snd_gus_dram_read(gus
, buf
, pos
, count
, priv
->rom
);
34 static void snd_gf1_mem_proc_free(struct snd_info_entry
*entry
)
36 struct gus_proc_private
*priv
= entry
->private_data
;
40 static const struct snd_info_entry_ops snd_gf1_mem_proc_ops
= {
41 .read
= snd_gf1_mem_proc_dump
,
44 int snd_gf1_mem_proc_init(struct snd_gus_card
* gus
)
48 struct gus_proc_private
*priv
;
49 struct snd_info_entry
*entry
;
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
);
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
;
68 for (idx
= 0; idx
< 4; idx
++) {
69 if (gus
->gf1
.rom_present
& (1 << idx
)) {
70 priv
= kzalloc(sizeof(*priv
), GFP_KERNEL
);
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
;