Lines Matching defs:gus

11 #include <sound/gus.h>
13 static void snd_gf1_interrupt_midi_in(struct snd_gus_card * gus)
22 spin_lock_irqsave(&gus->uart_cmd_lock, flags);
23 stat = snd_gf1_uart_stat(gus);
25 spin_unlock_irqrestore(&gus->uart_cmd_lock, flags);
30 data = snd_gf1_uart_get(gus);
31 if (!(gus->gf1.uart_cmd & 0x80)) {
32 spin_unlock_irqrestore(&gus->uart_cmd_lock, flags);
36 gus->gf1.uart_framing++;
37 spin_unlock_irqrestore(&gus->uart_cmd_lock, flags);
40 byte = snd_gf1_uart_get(gus);
41 spin_unlock_irqrestore(&gus->uart_cmd_lock, flags);
42 snd_rawmidi_receive(gus->midi_substream_input, &byte, 1);
44 gus->gf1.uart_overrun++;
49 static void snd_gf1_interrupt_midi_out(struct snd_gus_card * gus)
54 if (snd_gf1_uart_stat(gus) & 0x01)
55 snd_gf1_interrupt_midi_in(gus);
57 guard(spinlock_irqsave)(&gus->uart_cmd_lock);
58 if (snd_gf1_uart_stat(gus) & 0x02) { /* Tx FIFO free? */
59 if (snd_rawmidi_transmit(gus->midi_substream_output, &byte, 1) != 1) { /* no other bytes or error */
60 snd_gf1_uart_cmd(gus, gus->gf1.uart_cmd & ~0x20); /* disable Tx interrupt */
62 snd_gf1_uart_put(gus, byte);
67 static void snd_gf1_uart_reset(struct snd_gus_card * gus, int close)
69 snd_gf1_uart_cmd(gus, 0x03); /* reset */
70 if (!close && gus->uart_enable) {
72 snd_gf1_uart_cmd(gus, 0x00); /* normal operations */
78 struct snd_gus_card *gus;
80 gus = substream->rmidi->private_data;
81 guard(spinlock_irqsave)(&gus->uart_cmd_lock);
82 if (!(gus->gf1.uart_cmd & 0x80)) { /* input active? */
83 snd_gf1_uart_reset(gus, 0);
85 gus->gf1.interrupt_handler_midi_out = snd_gf1_interrupt_midi_out;
86 gus->midi_substream_output = substream;
88 dev_dbg(gus->card->dev,
90 gus->gf1.uart_cmd, snd_gf1_uart_stat(gus));
97 struct snd_gus_card *gus;
100 gus = substream->rmidi->private_data;
101 guard(spinlock_irqsave)(&gus->uart_cmd_lock);
102 if (gus->gf1.interrupt_handler_midi_out != snd_gf1_interrupt_midi_out) {
103 snd_gf1_uart_reset(gus, 0);
105 gus->gf1.interrupt_handler_midi_in = snd_gf1_interrupt_midi_in;
106 gus->midi_substream_input = substream;
107 if (gus->uart_enable) {
108 for (i = 0; i < 1000 && (snd_gf1_uart_stat(gus) & 0x01); i++)
109 snd_gf1_uart_get(gus); /* clean Rx */
111 dev_err(gus->card->dev, "gus midi uart init read - cleanup error\n");
114 dev_dbg(gus->card->dev,
116 gus->uart_enable, gus->gf1.uart_cmd, snd_gf1_uart_stat(gus));
117 dev_dbg(gus->card->dev,
119 gus->gf1.port + 0x100, inb(gus->gf1.port + 0x100),
120 inb(gus->gf1.port + 0x101), inb(gus->gf1.port + 0x102));
127 struct snd_gus_card *gus;
129 gus = substream->rmidi->private_data;
130 guard(spinlock_irqsave)(&gus->uart_cmd_lock);
131 if (gus->gf1.interrupt_handler_midi_in != snd_gf1_interrupt_midi_in)
132 snd_gf1_uart_reset(gus, 1);
133 snd_gf1_set_default_handlers(gus, SNDRV_GF1_HANDLER_MIDI_OUT);
134 gus->midi_substream_output = NULL;
140 struct snd_gus_card *gus;
142 gus = substream->rmidi->private_data;
143 guard(spinlock_irqsave)(&gus->uart_cmd_lock);
144 if (gus->gf1.interrupt_handler_midi_out != snd_gf1_interrupt_midi_out)
145 snd_gf1_uart_reset(gus, 1);
146 snd_gf1_set_default_handlers(gus, SNDRV_GF1_HANDLER_MIDI_IN);
147 gus->midi_substream_input = NULL;
153 struct snd_gus_card *gus;
155 gus = substream->rmidi->private_data;
157 guard(spinlock_irqsave)(&gus->uart_cmd_lock);
159 if ((gus->gf1.uart_cmd & 0x80) == 0)
160 snd_gf1_uart_cmd(gus, gus->gf1.uart_cmd | 0x80); /* enable Rx interrupts */
162 if (gus->gf1.uart_cmd & 0x80)
163 snd_gf1_uart_cmd(gus, gus->gf1.uart_cmd & ~0x80); /* disable Rx interrupts */
170 struct snd_gus_card *gus;
174 gus = substream->rmidi->private_data;
176 spin_lock_irqsave(&gus->uart_cmd_lock, flags);
178 if ((gus->gf1.uart_cmd & 0x20) == 0) {
179 spin_unlock_irqrestore(&gus->uart_cmd_lock, flags);
182 while (timeout-- > 0 && snd_gf1_uart_stat(gus) & 0x01);
184 spin_lock_irqsave(&gus->uart_cmd_lock, flags);
185 if (gus->gf1.uart_cmd & 0x20) {
186 spin_unlock_irqrestore(&gus->uart_cmd_lock, flags);
189 if (snd_gf1_uart_stat(gus) & 0x02) {
191 spin_unlock_irqrestore(&gus->uart_cmd_lock, flags);
194 snd_gf1_uart_put(gus, byte);
196 snd_gf1_uart_cmd(gus, gus->gf1.uart_cmd | 0x20); /* enable Tx interrupt */
199 if (gus->gf1.uart_cmd & 0x20)
200 snd_gf1_uart_cmd(gus, gus->gf1.uart_cmd & ~0x20);
202 spin_unlock_irqrestore(&gus->uart_cmd_lock, flags);
219 int snd_gf1_rawmidi_new(struct snd_gus_card *gus, int device)
224 err = snd_rawmidi_new(gus->card, "GF1", device, 1, 1, &rmidi);
227 strscpy(rmidi->name, gus->interwave ? "AMD InterWave" : "GF1");
231 rmidi->private_data = gus;
232 gus->midi_uart = rmidi;