Go back –> ath6kl
ath6kl todo
Contents
Side cleanups
- Multi architecture support (64 bit)
- Bi-endian support (big endian)
cfg80211 API enhancements
Luis is working on this. This section is going to be extended as time goes by. This section will provide recipes of what needs to get done.
Understanding how ath6kl uses private ioctls
The Linux kernel now uses cfg80211 for any new driver. cfg80211 takes care of wireless-extensions for older drivers, so drivers do not need to register their own wireless-extensions at all. Private wireless extensions also cannot be supported by design. This section documents what needs to get done to replace properly these older APIs to allow us to get the driver into proper placement into the Linux kernel.
This initial section will document how the private handlers are used in the driver and defined.
Typically with the older wireless-extensions drivers are allowed to use private wireless extensions. Wireless extensions essentially allowed the netdev to use some specific ioctl()s for wireless device manipulation. If the driver needed to use private definitions of their own (private commands) they would then define their own private handlers as part of wireless-extensions in a way similar to this:
const struct iw_handler_def prism54_handler_def = {
.num_standard = ARRAY_SIZE(prism54_handler),
.num_private = ARRAY_SIZE(prism54_private_handler),
.num_private_args = ARRAY_SIZE(prism54_private_args),
.standard = (iw_handler *) prism54_handler,
.private = (iw_handler *) prism54_private_handler,
.private_args = (struct iw_priv_args *) prism54_private_args,
.get_wireless_stats = prism54_get_wireless_stats,
};However ath6kl does not use of wireless-extensions private extensions... it makes use of the standard netdev ndo_do_ioctl callback as follows:
static struct net_device_ops ar6000_netdev_ops = {
.ndo_init = NULL,
.ndo_open = ar6000_open,
.ndo_stop = ar6000_close,
.ndo_get_stats = ar6000_get_stats,
.ndo_do_ioctl = ar6000_ioctl,
.ndo_start_xmit = ar6000_data_tx,
.ndo_set_multicast_list = ar6000_set_multicast_list,
};
APIs which can be moved to debugfs
- BT coex APIs:
- ar6000_xioctl_set_bt_status_cmd()
- ar6000_xioctl_set_bt_params_cmd()
- ar6000_xioctl_set_btcoex_fe_ant_cmd()
- ar6000_xioctl_set_btcoex_colocated_bt_dev_cmd()
- ar6000_xioctl_set_btcoex_btinquiry_page_config_cmd()
- ar6000_xioctl_set_btcoex_sco_config_cmd()
- ar6000_xioctl_set_btcoex_a2dp_config_cmd()
- ar6000_xioctl_set_btcoex_aclcoex_config_cmd()
- ar60000_xioctl_set_btcoex_debug_cmd()
- ar6000_xioctl_set_btcoex_bt_operating_status_cmd()
- ar6000_xioctl_get_btcoex_config_cmd()
- ar6000_xioctl_get_btcoex_stats_cmd()
Android
Android needs to be changed to use standard APIs, see this Android changes section.
config cleanup
CONFIG_HOST_TCMD_SUPPORT
This requires some special firmware and will vary depending on the revision of the chipset.
AR6003_REV1_VERSION –> AR6003_REV1_TCMD_FIRMWARE_FILE
AR6003_REV2_VERSION –> AR6003_REV2_TCMD_FIRMWARE_FILE
It seems this does not actually affect the WMI API other firmware so why not just remove the ifdef and keep the code in place. The only use I see for the config option is that it enables a module parameter testmode which if set then it will load the test firmware. This can likely be kept for now, even for proper placement in the Linux kernel.
Random always set macros
This can be remove and the code that makes sense left in place.
ccflags-y += -DLINUX -DKERNEL_2_6 ccflags-y += -DTCMD ccflags-y += -DSEND_EVENT_TO_APP ccflags-y += -DUSER_KEYS ccflags-y += -DNO_SYNC_FLUSH ccflags-y += -DHTC_EP_STAT_PROFILING ccflags-y += -DATH_AR6K_11N_SUPPORT ccflags-y += -DWAPI_ENABLE ccflags-y += -DCHECKSUM_OFFLOAD ccflags-y += -DWLAN_HEADERS ccflags-y += -DINIT_MODE_DRV_ENABLED ccflags-y += -DBMIENABLE_SET ... #if WIRELESS_EXT < 18
AP Mode support using cfg80211
No one is working on this yet.
WiFi Direct
No one is working on this yet