diff --git a/core/rtw_led.c b/core/rtw_led.c index e17fa5b..3236180 100644 --- a/core/rtw_led.c +++ b/core/rtw_led.c @@ -26,9 +26,17 @@ /* Callback function of LED BlinkTimer, */ /* it just schedules to corresponding BlinkWorkItem/led_blink_hdl */ /* */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +void BlinkTimerCallback(struct timer_list *t) +#else void BlinkTimerCallback(void *data) +#endif { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) + struct LED_871x *pLed = from_timer(pLed, t, BlinkTimer); +#else struct LED_871x *pLed = (struct LED_871x *)data; +#endif struct adapter *padapter = pLed->padapter; if ((padapter->bSurpriseRemoved) || (padapter->bDriverStopped)) @@ -78,8 +86,11 @@ void InitLed871x(struct adapter *padapter, struct LED_871x *pLed, enum LED_PIN_8 ResetLedStatus(pLed); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) + timer_setup(&pLed->BlinkTimer, BlinkTimerCallback, 0); +#else _init_timer(&(pLed->BlinkTimer), padapter->pnetdev, BlinkTimerCallback, pLed); - +#endif _init_workitem(&(pLed->BlinkWorkItem), BlinkWorkItemCallback, pLed); } diff --git a/core/rtw_p2p.c b/core/rtw_p2p.c index 7868114..2e21496 100644 --- a/core/rtw_p2p.c +++ b/core/rtw_p2p.c @@ -1744,9 +1744,17 @@ exit: return res; } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +static void reset_ch_sitesurvey_timer_process(struct timer_list *t) +#else static void reset_ch_sitesurvey_timer_process (void *FunctionContext) +#endif { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) + struct adapter *adapter = from_timer(adapter, t, pwrctrlpriv.pwr_state_check_timer); +#else struct adapter *adapter = (struct adapter *)FunctionContext; +#endif struct wifidirect_info *pwdinfo = &adapter->wdinfo; if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) @@ -1758,9 +1766,17 @@ static void reset_ch_sitesurvey_timer_process (void *FunctionContext) pwdinfo->rx_invitereq_info.scan_op_ch_only = 0; } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +static void reset_ch_sitesurvey_timer_process2 (struct timer_list *t) +#else static void reset_ch_sitesurvey_timer_process2 (void *FunctionContext) +#endif { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) + struct adapter *adapter = from_timer(adapter, t, pwrctrlpriv.pwr_state_check_timer); +#else struct adapter *adapter = (struct adapter *)FunctionContext; +#endif struct wifidirect_info *pwdinfo = &adapter->wdinfo; if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) @@ -1772,9 +1788,17 @@ static void reset_ch_sitesurvey_timer_process2 (void *FunctionContext) pwdinfo->p2p_info.scan_op_ch_only = 0; } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +static void restore_p2p_state_timer_process(struct timer_list *t) +#else static void restore_p2p_state_timer_process (void *FunctionContext) +#endif { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) + struct adapter *adapter = from_timer(adapter, t, wdinfo.restore_p2p_state_timer); +#else struct adapter *adapter = (struct adapter *)FunctionContext; +#endif struct wifidirect_info *pwdinfo = &adapter->wdinfo; if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) @@ -1783,9 +1807,17 @@ static void restore_p2p_state_timer_process (void *FunctionContext) p2p_protocol_wk_cmd(adapter, P2P_RESTORE_STATE_WK); } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +static void pre_tx_scan_timer_process(struct timer_list *t) +#else static void pre_tx_scan_timer_process(void *FunctionContext) +#endif { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) + struct adapter *adapter = from_timer(adapter, t, wdinfo.pre_tx_scan_timer); +#else struct adapter *adapter = (struct adapter *)FunctionContext; +#endif struct wifidirect_info *pwdinfo = &adapter->wdinfo; struct mlme_priv *pmlmepriv = &adapter->mlmepriv; @@ -1813,9 +1845,17 @@ static void pre_tx_scan_timer_process(void *FunctionContext) spin_unlock_bh(&pmlmepriv->lock); } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +static void find_phase_timer_process(struct timer_list *t) +#else static void find_phase_timer_process(void *FunctionContext) +#endif { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) + struct adapter *adapter = from_timer(adapter, t, wdinfo.find_phase_timer); +#else struct adapter *adapter = (struct adapter *)FunctionContext; +#endif struct wifidirect_info *pwdinfo = &adapter->wdinfo; if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) @@ -1841,11 +1881,19 @@ void rtw_init_wifidirect_timers(struct adapter *padapter) { struct wifidirect_info *pwdinfo = &padapter->wdinfo; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) + timer_setup(&pwdinfo->find_phase_timer, find_phase_timer_process, 0); + timer_setup(&pwdinfo->restore_p2p_state_timer, restore_p2p_state_timer_process, 0); + timer_setup(&pwdinfo->pre_tx_scan_timer, pre_tx_scan_timer_process, 0); + timer_setup(&pwdinfo->reset_ch_sitesurvey, reset_ch_sitesurvey_timer_process, 0); + timer_setup(&pwdinfo->reset_ch_sitesurvey2, reset_ch_sitesurvey_timer_process2, 0); +#else _init_timer(&pwdinfo->find_phase_timer, padapter->pnetdev, find_phase_timer_process, padapter); _init_timer(&pwdinfo->restore_p2p_state_timer, padapter->pnetdev, restore_p2p_state_timer_process, padapter); _init_timer(&pwdinfo->pre_tx_scan_timer, padapter->pnetdev, pre_tx_scan_timer_process, padapter); _init_timer(&pwdinfo->reset_ch_sitesurvey, padapter->pnetdev, reset_ch_sitesurvey_timer_process, padapter); _init_timer(&pwdinfo->reset_ch_sitesurvey2, padapter->pnetdev, reset_ch_sitesurvey_timer_process2, padapter); +#endif } void rtw_init_wifidirect_addrs(struct adapter *padapter, u8 *dev_addr, u8 *iface_addr) @@ -1987,8 +2035,11 @@ int rtw_p2p_enable(struct adapter *padapter, enum P2P_ROLE role) _cancel_timer_ex(&pwdinfo->pre_tx_scan_timer); _cancel_timer_ex(&pwdinfo->reset_ch_sitesurvey); _cancel_timer_ex(&pwdinfo->reset_ch_sitesurvey2); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +#else reset_ch_sitesurvey_timer_process(padapter); reset_ch_sitesurvey_timer_process2(padapter); +#endif rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE); rtw_p2p_set_role(pwdinfo, P2P_ROLE_DISABLE); memset(&pwdinfo->rx_prov_disc_info, 0x00, sizeof(struct rx_provdisc_req_info)); diff --git a/core/rtw_pwrctrl.c b/core/rtw_pwrctrl.c index 68bb923..50e8b5e 100644 --- a/core/rtw_pwrctrl.c +++ b/core/rtw_pwrctrl.c @@ -208,9 +208,19 @@ exit: return; } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +static void pwr_state_check_handler(struct timer_list *t) +#else static void pwr_state_check_handler(void *FunctionContext) +#endif { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) + struct adapter *padapter = + from_timer(padapter, t, + pwrctrlpriv.pwr_state_check_timer); +#else struct adapter *padapter = (struct adapter *)FunctionContext; +#endif rtw_ps_cmd(padapter); } @@ -498,8 +508,11 @@ void rtw_init_pwrctrl_priv(struct adapter *padapter) pwrctrlpriv->btcoex_rfon = false; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) + timer_setup(&pwrctrlpriv->pwr_state_check_timer, pwr_state_check_handler, 0); +#else _init_timer(&(pwrctrlpriv->pwr_state_check_timer), padapter->pnetdev, pwr_state_check_handler, (u8 *)padapter); - +#endif } void rtw_free_pwrctrl_priv(struct adapter *adapter) diff --git a/core/rtw_recv.c b/core/rtw_recv.c index 30f3fa8..16a38a2 100644 --- a/core/rtw_recv.c +++ b/core/rtw_recv.c @@ -41,7 +41,11 @@ static u8 rtw_rfc1042_header[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 }; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +void rtw_signal_stat_timer_hdl(struct timer_list *); +#else void rtw_signal_stat_timer_hdl(RTW_TIMER_HDL_ARGS); +#endif void _rtw_init_sta_recv_priv(struct sta_recv_priv *psta_recvpriv) { @@ -103,8 +107,11 @@ int _rtw_init_recv_priv(struct recv_priv *precvpriv, struct adapter *padapter) res = rtw_hal_init_recv_priv(padapter); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) + timer_setup(&precvpriv->signal_stat_timer, rtw_signal_stat_timer_hdl, 0); +#else _init_timer(&precvpriv->signal_stat_timer, padapter->pnetdev, RTW_TIMER_HDL_NAME(signal_stat), padapter); - +#endif precvpriv->signal_stat_sampling_interval = 1000; /* ms */ rtw_set_signal_stat_timer(precvpriv); @@ -2183,9 +2190,17 @@ _recv_entry_drop: return ret; } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +void rtw_signal_stat_timer_hdl(struct timer_list *t) +#else void rtw_signal_stat_timer_hdl(RTW_TIMER_HDL_ARGS) +#endif { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) + struct adapter *adapter = from_timer(adapter, t, recvpriv.signal_stat_timer); +#else struct adapter *adapter = (struct adapter *)FunctionContext; +#endif struct recv_priv *recvpriv = &adapter->recvpriv; u32 tmp_s, tmp_q; diff --git a/hal/odm.c b/hal/odm.c index 5d554c0..8b8754c 100644 --- a/hal/odm.c +++ b/hal/odm.c @@ -1580,8 +1580,12 @@ void odm_RSSIMonitorCheckAP(struct odm_dm_struct *pDM_Odm) void ODM_InitAllTimers(struct odm_dm_struct *pDM_Odm) { +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) ODM_InitializeTimer(pDM_Odm, &pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer, (void *)odm_SwAntDivChkAntSwitchCallback, NULL, "SwAntennaSwitchTimer"); +#else + timer_setup(&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer, odm_SwAntDivChkAntSwitchCallback, 0); +#endif } void ODM_CancelAllTimers(struct odm_dm_struct *pDM_Odm) @@ -1690,7 +1694,11 @@ void ODM_SwAntDivRestAfterLink(struct odm_dm_struct *pDM_Odm) { } +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) void odm_SwAntDivChkAntSwitchCallback(void *FunctionContext) +#else +void odm_SwAntDivChkAntSwitchCallback(struct timer_list *t) +#endif { } diff --git a/hal/odm_interface.c b/hal/odm_interface.c index 9d021f6..3be5a5f 100644 --- a/hal/odm_interface.c +++ b/hal/odm_interface.c @@ -177,6 +177,7 @@ void ODM_SetTimer(struct odm_dm_struct *pDM_Odm, struct timer_list *pTimer, u32 _set_timer(pTimer, msDelay); /* ms */ } +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) void ODM_InitializeTimer(struct odm_dm_struct *pDM_Odm, struct timer_list *pTimer, void *CallBackFunc, void *pContext, const char *szID) @@ -184,6 +185,7 @@ void ODM_InitializeTimer(struct odm_dm_struct *pDM_Odm, struct timer_list *pTime struct adapter *Adapter = pDM_Odm->Adapter; _init_timer(pTimer, Adapter->pnetdev, CallBackFunc, pDM_Odm); } +#endif void ODM_CancelTimer(struct odm_dm_struct *pDM_Odm, struct timer_list *pTimer) { diff --git a/include/odm_precomp.h b/include/odm_precomp.h index d1d95f4..b2fbb5d 100644 --- a/include/odm_precomp.h +++ b/include/odm_precomp.h @@ -92,7 +92,11 @@ void odm_EdcaTurboCheckCE(struct odm_dm_struct *pDM_Odm); void odm_TXPowerTrackingCheckCE(struct odm_dm_struct *pDM_Odm); void odm_TXPowerTrackingCheckMP(struct odm_dm_struct *pDM_Odm); void odm_TXPowerTrackingCheckAP(struct odm_dm_struct *pDM_Odm); +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) void odm_SwAntDivChkAntSwitchCallback(void *FunctionContext); +#else +void odm_SwAntDivChkAntSwitchCallback(struct timer_list *t); +#endif void odm_InitHybridAntDiv(struct odm_dm_struct *pDM_Odm); void odm_HwAntDiv(struct odm_dm_struct *pDM_Odm); diff --git a/include/osdep_service.h b/include/osdep_service.h index 1b040df..ce76a2c 100644 --- a/include/osdep_service.h +++ b/include/osdep_service.h @@ -92,12 +92,14 @@ static inline void rtw_list_delete(struct list_head *plist) list_del_init(plist); } +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) static inline void _init_timer(struct timer_list *ptimer,struct net_device *nic_hdl,void *pfunc,void* cntx) { ptimer->function = pfunc; ptimer->data = (unsigned long)cntx; init_timer(ptimer); } +#endif static inline void _set_timer(struct timer_list *ptimer,u32 delay_time) { diff --git a/include/rtw_led.h b/include/rtw_led.h index d0da4fd..1e6a809 100644 --- a/include/rtw_led.h +++ b/include/rtw_led.h @@ -179,7 +179,11 @@ struct led_priv{ (adapt)->ledpriv.LedControlHandler((adapt), (action)); \ } while (0) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +void BlinkTimerCallback(struct timer_list *t); +#else void BlinkTimerCallback(void *data); +#endif void BlinkWorkItemCallback(struct work_struct *work); void ResetLedStatus(struct LED_871x * pLed); diff --git a/include/rtw_mlme.h b/include/rtw_mlme.h index 8d9c231..a53a567 100644 --- a/include/rtw_mlme.h +++ b/include/rtw_mlme.h @@ -469,8 +469,13 @@ void indicate_wx_scan_complete_event(struct adapter *padapter); void rtw_indicate_wx_assoc_event(struct adapter *padapter); void rtw_indicate_wx_disassoc_event(struct adapter *padapter); int event_thread(void *context); -void rtw_join_timeout_handler(void *FunctionContext); +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) +void rtw_join_timeout_handler (void *FunctionContext); void _rtw_scan_timeout_handler(void *FunctionContext); +#else +void rtw_join_timeout_handler (struct timer_list *t); +void _rtw_scan_timeout_handler (struct timer_list *t); +#endif void rtw_free_network_queue(struct adapter *adapter, u8 isfreeall); int rtw_init_mlme_priv(struct adapter *adapter); void rtw_free_mlme_priv (struct mlme_priv *pmlmepriv); diff --git a/os_dep/ioctl_linux.c b/os_dep/ioctl_linux.c index 3d124b2..4623364 100644 --- a/os_dep/ioctl_linux.c +++ b/os_dep/ioctl_linux.c @@ -1611,13 +1611,12 @@ static int rtw_wx_get_essid(struct net_device *dev, if ((check_fwstate(pmlmepriv, _FW_LINKED)) || (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE))) { len = pcur_bss->Ssid.SsidLength; + memcpy(extra, pcur_bss->Ssid.Ssid, len); } else { len = 0; + *extra = 0; } wrqu->essid.length = len; - - memcpy(extra, pcur_bss->Ssid.Ssid, len); - wrqu->essid.flags = 1; exit: diff --git a/os_dep/mlme_linux.c b/os_dep/mlme_linux.c index bdea9db..97c2b62 100644 --- a/os_dep/mlme_linux.c +++ b/os_dep/mlme_linux.c @@ -24,23 +24,47 @@ #include #include +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) void rtw_join_timeout_handler (void *FunctionContext) +#else +void rtw_join_timeout_handler (struct timer_list *t) +#endif { +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) struct adapter *adapter = (struct adapter *)FunctionContext; +#else + struct adapter *adapter = from_timer(adapter, t, mlmepriv.assoc_timer); +#endif _rtw_join_timeout_handler(adapter); } +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) void _rtw_scan_timeout_handler (void *FunctionContext) +#else +void _rtw_scan_timeout_handler (struct timer_list *t) +#endif { +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) struct adapter *adapter = (struct adapter *)FunctionContext; +#else + struct adapter *adapter = from_timer(adapter, t, mlmepriv.scan_to_timer); +#endif rtw_scan_timeout_handler(adapter); } +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) static void _dynamic_check_timer_handlder(void *FunctionContext) +#else +static void _dynamic_check_timer_handlder(struct timer_list *t) +#endif { +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) struct adapter *adapter = (struct adapter *)FunctionContext; +#else + struct adapter *adapter = from_timer(adapter, t, mlmepriv.dynamic_chk_timer); +#endif if (adapter->registrypriv.mp_mode == 1) return; @@ -52,9 +76,15 @@ void rtw_init_mlme_timer(struct adapter *padapter) { struct mlme_priv *pmlmepriv = &padapter->mlmepriv; +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) _init_timer(&(pmlmepriv->assoc_timer), padapter->pnetdev, rtw_join_timeout_handler, padapter); _init_timer(&(pmlmepriv->scan_to_timer), padapter->pnetdev, _rtw_scan_timeout_handler, padapter); _init_timer(&(pmlmepriv->dynamic_chk_timer), padapter->pnetdev, _dynamic_check_timer_handlder, padapter); +#else + timer_setup(&pmlmepriv->assoc_timer, rtw_join_timeout_handler, 0); + timer_setup(&pmlmepriv->scan_to_timer, _rtw_scan_timeout_handler, 0); + timer_setup(&pmlmepriv->dynamic_chk_timer, _dynamic_check_timer_handlder, 0); +#endif } void rtw_os_indicate_connect(struct adapter *adapter) @@ -156,36 +186,69 @@ void rtw_report_sec_ie(struct adapter *adapter, u8 authmode, u8 *sec_ie) } } +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) static void _survey_timer_hdl(void *FunctionContext) +#else +static void _survey_timer_hdl(struct timer_list *t) +#endif { +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) struct adapter *padapter = (struct adapter *)FunctionContext; +#else + struct adapter *padapter = from_timer(padapter, t, mlmeextpriv.survey_timer); +#endif survey_timer_hdl(padapter); } +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) static void _link_timer_hdl(void *FunctionContext) +#else +static void _link_timer_hdl(struct timer_list *t) +#endif { +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) struct adapter *padapter = (struct adapter *)FunctionContext; +#else + struct adapter *padapter = from_timer(padapter, t, mlmeextpriv.link_timer); +#endif link_timer_hdl(padapter); } +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) static void _addba_timer_hdl(void *FunctionContext) +#else +static void _addba_timer_hdl(struct timer_list *t) +#endif { +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) struct sta_info *psta = (struct sta_info *)FunctionContext; +#else + struct sta_info *psta = from_timer(psta, t, addba_retry_timer); +#endif addba_timer_hdl(psta); } void init_addba_retry_timer(struct adapter *padapter, struct sta_info *psta) { +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) _init_timer(&psta->addba_retry_timer, padapter->pnetdev, _addba_timer_hdl, psta); +#else + timer_setup(&psta->addba_retry_timer, _addba_timer_hdl, 0); +#endif } void init_mlme_ext_timer(struct adapter *padapter) { struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) _init_timer(&pmlmeext->survey_timer, padapter->pnetdev, _survey_timer_hdl, padapter); _init_timer(&pmlmeext->link_timer, padapter->pnetdev, _link_timer_hdl, padapter); +#else + timer_setup(&pmlmeext->survey_timer, _survey_timer_hdl, 0); + timer_setup(&pmlmeext->link_timer, _link_timer_hdl, 0); +#endif } #ifdef CONFIG_88EU_AP_MODE diff --git a/os_dep/recv_linux.c b/os_dep/recv_linux.c index c020147..44c5fcb 100644 --- a/os_dep/recv_linux.c +++ b/os_dep/recv_linux.c @@ -242,11 +242,19 @@ void rtw_os_read_port(struct adapter *padapter, struct recv_buf *precvbuf) (unsigned char *)precvbuf); } +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) static void _rtw_reordering_ctrl_timeout_handler(void *func_context) +#else +static void _rtw_reordering_ctrl_timeout_handler(struct timer_list *t) +#endif { struct recv_reorder_ctrl *preorder_ctrl; +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) preorder_ctrl = (struct recv_reorder_ctrl *)func_context; +#else + preorder_ctrl = from_timer(preorder_ctrl, t, reordering_ctrl_timer); +#endif rtw_reordering_ctrl_timeout_handler(preorder_ctrl); } @@ -254,5 +262,9 @@ void rtw_init_recv_timer(struct recv_reorder_ctrl *preorder_ctrl) { struct adapter *padapter = preorder_ctrl->padapter; +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) _init_timer(&(preorder_ctrl->reordering_ctrl_timer), padapter->pnetdev, _rtw_reordering_ctrl_timeout_handler, preorder_ctrl); +#else + timer_setup(&preorder_ctrl->reordering_ctrl_timer, _rtw_reordering_ctrl_timeout_handler, 0); +#endif }