Commit Graph

411 Commits

Author SHA1 Message Date
Scott Long
63393eea99 Fix a botched flag clear operation. Rumor has it that this also fixes
the funky-volume-settings-on-startup problem.

Reviewed by:	the channel that shall not be named
MFC after:	7 days
2002-06-28 06:11:26 +00:00
Scott Long
f4df40b218 Delay the AC97 calibration until after the system clock has been
calibrated.  This fixes the problem where playback and recording do
not run at the correct speed.  It probably also eliminates the
need for the hacks/workarounds/sysctl's that were previously
devised to deal with this, but I will leave that for a different
time.

Reviewed by:	orion
2002-06-27 22:36:01 +00:00
Robert Drehmel
9ce4f54341 Enable mixer interrupts after the mixer is initialized,
otherwise we might get interrupts and are unable to
handle them properly, which results in a page fault.

PR:		kern/39549
Submitted by:	Gil Kloepfer <gil@arlut.utexas.edu>
2002-06-24 15:28:47 +00:00
Orion Hodson
7dace039d8 No longer attempt to power off the ACLINK during suspend - luigi
reports this causes his ich machine to hang.
2002-05-05 15:37:09 +00:00
Cameron Grant
9dbee70d4a recognise ct5880-e
Submitted by:	SONODA Yoshihide <yshd@na.rim.or.jp>
2002-04-28 22:38:23 +00:00
John Baldwin
0654f06291 Cast another bus_addr_t to long long for a printf to quiet a warning on
alpha.
2002-04-16 01:58:13 +00:00
John Baldwin
77b6db948d Recognize the AC97 interface to the onboard sound controller on the Nvidia
nForce chipset.  Playback at least seems to work fine with the ich driver
out of the box.

Sponsored by:	The Weather Channel
Help from:	cg
2002-04-15 20:42:40 +00:00
John Baldwin
e789153cfc Use bus_addr_t instead of u_int for local variables that are derived from
the per-channel bus_addr_t offset.  Also, cast the offset to (long long)
and use %#llx instead of %#x to fix printf warnings on architectures where
sizeof(bus_addr_t) != sizeof(int).
2002-04-15 19:16:37 +00:00
Ollivier Robert
a8851d32b1 Remove a spurious warning as x is always initialised before use.
es137x.c: In function `es1371_rdcd':
es137x.c:598: warning: `x' might be used uninitialized in this function

PR:		kern/35408
Submitted by:	Thomas Quinot <thomas@cuivre.fr.eu.org>
2002-04-15 14:43:23 +00:00
John Hay
fcd478479d Fix the play / record rate setting so that it actually works.
The extra microphone channel capability is part of the "normal" ac97
capabilities and not an extended ac97 capability. Now recording on
codecs without a seperate mic channel works.

MFC after:	1 week
2002-04-14 10:39:59 +00:00
John Baldwin
6008862bc2 Change callers of mtx_init() to pass in an appropriate lock type name. In
most cases NULL is passed, but in some cases such as network driver locks
(which use the MTX_NETWORK_LOCK macro) and UMA zone locks, a name is used.

Tested on:	i386, alpha, sparc64
2002-04-04 21:03:38 +00:00
John Baldwin
489c22ebb8 Add lock type arguments to callers of snd_mtxcreate(). 2002-04-04 20:56:47 +00:00
Orion Hodson
38c81beede Suspend and resume related patches from Toshikazu Ichinoseki <t.ichinoseki@nifty.com>.
PR's: kern/35484, kern/35230.
2002-03-04 00:36:04 +00:00
Orion Hodson
b3aeda3f1f Add support for VT8233. 2002-03-01 20:30:13 +00:00
Alfred Perlstein
472cd8b5ef Add play (but not record) support for the Sis 7012.
Submitted by: Mike Meyer <mwm@mired.org>
2002-02-19 00:59:23 +00:00
Scott Long
60d1d6861b Recent changes to newpcm require that the CHANNEL_SETFORMAT op return 0
for success, non-zero otherwise.  The maestro and maestro3 drivers were
returning the format code, which was being interpreted as a failure code.
Fixed.  No one seems to have noticed that the maestro driver was broken,
but I'll fix it anyways.

MFC after:	2 weeks
2002-01-27 23:09:41 +00:00
Orion Hodson
bd8e0aee01 Change ich_calibrate to busy wait on buffer fill level and use a more
likely looking rate calculation.

Install interrupt handler before calling ich_init as the initialization
occasionally generates spurious interrupts.

These changes are derived from cg's work in progress version of this
driver.
2002-01-18 18:44:41 +00:00
Seigo Tanimura
995231304d - Provide toggles to show debug messages. Set new sysctl variables
hw.midi.debug and hw.midi.seq.debug to 1 to enable debug log.

- Make debug messages human-frendly.

- Implement /dev/music.

- Add a timer engine required by /dev/music.

- Fix nonblocking I/O.

- Fix the numbering of midi and synth devices.
2002-01-04 01:13:49 +00:00
Seigo Tanimura
05331bc6d4 - Do not uiomove with a mutex locked.
- Move from msleep/wakeup to condvar.

- Return either zero or a positive errno value from a function.
  Return additional result via references.

- Unify the typedef of callback functions.
2002-01-01 17:36:26 +00:00
Orion Hodson
aaa167872e Save and restore state for suspend/resume.
PR:		kern/28692
Obtained from:	SAKIYAMA Nobuo <sakichan@sakichan.org>
2001-12-21 19:20:28 +00:00
Orion Hodson
df6ee7b7a1 Correct unexpected interrupt detection. 2001-12-19 18:26:53 +00:00
Orion Hodson
faee270315 Nitlets. 2001-12-19 18:04:04 +00:00
Orion Hodson
23d2179744 Clear resume interrupts - these can occur during initialization and
must be cleared to prevent machine hanging (presently aflicts -current
and -stable).

Problem reported by Bruce Montague <brucem@cse.iitkgp.ernet.in>

