Home | History | Annotate | Download | only in cardbus
History log of /src/sys/dev/cardbus/if_rtw_cardbus.c
RevisionDateAuthorComments
 1.46  25-Sep-2022  thorpej Remove unnecessary include of <sys/malloc.h>.
 1.45  07-Jul-2016  msaitoh KNF. Remove extra spaces. No functional change.
 1.44  21-Nov-2013  riz branches: 1.44.6;
Expand "#ifdef notyet" section to encompass the use of the variable
declared within.
 1.43  17-Oct-2013  christos move notyet variable into notyet section
 1.42  01-Aug-2011  drochner branches: 1.42.2; 1.42.12; 1.42.16;
remove some bloat:
-cardbus doesn't use multiple interrupt lines like PCI, and it doesn't
use machanisms like interrupt line register and swizzling -- no need
to carry around dummy information, this is all dealt with by the
bridge
(I'm asking myself how "rbus_ppb" can work -- a bridge attached to
cardbus just can't work like a normal PCI bridge as far as interrupts
are concerned. I thing that should be a hardware specific driver
because behavior is not covered by a standard.)
-cardbus always uses 3.3V -- no need for a variable to keep track
of the voltage
 1.41  26-Jul-2011  dyoung Replace anonymous constants, 0x10, 0x14, ..., with PCI_BAR(0),
PCI_BAR(1), .... There was no change in the generated assembly. I used
this semantic patch:

@ mapsit @
identifier bar;
expression pact;
@@

(
pci_mapreg_map
|
Cardbus_mapreg_map
)(pact, bar, ...)

@ depends on mapsit @
identifier mapsit.bar;
@@
(
- #define bar 0x10
+ #define bar PCI_BAR(0)
|
- #define bar 0x14
+ #define bar PCI_BAR(1)
|
- #define bar 0x18
+ #define bar PCI_BAR(2)
|
- #define bar 0x1C
+ #define bar PCI_BAR(3)
|
- #define bar 0x20
+ #define bar PCI_BAR(4)
)
 1.40  05-Mar-2010  dyoung Simplify this a bit (and reduce differences with if_rtw_pci.c): we
don't have to save the base address or write it to the BAR.
 1.39  04-Mar-2010  dyoung Remove unnecessary #ifdef INET-enclosed #includes.

This is *always* compiled with #define rbus 1, so get rid of the
conditional compilation.
 1.38  26-Feb-2010  dyoung Introduce Cardbus_intr_establish(cardbus_devfunc_t, ...) and
Cardbus_intr_disestablish(cardbus_devfunc_t, ...) and start using them.
 1.37  25-Feb-2010  dyoung Use PCI_ constants instead of CARDBUS_ constants. Use Cardbus_conf_*()
functions instead of cardbus_conf_*() functions to simplify some
code.
 1.36  24-Feb-2010  dyoung Start to tuck Cardbus under the PCI abstraction. Step #1, textual
substitution: for all practical purposes, pcitag_t and cardbustag_t are
interchangeable, so just use pcitag_t. Ditto pcireg_t and cardbusreg_t.

Poison new uses of cardbusreg_t and cardbustag_t by deleting the type
definitions.
 1.35  24-Feb-2010  dyoung A pointer typedef entails trading too much flexibility to declare const
and non-const types, and the kernel uses both const and non-const
PMF qualifiers and device suspensors, so change the pmf_qual_t and
device_suspensor_t typedefs from "pointers to const" to non-pointer,
non-const types.
 1.34  18-Jan-2010  pooka branches: 1.34.2;
Remove conditional inclusion of unused bpf.h
 1.33  08-Jan-2010  dyoung Expand PMF_FN_* macros.
 1.32  19-Oct-2009  rmind Drop 3rd and 4th clauses from David Young's license.
Reviewed and approved by dyoung@ (copyright holder).
 1.31  16-Sep-2009  dyoung In pmf(9), improve the implementation of device self-suspension
and make suspension by self, by drvctl(8), and by ACPI system sleep
play nice together. Start solidifying some temporary API changes.

