Commit Graph

148 Commits

Author SHA1 Message Date
dyoung 609617af90 Enable RSSI-based rate-adaptation for wi(4). This enables wi(4)-based
APs to run at "full speed" where before they ran at just 1 or 2Mb/s.
The AP will adapt the data rate for each client based on packet
losses and the received signal strength.

I have also enabled rate adaptation for STA mode and for IBSS mode,
but the hardware gives us less control over the data rate in those
modes.
2003-12-07 05:44:49 +00:00
keihan b8702f530b netbsd.org -> NetBSD.org
This was the last commit of this kind to src/sys, which is now totally
"NetBSD.org clean".  Thanks for the patiance, and sorry for all the commits.
2003-12-04 13:57:30 +00:00
dyoung 18652e3785 From Steve Woodford (scw@): fix wi(4) and wiconfig(8) on big-endian
machines.
2003-11-16 09:41:01 +00:00
dyoung fe919dfeb0 Fix spelling/grammar in a comment. 2003-11-16 09:05:53 +00:00
dyoung 23d8f48692 Add data-link type DLT_IEEE802_11_RADIO to wi and atw. DLT_IEEE802_11_RADIO
lets you monitor radio stats like received signal strength, which
diversity antenna was used, channel/frequency, modulation, and data
rate.
2003-11-16 09:02:42 +00:00
dyoung 76db6bfa8c Use ieee80211_find_rxnode to attribute Rx packets to the write
ieee80211_node. This reduces code duplication.  It will help us
support passive scanning and rate adaptation.
2003-11-02 01:55:40 +00:00
dyoung 45f756f520 Mark the available channels using the ic_channels table instead of
setting bits in ic_chan_avail, which is the responsibility of
ieee80211_ifattach. I cannot believe the previous code worked.
2003-11-02 01:39:22 +00:00
dyoung f64ab7b2a4 Get the ieee80211_node for management packets from the rcvif field. 2003-11-02 00:55:46 +00:00
dyoung bf9644d3d3 Fix bugs in power-saving:
Use a power-saving station's ieee80211_node, which is stored in
the rcvif field.

Do not free a node if it is put onto the power-saving queue.
2003-11-02 00:22:49 +00:00
dyoung e3bc096fe4 Bug fix: in wi_cfg_txrate, do not divide the 802.11 rate by 2 and
take off the flags before giving it to wi_write_txrate.

Also add a useful debug message to wi_write_txrate.
2003-11-01 23:57:05 +00:00
mycroft f253f37fb0 In wi_newstate(), read the BSSID into a temporary buffer that has guaranteed
alignment.  Fixes a really obscure failure mode on Alpha, and panics on other
machines.
2003-10-24 23:58:22 +00:00
dyoung ab4a574ce1 Don't take the 802.11 header off of a frame until after we've given
it to the driver's BPF tap.
2003-10-19 22:00:54 +00:00
dyoung 5dca575ce1 ieee80211_newstate() wants for ic->ic_state to equal the previous
state, so do not update ic->ic_state in wi_newstate() before calling
ieee80211_newstate(). Instead, update ic->ic_state when we do not
let ieee80211_newstate() run.
2003-10-17 03:58:23 +00:00
dyoung d531221c67 Prepare for wi rate adaptation. Add wi_write_txrate, which only
writes a hardware register when the data rate selection actually
changes. Add wi_cfg_txrate, which writes the data rate selection
regardless.

Name some fields in the wi Tx buffer which we will use for rate
adaptation.

Name the Prism "Alternate Retry Count" RID, WI_RID_ALT_RETRY_COUNT.
2003-10-16 10:57:35 +00:00
dyoung 50daf0a217 The upper & lower bounds on wi RSSI are completely bogus, AFAICT. 2003-10-16 10:38:07 +00:00
dyoung ef743c64b6 Switch wi(4) to the new 802.11 layer. 2003-10-13 08:07:21 +00:00
dyoung 6e3daf0a07 Still more consolidation of 802.11 media-handling, moving moving
common code from awi and wi into the 802.11 framework. Inspired by
Sam Leffler's patches to FreeBSD.
2003-07-06 20:01:17 +00:00
dyoung 2c1f7efe46 Improved RSSI->dBm conversion, especially for Lucent cards, for
which I borrowed some conversion constants from the Linux orinoco_cs
driver.
2003-07-06 07:15:55 +00:00
rh f51b948f11 Add and enable monitoring mode for Lucent cards. 2003-06-19 06:16:36 +00:00
dyoung 5bcf25f890 Picky cosmetic change: remove leading space. 2003-05-31 19:38:08 +00:00
dyoung 55196426e6 Update to wi interrupt handling:
No longer require a hi-low-hi transition of a status bit before
  we believe it. It's a performance killer, and without it there
  does not seem to be a race.

  Sam Leffler reports that wi_intr needs to be bracketed by
  disable/enable interrupts through WI_INT_EN, or else performance
  is bad on Lucent. So now we do that.