PR:		kern/29769 (probably)
2001-12-19 17:38:38 +00:00
Orion Hodson
0225c5ac86 Add calibration test to determine extent of AC97 overclocking (if any). 2001-12-18 03:29:31 +00:00
Orion Hodson
2ae4ee833d Added a sysctl control variable "ac97rate" to allow manual tuning of
the link rate - some ich motherboards overclock ac97 out of the box.

Will hopefully replace this with a callibration loop in time for 4.5R
freeze.

Problem reported by Luigi Rizzo and fix derived from his code (put
diff in ich.c rather than ac97.c).

MFC after:	3 days
2001-12-17 01:57:42 +00:00
Orion Hodson
1abb0234c3 Addition of sysctl variable to enable spdif. By default spdif is disabled.
MFC after:	3 days
2001-12-17 01:39:36 +00:00
Guido van Rooij
3068bdba98 Fix resume for HP Omnibook 500's.
MFC after:	1 week
2001-12-05 10:36:32 +00:00
Mitsuru IWASAKI
a02ab1042e Add suspend/resume support.
MFC after:	1 week
2001-11-24 18:00:33 +00:00
Orion Hodson
21f3068887 Fix typo introduced with last commit. 2001-11-22 23:38:26 +00:00
Orion Hodson
eb5b9d0b87 Correct extmode initialization.
MFC after:	3
2001-11-21 04:26:04 +00:00
Orion Hodson
2065c8c619 Set extmode according to extcaps. Fixes codec sample rate failures
that causes noisy playback with rates other than 48k (reported by
Olexander Kunytsa).

MFC after:	3 days
2001-11-21 04:06:52 +00:00
Jeroen Ruigrok van der Werven
41425f4fac Remove clkrun_hack for ThinkPad 570.
PR:		28031
Submitted by:	Tan Koan-Sin <freedom@csie.nctu.edu.tw>
MFC after:	2 weeks
2001-11-15 18:51:08 +00:00
Peter Wemm
aaa3add4ea Add Id for 82801CA (ICH3?). The ich driver seems to work fine on the
laptop that had it.
2001-11-03 05:07:59 +00:00
John Baldwin
02185af5a9 Change the module name from 'snd_sonicvibes' to 'snd_vibes' as that is
the filename (thus the "old" module name) and the name used by
snd_driver.ko.
2001-10-24 21:44:07 +00:00
John Baldwin
579f17a038 Change module name from 'snd_als' to 'snd_als4000' to match name in
snd_driver.ko.
2001-10-24 21:42:06 +00:00
John Baldwin
0ff24d06f7 Change the module name from 'via' to 'snd_via82c686' to match the KLD
filename and in snd_driver.ko.
2001-10-24 21:38:08 +00:00
John Baldwin
ee1fbec1bf Change the module name from 'snd_cmipci' to 'snd_cmi' to match the
filename, module name in the loader, the dependency in snd_driver.ko, and
to be consistent with other sound drivers.
2001-10-24 21:35:31 +00:00
Scott Long
73b9d66d9a Turn on the hardware volume buttons that are present on most laptops with
these chips.  There is a new hint, hint.pcm.N.hwvol_config, that can be set
to 1 or 0 to select which pins the buttons are connected to.  I'm open to
suggestions on where to document this.  Also bump the number of playback
channels up to 4.

MFC after:	3 days
2001-10-14 19:22:51 +00:00
Orion Hodson
9b6a5708db use pcm_getbuffersize() 2001-10-10 17:56:35 +00:00
Scott Long
baadfb4c1e Update to using the pcm_getbuffersize() method.
Fix an off-by-one error in the saving of the dsp memory.
Up the play channels to 2.

MFC after:	3 days
2001-10-09 19:46:09 +00:00
Cameron Grant
a791cfee44 use pcm_getbuffersize()
only creat a mic recording channel if the codec supports it
2001-10-08 06:10:39 +00:00
Cameron Grant
50388172c5 use pcm_getbuffersize()
use seperate dma tags for buffers and control info
2001-10-08 06:01:13 +00:00
Cameron Grant
39dbd126c7 use pcm_getbuffersize() 2001-10-08 05:59:54 +00:00
Cameron Grant
82ab7a3bc2 * register the correct number of channels
* include hw buffer size in sndstat info
2001-10-07 23:31:52 +00:00
Cameron Grant
fca71897c4 don't enable the mic record channel unless the codec supports it.
allow hardware buffer size to be specified using hints.
2001-09-18 14:53:01 +00:00
Seigo Tanimura
4ce6a64b25 Catch up to the last commit of KSE. 2001-09-15 08:14:23 +00:00
Brian Feldman
a46252c61f Convert the CMedia driver to using a device mutex and INTR_MPSAFE. 2001-09-08 05:20:52 +00:00
Orion Hodson
bb76bd1180 Return updated blocksize from setblocksize function. 2001-09-03 02:14:55 +00:00
Orion Hodson
61608985c7 Fix return value of cs4281chan_setblocksize. 2001-09-03 01:05:04 +00:00
Orion Hodson
256e749243 Fix return value of svchan_setblocksize.
Expand probing range.
2001-09-03 01:03:50 +00:00
Orion Hodson
167d1bcd19 Fix return value of setblocksize functions. Recording is interspersed
with silent intervals otherwise.
2001-09-03 00:45:00 +00:00
George C A Reid
0a1e38d38a Add support for the Acer Labs M5451 chip.
Submitted by:	Mitsuru IWASAKI <iwasaki@jp.FreeBSD.org>
2001-08-29 09:04:22 +00:00
Cameron Grant
9924faf6e7 * change buffering method a bit
* swap record/mic channels
* initialise all channels
* align dma buffers to 8 bytes

Submitted by:	Katsurajima Naoto <raven@katsurajima.seya.yokohama.jp>
(mostly)
2001-08-29 02:31:03 +00:00
Cameron Grant
52eb6afd0c MFS rev 1.8.2.8:
release resources on detach

