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.