History log of /freebsd-11-stable/sys/dev/wpi/if_wpi.c
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
# 302408 07-Jul-2016 gjb

Copy head@r302406 to stable/11 as part of the 11.0-RELEASE cycle.
Prune svn:mergeinfo from the new branch, as nothing has been merged
here.

Additional commits post-branch will follow.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation


/freebsd-11-stable/MAINTAINERS
/freebsd-11-stable/cddl
/freebsd-11-stable/cddl/contrib/opensolaris
/freebsd-11-stable/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/print
/freebsd-11-stable/cddl/contrib/opensolaris/cmd/zfs
/freebsd-11-stable/cddl/contrib/opensolaris/lib/libzfs
/freebsd-11-stable/contrib/amd
/freebsd-11-stable/contrib/apr
/freebsd-11-stable/contrib/apr-util
/freebsd-11-stable/contrib/atf
/freebsd-11-stable/contrib/binutils
/freebsd-11-stable/contrib/bmake
/freebsd-11-stable/contrib/byacc
/freebsd-11-stable/contrib/bzip2
/freebsd-11-stable/contrib/com_err
/freebsd-11-stable/contrib/compiler-rt
/freebsd-11-stable/contrib/dialog
/freebsd-11-stable/contrib/dma
/freebsd-11-stable/contrib/dtc
/freebsd-11-stable/contrib/ee
/freebsd-11-stable/contrib/elftoolchain
/freebsd-11-stable/contrib/elftoolchain/ar
/freebsd-11-stable/contrib/elftoolchain/brandelf
/freebsd-11-stable/contrib/elftoolchain/elfdump
/freebsd-11-stable/contrib/expat
/freebsd-11-stable/contrib/file
/freebsd-11-stable/contrib/gcc
/freebsd-11-stable/contrib/gcclibs/libgomp
/freebsd-11-stable/contrib/gdb
/freebsd-11-stable/contrib/gdtoa
/freebsd-11-stable/contrib/groff
/freebsd-11-stable/contrib/ipfilter
/freebsd-11-stable/contrib/ldns
/freebsd-11-stable/contrib/ldns-host
/freebsd-11-stable/contrib/less
/freebsd-11-stable/contrib/libarchive
/freebsd-11-stable/contrib/libarchive/cpio
/freebsd-11-stable/contrib/libarchive/libarchive
/freebsd-11-stable/contrib/libarchive/libarchive_fe
/freebsd-11-stable/contrib/libarchive/tar
/freebsd-11-stable/contrib/libc++
/freebsd-11-stable/contrib/libc-vis
/freebsd-11-stable/contrib/libcxxrt
/freebsd-11-stable/contrib/libexecinfo
/freebsd-11-stable/contrib/libpcap
/freebsd-11-stable/contrib/libstdc++
/freebsd-11-stable/contrib/libucl
/freebsd-11-stable/contrib/libxo
/freebsd-11-stable/contrib/llvm
/freebsd-11-stable/contrib/llvm/projects/libunwind
/freebsd-11-stable/contrib/llvm/tools/clang
/freebsd-11-stable/contrib/llvm/tools/lldb
/freebsd-11-stable/contrib/llvm/tools/llvm-dwarfdump
/freebsd-11-stable/contrib/llvm/tools/llvm-lto
/freebsd-11-stable/contrib/mdocml
/freebsd-11-stable/contrib/mtree
/freebsd-11-stable/contrib/ncurses
/freebsd-11-stable/contrib/netcat
/freebsd-11-stable/contrib/ntp
/freebsd-11-stable/contrib/nvi
/freebsd-11-stable/contrib/one-true-awk
/freebsd-11-stable/contrib/openbsm
/freebsd-11-stable/contrib/openpam
/freebsd-11-stable/contrib/openresolv
/freebsd-11-stable/contrib/pf
/freebsd-11-stable/contrib/sendmail
/freebsd-11-stable/contrib/serf
/freebsd-11-stable/contrib/sqlite3
/freebsd-11-stable/contrib/subversion
/freebsd-11-stable/contrib/tcpdump
/freebsd-11-stable/contrib/tcsh
/freebsd-11-stable/contrib/tnftp
/freebsd-11-stable/contrib/top
/freebsd-11-stable/contrib/top/install-sh
/freebsd-11-stable/contrib/tzcode/stdtime
/freebsd-11-stable/contrib/tzcode/zic
/freebsd-11-stable/contrib/tzdata
/freebsd-11-stable/contrib/unbound
/freebsd-11-stable/contrib/vis
/freebsd-11-stable/contrib/wpa
/freebsd-11-stable/contrib/xz
/freebsd-11-stable/crypto/heimdal
/freebsd-11-stable/crypto/openssh
/freebsd-11-stable/crypto/openssl
/freebsd-11-stable/gnu/lib
/freebsd-11-stable/gnu/usr.bin/binutils
/freebsd-11-stable/gnu/usr.bin/cc/cc_tools
/freebsd-11-stable/gnu/usr.bin/gdb
/freebsd-11-stable/lib/libc/locale/ascii.c
/freebsd-11-stable/sys/cddl/contrib/opensolaris
/freebsd-11-stable/sys/contrib/dev/acpica
/freebsd-11-stable/sys/contrib/ipfilter
/freebsd-11-stable/sys/contrib/libfdt
/freebsd-11-stable/sys/contrib/octeon-sdk
/freebsd-11-stable/sys/contrib/x86emu
/freebsd-11-stable/sys/contrib/xz-embedded
/freebsd-11-stable/usr.sbin/bhyve/atkbdc.h
/freebsd-11-stable/usr.sbin/bhyve/bhyvegc.c
/freebsd-11-stable/usr.sbin/bhyve/bhyvegc.h
/freebsd-11-stable/usr.sbin/bhyve/console.c
/freebsd-11-stable/usr.sbin/bhyve/console.h
/freebsd-11-stable/usr.sbin/bhyve/pci_fbuf.c
/freebsd-11-stable/usr.sbin/bhyve/pci_xhci.c
/freebsd-11-stable/usr.sbin/bhyve/pci_xhci.h
/freebsd-11-stable/usr.sbin/bhyve/ps2kbd.c
/freebsd-11-stable/usr.sbin/bhyve/ps2kbd.h
/freebsd-11-stable/usr.sbin/bhyve/ps2mouse.c
/freebsd-11-stable/usr.sbin/bhyve/ps2mouse.h
/freebsd-11-stable/usr.sbin/bhyve/rfb.c
/freebsd-11-stable/usr.sbin/bhyve/rfb.h
/freebsd-11-stable/usr.sbin/bhyve/sockstream.c
/freebsd-11-stable/usr.sbin/bhyve/sockstream.h
/freebsd-11-stable/usr.sbin/bhyve/usb_emul.c
/freebsd-11-stable/usr.sbin/bhyve/usb_emul.h
/freebsd-11-stable/usr.sbin/bhyve/usb_mouse.c
/freebsd-11-stable/usr.sbin/bhyve/vga.c
/freebsd-11-stable/usr.sbin/bhyve/vga.h
# 298848 30-Apr-2016 pfg