Submitted by:	"Christopher N . Harrell" <cnh@netvmg.com>
2001-08-27 00:54:26 +00:00
George C A Reid
874f2e78b4 Add support for the SiS 7018
PR:		30100
Submitted by:	Ada Lim <adal@cse.unsw.edu.au>
2001-08-26 19:15:28 +00:00
Cameron Grant
48875621e1 make the 4dwave nx chip work
Submitted by:	Philippe Anel <xigh@noos.fr>
2001-08-23 12:02:29 +00:00
Cameron Grant
67b1dce3bc many changes:
* add new channels to the end of the list so channels used in order of
addition

* de-globalise definition of struct snddev_info and provide accessor
functions where necessary.

* move the $FreeBSD$ tag in each .c file into a macro and allow the
/dev/sndstat handler to display these when set to maximum verbosity to aid
debugging.

* allow each device to register its own sndstat handler to reduce the amount
of groping sndstat must do in foreign structs.
2001-08-23 11:30:52 +00:00
George C A Reid
1ad86e6dd7 Set up the via_chinfo structures properly so we write to the correct
registers later on; this fixes the VIA82C686 sound problems recently
reported by a number of people.
2001-08-02 22:13:10 +00:00
Scott Long
19f2be11b0 Limit the device to only one playback channel until I can figure out why
a) newpcm insists on using only the highest number channel available, and
b) the maestro3 driver no longer likes anything above channel 0.
2001-07-19 20:53:52 +00:00
Scott Long
e93d24c2f0 Fix an off-by-one error in the dma tag. This was causing the VM system to
freak out occasionally.

MFC after:	1 week
2001-07-19 20:51:29 +00:00
Peter Wemm
57385865a9 Somehow I missed this. Use INTR_TYPE_AV (high priority) instead of
INTR_TYPE_TTY (lowest priority).
2001-07-09 23:44:54 +00:00
Cameron Grant
41a019c08d * simplify
* add support for mic record channel

* add support for setblocksize

* make mpsafe

* make getptr accurate

* reduce buffer size from 64k to 16k for better synchronisation
2001-07-03 17:27:13 +00:00
Brian Feldman
5e6abe66d8 Detect the device on e.g. Dell OptiPlex GX110s. 2001-07-02 15:29:38 +00:00
Cameron Grant
1b6c76a2fe intel ich/ich2 driver - this needs some work but is functional enough for
the impatient.

Hardware...
Provided by:    ps
Lost by:        <censored>
Found by:       <censored>
Not delivered by:       Ashley Penney <ashp@unloved.org>
Retrieved by:   greid, Andrew McKay <andy@openirc.co.uk>
Delivered by:   Andrew McKay <andy@openirc.co.uk>

PR:             kern/25507
Submitted by:   Katsurajima Naoto <raven@katsurajima.seya.yokohama.jp>
2001-07-01 19:38:58 +00:00
Cameron Grant
113375dc42 add module version/dependancies 2001-07-01 18:59:15 +00:00
Cameron Grant
8e81760b1a the turtle beach santacruz implements ac97 eapd in an inverted sense -
inform the ac97 code of this.
2001-06-23 18:00:06 +00:00
George C A Reid
733a4ea771 Use the M_ZERO flag to malloc(9)
Reviewed by:	cg
MFC after:	1 week
2001-06-21 19:45:59 +00:00
Cameron Grant
b30d115684 stop csa from panicing in clkrun_hack() - we were using free'd memory
don't leak memory in clkrun_hack()

Submitted by:	grog (partially)
2001-06-18 19:58:03 +00:00
Thomas Moestl
916076fefc Call bus_teardown_intr when csa_attach fails after the interrupt has
been set up.

PR:		kern/28178
Reviewed by:	cg
MFC after:	2 weeks
2001-06-18 18:36:34 +00:00
Peter Wemm
46700f1259 Use INTR_TYPE_AV for the interrupt handlers because:
1: most drivers are sensitive to timing, and
2: the handlers are MPSAFE and need a chance to get into the kernel
before some other non-mpsafe handler blocks the ithread on Giant in
shared irq cases.

Reviewed by:	cg  (in principle)
2001-06-16 22:59:46 +00:00
Cameron Grant
d95502a838 use a global devclass for all drivers - i'm not entirely sure why this
worked before.

mixer, dsp and sndstat are seperate devices - give them their own cdevsws
instead of demuxing requests sent to a single cdevsw.

use the si_drv1/si_drv2 fields in dev_t structures for holding information
specific to an open instance of mixer/dsp.

nuke /dev/{dsp,dspW,audio}[0-9]* links - this functionality is now provided
using cloning.

various locking fixes.
2001-06-16 21:25:10 +00:00
Cameron Grant
94faf89997 identify es1371 revision a 2001-06-11 00:32:18 +00:00
Cameron Grant
7d07ee8c6b get clkrun the right way around
remove debug messages
2001-06-11 00:29:25 +00:00
Seigo Tanimura
e6577f69a4 Catch up to csareg.h rev 1.3.
Forgotten by:	cg
2001-06-08 11:57:39 +00:00
Cameron Grant
3c20ba7175 fix typo 2001-05-30 22:46:40 +00:00
Cameron Grant
8d41a999cd no longer used 2001-05-30 22:41:04 +00:00
Cameron Grant
20ac1df714 update this driver to use new firmware and incorporate many fixes.
this works on cs4630 chips, and should implement the clkrun hack for
thinkpads- this will display diagnostic messages when triggered until its
correctness is established.
2001-05-30 22:38:31 +00:00
Cameron Grant
6cf2606901 state the licencing terms for this file
Obtained From:	Yamaha
2001-05-30 19:05:47 +00:00
Scott Long
7edce08ac4 Fix DMA on machines with more than 128MB.
Obtained from:	cg
MFC after:	5 days
2001-05-25 16:05:22 +00:00
Cameron Grant
680307ae14 be more specific in identifying the chip type 2001-04-27 22:26:36 +00:00
Cameron Grant
15418cf2bb get the parameters to pci_write_config the right way round. this may fix
some non-functional cards/machines
2001-04-24 22:35:11 +00:00
Orion Hodson
1f2b9fe67a Initial version of Avance Logic ALS4000 pcm driver. 2001-04-23 21:53:12 +00:00
Orion Hodson
5090c9953c Add power on to start sequence for 4.x kernels.
PR:		kern/26255
Submitted by:	WATANABE Kiyoshi <aab10490@pop16.odn.ne.jp>
2001-04-19 13:23:50 +00:00
George C A Reid
e572fcd463 Add another card to the list of Neomagic 256AV's which don't have AC97
codecs. Also, add some additional code to check for future cards without
this feature - attempting to initialise them as AC97 cards will hang the
machine.

