| # 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> |
| |
| resource fd_sndseq[fd] |
| |
| syz_open_dev$sndseq(dev ptr[in, string["/dev/snd/seq"]], id const[0], flags flags[open_flags]) fd_sndseq |
| write$sndseq(fd fd_sndseq, data ptr[in, array[snd_seq_event]], len bytesize[data]) |
| |
| 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]) |
| |
| 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 |
| 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" |
| |
| 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 |
| pad1 const[0, int8] |
| pad2 array[const[0, int8], 12] |
| } |
| |
| snd_seq_client_info { |
| client int32 |
| type flags[snd_seq_client_type, int32] |
| name string[snd_seq_client_name, 64] |
| 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 |
| name string[snd_seq_port_name, 64] |
| 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 |
| pad1 array[const[0, int8], 3] |
| pad2 array[const[0, int8], 64] |
| } |
| |
| snd_seq_queue_info { |
| queue int32 |
| owner int32 |
| locked int32 |
| name string[snd_seq_queue_name, 64] |
| 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 { |
| class flags[snd_timer_class, int32] |
| sclass flags[snd_timer_sclass, int32] |
| card int32 |
| dev flags[snd_timer_dev, int32] |
| 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 { |
| type int8 |
| 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 |
| event ptr[in, snd_seq_event, opt] |
| } [packed] |
| |
| snd_seq_queue_skew { |
| val int32 |
| base int32 |
| } |
| |
| snd_seq_timestamp [ |
| tick int32 |
| time timespec |
| ] |
| |
| snd_seq_addr { |
| client int8 |
| port int8 |
| } |