struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
        unsigned long flags;
-       u32 inta = 0;
-       u32 intb = 0;
-       u32 intc = 0;
-       u32 intd = 0;
+       struct rtl_int intvec = {0};
+
        irqreturn_t ret = IRQ_HANDLED;
 
        if (rtlpci->irq_enabled == 0)
        rtlpriv->cfg->ops->disable_interrupt(hw);
 
        /*read ISR: 4/8bytes */
-       rtlpriv->cfg->ops->interrupt_recognized(hw, &inta, &intb, &intc, &intd);
+       rtlpriv->cfg->ops->interrupt_recognized(hw, &intvec);
 
        /*Shared IRQ or HW disappeared */
-       if (!inta || inta == 0xffff)
+       if (!intvec.inta || intvec.inta == 0xffff)
                goto done;
 
        /*<1> beacon related */
-       if (inta & rtlpriv->cfg->maps[RTL_IMR_TBDOK])
+       if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_TBDOK])
                RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE,
                         "beacon ok interrupt!\n");
 
-       if (unlikely(inta & rtlpriv->cfg->maps[RTL_IMR_TBDER]))
+       if (unlikely(intvec.inta & rtlpriv->cfg->maps[RTL_IMR_TBDER]))
                RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE,
                         "beacon err interrupt!\n");
 
-       if (inta & rtlpriv->cfg->maps[RTL_IMR_BDOK])
+       if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_BDOK])
                RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE, "beacon interrupt!\n");
 
-       if (inta & rtlpriv->cfg->maps[RTL_IMR_BCNINT]) {
+       if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_BCNINT]) {
                RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE,
                         "prepare beacon for interrupt!\n");
                tasklet_schedule(&rtlpriv->works.irq_prepare_bcn_tasklet);
        }
 
        /*<2> Tx related */
-       if (unlikely(intb & rtlpriv->cfg->maps[RTL_IMR_TXFOVW]))
+       if (unlikely(intvec.intb & rtlpriv->cfg->maps[RTL_IMR_TXFOVW]))
                RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, "IMR_TXFOVW!\n");
 
-       if (inta & rtlpriv->cfg->maps[RTL_IMR_MGNTDOK]) {
+       if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_MGNTDOK]) {
                RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE,
                         "Manage ok interrupt!\n");
                _rtl_pci_tx_isr(hw, MGNT_QUEUE);
        }
 
-       if (inta & rtlpriv->cfg->maps[RTL_IMR_HIGHDOK]) {
+       if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_HIGHDOK]) {
                RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE,
                         "HIGH_QUEUE ok interrupt!\n");
                _rtl_pci_tx_isr(hw, HIGH_QUEUE);
        }
 
-       if (inta & rtlpriv->cfg->maps[RTL_IMR_BKDOK]) {
+       if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_BKDOK]) {
                rtlpriv->link_info.num_tx_inperiod++;
 
                RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE,
                _rtl_pci_tx_isr(hw, BK_QUEUE);
        }
 
-       if (inta & rtlpriv->cfg->maps[RTL_IMR_BEDOK]) {
+       if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_BEDOK]) {
                rtlpriv->link_info.num_tx_inperiod++;
 
                RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE,
                _rtl_pci_tx_isr(hw, BE_QUEUE);
        }
 
-       if (inta & rtlpriv->cfg->maps[RTL_IMR_VIDOK]) {
+       if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_VIDOK]) {
                rtlpriv->link_info.num_tx_inperiod++;
 
                RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE,
                _rtl_pci_tx_isr(hw, VI_QUEUE);
        }
 