PR:		26427
Reviewed by:	cg
2001-04-10 14:28:21 +00:00
George C A Reid
46ae634c56 Add yet another chip revision of the ES1371 which requires initialisation
delays

PR:		26415
Submitted by:	Jose M. Alcaide <jose@we.lc.ehu.es>
Reviewed by:	cg
2001-04-08 00:07:53 +00:00
Orion Hodson
7370c6a68a Quieten when re-triggering. 2001-04-07 14:12:53 +00:00
Orion Hodson
8b330062da Centralize DMA buffer configuration.
Simplify initialization and remove offending DMA channel resets there.
The resets trash whatever is pointed to DMA registers, but at cmi_attach()
time the DMA registers have not been initialized with valid addresses.

Reviewed by:	Cameron Grant <gandalf@vilnya.demon.co.uk>
2001-04-04 13:48:33 +00:00
Orion Hodson
417f47c4d5 - Added suspend/resume support.
- Added 4 speaker enable to initialization sequence.

- Removed delays between register pokes which appear to aggravate a
  problem this card has sampling at 44.1kHz.  With any form of delay,
  skew relative to system clock at 44.1kHz is usually in range 0-25%
  (now 0-3%).  No other rates exhibit this problem.

- Changed structs cmi_* to sc_*.

Approved by:    Cameron Grant <gandalf@vilnya.demon.co.uk>
2001-03-29 15:36:31 +00:00
Cameron Grant
26799605fc fix whitespace bogons 2001-03-25 21:43:24 +00:00
Cameron Grant
66ef8af5b0 mega-commit.
this introduces a new buffering mechanism which results in dramatic
simplification of the channel manager.

as several structures have changed, we take the opportunity to move their
definitions into the source files where they are used, make them private and
de-typedef them.

the sound drivers are updated to use snd_setup_intr instead of
bus_setup_intr, and to comply with the de-typedefed structures.

the ac97, mixer and channel layers have been updated with finegrained
locking, as have some drivers- not all though.  the rest will follow soon.
2001-03-24 23:10:29 +00:00
Cameron Grant
c78683be1f when writing to one of the setup registers, a 32-bit write is required.
this apparently fixes problems initialising certain es1371/es1373/ct5880
revisions.

Confirmed working by: Richard J Kuhns <rjk@grauel.com>
PR:		i386/25944
2001-03-24 20:36:59 +00:00
Orion Hodson
50aac86c8a Change type of channel speed variable from "int" to "u_int32_t" to
avoid overflow when scaling playback rate.  Fixes 44.1k playback from
being 48k (I am deaf to this difference...).
2001-03-21 14:10:51 +00:00
Orion Hodson
bd01f3f982 Change ordering of SPDIF register pokes. SPDIF enable needs to be the
last poke in sequence.  Enabling SPDIF was coercing output rate to
48K, not good for 44.1K tracks.
2001-03-21 12:51:37 +00:00
Orion Hodson
dfe67249d2 pcm driver for S3 Sonicvibes chipset.
Reviewed by:	Cameron Grant
2001-03-19 00:26:41 +00:00
Seigo Tanimura
5ddde3e6fd - Do not touch the Giant.
Requested by:	jhb

- Initialize a mutex prior to locking it.

Spotted by:	dcs
2001-03-14 07:29:47 +00:00
Cameron Grant
415dc6874f MFS: don't ignore the result of mixer_init() 2001-03-05 17:51:28 +00:00
Cameron Grant
1c46beb55c only mess with the power state on 5.x 2001-03-05 17:30:43 +00:00
Scott Long
ea0e6ecfe9 Don't re-init the mixer on resume. This keeps the channel volumes from
being trashed when you suspend, though this may need to be revisited if we
ever get suspend-to-disk implememted.
2001-02-27 18:40:07 +00:00
Seigo Tanimura
87a636ccb0 - Mutexify midi(4). The driver runs under the giant lock by default.
If you ever want to run midi(4) out of the giant lock, uncomment
MIDI_OUTOFGIANT in midi.h. Confirmed to work for csamidi with WITNESS
and INVARIANTS.

- midi_info, midi_open and seq_info are now tailqs, allowing arbitrary
numbers of devices to be configured.

- Do not send an active sensing message to reset midi modules.

- Clone /dev/sequencer*. /dev/sequencer0 and /dev/sequencer are generated
upon initialization.
2001-02-26 07:36:24 +00:00
Seigo Tanimura
941afeb22d Encapselate midi_info, nmidi and nsynth into midi.c. 2001-02-18 15:58:56 +00:00
Yoshihiro Takahashi
38bc72e431 Don't assume bus_space_handle_t == the start address of resource.
Use rman_get_start() instead.
2001-02-16 13:29:41 +00:00
Cameron Grant
9725922ed9 add power management support.
Submitted by:	Orion Hodson <O.Hodson@cs.ucl.ac.uk>
2001-02-13 21:00:22 +00:00
Cameron Grant
17e401f8a9 add driver for CS4281 sound chips
Submitted by:   Orion Hodson <O.Hodson@cs.ucl.ac.uk>
2001-02-04 19:23:35 +00:00
Cameron Grant
ebbb717721 add driver for CMedia CMI8338/CMI8738 sound chips
Submitted by:   Orion Hodson <O.Hodson@cs.ucl.ac.uk>
2001-02-04 19:13:40 +00:00
Scott Long
a5108eaebf Driver for the ESS Maestro3 and Allegro sound chips. Note that due to the
amount of GPL'd firmware in the driver, it will only be built as a module.

