1
2
3
4
5
6 #ifndef __SND_SEQ_PORTS_H
7 #define __SND_SEQ_PORTS_H
8
9 #include <sound/seq_kernel.h>
10 #include "seq_lock.h"
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 struct snd_seq_subscribers {
29 struct snd_seq_port_subscribe info;
30 struct list_head src_list;
31 struct list_head dest_list;
32 atomic_t ref_count;
33 };
34
35 struct snd_seq_port_subs_info {
36 struct list_head list_head;
37 unsigned int count;
38 unsigned int exclusive: 1;
39 struct rw_semaphore list_mutex;
40 rwlock_t list_lock;
41 int (*open)(void *private_data, struct snd_seq_port_subscribe *info);
42 int (*close)(void *private_data, struct snd_seq_port_subscribe *info);
43 };
44
45 struct snd_seq_client_port {
46
47 struct snd_seq_addr addr;
48 struct module *owner;
49 char name[64];
50 struct list_head list;
51 snd_use_lock_t use_lock;
52
53
54 struct snd_seq_port_subs_info c_src;
55 struct snd_seq_port_subs_info c_dest;
56
57 int (*event_input)(struct snd_seq_event *ev, int direct, void *private_data,
58 int atomic, int hop);
59 void (*private_free)(void *private_data);
60 void *private_data;
61 unsigned int closing : 1;
62 unsigned int timestamping: 1;
63 unsigned int time_real: 1;
64 int time_queue;
65
66
67 unsigned int capability;
68 unsigned int type;
69
70
71 int midi_channels;
72 int midi_voices;
73 int synth_voices;
74
75 };
76
77 struct snd_seq_client;
78
79
80 struct snd_seq_client_port *snd_seq_port_use_ptr(struct snd_seq_client *client, int num);
81
82
83 struct snd_seq_client_port *snd_seq_port_query_nearest(struct snd_seq_client *client,
84 struct snd_seq_port_info *pinfo);
85
86
87 #define snd_seq_port_unlock(port) snd_use_lock_free(&(port)->use_lock)
88
89
90 struct snd_seq_client_port *snd_seq_create_port(struct snd_seq_client *client, int port_index);
91
92
93 int snd_seq_delete_port(struct snd_seq_client *client, int port);
94
95
96 int snd_seq_delete_all_ports(struct snd_seq_client *client);
97
98
99 int snd_seq_set_port_info(struct snd_seq_client_port *port,
100 struct snd_seq_port_info *info);
101
102
103 int snd_seq_get_port_info(struct snd_seq_client_port *port,
104 struct snd_seq_port_info *info);
105
106
107 int snd_seq_port_connect(struct snd_seq_client *caller,
108 struct snd_seq_client *s, struct snd_seq_client_port *sp,
109 struct snd_seq_client *d, struct snd_seq_client_port *dp,
110 struct snd_seq_port_subscribe *info);
111
112
113 int snd_seq_port_disconnect(struct snd_seq_client *caller,
114 struct snd_seq_client *s, struct snd_seq_client_port *sp,
115 struct snd_seq_client *d, struct snd_seq_client_port *dp,
116 struct snd_seq_port_subscribe *info);
117
118
119 int snd_seq_port_subscribe(struct snd_seq_client_port *port,
120 struct snd_seq_port_subscribe *info);
121
122
123 int snd_seq_port_get_subscription(struct snd_seq_port_subs_info *src_grp,
124 struct snd_seq_addr *dest_addr,
125 struct snd_seq_port_subscribe *subs);
126
127 #endif