Fix conflicts.

This commit is contained in:
markm 1997-11-10 18:31:35 +00:00
parent 8e139da3e2
commit d5c6eb1cfd
11 changed files with 140 additions and 72 deletions

View File

@ -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;

View File

@ -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

View File

@ -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 */

View File

@ -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};

View File

@ -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 */

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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
}

View File

@ -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);