Approved by:	cg
2001-02-01 20:29:16 +00:00
Cameron Grant
1a8de399e7 don't grope around inside snd_dbuf structures as they will change in future 2001-01-24 01:36:15 +00:00
Cameron Grant
2707da0758 fix certain cards failing to attach
Submitted by:	Russell Cattelan <cattelan@thebarn.com>
2001-01-24 01:27:31 +00:00
Cameron Grant
03d18442f6 fix blocksizing for playback, implement blocksizing for record 2001-01-24 01:22:53 +00:00
Cameron Grant
7ed9700b1f some cosmetics, changed channel setup and revamped irq handling - ignore
repeated interrupts
2001-01-24 01:20:04 +00:00
John Baldwin
e97abfe751 Catch up to the name changes in the hwvol API. 2001-01-11 23:26:38 +00:00
John Baldwin
0f32b57ac4 Call mixer_hwinit() when attaching. 2001-01-05 07:07:48 +00:00
John Baldwin
1b40801722 - When acknowledging interrupts, write the value 0xff to the interrupt
status register rather than 0.  Without this, a single hardware volume
  event triggers an interrupt storm.
- Implement hardware volume control for the Maestro chips.  This version
  only handles the case where both channels are adjusted at the same time.

Reviewed by:	cg
2001-01-03 01:32:57 +00:00
Cameron Grant
b87eb3b531 move parametric defines and structure definitions from .h to .c 2000-12-25 02:49:28 +00:00
Cameron Grant
a6b5683876 indent debugging printfs, change a couple of messages slightly 2000-12-25 02:21:16 +00:00
Cameron Grant
6a2e12e0dd update to return correct blocksize- these chips have a fixed irq rate, so
block size varies only with format and rate.
2000-12-25 01:42:13 +00:00
Cameron Grant
f0fb042e84 fairly substantial rewrite- seperate out play/record code, implement
setblocksize, simplify resource allocation
2000-12-24 03:56:41 +00:00
Cameron Grant
ac083c91f8 implement setblocksize properly 2000-12-23 22:24:43 +00:00
Cameron Grant
e246070f8a kill a warning 2000-12-23 05:19:32 +00:00
Cameron Grant
350a5fafb1 update code dealing with snd_dbuf objects to do so using a functional interface
modify chn_setblocksize() to pick a default soft-blocksize appropriate to the
sample rate and format in use.  it will aim for a power of two size small
enough to generate block sizes of at most 20ms.  it will also set the
hard-blocksize taking into account rate/format conversions in use.

update drivers to implement setblocksize  correctly:
updated, tested: 	sb16, emu10k1, maestro, solo
updated, untested: 	ad1816, ess, mss, sb8, csa
not updated: 		ds1, es137x, fm801, neomagic, t4dwave, via82c686

i lack hardware to test: ad1816, csa, fm801, neomagic
others will be updated/tested in the next few days.
2000-12-23 03:16:13 +00:00
Cameron Grant
688ca063da fix a debugging leftover (min speed=48khz) 2000-12-20 05:21:17 +00:00
Cameron Grant
0f55ac6c1a kobjify.
this gives us several benefits, including:

* easier extensibility- new optional methods can be added to
  ac97/mixer/channel classes without having to fixup every driver.

* forward compatibility for drivers, provided no new mandatory methods are
  added.
2000-12-18 01:36:41 +00:00
Julian Elischer
07076ce1f7 Bump the buffersize from 0x1000 to 0x4000.
0x1000 gets underflows on my dell 7500 whenever I moved the mouse.
(reported as "hwptr went backwards...", with jumpy sound)
Sounds great now....
2000-11-21 12:22:11 +00:00
Cameron Grant
b7d3143b0d fix es1370 mixer by adding reinit function to it's mixer function list. 2000-11-06 02:37:28 +00:00
Cameron Grant
9ec437a334 add reinit functions to mixers
unstaticize chn_start()
add reset/resetdone functions to channels
2000-10-26 20:46:58 +00:00
Poul-Henning Kamp
db7e3af111 Remove unneeded #include <machine/clock.h> 2000-10-15 14:19:01 +00:00
Nick Sayer
04c24efdc1 Add suspend/resume hooks.
Submitted by: sean@stat.duke.edu
2000-09-28 14:02:49 +00:00
Cameron Grant
7dfc932548 fix warnings 2000-09-17 23:46:32 +00:00
Cameron Grant
0a1fe8922f disable 16bit mono support- this will be handled by software conversion to
stereo as hardware mono is very noisy
2000-09-09 21:31:06 +00:00
Cameron Grant
306f91b60b detach support
remove un-needed setdir functions
add bus_teardown_intr calls where necessary
destroy our dma tags where necessary
destroy ac97 before releasing resources
2000-09-09 19:21:04 +00:00
Cameron Grant
7d60928719 ess maestro driver - not enabled by default
Submitted by:   Taku YAMAMOTO <taku@cent.saitama-u.ac.jp>
2000-09-06 20:10:55 +00:00
Cameron Grant
cd2c103ae0 initial support for multiple ac97 codecs 2000-09-05 21:08:01 +00:00
Cameron Grant
c02f3f7aee add detach support 2000-09-05 21:06:11 +00:00
Poul-Henning Kamp
db90128160 Avoid the modules madness I inadvertently introduced by making the
cloning infrastructure standard in kern_conf.  Modules are now
the same with or without devfs support.

If you need to detect if devfs is present, in modules or elsewhere,
check the integer variable "devfs_present".

This happily removes an ugly hack from kern/vfs_conf.c.

This forces a rename of the eventhandler and the standard clone
helper function.