sys: Make use of our rounddown() macro when sys/param.h is available.

No functional change.


# 298822 29-Apr-2016 avos

wpi: convert to ieee80211_add_channel() (mostly noop).

Tested with Intel 3945BG, STA / HOSTAP modes.


# 298815 29-Apr-2016 avos

wpi: remove unused variable.


# 297524 03-Apr-2016 avos

wpi, iwn: fix check in find_eeprom_channel()

Return correct eeprom_chan structure pointer for 7, 8, 11 and 12 5Ghz
channels.


# 297173 21-Mar-2016 avos

wpi: remove internal taskqueue

- Replace sc_reinittask() by ieee80211_restart_all() (mostly the same).
- Revert r282377 (seems to be unneeded now).

Tested with Intel 3945BG, STA mode.

Differential Revision: https://reviews.freebsd.org/D5056


# 293716 11-Jan-2016 avos

wpi, iwn: implement ic_getradiocaps method

This will allow to restore channel list after switching interface
to more restrictive regdomain.

Tested with Intel 3945BG (wpi) only.

Approved by: adrian (mentor)
Differential Revision: https://reviews.freebsd.org/D4863


# 292176 13-Dec-2015 avos

wpi, rum and urtwn: update copyright headers

Approved by: adrian (mentor)
Differential Revision: https://reviews.freebsd.org/D4489


# 291493 30-Nov-2015 avos

wpi: ignore ic_update_promisc() call when device is not running

This change will fix kernel panic with uninitialized (zeroed)
RXON structure.

Tested with Intel 3945BG, IBSS mode.

Approved by: adrian (mentor)
Differential Revision: https://reviews.freebsd.org/D4304


# 290950 16-Nov-2015 avos

wpi(4): import r289674

Switch PCI register reads from using magic numbers to using the names
defined in pcireg.h

Approved by: adrian (mentor)
Differential Revision: https://reviews.freebsd.org/D4185


# 289679 21-Oct-2015 kevlo

Remove BUS_DMA_NOWAIT from bus_dma_tag_create() invocations as it's
no valid flag there.


# 289165 12-Oct-2015 adrian

net80211: move ieee80211_free_node() call on error from ic_raw_xmit() to ieee80211_raw_output().

This doesn't free the mbuf upon error; the driver ic_raw_xmit method is still
doing that.

Submitted by: <s3erios@gmail.com>
Differential Revision: https://reviews.freebsd.org/D3774


# 289163 12-Oct-2015 adrian

wpi(4): add support for TX fragmentation.

Tested:

* Tested with Intel 3945BG, HOSTAP and STA modes

Differential Revision: https://reviews.freebsd.org/D3770


# 289129 11-Oct-2015 adrian

wpi(4): do not count failures twice for ic_raw_xmit().

Tested:

* Tested with Intel 3945BG, STA mode

Submitted by: <s3erios@gmail.com>
Differential Revision: https://reviews.freebsd.org/D3768


# 289128 11-Oct-2015 adrian

wpi(4): move error handling upper (wpi_tx_data()/wpi_cmd2() -> wpi_raw_xmit()/wpi_transmit()).

Tested:

* Tested with Intel 3945BG, STA mode

Submitted by: <s3erios@gmail.com>
Differential Revision: https://reviews.freebsd.org/D3767


# 289127 11-Oct-2015 adrian

wpi(4): fix possible race between TX/RX threads.

Tested:

* Tested with Intel 3945BG, STA mode

Submitted by: <s3erios@gmail.com>
Differential Revision: https://reviews.freebsd.org/D3766


# 289126 11-Oct-2015 adrian

wpi(4): do not allocate space for unused rings.

Tested:

* Tested with Intel 3945BG, STA mode

Submitted by: <s3erios@gmail.com>
Differential Revision: https://reviews.freebsd.org/D3765


# 289125 10-Oct-2015 adrian

wpi(4): do not override iv_recv_mgmt() in non-adhoc modes.

Tested:

* Tested with Intel 3945BG, IBSS and STA modes

Submitted by: <s3erios@gmail.com>
Differential Revision: https://reviews.freebsd.org/D3764


# 289124 10-Oct-2015 adrian

wpi(4): use more correct types.

This change fixes some amount of -Wsign-conversion and -Wconversion warnings
and sets correct sizes for some variables (as a result, some loop counters
were touched too).

Submitted by: <s3erios@gmail.com>
Differential Revision: https://reviews.freebsd.org/D3763


# 289012 08-Oct-2015 adrian

wpi(4): check size before transmitting frames

In addition to https://bz-attachments.freebsd.org/attachment.cgi?id=156112;
fixes https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=144987.

Tested:

* Tested with Intel 3945BG, STA mode

Submitted by: <s3erios@gmail.com>
Differential Revision: https://reviews.freebsd.org/D3762


# 289011 08-Oct-2015 adrian

wpi(4): fix some byteorder conversions

Submitted by: <s3erios@gmail.com>
Differential Revision: https://reviews.freebsd.org/D3761


# 289010 08-Oct-2015 adrian

wpi(4): fix 'maybe uninitialized' warnings

Submitted by: <s3erios@gmail.com>
Differential Revision: https://reviews.freebsd.org/D3760


# 289008 08-Oct-2015 adrian

wpi(4): add some branch predictions.

Submitted by: <s3erios@gmail.com>
Differential Revision: https://reviews.freebsd.org/D3759


# 289006 08-Oct-2015 adrian

wpi(4): drop unnecessary locking in wpi_set_pslevel().

Submitted by: <s3erios@gmail.com>
Differential Revision: https://reviews.freebsd.org/D3758


# 288999 07-Oct-2015 adrian

wpi(4): remove software queues

Use direct dispatch into the destination hardware ring instead of using
a staging queue.

Submitted by: <s3erios@gmail.com>
Differential Revision: https://reviews.freebsd.org/D3757


# 288636 03-Oct-2015 adrian

net80211: drop ieee80211_beacon_offsets parameter from ieee80211_beacon_alloc() and ieee80211_beacon_update()

Submitted by: <s3erios@gmail.com>
Differential Revision: https://reviews.freebsd.org/D3659


# 288635 03-Oct-2015 adrian

net80211: drop redundant 3rd parameter from iv_key_set().

The MAC can be fetched from the key struct.

I added the ndis updates to make it compile.

Submitted by: <s3erios@gmail.com>
Differential Revision: https://reviews.freebsd.org/D3657


