Mark Maule wrote:
> 
> Resend using accessors instead of volatile qualifiers per hch comments.  Added
> a __sn_rwq_relaxed() convenience macro for doing read/modify/write ops
> (e.g.  &=, |=).

Instead of passing in op codes, why not have two macros:  __sn_set_rwq_relaxed()
and __sn_clear_rwq_relaxed(), since the operation is either setting or clearing 
bits.


>       if (pcibus_info) {
>               switch (pcibus_info->pbi_bridge_type) {
>               case PCIBR_BRIDGETYPE_TIOCP:
> -                     ptr->tio.cp_control &= ~bits;
> +                     __sn_rwq_relaxed(&ptr->tio.cp_control, &=, ~bits);

                        __sn_clear_rwq_relaxed(&ptr->tio.cp_control, bits);

>       tioca_base = (struct tioca *)common->ca_common.bs_base;
> -     ca_control1 = tioca_base->ca_control1;
> -     ca_control1 |= CA_AGP_FW_ENABLE;
> -     tioca_base->ca_control1 = ca_control1;
> +     __sn_rwq_relaxed(&tioca_base->ca_control1, |=, CA_AGP_FW_ENABLE);

        __sn_set_rwq_relaxed(&tioca_base->ca_control1, CA_AGP_FW_ENABLE);

>  /*
> + * Convenience macros for read/modify/write operations using above accessors
> + */
> +
> +#define __sn_rwq_relaxed(addr, op, val) \
> +     {uint64_t r = __sn_readq_relaxed(addr); r op (val); writeq(r, addr);}


#define __sn_set_rwq_relaxed(addr, val) \
        writeq((__sn_readq_relaxed(addr) | (val)), (addr))

#define __sn_clear_rwq_relaxed(addr, val) \
        writeq((__sn_readq_relaxed(addr) & ~(val)), (addr))



-- 
Russ Anderson, OS RAS/Partitioning Project Lead  
SGI - Silicon Graphics Inc          [EMAIL PROTECTED]
-
To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to