Commit Graph

143 Commits

Author SHA1 Message Date
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
onoe
d131e2b1a8 Handle of AP_IN_RANGE/AP_OUT_RANGE, to fix a problem once the station
is out of ragen, it never comes up again.
For HostAP, prohibit sending DATA frame to an unassociated but authenticated
station.
2002-10-04 04:23:20 +00:00
onoe
f383b2e780 Set IEEE80211_F_IBSSON before test in wi_init() to set CREATE_IBSS
correctly for Lucent firmware to work with IBSS mode.
PR 18520
2002-10-03 22:32:37 +00:00
onoe
031d8de6cf Fix NIC-memory leak for symbol firmware at reinitialization. After 4-5
times changing of 802.11 parameters, such as nwid, the error
"tx buffer allocation failed" occured unless ifconfig down up.

Pass signal streangth and timestamp to ieee80211_input, though it is not
useful for wi driver for now.
2002-10-02 17:11:34 +00:00
onoe
5dd315acee Do not call wi_stop() with disabled flag set from wi_init(), since it
sometimes call within interrupt and deleting handler causes panic.
Fix to display current tx rate as media.
Clear trailer bytes in ssid fields.
2002-10-01 16:11:19 +00:00
onoe
a7a8e96683 Linkstatus AP_IN_RANGE doesn't mean associatted, rather it just mean trying
to associate.
2002-10-01 09:48:02 +00:00