ibss.c (82d048186e403f36e083b37ad42aa90abb7dcaac) ibss.c (5bb644a0fd25a5e083ecbfaa92a211db99aa6ef7)
1/*
2 * IBSS mode implementation
3 * Copyright 2003-2008, Jouni Malinen <j@w1.fi>
4 * Copyright 2004, Instant802 Networks, Inc.
5 * Copyright 2005, Devicescape Software, Inc.
6 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
7 * Copyright 2007, Michael Wu <flamingice@sourmilk.net>
8 * Copyright 2009, Johannes Berg <johannes@sipsolutions.net>

--- 723 unchanged lines hidden (view full) ---

732static void ieee80211_ibss_work(struct work_struct *work)
733{
734 struct ieee80211_sub_if_data *sdata =
735 container_of(work, struct ieee80211_sub_if_data, u.ibss.work);
736 struct ieee80211_local *local = sdata->local;
737 struct ieee80211_if_ibss *ifibss;
738 struct sk_buff *skb;
739
1/*
2 * IBSS mode implementation
3 * Copyright 2003-2008, Jouni Malinen <j@w1.fi>
4 * Copyright 2004, Instant802 Networks, Inc.
5 * Copyright 2005, Devicescape Software, Inc.
6 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
7 * Copyright 2007, Michael Wu <flamingice@sourmilk.net>
8 * Copyright 2009, Johannes Berg <johannes@sipsolutions.net>

--- 723 unchanged lines hidden (view full) ---

732static void ieee80211_ibss_work(struct work_struct *work)
733{
734 struct ieee80211_sub_if_data *sdata =
735 container_of(work, struct ieee80211_sub_if_data, u.ibss.work);
736 struct ieee80211_local *local = sdata->local;
737 struct ieee80211_if_ibss *ifibss;
738 struct sk_buff *skb;
739
740 if (WARN_ON(local->suspended))
741 return;
742
740 if (!netif_running(sdata->dev))
741 return;
742
743 if (local->sw_scanning || local->hw_scanning)
744 return;
745
746 if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_ADHOC))
747 return;

--- 20 unchanged lines hidden (view full) ---

768
769static void ieee80211_ibss_timer(unsigned long data)
770{
771 struct ieee80211_sub_if_data *sdata =
772 (struct ieee80211_sub_if_data *) data;
773 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
774 struct ieee80211_local *local = sdata->local;
775
743 if (!netif_running(sdata->dev))
744 return;
745
746 if (local->sw_scanning || local->hw_scanning)
747 return;
748
749 if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_ADHOC))
750 return;

--- 20 unchanged lines hidden (view full) ---

771
772static void ieee80211_ibss_timer(unsigned long data)
773{
774 struct ieee80211_sub_if_data *sdata =
775 (struct ieee80211_sub_if_data *) data;
776 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
777 struct ieee80211_local *local = sdata->local;
778
779 if (local->quiescing) {
780 ifibss->timer_running = true;
781 return;
782 }
783
776 set_bit(IEEE80211_IBSS_REQ_RUN, &ifibss->request);
777 queue_work(local->hw.workqueue, &ifibss->work);
778}
779
784 set_bit(IEEE80211_IBSS_REQ_RUN, &ifibss->request);
785 queue_work(local->hw.workqueue, &ifibss->work);
786}
787
788#ifdef CONFIG_PM
789void ieee80211_ibss_quiesce(struct ieee80211_sub_if_data *sdata)
790{
791 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
792
793 cancel_work_sync(&ifibss->work);
794 if (del_timer_sync(&ifibss->timer))
795 ifibss->timer_running = true;
796}
797
798void ieee80211_ibss_restart(struct ieee80211_sub_if_data *sdata)
799{
800 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
801
802 if (ifibss->timer_running) {
803 add_timer(&ifibss->timer);
804 ifibss->timer_running = false;
805 }
806}
807#endif
808
780void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata)
781{
782 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
783
784 INIT_WORK(&ifibss->work, ieee80211_ibss_work);
785 setup_timer(&ifibss->timer, ieee80211_ibss_timer,
786 (unsigned long) sdata);
787 skb_queue_head_init(&ifibss->skb_queue);

--- 131 unchanged lines hidden ---
809void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata)
810{
811 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
812
813 INIT_WORK(&ifibss->work, ieee80211_ibss_work);
814 setup_timer(&ifibss->timer, ieee80211_ibss_timer,
815 (unsigned long) sdata);
816 skb_queue_head_init(&ifibss->skb_queue);

--- 131 unchanged lines hidden ---