From owner-freebsd-multimedia Wed Oct 1 03:38:18 1997 Return-Path: Received: (from root@localhost) by hub.freebsd.org (8.8.7/8.8.7) id DAA05385 for multimedia-outgoing; Wed, 1 Oct 1997 03:38:18 -0700 (PDT) Received: from mailbox.uq.edu.au (zzshocki.dialin.uq.net.au [203.101.242.9]) by hub.freebsd.org (8.8.7/8.8.7) with ESMTP id DAA05379 for ; Wed, 1 Oct 1997 03:38:05 -0700 (PDT) Received: from bloop.craftncomp.com (localhost.craftncomp.com [127.0.0.1]) by mailbox.uq.edu.au (8.8.7/8.6.12) with ESMTP id UAA00310 for ; Wed, 1 Oct 1997 20:44:08 +1000 (EST) Message-Id: <199710011044.UAA00310@mailbox.uq.edu.au> X-Mailer: exmh version 2.0zeta 7/24/97 To: multimedia@freebsd.org Subject: PAS16 diffs for guspnp19.tar.gz Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Wed, 01 Oct 1997 20:44:07 +1000 From: Stephen Hocking Sender: owner-freebsd-multimedia@freebsd.org X-Loop: FreeBSD.org Precedence: bulk This patch adds the TRIGGER capability to the PAS16 code, allowing one to play quake!! I'll be following it up in a few days with a patch that allows the sb clone on the PAS16 card to also be detected, allowing for a crude form of full duplex sound. Stephen *** pas2_pcm.c.old Tue Sep 23 12:09:46 1997 --- pas2_pcm.c Wed Oct 1 20:40:37 1997 *************** *** 53,58 **** --- 53,59 ---- static u_long pcm_count = 0; static u_short pcm_bitsok = 8; /* mask of OK bits */ static int my_devnum = 0; + static int open_mode = 0; int pcm_set_speed(int arg) *************** *** 228,233 **** --- 229,235 ---- pcm_count = 0; + open_mode = mode; return 0; } *************** *** 245,250 **** --- 247,254 ---- pas_remove_intr(PAS_PCM_INTRBITS); pcm_mode = PCM_NON; + open_mode = 0; + splx(flags); } *************** *** 286,292 **** --- 290,298 ---- pcm_count = count; } pas_write(pas_read(FILTER_FREQUENCY) | F_F_PCM_BUFFER_COUNTER | F_F_PCM_RATE_COUNTER, FILTER_FREQUENCY); + #ifdef NO_TRIGGER pas_write(pas_read(PCM_CONTROL) | P_C_PCM_ENABLE | P_C_PCM_DAC_MODE, PCM_CONTROL); + #endif pcm_mode = PCM_DAC; *************** *** 329,340 **** --- 335,368 ---- pcm_count = count; } pas_write(pas_read(FILTER_FREQUENCY) | F_F_PCM_BUFFER_COUNTER | F_F_PCM_RATE_COUNTER, FILTER_FREQUENCY); + #ifdef NO_TRIGGER pas_write((pas_read(PCM_CONTROL) | P_C_PCM_ENABLE) & ~P_C_PCM_DAC_MODE, PCM_CONTROL); + #endif pcm_mode = PCM_ADC; splx(flags); } + #ifndef NO_TRIGGER + static void + pas_audio_trigger (int dev, int state) + { + unsigned long flags; + + flags = splhigh(); + + state &= open_mode; + + if (state & PCM_ENABLE_OUTPUT) + pas_write (pas_read (0xF8A) | 0x40 | 0x10, 0xF8A); + else if (state & PCM_ENABLE_INPUT) + pas_write ((pas_read (0xF8A) | 0x40) & ~0x10, 0xF8A); + else + pas_write (pas_read (0xF8A) & ~0x40, 0xF8A); + + splx(flags); + } + #endif static int pas_pcm_prepare_for_input(int dev, int bsize, int bcount) *************** *** 363,369 **** pas_pcm_reset, pas_pcm_reset, NULL, ! NULL }; void --- 391,400 ---- pas_pcm_reset, pas_pcm_reset, NULL, ! NULL, ! NULL, ! NULL, ! pas_audio_trigger }; void