at v4.7 2.1 kB view raw
1#ifndef SOUND_FIREWIRE_LIB_H_INCLUDED 2#define SOUND_FIREWIRE_LIB_H_INCLUDED 3 4#include <linux/firewire-constants.h> 5#include <linux/types.h> 6#include <linux/sched.h> 7#include <sound/rawmidi.h> 8 9struct fw_unit; 10 11#define FW_GENERATION_MASK 0x00ff 12#define FW_FIXED_GENERATION 0x0100 13#define FW_QUIET 0x0200 14 15int snd_fw_transaction(struct fw_unit *unit, int tcode, 16 u64 offset, void *buffer, size_t length, 17 unsigned int flags); 18 19/* returns true if retrying the transaction would not make sense */ 20static inline bool rcode_is_permanent_error(int rcode) 21{ 22 return rcode == RCODE_TYPE_ERROR || rcode == RCODE_ADDRESS_ERROR; 23} 24 25void snd_fw_schedule_registration(struct fw_unit *unit, 26 struct delayed_work *dwork); 27 28struct snd_fw_async_midi_port; 29typedef int (*snd_fw_async_midi_port_fill)( 30 struct snd_rawmidi_substream *substream, 31 u8 *buf); 32 33struct snd_fw_async_midi_port { 34 struct fw_device *parent; 35 struct work_struct work; 36 bool idling; 37 ktime_t next_ktime; 38 bool error; 39 40 u64 addr; 41 struct fw_transaction transaction; 42 43 u8 *buf; 44 unsigned int len; 45 46 struct snd_rawmidi_substream *substream; 47 snd_fw_async_midi_port_fill fill; 48 unsigned int consume_bytes; 49}; 50 51int snd_fw_async_midi_port_init(struct snd_fw_async_midi_port *port, 52 struct fw_unit *unit, u64 addr, unsigned int len, 53 snd_fw_async_midi_port_fill fill); 54void snd_fw_async_midi_port_destroy(struct snd_fw_async_midi_port *port); 55 56/** 57 * snd_fw_async_midi_port_run - run transactions for the async MIDI port 58 * @port: the asynchronous MIDI port 59 * @substream: the MIDI substream 60 */ 61static inline void 62snd_fw_async_midi_port_run(struct snd_fw_async_midi_port *port, 63 struct snd_rawmidi_substream *substream) 64{ 65 if (!port->error) { 66 port->substream = substream; 67 schedule_work(&port->work); 68 } 69} 70 71/** 72 * snd_fw_async_midi_port_finish - finish the asynchronous MIDI port 73 * @port: the asynchronous MIDI port 74 */ 75static inline void 76snd_fw_async_midi_port_finish(struct snd_fw_async_midi_port *port) 77{ 78 port->substream = NULL; 79 port->error = false; 80} 81 82#endif