-       if (inta & rtlpriv->cfg->maps[RTL_IMR_VODOK]) {
+       if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_VODOK]) {
                rtlpriv->link_info.num_tx_inperiod++;
 
                RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE,
        }
 
        if (rtlhal->hw_type == HARDWARE_TYPE_RTL8822BE) {
-               if (intd & rtlpriv->cfg->maps[RTL_IMR_H2CDOK]) {
+               if (intvec.intd & rtlpriv->cfg->maps[RTL_IMR_H2CDOK]) {
                        rtlpriv->link_info.num_tx_inperiod++;
 
                        RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE,
        }
 
        if (rtlhal->hw_type == HARDWARE_TYPE_RTL8192SE) {
-               if (inta & rtlpriv->cfg->maps[RTL_IMR_COMDOK]) {
+               if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_COMDOK]) {
                        rtlpriv->link_info.num_tx_inperiod++;
 
                        RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE,
        }
 
        /*<3> Rx related */
-       if (inta & rtlpriv->cfg->maps[RTL_IMR_ROK]) {
+       if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_ROK]) {
                RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE, "Rx ok interrupt!\n");
                _rtl_pci_rx_interrupt(hw);
        }
 
-       if (unlikely(inta & rtlpriv->cfg->maps[RTL_IMR_RDU])) {
+       if (unlikely(intvec.inta & rtlpriv->cfg->maps[RTL_IMR_RDU])) {
                RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
                         "rx descriptor unavailable!\n");
                _rtl_pci_rx_interrupt(hw);
        }
 
-       if (unlikely(intb & rtlpriv->cfg->maps[RTL_IMR_RXFOVW])) {
+       if (unlikely(intvec.intb & rtlpriv->cfg->maps[RTL_IMR_RXFOVW])) {
                RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, "rx overflow !\n");
                _rtl_pci_rx_interrupt(hw);
        }
 
        /*<4> fw related*/
        if (rtlhal->hw_type == HARDWARE_TYPE_RTL8723AE) {
-               if (inta & rtlpriv->cfg->maps[RTL_IMR_C2HCMD]) {
+               if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_C2HCMD]) {
                        RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE,
                                 "firmware interrupt!\n");
                        queue_delayed_work(rtlpriv->works.rtl_wq,
         */
        if (rtlhal->hw_type == HARDWARE_TYPE_RTL8188EE ||
            rtlhal->hw_type == HARDWARE_TYPE_RTL8723BE) {
-               if (unlikely(inta & rtlpriv->cfg->maps[RTL_IMR_HSISR_IND])) {
+               if (unlikely(intvec.inta &
+                   rtlpriv->cfg->maps[RTL_IMR_HSISR_IND])) {
                        RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE,
                                 "hsisr interrupt!\n");
                        _rtl_pci_hs_interrupt(hw);
 
 }
 
 void rtl88ee_interrupt_recognized(struct ieee80211_hw *hw,
-                                 u32 *p_inta, u32 *p_intb,
-                                 u32 *p_intc, u32 *p_intd)
+                                 struct rtl_int *intvec)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
 
-       *p_inta = rtl_read_dword(rtlpriv, ISR) & rtlpci->irq_mask[0];
-       rtl_write_dword(rtlpriv, ISR, *p_inta);
+       intvec->inta = rtl_read_dword(rtlpriv, ISR) & rtlpci->irq_mask[0];
+       rtl_write_dword(rtlpriv, ISR, intvec->inta);
 
-       *p_intb = rtl_read_dword(rtlpriv, REG_HISRE) & rtlpci->irq_mask[1];
-       rtl_write_dword(rtlpriv, REG_HISRE, *p_intb);
+       intvec->intb = rtl_read_dword(rtlpriv, REG_HISRE) & rtlpci->irq_mask[1];
+       rtl_write_dword(rtlpriv, REG_HISRE, intvec->intb);
 
 }
 
 
 void rtl88ee_get_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val);
 void rtl88ee_read_eeprom_info(struct ieee80211_hw *hw);
 void rtl88ee_interrupt_recognized(struct ieee80211_hw *hw,
-                                 u32 *p_inta, u32 *p_intb,
-                                 u32 *p_intc, u32 *p_intd);
+                                 struct rtl_int *int_vec);
 int rtl88ee_hw_init(struct ieee80211_hw *hw);
 void rtl88ee_card_disable(struct ieee80211_hw *hw);
 void rtl88ee_enable_interrupt(struct ieee80211_hw *hw);
 
 }
 
 void rtl92ce_interrupt_recognized(struct ieee80211_hw *hw,
-                                 u32 *p_inta, u32 *p_intb,
-                                 u32 *p_intc, u32 *p_intd)
+                                 struct rtl_int *intvec)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
 