1. Extract a new header file, <sys/device_if.h>, from <sys/device.h> and
#include it from <sys/pmf.h> instead of <sys/device.h> to break the
circular dependency between <sys/device.h> and <sys/pmf.h>.

2. Introduce pmf_qual_t, an aggregate of qualifications on a PMF
suspend/resume call. Start to replace instances of PMF_FN_PROTO,
PMF_FN_ARGS, et cetera, with a pmf_qual_t.

3. Introduce the notion of a "suspensor," an entity that holds a
device in suspension. More than one suspensor may hold a device
at once. A device stays suspended as long as at least one
suspensor holds it. A device resumes when the last suspensor
releases it.

Currently, the kernel defines three suspensors,

3a the system-suspensor: for system suspension, initiated
by 'sysctl -w machdep.sleep_state=3', by lid closure, by
power-button press, et cetera,

3b the drvctl-suspensor: for device suspension by /dev/drvctl
ioctl, e.g., drvctl -S sip0.

3c the system self-suspensor: for device drivers that suspend
themselves and their children. Several drivers for network
interfaces put the network device to sleep while it is not
administratively up, that is, after the kernel calls if_stop(,
1). The self-suspensor should not be used directly. See
the description of suspensor delegates, below.

A suspensor can have one or more "delegates". A suspensor can
release devices that its delegates hold suspended. Right now,
only the system self-suspensor has delegates. For each device
that a self-suspending driver attaches, it creates the device's
self-suspensor, a delegate of the system self-suspensor.

Suspensors stop a system-wide suspend/resume cycle from waking
devices that the operator put to sleep with drvctl before the cycle.
They also help self-suspension to work more simply, safely, and in
accord with expectations.

4. Add the notion of device activation level, devact_level_t,
and a routine for checking the current activation level,
device_activation(). Current activation levels are DEVACT_LEVEL_BUS,
DEVACT_LEVEL_DRIVER, and DEVACT_LEVEL_CLASS, which respectively
indicate that the device's bus is active, that the bus and device are
active, and that the bus, device, and the functions of the device's
class (network, audio) are active.

Suspend/resume calls can be qualified with a devact_level_t.
The power-management framework treats a devact_level_t that
qualifies a device suspension as the device's current activation
level; it only runs hooks to reduce the activation level from
the presumed current level to the fully suspended state. The
framework treats a devact_level_t qualifying device resumption
as the target activation level; it only runs hooks to raise the
activation level to the target.

5. Use pmf_qual_t, devact_level_t, and self-suspensors in several
drivers.

6. Temporarily add an unused power-management workqueue that I will
remove or replace, soon.
 1.30  05-Sep-2009  tsutsui Invert logic around nested pmf(9) registrations for readability.
 1.29  12-May-2009  cegger struct cfdata * -> cfdata_t, no functional changes intended.
 1.28  06-Feb-2009  dyoung branches: 1.28.2;
Disable and acknowledge Function Events, and stop installing a
handler for them.
 1.27  24-Jun-2008  drochner branches: 1.27.4;
clean up the cardbus interrupt stuff:
There were cardbus_intr_line_t and cardbus_intr_handle_t used intermixed
for the same variable, and that variable is pretty much useless because
cardbus doesn't follow the PCI interrupt swizzling etc scheme.
Useless interrupt numbers were printed on cardbus device attach.
So as a first step to sanity, kill cardbus_intr_handle_t and poison
cardbus_intr_line_t to discourage printing it as a %d.
Use cardbus_intr_line_t consistently throughout the code.
Remove the "interrupting at foo" messages because the information
is misleading. We could come up with a better interrupt vector
information, but because cardbus interrupts are mediated by pccbb
it would still be misleading.
 1.26  14-May-2008  dyoung branches: 1.26.2;
Match printf argument type (uintmax_t) to format string (PRIuMAX).
 1.25  30-Apr-2008  ad branches: 1.25.2;
Make various bits of debug code compile again.
 1.24  28-Apr-2008  martin Remove clause 3 and 4 from TNF licenses
 1.23  12-Mar-2008  dyoung branches: 1.23.2; 1.23.4;
Use device_t and its accessors throughout. Use aprint_*_dev().

