int snd_fw_async_midi_port_init(struct snd_fw_async_midi_port *port,
struct fw_unit *unit)
{
- port->buf = kzalloc(4, GFP_KERNEL);
- if (port->buf == NULL)
- return -ENOMEM;
-
port->parent = fw_parent_device(unit);
port->idling = true;
port->next_ktime = 0;
return 0;
}
-void snd_fw_async_midi_port_destroy(struct snd_fw_async_midi_port *port)
-{
- snd_fw_async_midi_port_finish(port);
- cancel_work_sync(&port->work);
- kfree(port->buf);
-}
-
static void handle_midi_tx(struct fw_card *card, struct fw_request *request,
int tcode, int destination, int source,
int generation, unsigned long long offset,
void snd_tscm_transaction_unregister(struct snd_tscm *tscm)
{
__be32 reg;
- unsigned int i;
if (tscm->async_handler.callback_data == NULL)
return;
fw_core_remove_address_handler(&tscm->async_handler);
tscm->async_handler.callback_data = NULL;
-
- for (i = 0; i < TSCM_MIDI_OUT_PORT_MAX; i++)
- snd_fw_async_midi_port_destroy(&tscm->out_ports[i]);
}
struct fw_transaction transaction;
- u8 *buf;
+ u8 buf[4];
struct snd_rawmidi_substream *substream;
int consume_bytes;
int snd_fw_async_midi_port_init(struct snd_fw_async_midi_port *port,
struct fw_unit *unit);
-void snd_fw_async_midi_port_destroy(struct snd_fw_async_midi_port *port);
static inline void
snd_fw_async_midi_port_run(struct snd_fw_async_midi_port *port,
snd_fw_async_midi_port_finish(struct snd_fw_async_midi_port *port)
{
port->substream = NULL;
+ cancel_work_sync(&port->work);
port->error = false;
}