# 288263 26-Sep-2015 adrian

Don't duplicate checks; net80211 now does this for us.

Submitted by: s3erios@gmail.com


# 288095 22-Sep-2015 adrian

net80211: include one copy of struct ieee80211_beacon_offsets into ieee80211vap

Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>
Differential Revision: https://reviews.freebsd.org/D3658


# 287197 27-Aug-2015 glebius

Replay r286410. Change KPI of how device drivers that provide wireless
connectivity interact with the net80211 stack.

Historical background: originally wireless devices created an interface,
just like Ethernet devices do. Name of an interface matched the name of
the driver that created. Later, wlan(4) layer was introduced, and the
wlanX interfaces become the actual interface, leaving original ones as
"a parent interface" of wlanX. Kernelwise, the KPI between net80211 layer
and a driver became a mix of methods that pass a pointer to struct ifnet
as identifier and methods that pass pointer to struct ieee80211com. From
user point of view, the parent interface just hangs on in the ifconfig
list, and user can't do anything useful with it.

Now, the struct ifnet goes away. The struct ieee80211com is the only
KPI between a device driver and net80211. Details:

- The struct ieee80211com is embedded into drivers softc.
- Packets are sent via new ic_transmit method, which is very much like
the previous if_transmit.
- Bringing parent up/down is done via new ic_parent method, which notifies
driver about any changes: number of wlan(4) interfaces, number of them
in promisc or allmulti state.
- Device specific ioctls (if any) are received on new ic_ioctl method.
- Packets/errors accounting are done by the stack. In certain cases, when
driver experiences errors and can not attribute them to any specific
interface, driver updates ic_oerrors or ic_ierrors counters.

Details on interface configuration with new world order:
- A sequence of commands needed to bring up wireless DOESN"T change.
- /etc/rc.conf parameters DON'T change.
- List of devices that can be used to create wlan(4) interfaces is
now provided by net.wlan.devices sysctl.

Most drivers in this change were converted by me, except of wpi(4),
that was done by Andriy Voskoboinyk. Big thanks to Kevin Lo for testing
changes to at least 8 drivers. Thanks to pluknet@, Oliver Hartmann,
Olivier Cochard, gjb@, mmoll@, op@ and lev@, who also participated in
testing.

Reviewed by: adrian
Sponsored by: Netflix
Sponsored by: Nginx, Inc.


# 286865 17-Aug-2015 adrian

Convert more ifp->if_softc -> ic->ic_softc.

These should be a big no-op.

Tested:

* make universe


# 286437 07-Aug-2015 adrian

Revert the wifi ifnet changes until things are more baked and tested.

* 286410
* 286413
* 286416

The initial commit broke a variety of debug and features that aren't
in the GENERIC kernels but are enabled in other platforms.


# 286410 07-Aug-2015 glebius

Change KPI of how device drivers that provide wireless connectivity interact
with the net80211 stack.

Historical background: originally wireless devices created an interface,
just like Ethernet devices do. Name of an interface matched the name of
the driver that created. Later, wlan(4) layer was introduced, and the
wlanX interfaces become the actual interface, leaving original ones as
"a parent interface" of wlanX. Kernelwise, the KPI between net80211 layer
and a driver became a mix of methods that pass a pointer to struct ifnet
as identifier and methods that pass pointer to struct ieee80211com. From
user point of view, the parent interface just hangs on in the ifconfig
list, and user can't do anything useful with it.

Now, the struct ifnet goes away. The struct ieee80211com is the only
KPI between a device driver and net80211. Details:

- The struct ieee80211com is embedded into drivers softc.
- Packets are sent via new ic_transmit method, which is very much like
the previous if_transmit.
- Bringing parent up/down is done via new ic_parent method, which notifies
driver about any changes: number of wlan(4) interfaces, number of them
in promisc or allmulti state.
- Device specific ioctls (if any) are received on new ic_ioctl method.
- Packets/errors accounting are done by the stack. In certain cases, when
driver experiences errors and can not attribute them to any specific
interface, driver updates ic_oerrors or ic_ierrors counters.

Details on interface configuration with new world order:
- A sequence of commands needed to bring up wireless DOESN"T change.
- /etc/rc.conf parameters DON'T change.
- List of devices that can be used to create wlan(4) interfaces is
now provided by net.wlan.devices sysctl.

Most drivers in this change were converted by me, except of wpi(4),
that was done by Andriy Voskoboinyk. Big thanks to Kevin Lo for testing
changes to at least 8 drivers. Thanks to Olivier Cochard, gjb@, mmoll@,
op@ and lev@, who also participated in testing. Details here:

https://wiki.freebsd.org/projects/ifnet/net80211

Still, drivers: ndis, wtap, mwl, ipw, bwn, wi, upgt, uath were not
tested. Changes to mwl, ipw, bwn, wi, upgt are trivial and chances
of problems are low. The wtap wasn't compilable even before this change.
But the ndis driver is complex, and it is likely to be broken with this
commit. Help with testing and debugging it is appreciated.

Differential Revision: D2655, D2740
Sponsored by: Nginx, Inc.
Sponsored by: Netflix


# 283540 25-May-2015 glebius

Change three methods in struct ieee80211com, namely ic_updateslot,
ic_update_mcast and ic_update_promisc, to pass pointer to the ieee80211com,
not to the ifnet.

Sponsored by: Netflix
Sponsored by: Nginx, Inc.


# 283537 25-May-2015 glebius

Set ic_softc in all 802.11 drivers. Not required right now, but will be
used quite soon.

Sponsored by: Netflix
Sponsored by: Nginx, Inc.


# 283536 25-May-2015 adrian

Update wpi(4) to use the new mgmt RX API.


# 283527 25-May-2015 glebius

Make net80211 drivers supply their device name to the net80211 layer, so
that the latter doesn't need to go through struct ifnet to get their name.

Sponsored by: Netflix
Sponsored by: Nginx, Inc.


# 282402 03-May-2015 adrian

[iwn] Do not filter control frames in monitor mode.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282401 03-May-2015 adrian

Handle properly IBSS merges (works with patch from bug 199632).

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282400 03-May-2015 adrian

Fix various powersave races + optimize tx/rx pointer update when powersave is off.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282399 03-May-2015 adrian

[iwn?] Use correct sequence numbers with non-QoS STAs.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282398 03-May-2015 adrian

Fix warning about comparison of integers of different signs.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282397 03-May-2015 adrian

[iwn?] Fix memory leak in wpi_reset_tx_ring().

PR: kern/197143
Differential Revision: Andriy Voskoboinyk <s3erios@gmail.com>


# 282396 03-May-2015 adrian

Use nitems() for counting elements in arrays.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282395 03-May-2015 adrian

