Index: sys/dev/ath/ah_osdep.c =================================================================== --- sys/dev/ath/ah_osdep.c (revision 256951) +++ sys/dev/ath/ah_osdep.c (working copy) @@ -267,6 +267,7 @@ if (ah->ah_config.ah_serialise_reg_war) mtx_lock_spin(&ah_regser_mtx); bus_space_write_4(tag, h, reg, val); + OS_REG_WRITE_BARRIER(ah); if (ah->ah_config.ah_serialise_reg_war) mtx_unlock_spin(&ah_regser_mtx); } @@ -333,6 +334,7 @@ if (ah->ah_config.ah_serialise_reg_war) mtx_lock_spin(&ah_regser_mtx); bus_space_write_4(tag, h, reg, val); + OS_REG_WRITE_BARRIER(ah); if (ah->ah_config.ah_serialise_reg_war) mtx_unlock_spin(&ah_regser_mtx); } Index: sys/dev/ath/ah_osdep.h =================================================================== --- sys/dev/ath/ah_osdep.h (revision 256951) +++ sys/dev/ath/ah_osdep.h (working copy) @@ -109,6 +109,21 @@ #define OS_REG_WRITE_BUFFER_FLUSH(_ah) \ do { } while (0) +#define OS_REG_READ_BARRIER(_ah) \ + bus_space_barrier((bus_space_tag_t)(_ah)->ah_st, \ + (bus_space_handle_t)(_ah)->ah_sh, 0, 0, \ + BUS_SPACE_BARRIER_READ) + +#define OS_REG_WRITE_BARRIER(_ah) \ + bus_space_barrier((bus_space_tag_t)(_ah)->ah_st, \ + (bus_space_handle_t)(_ah)->ah_sh, 0, 0, \ + BUS_SPACE_BARRIER_WRITE) + +#define OS_REG_RW_BARRIER(_ah) \ + bus_space_barrier((bus_space_tag_t)(_ah)->ah_st, \ + (bus_space_handle_t)(_ah)->ah_sh, 0, 0, \ + BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE) + /* * Register read/write operations are either handled through * platform-dependent routines (or when debugging is enabled @@ -123,8 +138,12 @@ extern u_int32_t ath_hal_reg_read(struct ath_hal *ah, u_int reg); #else #define OS_REG_WRITE(_ah, _reg, _val) \ + do { \ bus_space_write_4((bus_space_tag_t)(_ah)->ah_st, \ - (bus_space_handle_t)(_ah)->ah_sh, (_reg), (_val)) + (bus_space_handle_t)(_ah)->ah_sh, (_reg), (_val)); \ + OS_REG_WRITE_BARRIER(_ah); \ + } while (0) + #define OS_REG_READ(_ah, _reg) \ bus_space_read_4((bus_space_tag_t)(_ah)->ah_st, \ (bus_space_handle_t)(_ah)->ah_sh, (_reg))