Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 08 Mar 2012 00:38:44 +0900 (JST)
From:      Mitsuru IWASAKI <iwasaki@jp.FreeBSD.org>
To:        bschmidt@freebsd.org
Cc:        adrian@freebsd.org, freebsd-current@freebsd.org, freebsd-wireless@freebsd.org
Subject:   Re: patches for if_iwi and wlan for WEP mode
Message-ID:  <20120308.003844.08316346.iwasaki@jp.FreeBSD.org>
In-Reply-To: <201203062005.15276.bschmidt@freebsd.org>
References:  <201203052314.22050.bschmidt@freebsd.org> <20120307.023046.27956263.iwasaki@jp.FreeBSD.org> <201203062005.15276.bschmidt@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
> > In RELENG_7, data frame is transmitted by iwi_tx_start() like this.
> > 
> >   ether_output
> >     ether_output_frame
> >       IFQ_HANDOFF/IFQ_HANDOFF_ADJ
> >         if_start
> >           iwi_start
> >             iwi_tx_start
> > 
> > After 8.0-RELEASE, device specific if_transmit() is called via net80211 layer.
> > 
> >   ether_output
> >     ether_output_frame
> >       if_transmit
> >         IFQ_HANDOFF/IFQ_HANDOFF_ADJ
> >           if_start
> >             ieee80211_start
> >               parent->if_transmit(ie. iwi_transmit())
> > 
> > There was not if_transmit method in iwi(4), so I add it.
> > On if_qflush(), CURRENT kernel complains that `transmit and qflush
> > must both either be set or both be NULL' from if.c.
> > I wrote iwi_qflush(), but actually never tested it...
> 
> Hmm, it still is the case for >= 8 afaik, there is a default
> if_transmit() which is used for all wireless drivers which seems to
> work pretty well. That's why I'm wondering, iwi(4) would be the first
> driver to have it's own if_transmit() function. I'm not aware of any
> technical reason for adding one, or did I miss something? If not I'd
> rather not have one added, for sake of consistency.

By your this comment, I noticed that my understanding on iwi_start()
call stack > 8.0 was wrong a bit, correct one is like this;

  ether_output
    ether_output_frame
      if_transmit
        IFQ_HANDOFF/IFQ_HANDOFF_ADJ
          if_start
            ieee80211_start
              parent->if_transmit(ie. if_transmit())
                IFQ_HANDOFF/IFQ_HANDOFF_ADJ
                  if_start
                    iwi_start
                      iwi_start_locked
                        iwi_tx_start

So iwi_transmit and iwi_qflush would not be necessary.

Today's version of patches at:
http://people.freebsd.org/~iwasaki/iwi/iwi-20120307.diff

This would be the final version I hope.

Thanks!



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120308.003844.08316346.iwasaki>