Include <sys/eventhandler.h> in <sys/conf.h>: it's a helper #include
like <sys/queue.h>

Remove all #includes of opt_devfs.h they no longer matter.
2000-09-02 19:17:34 +00:00
Cameron Grant
33dbf14a17 change mixer api slightly
change channel interface - kobj implementation coming soonish
make pcm_makelinks not panic if modular
add pcm_unregister()

these changes support newpcm kld unloading, but this is only implemented
by ds1.c
2000-09-01 20:09:24 +00:00
Cameron Grant
f2d00399d1 remove stuff accidentally left in last commit 2000-08-29 20:53:56 +00:00
Cameron Grant
1088e98b00 suspend/resume for ds1 driver
PR:		misc/20891
Submitted by:	Ira L. Cooper <ira@mit.edu>
2000-08-29 20:50:42 +00:00
Cameron Grant
dacda62ff2 add driver for forte-media fm801
PR:             conf/20698
Submitted by:   dimmy the wild <diwil@dataart.com>
2000-08-29 16:12:28 +00:00
Doug Rabson
e6171135a7 Fix disordered arguments to bus_space_barrier(). 2000-08-28 21:02:18 +00:00
Cameron Grant
513693be6c rework feeder sytem to allow feeders in klds
modify driver capability reporting format to list every audio format
seperately- required for above and because we could not previously indicate
that mono was unsupported.

there should be no functional impact.
2000-08-20 22:18:56 +00:00
Cameron Grant
4e77c04865 don't complain about bad irqs if using a shared irq 2000-08-19 18:22:20 +00:00
Nick Sayer
6ba60b3c4a This patch appears to solve the problems with recording resulting
in bogus hwptr warnings. Further comments sought on -hackers
were not forthcoming. I can only hope that calling DELAY() like
this doesn't cause any heartburn.
2000-08-13 19:20:02 +00:00
Cameron Grant
4873b46dc7 change irq handling slightly
add another non-ac97 256av
2000-08-09 18:51:27 +00:00
Nick Sayer
0edeb3dc90 A couple of cosmetic fixes, plus a biggie: When checking the DMA
position, channel 1's dma position register must be quiescent. So
the driver will spl, pause the DMA, delay a bit and hold as still as
possible while snapping the picture.

I'm sure there HAS to be a better way to do this, but if there is, it's
not documented.

So far as I can tell, this fixes recording, which means the Solo is open
for business.
2000-08-09 07:14:56 +00:00
Cameron Grant
fb9f118e6f new driver: via 82c686 chipset audio
not personally tested, but i'm assured it works

Submitted by:	David Jones <dej@ox.org>
PR:		kern/20161
2000-08-09 00:55:55 +00:00
Cameron Grant
6c1146c0b8 fix the staticy sound issue
use timer instead of per-channel interrupts

do playback like the linux driver - may fix nmi-with-ecc issue
2000-08-06 18:10:05 +00:00
Nick Sayer
3ac1ca3363 1. Increase the size of the DMA buffer.
2. Offer half duplex with both playback and record on channel 1 or
full duplex with playback always on channel 2 as a compile-time option.

3. 16 bit record output is byte swapped for some dumb reason. Report the _BE
AFMTs for recording.
2000-08-02 22:45:57 +00:00
Nick Sayer
a7e1150660 Undo some of my own damage. With this patch, it appears that both
recording and playback now work correctly.
2000-08-02 19:37:43 +00:00
Nick Sayer
bb7f26c3d9 Fix channel 1 playback the rest of the way. There are a couple of
hiccups, but playback now proceeds mostly normally using both channel 1
and 2.
2000-08-02 15:09:39 +00:00
Nick Sayer
19a0702e86 Get playback on channel 1 closer to working. 8 bit samples work.
16 bit samples have some sort of choppiness, the nature of which
is not completely clear, but it clearly has something to do with
dma buffer synchronization. But at least channel 1 makes noise now.
2000-08-02 08:01:00 +00:00
Nick Sayer
8eb3acc9be Fix channel 1, sort of. recording now generates IRQs and the output
appears to be the correct length, but quality of output has not yet
been tested. Also, full duplex audio (that is, playback on channel 1)
does not yet work. Two constants and I am there!

Obtained from:	major hints from ALSA
2000-08-02 06:36:55 +00:00
Nick Sayer
80a8e065eb Reverse the sense of the signed/unsigned formatting bit.
This dramatically cleans up playback quality, at least with mxaudio.
2000-08-01 04:18:15 +00:00
Cameron Grant
fd1aaeccce almost-there ess solo-1 driver, committed so people can tell me why it
doesn't generate irqs.
2000-07-31 16:17:40 +00:00
Cameron Grant
3c1b957d66 do the ac97 init delay for all chips and increase it to 500ms 2000-07-30 02:33:37 +00:00
Seigo Tanimura
fb0ef52838 Finally merge newmidi.
(I had been busy for my own research activity until the last weekend)

Supported devices:

SB Midi Port			(sbc + midi)
SB OPL3				(sbc + midi)
16550 UART			(midi, needs a trick in your hint)
CS461x Midi Port		(csa + midi)

OSS-compatible sequencer	(seq)

Supported playing software:

playmidi			(We definitely need more)

Notes:

/dev/midistat now reports installed midi drivers. /dev/sndstat reports
only pcm drivers. We need the new name(pcmstat?).

EMU8000(SB AWE) does not sound yet but does get probed so that the OPL3
synth on an AWE card works.

TODO:

MSS/PCI bridge drivers
Midi-tty interface to support general serial devices
Modules
2000-07-11 11:49:33 +00:00
Cameron Grant
f314f3dad2 add module metadata. this is a hack, sound drivers will eventually present a
bus to which pcm, mixer, etc will attach.
2000-07-03 20:52:27 +00:00
Ollivier Robert
c790e2240e This is the patch to make my soundcard, a Creative Ensoniq AudioPCI (an
es1371 chip, device id 0x58801274 rev 0x02).