-       *p_inta = rtl_read_dword(rtlpriv, ISR) & rtlpci->irq_mask[0];
-       rtl_write_dword(rtlpriv, ISR, *p_inta);
-
-       /*
-        * *p_intb = rtl_read_dword(rtlpriv, REG_HISRE) & rtlpci->irq_mask[1];
-        * rtl_write_dword(rtlpriv, ISR + 4, *p_intb);
-        */
+       intvec->inta = rtl_read_dword(rtlpriv, ISR) & rtlpci->irq_mask[0];
+       rtl_write_dword(rtlpriv, ISR, intvec->inta);
 }
 
 void rtl92ce_set_beacon_related_registers(struct ieee80211_hw *hw)
 
 void rtl92ce_get_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val);
 void rtl92ce_read_eeprom_info(struct ieee80211_hw *hw);
 void rtl92ce_interrupt_recognized(struct ieee80211_hw *hw,
-                                 u32 *p_inta, u32 *p_intb,
-                                 u32 *p_intc, u32 *p_intd);
+                                 struct rtl_int *int_vec);
 int rtl92ce_hw_init(struct ieee80211_hw *hw);
 void rtl92ce_card_disable(struct ieee80211_hw *hw);
 void rtl92ce_enable_interrupt(struct ieee80211_hw *hw);
 
 }
 
 void rtl92de_interrupt_recognized(struct ieee80211_hw *hw,
-                                 u32 *p_inta, u32 *p_intb,
-                                 u32 *p_intc, u32 *p_intd)
+                                 struct rtl_int *intvec)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
 
-       *p_inta = rtl_read_dword(rtlpriv, ISR) & rtlpci->irq_mask[0];
-       rtl_write_dword(rtlpriv, ISR, *p_inta);
-
-       /*
-        * *p_intb = rtl_read_dword(rtlpriv, REG_HISRE) & rtlpci->irq_mask[1];
-        * rtl_write_dword(rtlpriv, ISR + 4, *p_intb);
-        */
+       intvec->inta = rtl_read_dword(rtlpriv, ISR) & rtlpci->irq_mask[0];
+       rtl_write_dword(rtlpriv, ISR, intvec->inta);
 }
 
 void rtl92de_set_beacon_related_registers(struct ieee80211_hw *hw)
 
 void rtl92de_get_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val);
 void rtl92de_read_eeprom_info(struct ieee80211_hw *hw);
 void rtl92de_interrupt_recognized(struct ieee80211_hw *hw,
-                                 u32 *p_inta, u32 *p_intb,
-                                 u32 *p_intc, u32 *p_intd);
+                                 struct rtl_int *int_vec);
 int rtl92de_hw_init(struct ieee80211_hw *hw);
 void rtl92de_card_disable(struct ieee80211_hw *hw);
 void rtl92de_enable_interrupt(struct ieee80211_hw *hw);
 
 }
 
 void rtl92ee_interrupt_recognized(struct ieee80211_hw *hw,
-                                 u32 *p_inta, u32 *p_intb,
-                                 u32 *p_intc, u32 *p_intd)
+                                 struct rtl_int *intvec)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
 
-       *p_inta = rtl_read_dword(rtlpriv, ISR) & rtlpci->irq_mask[0];
-       rtl_write_dword(rtlpriv, ISR, *p_inta);
+       intvec->inta = rtl_read_dword(rtlpriv, ISR) & rtlpci->irq_mask[0];
+       rtl_write_dword(rtlpriv, ISR, intvec->inta);
 