Do not include WPI_START_SCAN event processing into non-debug builds.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282394 03-May-2015 adrian

Fix sequence number generation for beacon frames.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282393 03-May-2015 adrian

Add debug output for WPI_BEACON_SENT event.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282392 03-May-2015 adrian

Try to fix passive scanning hang on beacon miss.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282391 03-May-2015 adrian

Add comment about AUTH -> AUTH state transition + fix some style issues.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282390 03-May-2015 adrian

Display more information for beacon miss debugging.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282389 03-May-2015 adrian

Limit minimum threshold of missed beacons.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282388 03-May-2015 adrian

Improve beacon miss detection.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282387 03-May-2015 adrian

Create another debug category for WPI_BEACON_MISSED notification.

Differential Revision: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282386 03-May-2015 adrian

Unbreak scanning after RUN -> SCAN state transition.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282385 03-May-2015 adrian

Check channels which are passed in IBSS mode.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282384 03-May-2015 adrian

Do not disable beacon notifications (unbreaks scanning on passive channels).

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282383 03-May-2015 adrian

Fix pause scan time calculation (the remainder must be less than beacon interval).

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282382 03-May-2015 adrian

Fix active/passive dwell calculation.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282381 03-May-2015 adrian

Turn off led when leaving RUN state.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282378 03-May-2015 adrian

Add TX status codes (obtained from iwlegacy)

PR: kern/197143
Differential Revision: Andriy Voskoboinyk <s3erios@gmail.com>
Obtained from: Linux drivers/net/wireless/iwlegacy


# 282377 03-May-2015 adrian

Move radiooff_task to the internal taskqueue.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282376 03-May-2015 adrian

Use another workaround for scanning.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282375 03-May-2015 adrian

Add wpi_check_bss_filter()

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282373 03-May-2015 adrian

Remove workaround for bug 199676.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282371 03-May-2015 adrian

Add a few local variables to improve readability.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282370 03-May-2015 adrian

Remove this; it's currently a no-op.

History note: it's good to document what the driver expects like this even
if it's currently a no-op.

Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 282369 03-May-2015 adrian

Retry twice at the same rate.

Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 281288 09-Apr-2015 adrian

Do not access peripheral before clock stabilization.

Tested:

* Intel 3945ABG NIC, STA mode

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 281287 09-Apr-2015 adrian

Fix buffer overflow introduced in previous commits (unbreaks 802.11a capable NICs).

Tested:

* PCIe Intel 3945ABG NIC

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280127 15-Mar-2015 kib

Fix build with clang 3.6, silence -Wcast-qual warning.

Sponsored by: The FreeBSD Foundation
Acked by: adrian


# 280120 15-Mar-2015 adrian

Add a new taskqueue (device specific, not net80211 ic->tq); use it for
device restart.

(Committers note - once scan overhaul and a few other things have been
fixed in net80211 to not block things in the taskqueue, this can disappear
and the device specific taskqueues in other drivers can also go away.)

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280119 15-Mar-2015 adrian

Workaround delays caused by vmem_check().

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280118 15-Mar-2015 adrian

Fix scan timeouts with powersave enabled.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280116 15-Mar-2015 adrian

Don't unlock mutex in interrupt thread (except for wpi_rx_done() - for now) -
fixes various races between wpi_notif_intr() and wpi_stop_locked().

(attachment 154381)

Committers note: yes, unlock/if_input/lock has to go away, but that'll
have to be done later.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280114 15-Mar-2015 adrian

Use correct types

(attachment 154379)

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280113 15-Mar-2015 adrian

Add another lock for the TX path.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280112 15-Mar-2015 adrian

Add an extra mutex for qfullmsk / ring->queued variables.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280111 15-Mar-2015 adrian

Regroup ring state checks in wpi_tx_done().

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280110 15-Mar-2015 adrian

Don't use sc->qfullmsk in wpi_start().

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280109 15-Mar-2015 adrian

turn sc_tx_timeout into its own callout, rather than a global watchdog
timer.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280108 15-Mar-2015 adrian

Add mutex for RXON structure; convert some callouts/lock use to use
RXON rather than the global WPI lock.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280107 15-Mar-2015 adrian

Use WPI_FILTER_BSS for checking current state.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280106 15-Mar-2015 adrian

Split TX and scan timeouts; use a callout now for the scan timeout.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280105 15-Mar-2015 adrian

Add experimental HOSTAP support.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280104 15-Mar-2015 adrian

Merge wpi_start() and wpi_start_locked().

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280103 15-Mar-2015 adrian

Minor optimisation in wpi_limit_dwell()

PR: kenr/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280102 15-Mar-2015 adrian

Rearrange checks in wpi_send_rxon().

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280101 15-Mar-2015 adrian

Fix some printfs(); add some debugging.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280100 15-Mar-2015 adrian

Add more KASSERTs.

(Committer note: these checks will have to be re-established in a future
commit as /well/ as having the KASSERTs.)

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280099 15-Mar-2015 adrian

Disable powersave in IBSS mode (packet loss > 90%.)

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280098 15-Mar-2015 adrian

Do some cleanup before device startup.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280097 15-Mar-2015 adrian

Acquire ifq lock when checking / modifying IFF_DRV_OACTIVE flag.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280096 15-Mar-2015 adrian

Merge wpi_init() and wpi_init_locked().

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280095 15-Mar-2015 adrian

Refactor wpi_ioctl().

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280094 15-Mar-2015 adrian

Add WPI_DEBUG_NODE + some debugging.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280093 15-Mar-2015 adrian

* Add new debug category
* Refactor out / restructure / extend debugging information

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280092 15-Mar-2015 adrian

Remove unrelated comment.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280091 15-Mar-2015 adrian

Remove unnecessary assignment.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280089 15-Mar-2015 adrian

Remove unnecessary debug output.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280088 15-Mar-2015 adrian

Add support for AES-CCMP group keys.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280087 15-Mar-2015 adrian

Encrypt frame if IEEE80211_BPF_CRYPTO is set.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280086 15-Mar-2015 adrian

Use separate mutex for wv_bcbuf and wv_boff structures.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280085 15-Mar-2015 adrian

Add prefixes to field names.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280084 15-Mar-2015 adrian

Use ieee80211_beacon_update() for dynamic beacon contents.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280083 15-Mar-2015 adrian

Move beacon initialisation to wpi_init_beacon()

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280082 15-Mar-2015 adrian

Use a static buffer in wpi_cmd - rather than alloc/free'ing the
beacon buffer frequently.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280081 15-Mar-2015 adrian

Use WPI_RSSI_OFFSET instead of stat->noise (always 0 for me)

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280080 15-Mar-2015 adrian

Fix debug category in wpi_read_eeprom_band()

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280079 15-Mar-2015 adrian

