pcm sound driver for SBus Ultra1/Ultra2

Pyun YongHyeon yongari at kt-is.co.kr
Thu Jul 1 04:37:20 PDT 2004


On Thu, Jul 01, 2004 at 01:09:40PM +0200, Marius Strobl wrote:
 > On Thu, Jul 01, 2004 at 06:32:25PM +0900, Pyun YongHyeon wrote:
 > > Hello All,
 > > 
 > > I don't know how may users want to hear sound on Ultra1/Ultra2.
 > > But I wanted to hear some music while 'build world' is in progress.
 > > 
 > > <Driver summary>
 > >  1. The driver is based on OpenBSD's driver and ISA mss driver
 > >     on FreeBSD.
 > >  2. Supports onboard CS4231A chip on SBus Ultra1/Ultra2.
 > >  3. Capture(recodring) was not tested at all.
 > >       - I don't have microphone.
 > >  4. Due to lack of programming information for APC DMA, I
 > >     used existing interfaces of OpenBSD driver. So it may have
 > >     some bugs on FreeBSD.
 > >  5. Full-duplex mode doesn't work.
 > >  6. You may notice some noise when you work on ofw console. I don't
 > >     know what is the reason, atm.
 > >  7. Due to lack of X supports, I could't test with xmms or GUI based
 > >     audio tools.
 > >  8. If you have PCI/EBus based sparcs, they are not supported. Yes, they
 > >     use the same chip but have different DMA interface. In addition, I
 > >     don't have PCI/EBus based sparcs.
 > > 
 > > Installation
 > >  1. get the driver patch file and fetch your system
 > >  2. build kernel and kernel modules
 > >  3. load snd_cs4231.ko and play
 > >      Note, you may want to mute speaker output with mixer(8).
 > > 
 > > The attached patch is for -CURRENT, and is also available at:
 > >  http://www.kr.freebsd.org/~yongari/cs4231.freebsd.diff
 > > 
 > 
 > Interesting that adding a driver is sufficient for you. Last time I
 > had a look at getting pcm(4) and SUNW,CS4231 working on FreeBSD/sparc64
 > I stumbled on pcm(4) not being endian-clean and not yet being fully
 > converted to using busdma. At a quick glance that's still the case.
 > Did you miss to add some changed files in your patch?
 >  
I'm afraid I didn't. The only real issue I encountered in pcm(4) was
the reference for sndbuf_dmaxxx() in channel.c. So I added glue code
(Nops) in sndbuf_dma.c.

As you said, it seems that pcm(4) is not endian clean and I was
surprised that I am the first big-endian consumer of pcm(4). 
But it works. :) Sample screen output follows.

daemon# uname -a
FreeBSD daemon.kt-is.co.kr 5.2-CURRENT FreeBSD 5.2-CURRENT #2: Wed Jun 30 20:01:02 KST 2004     root at daemon.kt-is.co.kr:/usr/src/sys/sparc64/compile/YONGARI_KERNEL  sparc64
daemon# kldload snd_cs4231
daemon# sysctl hw.snd.verbose=2
hw.snd.verbose: 1 -> 2
daemon# cat /dev/sndstat 
FreeBSD Audio Driver (newpcm)
Installed devices:
pcm0: <Sun Audiocs CS4231A> at mem 0xc000000 irq 2020 bufsz 32768 (1p/1r/0v channels duplex default)
        [pcm0:record:0]: spd 0, fmt 0x00000000/0x00000008, flags 0x00000000, 0x00000000
        interrupts 0, overruns 0, hfree 32768, sfree 0
        {hardware} -> feeder_root(0x00000000) -> {userland}
        [pcm0:play:0]: spd 0, fmt 0x00000000/0x00000008, flags 0x00000000, 0x00000000
        interrupts 0, underruns 0, ready 0
        {userland} -> feeder_root(0x00000000) -> {hardware}

Regards,
Pyun YongHyeon
-- 
Pyun YongHyeon <http://www.kr.freebsd.org/~yongari>


More information about the freebsd-sparc64 mailing list