Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
096cbcc6
Commit
096cbcc6
authored
May 17, 2002
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
http://gkernel.bkbits.net/net-drivers-2.5
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
760a916d
6b537219
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
231 additions
and
70 deletions
+231
-70
Documentation/networking/8139too.txt
Documentation/networking/8139too.txt
+1
-0
Documentation/networking/cs89x0.txt
Documentation/networking/cs89x0.txt
+12
-2
MAINTAINERS
MAINTAINERS
+8
-2
drivers/net/3c509.c
drivers/net/3c509.c
+52
-10
drivers/net/8139too.c
drivers/net/8139too.c
+1
-1
drivers/net/cs89x0.c
drivers/net/cs89x0.c
+77
-5
drivers/net/cs89x0.h
drivers/net/cs89x0.h
+4
-0
drivers/net/mii.c
drivers/net/mii.c
+2
-0
drivers/net/tulip/21142.c
drivers/net/tulip/21142.c
+2
-1
drivers/net/tulip/ChangeLog
drivers/net/tulip/ChangeLog
+10
-0
drivers/net/tulip/tulip_core.c
drivers/net/tulip/tulip_core.c
+3
-2
drivers/net/via-rhine.c
drivers/net/via-rhine.c
+48
-39
drivers/net/wan/pc300_drv.c
drivers/net/wan/pc300_drv.c
+1
-1
drivers/net/wan/pc300_tty.c
drivers/net/wan/pc300_tty.c
+1
-1
include/net/iw_handler.h
include/net/iw_handler.h
+2
-1
net/core/wireless.c
net/core/wireless.c
+7
-5
No files found.
Documentation/networking/8139too.txt
View file @
096cbcc6
...
...
@@ -98,6 +98,7 @@ KTI KF-230TX/2
Lantech FastNet TX
Ovislink Fast Ethernet
Planet ENW-9504 (V.4) 10/100
SDT Jeoun Fast PCI-TX
SMC EZNET 10/100
UNEX NexNIC ND012C
...
...
Documentation/networking/cs89x0.txt
View file @
096cbcc6
...
...
@@ -51,7 +51,7 @@ TABLE OF CONTENTS
6.2 Information Required Before Contacting Technical Support
6.3 Obtaining the Latest Driver Version
6.4 Current maintainer
6.5 Kernel boot parameters
1.0 CIRRUS LOGIC LAN CS8900/CS8920 ETHERNET ADAPTERS
...
...
@@ -690,4 +690,14 @@ the latest drivers and technical publications.
6.4 Current maintainer
In February 2000 the maintenance of this driver was assumed by Andrew
Morton <andrewm@uow.edu.au>
Morton <akpm@zip.com.au>
6.5 Kernel module parameters
For use in embedded environments with no cs89x0 EEPROM, the kernel boot
parameter `cs89x0_media=' has been implemented. Usage is:
cs89x0_media=rj45 or
cs89x0_media=aui or
cs89x0_media=bnc
MAINTAINERS
View file @
096cbcc6
...
...
@@ -389,8 +389,14 @@ L: cycsyn-devel@bazar.conectiva.com.br
S: Maintained
CYCLADES ASYNC MUX DRIVER
P: Ivan Passos
M: ivan@cyclades.com
P: Henrique Gobbi
M: henrique@cyclades.com
W: http://www.cyclades.com/
S: Supported
CYCLADES PC300 DRIVER
P: Henrique Gobbi
M: henrique@cyclades.com
W: http://www.cyclades.com/
S: Supported
...
...
drivers/net/3c509.c
View file @
096cbcc6
...
...
@@ -47,10 +47,12 @@
- ethtool support
v1.18b 1Mar2002 Zwane Mwaikambo <zwane@commfireservices.com>
- Power Management support
v1.18c 1Mar2002 David Ruggiero <jdr@farfalle.com>
- Full duplex support
*/
#define DRV_NAME "3c509"
#define DRV_VERSION "1.18
b
"
#define DRV_VERSION "1.18
c
"
#define DRV_RELDATE "1Mar2002"
/* A few values that may be tweaked. */
...
...
@@ -141,6 +143,8 @@ enum RxFilter {
#define WN0_IRQ 0x08
/* Window 0: Set IRQ line in bits 12-15. */
#define WN4_MEDIA 0x0A
/* Window 4: Various transcvr/media bits. */
#define MEDIA_TP 0x00C0
/* Enable link beat and jabber for 10baseT. */
#define WN4_NETDIAG 0x06
/* Window 4: Net diagnostic */
#define FD_ENABLE 0x8000
/* Enable full-duplex ("external loopback") */
/*
* Must be a power of two (we use a binary and in the
...
...
@@ -500,12 +504,18 @@ int __init el3_probe(struct net_device *dev, int card_idx)
memcpy
(
dev
->
dev_addr
,
phys_addr
,
sizeof
(
phys_addr
));
dev
->
base_addr
=
ioaddr
;
dev
->
irq
=
irq
;
dev
->
if_port
=
(
dev
->
mem_start
&
0x1f
)
?
dev
->
mem_start
&
3
:
if_port
;
if
(
dev
->
mem_start
&
0x05
)
{
/* xcvr codes 1/3/4/12 */
dev
->
if_port
=
(
dev
->
mem_start
&
0x0f
);
}
else
{
/* xcvr codes 0/8 */
/* use eeprom value, but save user's full-duplex selection */
dev
->
if_port
=
(
if_port
|
(
dev
->
mem_start
&
0x08
)
);
}
{
const
char
*
if_names
[]
=
{
"10baseT"
,
"AUI"
,
"undefined"
,
"BNC"
};
printk
(
"%s: 3c5x9 at %#3.3lx, %s port, address "
,
dev
->
name
,
dev
->
base_addr
,
if_names
[
dev
->
if_port
]);
dev
->
name
,
dev
->
base_addr
,
if_names
[(
dev
->
if_port
&
0x03
)
]);
}
/* Read in the station address. */
...
...
@@ -557,7 +567,7 @@ int __init el3_probe(struct net_device *dev, int card_idx)
/* Read a word from the EEPROM using the regular EEPROM access register.
Assume that we are in register window zero.
*/
static
ushort
__init
read_eeprom
(
int
ioaddr
,
int
index
)
static
ushort
read_eeprom
(
int
ioaddr
,
int
index
)
{
outw
(
EEPROM_READ
+
index
,
ioaddr
+
10
);
/* Pause for at least 162 us. for the read to take place. */
...
...
@@ -1083,7 +1093,7 @@ static void el3_down(struct net_device *dev)
static
void
el3_up
(
struct
net_device
*
dev
)
{
int
i
;
int
i
,
sw_info
,
net_diag
;
int
ioaddr
=
dev
->
base_addr
;
/* Activating the board required and does no harm otherwise */
...
...
@@ -1098,12 +1108,44 @@ static void el3_up(struct net_device *dev)
for
(
i
=
0
;
i
<
6
;
i
++
)
outb
(
dev
->
dev_addr
[
i
],
ioaddr
+
i
);
if
(
dev
->
if_port
==
3
)
if
(
(
dev
->
if_port
&
0x03
)
==
3
)
/* BNC interface */
/* Start the thinnet transceiver. We should really wait 50ms...*/
outw
(
StartCoax
,
ioaddr
+
EL3_CMD
);
else
if
(
dev
->
if_port
==
0
)
{
/* 10baseT interface, enabled link beat and jabber check. */
else
if
((
dev
->
if_port
&
0x03
)
==
0
)
{
/* 10baseT interface */
/* Combine secondary sw_info word (the adapter level) and primary
sw_info word (duplex setting plus other useless bits) */
EL3WINDOW
(
0
);
sw_info
=
(
read_eeprom
(
ioaddr
,
0x14
)
&
0x400f
)
|
(
read_eeprom
(
ioaddr
,
0x0d
)
&
0xBff0
);
EL3WINDOW
(
4
);
net_diag
=
inw
(
ioaddr
+
WN4_NETDIAG
);
net_diag
=
(
net_diag
|
FD_ENABLE
);
/* temporarily assume full-duplex will be set */
printk
(
"%s: "
,
dev
->
name
);
switch
(
dev
->
if_port
&
0x0c
)
{
case
12
:
/* force full-duplex mode if 3c5x9b */
if
(
sw_info
&
0x000f
)
{
printk
(
"Forcing 3c5x9b full-duplex mode"
);
break
;
}
case
8
:
/* set full-duplex mode based on eeprom config setting */
if
((
sw_info
&
0x000f
)
&&
(
sw_info
&
0x8000
))
{
printk
(
"Setting 3c5x9b full-duplex mode (from EEPROM configuration bit)"
);
break
;
}
default:
/* xcvr=(0 || 4) OR user has an old 3c5x9 non "B" model */
printk
(
"Setting 3c5x9/3c5x9B half-duplex mode"
);
net_diag
=
(
net_diag
&
~
FD_ENABLE
);
/* disable full duplex */
}
outw
(
net_diag
,
ioaddr
+
WN4_NETDIAG
);
printk
(
" if_port: %d, sw_info: %4.4x
\n
"
,
dev
->
if_port
,
sw_info
);
if
(
el3_debug
>
3
)
printk
(
"%s: 3c5x9 net diag word is now: %4.4x.
\n
"
,
dev
->
name
,
net_diag
);
/* Enable link beat and jabber check. */
outw
(
inw
(
ioaddr
+
WN4_MEDIA
)
|
MEDIA_TP
,
ioaddr
+
WN4_MEDIA
);
}
...
...
@@ -1208,11 +1250,11 @@ static int el3_pm_callback(struct pm_dev *pdev, pm_request_t rqst, void *data)
/* Parameters that may be passed into the module. */
static
int
debug
=
-
1
;
static
int
irq
[]
=
{
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
};
static
int
xcvr
[]
=
{
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
};
static
int
xcvr
[]
=
{
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
};
MODULE_PARM
(
debug
,
"i"
);
MODULE_PARM
(
irq
,
"1-8i"
);
MODULE_PARM
(
xcvr
,
"1-
8
i"
);
MODULE_PARM
(
xcvr
,
"1-
12
i"
);
MODULE_PARM
(
max_interrupt_work
,
"i"
);
MODULE_PARM_DESC
(
debug
,
"debug level (0-6)"
);
MODULE_PARM_DESC
(
irq
,
"IRQ number(s) (assigned)"
);
...
...
drivers/net/8139too.c
View file @
096cbcc6
...
...
@@ -2329,7 +2329,7 @@ static int netdev_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
if
(
cmd
!=
SIOCETHTOOL
)
{
/* With SIOCETHTOOL, this would corrupt the pointer. */
data
->
phy_id
&=
0x
1
f
;
data
->
phy_id
&=
0x
3
f
;
data
->
reg_num
&=
0x1f
;
}
...
...
drivers/net/cs89x0.c
View file @
096cbcc6
...
...
@@ -81,6 +81,9 @@
: Make `version[]' __initdata
: Uninlined the read/write reg/word functions.
Oskar Schirmer : oskar@scara.com
: HiCO.SH4 (superh) support added (irq#1, cs89x0_media=)
*/
/* Always include 'config.h' first in case the user wants to turn on
...
...
@@ -156,6 +159,10 @@ static char version[] __initdata =
static
unsigned
int
netcard_portlist
[]
__initdata
=
{
0x80090303
,
0x300
,
0x320
,
0x340
,
0x360
,
0x200
,
0x220
,
0x240
,
0x260
,
0x280
,
0x2a0
,
0x2c0
,
0x2e0
,
0
};
static
unsigned
int
cs8900_irq_map
[]
=
{
12
,
0
,
0
,
0
};
#elif defined(CONFIG_SH_HICOSH4)
static
unsigned
int
netcard_portlist
[]
__initdata
=
{
0x0300
,
0
};
static
unsigned
int
cs8900_irq_map
[]
=
{
1
,
0
,
0
,
0
};
#else
static
unsigned
int
netcard_portlist
[]
__initdata
=
{
0x300
,
0x320
,
0x340
,
0x360
,
0x200
,
0x220
,
0x240
,
0x260
,
0x280
,
0x2a0
,
0x2c0
,
0x2e0
,
0
};
...
...
@@ -247,6 +254,20 @@ static int __init dma_fn(char *str)
__setup
(
"cs89x0_dma="
,
dma_fn
);
#endif
/* !defined(MODULE) && (ALLOW_DMA != 0) */
#ifndef MODULE
static
int
g_cs89x0_media__force
;
static
int
__init
media_fn
(
char
*
str
)
{
if
(
!
strcmp
(
str
,
"rj45"
))
g_cs89x0_media__force
=
FORCE_RJ45
;
else
if
(
!
strcmp
(
str
,
"aui"
))
g_cs89x0_media__force
=
FORCE_AUI
;
else
if
(
!
strcmp
(
str
,
"bnc"
))
g_cs89x0_media__force
=
FORCE_BNC
;
return
1
;
}
__setup
(
"cs89x0_media="
,
media_fn
);
#endif
/* Check for a network adaptor of this type, and return '0' iff one exists.
If dev->base_addr == 0, probe all likely locations.
...
...
@@ -382,6 +403,9 @@ cs89x0_probe1(struct net_device *dev, int ioaddr)
lp
->
dma
=
g_cs89x0_dma
;
lp
->
dmasize
=
16
;
/* Could make this an option... */
}
#endif
#ifndef MODULE
lp
->
force
=
g_cs89x0_media__force
;
#endif
}
lp
=
(
struct
net_local
*
)
dev
->
priv
;
...
...
@@ -394,6 +418,12 @@ cs89x0_probe1(struct net_device *dev, int ioaddr)
goto
out1
;
}
#ifdef CONFIG_SH_HICOSH4
/* truely reset the chip */
outw
(
0x0114
,
ioaddr
+
ADD_PORT
);
outw
(
0x0040
,
ioaddr
+
DATA_PORT
);
#endif
/* if they give us an odd I/O address, then do ONE write to
the address port, to get it back to address zero, where we
expect to find the EISA signature word. An IO with a base of 0x3
...
...
@@ -413,7 +443,7 @@ cs89x0_probe1(struct net_device *dev, int ioaddr)
}
printk
(
"PP_addr=0x%x
\n
"
,
inw
(
ioaddr
+
ADD_PORT
));
if
(
inw
(
ioaddr
+
DATA_PORT
)
!=
CHIP_EISA_ID_SIG
)
{
if
(
inw
(
ioaddr
+
DATA_PORT
)
!=
CHIP_EISA_ID_SIG
)
{
printk
(
KERN_ERR
"%s: incorrect signature 0x%x
\n
"
,
dev
->
name
,
inw
(
ioaddr
+
DATA_PORT
));
retval
=
-
ENODEV
;
...
...
@@ -454,6 +484,39 @@ printk("PP_addr=0x%x\n", inw(ioaddr + ADD_PORT));
EEPROM read on reset. So, if the chip says it read the EEPROM
the driver will always do *something* instead of complain that
adapter_cnf is 0. */
#ifdef CONFIG_SH_HICOSH4
if
(
1
)
{
/* For the HiCO.SH4 board, things are different: we don't
have EEPROM, but there is some data in flash, so we go
get it there directly (MAC). */
__u16
*
confd
;
short
cnt
;
if
(((
*
(
volatile
__u32
*
)
0xa0013ff0
)
&
0x00ffffff
)
==
0x006c3000
)
{
confd
=
(
__u16
*
)
0xa0013fc0
;
}
else
{
confd
=
(
__u16
*
)
0xa001ffc0
;
}
cnt
=
(
*
confd
++
&
0x00ff
)
>>
1
;
while
(
--
cnt
>
0
)
{
__u16
j
=
*
confd
++
;
switch
(
j
&
0x0fff
)
{
case
PP_IA
:
for
(
i
=
0
;
i
<
ETH_ALEN
/
2
;
i
++
)
{
dev
->
dev_addr
[
i
*
2
]
=
confd
[
i
]
&
0xFF
;
dev
->
dev_addr
[
i
*
2
+
1
]
=
confd
[
i
]
>>
8
;
}
break
;
}
j
=
(
j
>>
12
)
+
1
;
confd
+=
j
;
cnt
-=
j
;
}
}
else
#endif
if
((
readreg
(
dev
,
PP_SelfST
)
&
(
EEPROM_OK
|
EEPROM_PRESENT
))
==
(
EEPROM_OK
|
EEPROM_PRESENT
))
{
/* Load the MAC. */
...
...
@@ -507,6 +570,11 @@ printk("PP_addr=0x%x\n", inw(ioaddr + ADD_PORT));
printk
(
"
\n
"
);
/* First check to see if an EEPROM is attached. */
#ifdef CONFIG_SH_HICOSH4
/* no EEPROM on HiCO, don't hazzle with it here */
if
(
1
)
{
printk
(
KERN_NOTICE
"cs89x0: No EEPROM on HiCO.SH4
\n
"
);
}
else
#endif
if
((
readreg
(
dev
,
PP_SelfST
)
&
EEPROM_PRESENT
)
==
0
)
printk
(
KERN_WARNING
"cs89x0: No EEPROM, relying on command line....
\n
"
);
else
if
(
get_eeprom_data
(
dev
,
START_EEPROM_DATA
,
CHKSUM_LEN
,
eeprom_buff
)
<
0
)
{
...
...
@@ -616,10 +684,10 @@ printk("PP_addr=0x%x\n", inw(ioaddr + ADD_PORT));
}
/* print the ethernet address. */
printk
(
", MAC
"
);
printk
(
", MAC"
);
for
(
i
=
0
;
i
<
ETH_ALEN
;
i
++
)
{
printk
(
"%
s%02x"
,
i
?
":"
:
""
,
dev
->
dev_addr
[
i
]);
printk
(
"%
c%02x"
,
i
?
':'
:
' '
,
dev
->
dev_addr
[
i
]);
}
dev
->
open
=
net_open
;
...
...
@@ -1046,6 +1114,7 @@ net_open(struct net_device *dev)
int
i
;
int
ret
;
#ifndef CONFIG_SH_HICOSH4
/* uses irq#1, so this wont work */
if
(
dev
->
irq
<
2
)
{
/* Allow interrupts to be generated by the chip */
/* Cirrus' release had this: */
...
...
@@ -1056,7 +1125,7 @@ net_open(struct net_device *dev)
writereg
(
dev
,
PP_BusCTL
,
ENABLE_IRQ
|
MEMORY_ON
);
for
(
i
=
2
;
i
<
CS8920_NO_INTS
;
i
++
)
{
if
((
1
<<
dev
->
irq
)
&
lp
->
irq_map
)
{
if
((
1
<<
i
)
&
lp
->
irq_map
)
{
if
(
request_irq
(
i
,
net_interrupt
,
0
,
dev
->
name
,
dev
)
==
0
)
{
dev
->
irq
=
i
;
write_irq
(
dev
,
lp
->
chip_type
,
i
);
...
...
@@ -1072,7 +1141,10 @@ net_open(struct net_device *dev)
ret
=
-
EAGAIN
;
goto
bad_out
;
}
}
else
{
}
else
#endif
{
if
(((
1
<<
dev
->
irq
)
&
lp
->
irq_map
)
==
0
)
{
printk
(
KERN_ERR
"%s: IRQ %d is not in our map of allowable IRQs, which is %x
\n
"
,
dev
->
name
,
dev
->
irq
,
lp
->
irq_map
);
...
...
drivers/net/cs89x0.h
View file @
096cbcc6
...
...
@@ -437,7 +437,11 @@
#define IRQ_MAP_EEPROM_DATA 0x0046
/* Offset into eeprom for the IRQ map */
#define IRQ_MAP_LEN 0x0004
/* No of bytes to read for the IRQ map */
#define PNP_IRQ_FRMT 0x0022
/* PNP small item IRQ format */
#ifdef CONFIG_SH_HICOSH4
#define CS8900_IRQ_MAP 0x0002
/* HiCO-SH4 board has its IRQ on #1 */
#else
#define CS8900_IRQ_MAP 0x1c20
/* This IRQ map is fixed */
#endif
#define CS8920_NO_INTS 0x0F
/* Max CS8920 interrupt select # */
...
...
drivers/net/mii.c
View file @
096cbcc6
...
...
@@ -146,6 +146,8 @@ int mii_ethtool_sset(struct mii_if_info *mii, struct ethtool_cmd *ecmd)
int
mii_link_ok
(
struct
mii_if_info
*
mii
)
{
/* first, a dummy read, needed to latch some MII phys */
mii
->
mdio_read
(
mii
->
dev
,
mii
->
phy_id
,
MII_BMSR
);
if
(
mii
->
mdio_read
(
mii
->
dev
,
mii
->
phy_id
,
MII_BMSR
)
&
BMSR_LSTATUS
)
return
1
;
return
0
;
...
...
drivers/net/tulip/21142.c
View file @
096cbcc6
...
...
@@ -172,8 +172,9 @@ void t21142_lnk_change(struct net_device *dev, int csr5)
int
i
;
for
(
i
=
0
;
i
<
tp
->
mtable
->
leafcount
;
i
++
)
if
(
tp
->
mtable
->
mleaf
[
i
].
media
==
dev
->
if_port
)
{
int
startup
=
!
((
tp
->
chip_id
==
DC21143
&&
tp
->
revision
==
65
));
tp
->
cur_index
=
i
;
tulip_select_media
(
dev
,
1
);
tulip_select_media
(
dev
,
startup
);
setup_done
=
1
;
break
;
}
...
...
drivers/net/tulip/ChangeLog
View file @
096cbcc6
2002-05-11 Juan Quintela <quintela@mandrakesoft.com>
* 21142.c (t21142_lnk_change): Revert earlier patch
to always reset phy; only conditionally do so now.
2002-05-03 Jeff Garzik <jgarzik@mandrakesoft.com>
* tulip_core (tulip_pci_tbl): Add new "comet"
pci id. Contributed by Ohta Kyuma.
2002-03-07 Jeff Garzik <jgarzik@mandrakesoft.com>
* tulip_core (tulip_mwi_config): Use new PCI API functions
...
...
drivers/net/tulip/tulip_core.c
View file @
096cbcc6
...
...
@@ -15,8 +15,8 @@
*/
#define DRV_NAME "tulip"
#define DRV_VERSION "1.1.1
2
"
#define DRV_RELDATE "Ma
r 07
, 2002"
#define DRV_VERSION "1.1.1
3
"
#define DRV_RELDATE "Ma
y 11
, 2002"
#include <linux/config.h>
#include <linux/module.h>
...
...
@@ -204,6 +204,7 @@ static struct pci_device_id tulip_pci_tbl[] __devinitdata = {
{
0x1317
,
0x0981
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
COMET
},
{
0x1317
,
0x0985
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
COMET
},
{
0x1317
,
0x1985
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
COMET
},
{
0x1317
,
0x9511
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
COMET
},
{
0x13D1
,
0xAB02
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
COMET
},
{
0x13D1
,
0xAB03
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
COMET
},
{
0x13D1
,
0xAB08
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
COMET
},
...
...
drivers/net/via-rhine.c
View file @
096cbcc6
...
...
@@ -9,8 +9,8 @@
a complete program and may only be used when the entire operating
system is licensed under the GPL.
This driver is designed for the VIA VT86
c100A Rhine-II PCI Fast Ethernet
controller. It also works with the older 3043 Rhine-I chip.
This driver is designed for the VIA VT86
C100A Rhine-I.
It also works with the 6102 Rhine-II, and 6105/6105M Rhine-III.
The author may be reached as becker@scyld.com, or C/O
Scyld Computing Corporation
...
...
@@ -81,14 +81,26 @@
- Add ethtool support
- Replace some MII-related magic numbers with constants
LK1.1.14 (jgarzik):
- Merge new PCI id from 'linuxfet' driver.
LK1.1.14 (Ivan G.):
- fixes comments for Rhine-III
- removes W_MAX_TIMEOUT (unused)
- adds HasDavicomPhy for Rhine-I (basis: linuxfet driver; my card
is R-I and has Davicom chip, flag is referenced in kernel driver)
- sends chip_id as a parameter to wait_for_reset since np is not
initialized on first call
- changes mmio "else if (chip_id==VT6102)" to "else" so it will work
for Rhine-III's (documentation says same bit is correct)
- transmit frame queue message is off by one - fixed
- adds IntrNormalSummary to "Something Wicked" exclusion list
so normal interrupts will not trigger the message (src: Donald Becker)
(Roger Lahti)
- cosmetic cleanups, remove 3 unused members of struct netdev_private
*/
#define DRV_NAME "via-rhine"
#define DRV_VERSION "1.1.14"
#define DRV_RELDATE "
Feb-12
-2002"
#define DRV_RELDATE "
May-3
-2002"
/* A few user-configurable values.
...
...
@@ -139,9 +151,6 @@ static const int multicast_filter_limit = 32;
#define PKT_BUF_SZ 1536
/* Size of each temporary Rx buffer.*/
/* max time out delay time */
#define W_MAX_TIMEOUT 0x0FFFU
#if !defined(__OPTIMIZE__) || !defined(__KERNEL__)
#warning You must compile this file with the correct options!
#warning See the last lines of the source file.
...
...
@@ -176,7 +185,7 @@ static char version[] __devinitdata =
KERN_INFO
DRV_NAME
".c:v1.10-LK"
DRV_VERSION
" "
DRV_RELDATE
" Written by Donald Becker
\n
"
KERN_INFO
" http://www.scyld.com/network/via-rhine.html
\n
"
;
static
char
shortname
[]
__devinitdata
=
DRV_NAME
;
static
char
shortname
[]
=
DRV_NAME
;
/* This driver was written to use PCI memory space, however most versions
...
...
@@ -320,8 +329,8 @@ enum pci_flags_bit {
enum
via_rhine_chips
{
VT86C100A
=
0
,
VT6102
,
VT3043
,
VT6105
,
VT6105M
};
struct
via_rhine_chip_info
{
...
...
@@ -346,21 +355,21 @@ enum chip_capability_flags {
static
struct
via_rhine_chip_info
via_rhine_chip_info
[]
__devinitdata
=
{
{
"VIA VT86C100A Rhine"
,
RHINE_IOTYPE
,
128
,
CanHaveMII
|
ReqTxAlign
},
CanHaveMII
|
ReqTxAlign
|
HasDavicomPhy
},
{
"VIA VT6102 Rhine-II"
,
RHINE_IOTYPE
,
256
,
CanHaveMII
|
HasWOL
},
{
"VIA VT3043 Rhine"
,
RHINE_IOTYPE
,
128
,
CanHaveMII
|
ReqTxAlign
},
{
"VIA VT6105 Rhine-III"
,
RHINE_IOTYPE
,
256
,
CanHaveMII
|
HasWOL
},
CanHaveMII
|
HasWOL
},
{
"VIA VT6105M Rhine-III"
,
RHINE_IOTYPE
,
256
,
CanHaveMII
|
HasWOL
},
};
static
struct
pci_device_id
via_rhine_pci_tbl
[]
__devinitdata
=
{
{
0x1106
,
0x
6100
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
VT86C100A
},
{
0x1106
,
0x
3043
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
VT86C100A
},
{
0x1106
,
0x3065
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
VT6102
},
{
0x1106
,
0x3043
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
VT3043
},
{
0x1106
,
0x3106
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
VT6105
},
{
0x1106
,
0x3053
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
VT6105M
},
{
0
,}
/* terminate list */
};
MODULE_DEVICE_TABLE
(
pci
,
via_rhine_pci_tbl
);
...
...
@@ -379,6 +388,11 @@ enum register_offsets {
StickyHW
=
0x83
,
WOLcrClr
=
0xA4
,
WOLcgClr
=
0xA7
,
PwrcsrClr
=
0xAC
,
};
/* Bits in ConfigD (select backoff algorithm (Ethernet capture effect)) */
enum
backoff_bits
{
BackOpt
=
0x01
,
BackAMD
=
0x02
,
BackDEC
=
0x04
,
BackRandom
=
0x08
};
#ifdef USE_MEM
/* Registers we check that mmio and reg are the same. */
int
mmio_verify_registers
[]
=
{
...
...
@@ -427,11 +441,11 @@ struct tx_desc {
u32
next_desc
;
};
/* Bits in *_desc.status */
enum
rx_status_bits
{
RxOK
=
0x8000
,
RxWholePkt
=
0x0300
,
RxErr
=
0x008F
};
/* Bits in *_desc.status */
enum
desc_status_bits
{
DescOwn
=
0x80000000
,
DescEndPacket
=
0x4000
,
DescIntr
=
0x1000
,
};
...
...
@@ -479,13 +493,10 @@ struct netdev_private {
u16
chip_cmd
;
/* Current setting for ChipCmd */
/* These values are keep track of the transceiver/media in use. */
unsigned
int
full_duplex
:
1
;
/* Full-duplex operation requested. */
unsigned
int
duplex_lock
:
1
;
unsigned
int
default_port
:
4
;
/* Last dev->if_port value. */
u8
tx_thresh
,
rx_thresh
;
/* MII transceiver section. */
u16
advertising
;
/* NWay media advertisement */
unsigned
char
phys
[
MAX_MII_CNT
];
/* MII device addresses. */
unsigned
int
mii_cnt
;
/* number of MIIs found, but only the first one is used */
u16
mii_status
;
/* last read MII status */
...
...
@@ -509,15 +520,13 @@ static int via_rhine_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
static
int
via_rhine_close
(
struct
net_device
*
dev
);
static
inline
void
clear_tally_counters
(
long
ioaddr
);
static
void
wait_for_reset
(
struct
net_device
*
dev
,
char
*
name
)
static
void
wait_for_reset
(
struct
net_device
*
dev
,
int
chip_id
,
char
*
name
)
{
struct
netdev_private
*
np
=
dev
->
priv
;
long
ioaddr
=
dev
->
base_addr
;
int
chip_id
=
np
->
chip_id
;
int
i
;
/*
3043
may need long delay after reset (dlink) */
if
(
chip_id
==
VT
3043
||
chip_id
==
VT
86C100A
)
/*
VT86C100A
may need long delay after reset (dlink) */
if
(
chip_id
==
VT86C100A
)
udelay
(
100
);
i
=
0
;
...
...
@@ -538,11 +547,11 @@ static void wait_for_reset(struct net_device *dev, char *name)
static
void
__devinit
enable_mmio
(
long
ioaddr
,
int
chip_id
)
{
int
n
;
if
(
chip_id
==
VT
3043
||
chip_id
==
VT
86C100A
)
{
if
(
chip_id
==
VT86C100A
)
{
/* More recent docs say that this bit is reserved ... */
n
=
inb
(
ioaddr
+
ConfigA
)
|
0x20
;
outb
(
n
,
ioaddr
+
ConfigA
);
}
else
if
(
chip_id
==
VT6102
)
{
}
else
{
n
=
inb
(
ioaddr
+
ConfigD
)
|
0x80
;
outb
(
n
,
ioaddr
+
ConfigD
);
}
...
...
@@ -666,7 +675,7 @@ static int __devinit via_rhine_init_one (struct pci_dev *pdev,
writew
(
CmdReset
,
ioaddr
+
ChipCmd
);
dev
->
base_addr
=
ioaddr
;
wait_for_reset
(
dev
,
shortname
);
wait_for_reset
(
dev
,
chip_id
,
shortname
);
/* Reload the station address from the EEPROM. */
#ifdef USE_IO
...
...
@@ -787,7 +796,7 @@ static int __devinit via_rhine_init_one (struct pci_dev *pdev,
(
option
&
0x300
?
100
:
10
),
(
option
&
0x220
?
"full"
:
"half"
));
if
(
np
->
mii_cnt
)
mdio_write
(
dev
,
np
->
phys
[
0
],
0
,
mdio_write
(
dev
,
np
->
phys
[
0
],
MII_BMCR
,
((
option
&
0x300
)
?
0x2000
:
0
)
|
/* 100mbps? */
((
option
&
0x220
)
?
0x0100
:
0
));
/* Full duplex? */
}
...
...
@@ -971,9 +980,9 @@ static void init_registers(struct net_device *dev)
writeb
(
dev
->
dev_addr
[
i
],
ioaddr
+
StationAddr
+
i
);
/* Initialize other registers. */
writew
(
0x0006
,
ioaddr
+
PCIBusConfig
);
/*
Tune configuration???
*/
/* Configure
the
FIFO thresholds. */
writeb
(
0x20
,
ioaddr
+
TxConfig
);
/* Initial threshold 32 bytes */
writew
(
0x0006
,
ioaddr
+
PCIBusConfig
);
/*
Store & forward
*/
/* Configure
initial
FIFO thresholds. */
writeb
(
0x20
,
ioaddr
+
TxConfig
);
np
->
tx_thresh
=
0x20
;
np
->
rx_thresh
=
0x60
;
/* Written in via_rhine_set_rx_mode(). */
...
...
@@ -1032,13 +1041,13 @@ static void mdio_write(struct net_device *dev, int phy_id, int regnum, int value
if
(
phy_id
==
np
->
phys
[
0
])
{
switch
(
regnum
)
{
case
0
:
/* Is user forcing speed/duplex? */
case
MII_BMCR
:
/* Is user forcing speed/duplex? */
if
(
value
&
0x9000
)
/* Autonegotiation. */
np
->
mii_if
.
duplex_lock
=
0
;
else
np
->
mii_if
.
full_duplex
=
(
value
&
0x0100
)
?
1
:
0
;
break
;
case
4
:
case
MII_ADVERTISE
:
np
->
mii_if
.
advertising
=
value
;
break
;
}
...
...
@@ -1077,7 +1086,7 @@ static int via_rhine_open(struct net_device *dev)
return
i
;
alloc_rbufs
(
dev
);
alloc_tbufs
(
dev
);
wait_for_reset
(
dev
,
dev
->
name
);
wait_for_reset
(
dev
,
np
->
chip_id
,
dev
->
name
);
init_registers
(
dev
);
if
(
debug
>
2
)
printk
(
KERN_DEBUG
"%s: Done via_rhine_open(), status %4.4x "
...
...
@@ -1184,7 +1193,7 @@ static void via_rhine_tx_timeout (struct net_device *dev)
alloc_rbufs
(
dev
);
/* Reinitialize the hardware. */
wait_for_reset
(
dev
,
dev
->
name
);
wait_for_reset
(
dev
,
np
->
chip_id
,
dev
->
name
);
init_registers
(
dev
);
spin_unlock
(
&
np
->
lock
);
...
...
@@ -1254,7 +1263,7 @@ static int via_rhine_start_tx(struct sk_buff *skb, struct net_device *dev)
if
(
debug
>
4
)
{
printk
(
KERN_DEBUG
"%s: Transmit frame #%d queued in slot %d.
\n
"
,
dev
->
name
,
np
->
cur_tx
,
entry
);
dev
->
name
,
np
->
cur_tx
-
1
,
entry
);
}
return
0
;
}
...
...
@@ -1505,8 +1514,8 @@ static void via_rhine_error(struct net_device *dev, int intr_status)
printk
(
KERN_INFO
"%s: Transmitter underrun, increasing Tx "
"threshold setting to %2.2x.
\n
"
,
dev
->
name
,
np
->
tx_thresh
);
}
if
(
(
intr_status
&
~
(
IntrLinkChange
|
IntrStatsMax
|
IntrTxAbort
|
IntrTxAborted
)
))
{
if
(
intr_status
&
~
(
IntrLinkChange
|
IntrStatsMax
|
IntrTxAbort
|
IntrTxAborted
|
IntrNormalSummary
))
{
if
(
debug
>
1
)
printk
(
KERN_ERR
"%s: Something Wicked happened! %4.4x.
\n
"
,
dev
->
name
,
intr_status
);
...
...
drivers/net/wan/pc300_drv.c
View file @
096cbcc6
...
...
@@ -6,7 +6,7 @@ static char rcsid[] =
* pc300.c Cyclades-PC300(tm) Driver.
*
* Author: Ivan Passos <ivan@cyclades.com>
* Maintainer:
Daniela Squassoni <daniela
@cyclades.com>
* Maintainer:
Henrique Gobbi <henrique
@cyclades.com>
*
* Copyright: (c) 1999-2002 Cyclades Corp.
*
...
...
drivers/net/wan/pc300_tty.c
View file @
096cbcc6
...
...
@@ -46,7 +46,7 @@
#include <linux/init.h>
#include <linux/netdevice.h>
#include <linux/spinlock.h>
#include <linux/
malloc
.h>
#include <linux/
slab
.h>
#include <linux/if.h>
#include <asm/io.h>
#include <asm/uaccess.h>
...
...
include/net/iw_handler.h
View file @
096cbcc6
...
...
@@ -245,7 +245,8 @@
/* Wrapper level flags */
#define IW_DESCR_FLAG_DUMP 0x0001
/* Not part of the dump command */
#define IW_DESCR_FLAG_EVENT 0x0002
/* Generate an event on SET */
#define IW_DESCR_FLAG_RESTRICT 0x0004
/* GET request is ROOT only */
#define IW_DESCR_FLAG_RESTRICT 0x0004
/* GET : request is ROOT only */
/* SET : Omit payload from generated iwevent */
/* Driver level flags */
#define IW_DESCR_FLAG_WAIT 0x0100
/* Wait for driver event */
...
...
net/core/wireless.c
View file @
096cbcc6
...
...
@@ -28,11 +28,13 @@
*
* v3 - 19.12.01 - Jean II
* o Make sure we don't go out of standard_ioctl[] in ioctl_standard_call
* o Fix /proc/net/wireless to handle __u8 to __s8 change in iwqual
* o Add event dispatcher function
* o Add event description
* o Propagate events as rtnetlink IFLA_WIRELESS option
* o Generate event on selected SET requests
*
* v4 - 18.04.01 - Jean II
* o Fix stupid off by one in iw_ioctl_description : IW_ESSID_MAX_SIZE + 1
*/
/***************************** INCLUDES *****************************/
...
...
@@ -122,13 +124,13 @@ static const struct iw_ioctl_description standard_ioctl[] = {
/* SIOCGIWSCAN */
{
IW_HEADER_TYPE_POINT
,
0
,
1
,
0
,
IW_SCAN_MAX_DATA
,
0
},
/* SIOCSIWESSID */
{
IW_HEADER_TYPE_POINT
,
0
,
1
,
0
,
IW_ESSID_MAX_SIZE
,
IW_DESCR_FLAG_EVENT
},
{
IW_HEADER_TYPE_POINT
,
0
,
1
,
0
,
IW_ESSID_MAX_SIZE
+
1
,
IW_DESCR_FLAG_EVENT
},
/* SIOCGIWESSID */
{
IW_HEADER_TYPE_POINT
,
0
,
1
,
0
,
IW_ESSID_MAX_SIZE
,
IW_DESCR_FLAG_DUMP
},
{
IW_HEADER_TYPE_POINT
,
0
,
1
,
0
,
IW_ESSID_MAX_SIZE
+
1
,
IW_DESCR_FLAG_DUMP
},
/* SIOCSIWNICKN */
{
IW_HEADER_TYPE_POINT
,
0
,
1
,
0
,
IW_ESSID_MAX_SIZE
,
0
},
{
IW_HEADER_TYPE_POINT
,
0
,
1
,
0
,
IW_ESSID_MAX_SIZE
+
1
,
0
},
/* SIOCGIWNICKN */
{
IW_HEADER_TYPE_POINT
,
0
,
1
,
0
,
IW_ESSID_MAX_SIZE
,
0
},
{
IW_HEADER_TYPE_POINT
,
0
,
1
,
0
,
IW_ESSID_MAX_SIZE
+
1
,
0
},
/* -- hole -- */
{
IW_HEADER_TYPE_NULL
,
0
,
0
,
0
,
0
,
0
},
/* -- hole -- */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment