Re: [PATCH 2.6] Altix updates
From: Patrick Gefre
Date: Tue Jan 20 2004 - 18:26:05 EST
Christoph Hellwig wrote:
On Tue, Jan 20, 2004 at 02:12:47PM -0600, Patrick Gefre wrote:
Guess I don't understand your point. Do you want us to create separate
functions for soft-struct and bridge address
and TIO and non-TIO - 4 functions for each register access, rather than 1 ?
The right fix would be to only have one, and that one would take the
bridge_t. If you really want to have one that takes the pcibr_soft, too
make it a small wrapper. But even that would be two and not four, where
do the other two come from?
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:
#define SET_TYPE_AND_PTR(ptr, type, bridge) \
if ( IS_IOADDR(ptr) ) { \
if ( IS_TIO(ptr->id) ) \
type = BT_TIO; \
else \
type = BT_PIC; \
bridge_addr = ptr; \
} else { \
type = ptr->bs_bridge_type; \
bridge_addr = ptr->bs_base; \
}
void *
pcireg_xxx_get(void *ptr)
{
SET_TYPE_AND_PTR(ptr, &type, bridge);
switch (type ) {
case BT_TIO:
return bridge_addr->ti_xxx;
case BT_PIC:
return bridge->addr->pic_xxx;
default:
/* */
}
}
Is this what you are suggesting ??
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);
}
void *
REAL_pcireg_xxx_get(void *ptr, 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/