2003-05-22 06:34:45 +00:00
dyoung ba845eeeb3 Stop wi panics on card ejection in Powerbook in both the enabled
and disabled states. This should fix an x86 panic somebody reported
on icb.
2003-05-20 01:29:35 +00:00
christos acec85bb7c Initialize and reset curtxeps to zero each time the error rate is exceeded.
This stops the continuous spewing of error messages, making it just sporadic.
2003-05-17 16:46:03 +00:00
dyoung 045ad0db5e IEEE80211_LOCK and WI_LOCK conceal enormous differences in locking
semantics on FreeBSD and NetBSD, so I am backing them out until
the macro set is enriched.
2003-05-16 01:26:17 +00:00
dyoung e91ed415cd Revert to previous multicast logic, which enami@sm.sony.co.jp says
was correct.
2003-05-13 08:58:01 +00:00
dyoung 850a6ef1e6 Begin synchronization with FreeBSD:
1 Add channel mask, transmit rate-mask arguments to wi_scan_ap.
2 Adopt the macros WI_LOCK/WI_UNLOCK for synchronization. FreeBSD
  uses a different synchronization mechanism.
3 In wi_cmd, adopt constants WI_DELAY/WI_TIMEOUT for timing.
4 Pull debug messages from into wi_read_nicid from FreeBSD.
5 Bug fix: if IFF_ALLMULTI, don't filter any multicasts.
6 Count and report TX exceptions, but don't generate any additional
  interrupts.
2003-05-13 08:35:58 +00:00
dyoung 5ffe819b6e For converge with FreeBSD: 2003-05-13 07:17:46 +00:00
dyoung 45e5f65918 Track TX exceptions. This will eventually enable round-robin retries
(for fairness) and RTM_LOSING or some such other message to indicate
a losing wireless destination.

From FreeBSD.
2003-05-13 07:13:49 +00:00
dyoung 904079b8af Complete prior patch: dump packets in wi_rx_intr, too. 2003-05-13 06:51:10 +00:00
dyoung aa1a3737de Debug code from FreeBSD: handy packet dumps when IFF_DEBUG|IFF_LINK2
are set.
2003-05-13 06:48:56 +00:00
dyoung a090735114 Misc changes to wi_stop. First, block interrupts in wi_stop. (From
FreeBSD.)

Fix a bug in wi_stop where ejecting from the Powerbook crashes the
system. Essentially, the patch makes sure we write *no* registers
when we are no longer attached.

Also, for consistency w/ FreeBSD, use sc_portnum throughout wi,
instead of hard-coding WI_PORT0 .
2003-05-13 06:33:40 +00:00
dyoung 8f56bda785 For uniformity between FreeBSD & NetBSD, adopt FreeBSD's more
concise wi_cmd.
2003-05-13 06:15:47 +00:00
kml 0ad9e0dccc Host AP power saving support. The Host AP notices that the power
saving bit is set in incoming frames from a station, and buffers the
outgoing frames for the station until they are polled for.  This
requires support in the driver to set a bit in the TIM bitmap sent
during 802.11 beacons.

So far, support for power saving in Host AP mode is only available
for the PRISM2 chipset.
2003-04-08 04:31:23 +00:00
dyoung bfdccc21aa 802.11 MLME-JOIN.request is an abstract MAC function that is not
necessarily exposed to the host, so Lucent/Agere/whatever is correct
in not supporting it.
2003-03-27 07:22:47 +00:00
dyoung 016e6c270f HostAP broke in version 1.4.2 of station firmware. Try 1.3.x, 1.4.9,
or later.
2003-03-27 05:00:21 +00:00
dyoung 404d2ac6e8 Introduced sc_reset to wi_softc. The bus-specific front-end gets
to fill this.
2003-03-27 04:34:16 +00:00
dyoung 595c6d88b2 Add support for Prism monitor mode. From Kevin Lahey
<kml@patheticgeek.net>.