Move IBSS assocation processing to wpi_newassoc().

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280078 15-Mar-2015 adrian

wpi_tx_done() shouldn't wait for wpi_start().

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280077 15-Mar-2015 adrian

Add node table lock - addresses LOR in wpi_node_free().

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280076 15-Mar-2015 adrian

Optimise sc->rev processing.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280075 15-Mar-2015 adrian

Use ring->queued for WPI_CMD_TX_DATA only.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280074 15-Mar-2015 adrian

Move some code under WPI_LOCK().

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280073 15-Mar-2015 adrian

Remove unnecessary locking.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280072 15-Mar-2015 adrian

Eliminate the WPI_FLAG_BUSY flag.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280071 15-Mar-2015 adrian

Add separate lock for TX queues.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280070 15-Mar-2015 adrian

Wrap node addition in STA mode into wpi_add_sta_node().

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280069 15-Mar-2015 adrian

Replace kernel unit allocator with local set of functions.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280068 15-Mar-2015 adrian

Move key processing in wpi_tx_data.

(This is in preparation for further work to support hardware encryption.)

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280067 15-Mar-2015 adrian

Remove some un-needed variables.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280066 15-Mar-2015 adrian

Reformatting - break lines ~ 80 characters.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280065 15-Mar-2015 adrian

wpi_intr(): remove duplicate code

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280064 15-Mar-2015 adrian

Replace few numbers with named constants.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280063 15-Mar-2015 adrian

Wrap cast to (struct wpi_node *) into WPI_NODE macros

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280062 15-Mar-2015 adrian

msleep() -> mtx_sleep()

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280061 15-Mar-2015 adrian

Fix warning: Value stored to 'supportsa' is never read.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280060 15-Mar-2015 adrian

Fix error handling in wpi_scan().

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280059 15-Mar-2015 adrian

Fix indentation - non-functional change.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280058 15-Mar-2015 adrian

Check some variables only on active TX rings

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280057 15-Mar-2015 adrian

Use correct pointer for wpi_softc

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280056 15-Mar-2015 adrian

Fix panics in wpi_tx_done() when powersave is enabled

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280055 15-Mar-2015 adrian

Fix races between wpi_rx_done() and wpi_stop()

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280054 15-Mar-2015 adrian

Divide ackfailcnt by 2 (firmware decreases rate after two unsuccessful retries)

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280053 15-Mar-2015 adrian

Run callout_reset() with mutex held.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280052 15-Mar-2015 adrian

Add missed ieee80211_draintask()

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280051 15-Mar-2015 adrian

Fix a typo (IEEE80211_S_SCAN -> IEEE80211_F_SCAN)

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 280050 15-Mar-2015 adrian

Fix mbuf mapping errors in wpi_cmd2() + add check for nsegs

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 279763 07-Mar-2015 adrian

Undo some issues from the previous big patch - there's no padding on RX,
so remove DATAPAD and re-do the padding in the TX path manually.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 279762 07-Mar-2015 adrian

Use the correct mac addresses when initialising things.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3rios@gmail.com>


# 278764 14-Feb-2015 adrian

More fixes to wpi(4), again not by me! Woo!

- Use IEEE80211_F_DATAPAD;
- (c->ic_flags & IEEE80211_CHAN_PASSIVE) -> IEEE80211_IS_CHAN_PASSIVE(c);
- Convert ackfailcnt to int (there is dereference to *(int *) in ieee80211_ratectl_tx_complete());
- Fix & move cleanup to the end in wpi_rx_done();
- Add missed lock in wpi_update_beacon();
- Try to fix powersave.

PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 278366 07-Feb-2015 adrian

Big wpi(4) overhaul! Not by me!

This is a sync against iwn(4) and openbsd.

- Add power management support;
- Add background scanning support;
- Fix few LORs;
- Handle rfkill switch state changes properly;
- Fix recovering after firmware failure;
- Add more error checking;
- Cleanup & disable by default debug output;
- Update macroses names;
- Other various fixes;
- Add IBSS support:
- don't set data_ntries field for management frames;
- Add AHDEMO support:
- fix padding;
- Sync eeprom functions;
- Use CMD_RXON_ASSOC where possible;
- Enable HW CCMP encryption/decryption for pairwise keys;
- Fix filter flags for CMD_RXON.

Tested (by submitter) - iwn 3945 NIC. I have one somewhere; I'll
validate this later on and revert it if it's a problem.

Thanks!

PR: 197143
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 275966 20-Dec-2014 adrian

Remove some hard-coded IE assembly over to use net80211 methods.

PR: kern/196069
Submitted by: Andriy Voskoboinyk <s3erios@gmail.com>


# 271849 19-Sep-2014 glebius

Mechanically convert to if_inc_counter().


# 267992 28-Jun-2014 hselasky

Pull in r267961 and r267973 again. Fix for issues reported will follow.


# 267985 27-Jun-2014 gjb

Revert r267961, r267973:

These changes prevent sysctl(8) from returning proper output,
such as:

1) no output from sysctl(8)
2) erroneously returning ENOMEM with tools like truss(1)
or uname(1)
truss: can not get etype: Cannot allocate memory


# 267961 27-Jun-2014 hselasky

Extend the meaning of the CTLFLAG_TUN flag to automatically check if
there is an environment variable which shall initialize the SYSCTL
during early boot. This works for all SYSCTL types both statically and
dynamically created ones, except for the SYSCTL NODE type and SYSCTLs
which belong to VNETs. A new flag, CTLFLAG_NOFETCH, has been added to
be used in the case a tunable sysctl has a custom initialisation
function allowing the sysctl to still be marked as a tunable. The
kernel SYSCTL API is mostly the same, with a few exceptions for some
special operations like iterating childrens of a static/extern SYSCTL
node. This operation should probably be made into a factored out
common macro, hence some device drivers use this. The reason for
changing the SYSCTL API was the need for a SYSCTL parent OID pointer
and not only the SYSCTL parent OID list pointer in order to quickly
generate the sysctl path. The motivation behind this patch is to avoid
parameter loading cludges inside the OFED driver subsystem. Instead of
adding special code to the OFED driver subsystem to post-load tunables
into dynamically created sysctls, we generalize this in the kernel.

Other changes:
- Corrected a possibly incorrect sysctl name from "hw.cbb.intr_mask"
to "hw.pcic.intr_mask".
- Removed redundant TUNABLE statements throughout the kernel.
- Some minor code rewrites in connection to removing not needed
TUNABLE statements.
- Added a missing SYSCTL_DECL().
- Wrapped two very long lines.
- Avoid malloc()/free() inside sysctl string handling, in case it is
called to initialize a sysctl from a tunable, hence malloc()/free() is
not ready when sysctls from the sysctl dataset are registered.
- Bumped FreeBSD version to indicate SYSCTL API change.

