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
e7c0c64e
Commit
e7c0c64e
authored
Jun 02, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://gkernel.bkbits.net/net-drivers-2.6
into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents
651bea8c
af39cd4d
Changes
25
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
1042 additions
and
467 deletions
+1042
-467
drivers/net/Kconfig
drivers/net/Kconfig
+22
-26
drivers/net/plip.c
drivers/net/plip.c
+3
-0
drivers/net/ppp_async.c
drivers/net/ppp_async.c
+2
-2
drivers/net/ppp_synctty.c
drivers/net/ppp_synctty.c
+2
-2
drivers/net/wan/Makefile
drivers/net/wan/Makefile
+5
-2
drivers/net/wan/c101.c
drivers/net/wan/c101.c
+0
-2
drivers/net/wan/hdlc_cisco.c
drivers/net/wan/hdlc_cisco.c
+14
-8
drivers/net/wan/hdlc_fr.c
drivers/net/wan/hdlc_fr.c
+11
-9
drivers/net/wan/hdlc_generic.c
drivers/net/wan/hdlc_generic.c
+58
-50
drivers/net/wan/wanxlfw.inc_shipped
drivers/net/wan/wanxlfw.inc_shipped
+0
-0
drivers/net/wireless/prism54/isl_38xx.c
drivers/net/wireless/prism54/isl_38xx.c
+1
-1
drivers/net/wireless/prism54/isl_38xx.h
drivers/net/wireless/prism54/isl_38xx.h
+1
-1
drivers/net/wireless/prism54/isl_ioctl.c
drivers/net/wireless/prism54/isl_ioctl.c
+268
-124
drivers/net/wireless/prism54/isl_ioctl.h
drivers/net/wireless/prism54/isl_ioctl.h
+1
-1
drivers/net/wireless/prism54/isl_oid.h
drivers/net/wireless/prism54/isl_oid.h
+22
-7
drivers/net/wireless/prism54/islpci_dev.c
drivers/net/wireless/prism54/islpci_dev.c
+6
-4
drivers/net/wireless/prism54/islpci_dev.h
drivers/net/wireless/prism54/islpci_dev.h
+10
-1
drivers/net/wireless/prism54/islpci_eth.c
drivers/net/wireless/prism54/islpci_eth.c
+109
-34
drivers/net/wireless/prism54/islpci_eth.h
drivers/net/wireless/prism54/islpci_eth.h
+43
-1
drivers/net/wireless/prism54/islpci_hotplug.c
drivers/net/wireless/prism54/islpci_hotplug.c
+1
-1
drivers/net/wireless/prism54/islpci_mgt.c
drivers/net/wireless/prism54/islpci_mgt.c
+1
-1
drivers/net/wireless/prism54/islpci_mgt.h
drivers/net/wireless/prism54/islpci_mgt.h
+1
-1
drivers/net/wireless/prism54/oid_mgt.c
drivers/net/wireless/prism54/oid_mgt.c
+449
-185
drivers/net/wireless/prism54/oid_mgt.h
drivers/net/wireless/prism54/oid_mgt.h
+9
-2
include/linux/hdlc.h
include/linux/hdlc.h
+3
-2
No files found.
drivers/net/Kconfig
View file @
e7c0c64e
...
...
@@ -1874,25 +1874,12 @@ endmenu
# Gigabit Ethernet
#
menu "
Gigabit Ethernet (1000/10
000 Mbit)"
menu "
Ethernet (1
000 Mbit)"
depends on NETDEVICES
config NET_GIGE
bool "Gigabit Ethernet (1000/10000 Mbit) controller support"
depends on NETDEVICES && NET_ETHERNET && (PCI || SBUS)
help
Gigabit ethernet. It's yummy and fast, fast, fast.
Note that the answer to this question doesn't directly affect the
kernel: saying N will just cause the configurator to skip all
the questions about this class of network cards. If you say Y, you
will be asked for your specific card in the following questions.
If you are unsure, say Y.
config ACENIC
tristate "Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit support"
depends on PCI
&& NET_GIGE
depends on PCI
---help---
Say Y here if you have an Alteon AceNIC, 3Com 3C985(B), NetGear
GA620, SGI Gigabit or Farallon PN9000-SX PCI Gigabit Ethernet
...
...
@@ -1919,7 +1906,7 @@ config ACENIC_OMIT_TIGON_I
config DL2K
tristate "D-Link DL2000-based Gigabit Ethernet support"
depends on PCI
&& NET_GIGE
depends on PCI
select CRC32
help
This driver supports D-Link 2000-based gigabit ethernet cards, which
...
...
@@ -1932,7 +1919,7 @@ config DL2K
config E1000
tristate "Intel(R) PRO/1000 Gigabit Ethernet support"
depends on PCI
&& NET_GIGE
depends on PCI
---help---
This driver supports Intel(R) PRO/1000 gigabit ethernet family of
adapters, which includes:
...
...
@@ -1979,7 +1966,7 @@ config E1000_NAPI
config MYRI_SBUS
tristate "MyriCOM Gigabit Ethernet support"
depends on SBUS
&& NET_GIGE
depends on SBUS
help
This driver supports MyriCOM Sbus gigabit Ethernet cards.
...
...
@@ -1988,7 +1975,7 @@ config MYRI_SBUS
config NS83820
tristate "National Semiconduct DP83820 support"
depends on PCI
&& NET_GIGE
depends on PCI
help
This is a driver for the National Semiconductor DP83820 series
of gigabit ethernet MACs. Cards using this chipset include
...
...
@@ -1998,7 +1985,7 @@ config NS83820
config HAMACHI
tristate "Packet Engines Hamachi GNIC-II support"
depends on PCI
&& NET_GIGE
depends on PCI
select MII
help
If you have a Gigabit Ethernet card of this type, say Y and read
...
...
@@ -2011,7 +1998,7 @@ config HAMACHI
config YELLOWFIN
tristate "Packet Engines Yellowfin Gigabit-NIC support (EXPERIMENTAL)"
depends on PCI && EXPERIMENTAL
&& NET_GIGE
depends on PCI && EXPERIMENTAL
select CRC32
---help---
Say Y here if you have a Packet Engines G-NIC PCI Gigabit Ethernet
...
...
@@ -2025,7 +2012,7 @@ config YELLOWFIN
config R8169
tristate "Realtek 8169 gigabit ethernet support"
depends on PCI
&& NET_GIGE
depends on PCI
select CRC32
---help---
Say Y here if you have a Realtek 8169 PCI Gigabit Ethernet adapter.
...
...
@@ -2035,7 +2022,7 @@ config R8169
config SK98LIN
tristate "Marvell Yukon Chipset / SysKonnect SK-98xx Support"
depends on PCI
&& NET_GIGE
depends on PCI
---help---
Say Y here if you have a Marvell Yukon or SysKonnect SK-98xx/SK-95xx
compliant Gigabit Ethernet Adapter. The following adapters are supported
...
...
@@ -2114,16 +2101,25 @@ config SK98LIN
config TIGON3
tristate "Broadcom Tigon3 support"
depends on PCI
&& NET_GIGE
depends on PCI
help
This driver supports Broadcom Tigon3 based gigabit Ethernet cards.
To compile this driver as a module, choose M here: the module
will be called tg3. This is recommended.
endmenu
#
# 10 Gigabit Ethernet
#
menu "Ethernet (10000 Mbit)"
depends on NETDEVICES
config IXGB
tristate "Intel(R) PRO/10GbE support"
depends on PCI
&& NET_GIGE
depends on PCI
---help---
This driver supports Intel(R) PRO/10GbE family of
adapters, which includes:
...
...
@@ -2155,7 +2151,7 @@ config IXGB_NAPI
config S2IO
tristate "S2IO 10Gbe XFrame NIC"
depends on PCI
&& NET_GIGE
depends on PCI
---help---
This driver supports the 10Gbe XFrame NIC of S2IO.
For help regarding driver compilation, installation and
...
...
drivers/net/plip.c
View file @
e7c0c64e
...
...
@@ -1219,6 +1219,9 @@ plip_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
struct
net_local
*
nl
=
netdev_priv
(
dev
);
struct
plipconf
*
pc
=
(
struct
plipconf
*
)
&
rq
->
ifr_data
;
if
(
cmd
!=
SIOCDEVPLIP
)
return
-
EOPNOTSUPP
;
switch
(
pc
->
pcmd
)
{
case
PLIP_GET_TIMEOUT
:
pc
->
trigger
=
nl
->
trigger
;
...
...
drivers/net/ppp_async.c
View file @
e7c0c64e
...
...
@@ -205,10 +205,10 @@ ppp_asynctty_close(struct tty_struct *tty)
{
struct
asyncppp
*
ap
;
write_lock
(
&
disc_data_lock
);
write_lock
_irq
(
&
disc_data_lock
);
ap
=
tty
->
disc_data
;
tty
->
disc_data
=
0
;
write_unlock
(
&
disc_data_lock
);
write_unlock
_irq
(
&
disc_data_lock
);
if
(
ap
==
0
)
return
;
...
...
drivers/net/ppp_synctty.c
View file @
e7c0c64e
...
...
@@ -251,10 +251,10 @@ ppp_sync_close(struct tty_struct *tty)
{
struct
syncppp
*
ap
;
write_lock
(
&
disc_data_lock
);
write_lock
_irq
(
&
disc_data_lock
);
ap
=
tty
->
disc_data
;
tty
->
disc_data
=
0
;
write_unlock
(
&
disc_data_lock
);
write_unlock
_irq
(
&
disc_data_lock
);
if
(
ap
==
0
)
return
;
...
...
drivers/net/wan/Makefile
View file @
e7c0c64e
...
...
@@ -61,6 +61,9 @@ obj-$(CONFIG_C101) += c101.o
obj-$(CONFIG_WANXL)
+=
wanxl.o
obj-$(CONFIG_PCI200SYN)
+=
pci200syn.o
clean-files
:=
wanxlfw.inc
$(obj)/wanxl.o
:
$(obj)/wanxlfw.inc
ifeq
($(CONFIG_WANXL_BUILD_FIRMWARE),y)
ifeq
($(ARCH),m68k)
AS68K
=
$(AS)
...
...
@@ -72,12 +75,12 @@ endif
quiet_cmd_build_wanxlfw
=
BLD FW
$@
cmd_build_wanxlfw
=
\
$(CPP)
-Wp
,-MD,
$(depfile)
-I
include
$(obj)
/wanxlfw.S
|
$(AS68K)
-m68360
-o
$(obj)
/wanxlfw.o
;
\
$(CPP)
-Wp
,-MD,
$(depfile)
-I
$(srctree)
/include
$<
|
$(AS68K)
-m68360
-o
$(obj)
/wanxlfw.o
;
\
$(LD68K)
--oformat
binary
-Ttext
0x1000
$(obj)
/wanxlfw.o
-o
$(obj)
/wanxlfw.bin
;
\
hexdump
-ve
'"\n" 16/1 "0x%02X,"'
$(obj)
/wanxlfw.bin |
sed
's/0x ,//g;1s/^/static u8 firmware[]={/;$$s/,$$/\n};\n/'
>
$(obj)
/wanxlfw.inc
;
\
rm
-f
$(obj)
/wanxlfw.bin
$(obj)
/wanxlfw.o
$(obj)/wanxlfw.inc
:
$(
obj
)/wanxlfw.S
$(obj)/wanxlfw.inc
:
$(
src
)/wanxlfw.S
$(
call
if_changed_dep,build_wanxlfw
)
targets
+=
wanxlfw.inc
endif
drivers/net/wan/c101.c
View file @
e7c0c64e
...
...
@@ -379,8 +379,6 @@ static int __init c101_run(unsigned long irq, unsigned long winbase)
return
result
;
}
/* XXX: are we OK with having that done when card is already up? */
sca_init_sync_port
(
card
);
/* Set up C101 memory */
hdlc_set_carrier
(
!
(
sca_in
(
MSCI1_OFFSET
+
ST3
,
card
)
&
ST3_DCD
),
dev
);
...
...
drivers/net/wan/hdlc_cisco.c
View file @
e7c0c64e
...
...
@@ -180,7 +180,8 @@ static int cisco_rx(struct sk_buff *skb)
case
CISCO_KEEPALIVE_REQ
:
hdlc
->
state
.
cisco
.
rxseq
=
ntohl
(
cisco_data
->
par1
);
if
(
ntohl
(
cisco_data
->
par2
)
==
hdlc
->
state
.
cisco
.
txseq
)
{
if
(
hdlc
->
state
.
cisco
.
request_sent
&&
ntohl
(
cisco_data
->
par2
)
==
hdlc
->
state
.
cisco
.
txseq
)
{
hdlc
->
state
.
cisco
.
last_poll
=
jiffies
;
if
(
!
hdlc
->
state
.
cisco
.
up
)
{
u32
sec
,
min
,
hrs
,
days
;
...
...
@@ -192,8 +193,9 @@ static int cisco_rx(struct sk_buff *skb)
"uptime %ud%uh%um%us)
\n
"
,
dev
->
name
,
days
,
hrs
,
min
,
sec
);
netif_carrier_on
(
dev
);
hdlc
->
state
.
cisco
.
up
=
1
;
}
hdlc
->
state
.
cisco
.
up
=
1
;
}
dev_kfree_skb_any
(
skb
);
...
...
@@ -219,17 +221,18 @@ static void cisco_timer(unsigned long arg)
struct
net_device
*
dev
=
(
struct
net_device
*
)
arg
;
hdlc_device
*
hdlc
=
dev_to_hdlc
(
dev
);
if
(
hdlc
->
state
.
cisco
.
up
&&
jiffies
-
hdlc
->
state
.
cisco
.
last_poll
>=
hdlc
->
state
.
cisco
.
settings
.
timeout
*
HZ
)
{
if
(
hdlc
->
state
.
cisco
.
up
&&
time_after
(
jiffies
,
hdlc
->
state
.
cisco
.
last_poll
+
hdlc
->
state
.
cisco
.
settings
.
timeout
*
HZ
))
{
hdlc
->
state
.
cisco
.
up
=
0
;
printk
(
KERN_INFO
"%s: Link down
\n
"
,
dev
->
name
);
if
(
netif_carrier_ok
(
dev
))
netif_carrier_off
(
dev
);
netif_carrier_off
(
dev
);
}
cisco_keepalive_send
(
dev
,
CISCO_KEEPALIVE_REQ
,
++
hdlc
->
state
.
cisco
.
txseq
,
hdlc
->
state
.
cisco
.
rxseq
);
hdlc
->
state
.
cisco
.
request_sent
=
1
;
hdlc
->
state
.
cisco
.
timer
.
expires
=
jiffies
+
hdlc
->
state
.
cisco
.
settings
.
interval
*
HZ
;
hdlc
->
state
.
cisco
.
timer
.
function
=
cisco_timer
;
...
...
@@ -242,8 +245,8 @@ static void cisco_timer(unsigned long arg)
static
void
cisco_start
(
struct
net_device
*
dev
)
{
hdlc_device
*
hdlc
=
dev_to_hdlc
(
dev
);
hdlc
->
state
.
cisco
.
last_poll
=
0
;
hdlc
->
state
.
cisco
.
up
=
0
;
hdlc
->
state
.
cisco
.
request_sent
=
0
;
hdlc
->
state
.
cisco
.
txseq
=
hdlc
->
state
.
cisco
.
rxseq
=
0
;
init_timer
(
&
hdlc
->
state
.
cisco
.
timer
);
...
...
@@ -257,9 +260,12 @@ static void cisco_start(struct net_device *dev)
static
void
cisco_stop
(
struct
net_device
*
dev
)
{
del_timer_sync
(
&
dev_to_hdlc
(
dev
)
->
state
.
cisco
.
timer
);
hdlc_device
*
hdlc
=
dev_to_hdlc
(
dev
);
del_timer_sync
(
&
hdlc
->
state
.
cisco
.
timer
);
if
(
netif_carrier_ok
(
dev
))
netif_carrier_off
(
dev
);
hdlc
->
state
.
cisco
.
up
=
0
;
hdlc
->
state
.
cisco
.
request_sent
=
0
;
}
...
...
drivers/net/wan/hdlc_fr.c
View file @
e7c0c64e
...
...
@@ -584,8 +584,9 @@ static void fr_timer(unsigned long arg)
u32
list
;
if
(
hdlc
->
state
.
fr
.
settings
.
dce
)
reliable
=
(
jiffies
-
hdlc
->
state
.
fr
.
last_poll
<
hdlc
->
state
.
fr
.
settings
.
t392
*
HZ
);
reliable
=
hdlc
->
state
.
fr
.
request
&&
time_before
(
jiffies
,
hdlc
->
state
.
fr
.
last_poll
+
hdlc
->
state
.
fr
.
settings
.
t392
*
HZ
);
else
{
hdlc
->
state
.
fr
.
last_errors
<<=
1
;
/* Shift the list */
if
(
hdlc
->
state
.
fr
.
request
)
{
...
...
@@ -617,6 +618,7 @@ static void fr_timer(unsigned long arg)
fr_lmi_send
(
dev
,
hdlc
->
state
.
fr
.
n391cnt
==
0
);
hdlc
->
state
.
fr
.
last_poll
=
jiffies
;
hdlc
->
state
.
fr
.
request
=
1
;
hdlc
->
state
.
fr
.
timer
.
expires
=
jiffies
+
hdlc
->
state
.
fr
.
settings
.
t391
*
HZ
;
...
...
@@ -689,6 +691,7 @@ static int fr_lmi_recv(struct net_device *dev, struct sk_buff *skb)
dev
->
name
,
reptype
);
return
1
;
}
hdlc
->
state
.
fr
.
last_poll
=
jiffies
;
}
error
=
0
;
...
...
@@ -728,7 +731,12 @@ static int fr_lmi_recv(struct net_device *dev, struct sk_buff *skb)
/* DTE */
if
(
reptype
!=
LMI_FULLREP
||
error
)
hdlc
->
state
.
fr
.
request
=
0
;
/* got response, no request pending */
if
(
error
)
return
0
;
if
(
reptype
!=
LMI_FULLREP
)
return
0
;
stat_len
=
3
;
...
...
@@ -829,9 +837,6 @@ static int fr_rx(struct sk_buff *skb)
if
(
fr_lmi_recv
(
ndev
,
skb
))
goto
rx_error
;
else
{
/* No request pending */
hdlc
->
state
.
fr
.
request
=
0
;
hdlc
->
state
.
fr
.
last_poll
=
jiffies
;
dev_kfree_skb_any
(
skb
);
return
NET_RX_SUCCESS
;
}
...
...
@@ -946,9 +951,6 @@ static void fr_start(struct net_device *dev)
printk
(
KERN_DEBUG
"fr_start
\n
"
);
#endif
if
(
hdlc
->
state
.
fr
.
settings
.
lmi
!=
LMI_NONE
)
{
if
(
netif_carrier_ok
(
dev
))
netif_carrier_off
(
dev
);
hdlc
->
state
.
fr
.
last_poll
=
0
;
hdlc
->
state
.
fr
.
reliable
=
0
;
hdlc
->
state
.
fr
.
dce_changed
=
1
;
hdlc
->
state
.
fr
.
request
=
0
;
...
...
drivers/net/wan/hdlc_generic.c
View file @
e7c0c64e
...
...
@@ -15,6 +15,11 @@
* * X.25
*
* Use sethdlc utility to set line parameters, protocol and PVCs
*
* How does it work:
* - proto.open(), close(), start(), stop() calls are serialized.
* The order is: open, [ start, stop ... ] close ...
* - proto.start() and stop() are called with spin_lock_irq held.
*/
#include <linux/config.h>
...
...
@@ -33,7 +38,7 @@
#include <linux/hdlc.h>
static
const
char
*
version
=
"HDLC support module revision 1.1
6
"
;
static
const
char
*
version
=
"HDLC support module revision 1.1
7
"
;
#undef DEBUG_LINK
...
...
@@ -69,51 +74,75 @@ static int hdlc_rcv(struct sk_buff *skb, struct net_device *dev,
static
void
__hdlc_set_carrier_on
(
struct
net_device
*
dev
)
{
hdlc_device
*
hdlc
=
dev_to_hdlc
(
dev
);
if
(
hdlc
->
proto
.
start
)
return
hdlc
->
proto
.
start
(
dev
);
#ifdef DEBUG_LINK
if
(
netif_carrier_ok
(
dev
))
printk
(
KERN_ERR
"hdlc_set_carrier_on(): already on
\n
"
);
#endif
netif_carrier_on
(
dev
);
}
static
void
__hdlc_set_carrier_off
(
struct
net_device
*
dev
)
{
hdlc_device
*
hdlc
=
dev_to_hdlc
(
dev
);
if
(
hdlc
->
proto
.
stop
)
return
hdlc
->
proto
.
stop
(
dev
);
#ifdef DEBUG_LINK
if
(
!
netif_carrier_ok
(
dev
))
printk
(
KERN_ERR
"hdlc_set_carrier_off(): already off
\n
"
);
#endif
netif_carrier_off
(
dev
);
}
void
hdlc_set_carrier
(
int
on
,
struct
net_device
*
dev
)
{
hdlc_device
*
hdlc
=
dev_to_hdlc
(
dev
);
unsigned
long
flags
;
on
=
on
?
1
:
0
;
#ifdef DEBUG_LINK
printk
(
KERN_DEBUG
"hdlc_set_carrier %i
\n
"
,
on
);
#endif
spin_lock_irq
(
&
hdlc
->
state_lock
);
spin_lock_irq
save
(
&
hdlc
->
state_lock
,
flags
);
if
(
hdlc
->
carrier
==
on
)
goto
carrier_exit
;
/* no change in DCD line level */
printk
(
KERN_INFO
"%s: carrier %s
\n
"
,
dev
->
name
,
on
?
"ON"
:
"off"
);
#ifdef DEBUG_LINK
printk
(
KERN_INFO
"%s: carrier %s
\n
"
,
dev
->
name
,
on
?
"ON"
:
"off"
);
#endif
hdlc
->
carrier
=
on
;
if
(
!
hdlc
->
open
)
goto
carrier_exit
;
if
(
hdlc
->
carrier
)
{
if
(
hdlc
->
proto
.
start
)
hdlc
->
proto
.
start
(
dev
);
else
if
(
!
netif_carrier_ok
(
dev
))
netif_carrier_on
(
dev
);
}
else
{
/* no carrier */
if
(
hdlc
->
proto
.
stop
)
hdlc
->
proto
.
stop
(
dev
);
else
if
(
netif_carrier_ok
(
dev
))
netif_carrier_off
(
dev
);
}
if
(
hdlc
->
carrier
)
__hdlc_set_carrier_on
(
dev
);
else
__hdlc_set_carrier_off
(
dev
);
carrier_exit:
spin_unlock_irq
(
&
hdlc
->
state_lock
);
carrier_exit:
spin_unlock_irq
restore
(
&
hdlc
->
state_lock
,
flags
);
}
/* Must be called by hardware driver when HDLC device is being opened */
int
hdlc_open
(
struct
net_device
*
dev
)
{
hdlc_device
*
hdlc
=
dev_to_hdlc
(
dev
);
#ifdef DEBUG_LINK
printk
(
KERN_DEBUG
"hdlc_open carrier %i open %i
\n
"
,
printk
(
KERN_DEBUG
"hdlc_open
()
carrier %i open %i
\n
"
,
hdlc
->
carrier
,
hdlc
->
open
);
#endif
...
...
@@ -128,14 +157,8 @@ int hdlc_open(struct net_device *dev)
spin_lock_irq
(
&
hdlc
->
state_lock
);
if
(
hdlc
->
carrier
)
{
if
(
hdlc
->
proto
.
start
)
hdlc
->
proto
.
start
(
dev
);
else
if
(
!
netif_carrier_ok
(
dev
))
netif_carrier_on
(
dev
);
}
else
if
(
netif_carrier_ok
(
dev
))
netif_carrier_off
(
dev
);
if
(
hdlc
->
carrier
)
__hdlc_set_carrier_on
(
dev
);
hdlc
->
open
=
1
;
...
...
@@ -150,15 +173,15 @@ void hdlc_close(struct net_device *dev)
{
hdlc_device
*
hdlc
=
dev_to_hdlc
(
dev
);
#ifdef DEBUG_LINK
printk
(
KERN_DEBUG
"hdlc_close carrier %i open %i
\n
"
,
printk
(
KERN_DEBUG
"hdlc_close
()
carrier %i open %i
\n
"
,
hdlc
->
carrier
,
hdlc
->
open
);
#endif
spin_lock_irq
(
&
hdlc
->
state_lock
);
hdlc
->
open
=
0
;
if
(
hdlc
->
carrier
&&
hdlc
->
proto
.
stop
)
hdlc
->
proto
.
stop
(
dev
);
if
(
hdlc
->
carrier
)
__hdlc_set_carrier_off
(
dev
);
spin_unlock_irq
(
&
hdlc
->
state_lock
);
...
...
@@ -185,7 +208,7 @@ void hdlc_close(struct net_device *dev)
#endif
#ifndef CONFIG_HDLC_FR
#define hdlc_fr_ioctl(dev, ifr) -ENOSYS
#define hdlc_fr_ioctl(dev, ifr)
-ENOSYS
#endif
#ifndef CONFIG_HDLC_X25
...
...
@@ -257,25 +280,7 @@ struct net_device *alloc_hdlcdev(void *priv)
int
register_hdlc_device
(
struct
net_device
*
dev
)
{
int
result
;
hdlc_device
*
hdlc
=
dev_to_hdlc
(
dev
);
dev
->
get_stats
=
hdlc_get_stats
;
dev
->
change_mtu
=
hdlc_change_mtu
;
dev
->
mtu
=
HDLC_MAX_MTU
;
dev
->
type
=
ARPHRD_RAWHDLC
;
dev
->
hard_header_len
=
16
;
dev
->
flags
=
IFF_POINTOPOINT
|
IFF_NOARP
;
hdlc
->
proto
.
id
=
-
1
;
hdlc
->
proto
.
detach
=
NULL
;
hdlc
->
carrier
=
1
;
hdlc
->
open
=
0
;
spin_lock_init
(
&
hdlc
->
state_lock
);
result
=
dev_alloc_name
(
dev
,
"hdlc%d"
);
int
result
=
dev_alloc_name
(
dev
,
"hdlc%d"
);
if
(
result
<
0
)
return
result
;
...
...
@@ -283,6 +288,9 @@ int register_hdlc_device(struct net_device *dev)
if
(
result
!=
0
)
return
-
EIO
;
if
(
netif_carrier_ok
(
dev
))
netif_carrier_off
(
dev
);
/* no carrier until DCD goes up */
return
0
;
}
...
...
drivers/net/wan/wanxlfw.inc
→
drivers/net/wan/wanxlfw.inc
_shipped
View file @
e7c0c64e
File moved
drivers/net/wireless/prism54/isl_38xx.c
View file @
e7c0c64e
/*
$Header: /var/lib/cvs/prism54-ng/ksrc/isl_38xx.c,v 1.22 2004/02/28 03:06:07 mcgrof Exp $
/*
*
* Copyright (C) 2002 Intersil Americas Inc.
* Copyright (C) 2003-2004 Luis R. Rodriguez <mcgrof@ruslug.rutgers.edu>_
...
...
drivers/net/wireless/prism54/isl_38xx.h
View file @
e7c0c64e
/*
$Header: /var/lib/cvs/prism54-ng/ksrc/isl_38xx.h,v 1.22 2004/02/28 03:06:07 mcgrof Exp $
/*
*
* Copyright (C) 2002 Intersil Americas Inc.
*
...
...
drivers/net/wireless/prism54/isl_ioctl.c
View file @
e7c0c64e
/*
$Header: /var/lib/cvs/prism54-ng/ksrc/isl_ioctl.c,v 1.140 2004/02/28 03:06:07 mcgrof Exp $
/*
*
* Copyright (C) 2002 Intersil Americas Inc.
* (C) 2003 Aurelien Alleaume <slts@free.fr>
* (C) 2003
,2004
Aurelien Alleaume <slts@free.fr>
* (C) 2003 Herbert Valerio Riedel <hvr@gnu.org>
* (C) 2003 Luis R. Rodriguez <mcgrof@ruslug.rutgers.edu>
*
...
...
@@ -87,9 +87,9 @@ prism54_mib_mode_helper(islpci_private *priv, u32 iw_mode)
/* For now, just catch early the Repeater and Secondary modes here */
if
(
iw_mode
==
IW_MODE_REPEAT
||
iw_mode
==
IW_MODE_SECOND
)
{
printk
(
KERN_DEBUG
"%s(): Sorry, Repeater mode and Secondary mode "
"are not yet supported by this driver.
\n
"
,
__FUNCTION__
);
printk
(
KERN_DEBUG
"%s(): Sorry, Repeater mode and Secondary mode "
"are not yet supported by this driver.
\n
"
,
__FUNCTION__
);
return
-
EINVAL
;
}
...
...
@@ -143,8 +143,8 @@ prism54_mib_init(islpci_private *priv)
{
u32
t
;
struct
obj_buffer
psm_buffer
=
{
.
size
=
cpu_to_le32
(
PSM_BUFFER_SIZE
)
,
.
addr
=
cpu_to_le32
(
priv
->
device_psm_buffer
)
.
size
=
PSM_BUFFER_SIZE
,
.
addr
=
priv
->
device_psm_buffer
};
mgt_set
(
priv
,
DOT11_OID_CHANNEL
,
&
init_channel
);
...
...
@@ -285,7 +285,7 @@ prism54_commit(struct net_device *ndev, struct iw_request_info *info,
/* Commit in Monitor mode is not necessary, also setting essid
* in Monitor mode does not make sense and isn't allowed for this
* device's firmware */
if
(
priv
->
iw_mode
!=
IW_MODE_MONITOR
)
if
(
priv
->
iw_mode
!=
IW_MODE_MONITOR
)
return
mgt_set_request
(
priv
,
DOT11_OID_SSID
,
0
,
NULL
);
return
0
;
}
...
...
@@ -327,34 +327,15 @@ prism54_set_freq(struct net_device *ndev, struct iw_request_info *info,
{
islpci_private
*
priv
=
netdev_priv
(
ndev
);
int
rvalue
;
u32
c
=
0
;
u32
c
;
/* prepare the structure for the set object */
if
(
fwrq
->
m
<
1000
)
/*
structure value contains a channel indication
*/
/*
we have a channel number
*/
c
=
fwrq
->
m
;
else
{
/* structure contains a frequency indication and fwrq->e = 1 */
int
f
=
fwrq
->
m
/
100000
;
if
(
fwrq
->
e
!=
1
)
return
-
EINVAL
;
if
((
f
>=
2412
)
&&
(
f
<=
2484
))
{
while
((
c
<
14
)
&&
(
f
!=
frequency_list_bg
[
c
]))
c
++
;
if
(
c
>=
14
)
return
-
EINVAL
;
}
else
if
((
f
>=
(
int
)
5170
)
&&
(
f
<=
(
int
)
5320
))
{
while
((
c
<
12
)
&&
(
f
!=
frequency_list_a
[
c
]))
c
++
;
if
(
c
>=
12
)
return
-
EINVAL
;
}
else
return
-
EINVAL
;
c
++
;
}
else
c
=
(
fwrq
->
e
==
1
)
?
channel_of_freq
(
fwrq
->
m
/
100000
)
:
0
;
rvalue
=
mgt_set_request
(
priv
,
DOT11_OID_CHANNEL
,
0
,
&
c
)
;
rvalue
=
c
?
mgt_set_request
(
priv
,
DOT11_OID_CHANNEL
,
0
,
&
c
)
:
-
EINVAL
;
/* Call commit handler */
return
(
rvalue
?
rvalue
:
-
EINPROGRESS
);
...
...
@@ -410,7 +391,7 @@ prism54_set_mode(struct net_device *ndev, struct iw_request_info *info,
mgt_commit
(
priv
);
priv
->
ndev
->
type
=
(
priv
->
iw_mode
==
IW_MODE_MONITOR
)
?
ARPHRD_IEEE80211
:
ARPHRD_ETHER
;
?
priv
->
monitor_type
:
ARPHRD_ETHER
;
up_write
(
&
priv
->
mib_sem
);
return
0
;
...
...
@@ -531,20 +512,20 @@ prism54_get_range(struct net_device *ndev, struct iw_request_info *info,
mgt_get_request
(
priv
,
DOT11_OID_SUPPORTEDFREQUENCIES
,
0
,
NULL
,
&
r
);
freq
=
r
.
ptr
;
range
->
num_channels
=
le16_to_cpu
(
freq
->
nr
)
;
range
->
num_frequency
=
le16_to_cpu
(
freq
->
nr
)
;
range
->
num_channels
=
freq
->
nr
;
range
->
num_frequency
=
freq
->
nr
;
/* Frequencies are not listed in the right order. The reordering is probably
* firmware dependant and thus should work for everyone.
*/
m
=
min
(
IW_MAX_FREQUENCIES
,
(
int
)
le16_to_cpu
(
freq
->
nr
)
);
m
=
min
(
IW_MAX_FREQUENCIES
,
(
int
)
freq
->
nr
);
for
(
i
=
0
;
i
<
m
-
12
;
i
++
)
{
range
->
freq
[
i
].
m
=
le16_to_cpu
(
freq
->
mhz
[
12
+
i
])
;
range
->
freq
[
i
].
m
=
freq
->
mhz
[
12
+
i
]
;
range
->
freq
[
i
].
e
=
6
;
range
->
freq
[
i
].
i
=
i
+
1
;
}
for
(
i
=
m
-
12
;
i
<
m
;
i
++
)
{
range
->
freq
[
i
].
m
=
le16_to_cpu
(
freq
->
mhz
[
i
-
m
+
12
])
;
range
->
freq
[
i
].
m
=
freq
->
mhz
[
i
-
m
+
12
]
;
range
->
freq
[
i
].
e
=
6
;
range
->
freq
[
i
].
i
=
i
+
23
;
}
...
...
@@ -655,7 +636,7 @@ prism54_translate_bss(struct net_device *ndev, char *current_ev,
#define CAP_CRYPT 0x10
/* Mode */
cap
=
le16_to_cpu
(
bss
->
capinfo
)
;
cap
=
bss
->
capinfo
;
iwe
.
u
.
mode
=
0
;
if
(
cap
&
CAP_ESS
)
iwe
.
u
.
mode
=
IW_MODE_MASTER
;
...
...
@@ -747,7 +728,7 @@ prism54_get_scan(struct net_device *ndev, struct iw_request_info *info,
bsslist
=
r
.
ptr
;
/* ok now, scan the list and translate its info */
for
(
i
=
0
;
i
<
min
(
IW_MAX_AP
,
(
int
)
le32_to_cpu
(
bsslist
->
nr
)
);
i
++
)
for
(
i
=
0
;
i
<
min
(
IW_MAX_AP
,
(
int
)
bsslist
->
nr
);
i
++
)
current_ev
=
prism54_translate_bss
(
ndev
,
current_ev
,
extra
+
IW_SCAN_MAX_DATA
,
&
(
bsslist
->
bsslist
[
i
]),
...
...
@@ -869,25 +850,26 @@ prism54_set_rate(struct net_device *ndev,
return
mgt_set_request
(
priv
,
DOT11_OID_PROFILES
,
0
,
&
profile
);
}
if
((
ret
=
mgt_get_request
(
priv
,
DOT11_OID_SUPPORTEDRATES
,
0
,
NULL
,
&
r
)))
if
((
ret
=
mgt_get_request
(
priv
,
DOT11_OID_SUPPORTEDRATES
,
0
,
NULL
,
&
r
)))
return
ret
;
rate
=
(
u32
)
(
vwrq
->
value
/
500000
);
data
=
r
.
ptr
;
i
=
0
;
while
(
data
[
i
])
{
if
(
rate
&&
(
data
[
i
]
==
rate
))
{
while
(
data
[
i
])
{
if
(
rate
&&
(
data
[
i
]
==
rate
))
{
break
;
}
if
(
vwrq
->
value
==
i
)
{
if
(
vwrq
->
value
==
i
)
{
break
;
}
data
[
i
]
|=
0x80
;
i
++
;
}
if
(
!
data
[
i
])
{
if
(
!
data
[
i
])
{
return
-
EINVAL
;
}
...
...
@@ -931,12 +913,12 @@ prism54_get_rate(struct net_device *ndev,
union
oid_res_t
r
;
/* Get the current bit rate */
if
((
rvalue
=
mgt_get_request
(
priv
,
GEN_OID_LINKSTATE
,
0
,
NULL
,
&
r
)))
if
((
rvalue
=
mgt_get_request
(
priv
,
GEN_OID_LINKSTATE
,
0
,
NULL
,
&
r
)))
return
rvalue
;
vwrq
->
value
=
r
.
u
*
500000
;
/* request the device for the enabled rates */
if
((
rvalue
=
mgt_get_request
(
priv
,
DOT11_OID_RATES
,
0
,
NULL
,
&
r
)))
if
((
rvalue
=
mgt_get_request
(
priv
,
DOT11_OID_RATES
,
0
,
NULL
,
&
r
)))
return
rvalue
;
data
=
r
.
ptr
;
vwrq
->
fixed
=
(
data
[
0
]
!=
0
)
&&
(
data
[
1
]
==
0
);
...
...
@@ -1225,7 +1207,7 @@ prism54_get_txpower(struct net_device *ndev, struct iw_request_info *info,
rvalue
=
mgt_get_request
(
priv
,
OID_INL_OUTPUTPOWER
,
0
,
NULL
,
&
r
);
/* intersil firmware operates in 0.25 dBm (1/4 dBm) */
vwrq
->
value
=
(
s32
)
r
.
u
/
4
;
vwrq
->
value
=
(
s32
)
r
.
u
/
4
;
vwrq
->
fixed
=
1
;
/* radio is not turned of
* btw: how is possible to turn off only the radio
...
...
@@ -1271,28 +1253,41 @@ prism54_reset(struct net_device *ndev, struct iw_request_info *info,
}
static
int
prism54_
set_beacon
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
__u32
*
u
wrq
,
char
*
extra
)
prism54_
get_oid
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
struct
iw_point
*
d
wrq
,
char
*
extra
)
{
int
rvalue
=
mgt_set_request
((
islpci_private
*
)
netdev_priv
(
ndev
),
DOT11_OID_BEACONPERIOD
,
0
,
uwrq
);
union
oid_res_t
r
;
int
rvalue
;
enum
oid_num_t
n
=
dwrq
->
flags
;
return
(
rvalue
?
rvalue
:
-
EINPROGRESS
);
rvalue
=
mgt_get_request
((
islpci_private
*
)
ndev
->
priv
,
n
,
0
,
NULL
,
&
r
);
dwrq
->
length
=
mgt_response_to_str
(
n
,
&
r
,
extra
);
if
((
isl_oid
[
n
].
flags
&
OID_FLAG_TYPE
)
!=
OID_TYPE_U32
)
kfree
(
r
.
ptr
);
return
rvalue
;
}
static
int
prism54_
get_beacon
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
prism54_
set_u32
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
__u32
*
uwrq
,
char
*
extra
)
{
union
oid_res_t
r
;
int
rvalue
;
/*
u32 *i = (int *) extra;
int param = *i;
int u = *(i + 1);
*/
u32
oid
=
uwrq
[
0
],
u
=
uwrq
[
1
];
rvalue
=
mgt_get_request
((
islpci_private
*
)
netdev_priv
(
ndev
),
DOT11_OID_BEACONPERIOD
,
0
,
NULL
,
&
r
);
*
uwrq
=
r
.
u
;
return
mgt_set_request
((
islpci_private
*
)
ndev
->
priv
,
oid
,
0
,
&
u
);
}
return
rvalue
;
static
int
prism54_set_raw
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
struct
iw_point
*
dwrq
,
char
*
extra
)
{
u32
oid
=
dwrq
->
flags
;
return
mgt_set_request
((
islpci_private
*
)
ndev
->
priv
,
oid
,
0
,
extra
);
}
void
...
...
@@ -1511,8 +1506,9 @@ prism54_kick_all(struct net_device *ndev, struct iw_request_info *info,
return
-
ENOMEM
;
/* Tell the card to kick every client */
mlme
->
id
=
cpu_to_le16
(
0
);
rvalue
=
mgt_set_request
(
netdev_priv
(
ndev
),
DOT11_OID_DISASSOCIATE
,
0
,
mlme
);
mlme
->
id
=
0
;
rvalue
=
mgt_set_request
(
netdev_priv
(
ndev
),
DOT11_OID_DISASSOCIATE
,
0
,
mlme
);
kfree
(
mlme
);
return
rvalue
;
...
...
@@ -1535,8 +1531,9 @@ prism54_kick_mac(struct net_device *ndev, struct iw_request_info *info,
/* Tell the card to only kick the corresponding bastard */
memcpy
(
mlme
->
address
,
addr
->
sa_data
,
ETH_ALEN
);
mlme
->
id
=
cpu_to_le16
(
-
1
);
rvalue
=
mgt_set_request
(
netdev_priv
(
ndev
),
DOT11_OID_DISASSOCIATE
,
0
,
mlme
);
mlme
->
id
=
-
1
;
rvalue
=
mgt_set_request
(
netdev_priv
(
ndev
),
DOT11_OID_DISASSOCIATE
,
0
,
mlme
);
kfree
(
mlme
);
...
...
@@ -1551,12 +1548,12 @@ format_event(islpci_private *priv, char *dest, const char *str,
{
const
u8
*
a
=
mlme
->
address
;
int
n
=
snprintf
(
dest
,
IW_CUSTOM_MAX
,
"%s %s %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X %s"
,
"%s %s %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X %s
(%2.2X)
"
,
str
,
((
priv
->
iw_mode
==
IW_MODE_MASTER
)
?
"
to"
:
"from
"
),
((
priv
->
iw_mode
==
IW_MODE_MASTER
)
?
"
from"
:
"to
"
),
a
[
0
],
a
[
1
],
a
[
2
],
a
[
3
],
a
[
4
],
a
[
5
],
(
error
?
(
mlme
->
code
?
" : REJECTED "
:
" : ACCEPTED "
)
:
""
));
:
""
)
,
mlme
->
code
);
BUG_ON
(
n
>
IW_CUSTOM_MAX
);
*
length
=
n
;
}
...
...
@@ -1598,14 +1595,15 @@ link_changed(struct net_device *ndev, u32 bitrate)
{
islpci_private
*
priv
=
netdev_priv
(
ndev
);
if
(
le32_to_cpu
(
bitrate
)
)
{
if
(
bitrate
)
{
if
(
priv
->
iw_mode
==
IW_MODE_INFRA
)
{
union
iwreq_data
uwrq
;
prism54_get_wap
(
ndev
,
NULL
,
(
struct
sockaddr
*
)
&
uwrq
,
NULL
);
wireless_send_event
(
ndev
,
SIOCGIWAP
,
&
uwrq
,
NULL
);
}
else
send_simple_event
(
netdev_priv
(
ndev
),
"Link established"
);
send_simple_event
(
netdev_priv
(
ndev
),
"Link established"
);
}
else
send_simple_event
(
netdev_priv
(
ndev
),
"Link lost"
);
}
...
...
@@ -1765,15 +1763,14 @@ prism54_process_bss_data(islpci_private *priv, u32 oid, u8 *addr,
static
void
handle_request
(
islpci_private
*
priv
,
struct
obj_mlme
*
mlme
,
enum
oid_num_t
oid
)
{
if
(((
le16_to_cpu
(
mlme
->
state
)
==
DOT11_STATE_AUTHING
)
||
(
le16_to_cpu
(
mlme
->
state
)
==
DOT11_STATE_ASSOCING
))
if
(((
mlme
->
state
==
DOT11_STATE_AUTHING
)
||
(
mlme
->
state
==
DOT11_STATE_ASSOCING
))
&&
mgt_mlme_answer
(
priv
))
{
/* Someone is requesting auth and we must respond. Just send back
* the trap with error code set accordingly.
*/
mlme
->
code
=
cpu_to_le16
(
prism54_mac_accept
(
&
priv
->
acl
,
mlme
->
address
)
?
0
:
1
);
mlme
->
code
=
prism54_mac_accept
(
&
priv
->
acl
,
mlme
->
address
)
?
0
:
1
;
mgt_set_request
(
priv
,
oid
,
0
,
mlme
);
}
}
...
...
@@ -1797,6 +1794,13 @@ prism54_process_trap_helper(islpci_private *priv, enum oid_num_t oid,
* suited. We use the more flexible custom event facility.
*/
/* I fear prism54_process_bss_data won't work with big endian data */
if
((
oid
==
DOT11_OID_BEACON
)
||
(
oid
==
DOT11_OID_PROBE
))
prism54_process_bss_data
(
priv
,
oid
,
mlme
->
address
,
payload
,
len
);
mgt_le_to_cpu
(
isl_oid
[
oid
].
flags
&
OID_FLAG_TYPE
,
(
void
*
)
mlme
);
switch
(
oid
)
{
case
GEN_OID_LINKSTATE
:
...
...
@@ -1831,8 +1835,6 @@ prism54_process_trap_helper(islpci_private *priv, enum oid_num_t oid,
break
;
case
DOT11_OID_BEACON
:
prism54_process_bss_data
(
priv
,
oid
,
mlme
->
address
,
payload
,
len
);
send_formatted_event
(
priv
,
"Received a beacon from an unkown AP"
,
mlme
,
0
);
...
...
@@ -1840,8 +1842,6 @@ prism54_process_trap_helper(islpci_private *priv, enum oid_num_t oid,
case
DOT11_OID_PROBE
:
/* we received a probe from a client. */
prism54_process_bss_data
(
priv
,
oid
,
mlme
->
address
,
payload
,
len
);
send_formatted_event
(
priv
,
"Received a probe from client"
,
mlme
,
0
);
break
;
...
...
@@ -1914,13 +1914,6 @@ prism54_set_mac_address(struct net_device *ndev, void *addr)
return
ret
;
}
int
prism54_ioctl
(
struct
net_device
*
ndev
,
struct
ifreq
*
rq
,
int
cmd
)
{
/* should we really support this old stuff ? */
return
-
EOPNOTSUPP
;
}
int
prism54_set_wpa
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
__u32
*
uwrq
,
char
*
extra
)
...
...
@@ -1950,9 +1943,31 @@ prism54_get_wpa(struct net_device *ndev, struct iw_request_info *info,
return
0
;
}
int
prism54_set_prismhdr
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
__u32
*
uwrq
,
char
*
extra
)
{
islpci_private
*
priv
=
netdev_priv
(
ndev
);
priv
->
monitor_type
=
(
*
uwrq
?
ARPHRD_IEEE80211_PRISM
:
ARPHRD_IEEE80211
);
if
(
priv
->
iw_mode
==
IW_MODE_MONITOR
)
priv
->
ndev
->
type
=
priv
->
monitor_type
;
return
0
;
}
int
prism54_get_prismhdr
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
__u32
*
uwrq
,
char
*
extra
)
{
islpci_private
*
priv
=
netdev_priv
(
ndev
);
*
uwrq
=
(
priv
->
monitor_type
==
ARPHRD_IEEE80211_PRISM
);
return
0
;
}
int
prism54_set_maxframeburst
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
__u32
*
uwrq
,
char
*
extra
)
__u32
*
uwrq
,
char
*
extra
)
{
islpci_private
*
priv
=
netdev_priv
(
ndev
);
u32
max_burst
;
...
...
@@ -1965,7 +1980,7 @@ prism54_set_maxframeburst(struct net_device *ndev, struct iw_request_info *info,
int
prism54_get_maxframeburst
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
__u32
*
uwrq
,
char
*
extra
)
__u32
*
uwrq
,
char
*
extra
)
{
islpci_private
*
priv
=
netdev_priv
(
ndev
);
union
oid_res_t
r
;
...
...
@@ -1979,7 +1994,7 @@ prism54_get_maxframeburst(struct net_device *ndev, struct iw_request_info *info,
int
prism54_set_profile
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
__u32
*
uwrq
,
char
*
extra
)
__u32
*
uwrq
,
char
*
extra
)
{
islpci_private
*
priv
=
netdev_priv
(
ndev
);
u32
profile
;
...
...
@@ -1992,7 +2007,7 @@ prism54_set_profile(struct net_device *ndev, struct iw_request_info *info,
int
prism54_get_profile
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
__u32
*
uwrq
,
char
*
extra
)
__u32
*
uwrq
,
char
*
extra
)
{
islpci_private
*
priv
=
netdev_priv
(
ndev
);
union
oid_res_t
r
;
...
...
@@ -2005,8 +2020,8 @@ prism54_get_profile(struct net_device *ndev, struct iw_request_info *info,
}
int
prism54_oid
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
__u32
*
uwrq
,
char
*
extra
)
prism54_
debug_
oid
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
__u32
*
uwrq
,
char
*
extra
)
{
islpci_private
*
priv
=
netdev_priv
(
ndev
);
...
...
@@ -2017,7 +2032,7 @@ prism54_oid(struct net_device *ndev, struct iw_request_info *info,
}
int
prism54_get_oid
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
prism54_
debug_
get_oid
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
struct
iw_point
*
data
,
char
*
extra
)
{
islpci_private
*
priv
=
netdev_priv
(
ndev
);
...
...
@@ -2028,11 +2043,15 @@ prism54_get_oid(struct net_device *ndev, struct iw_request_info *info,
data
->
length
=
0
;
if
(
islpci_get_state
(
priv
)
>=
PRV_STATE_INIT
)
{
ret
=
islpci_mgt_transaction
(
priv
->
ndev
,
PIMFOR_OP_GET
,
priv
->
priv_oid
,
extra
,
256
,
&
response
);
ret
=
islpci_mgt_transaction
(
priv
->
ndev
,
PIMFOR_OP_GET
,
priv
->
priv_oid
,
extra
,
256
,
&
response
);
response_op
=
response
->
header
->
operation
;
printk
(
"%s: ret: %i
\n
"
,
ndev
->
name
,
ret
);
printk
(
"%s: response_op: %i
\n
"
,
ndev
->
name
,
response_op
);
if
(
ret
||
!
response
||
response
->
header
->
operation
==
PIMFOR_OP_ERROR
)
{
if
(
ret
||
!
response
||
response
->
header
->
operation
==
PIMFOR_OP_ERROR
)
{
if
(
response
)
{
islpci_mgt_release
(
response
);
}
...
...
@@ -2051,21 +2070,26 @@ prism54_get_oid(struct net_device *ndev, struct iw_request_info *info,
}
int
prism54_set_oid
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
prism54_
debug_
set_oid
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
struct
iw_point
*
data
,
char
*
extra
)
{
islpci_private
*
priv
=
netdev_priv
(
ndev
);
struct
islpci_mgmtframe
*
response
=
NULL
;
int
ret
=
0
,
response_op
=
PIMFOR_OP_ERROR
;
printk
(
"%s: set_oid 0x%08X
\t
len: %d
\n
"
,
ndev
->
name
,
priv
->
priv_oid
,
data
->
length
);
printk
(
"%s: set_oid 0x%08X
\t
len: %d
\n
"
,
ndev
->
name
,
priv
->
priv_oid
,
data
->
length
);
if
(
islpci_get_state
(
priv
)
>=
PRV_STATE_INIT
)
{
ret
=
islpci_mgt_transaction
(
priv
->
ndev
,
PIMFOR_OP_SET
,
priv
->
priv_oid
,
extra
,
data
->
length
,
&
response
);
ret
=
islpci_mgt_transaction
(
priv
->
ndev
,
PIMFOR_OP_SET
,
priv
->
priv_oid
,
extra
,
data
->
length
,
&
response
);
printk
(
"%s: ret: %i
\n
"
,
ndev
->
name
,
ret
);
if
(
!
ret
)
{
response_op
=
response
->
header
->
operation
;
printk
(
"%s: response_op: %i
\n
"
,
ndev
->
name
,
response_op
);
printk
(
"%s: response_op: %i
\n
"
,
ndev
->
name
,
response_op
);
islpci_mgt_release
(
response
);
}
if
(
ret
||
response_op
==
PIMFOR_OP_ERROR
)
{
...
...
@@ -2077,6 +2101,31 @@ prism54_set_oid(struct net_device *ndev, struct iw_request_info *info,
return
ret
;
}
static
int
prism54_set_spy
(
struct
net_device
*
ndev
,
struct
iw_request_info
*
info
,
union
iwreq_data
*
uwrq
,
char
*
extra
)
{
islpci_private
*
priv
=
netdev_priv
(
ndev
);
u32
u
,
oid
=
OID_INL_CONFIG
;
down_write
(
&
priv
->
mib_sem
);
mgt_get
(
priv
,
OID_INL_CONFIG
,
&
u
);
if
((
uwrq
->
data
.
length
==
0
)
&&
(
priv
->
spy_data
.
spy_number
>
0
))
/* disable spy */
u
&=
~
INL_CONFIG_RXANNEX
;
else
if
((
uwrq
->
data
.
length
>
0
)
&&
(
priv
->
spy_data
.
spy_number
==
0
))
/* enable spy */
u
|=
INL_CONFIG_RXANNEX
;
mgt_set
(
priv
,
OID_INL_CONFIG
,
&
u
);
mgt_commit_list
(
priv
,
&
oid
,
1
);
up_write
(
&
priv
->
mib_sem
);
return
iw_handler_set_spy
(
ndev
,
info
,
uwrq
,
extra
);
}
static
const
iw_handler
prism54_handler
[]
=
{
(
iw_handler
)
prism54_commit
,
/* SIOCSIWCOMMIT */
(
iw_handler
)
prism54_get_name
,
/* SIOCGIWNAME */
...
...
@@ -2094,7 +2143,7 @@ static const iw_handler prism54_handler[] = {
(
iw_handler
)
NULL
,
/* SIOCGIWPRIV */
(
iw_handler
)
NULL
,
/* SIOCSIWSTATS */
(
iw_handler
)
NULL
,
/* SIOCGIWSTATS */
iw_handler
_set_spy
,
/* SIOCSIWSPY */
prism54
_set_spy
,
/* SIOCSIWSPY */
iw_handler_get_spy
,
/* SIOCGIWSPY */
iw_handler_set_thrspy
,
/* SIOCSIWTHRSPY */
iw_handler_get_thrspy
,
/* SIOCGIWTHRSPY */
...
...
@@ -2129,33 +2178,50 @@ static const iw_handler prism54_handler[] = {
/* The low order bit identify a SET (0) or a GET (1) ioctl. */
#define PRISM54_RESET SIOCIWFIRSTPRIV
#define PRISM54_GET_
BEACON
SIOCIWFIRSTPRIV+1
#define PRISM54_SET_
BEACON
SIOCIWFIRSTPRIV+2
#define PRISM54_GET_
POLICY
SIOCIWFIRSTPRIV+3
#define PRISM54_
SET_POLICY
SIOCIWFIRSTPRIV+4
#define PRISM54_GET_MAC SIOCIWFIRSTPRIV+5
#define PRISM54_
ADD_MAC
SIOCIWFIRSTPRIV+6
#define PRISM54_GET_
POLICY
SIOCIWFIRSTPRIV+1
#define PRISM54_SET_
POLICY
SIOCIWFIRSTPRIV+2
#define PRISM54_GET_
MAC
SIOCIWFIRSTPRIV+3
#define PRISM54_
ADD_MAC
SIOCIWFIRSTPRIV+4
#define PRISM54_
DEL_MAC
SIOCIWFIRSTPRIV+6
#define PRISM54_
DEL_MAC
SIOCIWFIRSTPRIV+8
#define PRISM54_
KICK_MAC
SIOCIWFIRSTPRIV+8
#define PRISM54_KICK_
MAC
SIOCIWFIRSTPRIV+10
#define PRISM54_KICK_
ALL
SIOCIWFIRSTPRIV+10
#define PRISM54_KICK_ALL SIOCIWFIRSTPRIV+12
#define PRISM54_GET_WPA SIOCIWFIRSTPRIV+11
#define PRISM54_SET_WPA SIOCIWFIRSTPRIV+12
#define PRISM54_GET_WPA SIOCIWFIRSTPRIV+13
#define PRISM54_SET_WPA SIOCIWFIRSTPRIV+14
#define PRISM54_DBG_OID SIOCIWFIRSTPRIV+14
#define PRISM54_DBG_GET_OID SIOCIWFIRSTPRIV+15
#define PRISM54_DBG_SET_OID SIOCIWFIRSTPRIV+16
#define PRISM54_OID SIOCIWFIRSTPRIV+16
#define PRISM54_GET_OID SIOCIWFIRSTPRIV+17
#define PRISM54_SET_OID SIOCIWFIRSTPRIV+18
#define PRISM54_SET_OID_U32 SIOCIWFIRSTPRIV+18
#define PRISM54_SET_OID_STR SIOCIWFIRSTPRIV+20
#define PRISM54_SET_OID_ADDR SIOCIWFIRSTPRIV+22
#define PRISM54_GET_PRISMHDR SIOCIWFIRSTPRIV+23
#define PRISM54_SET_PRISMHDR SIOCIWFIRSTPRIV+24
#define IWPRIV_SET_U32(n,x) { n, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_"x }
#define IWPRIV_SET_SSID(n,x) { n, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | 1, 0, "set_"x }
#define IWPRIV_SET_ADDR(n,x) { n, IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 1, 0, "set_"x }
#define IWPRIV_GET(n,x) { n, 0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | PRIV_STR_SIZE, "get_"x }
#define IWPRIV_U32(n,x) IWPRIV_SET_U32(n,x), IWPRIV_GET(n,x)
#define IWPRIV_SSID(n,x) IWPRIV_SET_SSID(n,x), IWPRIV_GET(n,x)
#define IWPRIV_ADDR(n,x) IWPRIV_SET_ADDR(n,x), IWPRIV_GET(n,x)
/* Note : limited to 128 private ioctls */
static
const
struct
iw_priv_args
prism54_private_args
[]
=
{
/*{ cmd, set_args, get_args, name } */
{
PRISM54_RESET
,
0
,
0
,
"reset"
},
{
PRISM54_GET_
BEACON
,
0
,
IW_PRIV_TYPE_INT
|
IW_PRIV_SIZE_FIXED
|
1
,
"get
BeaconPeriod
"
},
{
PRISM54_SET_
BEACON
,
IW_PRIV_TYPE_INT
|
IW_PRIV_SIZE_FIXED
|
1
,
0
,
"set
BeaconPeriod
"
},
{
PRISM54_GET_
PRISMHDR
,
0
,
IW_PRIV_TYPE_INT
|
IW_PRIV_SIZE_FIXED
|
1
,
"get
_prismhdr
"
},
{
PRISM54_SET_
PRISMHDR
,
IW_PRIV_TYPE_INT
|
IW_PRIV_SIZE_FIXED
|
1
,
0
,
"set
_prismhdr
"
},
{
PRISM54_GET_POLICY
,
0
,
IW_PRIV_TYPE_INT
|
IW_PRIV_SIZE_FIXED
|
1
,
"getPolicy"
},
{
PRISM54_SET_POLICY
,
IW_PRIV_TYPE_INT
|
IW_PRIV_SIZE_FIXED
|
1
,
0
,
...
...
@@ -2172,15 +2238,77 @@ static const struct iw_priv_args prism54_private_args[] = {
"get_wpa"
},
{
PRISM54_SET_WPA
,
IW_PRIV_TYPE_INT
|
IW_PRIV_SIZE_FIXED
|
1
,
0
,
"set_wpa"
},
{
PRISM54_OID
,
IW_PRIV_TYPE_INT
|
IW_PRIV_SIZE_FIXED
|
1
,
0
,
"oid"
},
{
PRISM54_GET_OID
,
0
,
IW_PRIV_TYPE_BYTE
|
256
,
"get_oid"
},
{
PRISM54_SET_OID
,
IW_PRIV_TYPE_BYTE
|
256
,
0
,
"set_oid"
},
{
PRISM54_DBG_OID
,
IW_PRIV_TYPE_INT
|
IW_PRIV_SIZE_FIXED
|
1
,
0
,
"dbg_oid"
},
{
PRISM54_DBG_GET_OID
,
0
,
IW_PRIV_TYPE_BYTE
|
256
,
"dbg_get_oid"
},
{
PRISM54_DBG_SET_OID
,
IW_PRIV_TYPE_BYTE
|
256
,
0
,
"dbg_get_oid"
},
/* --- sub-ioctls handlers --- */
{
PRISM54_GET_OID
,
0
,
IW_PRIV_TYPE_CHAR
|
IW_PRIV_SIZE_FIXED
|
PRIV_STR_SIZE
,
""
},
{
PRISM54_SET_OID_U32
,
IW_PRIV_TYPE_INT
|
IW_PRIV_SIZE_FIXED
|
1
,
0
,
""
},
{
PRISM54_SET_OID_STR
,
IW_PRIV_TYPE_CHAR
|
IW_PRIV_SIZE_FIXED
|
1
,
0
,
""
},
{
PRISM54_SET_OID_ADDR
,
IW_PRIV_TYPE_ADDR
|
IW_PRIV_SIZE_FIXED
|
1
,
0
,
""
},
/* --- sub-ioctls definitions --- */
IWPRIV_ADDR
(
GEN_OID_MACADDRESS
,
"addr"
),
IWPRIV_GET
(
GEN_OID_LINKSTATE
,
"linkstate"
),
IWPRIV_U32
(
DOT11_OID_BSSTYPE
,
"bsstype"
),
IWPRIV_ADDR
(
DOT11_OID_BSSID
,
"bssid"
),
IWPRIV_U32
(
DOT11_OID_STATE
,
"state"
),
IWPRIV_U32
(
DOT11_OID_AID
,
"aid"
),
IWPRIV_SSID
(
DOT11_OID_SSIDOVERRIDE
,
"ssidoverride"
),
IWPRIV_U32
(
DOT11_OID_MEDIUMLIMIT
,
"medlimit"
),
IWPRIV_U32
(
DOT11_OID_BEACONPERIOD
,
"beacon"
),
IWPRIV_U32
(
DOT11_OID_DTIMPERIOD
,
"dtimperiod"
),
IWPRIV_U32
(
DOT11_OID_AUTHENABLE
,
"authenable"
),
IWPRIV_U32
(
DOT11_OID_PRIVACYINVOKED
,
"privinvok"
),
IWPRIV_U32
(
DOT11_OID_EXUNENCRYPTED
,
"exunencrypt"
),
IWPRIV_U32
(
DOT11_OID_REKEYTHRESHOLD
,
"rekeythresh"
),
IWPRIV_U32
(
DOT11_OID_MAXTXLIFETIME
,
"maxtxlife"
),
IWPRIV_U32
(
DOT11_OID_MAXRXLIFETIME
,
"maxrxlife"
),
IWPRIV_U32
(
DOT11_OID_ALOFT_FIXEDRATE
,
"fixedrate"
),
IWPRIV_U32
(
DOT11_OID_MAXFRAMEBURST
,
"frameburst"
),
IWPRIV_U32
(
DOT11_OID_PSM
,
"psm"
),
IWPRIV_U32
(
DOT11_OID_BRIDGELOCAL
,
"bridge"
),
IWPRIV_U32
(
DOT11_OID_CLIENTS
,
"clients"
),
IWPRIV_U32
(
DOT11_OID_CLIENTSASSOCIATED
,
"clientassoc"
),
IWPRIV_U32
(
DOT11_OID_DOT1XENABLE
,
"dot1xenable"
),
IWPRIV_U32
(
DOT11_OID_ANTENNARX
,
"rxant"
),
IWPRIV_U32
(
DOT11_OID_ANTENNATX
,
"txant"
),
IWPRIV_U32
(
DOT11_OID_ANTENNADIVERSITY
,
"antdivers"
),
IWPRIV_U32
(
DOT11_OID_EDTHRESHOLD
,
"edthresh"
),
IWPRIV_U32
(
DOT11_OID_PREAMBLESETTINGS
,
"preamble"
),
IWPRIV_GET
(
DOT11_OID_RATES
,
"rates"
),
IWPRIV_U32
(
DOT11_OID_OUTPUTPOWER
,
".11outpower"
),
IWPRIV_GET
(
DOT11_OID_SUPPORTEDRATES
,
"supprates"
),
IWPRIV_GET
(
DOT11_OID_SUPPORTEDFREQUENCIES
,
"suppfreq"
),
IWPRIV_U32
(
DOT11_OID_NOISEFLOOR
,
"noisefloor"
),
IWPRIV_GET
(
DOT11_OID_FREQUENCYACTIVITY
,
"freqactivity"
),
IWPRIV_U32
(
DOT11_OID_NONERPPROTECTION
,
"nonerpprotec"
),
IWPRIV_U32
(
DOT11_OID_PROFILES
,
"profile"
),
IWPRIV_GET
(
DOT11_OID_EXTENDEDRATES
,
"extrates"
),
IWPRIV_U32
(
DOT11_OID_MLMEAUTOLEVEL
,
"mlmelevel"
),
IWPRIV_GET
(
DOT11_OID_BSSS
,
"bsss"
),
IWPRIV_GET
(
DOT11_OID_BSSLIST
,
"bsslist"
),
IWPRIV_U32
(
OID_INL_MODE
,
"mode"
),
IWPRIV_U32
(
OID_INL_CONFIG
,
"config"
),
IWPRIV_U32
(
OID_INL_DOT11D_CONFORMANCE
,
".11dconform"
),
IWPRIV_GET
(
OID_INL_PHYCAPABILITIES
,
"phycapa"
),
IWPRIV_U32
(
OID_INL_OUTPUTPOWER
,
"outpower"
),
};
static
const
iw_handler
prism54_private_handler
[]
=
{
(
iw_handler
)
prism54_reset
,
(
iw_handler
)
prism54_get_beacon
,
(
iw_handler
)
prism54_set_beacon
,
(
iw_handler
)
prism54_get_policy
,
(
iw_handler
)
prism54_set_policy
,
(
iw_handler
)
prism54_get_mac
,
...
...
@@ -2194,9 +2322,17 @@ static const iw_handler prism54_private_handler[] = {
(
iw_handler
)
prism54_get_wpa
,
(
iw_handler
)
prism54_set_wpa
,
(
iw_handler
)
NULL
,
(
iw_handler
)
prism54_oid
,
(
iw_handler
)
prism54_debug_oid
,
(
iw_handler
)
prism54_debug_get_oid
,
(
iw_handler
)
prism54_debug_set_oid
,
(
iw_handler
)
prism54_get_oid
,
(
iw_handler
)
prism54_set_oid
,
(
iw_handler
)
prism54_set_u32
,
(
iw_handler
)
NULL
,
(
iw_handler
)
prism54_set_raw
,
(
iw_handler
)
NULL
,
(
iw_handler
)
prism54_set_raw
,
(
iw_handler
)
prism54_get_prismhdr
,
(
iw_handler
)
prism54_set_prismhdr
,
};
const
struct
iw_handler_def
prism54_handler_def
=
{
...
...
@@ -2207,5 +2343,13 @@ const struct iw_handler_def prism54_handler_def = {
.
standard
=
(
iw_handler
*
)
prism54_handler
,
.
private
=
(
iw_handler
*
)
prism54_private_handler
,
.
private_args
=
(
struct
iw_priv_args
*
)
prism54_private_args
,
.
spy_offset
=
offsetof
(
islpci_private
,
spy_data
),
};
/* For ioctls that don't work with the new API */
int
prism54_ioctl
(
struct
net_device
*
ndev
,
struct
ifreq
*
rq
,
int
cmd
)
{
return
-
EOPNOTSUPP
;
}
drivers/net/wireless/prism54/isl_ioctl.h
View file @
e7c0c64e
/*
$Header: /var/lib/cvs/prism54-ng/ksrc/isl_ioctl.h,v 1.30 2004/01/30 16:24:00 ajfa Exp $
/*
*
* Copyright (C) 2002 Intersil Americas Inc.
* (C) 2003 Aurelien Alleaume <slts@free.fr>
...
...
drivers/net/wireless/prism54/isl_oid.h
View file @
e7c0c64e
/*
*
$Id: isl_oid.h,v 1.3 2004/03/09 09:05:27 mcgrof Exp $
*
*
* Copyright (C) 2003 Herbert Valerio Riedel <hvr@gnu.org>
* Copyright (C) 2004 Luis R. Rodriguez <mcgrof@ruslug.rutgers.edu>
* Copyright (C) 2004 Aurelien Alleaume <slts@free.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
...
...
@@ -457,16 +458,29 @@ enum oid_num_t {
OID_NUM_LAST
};
/* We could add more flags. eg: in which mode are they allowed, ro, rw, ...*/
#define OID_FLAG_CACHED 0x01
#define OID_FLAG_U32 0x02
#define OID_FLAG_MLMEEX 0x04
/* this type is special because of a variable
size field when sending. Not yet implemented (not used in driver). */
#define OID_FLAG_CACHED 0x80
#define OID_FLAG_TYPE 0x7f
#define OID_TYPE_U32 0x01
#define OID_TYPE_SSID 0x02
#define OID_TYPE_KEY 0x03
#define OID_TYPE_BUFFER 0x04
#define OID_TYPE_BSS 0x05
#define OID_TYPE_BSSLIST 0x06
#define OID_TYPE_FREQUENCIES 0x07
#define OID_TYPE_MLME 0x08
#define OID_TYPE_MLMEEX 0x09
#define OID_TYPE_ADDR 0x0A
#define OID_TYPE_RAW 0x0B
/* OID_TYPE_MLMEEX is special because of a variable size field when sending.
* Not yet implemented (not used in driver anyway).
*/
struct
oid_t
{
enum
oid_num_t
oid
;
short
range
;
/* to define a range of oid */
short
size
;
/* size of the associated data */
short
size
;
/*
max
size of the associated data */
char
flags
;
};
...
...
@@ -478,6 +492,7 @@ union oid_res_t {
#define IWMAX_BITRATES 20
#define IWMAX_BSS 24
#define IWMAX_FREQ 30
#define PRIV_STR_SIZE 1024
#endif
/* !defined(_ISL_OID_H) */
/* EOF */
drivers/net/wireless/prism54/islpci_dev.c
View file @
e7c0c64e
/*
$Header: /var/lib/cvs/prism54-ng/ksrc/islpci_dev.c,v 1.68 2004/02/28 03:06:07 mcgrof Exp $
/*
*
* Copyright (C) 2002 Intersil Americas Inc.
* Copyright (C) 2003 Herbert Valerio Riedel <hvr@gnu.org>
...
...
@@ -715,9 +715,9 @@ islpci_setup(struct pci_dev *pdev)
priv
=
netdev_priv
(
ndev
);
priv
->
ndev
=
ndev
;
priv
->
pdev
=
pdev
;
priv
->
monitor_type
=
ARPHRD_IEEE80211
;
priv
->
ndev
->
type
=
(
priv
->
iw_mode
==
IW_MODE_MONITOR
)
?
ARPHRD_IEEE80211
:
ARPHRD_ETHER
;
priv
->
monitor_type
:
ARPHRD_ETHER
;
/* save the start and end address of the PCI memory area */
ndev
->
mem_start
=
(
unsigned
long
)
priv
->
device_base
;
...
...
@@ -743,9 +743,11 @@ islpci_setup(struct pci_dev *pdev)
/* initialize workqueue's */
INIT_WORK
(
&
priv
->
stats_work
,
(
void
(
*
)(
void
*
))
prism54_update_stats
,
priv
);
priv
->
stats_timestamp
=
0
;
INIT_WORK
(
&
priv
->
reset_task
,
islpci_do_reset_and_wake
,
priv
);
priv
->
reset_task_pending
=
0
;
/* allocate various memory areas */
if
(
islpci_alloc_memory
(
priv
))
goto
do_free_netdev
;
...
...
drivers/net/wireless/prism54/islpci_dev.h
View file @
e7c0c64e
/*
$Header: /var/lib/cvs/prism54-ng/ksrc/islpci_dev.h,v 1.53 2004/02/28 03:06:07 mcgrof Exp $
/*
*
* Copyright (C) 2002 Intersil Americas Inc.
* Copyright (C) 2003 Herbert Valerio Riedel <hvr@gnu.org>
* Copyright (C) 2003 Luis R. Rodriguez <mcgrof@ruslug.rutgers.edu>
* Copyright (C) 2003 Aurelien Alleaume <slts@free.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
...
...
@@ -25,6 +26,7 @@
#include <linux/version.h>
#include <linux/netdevice.h>
#include <linux/wireless.h>
#include <net/iw_handler.h>
#include <linux/list.h>
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,41)
...
...
@@ -110,6 +112,10 @@ typedef struct {
struct
iw_statistics
local_iwstatistics
;
struct
iw_statistics
iwstatistics
;
struct
iw_spy_data
spy_data
;
/* iwspy support */
int
monitor_type
;
/* ARPHRD_IEEE80211 or ARPHRD_IEEE80211_PRISM */
struct
islpci_acl
acl
;
/* PCI bus allocation & configuration members */
...
...
@@ -187,6 +193,9 @@ typedef struct {
struct
list_head
bss_wpa_list
;
int
num_bss_wpa
;
struct
semaphore
wpa_sem
;
struct
work_struct
reset_task
;
int
reset_task_pending
;
}
islpci_private
;
static
inline
islpci_state_t
...
...
drivers/net/wireless/prism54/islpci_eth.c
View file @
e7c0c64e
/*
$Header: /var/lib/cvs/prism54-ng/ksrc/islpci_eth.c,v 1.27 2004/01/30 16:24:00 ajfa Exp $
/*
*
* Copyright (C) 2002 Intersil Americas Inc.
*
*
Copyright (C) 2004 Aurelien Alleaume <slts@free.fr>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License
...
...
@@ -24,10 +24,12 @@
#include <linux/delay.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/if_arp.h>
#include "isl_38xx.h"
#include "islpci_eth.h"
#include "islpci_mgt.h"
#include "oid_mgt.h"
/******************************************************************************
Network Interface functions
...
...
@@ -246,6 +248,69 @@ islpci_eth_transmit(struct sk_buff *skb, struct net_device *ndev)
return
err
;
}
static
inline
int
islpci_monitor_rx
(
islpci_private
*
priv
,
struct
sk_buff
**
skb
)
{
/* The card reports full 802.11 packets but with a 20 bytes
* header and without the FCS. But there a is a bit that
* indicates if the packet is corrupted :-) */
struct
rfmon_header
*
hdr
=
(
struct
rfmon_header
*
)
(
*
skb
)
->
data
;
if
(
hdr
->
flags
&
0x01
)
/* This one is bad. Drop it ! */
return
-
1
;
if
(
priv
->
ndev
->
type
==
ARPHRD_IEEE80211_PRISM
)
{
struct
avs_80211_1_header
*
avs
;
/* extract the relevant data from the header */
u32
clock
=
hdr
->
clock
;
u8
rate
=
hdr
->
rate
;
u16
freq
=
be16_to_cpu
(
hdr
->
freq
);
u8
rssi
=
hdr
->
rssi
;
skb_pull
(
*
skb
,
sizeof
(
struct
rfmon_header
));
if
(
skb_headroom
(
*
skb
)
<
sizeof
(
struct
avs_80211_1_header
))
{
struct
sk_buff
*
newskb
=
skb_copy_expand
(
*
skb
,
sizeof
(
struct
avs_80211_1_header
),
0
,
GFP_ATOMIC
);
if
(
newskb
)
{
kfree_skb
(
*
skb
);
*
skb
=
newskb
;
}
else
return
-
1
;
/* This behavior is not very subtile... */
}
/* make room for the new header and fill it. */
avs
=
(
struct
avs_80211_1_header
*
)
skb_push
(
*
skb
,
sizeof
(
struct
avs_80211_1_header
));
avs
->
version
=
htonl
(
P80211CAPTURE_VERSION
);
avs
->
length
=
htonl
(
sizeof
(
struct
avs_80211_1_header
));
avs
->
mactime
=
__cpu_to_be64
(
clock
);
avs
->
hosttime
=
__cpu_to_be64
(
jiffies
);
avs
->
phytype
=
htonl
(
6
);
/*OFDM: 6 for (g), 8 for (a) */
avs
->
channel
=
htonl
(
channel_of_freq
(
freq
));
avs
->
datarate
=
htonl
(
rate
*
5
);
avs
->
antenna
=
htonl
(
0
);
/*unknown */
avs
->
priority
=
htonl
(
0
);
/*unknown */
avs
->
ssi_type
=
htonl
(
2
);
/*2: dBm, 3: raw RSSI */
avs
->
ssi_signal
=
htonl
(
rssi
);
avs
->
ssi_noise
=
htonl
(
priv
->
local_iwstatistics
.
qual
.
noise
);
/*better than 'undefined', I assume */
avs
->
preamble
=
htonl
(
0
);
/*unknown */
avs
->
encoding
=
htonl
(
0
);
/*unknown */
}
else
skb_pull
(
*
skb
,
sizeof
(
struct
rfmon_header
));
(
*
skb
)
->
protocol
=
htons
(
ETH_P_802_2
);
(
*
skb
)
->
mac
.
raw
=
(
*
skb
)
->
data
;
(
*
skb
)
->
pkt_type
=
PACKET_OTHERHOST
;
return
0
;
}
int
islpci_eth_receive
(
islpci_private
*
priv
)
{
...
...
@@ -266,7 +331,8 @@ islpci_eth_receive(islpci_private *priv)
index
=
priv
->
free_data_rx
%
ISL38XX_CB_RX_QSIZE
;
size
=
le16_to_cpu
(
control_block
->
rx_data_low
[
index
].
size
);
skb
=
priv
->
data_low_rx
[
index
];
offset
=
((
unsigned
long
)
le32_to_cpu
(
control_block
->
rx_data_low
[
index
].
address
)
-
offset
=
((
unsigned
long
)
le32_to_cpu
(
control_block
->
rx_data_low
[
index
].
address
)
-
(
unsigned
long
)
skb
->
data
)
&
3
;
#if VERBOSE > SHOW_ERROR_MESSAGES
...
...
@@ -314,29 +380,32 @@ islpci_eth_receive(islpci_private *priv)
/* do some additional sk_buff and network layer parameters */
skb
->
dev
=
ndev
;
/* take care of monitor mode */
if
(
priv
->
iw_mode
==
IW_MODE_MONITOR
)
{
/* The card reports full 802.11 packets but with a 20 bytes
* header and without the FCS. But there a is a bit that
* indicates if the packet is corrupted :-) */
/* int i; */
if
(
skb
->
data
[
8
]
&
0x01
){
/* This one is bad. Drop it !*/
discard
=
1
;
/* printk("BAD\n");*/
/* take care of monitor mode and spy monitoring. */
if
(
priv
->
iw_mode
==
IW_MODE_MONITOR
)
discard
=
islpci_monitor_rx
(
priv
,
&
skb
);
else
{
if
(
skb
->
data
[
2
*
ETH_ALEN
]
==
0
)
{
/* The packet has a rx_annex. Read it for spy monitoring, Then
* remove it, while keeping the 2 leading MAC addr.
*/
struct
iw_quality
wstats
;
struct
rx_annex_header
*
annex
=
(
struct
rx_annex_header
*
)
skb
->
data
;
wstats
.
level
=
annex
->
rfmon
.
rssi
;
/* The noise value can be a bit outdated if nobody's
* reading wireless stats... */
wstats
.
noise
=
priv
->
local_iwstatistics
.
qual
.
noise
;
wstats
.
qual
=
wstats
.
level
-
wstats
.
noise
;
wstats
.
updated
=
0x07
;
/* Update spy records */
wireless_spy_update
(
ndev
,
annex
->
addr2
,
&
wstats
);
memcpy
(
skb
->
data
+
sizeof
(
struct
rfmon_header
),
skb
->
data
,
2
*
ETH_ALEN
);
skb_pull
(
skb
,
sizeof
(
struct
rfmon_header
));
}
/*
for(i=0;i<50;i++)
printk("%2.2X:",skb->data[i]);
printk("\n");
*/
skb_pull
(
skb
,
20
);
skb
->
protocol
=
htons
(
ETH_P_802_2
);
skb
->
mac
.
raw
=
skb
->
data
;
skb
->
pkt_type
=
PACKET_OTHERHOST
;
}
else
skb
->
protocol
=
eth_type_trans
(
skb
,
ndev
);
}
skb
->
ip_summed
=
CHECKSUM_NONE
;
priv
->
statistics
.
rx_packets
++
;
priv
->
statistics
.
rx_bytes
+=
size
;
...
...
@@ -351,8 +420,7 @@ islpci_eth_receive(islpci_private *priv)
if
(
discard
)
{
dev_kfree_skb
(
skb
);
skb
=
NULL
;
}
else
}
else
netif_rx
(
skb
);
/* increment the read index for the rx data low queue */
...
...
@@ -403,7 +471,7 @@ islpci_eth_receive(islpci_private *priv)
wmb
();
/* increment the driver read pointer */
add_le32p
((
u32
*
)
&
control_block
->
add_le32p
((
u32
*
)
&
control_block
->
driver_curr_frag
[
ISL38XX_CB_RX_DATA_LQ
],
1
);
}
...
...
@@ -413,6 +481,15 @@ islpci_eth_receive(islpci_private *priv)
return
0
;
}
void
islpci_do_reset_and_wake
(
void
*
data
)
{
islpci_private
*
priv
=
(
islpci_private
*
)
data
;
islpci_reset
(
priv
,
1
);
netif_wake_queue
(
priv
->
ndev
);
priv
->
reset_task_pending
=
0
;
}
void
islpci_eth_tx_timeout
(
struct
net_device
*
ndev
)
{
...
...
@@ -422,13 +499,11 @@ islpci_eth_tx_timeout(struct net_device *ndev)
/* increment the transmit error counter */
statistics
->
tx_errors
++
;
#if 0
/* don't do this here! we are not allowed to sleep since we are in interrupt context */
if (islpci_reset(priv))
printk(KERN_ERR "%s: error on TX timeout card reset!\n",
ndev->name);
#endif
if
(
!
priv
->
reset_task_pending
)
{
priv
->
reset_task_pending
=
1
;
netif_stop_queue
(
ndev
);
schedule_work
(
&
priv
->
reset_task
);
}
/* netif_wake_queue(ndev); */
return
;
}
drivers/net/wireless/prism54/islpci_eth.h
View file @
e7c0c64e
/*
$Header: /var/lib/cvs/prism54-ng/ksrc/islpci_eth.h,v 1.5 2004/01/12 22:16:32 jmaurer Exp $
/*
*
* Copyright (C) 2002 Intersil Americas Inc.
*
...
...
@@ -23,9 +23,51 @@
#include "isl_38xx.h"
#include "islpci_dev.h"
struct
rfmon_header
{
u16
unk0
;
/* = 0x0000 */
u16
length
;
/* = 0x1400 */
u32
clock
;
/* 1MHz clock */
u8
flags
;
u8
unk1
;
u8
rate
;
u8
unk2
;
u16
freq
;
u16
unk3
;
u8
rssi
;
u8
padding
[
3
];
}
__attribute__
((
packed
));
struct
rx_annex_header
{
u8
addr1
[
ETH_ALEN
];
u8
addr2
[
ETH_ALEN
];
struct
rfmon_header
rfmon
;
}
__attribute__
((
packed
));
/* wlan-ng (and hopefully others) AVS header, version one. Fields in
* network byte order. */
#define P80211CAPTURE_VERSION 0x80211001
struct
avs_80211_1_header
{
uint32_t
version
;
uint32_t
length
;
uint64_t
mactime
;
uint64_t
hosttime
;
uint32_t
phytype
;
uint32_t
channel
;
uint32_t
datarate
;
uint32_t
antenna
;
uint32_t
priority
;
uint32_t
ssi_type
;
int32_t
ssi_signal
;
int32_t
ssi_noise
;
uint32_t
preamble
;
uint32_t
encoding
;
};
void
islpci_eth_cleanup_transmit
(
islpci_private
*
,
isl38xx_control_block
*
);
int
islpci_eth_transmit
(
struct
sk_buff
*
,
struct
net_device
*
);
int
islpci_eth_receive
(
islpci_private
*
);
void
islpci_eth_tx_timeout
(
struct
net_device
*
);
void
islpci_do_reset_and_wake
(
void
*
data
);
#endif
/* _ISL_GEN_H */
drivers/net/wireless/prism54/islpci_hotplug.c
View file @
e7c0c64e
/*
$Header: /var/lib/cvs/prism54-ng/ksrc/islpci_hotplug.c,v 1.56 2004/02/26 23:33:02 mcgrof Exp $
/*
*
* Copyright (C) 2002 Intersil Americas Inc.
* Copyright (C) 2003 Herbert Valerio Riedel <hvr@gnu.org>
...
...
drivers/net/wireless/prism54/islpci_mgt.c
View file @
e7c0c64e
/*
$Header: /var/lib/cvs/prism54-ng/ksrc/islpci_mgt.c,v 1.40 2004/02/01 10:57:23 mcgrof Exp $
/*
*
* Copyright (C) 2002 Intersil Americas Inc.
* Copyright 2004 Jens Maurer <Jens.Maurer@gmx.net>
...
...
drivers/net/wireless/prism54/islpci_mgt.h
View file @
e7c0c64e
/*
$Header: /var/lib/cvs/prism54-ng/ksrc/islpci_mgt.h,v 1.22 2004/01/30 16:24:00 ajfa Exp $
/*
*
* Copyright (C) 2002 Intersil Americas Inc.
* Copyright (C) 2003 Luis R. Rodriguez <mcgrof@ruslug.rutgers.edu>
...
...
drivers/net/wireless/prism54/oid_mgt.c
View file @
e7c0c64e
/*
* Copyright (C) 2003 Aurelien Alleaume <slts@free.fr>
* Copyright (C) 2003
,2004
Aurelien Alleaume <slts@free.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
...
...
@@ -31,182 +31,210 @@ const int frequency_list_a[] = { 5170, 5180, 5190, 5200, 5210, 5220, 5230,
5240
,
5260
,
5280
,
5300
,
5320
};
#define OID_U32(x) {x, 0, sizeof(u32), OID_FLAG_U32}
#define OID_U32_C(x) {x, 0, sizeof(u32), OID_FLAG_U32 | OID_FLAG_CACHED}
#define OID_STRUCT(x,s) {x, 0, sizeof(s), 0}
#define OID_STRUCT_C(x,s) {x, 0, sizeof(s), OID_FLAG_CACHED}
#define OID_STRUCT_MLME(x){x, 0, sizeof(struct obj_mlme), 0}
#define OID_STRUCT_MLMEEX(x){x, 0, sizeof(struct obj_mlmeex), OID_FLAG_MLMEEX}
int
channel_of_freq
(
int
f
)
{
int
c
=
0
;
if
((
f
>=
2412
)
&&
(
f
<=
2484
))
{
while
((
c
<
14
)
&&
(
f
!=
frequency_list_bg
[
c
]))
c
++
;
if
(
c
>=
14
)
return
0
;
}
else
if
((
f
>=
(
int
)
5170
)
&&
(
f
<=
(
int
)
5320
))
{
while
((
c
<
12
)
&&
(
f
!=
frequency_list_a
[
c
]))
c
++
;
if
(
c
>=
12
)
return
0
;
}
else
return
0
;
return
++
c
;
}
#define OID_STRUCT(name,oid,s,t) [name] = {oid, 0, sizeof(s), t}
#define OID_STRUCT_C(name,oid,s,t) OID_STRUCT(name,oid,s,t | OID_FLAG_CACHED)
#define OID_U32(name,oid) OID_STRUCT(name,oid,u32,OID_TYPE_U32)
#define OID_U32_C(name,oid) OID_STRUCT_C(name,oid,u32,OID_TYPE_U32)
#define OID_STRUCT_MLME(name,oid) OID_STRUCT(name,oid,struct obj_mlme,OID_TYPE_MLME)
#define OID_STRUCT_MLMEEX(name,oid) OID_STRUCT(name,oid,struct obj_mlmeex,OID_TYPE_MLMEEX)
#define OID_UNKNOWN(
x) {x, 0, 0, 0}
#define OID_UNKNOWN(
name,oid) OID_STRUCT(name,oid,0,0)
struct
oid_t
isl_oid
[]
=
{
[
GEN_OID_MACADDRESS
]
=
OID_STRUCT
(
0x00000000
,
u8
[
6
]
),
[
GEN_OID_LINKSTATE
]
=
OID_U32
(
0x00000001
),
[
GEN_OID_WATCHDOG
]
=
OID_UNKNOWN
(
0x00000002
),
[
GEN_OID_MIBOP
]
=
OID_UNKNOWN
(
0x00000003
),
[
GEN_OID_OPTIONS
]
=
OID_UNKNOWN
(
0x00000004
),
[
GEN_OID_LEDCONFIG
]
=
OID_UNKNOWN
(
0x00000005
),
OID_STRUCT
(
GEN_OID_MACADDRESS
,
0x00000000
,
u8
[
6
],
OID_TYPE_ADDR
),
OID_U32
(
GEN_OID_LINKSTATE
,
0x00000001
),
OID_UNKNOWN
(
GEN_OID_WATCHDOG
,
0x00000002
),
OID_UNKNOWN
(
GEN_OID_MIBOP
,
0x00000003
),
OID_UNKNOWN
(
GEN_OID_OPTIONS
,
0x00000004
),
OID_UNKNOWN
(
GEN_OID_LEDCONFIG
,
0x00000005
),
/* 802.11 */
[
DOT11_OID_BSSTYPE
]
=
OID_U32_C
(
0x10000000
),
[
DOT11_OID_BSSID
]
=
OID_STRUCT_C
(
0x10000001
,
u8
[
6
]),
[
DOT11_OID_SSID
]
=
OID_STRUCT_C
(
0x10000002
,
struct
obj_ssid
),
[
DOT11_OID_STATE
]
=
OID_U32
(
0x10000003
),
[
DOT11_OID_AID
]
=
OID_U32
(
0x10000004
),
[
DOT11_OID_COUNTRYSTRING
]
=
OID_STRUCT
(
0x10000005
,
u8
[
4
]),
[
DOT11_OID_SSIDOVERRIDE
]
=
OID_STRUCT_C
(
0x10000006
,
struct
obj_ssid
),
[
DOT11_OID_MEDIUMLIMIT
]
=
OID_U32
(
0x11000000
),
[
DOT11_OID_BEACONPERIOD
]
=
OID_U32_C
(
0x11000001
),
[
DOT11_OID_DTIMPERIOD
]
=
OID_U32
(
0x11000002
),
[
DOT11_OID_ATIMWINDOW
]
=
OID_U32
(
0x11000003
),
[
DOT11_OID_LISTENINTERVAL
]
=
OID_U32
(
0x11000004
),
[
DOT11_OID_CFPPERIOD
]
=
OID_U32
(
0x11000005
),
[
DOT11_OID_CFPDURATION
]
=
OID_U32
(
0x11000006
),
[
DOT11_OID_AUTHENABLE
]
=
OID_U32_C
(
0x12000000
),
[
DOT11_OID_PRIVACYINVOKED
]
=
OID_U32_C
(
0x12000001
),
[
DOT11_OID_EXUNENCRYPTED
]
=
OID_U32_C
(
0x12000002
),
[
DOT11_OID_DEFKEYID
]
=
OID_U32_C
(
0x12000003
),
[
DOT11_OID_DEFKEYX
]
=
{
0x12000004
,
3
,
sizeof
(
struct
obj_key
),
OID_FLAG_CACHED
},
/* DOT11_OID_DEFKEY1,...DOT11_OID_DEFKEY4 */
[
DOT11_OID_STAKEY
]
=
OID_UNKNOWN
(
0x12000008
),
[
DOT11_OID_REKEYTHRESHOLD
]
=
OID_U32
(
0x12000009
),
[
DOT11_OID_STASC
]
=
OID_UNKNOWN
(
0x1200000a
),
[
DOT11_OID_PRIVTXREJECTED
]
=
OID_U32
(
0x1a000000
),
[
DOT11_OID_PRIVRXPLAIN
]
=
OID_U32
(
0x1a000001
),
[
DOT11_OID_PRIVRXFAILED
]
=
OID_U32
(
0x1a000002
),
[
DOT11_OID_PRIVRXNOKEY
]
=
OID_U32
(
0x1a000003
),
[
DOT11_OID_RTSTHRESH
]
=
OID_U32_C
(
0x13000000
),
[
DOT11_OID_FRAGTHRESH
]
=
OID_U32_C
(
0x13000001
),
[
DOT11_OID_SHORTRETRIES
]
=
OID_U32_C
(
0x13000002
),
[
DOT11_OID_LONGRETRIES
]
=
OID_U32_C
(
0x13000003
),
[
DOT11_OID_MAXTXLIFETIME
]
=
OID_U32_C
(
0x13000004
),
[
DOT11_OID_MAXRXLIFETIME
]
=
OID_U32
(
0x13000005
),
[
DOT11_OID_AUTHRESPTIMEOUT
]
=
OID_U32
(
0x13000006
),
[
DOT11_OID_ASSOCRESPTIMEOUT
]
=
OID_U32
(
0x13000007
),
[
DOT11_OID_ALOFT_TABLE
]
=
OID_UNKNOWN
(
0x1d000000
),
[
DOT11_OID_ALOFT_CTRL_TABLE
]
=
OID_UNKNOWN
(
0x1d000001
),
[
DOT11_OID_ALOFT_RETREAT
]
=
OID_UNKNOWN
(
0x1d000002
),
[
DOT11_OID_ALOFT_PROGRESS
]
=
OID_UNKNOWN
(
0x1d000003
),
[
DOT11_OID_ALOFT_FIXEDRATE
]
=
OID_U32
(
0x1d000004
),
[
DOT11_OID_ALOFT_RSSIGRAPH
]
=
OID_UNKNOWN
(
0x1d000005
),
[
DOT11_OID_ALOFT_CONFIG
]
=
OID_UNKNOWN
(
0x1d000006
),
OID_U32_C
(
DOT11_OID_BSSTYPE
,
0x10000000
),
OID_STRUCT_C
(
DOT11_OID_BSSID
,
0x10000001
,
u8
[
6
],
OID_TYPE_SSID
),
OID_STRUCT_C
(
DOT11_OID_SSID
,
0x10000002
,
struct
obj_ssid
,
OID_TYPE_SSID
),
OID_U32
(
DOT11_OID_STATE
,
0x10000003
),
OID_U32
(
DOT11_OID_AID
,
0x10000004
),
OID_STRUCT
(
DOT11_OID_COUNTRYSTRING
,
0x10000005
,
u8
[
4
],
OID_TYPE_RAW
),
OID_STRUCT_C
(
DOT11_OID_SSIDOVERRIDE
,
0x10000006
,
struct
obj_ssid
,
OID_TYPE_SSID
),
OID_U32
(
DOT11_OID_MEDIUMLIMIT
,
0x11000000
),
OID_U32_C
(
DOT11_OID_BEACONPERIOD
,
0x11000001
),
OID_U32
(
DOT11_OID_DTIMPERIOD
,
0x11000002
),
OID_U32
(
DOT11_OID_ATIMWINDOW
,
0x11000003
),
OID_U32
(
DOT11_OID_LISTENINTERVAL
,
0x11000004
),
OID_U32
(
DOT11_OID_CFPPERIOD
,
0x11000005
),
OID_U32
(
DOT11_OID_CFPDURATION
,
0x11000006
),
OID_U32_C
(
DOT11_OID_AUTHENABLE
,
0x12000000
),
OID_U32_C
(
DOT11_OID_PRIVACYINVOKED
,
0x12000001
),
OID_U32_C
(
DOT11_OID_EXUNENCRYPTED
,
0x12000002
),
OID_U32_C
(
DOT11_OID_DEFKEYID
,
0x12000003
),
[
DOT11_OID_DEFKEYX
]
=
{
0x12000004
,
3
,
sizeof
(
struct
obj_key
),
OID_FLAG_CACHED
|
OID_TYPE_KEY
},
/* DOT11_OID_DEFKEY1,...DOT11_OID_DEFKEY4 */
OID_UNKNOWN
(
DOT11_OID_STAKEY
,
0x12000008
),
OID_U32
(
DOT11_OID_REKEYTHRESHOLD
,
0x12000009
),
OID_UNKNOWN
(
DOT11_OID_STASC
,
0x1200000a
),
OID_U32
(
DOT11_OID_PRIVTXREJECTED
,
0x1a000000
),
OID_U32
(
DOT11_OID_PRIVRXPLAIN
,
0x1a000001
),
OID_U32
(
DOT11_OID_PRIVRXFAILED
,
0x1a000002
),
OID_U32
(
DOT11_OID_PRIVRXNOKEY
,
0x1a000003
),
OID_U32_C
(
DOT11_OID_RTSTHRESH
,
0x13000000
),
OID_U32_C
(
DOT11_OID_FRAGTHRESH
,
0x13000001
),
OID_U32_C
(
DOT11_OID_SHORTRETRIES
,
0x13000002
),
OID_U32_C
(
DOT11_OID_LONGRETRIES
,
0x13000003
),
OID_U32_C
(
DOT11_OID_MAXTXLIFETIME
,
0x13000004
),
OID_U32
(
DOT11_OID_MAXRXLIFETIME
,
0x13000005
),
OID_U32
(
DOT11_OID_AUTHRESPTIMEOUT
,
0x13000006
),
OID_U32
(
DOT11_OID_ASSOCRESPTIMEOUT
,
0x13000007
),
OID_UNKNOWN
(
DOT11_OID_ALOFT_TABLE
,
0x1d000000
),
OID_UNKNOWN
(
DOT11_OID_ALOFT_CTRL_TABLE
,
0x1d000001
),
OID_UNKNOWN
(
DOT11_OID_ALOFT_RETREAT
,
0x1d000002
),
OID_UNKNOWN
(
DOT11_OID_ALOFT_PROGRESS
,
0x1d000003
),
OID_U32
(
DOT11_OID_ALOFT_FIXEDRATE
,
0x1d000004
),
OID_UNKNOWN
(
DOT11_OID_ALOFT_RSSIGRAPH
,
0x1d000005
),
OID_UNKNOWN
(
DOT11_OID_ALOFT_CONFIG
,
0x1d000006
),
[
DOT11_OID_VDCFX
]
=
{
0x1b000000
,
7
,
0
,
0
},
[
DOT11_OID_MAXFRAMEBURST
]
=
OID_U32
(
0x1b000008
),
/* in microseconds */
OID_U32
(
DOT11_OID_MAXFRAMEBURST
,
0x1b000008
),
[
DOT11_OID_PSM
]
=
OID_U32
(
0x14000000
),
[
DOT11_OID_CAMTIMEOUT
]
=
OID_U32
(
0x14000001
),
[
DOT11_OID_RECEIVEDTIMS
]
=
OID_U32
(
0x14000002
),
[
DOT11_OID_ROAMPREFERENCE
]
=
OID_U32
(
0x14000003
),
OID_U32
(
DOT11_OID_PSM
,
0x14000000
),
OID_U32
(
DOT11_OID_CAMTIMEOUT
,
0x14000001
),
OID_U32
(
DOT11_OID_RECEIVEDTIMS
,
0x14000002
),
OID_U32
(
DOT11_OID_ROAMPREFERENCE
,
0x14000003
),
[
DOT11_OID_BRIDGELOCAL
]
=
OID_U32
(
0x15000000
),
[
DOT11_OID_CLIENTS
]
=
OID_U32
(
0x15000001
),
[
DOT11_OID_CLIENTSASSOCIATED
]
=
OID_U32
(
0x15000002
),
OID_U32
(
DOT11_OID_BRIDGELOCAL
,
0x15000000
),
OID_U32
(
DOT11_OID_CLIENTS
,
0x15000001
),
OID_U32
(
DOT11_OID_CLIENTSASSOCIATED
,
0x15000002
),
[
DOT11_OID_CLIENTX
]
=
{
0x15000003
,
2006
,
0
,
0
},
/* DOT11_OID_CLIENTX,...DOT11_OID_CLIENT2007 */
[
DOT11_OID_CLIENTFIND
]
=
OID_STRUCT
(
0x150007DB
,
u8
[
6
]),
[
DOT11_OID_WDSLINKADD
]
=
OID_STRUCT
(
0x150007DC
,
u8
[
6
]),
[
DOT11_OID_WDSLINKREMOVE
]
=
OID_STRUCT
(
0x150007DD
,
u8
[
6
]),
[
DOT11_OID_EAPAUTHSTA
]
=
OID_STRUCT
(
0x150007DE
,
u8
[
6
]),
[
DOT11_OID_EAPUNAUTHSTA
]
=
OID_STRUCT
(
0x150007DF
,
u8
[
6
]),
[
DOT11_OID_DOT1XENABLE
]
=
OID_U32_C
(
0x150007E0
),
[
DOT11_OID_MICFAILURE
]
=
OID_UNKNOWN
(
0x150007E1
),
[
DOT11_OID_REKEYINDICATE
]
=
OID_UNKNOWN
(
0x150007E2
),
[
DOT11_OID_MPDUTXSUCCESSFUL
]
=
OID_U32
(
0x16000000
),
[
DOT11_OID_MPDUTXONERETRY
]
=
OID_U32
(
0x16000001
),
[
DOT11_OID_MPDUTXMULTIPLERETRIES
]
=
OID_U32
(
0x16000002
),
[
DOT11_OID_MPDUTXFAILED
]
=
OID_U32
(
0x16000003
),
[
DOT11_OID_MPDURXSUCCESSFUL
]
=
OID_U32
(
0x16000004
),
[
DOT11_OID_MPDURXDUPS
]
=
OID_U32
(
0x16000005
),
[
DOT11_OID_RTSSUCCESSFUL
]
=
OID_U32
(
0x16000006
),
[
DOT11_OID_RTSFAILED
]
=
OID_U32
(
0x16000007
),
[
DOT11_OID_ACKFAILED
]
=
OID_U32
(
0x16000008
),
[
DOT11_OID_FRAMERECEIVES
]
=
OID_U32
(
0x16000009
),
[
DOT11_OID_FRAMEERRORS
]
=
OID_U32
(
0x1600000A
),
[
DOT11_OID_FRAMEABORTS
]
=
OID_U32
(
0x1600000B
),
[
DOT11_OID_FRAMEABORTSPHY
]
=
OID_U32
(
0x1600000C
),
[
DOT11_OID_SLOTTIME
]
=
OID_U32
(
0x17000000
),
[
DOT11_OID_CWMIN
]
=
OID_U32
(
0x17000001
),
[
DOT11_OID_CWMAX
]
=
OID_U32
(
0x17000002
),
[
DOT11_OID_ACKWINDOW
]
=
OID_U32
(
0x17000003
),
[
DOT11_OID_ANTENNARX
]
=
OID_U32
(
0x17000004
),
[
DOT11_OID_ANTENNATX
]
=
OID_U32
(
0x17000005
),
[
DOT11_OID_ANTENNADIVERSITY
]
=
OID_U32
(
0x17000006
),
[
DOT11_OID_CHANNEL
]
=
OID_U32_C
(
0x17000007
),
[
DOT11_OID_EDTHRESHOLD
]
=
OID_U32_C
(
0x17000008
),
[
DOT11_OID_PREAMBLESETTINGS
]
=
OID_U32
(
0x17000009
),
[
DOT11_OID_RATES
]
=
OID_STRUCT
(
0x1700000A
,
u8
[
IWMAX_BITRATES
+
1
]),
[
DOT11_OID_CCAMODESUPPORTED
]
=
OID_U32
(
0x1700000B
),
[
DOT11_OID_CCAMODE
]
=
OID_U32
(
0x1700000C
),
[
DOT11_OID_RSSIVECTOR
]
=
OID_U32
(
0x1700000D
),
[
DOT11_OID_OUTPUTPOWERTABLE
]
=
OID_U32
(
0x1700000E
),
[
DOT11_OID_OUTPUTPOWER
]
=
OID_U32_C
(
0x1700000F
),
[
DOT11_OID_SUPPORTEDRATES
]
=
OID_STRUCT
(
0x17000010
,
u8
[
IWMAX_BITRATES
+
1
]),
[
DOT11_OID_FREQUENCY
]
=
OID_U32_C
(
0x17000011
),
[
DOT11_OID_SUPPORTEDFREQUENCIES
]
=
{
0x17000012
,
0
,
sizeof
(
struct
obj_frequencies
)
+
sizeof
(
u16
)
*
IWMAX_FREQ
,
0
},
[
DOT11_OID_NOISEFLOOR
]
=
OID_U32
(
0x17000013
),
[
DOT11_OID_FREQUENCYACTIVITY
]
=
OID_STRUCT
(
0x17000014
,
u8
[
IWMAX_FREQ
+
1
]),
[
DOT11_OID_IQCALIBRATIONTABLE
]
=
OID_UNKNOWN
(
0x17000015
),
[
DOT11_OID_NONERPPROTECTION
]
=
OID_U32
(
0x17000016
),
[
DOT11_OID_SLOTSETTINGS
]
=
OID_U32
(
0x17000017
),
[
DOT11_OID_NONERPTIMEOUT
]
=
OID_U32
(
0x17000018
),
[
DOT11_OID_PROFILES
]
=
OID_U32
(
0x17000019
),
[
DOT11_OID_EXTENDEDRATES
]
=
OID_STRUCT
(
0x17000020
,
u8
[
IWMAX_BITRATES
+
1
]),
[
DOT11_OID_DEAUTHENTICATE
]
=
OID_STRUCT_MLME
(
0x18000000
),
[
DOT11_OID_AUTHENTICATE
]
=
OID_STRUCT_MLME
(
0x18000001
),
[
DOT11_OID_DISASSOCIATE
]
=
OID_STRUCT_MLME
(
0x18000002
),
[
DOT11_OID_ASSOCIATE
]
=
OID_STRUCT_MLME
(
0x18000003
),
[
DOT11_OID_SCAN
]
=
OID_UNKNOWN
(
0x18000004
),
[
DOT11_OID_BEACON
]
=
OID_STRUCT_MLMEEX
(
0x18000005
),
[
DOT11_OID_PROBE
]
=
OID_STRUCT_MLMEEX
(
0x18000006
),
[
DOT11_OID_DEAUTHENTICATEEX
]
=
OID_STRUCT_MLMEEX
(
0x18000007
),
[
DOT11_OID_AUTHENTICATEEX
]
=
OID_STRUCT_MLMEEX
(
0x18000008
),
[
DOT11_OID_DISASSOCIATEEX
]
=
OID_STRUCT_MLMEEX
(
0x18000009
),
[
DOT11_OID_ASSOCIATEEX
]
=
OID_STRUCT_MLMEEX
(
0x1800000A
),
[
DOT11_OID_REASSOCIATE
]
=
OID_STRUCT_MLMEEX
(
0x1800000B
),
[
DOT11_OID_REASSOCIATEEX
]
=
OID_STRUCT_MLMEEX
(
0x1800000C
),
[
DOT11_OID_NONERPSTATUS
]
=
OID_U32
(
0x1E000000
),
[
DOT11_OID_STATIMEOUT
]
=
OID_U32
(
0x19000000
),
[
DOT11_OID_MLMEAUTOLEVEL
]
=
OID_U32_C
(
0x19000001
),
[
DOT11_OID_BSSTIMEOUT
]
=
OID_U32
(
0x19000002
),
[
DOT11_OID_ATTACHMENT
]
=
OID_UNKNOWN
(
0x19000003
),
[
DOT11_OID_PSMBUFFER
]
=
OID_STRUCT_C
(
0x19000004
,
struct
obj_buffer
),
[
DOT11_OID_BSSS
]
=
OID_U32
(
0x1C000000
),
[
DOT11_OID_BSSX
]
=
{
0x1C000001
,
63
,
sizeof
(
struct
obj_bss
),
0
},
/*DOT11_OID_BSS1,...,DOT11_OID_BSS64 */
[
DOT11_OID_BSSFIND
]
=
OID_STRUCT
(
0x1C000042
,
struct
obj_bss
),
OID_STRUCT
(
DOT11_OID_CLIENTFIND
,
0x150007DB
,
u8
[
6
],
OID_TYPE_ADDR
),
OID_STRUCT
(
DOT11_OID_WDSLINKADD
,
0x150007DC
,
u8
[
6
],
OID_TYPE_ADDR
),
OID_STRUCT
(
DOT11_OID_WDSLINKREMOVE
,
0x150007DD
,
u8
[
6
],
OID_TYPE_ADDR
),
OID_STRUCT
(
DOT11_OID_EAPAUTHSTA
,
0x150007DE
,
u8
[
6
],
OID_TYPE_ADDR
),
OID_STRUCT
(
DOT11_OID_EAPUNAUTHSTA
,
0x150007DF
,
u8
[
6
],
OID_TYPE_ADDR
),
OID_U32_C
(
DOT11_OID_DOT1XENABLE
,
0x150007E0
),
OID_UNKNOWN
(
DOT11_OID_MICFAILURE
,
0x150007E1
),
OID_UNKNOWN
(
DOT11_OID_REKEYINDICATE
,
0x150007E2
),
OID_U32
(
DOT11_OID_MPDUTXSUCCESSFUL
,
0x16000000
),
OID_U32
(
DOT11_OID_MPDUTXONERETRY
,
0x16000001
),
OID_U32
(
DOT11_OID_MPDUTXMULTIPLERETRIES
,
0x16000002
),
OID_U32
(
DOT11_OID_MPDUTXFAILED
,
0x16000003
),
OID_U32
(
DOT11_OID_MPDURXSUCCESSFUL
,
0x16000004
),
OID_U32
(
DOT11_OID_MPDURXDUPS
,
0x16000005
),
OID_U32
(
DOT11_OID_RTSSUCCESSFUL
,
0x16000006
),
OID_U32
(
DOT11_OID_RTSFAILED
,
0x16000007
),
OID_U32
(
DOT11_OID_ACKFAILED
,
0x16000008
),
OID_U32
(
DOT11_OID_FRAMERECEIVES
,
0x16000009
),
OID_U32
(
DOT11_OID_FRAMEERRORS
,
0x1600000A
),
OID_U32
(
DOT11_OID_FRAMEABORTS
,
0x1600000B
),
OID_U32
(
DOT11_OID_FRAMEABORTSPHY
,
0x1600000C
),
OID_U32
(
DOT11_OID_SLOTTIME
,
0x17000000
),
OID_U32
(
DOT11_OID_CWMIN
,
0x17000001
),
OID_U32
(
DOT11_OID_CWMAX
,
0x17000002
),
OID_U32
(
DOT11_OID_ACKWINDOW
,
0x17000003
),
OID_U32
(
DOT11_OID_ANTENNARX
,
0x17000004
),
OID_U32
(
DOT11_OID_ANTENNATX
,
0x17000005
),
OID_U32
(
DOT11_OID_ANTENNADIVERSITY
,
0x17000006
),
OID_U32_C
(
DOT11_OID_CHANNEL
,
0x17000007
),
OID_U32_C
(
DOT11_OID_EDTHRESHOLD
,
0x17000008
),
OID_U32
(
DOT11_OID_PREAMBLESETTINGS
,
0x17000009
),
OID_STRUCT
(
DOT11_OID_RATES
,
0x1700000A
,
u8
[
IWMAX_BITRATES
+
1
],
OID_TYPE_RAW
),
OID_U32
(
DOT11_OID_CCAMODESUPPORTED
,
0x1700000B
),
OID_U32
(
DOT11_OID_CCAMODE
,
0x1700000C
),
OID_UNKNOWN
(
DOT11_OID_RSSIVECTOR
,
0x1700000D
),
OID_UNKNOWN
(
DOT11_OID_OUTPUTPOWERTABLE
,
0x1700000E
),
OID_U32
(
DOT11_OID_OUTPUTPOWER
,
0x1700000F
),
OID_STRUCT
(
DOT11_OID_SUPPORTEDRATES
,
0x17000010
,
u8
[
IWMAX_BITRATES
+
1
],
OID_TYPE_RAW
),
OID_U32_C
(
DOT11_OID_FREQUENCY
,
0x17000011
),
[
DOT11_OID_SUPPORTEDFREQUENCIES
]
=
{
0x17000012
,
0
,
sizeof
(
struct
obj_frequencies
)
+
sizeof
(
u16
)
*
IWMAX_FREQ
,
OID_TYPE_FREQUENCIES
},
OID_U32
(
DOT11_OID_NOISEFLOOR
,
0x17000013
),
OID_STRUCT
(
DOT11_OID_FREQUENCYACTIVITY
,
0x17000014
,
u8
[
IWMAX_FREQ
+
1
],
OID_TYPE_RAW
),
OID_UNKNOWN
(
DOT11_OID_IQCALIBRATIONTABLE
,
0x17000015
),
OID_U32
(
DOT11_OID_NONERPPROTECTION
,
0x17000016
),
OID_U32
(
DOT11_OID_SLOTSETTINGS
,
0x17000017
),
OID_U32
(
DOT11_OID_NONERPTIMEOUT
,
0x17000018
),
OID_U32
(
DOT11_OID_PROFILES
,
0x17000019
),
OID_STRUCT
(
DOT11_OID_EXTENDEDRATES
,
0x17000020
,
u8
[
IWMAX_BITRATES
+
1
],
OID_TYPE_RAW
),
OID_STRUCT_MLME
(
DOT11_OID_DEAUTHENTICATE
,
0x18000000
),
OID_STRUCT_MLME
(
DOT11_OID_AUTHENTICATE
,
0x18000001
),
OID_STRUCT_MLME
(
DOT11_OID_DISASSOCIATE
,
0x18000002
),
OID_STRUCT_MLME
(
DOT11_OID_ASSOCIATE
,
0x18000003
),
OID_UNKNOWN
(
DOT11_OID_SCAN
,
0x18000004
),
OID_STRUCT_MLMEEX
(
DOT11_OID_BEACON
,
0x18000005
),
OID_STRUCT_MLMEEX
(
DOT11_OID_PROBE
,
0x18000006
),
OID_STRUCT_MLMEEX
(
DOT11_OID_DEAUTHENTICATEEX
,
0x18000007
),
OID_STRUCT_MLMEEX
(
DOT11_OID_AUTHENTICATEEX
,
0x18000008
),
OID_STRUCT_MLMEEX
(
DOT11_OID_DISASSOCIATEEX
,
0x18000009
),
OID_STRUCT_MLMEEX
(
DOT11_OID_ASSOCIATEEX
,
0x1800000A
),
OID_STRUCT_MLMEEX
(
DOT11_OID_REASSOCIATE
,
0x1800000B
),
OID_STRUCT_MLMEEX
(
DOT11_OID_REASSOCIATEEX
,
0x1800000C
),
OID_U32
(
DOT11_OID_NONERPSTATUS
,
0x1E000000
),
OID_U32
(
DOT11_OID_STATIMEOUT
,
0x19000000
),
OID_U32_C
(
DOT11_OID_MLMEAUTOLEVEL
,
0x19000001
),
OID_U32
(
DOT11_OID_BSSTIMEOUT
,
0x19000002
),
OID_UNKNOWN
(
DOT11_OID_ATTACHMENT
,
0x19000003
),
OID_STRUCT_C
(
DOT11_OID_PSMBUFFER
,
0x19000004
,
struct
obj_buffer
,
OID_TYPE_BUFFER
),
OID_U32
(
DOT11_OID_BSSS
,
0x1C000000
),
[
DOT11_OID_BSSX
]
=
{
0x1C000001
,
63
,
sizeof
(
struct
obj_bss
),
OID_TYPE_BSS
},
/*DOT11_OID_BSS1,...,DOT11_OID_BSS64 */
OID_STRUCT
(
DOT11_OID_BSSFIND
,
0x1C000042
,
struct
obj_bss
,
OID_TYPE_BSS
),
[
DOT11_OID_BSSLIST
]
=
{
0x1C000043
,
0
,
sizeof
(
struct
obj_bsslist
)
+
sizeof
(
struct
obj_bss
[
IWMAX_BSS
]),
0
},
[
OID_INL_TUNNEL
]
=
OID_UNKNOWN
(
0xFF020000
),
[
OID_INL_MEMADDR
]
=
OID_UNKNOWN
(
0xFF020001
),
[
OID_INL_MEMORY
]
=
OID_UNKNOWN
(
0xFF020002
),
[
OID_INL_MODE
]
=
OID_U32_C
(
0xFF020003
),
[
OID_INL_COMPONENT_NR
]
=
OID_UNKNOWN
(
0xFF020004
),
[
OID_INL_VERSION
]
=
OID_UNKNOWN
(
0xFF020005
),
[
OID_INL_INTERFACE_ID
]
=
OID_UNKNOWN
(
0xFF020006
),
[
OID_INL_COMPONENT_ID
]
=
OID_UNKNOWN
(
0xFF020007
),
[
OID_INL_CONFIG
]
=
OID_U32_C
(
0xFF020008
),
[
OID_INL_DOT11D_CONFORMANCE
]
=
OID_U32_C
(
0xFF02000C
),
[
OID_INL_PHYCAPABILITIES
]
=
OID_U32
(
0xFF02000D
),
[
OID_INL_OUTPUTPOWER
]
=
OID_U32_C
(
0xFF02000F
),
sizeof
(
struct
obj_bss
[
IWMAX_BSS
]),
OID_TYPE_BSSLIST
},
OID_UNKNOWN
(
OID_INL_TUNNEL
,
0xFF020000
),
OID_UNKNOWN
(
OID_INL_MEMADDR
,
0xFF020001
),
OID_UNKNOWN
(
OID_INL_MEMORY
,
0xFF020002
),
OID_U32_C
(
OID_INL_MODE
,
0xFF020003
),
OID_UNKNOWN
(
OID_INL_COMPONENT_NR
,
0xFF020004
),
OID_UNKNOWN
(
OID_INL_VERSION
,
0xFF020005
),
OID_UNKNOWN
(
OID_INL_INTERFACE_ID
,
0xFF020006
),
OID_UNKNOWN
(
OID_INL_COMPONENT_ID
,
0xFF020007
),
OID_U32_C
(
OID_INL_CONFIG
,
0xFF020008
),
OID_U32_C
(
OID_INL_DOT11D_CONFORMANCE
,
0xFF02000C
),
OID_U32
(
OID_INL_PHYCAPABILITIES
,
0xFF02000D
),
OID_U32_C
(
OID_INL_OUTPUTPOWER
,
0xFF02000F
),
};
...
...
@@ -257,6 +285,134 @@ mgt_clean(islpci_private *priv)
priv
->
mib
=
NULL
;
}
void
mgt_le_to_cpu
(
int
type
,
void
*
data
)
{
switch
(
type
)
{
case
OID_TYPE_U32
:
*
(
u32
*
)
data
=
le32_to_cpu
(
*
(
u32
*
)
data
);
break
;
case
OID_TYPE_BUFFER
:{
struct
obj_buffer
*
buff
=
data
;
buff
->
size
=
le32_to_cpu
(
buff
->
size
);
buff
->
addr
=
le32_to_cpu
(
buff
->
addr
);
break
;
}
case
OID_TYPE_BSS
:{
struct
obj_bss
*
bss
=
data
;
bss
->
age
=
le16_to_cpu
(
bss
->
age
);
bss
->
channel
=
le16_to_cpu
(
bss
->
channel
);
bss
->
capinfo
=
le16_to_cpu
(
bss
->
capinfo
);
bss
->
rates
=
le16_to_cpu
(
bss
->
rates
);
bss
->
basic_rates
=
le16_to_cpu
(
bss
->
basic_rates
);
break
;
}
case
OID_TYPE_BSSLIST
:{
struct
obj_bsslist
*
list
=
data
;
int
i
;
list
->
nr
=
le32_to_cpu
(
list
->
nr
);
for
(
i
=
0
;
i
<
list
->
nr
;
i
++
)
mgt_le_to_cpu
(
OID_TYPE_BSS
,
&
list
->
bsslist
[
i
]);
break
;
}
case
OID_TYPE_FREQUENCIES
:{
struct
obj_frequencies
*
freq
=
data
;
int
i
;
freq
->
nr
=
le16_to_cpu
(
freq
->
nr
);
for
(
i
=
0
;
i
<
freq
->
nr
;
i
++
)
freq
->
mhz
[
i
]
=
le16_to_cpu
(
freq
->
mhz
[
i
]);
break
;
}
case
OID_TYPE_MLME
:{
struct
obj_mlme
*
mlme
=
data
;
mlme
->
id
=
le16_to_cpu
(
mlme
->
id
);
mlme
->
state
=
le16_to_cpu
(
mlme
->
state
);
mlme
->
code
=
le16_to_cpu
(
mlme
->
code
);
break
;
}
case
OID_TYPE_MLMEEX
:{
struct
obj_mlmeex
*
mlme
=
data
;
mlme
->
id
=
le16_to_cpu
(
mlme
->
id
);
mlme
->
state
=
le16_to_cpu
(
mlme
->
state
);
mlme
->
code
=
le16_to_cpu
(
mlme
->
code
);
mlme
->
size
=
le16_to_cpu
(
mlme
->
size
);
break
;
}
case
OID_TYPE_SSID
:
case
OID_TYPE_KEY
:
case
OID_TYPE_ADDR
:
case
OID_TYPE_RAW
:
break
;
default:
BUG
();
}
}
static
void
mgt_cpu_to_le
(
int
type
,
void
*
data
)
{
switch
(
type
)
{
case
OID_TYPE_U32
:
*
(
u32
*
)
data
=
cpu_to_le32
(
*
(
u32
*
)
data
);
break
;
case
OID_TYPE_BUFFER
:{
struct
obj_buffer
*
buff
=
data
;
buff
->
size
=
cpu_to_le32
(
buff
->
size
);
buff
->
addr
=
cpu_to_le32
(
buff
->
addr
);
break
;
}
case
OID_TYPE_BSS
:{
struct
obj_bss
*
bss
=
data
;
bss
->
age
=
cpu_to_le16
(
bss
->
age
);
bss
->
channel
=
cpu_to_le16
(
bss
->
channel
);
bss
->
capinfo
=
cpu_to_le16
(
bss
->
capinfo
);
bss
->
rates
=
cpu_to_le16
(
bss
->
rates
);
bss
->
basic_rates
=
cpu_to_le16
(
bss
->
basic_rates
);
break
;
}
case
OID_TYPE_BSSLIST
:{
struct
obj_bsslist
*
list
=
data
;
int
i
;
list
->
nr
=
cpu_to_le32
(
list
->
nr
);
for
(
i
=
0
;
i
<
list
->
nr
;
i
++
)
mgt_cpu_to_le
(
OID_TYPE_BSS
,
&
list
->
bsslist
[
i
]);
break
;
}
case
OID_TYPE_FREQUENCIES
:{
struct
obj_frequencies
*
freq
=
data
;
int
i
;
freq
->
nr
=
cpu_to_le16
(
freq
->
nr
);
for
(
i
=
0
;
i
<
freq
->
nr
;
i
++
)
freq
->
mhz
[
i
]
=
cpu_to_le16
(
freq
->
mhz
[
i
]);
break
;
}
case
OID_TYPE_MLME
:{
struct
obj_mlme
*
mlme
=
data
;
mlme
->
id
=
cpu_to_le16
(
mlme
->
id
);
mlme
->
state
=
cpu_to_le16
(
mlme
->
state
);
mlme
->
code
=
cpu_to_le16
(
mlme
->
code
);
break
;
}
case
OID_TYPE_MLMEEX
:{
struct
obj_mlmeex
*
mlme
=
data
;
mlme
->
id
=
cpu_to_le16
(
mlme
->
id
);
mlme
->
state
=
cpu_to_le16
(
mlme
->
state
);
mlme
->
code
=
cpu_to_le16
(
mlme
->
code
);
mlme
->
size
=
cpu_to_le16
(
mlme
->
size
);
break
;
}
case
OID_TYPE_SSID
:
case
OID_TYPE_KEY
:
case
OID_TYPE_ADDR
:
case
OID_TYPE_RAW
:
break
;
default:
BUG
();
}
}
/* Note : data is modified during this function */
int
mgt_set_request
(
islpci_private
*
priv
,
enum
oid_num_t
n
,
int
extra
,
void
*
data
)
{
...
...
@@ -265,7 +421,7 @@ mgt_set_request(islpci_private *priv, enum oid_num_t n, int extra, void *data)
int
response_op
=
PIMFOR_OP_ERROR
;
int
dlen
;
void
*
cache
,
*
_data
=
data
;
u32
oid
,
u
;
u32
oid
;
BUG_ON
(
OID_NUM_LAST
<=
n
);
BUG_ON
(
extra
>
isl_oid
[
n
].
range
);
...
...
@@ -279,13 +435,11 @@ mgt_set_request(islpci_private *priv, enum oid_num_t n, int extra, void *data)
cache
+=
(
cache
?
extra
*
dlen
:
0
);
oid
=
isl_oid
[
n
].
oid
+
extra
;
if
(
data
==
NULL
)
if
(
_
data
==
NULL
)
/* we are requested to re-set a cached value */
_data
=
cache
;
if
((
isl_oid
[
n
].
flags
&
OID_FLAG_U32
)
&&
data
)
{
u
=
cpu_to_le32
(
*
(
u32
*
)
data
);
_data
=
&
u
;
}
else
mgt_cpu_to_le
(
isl_oid
[
n
].
flags
&
OID_FLAG_TYPE
,
_data
);
/* If we are going to write to the cache, we don't want anyone to read
* it -> acquire write lock.
* Else we could acquire a read lock to be sure we don't bother the
...
...
@@ -313,6 +467,10 @@ mgt_set_request(islpci_private *priv, enum oid_num_t n, int extra, void *data)
up_write
(
&
priv
->
mib_sem
);
}
/* re-set given data to what it was */
if
(
data
)
mgt_le_to_cpu
(
isl_oid
[
n
].
flags
&
OID_FLAG_TYPE
,
data
);
return
ret
;
}
...
...
@@ -326,7 +484,7 @@ mgt_get_request(islpci_private *priv, enum oid_num_t n, int extra, void *data,
struct
islpci_mgmtframe
*
response
=
NULL
;
int
dlen
;
void
*
cache
,
*
_res
=
NULL
;
void
*
cache
,
*
_res
=
NULL
;
u32
oid
;
BUG_ON
(
OID_NUM_LAST
<=
n
);
...
...
@@ -362,20 +520,19 @@ mgt_get_request(islpci_private *priv, enum oid_num_t n, int extra, void *data,
_res
=
cache
;
ret
=
0
;
}
if
(
isl_oid
[
n
].
flags
&
OID_FLAG_U32
)
{
if
(
ret
)
res
->
u
=
0
;
else
res
->
u
=
le32_to_cpu
(
*
(
u32
*
)
_res
);
}
else
{
if
((
isl_oid
[
n
].
flags
&
OID_FLAG_TYPE
)
==
OID_TYPE_U32
)
res
->
u
=
ret
?
0
:
le32_to_cpu
(
*
(
u32
*
)
_res
);
else
{
res
->
ptr
=
kmalloc
(
reslen
,
GFP_KERNEL
);
BUG_ON
(
res
->
ptr
==
NULL
);
if
(
ret
)
memset
(
res
->
ptr
,
0
,
reslen
);
else
else
{
memcpy
(
res
->
ptr
,
_res
,
reslen
);
mgt_le_to_cpu
(
isl_oid
[
n
].
flags
&
OID_FLAG_TYPE
,
res
->
ptr
);
}
}
if
(
cache
)
up_read
(
&
priv
->
mib_sem
);
...
...
@@ -404,7 +561,7 @@ mgt_commit_list(islpci_private *priv, enum oid_num_t *l, int n)
int
j
=
0
;
u32
oid
=
t
->
oid
;
BUG_ON
(
data
==
NULL
);
while
(
j
<=
t
->
range
){
while
(
j
<=
t
->
range
)
{
response
=
NULL
;
ret
|=
islpci_mgt_transaction
(
priv
->
ndev
,
PIMFOR_OP_SET
,
oid
,
data
,
t
->
size
,
...
...
@@ -431,13 +588,21 @@ mgt_set(islpci_private *priv, enum oid_num_t n, void *data)
BUG_ON
(
priv
->
mib
[
n
]
==
NULL
);
memcpy
(
priv
->
mib
[
n
],
data
,
isl_oid
[
n
].
size
);
if
(
isl_oid
[
n
].
flags
&
OID_FLAG_U32
)
*
(
u32
*
)
priv
->
mib
[
n
]
=
cpu_to_le32
(
*
(
u32
*
)
priv
->
mib
[
n
]);
mgt_cpu_to_le
(
isl_oid
[
n
].
flags
&
OID_FLAG_TYPE
,
priv
->
mib
[
n
]);
}
/* Commits the cache. If something goes wrong, it restarts the device. Lock
* outside
*/
void
mgt_get
(
islpci_private
*
priv
,
enum
oid_num_t
n
,
void
*
res
)
{
BUG_ON
(
OID_NUM_LAST
<=
n
);
BUG_ON
(
priv
->
mib
[
n
]
==
NULL
);
BUG_ON
(
res
==
NULL
);
memcpy
(
res
,
priv
->
mib
[
n
],
isl_oid
[
n
].
size
);
mgt_le_to_cpu
(
isl_oid
[
n
].
flags
&
OID_FLAG_TYPE
,
res
);
}
/* Commits the cache. Lock outside. */
static
enum
oid_num_t
commit_part1
[]
=
{
OID_INL_CONFIG
,
...
...
@@ -530,3 +695,102 @@ mgt_oidtonum(u32 oid)
return
0
;
}
int
mgt_response_to_str
(
enum
oid_num_t
n
,
union
oid_res_t
*
r
,
char
*
str
)
{
switch
(
isl_oid
[
n
].
flags
&
OID_FLAG_TYPE
)
{
case
OID_TYPE_U32
:
return
snprintf
(
str
,
PRIV_STR_SIZE
,
"%u
\n
"
,
r
->
u
);
break
;
case
OID_TYPE_BUFFER
:{
struct
obj_buffer
*
buff
=
r
->
ptr
;
return
snprintf
(
str
,
PRIV_STR_SIZE
,
"size=%u
\n
addr=0x%X
\n
"
,
buff
->
size
,
buff
->
addr
);
}
break
;
case
OID_TYPE_BSS
:{
struct
obj_bss
*
bss
=
r
->
ptr
;
return
snprintf
(
str
,
PRIV_STR_SIZE
,
"age=%u
\n
channel=%u
\n
\
capinfo=0x%X
\n
rates=0x%X
\n
basic_rates=0x%X
\n
"
,
bss
->
age
,
bss
->
channel
,
bss
->
capinfo
,
bss
->
rates
,
bss
->
basic_rates
);
}
break
;
case
OID_TYPE_BSSLIST
:{
struct
obj_bsslist
*
list
=
r
->
ptr
;
int
i
,
k
;
k
=
snprintf
(
str
,
PRIV_STR_SIZE
,
"nr=%u
\n
"
,
list
->
nr
);
for
(
i
=
0
;
i
<
list
->
nr
;
i
++
)
k
+=
snprintf
(
str
+
k
,
PRIV_STR_SIZE
-
k
,
"bss[%u] :
\n
age=%u
\n
channel=%u
\n
capinfo=0x%X
\n
rates=0x%X
\n
basic_rates=0x%X
\n
"
,
i
,
list
->
bsslist
[
i
].
age
,
list
->
bsslist
[
i
].
channel
,
list
->
bsslist
[
i
].
capinfo
,
list
->
bsslist
[
i
].
rates
,
list
->
bsslist
[
i
].
basic_rates
);
return
k
;
}
break
;
case
OID_TYPE_FREQUENCIES
:{
struct
obj_frequencies
*
freq
=
r
->
ptr
;
int
i
,
t
;
printk
(
"nr : %u
\n
"
,
freq
->
nr
);
t
=
snprintf
(
str
,
PRIV_STR_SIZE
,
"nr=%u
\n
"
,
freq
->
nr
);
for
(
i
=
0
;
i
<
freq
->
nr
;
i
++
)
t
+=
snprintf
(
str
+
t
,
PRIV_STR_SIZE
-
t
,
"mhz[%u]=%u
\n
"
,
i
,
freq
->
mhz
[
i
]);
return
t
;
}
break
;
case
OID_TYPE_MLME
:{
struct
obj_mlme
*
mlme
=
r
->
ptr
;
return
snprintf
(
str
,
PRIV_STR_SIZE
,
"id=0x%X
\n
state=0x%X
\n
\
code=0x%X
\n
"
,
mlme
->
id
,
mlme
->
state
,
mlme
->
code
);
}
break
;
case
OID_TYPE_MLMEEX
:{
struct
obj_mlmeex
*
mlme
=
r
->
ptr
;
return
snprintf
(
str
,
PRIV_STR_SIZE
,
"id=0x%X
\n
state=0x%X
\n
\
code=0x%X
\n
size=0x%X
\n
"
,
mlme
->
id
,
mlme
->
state
,
mlme
->
code
,
mlme
->
size
);
}
break
;
case
OID_TYPE_SSID
:{
struct
obj_ssid
*
ssid
=
r
->
ptr
;
return
snprintf
(
str
,
PRIV_STR_SIZE
,
"length=%u
\n
octets=%s
\n
"
,
ssid
->
length
,
ssid
->
octets
);
}
break
;
case
OID_TYPE_KEY
:{
struct
obj_key
*
key
=
r
->
ptr
;
int
t
,
i
;
t
=
snprintf
(
str
,
PRIV_STR_SIZE
,
"type=0x%X
\n
length=0x%X
\n
key=0x"
,
key
->
type
,
key
->
length
);
for
(
i
=
0
;
i
<
key
->
length
;
i
++
)
t
+=
snprintf
(
str
+
t
,
PRIV_STR_SIZE
-
t
,
"%02X:"
,
key
->
key
[
i
]);
t
+=
snprintf
(
str
+
t
,
PRIV_STR_SIZE
-
t
,
"
\n
"
);
return
t
;
}
break
;
case
OID_TYPE_RAW
:
case
OID_TYPE_ADDR
:{
unsigned
char
*
buff
=
r
->
ptr
;
int
t
,
i
;
t
=
snprintf
(
str
,
PRIV_STR_SIZE
,
"hex data="
);
for
(
i
=
0
;
i
<
isl_oid
[
n
].
size
;
i
++
)
t
+=
snprintf
(
str
+
t
,
PRIV_STR_SIZE
-
t
,
"%02X:"
,
buff
[
i
]);
t
+=
snprintf
(
str
+
t
,
PRIV_STR_SIZE
-
t
,
"
\n
"
);
return
t
;
}
break
;
default:
BUG
();
}
return
0
;
}
drivers/net/wireless/prism54/oid_mgt.h
View file @
e7c0c64e
/*
/*
* Copyright (C) 2003 Aurelien Alleaume <slts@free.fr>
*
* This program is free software; you can redistribute it and/or modify
...
...
@@ -28,9 +28,12 @@ int mgt_init(islpci_private *);
void
mgt_clean
(
islpci_private
*
);
/* I don't know where to put these 3 */
extern
const
int
frequency_list_bg
[];
extern
const
int
frequency_list_a
[];
int
channel_of_freq
(
int
);
void
mgt_le_to_cpu
(
int
,
void
*
);
int
mgt_set_request
(
islpci_private
*
,
enum
oid_num_t
,
int
,
void
*
);
...
...
@@ -41,11 +44,15 @@ int mgt_commit_list(islpci_private *, enum oid_num_t *, int);
void
mgt_set
(
islpci_private
*
,
enum
oid_num_t
,
void
*
);
void
mgt_get
(
islpci_private
*
,
enum
oid_num_t
,
void
*
);
void
mgt_commit
(
islpci_private
*
);
int
mgt_mlme_answer
(
islpci_private
*
);
enum
oid_num_t
mgt_oidtonum
(
u32
oid
);
int
mgt_response_to_str
(
enum
oid_num_t
,
union
oid_res_t
*
,
char
*
);
#endif
/* !defined(_OID_MGT_H) */
/* EOF */
include/linux/hdlc.h
View file @
e7c0c64e
...
...
@@ -134,7 +134,7 @@ typedef struct hdlc_device_struct {
int
dce_pvc_count
;
struct
timer_list
timer
;
int
last_poll
;
unsigned
long
last_poll
;
int
reliable
;
int
dce_changed
;
int
request
;
...
...
@@ -149,8 +149,9 @@ typedef struct hdlc_device_struct {
cisco_proto
settings
;
struct
timer_list
timer
;
int
last_poll
;
unsigned
long
last_poll
;
int
up
;
int
request_sent
;
u32
txseq
;
/* TX sequence number */
u32
rxseq
;
/* RX sequence number */
}
cisco
;
...
...
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