-       *p_intb = rtl_read_dword(rtlpriv, REG_HISRE) & rtlpci->irq_mask[1];
-       rtl_write_dword(rtlpriv, REG_HISRE, *p_intb);
+       intvec->intb = rtl_read_dword(rtlpriv, REG_HISRE) & rtlpci->irq_mask[1];
+       rtl_write_dword(rtlpriv, REG_HISRE, intvec->intb);
 }
 
 void rtl92ee_set_beacon_related_registers(struct ieee80211_hw *hw)
 
 void rtl92ee_get_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val);
 void rtl92ee_read_eeprom_info(struct ieee80211_hw *hw);
 void rtl92ee_interrupt_recognized(struct ieee80211_hw *hw,
-                                 u32 *p_inta, u32 *p_intb,
-                                 u32 *p_intc, u32 *p_intd);
+                                 struct rtl_int *int_vec);
 int rtl92ee_hw_init(struct ieee80211_hw *hw);
 void rtl92ee_card_disable(struct ieee80211_hw *hw);
 void rtl92ee_enable_interrupt(struct ieee80211_hw *hw);
 
        udelay(100);
 }
 
-void rtl92se_interrupt_recognized(struct ieee80211_hw *hw, u32 *p_inta,
-                            u32 *p_intb, u32 *p_intc, u32 *p_intd)
+void rtl92se_interrupt_recognized(struct ieee80211_hw *hw,
+                                 struct rtl_int *intvec)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
 
-       *p_inta = rtl_read_dword(rtlpriv, ISR) & rtlpci->irq_mask[0];
-       rtl_write_dword(rtlpriv, ISR, *p_inta);
+       intvec->inta = rtl_read_dword(rtlpriv, ISR) & rtlpci->irq_mask[0];
+       rtl_write_dword(rtlpriv, ISR, intvec->inta);
 
-       *p_intb = rtl_read_dword(rtlpriv, ISR + 4) & rtlpci->irq_mask[1];
-       rtl_write_dword(rtlpriv, ISR + 4, *p_intb);
+       intvec->intb = rtl_read_dword(rtlpriv, ISR + 4) & rtlpci->irq_mask[1];
+       rtl_write_dword(rtlpriv, ISR + 4, intvec->intb);
 }
 
 void rtl92se_set_beacon_related_registers(struct ieee80211_hw *hw)
 
                        u8 variable, u8 *val);
 void rtl92se_read_eeprom_info(struct ieee80211_hw *hw);
 void rtl92se_interrupt_recognized(struct ieee80211_hw *hw,
-                                 u32 *p_inta, u32 *p_intb,
-                                 u32 *p_intc, u32 *p_intd);
+                                 struct rtl_int *int_vec);
 int rtl92se_hw_init(struct ieee80211_hw *hw);
 void rtl92se_card_disable(struct ieee80211_hw *hw);
 void rtl92se_enable_interrupt(struct ieee80211_hw *hw);
 
 }
 
 void rtl8723e_interrupt_recognized(struct ieee80211_hw *hw,
-                                  u32 *p_inta, u32 *p_intb,
-                                  u32 *p_intc, u32 *p_intd)
+                                  struct rtl_int *intvec)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
 
-       *p_inta = rtl_read_dword(rtlpriv, 0x3a0) & rtlpci->irq_mask[0];
-       rtl_write_dword(rtlpriv, 0x3a0, *p_inta);
+       intvec->inta = rtl_read_dword(rtlpriv, 0x3a0) & rtlpci->irq_mask[0];
+       rtl_write_dword(rtlpriv, 0x3a0, intvec->inta);
 }
 
 void rtl8723e_set_beacon_related_registers(struct ieee80211_hw *hw)
 
 void rtl8723e_read_eeprom_info(struct ieee80211_hw *hw);
 
 void rtl8723e_interrupt_recognized(struct ieee80211_hw *hw,
-                                  u32 *p_inta, u32 *p_intb,
-                                  u32 *p_intc, u32 *p_intd);
+                                  struct rtl_int *int_vec);
 int rtl8723e_hw_init(struct ieee80211_hw *hw);
 void rtl8723e_card_disable(struct ieee80211_hw *hw);
 void rtl8723e_enable_interrupt(struct ieee80211_hw *hw);
 
 }
 
 void rtl8723be_interrupt_recognized(struct ieee80211_hw *hw,
-                                   u32 *p_inta, u32 *p_intb,
-                                   u32 *p_intc, u32 *p_intd)
+                                   struct rtl_int *intvec)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
 
