Lines Matching refs:port

74 	struct snd_fw_async_midi_port *port = callback_data;  in async_midi_port_callback()  local
75 struct snd_rawmidi_substream *substream = ACCESS_ONCE(port->substream); in async_midi_port_callback()
82 snd_rawmidi_transmit_ack(substream, port->consume_bytes); in async_midi_port_callback()
85 port->next_ktime = ktime_set(0, 0); in async_midi_port_callback()
88 port->error = true; in async_midi_port_callback()
90 port->idling = true; in async_midi_port_callback()
93 schedule_work(&port->work); in async_midi_port_callback()
98 struct snd_fw_async_midi_port *port = in midi_port_work() local
100 struct snd_rawmidi_substream *substream = ACCESS_ONCE(port->substream); in midi_port_work()
105 if (!port->idling || port->error) in midi_port_work()
113 if (ktime_after(port->next_ktime, ktime_get())) { in midi_port_work()
114 schedule_work(&port->work); in midi_port_work()
122 memset(port->buf, 0, port->len); in midi_port_work()
123 port->consume_bytes = port->fill(substream, port->buf); in midi_port_work()
124 if (port->consume_bytes <= 0) { in midi_port_work()
126 if (port->consume_bytes == 0) { in midi_port_work()
127 port->next_ktime = ktime_set(0, 0); in midi_port_work()
128 schedule_work(&port->work); in midi_port_work()
131 port->error = true; in midi_port_work()
137 if (port->len == 4) in midi_port_work()
143 port->next_ktime = ktime_add_ns(ktime_get(), in midi_port_work()
144 port->consume_bytes * 8 * NSEC_PER_SEC / 31250); in midi_port_work()
147 port->idling = false; in midi_port_work()
157 generation = port->parent->generation; in midi_port_work()
160 fw_send_request(port->parent->card, &port->transaction, type, in midi_port_work()
161 port->parent->node_id, generation, in midi_port_work()
162 port->parent->max_speed, port->addr, in midi_port_work()
163 port->buf, port->len, async_midi_port_callback, in midi_port_work()
164 port); in midi_port_work()
177 int snd_fw_async_midi_port_init(struct snd_fw_async_midi_port *port, in snd_fw_async_midi_port_init() argument
181 port->len = DIV_ROUND_UP(len, 4) * 4; in snd_fw_async_midi_port_init()
182 port->buf = kzalloc(port->len, GFP_KERNEL); in snd_fw_async_midi_port_init()
183 if (port->buf == NULL) in snd_fw_async_midi_port_init()
186 port->parent = fw_parent_device(unit); in snd_fw_async_midi_port_init()
187 port->addr = addr; in snd_fw_async_midi_port_init()
188 port->fill = fill; in snd_fw_async_midi_port_init()
189 port->idling = true; in snd_fw_async_midi_port_init()
190 port->next_ktime = ktime_set(0, 0); in snd_fw_async_midi_port_init()
191 port->error = false; in snd_fw_async_midi_port_init()
193 INIT_WORK(&port->work, midi_port_work); in snd_fw_async_midi_port_init()
203 void snd_fw_async_midi_port_destroy(struct snd_fw_async_midi_port *port) in snd_fw_async_midi_port_destroy() argument
205 snd_fw_async_midi_port_finish(port); in snd_fw_async_midi_port_destroy()
206 cancel_work_sync(&port->work); in snd_fw_async_midi_port_destroy()
207 kfree(port->buf); in snd_fw_async_midi_port_destroy()