Submitted by:	Kenneth Wayne Culver <culverk@wam.umd.edu>
2000-07-02 14:17:41 +00:00
Cameron Grant
70776a9c0b add alpha-quality recording code and handle pci error interrupts - this may
prevent the card generating an nmi on ecc systems.  for now a message is
printed on every pci error and it seems every time we start playng we get one
2000-06-13 23:24:40 +00:00
Peter Wemm
83fc8b6d34 Unused includes: #include "pci.h", #include "pcm.h" 2000-06-10 07:15:15 +00:00
Dan Moschuk
7bf9834a55 Increase delay from 10mu to 1000mu when reading play control size. This
allows the YMF744 to initialize properly.
2000-06-09 16:44:30 +00:00
Cameron Grant
2f9aa04e7f this driver does not support the cs4281 and probably never will, different code
will be required
2000-06-06 22:42:57 +00:00
Cameron Grant
dafad92c7d support recording 2000-06-06 22:34:09 +00:00
Peter Wemm
3e0f102e57 With this evil hack the DS1 driver works on our Intel desktop
motherboards that use YMF740's.  It has a strange subvendor and subdevice
ID and requires a disturbingly long delay after the ac97 codec init.
Cameron hasn't had this driver tested on another 740 yet, so we don't know
if this is a quirk of all 740's, or if its just something about the codec
that Intel used.
2000-06-01 03:58:27 +00:00
Cameron Grant
e05327ee1b if we get bad values for playctrlsize, the firmware may not have initialised
yet so retry.
2000-06-01 01:29:05 +00:00
Cameron Grant
2176a9588a add a bit more diagnostic info for the bus_dmamap_load failure case 2000-05-31 19:04:12 +00:00
Cameron Grant
bd68ce8be9 yamaha ds1/ds1e pci sound driver - work in progress, mixer and playback only.
tested on ymf724f only.

conf/files entry is commented out, enable it manually to test this code and
let me know results.
2000-05-31 03:21:36 +00:00
Peter Wemm
4cbef178df Use the correct name for a mapping register, not the old FreeBSD 2.x
compatability name.
2000-05-28 15:15:14 +00:00
Cameron Grant
35f9e4a1db handle emulated dma reads
don't try to get sample size from snd_dbuf
2000-05-26 21:15:47 +00:00
Jake Burkholder
e39756439c Back out the previous change to the queue(3) interface.
It was not discussed and should probably not happen.

Requested by:		msmith and others
2000-05-26 02:09:24 +00:00
Jake Burkholder
740a1973a6 Change the way that the queue(3) structures are declared; don't assume that
the type argument to *_HEAD and *_ENTRY is a struct.

Suggested by:	phk
Reviewed by:	phk
Approved by:	mdodd
2000-05-23 20:41:01 +00:00
Yoshihiro Takahashi
d2fce85dba Oops, rman_get_bushandle() should be converted to rman_get_virtual()
if resources are mapped to memory.
2000-05-20 16:15:50 +00:00
Yoshihiro Takahashi
7c14268dbd Supported the mss on PC-98 and Sound Blaster 98.
Submitted by:	"T.Yamaoka" <taka@windows.squares.net>
2000-05-19 15:41:52 +00:00
Cameron Grant
35d9c60d76 repo-copied to sys/gnu/dev/sound/pci/emu10k1.h 2000-04-26 19:53:46 +00:00
Cameron Grant
0ffbc64fe6 update for new location of emu10k1.h under sys/gnu 2000-04-26 19:51:19 +00:00
Cameron Grant
19b6ac092e try the fix from creative bugzilla for nmi problem
Obtained from:	creative labs bugzilla
2000-04-18 19:11:38 +00:00
Cameron Grant
674c45bd04 make drivers start at beginning of buffer when triggered - improves mmap.
not all tested.

not sure about aureal.c or csapcm.c
2000-04-17 16:57:12 +00:00
Cameron Grant
2d3ce9d56e decrease buffer size to 4k
use a seperate channel for generating irqs so we get a buffer-half-empty
interrupt, prevents repeating on underflow
2000-04-05 02:14:26 +00:00
Cameron Grant
8b455f8d05 move buffer size definition to .c file for consistency, and reduce it to 4k 2000-04-05 00:38:00 +00:00
Cameron Grant
97b3c9d804 make the click on starting output go away 2000-04-04 02:16:15 +00:00
Cameron Grant
8046c76306 fix missing defines and prototype for emu_vdump() 2000-04-03 00:28:43 +00:00
Cameron Grant
c067afaa06 unfinished sblive driver, playback/mixer only for now - not enabled in
conf/files

i don't seem to be clearing the cache right resulting in a short initial
burst of noise, despite doing the same as creative and alsa.  i'm committing
now so more eyes can pore over the code.
2000-04-02 07:41:17 +00:00
Cameron Grant
e620d95952 fail in attach if we seem to have no ac97 codec 2000-04-01 22:24:03 +00:00
Cameron Grant
39004e693d update the ac97 layer:
* add a callback for initialising the mixer interface
* support ac97 2.1 variable rate audio feature

fix ac97-using drivers for the above

add suspend/resume support for neomagic
2000-03-20 15:30:50 +00:00
Peter Wemm
5775b1a2b6 Tidy up stray or bogus #if NFOO > 0 and #include "foo.h". 2000-01-29 18:48:30 +00:00
Seigo Tanimura
8f7076b8ff The pointer of the serial FIFO in the DSP seems to make an error
upon starting/stopping the DSP. Correct the pointer in addition
to clearing the FIFO.
2000-01-23 07:04:02 +00:00
Cameron Grant
03a00905d3 update ac97 layer to use device_printf when printing messages 2000-01-18 17:13:43 +00:00
Peter Wemm
615407b5a0 Some SB128's (ES1371) have a different PCI vendor id. Vendor == 0x3274
instead of the normal 0x1274.

