Re: [PATCH 2.6] Altix updates

From: Patrick Gefre
Date: Tue Jan 20 2004 - 19:27:38 EST


Christoph Hellwig wrote:

On Tue, Jan 20, 2004 at 04:23:50PM -0600, Patrick Gefre wrote:


I had one for bridge address/TIO, one for bridge address/nonTIO, one for soft address/TIO and one for soft address/nonTIO.
I thought that was what you were proposing. In any event, here's how the basic code looks (leaving out type defs/error checking/
etc) - the wrapper is embedded in the macro - note that we would always like to use the soft struct because it doesn't cost us a PIO
but in the event that the soft struct is not available the bridge address must be used:



(horrible piece of sh^H^H^code snipped)

Eeek!

So taking your pio cycle stuff into account, what about:

void *
__pcireg_xxx_get(bridge_t *bridge, int type)
{
switch (type ) {
case BT_TIO:
return bridge_addr->ti_xxx;

case BT_PIC:
return bridge->addr->pic_xxx;

default:
/* */
}
}

and then have wrappers for both the plain bridge_t and the pcibr_soft.
In fact I wonder why you want the one taking bridge_t at all, there is
absolutely no reason why you should be able to get a bridge_t without
getting at the pcibr_soft easily.


void *
pcireg_xxx_get(void *ptr)
{
if ( IS_IOADDR(ptr) )
return REAL_pcireg_xxx_get(ptr, IS_TIO(ptr) ? BT_TIO : BT_PIC);
else
return REAL_pcireg_xxx_get(ptr->bs_base, ptr->bs_bridge_type);
}



No, this is borked again. The IS_IOADDR tests must go away.




So something like this will work for you ???

void *
pcireg_xxx_soft_get(ptr)
{
return __pcireg_xxx_get(ptr->bs_base, ptr->bs_bridge_type);
}

void *
pcireg_xxx_get(ptr)
{
return __pcireg_xxx_get(ptr, IS_TIO(ptr) ? BT_TIO : BT_PIC);
}

static void *
__pcireg_xxx_get(bridge_t *bridge, int type)
{
switch (type ) {
case BT_TIO:
return bridge_addr->ti_xxx;

case BT_PIC:
return bridge->addr->pic_xxx;

default:
/* */
}
}



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