lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <s5hljvfbt8h.wl%tiwai@suse.de>
Date:	Wed, 19 Nov 2008 17:01:02 +0100
From:	Takashi Iwai <tiwai@...e.de>
To:	"Bryan Wu" <cooloney@...nel.org>
Cc:	"ALSA devel" <alsa-devel@...a-project.org>,
	LKML <linux-kernel@...r.kernel.org>
Subject: Re: [Question] Can I open a substream in kernel space without attach to a file pointer?

At Wed, 19 Nov 2008 23:42:48 +0800,
Bryan Wu wrote:
> 
> On Wed, Nov 19, 2008 at 9:49 PM, Takashi Iwai <tiwai@...e.de> wrote:
> > At Wed, 19 Nov 2008 18:00:36 +0800,
> > Bryan Wu wrote:
> >>
> >> Hi Takashi,
> >>
> >> I am developing a USB gadget driver compliant to USB Audio Class Spec 2.0.
> >> So I want to open a PCM substream and do some playback of capture,
> >> then close them?
> >>
> >> I found snd_pcm_open_substream() is for opening a substream and attach
> >> it to a file.
> >> But in my application, there is no need to open a file before opening
> >> a substream.
> >>
> >> - Is there any interface for me to open a substream in kernel space
> >> without attach to a file?
> >> - How to playback and capture in kernel space, use snd_pcm_lib_write
> >> and snd_pcm_lib_read?
> >> - How to get the snd_pcm_hardware struct from low level driver,
> >> because I have to get the hardware configuration of the snd pcm
> >> device?
> >>
> >> And I am reading the code of OSS emulator in ALSA. It provides some
> >> info about the kernel space sound card programming.
> >
> > Yes, OSS emulation code handles the PCM in the kernel.
> > But, basically I don't recommend you to do this -- it's not the job of
> > the sound card driver.  The whole PCM stuff is handled by the PCM
> > middle layer, not the driver itself.
> 
> No, my plan is not a sound card driver. It is an USB gadget audio driver.
> When an embedded system for example Blackfin board connects to a USB host (PC),
> PC will recognize this USB device as a USB Audio Class device.
> 
> Generally, there should be a sound card on the embedded system. Our
> Blackfin board
> has an AD1980 ALSA sound card. The USB gadget audio driver will open this sound
> card and export this device to USB host PC by some USB audio class specific
> descriptors. Then the PC can playback some audio stream by USB cable, USB gadget
> audio driver will receive this stream and playback the data by AD1980
> ALSA playback
> substream. Capture is the similar.
> 
> > Any reason why you handle the PCM stuff completely in your driver
> > code?
> >
> 
> There is USB gadget MIDI driver in kernel. But it asked the user to
> use aconnect tool to
> connect the virtual MIDI card to a real one. I don't want travel to
> user space and it should
> be more efficient in kernel space to handle all things including PCM
> open/release/read/write
> and Mixer control.
> 
> Any hints about this? I really need some help from ALSA guru, cause
> I'm not familiar the internal
> things here.

Well, the access in the kernel space is fairly similar as in the user
space.  It opens, issues ioctls, reads and writes.  The difference is
that you access via dedicated function calls instead of syscalls.
There is no way to poke the driver internal from other drivers.
To answer your questions...

> >> - Is there any interface for me to open a substream in kernel space
> >> without attach to a file?

No.

> >> - How to playback and capture in kernel space, use snd_pcm_lib_write
> >> and snd_pcm_lib_read?

Yes.  But for the kernel space buffer, you'd need to fake the
user-space pointer by snd_enter_user() and snd_leave_user().  See
snd_pcm_oss_write3().

> >> - How to get the snd_pcm_hardware struct from low level driver,
> >> because I have to get the hardware configuration of the snd pcm
> >> device?

Not way to peek/poke the driver internals from the outside.
You'll need to negotiate via snd_pcm_kernel_ioctl() like user-space
programs.


HTH,

Takashi
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