Improve PMF-ability.

Add a 'flags' argument to suspend/resume handlers and
callers such as pmf_system_suspend().

Define a flag, PMF_F_SELF, which indicates to PMF that a
device is suspending/resuming itself. Add helper routines,
pmf_device_suspend_self(dev) and pmf_device_resume_self(dev),
that call pmf_device_suspend(dev, PMF_F_SELF) and
pmf_device_resume(dev, PMF_F_SELF), respectively. Use
PMF_F_SELF to suspend/resume self in ath(4), audio(4),
rtw(4), and sip(4).

In ath(4) and in rtw(4), replace the icky sc_enable/sc_disable
callbacks, provided by the bus front-end, with
self-suspension/resumption. Also, clean up the bus
front-ends. Make sure that the interrupt handler is
disestablished during suspension. Get rid of driver-private
flags (e.g., RTW_F_ENABLED, ath_softc->sc_invalid); use
device_is_active()/device_has_power() calls, instead.

In the network-class suspend handler, call if_stop(, 0)
instead of if_stop(, 1), because the latter is superfluous
(bus- and driver-suspension hooks will 'disable' the NIC),
and it may cause recursion.

In the network-class resume handler, prevent infinite
recursion through if_init() by getting out early if we are
self-suspending (PMF_F_SELF).

rtw(4) improvements:

Destroy rtw(4) callouts when we detach it. Make rtw at
pci detachable. Print some more information with the "rx
frame too long" warning.

Remove activate() methods:

Get rid of rtw_activate() and ath_activate(). The device
activate() methods are not good for much these days.

Make ath at cardbus resume with crypto functions intact:

Introduce a boolean device property, "pmf-powerdown". If
pmf-powerdown is present and false, it indicates that a
bus back-end should not remove power from a device.

Honor this property in cardbus_child_suspend().

Set this property to 'false' in ath_attach(), since removing
power from an ath at cardbus seems to lobotomize the WPA
crypto engine. XXX Should the pmf-powerdown property
propagate toward the root of the device tree?

Miscellaneous ath(4) changes:

Warn if ath(4) tries to write crypto keys to suspended
hardware.

Reduce differences between FreeBSD and NetBSD in ath(4)
multicast filter setup.

Make ath_printrxbuf() print an rx descriptor's status &
key index, to help debug crypto errors.

Shorten a staircase in ath_ioctl(). Don't check for
ieee80211_ioctl() return code ERESTART, it never happens.
 1.22  08-Jan-2008  dyoung branches: 1.22.2; 1.22.6;
After rtw_attach() is called, the hardware has been powered down,
so don't fiddle with the Function Event Registers.
 1.21  21-Dec-2007  dyoung Do not embed a struct device in rtw_softc any longer. Register
both pci and cardbus attachments with CFATTACH_DECL_NEW(). Access
the softc through the device_t using device_private().

While I'm here, change a couple of KASSERT()s about the Rx buffer
length to a warning.
 1.20  16-Dec-2007  dyoung Synchronize device detachment with network interrupts. Use the
pmf network class instead of powerhooks.
 1.19  09-Dec-2007  jmcneill branches: 1.19.2;
Merge jmcneill-pm branch.
 1.18  16-Nov-2007  dyoung branches: 1.18.2; 1.18.4;
Cosmetic changes: Join some lines. Remove superfluous parentheses
and braces. Change a variable name. Add #if 0'd cardbus_conf_capture()
and cardbus_conf_restore() calls for future reference.
 1.17  16-Nov-2007  dyoung Use cardbus_setpowerstate() instead of rolling our own.

Let the Cardbus bridge driver set our Latency Timer, but round down
to the nearest multiple of 0x10, since the RTL8180 datasheet may
be trying to tell us that is necessary.

Activate Parity & System Error reporting.

Use a more meaningful variable name, reg -> csr.
 1.16  19-Oct-2007  ad branches: 1.16.2;
machine/{bus,cpu,intr}.h -> sys/{bus,cpu,intr}.h
 1.15  16-Nov-2006  christos branches: 1.15.8; 1.15.22; 1.15.24; 1.15.28;
