Re: IDE 2.5.69 possible bogosity...

Bartlomiej Zolnierkiewicz (B.Zolnierkiewicz@elka.pw.edu.pl)
Fri, 23 May 2003 00:52:27 +0200 (MET DST)


On Thu, 22 May 2003, Ian Molton wrote:

> Hi.
>
> Im wondering if this is correct. is the test for initializing in the
> second for loop correct?

Unfortunately, yes.

> Im building an IDE driver into my kernel that calls ide_register_hw()
> twice to register its primary and secondary ports, but only the
> secondary port is recognised. the first fails, since the test in the
> first for loop fails and so does the second, so it then 'unregisters'

Too little information, your MAX_HWIFS and default io ports?

> it, despite never having been registered. somehow, this puts my drive
> INTO the hwif array, so the secondary interface registers OK, passing
> the other tests.

Where is your driver?

> a hack that allowed the primary interface to register was to register it
> twice, but that sucks.
>
> int ide_register_hw (hw_regs_t *hw, ide_hwif_t **hwifp)
> {
> int index, retry = 1;
> ide_hwif_t *hwif;
>
> do {
> for (index = 0; index < MAX_HWIFS; ++index) {
> hwif = &ide_hwifs[index];
> if (hwif->hw.io_ports[IDE_DATA_OFFSET] ==
> hw->io_ports[IDE_DATA_OFFSET])
> goto found;
> }
> for (index = 0; index < MAX_HWIFS; ++index) {
> hwif = &ide_hwifs[index];
>
> *** is the test for initialising (not the !initialising one) here ok?
> ***
>
> if ((!hwif->present && !hwif->mate && !initializing)
> ||
> (!hwif->hw.io_ports[IDE_DATA_OFFSET] &&
> initializing))
> goto found;
> }
> for (index = 0; index < MAX_HWIFS; index++)
> ide_unregister(index);
> } while (retry--);

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