MFC after: 2 weeks
Sponsored by: Mellanox Technologies


# 267580 17-Jun-2014 jhb

Fix teardown of static DMA allocations in various NIC drivers:
- Add missing calls to bus_dmamap_unload() in et(4).
- Check the bus address against 0 to decide when to call
bus_dmamap_unload() instead of comparing the bus_dma map against NULL.
- Check the virtual address against NULL to decide when to call
bus_dmamem_free() instead of comparing the bus_dma map against NULL.
- Don't clear bus_dma map pointers to NULL for static allocations.
Instead, treat the value as completely opaque.
- Pass the correct virtual address to bus_dmamem_free() in wpi(4) instead
of trying to free a pointer to the virtual address.

Reviewed by: yongari


# 260444 08-Jan-2014 kevlo

Rename definition of IEEE80211_FC1_WEP to IEEE80211_FC1_PROTECTED.

The origin of WEP comes from IEEE Std 802.11-1997 where it defines
whether the frame body of MAC frame has been encrypted using WEP
algorithm or not.
IEEE Std. 802.11-2007 changes WEP to Protected Frame, indicates
whether the frame is protected by a cryptographic encapsulation
algorithm.

Reviewed by: adrian, rpaulo


# 260064 29-Dec-2013 marius

- Probe with BUS_PROBE_DEFAULT instead of 0.
- Nuke code setting PCI_POWERSTATE_D0; pci(4) already does that for type 0
devices.
- There's no need to keep track of resource IDs.
- Quiesce the interrupt before actually detaching.
- Use DEVMETHOD_END.
- Use NULL instead of 0 for pointers.

MFC after: 1 week


# 257176 26-Oct-2013 glebius

The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare
to this event, adding if_var.h to files that do need it. Also, include
all includes that now are included due to implicit pollution via if_var.h

Sponsored by: Netflix
Sponsored by: Nginx, Inc.


# 243857 04-Dec-2012 glebius

Mechanically substitute flags from historic mbuf allocator with
malloc(9) flags in sys/dev.


# 236381 01-Jun-2012 adrian

Add a missing #include, required for IEEE80211_DEBUG.


# 233387 23-Mar-2012 bschmidt

Use suspend/resume methods provided by net80211. This ensures that the
appropriate state handling takes place, not doing so results in the
device doing nothing until manual intervention.

Reviewed by: iwasaki
Tested by: iwasaki (iwi)
MFC after: 4 weeks


# 228621 17-Dec-2011 bschmidt

Fix some net80211 enum nits:
- ic_vap_create() uses an ieee80211_opmode argument
- ieee80211_rate2media() takes an ieee80211_phymode argument
- ieee80211_plcp2rate() takes an ieee80211_phytype argument
- cast to enum ieee80211_protmode and ieee80211_roamingmode to silence
compiler warnings

Submitted by: arundel@


# 222543 31-May-2011 bschmidt

Add module version to iwi/ipw/wpi and iwn.

The version is used to check if a module is already preset, not setting
it results in:

can't re-use a leaf (ipw)!
module_register: module pci/ipw already exists!
Module pci/ipw failed to register: 17

while trying to load the module due to an entry in loader.conf. With this
commit we get the expected:

module ipw already present!

Reported by: Dru Lavigne, bz
Tested by: bz
MFC after: 1 week


# 221299 01-May-2011 bschmidt

No need for htole32(), which is an uint8_t.


# 218909 21-Feb-2011 brucec

Fix typos - remove duplicate "the".

PR: bin/154928
Submitted by: Eitan Adler <lists at eitanadler.com>
MFC after: 3 days


# 217511 17-Jan-2011 bschmidt

Pull ieee80211_ratectl_node_init() calls from drivers into net80211.
This fixes hostap mode for at least ral(4) and run(4), because there is
no sufficient call into drivers which could be used initialize the node
related ratectl variables.

MFC after: 3 days


# 216824 30-Dec-2010 bschmidt

The RX path is missing a few bus_dmamap_*() calls, this results in
modification of memory which was already free'd and eventually in:
wpi0: could not map mbuf (error 12)
wpi0: wpi_rx_intr: bus_dmamap_load failed, error 12
and an usuable device.

PR: kern/144898
MFC after: 3 days


# 216557 19-Dec-2010 bschmidt

Fix panic trying to use monitor mode. The iwn_cmd() calls issued by
iwn_config() want to msleep() on the mutex.

PR: kern/138427
Submitted by: Henry Hu <henry.hu.sh at gmail.com>
MFC after: 3 days


# 216523 18-Dec-2010 bschmidt

Add 2 missing bus_dmamap_sync() calls. Those fix random 'scan timeout',
'could not set power mode', 'device config failed' and other errors due
reading invalid memory.

Obtained from: OpenBSD
MFC after: 3 days


# 216522 18-Dec-2010 bschmidt

Fix association on 5GHz channels. The device is initially configured using
a 2GHz channel with appropriate flags set to sc->config. Due to not zeroing
sc->config for auth/assoc those flags are still set while trying to connect
on a 5GHz channel.

MFC after: 3 days


# 216521 18-Dec-2010 bschmidt

Fix a panic while disabling the RF kill button, caller of the
wpi_rfkill_resume() function will take care of the lock.

PR: kern/144898
MFC after: 3 days


# 216238 06-Dec-2010 bschmidt

Fix scanning after loosing a connection. The firmware assumes that as long
as an association ID is set any scan is supposed to be a background scan.
This implies that the firmware will switch back to the associated channel
after a certain threshold, though, we are not notified about that. We
currently catch this case by a timer which will reset the firmware after
a 'scan timeout', though, upper layers are not notified about that and
will simply hang until manual intervention. Fix this by resetting the
firmware's knowledge about any association on RUN -> ASSOC and
!INIT -> SCAN transitions.

Tested by: Zhihao Yuan <lichray at gmail.com>
MFC after: 1 week


# 214894 06-Nov-2010 bschmidt

Instead of using the AMRR ratectl algo as default for drivers which have
the IEEE80211_C_RATECTL flag set, default to NONE for all drivers. Only if
a driver calls ieee80211_ratectl_init() check if the NONE algo is still
selected and try to use AMRR in that case. Drivers are still free to use
any other algo by calling ieee80211_ratectl_set() prior to the
ieee80211_ratectl_init() call.

After this change it is now safe to assume that a ratectl algo is always
available and selected, which renders the IEEE80211_C_RATECTL flag pretty
much useless. Therefore revert r211314 and 211546.

Reviewed by: rpaulo
MFC after: 2 weeks


# 211314 14-Aug-2010 bschmidt

Introduce IEEE80211_C_RATECTL, drivers which use the ratectl framework
should set this capability.

