I apologize for not responding earlier...
ethtool is the wrong direction for a few reasons,
* I really should have done ethtool via netlink
* We want to move away from pretending that 802.3 == 802.11, and using
ethtool only serves to reinforce an association we don't want to make.
"everything is ethernet" isn't really true :)
About overall API design...
When designing interfaces that the low-level drivers must implement,
keep two things in mind:
* locking, security checks, and ioctl marshalling/thunking should be
done in common kernel code, not each hardware driver.
* given that, each wireless hook (callback) should be purpose-specific
-- which means each callback's arguments and return value vary,
depending on the callback's purpose. iw_handler must be killed, because
that forces more code than necessary to be in each low-level driver.
The example to look at here is struct ethtool_ops, and net/core/ethtool.c.
Low-level drivers should be implementing small, fine-grained hooks NOT
raw ioctl handlers. In addition to fostering smaller hardware drivers,
this insulates the driver interface from ABI changes to a certain degree.