__unused removal on arguments; approved by core.
 1.14  12-Oct-2006  christos - sprinkle __unused on function decls.
- fix a couple of unused bugs
- no more -Wno-unused for i386
 1.13  07-Sep-2006  dogcow branches: 1.13.2; 1.13.4;
remove more vestiges of CCITT, LLC, HDLC, NS, and NSIP.
 1.12  05-Jun-2006  martin Add D-Link DWL-610
 1.11  28-Apr-2006  rpaulo branches: 1.11.2;
ANSIfy.
 1.10  29-Mar-2006  thorpej Use device_private().
 1.9  29-Dec-2005  dyoung branches: 1.9.4; 1.9.6; 1.9.8; 1.9.10; 1.9.12;
The RTL8180L works better with a PCI Latency Timer of 0x50 than
with 0x20. Derived from a reference driver, IIRC.
 1.8  11-Dec-2005  christos merge ktrace-lwp.
 1.7  22-Jun-2005  dyoung branches: 1.7.2;
Resolve conflicts in importation of 18-May-2005 ath(4) / net80211(9)
from FreeBSD. Introduce compatibility shims (sys/dev/ic/ath_netbsd.[ch],
sys/net80211/ieee80211_netbsd.[ch]). Update drivers (an, atu, atw,
awi, ipw, iwi, rtw, wi) for the new net80211(9) API.
 1.6  27-Feb-2005  perry nuke trailing whitespace
 1.5  25-Dec-2004  dyoung branches: 1.5.2; 1.5.4;
Change rtw_debug from a debug level to a debug mask. Add a lot of
debug flags.

From Linux: handle an RTL8180 bug. Sometimes the NIC skips from
the middle of the ring to the 0th rx descriptor. Now the driver
resynchronizes.

Handle a receive descriptor underrun or Rx FIFO overflow condition
in the way that the Linux driver does. This kind of seems like
overkill, but whatever.

Protect rtw_ioctl with splnet().

Do not load a tx descriptor with a buffer shorter than 4 bytes.

Handle a transmit timeout less disruptively.
 1.4  20-Dec-2004  dyoung Don't be so noisy at boot unless debugging is enabled.
 1.3  07-Dec-2004  jdarrow Add the Belkin F5D6020v3 to the match array for rtw.

My card now probes as:
rtw0 at cardbus1 dev 0 function 0: Belkin F5D5020v3 802.11b (RTL8180 MAC/BBP)
rtw0: rtw_cardbus_attach mapped 512 bytes mem space
rtw0: interrupting at 10
rtw0: hardware version D
rtw0: SROM version 1.2
rtw0: RF: Philips SA2400A, PA: Philips SA2411
rtw0: Geographic Location USA
rtw0: 802.11 address 00:30:bd:4d:ed:de
rtw0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mb

XXX The driver still doesn't actually _work_...
 1.2  09-Oct-2004  mycroft branches: 1.2.2;
Fix printf() warnings.
 1.1  26-Sep-2004  dyoung Add Cardbus, PCI bus front-ends for RTL8180 802.11b MAC/baseband.
 1.2.2.6  10-Nov-2005  skrll Sync with HEAD. Here we go again...
 1.2.2.5  04-Mar-2005  skrll Sync with HEAD.

