2016-01-11 21:16:14 +00:00
|
|
|
# Copyright 2015 syzkaller project authors. All rights reserved.
|
|
|
|
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
include <sound/asound.h>
|
|
|
|
include <sound/asequencer.h>
|
|
|
|
|
2016-08-27 16:27:50 +00:00
|
|
|
resource fd_sndseq[fd]
|
2016-01-11 21:16:14 +00:00
|
|
|
|
2016-10-31 21:15:13 +00:00
|
|
|
syz_open_dev$sndseq(dev ptr[in, string["/dev/snd/seq"]], id const[0], flags flags[open_flags]) fd_sndseq
|
2016-08-27 16:27:50 +00:00
|
|
|
write$sndseq(fd fd_sndseq, data ptr[in, array[snd_seq_event]], len bytesize[data])
|
2016-01-11 21:16:14 +00:00
|
|
|
|
2016-08-27 16:27:50 +00:00
|
|
|
ioctl$SNDRV_SEQ_IOCTL_PVERSION(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_PVERSION], arg ptr[out, int32])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_CLIENT_ID(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_CLIENT_ID], arg ptr[out, int32])
|
|
|
|
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_SYSTEM_INFO(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_SYSTEM_INFO], arg ptr[in, snd_seq_system_info])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_RUNNING_MODE(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_RUNNING_MODE], arg ptr[in, snd_seq_running_info])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_GET_CLIENT_INFO(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_GET_CLIENT_INFO], arg ptr[out, snd_seq_client_info])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_SET_CLIENT_INFO(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_SET_CLIENT_INFO], arg ptr[in, snd_seq_client_info])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_CREATE_PORT(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_CREATE_PORT], arg ptr[in, snd_seq_port_info])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_DELETE_PORT(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_DELETE_PORT], arg ptr[in, snd_seq_port_info])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_GET_PORT_INFO(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_GET_PORT_INFO], arg ptr[out, snd_seq_port_info])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_SET_PORT_INFO(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_SET_PORT_INFO], arg ptr[in, snd_seq_port_info])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_SUBSCRIBE_PORT(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_SUBSCRIBE_PORT], arg ptr[in, snd_seq_port_subscribe])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_UNSUBSCRIBE_PORT(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_UNSUBSCRIBE_PORT], arg ptr[in, snd_seq_port_subscribe])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_CREATE_QUEUE(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_CREATE_QUEUE], arg ptr[in, snd_seq_queue_info])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_DELETE_QUEUE(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_DELETE_QUEUE], arg ptr[in, snd_seq_queue_info])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_GET_QUEUE_INFO(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_GET_QUEUE_INFO], arg ptr[in, snd_seq_queue_info])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_SET_QUEUE_INFO(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_SET_QUEUE_INFO], arg ptr[in, snd_seq_queue_info])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_GET_NAMED_QUEUE(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_GET_NAMED_QUEUE], arg ptr[in, snd_seq_queue_info])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_GET_QUEUE_STATUS(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_GET_QUEUE_STATUS], arg ptr[in, snd_seq_queue_status])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_GET_QUEUE_TEMPO(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_GET_QUEUE_TEMPO], arg ptr[out, snd_seq_queue_status])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_SET_QUEUE_TEMPO(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_SET_QUEUE_TEMPO], arg ptr[in, snd_seq_queue_status])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_GET_QUEUE_TIMER(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_GET_QUEUE_TIMER], arg ptr[in, snd_seq_queue_timer])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_SET_QUEUE_TIMER(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_SET_QUEUE_TIMER], arg ptr[in, snd_seq_queue_timer])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_GET_QUEUE_CLIENT(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_GET_QUEUE_CLIENT], arg ptr[in, snd_seq_queue_client])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT], arg ptr[in, snd_seq_queue_client])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_GET_CLIENT_POOL(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_GET_CLIENT_POOL], arg ptr[in, snd_seq_client_pool])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_SET_CLIENT_POOL(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_SET_CLIENT_POOL], arg ptr[in, snd_seq_client_pool])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_REMOVE_EVENTS(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_REMOVE_EVENTS], arg ptr[in, snd_seq_remove_events])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_QUERY_SUBS(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_QUERY_SUBS], arg ptr[in, snd_seq_query_subs])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_GET_SUBSCRIPTION(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_GET_SUBSCRIPTION], arg ptr[in, snd_seq_port_subscribe])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT], arg ptr[in, snd_seq_client_info])
|
|
|
|
ioctl$SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT(fd fd_sndseq, cmd const[SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT], arg ptr[in, snd_seq_port_info])
|
2016-01-11 21:16:14 +00:00
|
|
|
|
|
|
|
snd_seq_client_type = NO_CLIENT, USER_CLIENT, KERNEL_CLIENT
|
|
|
|
snd_seq_filter = SNDRV_SEQ_FILTER_BROADCAST, SNDRV_SEQ_FILTER_MULTICAST, SNDRV_SEQ_FILTER_BOUNCE, SNDRV_SEQ_FILTER_USE_EVENT
|
|
|
|
snd_seq_port_cap = SNDRV_SEQ_PORT_CAP_READ, SNDRV_SEQ_PORT_CAP_WRITE, SNDRV_SEQ_PORT_CAP_SYNC_READ, SNDRV_SEQ_PORT_CAP_SYNC_WRITE, SNDRV_SEQ_PORT_CAP_DUPLEX, SNDRV_SEQ_PORT_CAP_SUBS_READ, SNDRV_SEQ_PORT_CAP_SUBS_WRITE, SNDRV_SEQ_PORT_CAP_NO_EXPORT
|
|
|
|
snd_seq_port_type = SNDRV_SEQ_PORT_TYPE_SPECIFIC, SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC, SNDRV_SEQ_PORT_TYPE_MIDI_GM, SNDRV_SEQ_PORT_TYPE_MIDI_GS, SNDRV_SEQ_PORT_TYPE_MIDI_XG, SNDRV_SEQ_PORT_TYPE_MIDI_MT32, SNDRV_SEQ_PORT_TYPE_MIDI_GM2, SNDRV_SEQ_PORT_TYPE_SYNTH, SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE, SNDRV_SEQ_PORT_TYPE_SAMPLE, SNDRV_SEQ_PORT_TYPE_HARDWARE, SNDRV_SEQ_PORT_TYPE_SOFTWARE, SNDRV_SEQ_PORT_TYPE_SYNTHESIZER, SNDRV_SEQ_PORT_TYPE_PORT, SNDRV_SEQ_PORT_TYPE_APPLICATION
|
|
|
|
snd_seq_port_flags = SNDRV_SEQ_PORT_FLG_GIVEN_PORT, SNDRV_SEQ_PORT_FLG_TIMESTAMP, SNDRV_SEQ_PORT_FLG_TIME_REAL
|
|
|
|
snd_seq_sub_flags = SNDRV_SEQ_PORT_SUBS_EXCLUSIVE, SNDRV_SEQ_PORT_SUBS_TIMESTAMP, SNDRV_SEQ_PORT_SUBS_TIME_REAL
|
|
|
|
snd_seq_timer_type = SNDRV_SEQ_TIMER_ALSA, SNDRV_SEQ_TIMER_MIDI_CLOCK, SNDRV_SEQ_TIMER_MIDI_TICK
|
|
|
|
snd_seq_remove_mode = SNDRV_SEQ_REMOVE_INPUT, SNDRV_SEQ_REMOVE_OUTPUT, SNDRV_SEQ_REMOVE_DEST, SNDRV_SEQ_REMOVE_DEST_CHANNEL, SNDRV_SEQ_REMOVE_TIME_BEFORE, SNDRV_SEQ_REMOVE_TIME_AFTER, SNDRV_SEQ_REMOVE_TIME_TICK, SNDRV_SEQ_REMOVE_EVENT_TYPE, SNDRV_SEQ_REMOVE_IGNORE_OFF, SNDRV_SEQ_REMOVE_TAG_MATCH
|
2017-01-18 18:14:55 +00:00
|
|
|
snd_timer_class = SNDRV_TIMER_CLASS_NONE, SNDRV_TIMER_CLASS_SLAVE, SNDRV_TIMER_CLASS_GLOBAL, SNDRV_TIMER_CLASS_CARD, SNDRV_TIMER_CLASS_PCM
|
|
|
|
snd_timer_sclass = SNDRV_TIMER_SCLASS_NONE, SNDRV_TIMER_SCLASS_APPLICATION, SNDRV_TIMER_SCLASS_SEQUENCER, SNDRV_TIMER_SCLASS_OSS_SEQUENCER
|
|
|
|
snd_timer_dev = SNDRV_TIMER_GLOBAL_SYSTEM, SNDRV_TIMER_GLOBAL_RTC, SNDRV_TIMER_GLOBAL_HPET, SNDRV_TIMER_GLOBAL_HRTIMER
|
|
|
|
snd_seq_subs_type = SNDRV_SEQ_QUERY_SUBS_READ, SNDRV_SEQ_QUERY_SUBS_WRITE
|
|
|
|
|
|
|
|
snd_seq_client_name = "client0", "client1"
|
|
|
|
snd_seq_port_name = "port0", "port1"
|
|
|
|
snd_seq_queue_name = "queue0", "queue1"
|
2016-01-11 21:16:14 +00:00
|
|
|
|
|
|
|
snd_seq_system_info {
|
|
|
|
queues int32
|
|
|
|
clients int32
|
|
|
|
ports int32
|
|
|
|
channel int32
|
|
|
|
nclient int32
|
|
|
|
nqueue int32
|
|
|
|
pad array[const[0, int8], 24]
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_running_info {
|
|
|
|
client int8
|
|
|
|
bigend int8
|
|
|
|
cpumode int8
|
2016-10-06 18:08:14 +00:00
|
|
|
pad1 const[0, int8]
|
|
|
|
pad2 array[const[0, int8], 12]
|
2016-01-11 21:16:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_client_info {
|
|
|
|
client int32
|
|
|
|
type flags[snd_seq_client_type, int32]
|
2017-01-18 18:14:55 +00:00
|
|
|
name string[snd_seq_client_name, 64]
|
2016-01-11 21:16:14 +00:00
|
|
|
filter flags[snd_seq_filter, int32]
|
|
|
|
mfilt array[int8, 8]
|
|
|
|
evfilt array[int8, 32]
|
|
|
|
nports int32
|
|
|
|
lost int32
|
|
|
|
pad array[const[0, int8], 64]
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_port_info {
|
|
|
|
addr snd_seq_addr
|
2017-01-18 18:14:55 +00:00
|
|
|
name string[snd_seq_port_name, 64]
|
2016-01-11 21:16:14 +00:00
|
|
|
cap flags[snd_seq_port_cap, int32]
|
|
|
|
type flags[snd_seq_port_type, int32]
|
|
|
|
chans int32
|
|
|
|
voices int32
|
|
|
|
svoices int32
|
|
|
|
readuse int32
|
|
|
|
wruse int32
|
|
|
|
kernel const[0, intptr]
|
|
|
|
flags flags[snd_seq_port_flags, int32]
|
|
|
|
timeq int32
|
|
|
|
pad array[const[0, int8], 59]
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_port_subscribe {
|
|
|
|
sender snd_seq_addr
|
|
|
|
dest snd_seq_addr
|
|
|
|
voices int32
|
|
|
|
flags flags[snd_seq_sub_flags, int32]
|
|
|
|
queue int8
|
2016-10-06 18:08:14 +00:00
|
|
|
pad1 array[const[0, int8], 3]
|
|
|
|
pad2 array[const[0, int8], 64]
|
2016-01-11 21:16:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_queue_info {
|
|
|
|
queue int32
|
|
|
|
owner int32
|
|
|
|
locked int32
|
2017-01-18 18:14:55 +00:00
|
|
|
name string[snd_seq_queue_name, 64]
|
2016-01-11 21:16:14 +00:00
|
|
|
flags int32
|
|
|
|
pad array[const[0, int8], 60]
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_queue_status {
|
|
|
|
queue int32
|
|
|
|
events int32
|
|
|
|
tick int32
|
|
|
|
time timespec
|
|
|
|
runnint int32
|
|
|
|
flags int32
|
|
|
|
pad array[const[0, int8], 64]
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_queue_timer {
|
|
|
|
queue int32
|
|
|
|
type flags[snd_seq_timer_type, int32]
|
|
|
|
id snd_timer_id
|
|
|
|
pad array[const[0, int8], 64]
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_timer_id {
|
2017-01-18 18:14:55 +00:00
|
|
|
class flags[snd_timer_class, int32]
|
|
|
|
sclass flags[snd_timer_sclass, int32]
|
2016-01-11 21:16:14 +00:00
|
|
|
card int32
|
2017-01-18 18:14:55 +00:00
|
|
|
dev flags[snd_timer_dev, int32]
|
2016-01-11 21:16:14 +00:00
|
|
|
subdev int32
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_queue_client {
|
|
|
|
queue int32
|
|
|
|
client int32
|
|
|
|
used int32
|
|
|
|
pad array[const[0, int8], 64]
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_client_pool {
|
|
|
|
client int32
|
|
|
|
opool int32
|
|
|
|
ipool int32
|
|
|
|
oroom int32
|
|
|
|
ofree int32
|
|
|
|
ifree int32
|
|
|
|
pad array[const[0, int8], 64]
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_remove_events {
|
|
|
|
mode flags[snd_seq_remove_mode, int32]
|
|
|
|
time snd_seq_timestamp
|
|
|
|
queue int8
|
|
|
|
dest snd_seq_addr
|
|
|
|
chan int8
|
|
|
|
type flags[snd_seq_client_type, int32]
|
|
|
|
tag int8
|
|
|
|
pad array[const[0, int32], 10]
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_query_subs {
|
|
|
|
root snd_seq_addr
|
|
|
|
type flags[snd_seq_subs_type, int32]
|
|
|
|
index int32
|
|
|
|
nsubs int32
|
|
|
|
addr snd_seq_addr
|
|
|
|
queue int8
|
|
|
|
flags int32
|
|
|
|
pad array[const[0, int8], 64]
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_event {
|
2017-08-14 18:01:28 +00:00
|
|
|
type int8
|
2016-01-11 21:16:14 +00:00
|
|
|
flags int8
|
|
|
|
tag int8
|
|
|
|
queue int8
|
|
|
|
time snd_seq_timestamp
|
|
|
|
src snd_seq_addr
|
|
|
|
dst snd_seq_addr
|
|
|
|
data snd_seq_event_data
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_event_data [
|
|
|
|
note snd_seq_ev_note
|
|
|
|
control snd_seq_ev_ctrl
|
|
|
|
raw8 snd_seq_ev_raw8
|
|
|
|
raw32 snd_seq_ev_raw32
|
|
|
|
ext snd_seq_ev_ext
|
|
|
|
queue snd_seq_ev_queue_control
|
|
|
|
time snd_seq_timestamp
|
|
|
|
addr snd_seq_addr
|
|
|
|
connect snd_seq_connect
|
|
|
|
result snd_seq_result
|
|
|
|
quote snd_seq_ev_quote
|
|
|
|
]
|
|
|
|
|
|
|
|
snd_seq_ev_note {
|
|
|
|
chan int8
|
|
|
|
note int8
|
|
|
|
veloc int8
|
|
|
|
oveloc int8
|
|
|
|
dur int32
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_ev_ctrl {
|
|
|
|
chan int8
|
|
|
|
param int32
|
|
|
|
val int32
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_ev_raw8 {
|
|
|
|
data array[int8, 12]
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_ev_raw32 {
|
|
|
|
data array[int32, 3]
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_ev_ext {
|
|
|
|
len len[ptr, int32]
|
|
|
|
ptr buffer[in]
|
|
|
|
} [packed]
|
|
|
|
|
|
|
|
snd_seq_ev_queue_control {
|
|
|
|
queue int8
|
|
|
|
param snd_seq_queue_skew
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_connect {
|
|
|
|
sender snd_seq_addr
|
|
|
|
dest snd_seq_addr
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_result {
|
|
|
|
event int32
|
|
|
|
result int32
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_ev_quote {
|
|
|
|
origin snd_seq_addr
|
|
|
|
val int16
|
2016-09-03 10:36:49 +00:00
|
|
|
event ptr[in, snd_seq_event, opt]
|
2016-01-11 21:16:14 +00:00
|
|
|
} [packed]
|
|
|
|
|
|
|
|
snd_seq_queue_skew {
|
|
|
|
val int32
|
|
|
|
base int32
|
|
|
|
}
|
|
|
|
|
|
|
|
snd_seq_timestamp [
|
|
|
|
tick int32
|
|
|
|
time timespec
|
|
|
|
]
|
|
|
|
|
|
|
|
snd_seq_addr {
|
|
|
|
client int8
|
|
|
|
port int8
|
|
|
|
}
|