3c59x: Specify window explicitly for access to windowed registers
commita095cfc40ec7ebe63e9532383c5b5c2a27b14075
authorBen Hutchings <ben@decadent.org.uk>
Wed, 23 Jun 2010 13:54:31 +0000 (23 13:54 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 29 Jun 2010 06:19:18 +0000 (28 23:19 -0700)
tree283359a3658ad91b122cd0674bf90b6f9dc0e3d2
parentd2ef8590343f1f236f5f7f070fb4cd3f5c3ffb69
3c59x: Specify window explicitly for access to windowed registers

Currently much of the code assumes that a specific window has been
selected, while a few functions save and restore the window.  This
makes it impossible to introduce fine-grained locking.

Make those assumptions explicit by introducing wrapper functions
to set the window and read/write a register.  Use these everywhere
except vortex_interrupt(), vortex_start_xmit() and vortex_rx().
These set the window just once, or not at all in the case of
vortex_rx() as it should always be called from vortex_interrupt().

Cache the current window in struct vortex_private to avoid
unnecessary hardware writes.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Tested-by: Arne Nordmark <nordmark@mech.kth.se> [against 2.6.32]
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/3c59x.c