Hi Perry!
 1.2.2.4  17-Jan-2005  skrll Sync with HEAD.
 1.2.2.3  18-Dec-2004  skrll Sync with HEAD.
 1.2.2.2  19-Oct-2004  skrll Sync with HEAD
 1.2.2.1  09-Oct-2004  skrll file if_rtw_cardbus.c was added on branch ktrace-lwp on 2004-10-19 15:56:45 +0000
 1.5.4.1  19-Mar-2005  yamt sync with head. xen and whitespace. xen part is not finished.
 1.5.2.1  29-Apr-2005  kent sync with -current
 1.7.2.6  17-Mar-2008  yamt sync with head.
 1.7.2.5  21-Jan-2008  yamt sync with head
 1.7.2.4  07-Dec-2007  yamt sync with head
 1.7.2.3  27-Oct-2007  yamt sync with head.
 1.7.2.2  30-Dec-2006  yamt sync with head.
 1.7.2.1  21-Jun-2006  yamt sync with head.
 1.9.12.2  24-May-2006  tron Merge 2006-05-24 NetBSD-current into the "peter-altq" branch.
 1.9.12.1  31-Mar-2006  tron Merge 2006-03-31 NetBSD-current into the "peter-altq" branch.
 1.9.10.2  11-May-2006  elad sync with head
 1.9.10.1  19-Apr-2006  elad sync with head.
 1.9.8.4  14-Sep-2006  yamt sync with head.
 1.9.8.3  26-Jun-2006  yamt sync with head.
 1.9.8.2  24-May-2006  yamt sync with head.
 1.9.8.1  01-Apr-2006  yamt sync with head.
 1.9.6.3  07-Jun-2006  kardel Sync with head.
 1.9.6.2  01-Jun-2006  kardel Sync with head.
 1.9.6.1  22-Apr-2006  simonb Sync with head.
 1.9.4.1  09-Sep-2006  rpaulo sync with head
 1.11.2.1  19-Jun-2006  chap Sync with head.
 1.13.4.2  10-Dec-2006  yamt sync with head.
 1.13.4.1  22-Oct-2006  yamt sync with head
 1.13.2.1  18-Nov-2006  ad Sync with head.
 1.15.28.2  18-Nov-2007  bouyer Sync with HEAD
 1.15.28.1  25-Oct-2007  bouyer Sync with HEAD.
 1.15.24.3  23-Mar-2008  matt sync with HEAD
 1.15.24.2  09-Jan-2008  matt sync with HEAD
 1.15.24.1  06-Nov-2007  matt sync with HEAD
 1.15.22.2  21-Nov-2007  joerg Sync with HEAD.
 1.15.22.1  26-Oct-2007  joerg Sync with HEAD.

Follow the merge of pmap.c on i386 and amd64 and move
pmap_init_tmp_pgtbl into arch/x86/x86/pmap.c. Modify the ACPI wakeup
code to restore CR4 before jumping back into kernel space as the large
page option might cover that.
 1.15.8.1  23-Oct-2007  ad Sync with head.
 1.16.2.3  18-Feb-2008  mjf Sync with HEAD.
 1.16.2.2  27-Dec-2007  mjf Sync with HEAD.
 1.16.2.1  19-Nov-2007  mjf Sync with HEAD.
 1.18.4.1  11-Dec-2007  yamt sync with head.
 1.18.2.1  26-Dec-2007  ad Sync with head.
 1.19.2.2  08-Jan-2008  bouyer Sync with HEAD
 1.19.2.1  02-Jan-2008  bouyer Sync with HEAD
 1.22.6.3  29-Jun-2008  mjf Sync with HEAD.
 1.22.6.2  02-Jun-2008  mjf Sync with HEAD.
 1.22.6.1  03-Apr-2008  mjf Sync with HEAD.
 1.22.2.1  24-Mar-2008  keiichi sync with head.
 1.23.4.5  11-Mar-2010  yamt sync with head
 1.23.4.4  16-Sep-2009  yamt sync with head
 1.23.4.3  16-May-2009  yamt sync with head
 1.23.4.2  04-May-2009  yamt sync with head.
 1.23.4.1  16-May-2008  yamt sync with head.
 1.23.2.1  18-May-2008  yamt sync with head.
 1.25.2.2  18-Sep-2008  wrstuden Sync with wrstuden-revivesa-base-2.
 1.25.2.1  23-Jun-2008  wrstuden Sync w/ -current. 34 merge conflicts to follow.
 1.26.2.1  27-Jun-2008  simonb Sync with head.
 1.27.4.1  03-Mar-2009  skrll Sync with HEAD.
 1.28.2.1  13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.34.2.1  30-Apr-2010  uebayasi Sync with HEAD.
 1.42.16.1  18-May-2014  rmind sync with head
 1.42.12.2  03-Dec-2017  jdolecek update from HEAD
 1.42.12.1  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.42.2.1  22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.44.6.1  09-Jul-2016  skrll Sync with HEAD

RSS XML Feed