From e46e556c84515dea7fe03ecc3bb3ec8dfd6958c1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20R=C4=99korajski?= Date: Sun, 7 Sep 2014 19:50:36 +0200 Subject: [PATCH] - enable cfg80211 use in driver and update code to 3.15+ - fix 'const' related warnings - really disable debug --- enable-cfg80211-support.patch | 19 +++ rtl8812au.spec | 7 ++ update-cfg80211-support.patch | 212 ++++++++++++++++++++++++++++++++++ warnings.patch | 146 +++++++++++++++++++++++ 4 files changed, 384 insertions(+) create mode 100644 enable-cfg80211-support.patch create mode 100644 update-cfg80211-support.patch create mode 100644 warnings.patch diff --git a/enable-cfg80211-support.patch b/enable-cfg80211-support.patch new file mode 100644 index 0000000..c108983 --- /dev/null +++ b/enable-cfg80211-support.patch @@ -0,0 +1,19 @@ +diff --git a/include/autoconf.h b/include/autoconf.h +index 6f579b3..c6511d8 100644 +--- a/include/autoconf.h ++++ b/include/autoconf.h +@@ -38,11 +38,11 @@ + #define PLATFORM_LINUX 1 + + +-//#define CONFIG_IOCTL_CFG80211 1 ++#define CONFIG_IOCTL_CFG80211 1 + + #ifdef CONFIG_IOCTL_CFG80211 +- //#define RTW_USE_CFG80211_STA_EVENT /* Indecate new sta asoc through cfg80211_new_sta */ +- #define CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER ++ #define RTW_USE_CFG80211_STA_EVENT /* Indecate new sta asoc through cfg80211_new_sta */ ++ //#define CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER + //#define CONFIG_DEBUG_CFG80211 + //#define CONFIG_DRV_ISSUE_PROV_REQ // IOT FOR S2 + #define CONFIG_SET_SCAN_DENY_TIMER diff --git a/rtl8812au.spec b/rtl8812au.spec index de80ba8..ab43a45 100644 --- a/rtl8812au.spec +++ b/rtl8812au.spec @@ -36,6 +36,9 @@ Source0: https://github.com/austinmarton/rtl8812au_linux/archive/master/%{name}- URL: https://github.com/austinmarton/rtl8812au_linux Patch0: linux-3.11.patch Patch1: disable-debug.patch +Patch2: enable-cfg80211-support.patch +Patch3: update-cfg80211-support.patch +Patch4: warnings.patch BuildRequires: rpmbuild(macros) >= 1.678 %{?with_dist_kernel:%{expand:%kbrs}} BuildRoot: %{tmpdir}/%{pname}-%{version}-root-%(id -u -n) @@ -80,6 +83,10 @@ Driver for AC1200 (802.11ac) Wireless Dual-Band USB Adapter\ #%setup -q -n %{pname}-%{version} %setup -q -n rtl8812au_linux-master %patch0 -p1 +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 %build %{expand:%bkpkg} diff --git a/update-cfg80211-support.patch b/update-cfg80211-support.patch new file mode 100644 index 0000000..82fb7cf --- /dev/null +++ b/update-cfg80211-support.patch @@ -0,0 +1,212 @@ +diff --git a/include/ioctl_cfg80211.h b/include/ioctl_cfg80211.h +index df878ea..b3431c3 100644 +--- a/include/ioctl_cfg80211.h ++++ b/include/ioctl_cfg80211.h +@@ -143,8 +143,11 @@ bool rtw_cfg80211_pwr_mgmt(_adapter *adapter); + #define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->pnetdev, freq, buf, len, gfp) + #elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)) + #define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->pnetdev, freq, sig_dbm, buf, len, gfp) +-#else ++#elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,12,0)) + #define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->rtw_wdev, freq, sig_dbm, buf, len, gfp) ++#else ++// 3.12 added a flags argument which is just set to zero ++#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->rtw_wdev, freq, sig_dbm, buf, len, 0, gfp) + #endif + + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) && !defined(COMPAT_KERNEL_RELEASE) +diff --git a/os_dep/linux/ioctl_cfg80211.c b/os_dep/linux/ioctl_cfg80211.c +index 3abcad9..3a5f667 100644 +--- a/os_dep/linux/ioctl_cfg80211.c ++++ b/os_dep/linux/ioctl_cfg80211.c +@@ -642,6 +642,11 @@ void rtw_cfg80211_ibss_indicate_connect(_adapter *padapter) + struct wlan_network *cur_network = &(pmlmepriv->cur_network); + struct wireless_dev *pwdev = padapter->rtw_wdev; + struct cfg80211_bss *bss = NULL; ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0) ++ WLAN_BSSID_EX *pnetwork = &(padapter->mlmeextpriv.mlmext_info.network); ++ struct ieee80211_channel *chan = NULL; ++ u32 freq; ++#endif + + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter)); + if (pwdev->iftype != NL80211_IFTYPE_ADHOC) +@@ -693,7 +698,20 @@ void rtw_cfg80211_ibss_indicate_connect(_adapter *padapter) + DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" BSS not found !!\n", FUNC_ADPT_ARG(padapter)); + } + //notify cfg80211 that device joined an IBSS ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0) ++ if (!(pnetwork) || !(padapter->rtw_wdev)) ++ return; ++ ++ if (pnetwork->Configuration.DSConfig <= RTW_CH_MAX_2G_CHANNEL) ++ freq = rtw_ieee80211_channel_to_frequency(pnetwork->Configuration.DSConfig, IEEE80211_BAND_2GHZ); ++ else ++ freq = rtw_ieee80211_channel_to_frequency(pnetwork->Configuration.DSConfig, IEEE80211_BAND_5GHZ); ++ ++ chan = ieee80211_get_channel(padapter->rtw_wdev->wiphy, freq); ++ cfg80211_ibss_joined(padapter->pnetdev, cur_network->network.MacAddress, chan, GFP_ATOMIC); ++#else + cfg80211_ibss_joined(padapter->pnetdev, cur_network->network.MacAddress, GFP_ATOMIC); ++#endif + } + + void rtw_cfg80211_indicate_connect(_adapter *padapter) +@@ -792,14 +810,18 @@ check_bss: + } + else + { ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0) + DBG_8192C("pwdev->sme_state(b)=%d\n", pwdev->sme_state); ++#endif + cfg80211_connect_result(padapter->pnetdev, cur_network->network.MacAddress + , pmlmepriv->assoc_req+sizeof(struct rtw_ieee80211_hdr_3addr)+2 + , pmlmepriv->assoc_req_len-sizeof(struct rtw_ieee80211_hdr_3addr)-2 + , pmlmepriv->assoc_rsp+sizeof(struct rtw_ieee80211_hdr_3addr)+6 + , pmlmepriv->assoc_rsp_len-sizeof(struct rtw_ieee80211_hdr_3addr)-6 + , WLAN_STATUS_SUCCESS, GFP_ATOMIC); ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0) + DBG_8192C("pwdev->sme_state(a)=%d\n", pwdev->sme_state); ++#endif + } + } + +@@ -838,6 +860,7 @@ void rtw_cfg80211_indicate_disconnect(_adapter *padapter) + #endif //CONFIG_P2P + + if (!padapter->mlmepriv.not_indic_disco) { ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0) + DBG_8192C("pwdev->sme_state(b)=%d\n", pwdev->sme_state); + + if(pwdev->sme_state==CFG80211_SME_CONNECTING) +@@ -849,6 +872,9 @@ void rtw_cfg80211_indicate_disconnect(_adapter *padapter) + //DBG_8192C("pwdev->sme_state=%d\n", pwdev->sme_state); + + DBG_8192C("pwdev->sme_state(a)=%d\n", pwdev->sme_state); ++#else ++ cfg80211_disconnected(padapter->pnetdev, 0, NULL, 0, GFP_ATOMIC); ++#endif + } + } + +@@ -1666,7 +1692,7 @@ static int cfg80211_rtw_set_default_key(struct wiphy *wiphy, + + static int cfg80211_rtw_get_station(struct wiphy *wiphy, + struct net_device *ndev, +- u8 *mac, struct station_info *sinfo) ++ const u8 *mac, struct station_info *sinfo) + { + int ret = 0; + _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev); +@@ -4070,7 +4096,7 @@ static int cfg80211_rtw_stop_ap(struct wiphy *wiphy, struct net_device *ndev) + #endif //(LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) + + static int cfg80211_rtw_add_station(struct wiphy *wiphy, struct net_device *ndev, +- u8 *mac, struct station_parameters *params) ++ const u8 *mac, struct station_parameters *params) + { + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev)); + +@@ -4078,7 +4104,7 @@ static int cfg80211_rtw_add_station(struct wiphy *wiphy, struct net_device *ndev + } + + static int cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *ndev, +- u8 *mac) ++ const u8 *mac) + { + int ret=0; + _irqL irqL; +@@ -4169,7 +4195,7 @@ static int cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *ndev + } + + static int cfg80211_rtw_change_station(struct wiphy *wiphy, struct net_device *ndev, +- u8 *mac, struct station_parameters *params) ++ const u8 *mac, struct station_parameters *params) + { + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev)); + +@@ -4997,6 +5023,9 @@ static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy, + #else + struct net_device *ndev, + #endif ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) ++ struct cfg80211_mgmt_tx_params *params, ++#else + struct ieee80211_channel *chan, + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE) + bool offchan, +@@ -5017,11 +5046,17 @@ static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy, + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) + bool dont_wait_for_ack, + #endif ++#endif + u64 *cookie) + { + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) + struct net_device *ndev = wdev_to_ndev(wdev); + #endif ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) ++ struct ieee80211_channel *chan = params->chan; ++ const u8 *buf = params->buf; ++ size_t len = params->len; ++#endif + int ret = 0; + int tx_ret; + u32 dump_limit = RTW_MAX_MGMT_TX_CNT; +@@ -5897,7 +5932,7 @@ static void rtw_cfg80211_preinit_wiphy(_adapter *padapter, struct wiphy *wiphy) + #endif + + #if defined(CONFIG_PM) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 0, 0)) +- wiphy->wowlan = wowlan_stub; ++ wiphy->wowlan = &wowlan_stub; + #endif + + #if defined(CONFIG_TDLS) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) +diff --git a/os_dep/linux/wifi_regd.c b/os_dep/linux/wifi_regd.c +index faa2c14..6c1b90d 100644 +--- a/os_dep/linux/wifi_regd.c ++++ b/os_dep/linux/wifi_regd.c +@@ -270,9 +270,14 @@ static void _rtw_reg_apply_radar_flags(struct wiphy *wiphy) + #ifdef CONFIG_DFS + if (!(ch->flags & IEEE80211_CHAN_DISABLED)) + ch->flags |= IEEE80211_CHAN_RADAR | ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0) ++ IEEE80211_CHAN_NO_IR; ++#else + IEEE80211_CHAN_NO_IBSS; + #endif + ++#endif ++ + #if 0 + /* + * We always enable radar detection/DFS on this +@@ -357,7 +362,11 @@ static void _rtw_reg_apply_flags(struct wiphy *wiphy) + ch = ieee80211_get_channel(wiphy, freq); + if (ch) { + if (channel_set[i].ScanType == SCAN_PASSIVE) ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0) ++ ch->flags = IEEE80211_CHAN_NO_IR; ++#else + ch->flags = IEEE80211_CHAN_PASSIVE_SCAN; ++#endif + else + ch->flags = 0; + } +@@ -484,9 +493,16 @@ static void _rtw_regd_init_wiphy(struct rtw_regulatory *reg, + + wiphy->reg_notifier = reg_notifier; + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0) ++ wiphy->regulatory_flags |= REGULATORY_CUSTOM_REG; ++ wiphy->regulatory_flags &= ~REGULATORY_DISABLE_BEACON_HINTS; ++ wiphy->regulatory_flags &= ~REGULATORY_STRICT_REG; ++ ++#else + wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY; + wiphy->flags &= ~WIPHY_FLAG_STRICT_REGULATORY; + wiphy->flags &= ~WIPHY_FLAG_DISABLE_BEACON_HINTS; ++#endif + + regd = _rtw_regdomain_select(reg); + wiphy_apply_custom_regulatory(wiphy, regd); diff --git a/warnings.patch b/warnings.patch new file mode 100644 index 0000000..fc29dea --- /dev/null +++ b/warnings.patch @@ -0,0 +1,146 @@ +diff --git a/core/rtw_ioctl_set.c b/core/rtw_ioctl_set.c +index 255453b..87e6840 100644 +--- a/core/rtw_ioctl_set.c ++++ b/core/rtw_ioctl_set.c +@@ -31,7 +31,7 @@ extern void indicate_wx_scan_complete_event(_adapter *padapter); + (addr[4] == 0xff) && (addr[5] == 0xff) ) ? _TRUE : _FALSE \ + ) + +-u8 rtw_validate_bssid(u8 *bssid) ++u8 rtw_validate_bssid(const u8 *bssid) + { + u8 ret = _TRUE; + +@@ -525,7 +525,7 @@ _func_exit_; + + } + +-u8 rtw_set_802_11_connect(_adapter* padapter, u8 *bssid, NDIS_802_11_SSID *ssid) ++u8 rtw_set_802_11_connect(_adapter* padapter, const u8 *bssid, NDIS_802_11_SSID *ssid) + { + _irqL irqL; + u8 status = _SUCCESS; +diff --git a/core/rtw_sta_mgt.c b/core/rtw_sta_mgt.c +index f03f727..d425120 100644 +--- a/core/rtw_sta_mgt.c ++++ b/core/rtw_sta_mgt.c +@@ -685,7 +685,7 @@ _func_exit_; + } + + /* any station allocated can be searched by hash list */ +-struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr) ++struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, const u8 *hwaddr) + { + + _irqL irqL; +@@ -696,7 +696,7 @@ struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr) + + u32 index; + +- u8 *addr; ++ const u8 *addr; + + u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff}; + +diff --git a/include/osdep_service.h b/include/osdep_service.h +index 76026b9..25809e4 100644 +--- a/include/osdep_service.h ++++ b/include/osdep_service.h +@@ -255,8 +255,8 @@ void _rtw_usb_buffer_free(struct usb_device *dev, size_t size, void *addr, dma_a + extern void* rtw_malloc2d(int h, int w, int size); + extern void rtw_mfree2d(void *pbuf, int h, int w, int size); + +-extern void _rtw_memcpy(void* dec, void* sour, u32 sz); +-extern int _rtw_memcmp(void *dst, void *src, u32 sz); ++extern void _rtw_memcpy(void* dec, const void* sour, u32 sz); ++extern int _rtw_memcmp(const void *dst, const void *src, u32 sz); + extern void _rtw_memset(void *pbuf, int c, u32 sz); + + extern void _rtw_init_listhead(_list *list); +diff --git a/include/rtw_ioctl_set.h b/include/rtw_ioctl_set.h +index da08376..10b3507 100644 +--- a/include/rtw_ioctl_set.h ++++ b/include/rtw_ioctl_set.h +@@ -60,10 +60,10 @@ u8 rtw_set_802_11_bssid_list_scan(_adapter* padapter, NDIS_802_11_SSID *pssid, i + u8 rtw_set_802_11_infrastructure_mode(_adapter * padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype); + u8 rtw_set_802_11_remove_wep(_adapter * padapter, u32 keyindex); + u8 rtw_set_802_11_ssid(_adapter * padapter, NDIS_802_11_SSID * ssid); +-u8 rtw_set_802_11_connect(_adapter* padapter, u8 *bssid, NDIS_802_11_SSID *ssid); ++u8 rtw_set_802_11_connect(_adapter* padapter, const u8 *bssid, NDIS_802_11_SSID *ssid); + u8 rtw_set_802_11_remove_key(_adapter * padapter, NDIS_802_11_REMOVE_KEY * key); + +-u8 rtw_validate_bssid(u8 *bssid); ++u8 rtw_validate_bssid(const u8 *bssid); + u8 rtw_validate_ssid(NDIS_802_11_SSID *ssid); + + u16 rtw_get_cur_max_rate(_adapter *adapter); +diff --git a/include/sta_info.h b/include/sta_info.h +index 15964d7..553d5ab 100644 +--- a/include/sta_info.h ++++ b/include/sta_info.h +@@ -443,7 +443,7 @@ struct sta_priv { + }; + + +-__inline static u32 wifi_mac_hash(u8 *mac) ++__inline static u32 wifi_mac_hash(const u8 *mac) + { + u32 x; + +@@ -471,7 +471,7 @@ struct sta_info *rtw_get_stainfo_by_offset(struct sta_priv *stapriv, int offset) + extern struct sta_info *rtw_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr); + extern u32 rtw_free_stainfo(_adapter *padapter , struct sta_info *psta); + extern void rtw_free_all_stainfo(_adapter *padapter); +-extern struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr); ++extern struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, const u8 *hwaddr); + extern u32 rtw_init_bcmc_stainfo(_adapter* padapter); + extern struct sta_info* rtw_get_bcmc_stainfo(_adapter* padapter); + extern u8 rtw_access_ctrl(_adapter *padapter, u8 *mac_addr); +diff --git a/include/wifi.h b/include/wifi.h +index dff95b4..d148ba8 100644 +--- a/include/wifi.h ++++ b/include/wifi.h +@@ -431,7 +431,7 @@ enum WIFI_REG_DOMAIN { + (addr[4] == 0xff) && (addr[5] == 0xff) ) ? _TRUE : _FALSE \ + ) + +-__inline static int IS_MCAST(unsigned char *da) ++__inline static int IS_MCAST(const unsigned char *da) + { + if ((*da) & 0x01) + return _TRUE; +diff --git a/os_dep/linux/ioctl_cfg80211.c b/os_dep/linux/ioctl_cfg80211.c +index 3abcad9..4b6ce41 100644 +--- a/os_dep/linux/ioctl_cfg80211.c ++++ b/os_dep/linux/ioctl_cfg80211.c +@@ -2584,7 +2610,7 @@ static int rtw_cfg80211_set_key_mgt(struct security_priv *psecuritypriv, u32 key + return 0; + } + +-static int rtw_cfg80211_set_wpa_ie(_adapter *padapter, u8 *pie, size_t ielen) ++static int rtw_cfg80211_set_wpa_ie(_adapter *padapter, const u8 *pie, size_t ielen) + { + u8 *buf=NULL, *pos=NULL; + u32 left; +diff --git a/os_dep/osdep_service.c b/os_dep/osdep_service.c +index 97a904b..ae46f26 100644 +--- a/os_dep/osdep_service.c ++++ b/os_dep/osdep_service.c +@@ -804,7 +804,7 @@ void rtw_mfree2d(void *pbuf, int h, int w, int size) + rtw_mfree((u8 *)pbuf, h*sizeof(void*) + w*h*size); + } + +-void _rtw_memcpy(void* dst, void* src, u32 sz) ++void _rtw_memcpy(void* dst, const void* src, u32 sz) + { + + #if defined (PLATFORM_LINUX)|| defined (PLATFORM_FREEBSD) +@@ -821,7 +821,7 @@ void _rtw_memcpy(void* dst, void* src, u32 sz) + + } + +-int _rtw_memcmp(void *dst, void *src, u32 sz) ++int _rtw_memcmp(const void *dst, const void *src, u32 sz) + { + + #if defined (PLATFORM_LINUX)|| defined (PLATFORM_FREEBSD) -- 2.44.0