MFC after: 2 weeks


# 207554 03-May-2010 sobomax

Add new tunable 'net.link.ifqmaxlen' to set default send interface
queue length. The default value for this parameter is 50, which is
quite low for many of today's uses and the only way to modify this
parameter right now is to edit if_var.h file. Also add read-only
sysctl with the same name, so that it's possible to retrieve the
current value.

MFC after: 1 month


# 206416 09-Apr-2010 rpaulo

Fix recent breakage: wpi_newassoc() wasn't supposed to be removed and
it needs to call ieee80211_ratectl_node_init().

Submitted by: bschmidt
MFC after: 1 month


# 206358 07-Apr-2010 rpaulo

net80211 rate control framework (net80211 ratectl).

This framework allows drivers to abstract the rate control algorithm and
just feed the framework with the usable parameters. The rate control
framework will now deal with passing the parameters to the selected
algorithm. Right now we have AMRR (the default) and RSSADAPT but there's
no way to select one with ifconfig, yet.
The objective is to have more rate control algorithms in the net80211
stack so all drivers[0] can use it. Ideally, we'll have the well-known
sample rate control algorithm in the net80211 at some point so all
drivers can use it (not just ath).

[0] all drivers that do rate control in software, that is.

Reviewed by: bschmidt, thompsa, weyongo
MFC after: 1 months


# 200530 14-Dec-2009 gavin

Don't panic on failure to attach if we fail before or during the
if_alloc() of ifp. This fixes the panic reported in the PR, but
not the attach failure.

