#include <linux/init.h>
#include <linux/slab.h>
#include <linux/errno.h>
#include <linux/mutex.h>
#include <linux/string.h>
#include <linux/module.h>
#include <asm/byteorder.h>
#include <sound/core.h>
#include <sound/ump.h>
#include <sound/seq_kernel.h>
#include <sound/seq_device.h>
#include "seq_clientmgr.h"
#include "seq_system.h"
struct seq_ump_client;
struct seq_ump_group;
enum { … };
struct seq_ump_input_buffer { … };
struct seq_ump_client { … };
static unsigned char ump_packet_words[0x10] = …;
static unsigned char ump_group_to_seq_port(unsigned char group)
{ … }
static void seq_ump_input_receive(struct snd_ump_endpoint *ump,
const u32 *val, int words)
{ … }
static int seq_ump_process_event(struct snd_seq_event *ev, int direct,
void *private_data, int atomic, int hop)
{ … }
static int seq_ump_client_open(struct seq_ump_client *client, int dir)
{ … }
static int seq_ump_client_close(struct seq_ump_client *client, int dir)
{ … }
static int seq_ump_subscribe(void *pdata, struct snd_seq_port_subscribe *info)
{ … }
static int seq_ump_unsubscribe(void *pdata, struct snd_seq_port_subscribe *info)
{ … }
static int seq_ump_use(void *pdata, struct snd_seq_port_subscribe *info)
{ … }
static int seq_ump_unuse(void *pdata, struct snd_seq_port_subscribe *info)
{ … }
static void fill_port_info(struct snd_seq_port_info *port,
struct seq_ump_client *client,
struct snd_ump_group *group)
{ … }
static bool skip_group(struct seq_ump_client *client, struct snd_ump_group *group)
{ … }
static int seq_ump_group_init(struct seq_ump_client *client, int group_index)
{ … }
static void update_port_infos(struct seq_ump_client *client)
{ … }
static int create_ump_endpoint_port(struct seq_ump_client *client)
{ … }
static void seq_ump_client_free(struct seq_ump_client *client)
{ … }
static void setup_client_midi_version(struct seq_ump_client *client)
{ … }
static void setup_client_group_filter(struct seq_ump_client *client)
{ … }
static void handle_group_notify(struct work_struct *work)
{ … }
static int seq_ump_notify_fb_change(struct snd_ump_endpoint *ump,
struct snd_ump_block *fb)
{ … }
static int seq_ump_switch_protocol(struct snd_ump_endpoint *ump)
{ … }
static const struct snd_seq_ump_ops seq_ump_ops = …;
static int snd_seq_ump_probe(struct device *_dev)
{ … }
static int snd_seq_ump_remove(struct device *_dev)
{ … }
static struct snd_seq_driver seq_ump_driver = …;
module_snd_seq_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;