Tested by:	des
2000-01-17 07:54:00 +00:00
Cameron Grant
0a12fe07e7 oops, best play format was set to unsigned 16 bit instead of signed 16 bit
stereo.  remenant from testing.
2000-01-16 12:05:07 +00:00
Cameron Grant
5b4c3f3ca0 be less verbose 2000-01-13 06:00:57 +00:00
Cameron Grant
e7fb32964c exclude chips with subdevices specified on a list of non-ac97 chips 2000-01-11 10:37:16 +00:00
Cameron Grant
10b23f4c02 don't complain about bad intrs unless we get 1000 of them consecutively
whilst we are playing or recording.  since we should irq ~20 times/sec when
active, this should never trigger.  in theory.  if it never does trigger,
the check will be removed.
2000-01-10 06:19:20 +00:00
Cameron Grant
4ee074718b return the sample rate set instead of 0. oops. mpg123 should now work. 2000-01-10 01:59:12 +00:00
Cameron Grant
d5fa8408e6 driver for neomagic 256av and 256zx
Obtained from:	anonymous author, heavily derived
2000-01-09 08:14:11 +00:00
Cameron Grant
ebb0b1f9bb set up the pci regs properly for busmastering. this makes the card work on
my smp box.
2000-01-05 02:03:55 +00:00
Seigo Tanimura
769309aaf2 Do not start/stop DMA transfer if it is already started/stopped. 2000-01-03 05:26:12 +00:00
Seigo Tanimura
f259d7eed5 - Handle an interrupt for csa primarily in the bridge driver,
then invoke the children. As the value of HISR can be read
  only once, pass the HISR to the children via struct
  csa_bridgeinfo, stored in the ivars of them.
- Clear the contents of serial FIFO upon stopping the DMA for
  playing. This may eliminate buzz on playing. Experimental.
2000-01-03 02:51:16 +00:00
Seigo Tanimura
f7e00c54d1 Correct the delay durations as in the sample sources provided by Crystal Semiconductor. 2000-01-01 09:07:03 +00:00
Cameron Grant
2635fee807 make es1373 chips with ac97 2.1 work on troublesome motherboards
Submitted by:	Russell Cattelan <cattelan@thebarn.com>
1999-12-29 05:44:17 +00:00
Cameron Grant
a0b57fb738 - latest 2ndbuffer patch
- make chn_setdir work for rec on isa cards
- note: es1371 does not irq in smp

Submitted by:	tanimura
1999-12-29 03:46:54 +00:00
Cameron Grant
d37a380ddb general tidyup 1999-12-19 17:51:32 +00:00
Cameron Grant
dedf4424a0 increase buffer size, reduce number of channels allocated since we only use
1 at the moment
1999-12-12 02:16:14 +00:00
Seigo Tanimura
7012990a73 Make the origins clear.
Pointed out by:	Tatoku Ogaito <tacha@trap.fukui-med.ac.jp>
1999-12-10 01:20:08 +00:00
Peter Wemm
c2af6f650c Update for pnp adjustments regarding NPNP.
Also, optimize out a mess of #if's that were duplicating work already
done by config(8).  For example, if a file is marked as
"dev/sound/pci/foo.c optional pcm pci" then it's only added if pcm *and*
pci are present, so #if NPCM > 0 and #if NPCI > 0 are totally redundant.
A bit more work is still needed.

Discussed with: cg (a few weeks ago)
1999-12-06 18:26:33 +00:00
Matthew N. Dodd
fe0d408987 Remove the 'ivars' arguement to device_add_child() and
device_add_child_ordered().  'ivars' may now be set using the
device_set_ivars() function.

This makes it easier for us to change how arbitrary data structures are
associated with a device_t.  Eventually we won't be modifying device_t
to add additional pointers for ivars, softc data etc.

Despite my best efforts I've probably forgotten something so let me know
if this breaks anything.  I've been running with this change for months
and its been quite involved actually isolating all the changes from
the rest of the local changes in my tree.

Reviewed by:	peter, dfr
1999-12-03 08:41:24 +00:00
Seigo Tanimura
125fdb9848 Comment out the newmidi stuff. 1999-11-22 10:28:05 +00:00
Seigo Tanimura
fe1a5d1c2f - Introduce the bridge drivers for Sound Blaser, GUS and Crystal
Semiconductor CS461x/428x.
- Add support for GUS and CS461x/428x pcm.

Bridges reviewed by:			dfr, cg
GUS non-PnP support submitted by:	Ville-Pertti Keinonen <will@iki.fi>
GUS PnP support tested by:		Michiru Saito <mich@mtci.ne.jp>
1999-11-22 06:07:49 +00:00
Cameron Grant
ef9308b1ce repo-copied to make way for newmidi, this commit updates include paths 1999-11-20 16:50:33 +00:00
Roger Hardiman
39d409c9e1 Rename es1370.c to es137x.c and merge in the patches to support
ES1371 and ES1373 PCI Audio Sound Chips.
The 1371 and 1373 can be found on newer CreativeLabs/Ensoniq
sound cards such as the SoundBlaster PCI 16,64 and 128.

Submitted by:	Russell Cattelan <cattelan@thebarn.com>
Obtained from:	Parts obtained from linux, but rewritten by Russell
1999-11-19 07:29:10 +00:00
Warner Losh
a832055165 Make interrupts shareable with RF_SHAREABLE. This is untested, but
it compiles and should just work.
1999-10-09 03:52:07 +00:00
Warner Losh
c0de9fc637 Allow interrupt sharing by allocating the interrupt RF_SHAREABLE.
This allows newpcm to grok my es1370 based card, which shared
interrupts with the ethernet card.
1999-10-09 03:50:27 +00:00
Peter Wemm
53c5a968fe $Id$ -> $FreeBSD$ 1999-09-01 06:58:27 +00:00
Cameron Grant
987e59726a say hello to newpcm. it is not yet enabled, requiring new pnp code from dfr
to compile successfully.  further details will be provided in the commit
enabling newpcm.
1999-09-01 04:08:39 +00:00