-       *p_inta = rtl_read_dword(rtlpriv, ISR) & rtlpci->irq_mask[0];
-       rtl_write_dword(rtlpriv, ISR, *p_inta);
+       intvec->inta = rtl_read_dword(rtlpriv, ISR) & rtlpci->irq_mask[0];
+       rtl_write_dword(rtlpriv, ISR, intvec->inta);
 
-       *p_intb = rtl_read_dword(rtlpriv, REG_HISRE) &
-                                       rtlpci->irq_mask[1];
-       rtl_write_dword(rtlpriv, REG_HISRE, *p_intb);
+       intvec->intb = rtl_read_dword(rtlpriv, REG_HISRE) &
+                                     rtlpci->irq_mask[1];
+       rtl_write_dword(rtlpriv, REG_HISRE, intvec->intb);
 }
 
 void rtl8723be_set_beacon_related_registers(struct ieee80211_hw *hw)
 
 void rtl8723be_read_eeprom_info(struct ieee80211_hw *hw);
 
 void rtl8723be_interrupt_recognized(struct ieee80211_hw *hw,
-                                   u32 *p_inta, u32 *p_intb,
-                                   u32 *p_intc, u32 *p_intd);
+                                   struct rtl_int *int_vec);
 int rtl8723be_hw_init(struct ieee80211_hw *hw);
 void rtl8723be_card_disable(struct ieee80211_hw *hw);
 void rtl8723be_enable_interrupt(struct ieee80211_hw *hw);
 
 }
 
 void rtl8821ae_interrupt_recognized(struct ieee80211_hw *hw,
-                                   u32 *p_inta, u32 *p_intb,
-                                   u32 *p_intc, u32 *p_intd)
+                                   struct rtl_int *intvec)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
 
-       *p_inta = rtl_read_dword(rtlpriv, ISR) & rtlpci->irq_mask[0];
-       rtl_write_dword(rtlpriv, ISR, *p_inta);
+       intvec->inta = rtl_read_dword(rtlpriv, ISR) & rtlpci->irq_mask[0];
+       rtl_write_dword(rtlpriv, ISR, intvec->inta);
 
-       *p_intb = rtl_read_dword(rtlpriv, REG_HISRE) & rtlpci->irq_mask[1];
-       rtl_write_dword(rtlpriv, REG_HISRE, *p_intb);
+       intvec->intb = rtl_read_dword(rtlpriv, REG_HISRE) & rtlpci->irq_mask[1];
+       rtl_write_dword(rtlpriv, REG_HISRE, intvec->intb);
 }
 
 void rtl8821ae_set_beacon_related_registers(struct ieee80211_hw *hw)
 
 void rtl8821ae_read_eeprom_info(struct ieee80211_hw *hw);
 
 void rtl8821ae_interrupt_recognized(struct ieee80211_hw *hw,
-                                   u32 *p_inta, u32 *p_intb,
-                                   u32 *p_intc, u32 *p_intd);
+                                   struct rtl_int *int_vec);
 int rtl8821ae_hw_init(struct ieee80211_hw *hw);
 void rtl8821ae_card_disable(struct ieee80211_hw *hw);
 void rtl8821ae_enable_interrupt(struct ieee80211_hw *hw);
 
        u32 mask[4];
 };
 
+/* struct to store contents of interrupt vectors */
+struct rtl_int {
+       u32 inta;
+       u32 intb;
+       u32 intc;
+       u32 intd;
+};
+
 struct rtl_hal_ops {
        int (*init_sw_vars) (struct ieee80211_hw *hw);
        void (*deinit_sw_vars) (struct ieee80211_hw *hw);
        void (*read_chip_version)(struct ieee80211_hw *hw);
        void (*read_eeprom_info) (struct ieee80211_hw *hw);
        void (*interrupt_recognized) (struct ieee80211_hw *hw,
-                                     u32 *p_inta, u32 *p_intb,
-                                     u32 *p_intc, u32 *p_intd);
+                                     struct rtl_int *intvec);
        int (*hw_init) (struct ieee80211_hw *hw);
        void (*hw_disable) (struct ieee80211_hw *hw);
        void (*hw_suspend) (struct ieee80211_hw *hw);