61 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * ALSA sequencer /proc interface4 * Copyright (c) 1998 by Frank van de Pol <fvdpol@coil.demon.nl>5 */6 7#include <linux/init.h>8#include <linux/export.h>9#include <sound/core.h>10 11#include "seq_info.h"12#include "seq_clientmgr.h"13#include "seq_timer.h"14 15static struct snd_info_entry *queues_entry;16static struct snd_info_entry *clients_entry;17static struct snd_info_entry *timer_entry;18 19 20static struct snd_info_entry * __init21create_info_entry(char *name, void (*read)(struct snd_info_entry *,22 struct snd_info_buffer *))23{24 struct snd_info_entry *entry;25 26 entry = snd_info_create_module_entry(THIS_MODULE, name, snd_seq_root);27 if (entry == NULL)28 return NULL;29 entry->content = SNDRV_INFO_CONTENT_TEXT;30 entry->c.text.read = read;31 if (snd_info_register(entry) < 0) {32 snd_info_free_entry(entry);33 return NULL;34 }35 return entry;36}37 38void snd_seq_info_done(void)39{40 snd_info_free_entry(queues_entry);41 snd_info_free_entry(clients_entry);42 snd_info_free_entry(timer_entry);43}44 45/* create all our /proc entries */46int __init snd_seq_info_init(void)47{48 queues_entry = create_info_entry("queues",49 snd_seq_info_queues_read);50 clients_entry = create_info_entry("clients",51 snd_seq_info_clients_read);52 timer_entry = create_info_entry("timer", snd_seq_info_timer_read);53 if (!queues_entry || !clients_entry || !timer_entry)54 goto error;55 return 0;56 57 error:58 snd_seq_info_done();59 return -ENOMEM;60}61