Example #1
0
void
ath_swba_event(void *Context, void *data, u_int32_t datalen)
{
    struct ath_softc_net80211 *scn = (struct ath_softc_net80211 *)Context;
    struct ieee80211com *ic = &scn->sc_ic;
    WMI_SWBA_EVENT *swba_event = (WMI_SWBA_EVENT *)data;

    /* XXX: need to fix if defer has not run & more events are arriving */
    if(atomic_read(&scn->sc_htc_swba_data.flags) == IEEE80211_SWBA_DEFER_PENDING)
    {
        /*adf_os_print("SWBA Event processing is pending ignoring event  \n");*/
    } else if(adf_os_unlikely(ic->ic_flags & IEEE80211_F_CHANSWITCH)){
        if (ic->ic_chanchange_cnt) {
            atomic_set(&scn->sc_htc_swba_data.flags, IEEE80211_SWBA_DEFER_PENDING);
            scn->sc_ops->ath_wmi_beacon(scn->sc_dev, swba_event->currentTsf, swba_event->beaconPendingCount, 0);
            atomic_set(&scn->sc_htc_swba_data.flags, IEEE80211_SWBA_DEFER_DONE);
        }
        else {
            scn->sc_htc_swba_data.currentTsf         = swba_event->currentTsf; 
            scn->sc_htc_swba_data.beaconPendingCount = swba_event->beaconPendingCount;
            atomic_set(&scn->sc_htc_swba_data.flags, IEEE80211_SWBA_DEFER_PENDING);

            OS_PUT_DEFER_ITEM(scn->sc_osdev, 
                    ath_swba_event_defer, 
                    WORK_ITEM_SET_BEACON_DEFERED, 
                    scn, NULL, NULL);

        }
    } else {
        scn->sc_ops->ath_wmi_beacon(scn->sc_dev, swba_event->currentTsf, swba_event->beaconPendingCount, 0);
    }
}
Example #2
0
void
_ieee80211_node_leave_defer(struct ieee80211_node *ni)
{


    struct ieee80211com *ic =  ni->ni_ic;
 
    ieee80211_ref_node(ni);

    TAILQ_INSERT_TAIL(&ic->ic_nodeleave_queue, ni, nodeleave_list);
    
    
    if(atomic_read(&ic->ic_nodeleave_deferflags) != DEFER_PENDING){
        {
            atomic_set(&ic->ic_nodeleave_deferflags, DEFER_PENDING);
            OS_PUT_DEFER_ITEM(ic->ic_osdev,
                    _ieee80211_node_leave_deferwork,
                    WORK_ITEM_SINGLE_ARG_DEFERED,
                    ic, NULL, NULL);

        }
    }

}