Fix conflicts.
This commit is contained in:
parent
8e139da3e2
commit
d5c6eb1cfd
@ -407,7 +407,7 @@ ad1848_mixer_set(ad1848_info * devc, int dev, int value)
|
||||
if (mix_devices[dev][RIGHT_CHN].nbits == 0) /* Mono control */
|
||||
right = left;
|
||||
|
||||
retvol = left | (left << 8);
|
||||
retvol = left | (right << 8);
|
||||
|
||||
/* Scale volumes */
|
||||
left = mix_cvt[left];
|
||||
@ -913,12 +913,14 @@ ad1848_prepare_for_IO(int dev, int bsize, int bcount)
|
||||
if (devc->irq_mode)
|
||||
return 0;
|
||||
|
||||
flags = splhigh();
|
||||
fs = devc->speed_bits | (devc->format_bits << 5);
|
||||
|
||||
if (devc->channels > 1)
|
||||
fs |= 0x10;
|
||||
old_fs = fs;
|
||||
|
||||
flags = splhigh();
|
||||
|
||||
if (devc->mode == MD_1845) { /* Use alternate speed select regs */
|
||||
fs &= 0xf0; /* Mask off the rate select bits */
|
||||
|
||||
@ -927,6 +929,7 @@ ad1848_prepare_for_IO(int dev, int bsize, int bcount)
|
||||
}
|
||||
|
||||
ad_enter_MCE(devc); /* Enables changes to the format select reg */
|
||||
|
||||
ad_write(devc, 8, fs);
|
||||
|
||||
/*
|
||||
@ -946,36 +949,13 @@ ad1848_prepare_for_IO(int dev, int bsize, int bcount)
|
||||
*/
|
||||
AD_WAIT_INIT(10000);
|
||||
}
|
||||
ad_leave_MCE(devc); /* Starts the calibration process. */
|
||||
|
||||
/* amancio */
|
||||
ad_enter_MCE(devc); /* Enables changes to the format select reg */
|
||||
|
||||
ad_write(devc, 8, fs);
|
||||
/*
|
||||
* Write to I8 starts resyncronization. Wait until it completes.
|
||||
*/
|
||||
AD_WAIT_INIT(10000);
|
||||
ad_write(devc, 9, ad_read(devc, 9) & ~0x08);
|
||||
/* ad_write (devc, 9, ad_read (devc, 9) | 0x08); */
|
||||
|
||||
/*
|
||||
* If mode == 2 (CS4231), set I28 also. It's the capture format
|
||||
* register.
|
||||
*/
|
||||
if (devc->mode != MD_1848) {
|
||||
ad_write(devc, 28, fs);
|
||||
ad_leave_MCE(devc);
|
||||
|
||||
/*
|
||||
* Write to I28 starts resyncronization. Wait until it
|
||||
* completes.
|
||||
*/
|
||||
AD_WAIT_INIT(10000);
|
||||
}
|
||||
|
||||
ad_leave_MCE(devc); /* Starts the calibration process. */
|
||||
/* amancio */
|
||||
splx(flags);
|
||||
|
||||
devc->xfer_count = 0;
|
||||
#ifdef CONFIG_SEQUENCER
|
||||
if (dev == timer_installed && devc->timer_running)
|
||||
@ -998,31 +978,27 @@ ad1848_halt(int dev)
|
||||
ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
|
||||
u_long flags;
|
||||
int timeout;
|
||||
|
||||
flags = splhigh();
|
||||
|
||||
ad_mute(devc);
|
||||
ad_enter_MCE(devc);
|
||||
ad_write(devc, 9, ad_read(devc, 9) & ~0x03); /* Stop DMA */
|
||||
ad_write(devc, 9, ad_read(devc, 9) | 0x8);
|
||||
|
||||
ad_write(devc, 9, ad_read(devc, 9) & ~0x03); /* Stop DMA */
|
||||
/*
|
||||
* ad_write (devc, 15, 0); Clear DMA counter ad_write (devc,
|
||||
* 14, 0); Clear DMA counter
|
||||
*/
|
||||
|
||||
ad_write(devc, 14, 0); /* Clear DMA counter */
|
||||
ad_write(devc, 15, 0); /* Clear DMA counter */
|
||||
|
||||
if (devc->mode != MD_1848) {
|
||||
ad_write(devc, 30, 0); /* Clear DMA counter */
|
||||
ad_write(devc, 31, 0); /* Clear DMA counter */
|
||||
}
|
||||
for (timeout = 0; timeout < 1000 && !(inb(io_Status(devc)) & 0x80);
|
||||
|
||||
for (timeout = 0; timeout < 1000 && !(inb(io_Status(devc)) & 0x01);
|
||||
timeout++); /* Wait for interrupt */
|
||||
|
||||
ad_write(devc, 9, ad_read(devc, 9) & ~0x03); /* Stop DMA */
|
||||
outb(io_Status(devc), 0); /* Clear interrupt status */
|
||||
outb(io_Status(devc), 0); /* Clear interrupt status */
|
||||
|
||||
devc->irq_mode = 0;
|
||||
ad_leave_MCE(devc);
|
||||
|
||||
/* DMAbuf_reset_dma (dev); */
|
||||
splx(flags);
|
||||
@ -1499,7 +1475,7 @@ ad1848_init(char *name, int io_base, int irq,
|
||||
irq2dev[-irq] = devc->dev_no = my_dev;
|
||||
|
||||
audio_devs[my_dev]->otherside = -1 ;
|
||||
audio_devs[my_dev]->flags = DMA_AUTOMODE | DMA_DUPLEX;
|
||||
audio_devs[my_dev]->flags |= DMA_AUTOMODE | DMA_DUPLEX;
|
||||
audio_devs[my_dev]->dmachan1 = dma_playback;
|
||||
audio_devs[my_dev]->dmachan2 = dma_capture;
|
||||
audio_devs[my_dev]->buffsize = DSP_BUFFSIZE;
|
||||
|
@ -36,6 +36,11 @@
|
||||
|
||||
#define ON 1
|
||||
#define OFF 0
|
||||
int
|
||||
DMAbuf_poll(int dev, struct fileinfo * file, int events, select_table * wait);
|
||||
|
||||
int
|
||||
audio_poll(int dev, struct fileinfo * file, int events, select_table * wait);
|
||||
|
||||
static int wr_buff_no[MAX_AUDIO_DEV];
|
||||
/* != -1, if there is a incomplete output block in the queue. */
|
||||
@ -426,11 +431,11 @@ audio_ioctl(int dev, struct fileinfo * file, u_int cmd, ioctl_arg arg)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef ALLOW_SELECT
|
||||
/*
|
||||
#ifdef ALLOW_POLL
|
||||
/*
|
||||
* XXX should we use spltty() in the select calls ? - lr970714
|
||||
*
|
||||
*/
|
||||
*/
|
||||
|
||||
int
|
||||
audio_poll(int dev, struct fileinfo * file, int events, select_table * wait)
|
||||
@ -459,6 +464,6 @@ audio_poll(int dev, struct fileinfo * file, int events, select_table * wait)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif /* ALLOW_SELECT */
|
||||
#endif /* ALLOW_POLL */
|
||||
|
||||
#endif
|
||||
|
@ -28,8 +28,17 @@
|
||||
*/
|
||||
|
||||
#include <i386/isa/sound/sound_config.h>
|
||||
#include <i386/include/md_var.h>
|
||||
|
||||
#if defined(CONFIG_AUDIO) || defined(CONFIG_GUS)
|
||||
#ifdef ALLOW_POLL
|
||||
|
||||
int
|
||||
DMAbuf_poll(int dev, struct fileinfo * file, int events, select_table * wait);
|
||||
#endif;
|
||||
|
||||
static void
|
||||
reorganize_buffers(int dev, struct dma_buffparms * dmap);
|
||||
|
||||
static int *in_sleeper[MAX_AUDIO_DEV] = {NULL};
|
||||
static volatile struct snd_wait in_sleep_flag[MAX_AUDIO_DEV] = {{0}};
|
||||
@ -1379,7 +1388,7 @@ DMAbuf_reset_dma(int dev)
|
||||
{
|
||||
}
|
||||
|
||||
#ifdef ALLOW_SELECT
|
||||
#ifdef ALLOW_POLL
|
||||
|
||||
int
|
||||
DMAbuf_poll(int dev, struct fileinfo * file, int events, select_table * wait)
|
||||
@ -1500,7 +1509,7 @@ DMAbuf_select(int dev, struct fileinfo * file, int sel_type, select_table * wait
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* ALLOW_SELECT */
|
||||
#endif /* ALLOW_POLL */
|
||||
#endif
|
||||
|
||||
#else /* CONFIG_AUDIO */
|
||||
|
@ -37,7 +37,7 @@
|
||||
#define GUS_PNP_ID 0x100561e
|
||||
|
||||
#define MAX_CARDS 8
|
||||
#define MAX_GUS_PNP 8
|
||||
#define MAX_GUS_PNP 12
|
||||
|
||||
|
||||
/* Static ports */
|
||||
@ -61,7 +61,7 @@ IWAVE iw;
|
||||
#define MAX_SAMPLE 150
|
||||
#define MAX_PATCH 256
|
||||
|
||||
#define MAX_GUS_PNP 12
|
||||
|
||||
u_int gus_pnp_found[MAX_GUS_PNP] =
|
||||
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||
|
||||
|
@ -28,6 +28,11 @@
|
||||
#define CONFIG_GUSMAX
|
||||
#endif
|
||||
|
||||
#include "sscape.h"
|
||||
#if NSSCAPE != 0 && !defined(CONFIG_SSCAPE)
|
||||
#define CONFIG_SSCAPE
|
||||
#endif
|
||||
|
||||
#include "trix.h"
|
||||
#if NTRIX > 0
|
||||
#define INCLUDE_TRIX_BOOT
|
||||
@ -35,7 +40,7 @@
|
||||
#define CONFIG_YM3812
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_GUSMAX) || ( NTRIX > 0 )
|
||||
#if defined(CONFIG_GUSMAX) || ( NSSCAPE > 0 ) || ( NTRIX > 0 )
|
||||
#define CONFIG_AD1848
|
||||
#endif
|
||||
|
||||
@ -86,9 +91,7 @@
|
||||
#define CONFIG_YM3812
|
||||
#endif
|
||||
|
||||
#include "sscape.h"
|
||||
|
||||
#define ALLOW_SELECT
|
||||
#define ALLOW_POLL
|
||||
|
||||
/* #undef CONFIG_PAS */
|
||||
/* #undef CONFIG_ADLIB */
|
||||
|
@ -37,6 +37,11 @@
|
||||
*/
|
||||
|
||||
#define MAX_QUEUE_SIZE 4000
|
||||
int
|
||||
MIDIbuf_poll (int dev, struct fileinfo *file, int events, select_table * wait);
|
||||
|
||||
void
|
||||
drain_midi_queue(int dev);
|
||||
|
||||
static int *midi_sleeper[MAX_MIDI_DEV] = {NULL};
|
||||
static volatile struct snd_wait midi_sleep_flag[MAX_MIDI_DEV] = { {0}};
|
||||
@ -393,4 +398,32 @@ MIDIbuf_ioctl(int dev, struct fileinfo * file, u_int cmd, ioctl_arg arg)
|
||||
return midi_devs[dev]->ioctl(dev, cmd, arg);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef ALLOW_POLL
|
||||
int
|
||||
MIDIbuf_poll (int dev, struct fileinfo *file, int events, select_table * wait)
|
||||
{
|
||||
int revents = 0;
|
||||
|
||||
dev = dev >> 4;
|
||||
|
||||
if (events & (POLLIN | POLLRDNORM))
|
||||
if (!DATA_AVAIL (midi_in_buf[dev]))
|
||||
selrecord(wait, &selinfo[dev]);
|
||||
else
|
||||
revents |= events & (POLLIN | POLLRDNORM);
|
||||
|
||||
if (events & (POLLOUT | POLLWRNORM))
|
||||
if (SPACE_AVAIL (midi_out_buf[dev]))
|
||||
selrecord(wait, &selinfo[dev]);
|
||||
else
|
||||
revents |= events & (POLLOUT | POLLWRNORM);
|
||||
|
||||
return revents;
|
||||
}
|
||||
|
||||
#endif /* ALLOW_SELECT */
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -93,7 +93,7 @@ typedef struct sound_os_info {
|
||||
#define PROCESS_ABORTING( f) (f.aborting || CURSIG(curproc))
|
||||
#define TIMED_OUT( f) (f.mode & WK_TIMEOUT)
|
||||
|
||||
#ifdef ALLOW_SELECT
|
||||
#ifdef ALLOW_POLL
|
||||
typedef struct proc select_table;
|
||||
extern struct selinfo selinfo[];
|
||||
#endif
|
||||
|
@ -37,7 +37,8 @@
|
||||
#include <i386/isa/sound/midi_ctrl.h>
|
||||
|
||||
void seq_drain_midi_queues(void);
|
||||
|
||||
int
|
||||
sequencer_poll (int dev, struct fileinfo *file, int events, select_table * wait);
|
||||
static int sequencer_ok = 0;
|
||||
static struct sound_timer_operations *tmr;
|
||||
static int tmr_no = -1; /* Currently selected timer */
|
||||
@ -1677,6 +1678,40 @@ sequencer_ioctl(int dev, struct fileinfo * file,
|
||||
return -(EINVAL);
|
||||
}
|
||||
|
||||
#ifdef ALLOW_POLL
|
||||
int
|
||||
sequencer_poll (int dev, struct fileinfo *file, int events, select_table * wait)
|
||||
{
|
||||
unsigned long flags;
|
||||
int revents = 0;
|
||||
|
||||
dev = dev >> 4;
|
||||
flags = splhigh();
|
||||
|
||||
|
||||
if (events & (POLLIN | POLLRDNORM))
|
||||
if (!iqlen)
|
||||
selrecord(wait, &selinfo[dev]);
|
||||
else {
|
||||
revents |= events & (POLLIN | POLLRDNORM);
|
||||
midi_sleep_flag.mode &= ~WK_SLEEP;
|
||||
}
|
||||
|
||||
if (events & (POLLOUT | POLLWRNORM))
|
||||
if (qlen >= SEQ_MAX_QUEUE)
|
||||
selrecord(wait, &selinfo[dev]);
|
||||
else {
|
||||
revents |= events & (POLLOUT | POLLWRNORM);
|
||||
seq_sleep_flag.mode &= ~WK_SLEEP;
|
||||
}
|
||||
|
||||
splx(flags);
|
||||
|
||||
return (revents);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
void
|
||||
sequencer_timer(void *dummy)
|
||||
|
@ -17,7 +17,7 @@ void DMAbuf_reset_dma (int dev);
|
||||
void DMAbuf_inputintr(int dev);
|
||||
void DMAbuf_outputintr(int dev, int underflow_flag);
|
||||
void DMAbuf_start_devices(u_int devmask);
|
||||
#ifdef ALLOW_SELECT
|
||||
#ifdef ALLOW_POLL
|
||||
int DMAbuf_select(int dev, struct fileinfo *file, int sel_type, select_table * wait);
|
||||
#endif
|
||||
|
||||
|
@ -67,6 +67,14 @@ static int soundcard_configured = 0;
|
||||
static struct fileinfo files[SND_NDEVS];
|
||||
struct selinfo selinfo[SND_NDEVS >> 4];
|
||||
|
||||
int
|
||||
MIDIbuf_poll (int dev, struct fileinfo *file, int events, select_table * wait);
|
||||
|
||||
int
|
||||
audio_poll(int dev, struct fileinfo * file, int events, select_table * wait);
|
||||
|
||||
int
|
||||
sequencer_poll (int dev, struct fileinfo *file, int events, select_table * wait);
|
||||
|
||||
void sndintr __P((int unit));
|
||||
int sndprobe __P((struct isa_device *));
|
||||
@ -118,9 +126,8 @@ struct isa_driver gusxvidriver = {sndprobe, sndattach, "gusxvi"};
|
||||
struct isa_driver gusmaxdriver = {sndprobe, sndattach, "gusmax"};
|
||||
struct isa_driver uartdriver = {sndprobe, sndattach, "uart"};
|
||||
struct isa_driver mssdriver = {sndprobe, sndattach, "mss"};
|
||||
|
||||
/* XXX does this work ? lr 970714 */
|
||||
struct isa_driver sscapedriver = {sndprobe, sndattach, "ss_mss"};
|
||||
struct isa_driver sscapedriver = {sndprobe, sndattach, "sscape"};
|
||||
struct isa_driver sscape_mssdriver = {sndprobe, sndattach, "sscape_mss"};
|
||||
|
||||
short ipri_to_irq(u_short ipri);
|
||||
|
||||
@ -228,16 +235,16 @@ sndpoll(dev_t dev, int events, struct proc * p)
|
||||
dev = minor(dev);
|
||||
|
||||
/* printf ("snd_select(dev=%d, rw=%d, pid=%d)\n", dev, rw, p->p_pid); */
|
||||
#ifdef ALLOW_SELECT
|
||||
#ifdef ALLOW_POLL
|
||||
switch (dev & 0x0f) {
|
||||
#ifdef EXCLUDE_SEQUENCER
|
||||
#ifdef CONFIG_SEQUENCER
|
||||
case SND_DEV_SEQ:
|
||||
case SND_DEV_SEQ2:
|
||||
return sequencer_poll(dev, &files[dev], events, p);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef EXCLUDE_MIDI
|
||||
#ifdef CONFIG_MIDI
|
||||
case SND_DEV_MIDIN:
|
||||
return MIDIbuf_poll(dev, &files[dev], events, p);
|
||||
break;
|
||||
@ -256,7 +263,7 @@ sndpoll(dev_t dev, int events, struct proc * p)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* ALLOW_SELECT */
|
||||
#endif /* ALLOW_POLL */
|
||||
DEB(printf("sound_ioctl(dev=%d, cmd=0x%x, arg=0x%x)\n", dev, cmd, arg));
|
||||
|
||||
return 0 ;
|
||||
@ -307,12 +314,14 @@ driver_to_voxunit(struct isa_driver * driver)
|
||||
return (SNDCARD_GUS16);
|
||||
else if (driver == &mssdriver)
|
||||
return (SNDCARD_MSS);
|
||||
else if (driver == &sscapedriver)
|
||||
return(SNDCARD_SSCAPE);
|
||||
else if (driver == &sscape_mssdriver)
|
||||
return(SNDCARD_SSCAPE_MSS);
|
||||
else if (driver == &trixdriver)
|
||||
return (SNDCARD_TRXPRO);
|
||||
else if (driver == &trixsbdriver)
|
||||
return (SNDCARD_TRXPRO_SB);
|
||||
else if (driver == &sscapedriver)
|
||||
return (SNDCARD_SSCAPE_MSS);
|
||||
else
|
||||
return (0);
|
||||
}
|
||||
@ -542,8 +551,7 @@ conf_printf(char *name, struct address_info * hw_config)
|
||||
if (!trace_init)
|
||||
return;
|
||||
|
||||
printf("snd0: <%s> ", name);
|
||||
#if 0
|
||||
printf("<%s> ", name);
|
||||
if (hw_config->io_base != -1 )
|
||||
printf("at 0x%03x", hw_config->io_base);
|
||||
|
||||
@ -555,7 +563,7 @@ conf_printf(char *name, struct address_info * hw_config)
|
||||
if (hw_config->dma2 != -1)
|
||||
printf(",%d", hw_config->dma2);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -565,10 +573,7 @@ conf_printf2(char *name, int base, int irq, int dma, int dma2)
|
||||
if (!trace_init)
|
||||
return;
|
||||
|
||||
printf("snd0: <%s> ", name);
|
||||
#if 0
|
||||
if (hw_config->io_base != -1 )
|
||||
printf("at 0x%03x", hw_config->io_base);
|
||||
printf("<%s> at 0x%03x", name, base);
|
||||
|
||||
if (irq)
|
||||
printf(" irq %d", irq);
|
||||
@ -578,7 +583,7 @@ conf_printf2(char *name, int base, int irq, int dma, int dma2)
|
||||
if (dma2 != -1)
|
||||
printf(",%d", dma2);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,8 @@
|
||||
|
||||
#include <i386/isa/sound/coproc.h>
|
||||
|
||||
#define EXCLUDE_NATIVE_PCM
|
||||
|
||||
/*
|
||||
* I/O ports
|
||||
*/
|
||||
@ -292,7 +294,7 @@ sscapeintr(int irq)
|
||||
u_char bits, tmp;
|
||||
static int debug = 0;
|
||||
|
||||
printf("sscapeintr(0x%02x)\n", (bits = sscape_read(devc, GA_INTSTAT_REG)));
|
||||
DEB(printf("sscapeintr(0x%02x)\n", (bits = sscape_read(devc, GA_INTSTAT_REG))));
|
||||
if ((sscape_sleep_flag.mode & WK_SLEEP)) {
|
||||
sscape_sleep_flag.mode = WK_WAKEUP;
|
||||
wakeup(sscape_sleeper);
|
||||
|
Loading…
Reference in New Issue
Block a user