This patch does NOT add monitor mode support for the Lucent radios.

awi(4) was only modified for compatibility with the new mediaopt.
It does NOT support monitor mode.

Tested by Kevin, Daniel Carosone, and I.
2003-02-25 01:57:35 +00:00
dyoung eb7810a127 Disable interrupts before ACKing them to avoid the obvious race. 2003-02-25 00:51:14 +00:00
dyoung 0691446706 Following implementation for other RIDs, read the driver's notion
of the fragmentation threshold instead of the hardware's notion.
2003-02-25 00:47:11 +00:00
dyoung d2e09bb4b6 Oops. This turns off debugging again. 2003-01-09 08:52:19 +00:00
dyoung c4780f2706 wi_start: write an mbuf chain to the driver using wi_mwrite_bap,
which is safer than the loop there used to be here.

wi_mwrite_bap: if wi_write_bap fails, don't keep on going: this
  way you avoid writing garbage to the radio. First time you see
  an odd-length mbuf, copy the remainder of the chain to sc_txbuf
  and from there to the MAC. This way, you do not read an mbuf past
  the end of its data (occasionally you will cross a page doing
  that!) and you avoid expensive, excess seeks in the radio's own
  buffer chain.

wi_rx_intr: clamp the frame length told to us by the driver to the
  most bytes we can fit in our mbuf cluster.

I am still getting e-mails from my testers telling me how much
better this makes things.
2003-01-09 08:49:39 +00:00
dyoung 18d05b8362 A Prism firmware participating in an IBSS network will not send a
LINK_STAT notification for every change of BSSID, so the firmware's
BSSID and the driver's BSSID will get out of sync. This has two
bad affects. First, because the 802.11 framework filters received
packets based on BSSID, many packets can be dropped before the
driver adopts the firmware's BSSID.  Second, ifconfig's tells a
misleading BSSID to the operator.

This problem is most apparent in networks where every station does
not hear every other. I reproduce these conditions in an office by
removing/replacing the antennas on my 802.11 cards.

As a solution, in IBSS mode, the driver will ask the firmware for
the BSSID every five seconds. Also, whenever the driver receives
a frame carrying a different BSSID than the driver's BSSID, then
the driver asks the firmware for the BSSID before handing the frame
to ieee80211_input.
2003-01-01 02:06:47 +00:00
dyoung 1a8833b7c1 On Lucent cards, indicate that changing BSSID with SIOCS80211BSSID
is impossible.  Never write to the Prism-only JOIN RID.
2002-12-27 08:29:46 +00:00
dyoung fb22424264 The RID for the RSSI->dBm adjustment is not supported by Prism
station firmware version <= 1.1.1.
2002-12-27 07:54:35 +00:00
dyoung 1b3451a594 Only Prism is known to support WI_RID_FRAG_THRESH. 2002-11-18 15:10:22 +00:00
dyoung 3a04dc2907 In wi_get_cfg, factor the code for getting the tx rate with the
IEEE 802.11 subsystem.

In wi_write_txrate, document the clever code for computing
WI_RID_TX_RATE from a bit rate.
2002-11-16 06:25:05 +00:00
dyoung f675f5f8b5 Support two new RIDs.
WI_RID_DBM_ADJUST: In preparation for capturing Prism packets
  containing received signal strength indications (RSSI), read the
  constant for conversion from RSSI to dBm (decibels relative to
  a milliwatt).

  WI_RID_FRAG_THRESH: Get/set the packet fragmentation threshold
  on Lucent/Prism.
2002-11-16 06:02:53 +00:00
mycroft 8131f239bf IBSS mode does in fact work on some earlier Symbol firmware versions, as
witnessed by my home network.
2002-10-25 01:35:12 +00:00
onoe db87a0f069 Fix to use 104bit key for Intersil/Symbol firmware:
It seems that the firmware accept 104bit key only if
	all the keys have 104bit length.  We get the length of
	the transmit key and use it for all other keys.
	Perhaps we should use software WEP for such situation.
2002-10-15 08:53:46 +00:00
onoe e6fe57e960 Update BSSID at every CONNECTED LINK_STAT notification in IBSS mode,
since it can be updated by IBSS merge. Also the lucent firmware 8.10.1
changes random generated bssid every 10 seconds in IBSS creation enable.
PR 18520
2002-10-07 11:01:52 +00:00