PR: kern/139079
Tested by: Steven Noonan <steven uplinklabs.net>
Reviewed by: thompsa
Approved by: ed (mentor)
MFC after: 2 weeks`


# 199037 08-Nov-2009 dougb

Properly turn off debugging

LART applied (gently) by: sam


# 199018 07-Nov-2009 dougb

Turn off WPI_DEBUG by default as the driver seems sufficiently stable
at this point.

Reviewed by: benjsc, thompsa


# 195562 10-Jul-2009 rpaulo

For ic_opmode switch cases, provide a default label with a printf saying
this opmode is not supported.

Approved by: re (kib)


# 192468 20-May-2009 sam

Overhaul monitor mode handling:
o replace DLT_IEEE802_11 support in net80211 with DLT_IEEE802_11_RADIO
and remove explicit bpf support from wireless drivers; drivers now
use ieee80211_radiotap_attach to setup shared data structures that
hold the radiotap header for each packet tx/rx
o remove rx timestamp from the rx path; it was used only by the tdma support
for debugging and was mostly useless due to it being 32-bits and mostly
unavailable
o track DLT_IEEE80211_RADIO bpf attachments and maintain per-vap and
per-com state when there are active taps
o track the number of monitor mode vaps
o use bpf tap and monitor mode vap state to decide when to collect radiotap
state and dispatch frames; drivers no longer explicitly directly check
bpf state or use bpf calls to tap frames
o handle radiotap state updates on channel change in net80211; drivers
should not do this (unless they bypass net80211 which is almost always
a mistake)
o update various drivers to be more consistent/correct in handling radiotap
o update ral to include TSF in radiotap'd frames
o add promisc mode callback to wi

Reviewed by: cbzimmer, rpaulo, thompsa


# 191956 10-May-2009 thompsa

Abort any scan on a fatal firmware. ic_scan_curchan is overridden to perform
the scan in firmware and this relies on the firmware to wake up the scan task
on completion.


# 191746 02-May-2009 thompsa

Create a taskqueue for each wireless interface which provides a serialised
sleepable context for net80211 driver callbacks. This removes the need for USB
and firmware based drivers to roll their own code to defer the chip programming
for state changes, scan requests, channel changes and mcast/promisc updates.
When a driver callback completes the hardware state is now guaranteed to have
been updated and is in sync with net80211 layer.

This nukes around 1300 lines of code from the wireless device drivers making
them more readable and less race prone.

The net80211 layer has been updated as follows
- all state/channel changes are serialised on the taskqueue.
- ieee80211_new_state() always queues and can now be called from any context
- scanning runs from a single taskq function and executes to completion. driver
callbacks are synchronous so the channel, phy mode and rx filters are
guaranteed to be set in hardware before probe request frames are
transmitted.

Help and contributions from Sam Leffler.

Reviewed by: sam


# 190579 30-Mar-2009 sam

Hoist 802.11 encapsulation up into net80211:
o call ieee80211_encap in ieee80211_start so frames passed down to drivers
are already encapsulated
o remove ieee80211_encap calls in drivers
o fixup wi so it recreates the 802.3 head it requires from the 802.11
header contents
o move fast-frame aggregation from ath to net80211 (conditional on
IEEE80211_SUPPORT_SUPERG):
- aggregation is now done in ieee80211_start; it is enabled when the
packets/sec exceeds ieee80211_ffppsmin (net.wlan.ffppsmin) and frames
are held on a staging queue according to ieee80211_ffagemax
(net.wlan.ffagemax) to wait for a frame to combine with
- drivers must call back to age/flush the staging queue (ath does this
on tx done, at swba, and on rx according to the state of the tx queues
and/or the contents of the staging queue)
- remove fast-frame-related data structures from ath
- add ieee80211_ff_node_init and ieee80211_ff_node_cleanup to handle
per-node fast-frames state (we reuse 11n tx ampdu state)
o change ieee80211_encap calling convention to include an explicit vap
so frames coming through a WDS vap are recognized w/o setting M_WDS

With these changes any device able to tx/rx 3Kbyte+ frames can use fast-frames.

Reviewed by: thompsa, rpaulo, avatar, imp, sephe


# 190526 29-Mar-2009 sam

Eliminate ic_myaddr so changing the mac address of a device works correctly:
o remove ic_myaddr from ieee80211com
o change ieee80211_ifattach to take the mac address of the physical device
and use that to setup the lladdr.
o replace all references to ic_myaddr in drivers by IF_LLADDR
o related cleanups (e.g. kill dead code)

PR: kern/133178
Reviewed by: thompsa, rpaulo


# 190462 27-Mar-2009 jmallett

Put the "%d retries" debug message in the transmit path behind WPI_DEBUG_TX
rather than behind a seemingly accidental constant likely left over from one of
the related drivers which uses log levels rather than per-facility debugging
flags. This should get rid of contextless messages on the console for people
who have not set (or cleared the default) debugging flags.


# 190458 27-Mar-2009 jmallett

o) Check that no overrun or CRC errors were encountered in receiving a
packet. Linux, OpenBSD and our iwn(4) all do this. It also results in
a huge performance improvement (and the rejection of a fair number of
apparently-bad packets on receive) on my hardware.
o) Like the wpi(4) driver in OpenBSD, and like our iwn(4), also drop runt
packets.
o) Don't bother doing IFQ_POLL and then IFQ_DRV_DEQUEUE, just do
IFQ_DRV_DEQUEUE outright. This is more similar to how OpenBSD and our
iwn(4) work.

Reviewed by: sam


# 188582 13-Feb-2009 sam

remove references to ic_stats

Spotted by: Lucius Windschuh <lwindschuh@googlemail.com>


# 184345 27-Oct-2008 sam

o use the new association callback to notify the driver when joining a bss
in sta and adhoc modes; this should've been done forever ago as most all
drivers use this hook to set per-station transmit parameters such as for
tx rate control
o adjust drivers to remove explicit calls to the driver newassoc method


# 182127 24-Aug-2008 benjsc

Correct detection of particular wpi cards which only support b/g
and fix the output to indicate b/g not a/g

Submitted by: ischram at telenet.be
Reviewed by: thompsa
Approved by: sam (co-mentor)
MFC after: 1 month


# 179957 23-Jun-2008 thompsa

- Fix compile if WPI_DEBUG is not defined
- Allow debug.wpi to be set from a tunable
- Put ring reset messages back under debug
- Add more debug output around channel init


# 179643 07-Jun-2008 sam

Change the calling convention for ic_node_alloc to deal with
some longstanding issues:
o pass the vap since it's now the "coin of the realm" and required
to do things like set initial tx parameters in private node
state for use prior to association
o pass the mac address as cards that maintain outboard station
tables require this to create an entry (e.g. in ibss mode)
o remove the node table reference, we only have one node table
and it's unlikely this will change so this is not needed to
find the com structure


# 179037 16-May-2008 thompsa

The beacon miss notification must run without locks held has it calls back into
wpi_raw_xmit();


# 178957 11-May-2008 sam

Minor cleanup of vap create work:
o add IEEE80211_C_STA capability to indicate sta mode is supported
(was previously assumed) and mark drivers as capable
o add ieee80211_opcap array to map an opmode to the equivalent capability bit
o move IEEE80211_C_OPMODE definition to where capabilities are defined so it's
clear it should be kept in sync (on future additions)
o check device capabilities in clone create before trying to create a vap;
this makes driver checks unneeded
o make error codes return on failed clone request unique
o temporarily add console printfs on clone request failures to aid in
debugging; these will move under DIAGNOSTIC or similar before release


# 178704 01-May-2008 thompsa

Unify all the wifi *_ioctl routines
- Limit grabbing the lock to SIOCSIFFLAGS.
- Move ieee80211_start_all() to SIOCSIFFLAGS.
- Remove SIOCSIFMEDIA as it is not useful.
- Limit ether_ioctl to only SIOCGIFADDR. SIOCSIFADDR and SIOCSIFMTU have no
affect as there is no input/output path in the vap parent. The vap code
will handle the reinit of the mac address changes.
- Split off ndis_ioctl_80211 as it was getting too different to wired devices.

This fixes a copyout while locked and a lock recursion.

Reviewed by: sam


# 178354 20-Apr-2008 sam

Multi-bss (aka vap) support for 802.11 devices.

Note this includes changes to all drivers and moves some device firmware
loading to use firmware(9) and a separate module (e.g. ral). Also there
no longer are separate wlan_scan* modules; this functionality is now
bundled into the wlan module.

Supported by: Hobnob and Marvell
Reviewed by: many
Obtained from: Atheros (some bits)


# 177119 12-Mar-2008 sam

fix inverted test that disabled ACK's on xmit


# 177043 10-Mar-2008 thompsa

Update wpi(4) with stability fixes
- remove second taskqueue
- busdma 16k alignment workaround
- use busdma instead of external mbuf storage on Rx
- locking fixes
- net80211 state change fixes
- improve scanning reliability
- improve radio hw switch interaction
- consolidate callouts

Parts obtained from: benjsc, sam
Tested by: many


# 175872 01-Feb-2008 phk

Give MEXTADD() another argument to make both void pointers to the
free function controlable, instead of passing the KVA of the buffer
storage as the first argument.

Fix all conventional users of the API to pass the KVA of the buffer
as the first argument, to make this a no-op commit.

Likely break the only non-convetional user of the API, after informing
the relevant committer.

Update the mbuf(9) manual page, which was already out of sync on
this point.

Bump __FreeBSD_version to 800016 as there is no way to tell how
many arguments a CPP macro needs any other way.

This paves the way for giving sendfile(9) a way to wait for the
passed storage to have been accessed before returning.

This does not affect the memory layout or size of mbufs.

Parental oversight by: sam and rwatson.

No MFC is anticipated.


# 175695 26-Jan-2008 sam

rx mbufs must have a pkthdr; use m_gethdr to populate the rx ring
(and while here correct the mbuf type)

Submitted by: Sam Banks <w0lfie@clear.net.nz>
MFC after: 1 week


# 175418 17-Jan-2008 jhb

- Retire npe_defrag(), gem_defrag(), msk_defrag(), nfe_defrag(), and
re_defrag() and use m_collapse() instead.
- Replace a reference to ath_defrag() in a comment in if_wpi.c with
m_collapse().


# 173977 27-Nov-2007 benjsc

Fix up a race condition with the callout_stop method in newstate.

The call should happen with the driver lock held. We don't hold the driver
lock in newstate as it's a separate thread where we can't sleep (and we only
call wpi_cmd in async mode).

Discovered By: Attillo's callout rework
Approved By: mlaier (comentor)


# 173976 27-Nov-2007 benjsc

Handle missed beacons correctly

Approved by: mlaier (comentor)


# 173585 13-Nov-2007 rink

Remove the IEEE80211_C_WEP capability flag - setting it makes net80211 expect
that the driver will handle WEP encryption. However, this does not seem to be
implemented by this driver (or maybe the chipset doesn't support it?)

Removing the flag makes my wpi card work using wpa_supplicant(8) on a
network with 802.1x security (without this change it authenticated fine, but
tcpdump only saw garbage packets)

Reviewed by: benjsc, imp (mentor)
Approved by: imp (mentor), sam


# 173489 08-Nov-2007 benjsc

Turn off debug output, its been confusing users.

Approved by: mlaier (comentor)


# 173362 05-Nov-2007 benjsc

Initial Import of wpi driver based on p4 changeset 128641.

This import includes:
o wpi Wireless driver for the Intel 3945 Wireless Lan Controller (802.11abg) (sys/dev/wpi)
o Intel firmware revision 2.14.4 & associated LICENSE (sys/dev/contrib/wpi, sys/contrib/dev/wpi/LICENSE)
o wpifw Firmware driver (sys/modules/wpifw)

Approved by: mlaier, sam (co-mentors)