All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benno Senoner <sbenno@gardena.net>
To: alsa-devel@lists.sourceforge.net
Subject: Re: Max # of cards, pcm devices, midi devices Was: max SNDRV_CARDS bug ? questions ....
Date: Wed, 03 Dec 2003 23:25:51 +0100	[thread overview]
Message-ID: <3FCE62EF.6060702@gardena.net> (raw)
In-Reply-To: <s5had6acaqf.wl@alsa2.suse.de>

Takashi Iwai wrote:

>At Wed, 03 Dec 2003 20:00:05 +0100,
>Benno Senoner wrote:
>  
>
>>Hi,
>>(I'm using alsa-driver-1.0.0rc1)
>>
>>I have a question about the SNDRV_CARDS.
>>normally it is defined as 8
>>./alsa-kernel/core/memalloc.c: #define SNDRV_CARDS     8
>>
>>Does that mean we can have a maximum of 8 soundcards
>>in the PC or is this simply how many instances a certain module supports ?
>>(eg I could have 8 emu10k instances, 8 sb16 instances etc ?).
>>    
>>
>
>no, totally 8 instances.  not the number of modules.
>
Please elaborate here:  
does that mean that if I have 3 soundcards (eg. 3 emu10k1 cards) and 6 
snd-serialmidi devices
( = total of 9 "cards"), that this configuration does not work ?


>>Plus I noticed something in
>>
>>./alsa-kernel/core/memalloc.c: static int enable[8] = {[0 ... 
>>(SNDRV_CARDS-1)] = 1};
>>
>>shouldn't that be:
>>static int enable[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = 1};     ?
>>    
>>
>
>yes, but not a bug as long as SNDRV_CARDS = 8 :)
>
Then I see no reason not to fix it, or at least place a big FIXME in the 
sources near the
SNDDRV_CARDS definition.
Otherwise when these SNDRV_CARDS limits will be lifted someday developes
will need to fix these nasty fixed array size assumption.

>
>  
>
>>is this a bug ? what happens if we set SNDRV_CARDS to a value > 8 ?
>>    
>>
>
>more than 8 cards are not supported in the current assignment of
>devices.  the minor devices will be out of range.
>
I did look at /dev/snd:

devicename, maj, min

/dev/snd/midiC0D0  116, 8  
/dev/snd/midiC0D1  116, 9
....
/dev/snd/midiC0D7  116,15

/dev/snd/pcmC0D0p 116, 16
/dev/snd/pcmC0D1c  116,25
/dev/snd/pcmC0D1p  116,17
/dev/snd/pcmC0D2c  116,26
...

Is that the minor devices conflict you are refering to ?
I assume the midi serial devices allocate a /dev/snd/midiC0Dx device 
thus only 8 midi ports
per card are allowed.
After midiC0D7 (116,15) comes  pcmC0D0p (116, 16) so there would be no 
room for
midiC0D8, right ?

The question is now: is it possible to change the device major,minor 
number layout to allow
for more /dev/snd/midiCxDy devices (and simultaneously increasing 
SNDRV_CARDS) ?

Is it simply a matter of changing the snddevices script or does 
alsa-driver/alsa-lib make assumptions
about the devicenode numbers thus rendering such modifications useless ?

About the minor number:
I understand it is limited to 1 byte thus has a 0-255 range.
I did look at the snddevices script and it seems that every card uses 32 
minor numbers thus
32 * 8 cards = 256 = full range used.
Even if the script only creates the device nodes for the first 4 cards 
(thus minor numbers 0-127) I assume
you can redefine MAX_CARDS in the script and create the device nodes for 
all 8 cards.

in
./alsa-kernel/include/minors.h  I see:

#define SNDRV_MINOR_DEVICES             32
#define SNDRV_MINOR_CARD(minor)         ((minor) >> 5)
#define SNDRV_MINOR_RAWMIDI             8       /* 8 - 15 */
#define SNDRV_MINOR_RAWMIDIS            8
#define SNDRV_MINOR_PCM_PLAYBACK        16      /* 16 - 23 */
#define SNDRV_MINOR_PCM_CAPTURE         24      /* 24 - 31 */
#define SNDRV_MINOR_PCMS                8


So basically as far as I understand those macros would need to to be 
changed too.
I see PCM_PLAYBACK and PCM_CAPTURE each taking up 8 device nodes each.
Perhaps I could reduce that to 4 thus making room for 2*4=8 more RAWMIDI 
devices ?
(but these are per card so I guess that is the wrong way to go, read below)

The question how many multiple PCM_PLAYBACK devices are usually needed ?
Of course this depends from the card. For example for my CMI8738MC6 card
in /proc/asound I see:  pcm0c, pcm0p, pcm1p, pcm2c, pcm2p
thus 3 devices each for playback and capture.
What happens in the case of the hammerfall where you can have up to 24 
playback channels ?
Is that seen as a single capture/playback device  ? Or cards like the 
delta 1010 ?
Ok the good old Steve Harris just did a cat /proc/asound/ on his 
Hammerfall box for me:
 id, oss_mixer, pcm0c, pcm0p, rme9652
So it means it uses only one pcm device.

But the big doubt is: since Takashi said each snd_serialmidi device 
allocates one of the available
SNDRV_CARDS slots it basically means that we use only one midiCxDy per card.
If I use the module options line Takashi gave me

options snd-serialmidi enable=1,1,1,1 
sdev=/dev/ttyS2,/dev/ttyS3,/dev/ttyS4,/dev/ttyS5

and I do aconnect I get something like
72:0  Serial Midi Device 1  (or was the name Raw Midi ? does not matter 
for explanation purposes).
80:0  Serial Midi Device 2
88:0  ....

So I assume of each "card" only /dev/snd/midiCxD0 is used.
Correct me if I'm wrong.
To make it short, do you think I have a chance to succeed increase 
SNDRV_CARDS to 12-16
(and change the snddevices script and the SNDRV_ macros) ?
Must each card use a power of two (currently 32) of minor device nodes ?
If that is true then the only alternative would be SNDRV_CARDS = 16 but 
that would leave only
16 minor numbers for card which is too little to make fit a few pcm 
devices, rawmidi and the other stuff neded.
Perhaps the ideal tradeoff would be SNDRV_CARDS=12 but that would 
require a per card
minor device number that is not a  power of two.
Ok some macros would become a bit slower eg (assuming 20 minor ids per card)

#define SNDRV_MINOR_CARD(minor)         ((minor)  / 20)

But this is not the end of the world.

Let me know please. I'll share my experiences (problems, failures, 
success etc) here on the mailing list.

thanks,
Benno
http://www.linuxsampler.org




-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive?  Does it
help you create better code?  SHARE THE LOVE, and help us help
YOU!  Click Here: http://sourceforge.net/donate/

      reply	other threads:[~2003-12-03 22:25 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-12-03 19:00 max SNDRV_CARDS bug ? questions Benno Senoner
2003-12-03 13:05 ` Takashi Iwai
2003-12-03 22:25   ` Benno Senoner [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3FCE62EF.6060702@gardena.net \
    --to=sbenno@gardena.net \
    --cc=alsa-devel@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.