I have set KBUILD_OUTPUT in make.conf as I compile my kernels using O= to keep the sources directory clean. To fix it I just had to change: BUILD_PARAMS="KSRC=${KV_DIR} KSRC_OUTPUT=${KV_OUT_DIR}" to: BUILD_PARAMS="-C ${KV_DIR} M=${S}" and on ipw2200 to: BUILD_PARAMS="-C ${KV_DIR} M=${S} IEEE80211_INC=/usr/include" These seem to work nicely even with the output files in the kernel sources dir. The M= is the new way to build modules outside the sources dir according to /usr/src/linux/Makefile, and O= or KSRC_OUTPUT= isnt needed as KBUILD_OUTPUT will be in the environment anyway if it is set.
Fixed in net-wireless/ieee80211-1.1.13 and net-wireless/ipw2200-1.1.2, thank you for reporting this. I've solved the problem a bit different than you proposed and submitted it for upstream inclusion at http://bughost.org/bugzilla/show_bug.cgi?id=987