Re: modules.pnpmap output support

Takashi Iwai
2003-11-17T15:37:57Z

At Mon, 17 Nov 2003 18:07:04 +0300,
Andrey Borzenkov wrote:
>
> > >
> > > Oh, BTW, it reminds me - file2alias prints hex in upper
> > > case while both sysfs and hotplug present them in lower case
> > > (for sure for USB and PCI, and for PNP entries detected by
> > > PNP BIOS). Should not we unify representation?
> >
> > hmm, file2alias uses lower letters as the identifier (seprator?), so i
> > think simply using lower hex letter will be confusing. wouldn't it be
> > better to have an explicit delimter character like ':' (or '/' or
> > whatever) ?
> >
>
> those are not meant to be end-user visible anyway so no I do not
> expect any confustion. Nor do I suggest making them lower case -
> we could fix all occurences in kernel instead :)
>
> if you want to use separator, = is probably better. v=XXXp=YYY

well, parsing pnp would be easiser because the id is always 7
letters, so no need for that...

> > at first i'll try to add the support of old isapnp format for
> > compatibility, so that old programs can work as they are.
> >
>
> ??? old programs do not know about modules.alias at all. Or I
> do not understand what you mean.

no, not modules.alias but the old modules.isapnpmap, which depmod
should generate, too.

> > the file2alias format of (isa) pnp devices will need variable number
> > of items, since a driver may require multiple ids.
> > for example, snd-cs4236 driver supports the cards with three ids like
> > CSCe825:CSC0100:CSC0110
> > and four ids like
> > CSCd937:CSC0000:CSC0010:CSC0003
> > in each case, a matching card must include all ids listed there.
> >
>
> do you mean that card will have to have all of these IDs to match?
>
> I can't get it reading sources. When driver matches card against
> card driver it is apparently using only main IDs, not logical
> device IDs:
>
> driver/pnp/card.c:match_card()
>
> static const struct pnp_card_device_id * match_card(struct pnp_card_driver * drv, struct pnp_card * card)
> {
> const struct pnp_card_device_id * drv_id = drv->id_table;
> while (*drv_id->id){
> if (compare_pnp_id(card->id,drv_id->id))
> return drv_id;
> drv_id++;
> }
> return NULL;
> }
>
> where are drv_id->devs used?

hmm, i thought it checks the device ids but apparently it's not.
IMO, this is a bug, because there are cards with the same card id but
different device ids. (e.g. sound/isa/cs423x/cs4236.c)
in the logic above, only the first matching entry is checked and it
results in the failure of probing.

Adam, what do you think?

> because the point of modules.alias is to follow the same logic (to
> determine which driver to load), where do ->devs fit in?

> > well, i'm not sure which identifier (separator) letter in which style
> > should be used. something like
> > pnp:idXXXxxxxd0XXXxxxxd1XXXXxxxx
>
> leave it as is, it is just fine actually. Assuming you really need
> those extra IDs at all.
>
> What application do you have in mind? I aim at hotplug, i.e.
> (isa|bios)pnp after getting list of devices would call hotplug to load
> drivers. So i need the same logic as in driver matching and this
> does not need extra IDs.

yes, sure, the alias stuff should reflect to the driver's probing logic.

well, in the case of hotplug, the device ids aren't meaningful,
because (so far) there is no confliction between drivers with the same
card id. i mean, in theory, it's possible that the driver A supports
only ids X:Y while the driver B X:Z (where X is the card id, Y and Z
are device ids).

--