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
Kirill Smelkov
linux
Commits
deeee3bf
Commit
deeee3bf
authored
Oct 19, 2004
by
Jeff Garzik
Browse files
Options
Browse Files
Download
Plain Diff
Merge pobox.com:/spare/repo/netdev-2.6/wireless-ext
into pobox.com:/spare/repo/net-drivers-2.6
parents
a4946826
4958c29f
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
305 additions
and
128 deletions
+305
-128
drivers/net/wireless/airo.c
drivers/net/wireless/airo.c
+30
-15
drivers/net/wireless/wavelan.c
drivers/net/wireless/wavelan.c
+12
-7
drivers/net/wireless/wavelan.p.h
drivers/net/wireless/wavelan.p.h
+3
-0
drivers/net/wireless/wavelan_cs.c
drivers/net/wireless/wavelan_cs.c
+14
-9
drivers/net/wireless/wavelan_cs.p.h
drivers/net/wireless/wavelan_cs.p.h
+3
-0
include/linux/netdevice.h
include/linux/netdevice.h
+3
-1
include/linux/wireless.h
include/linux/wireless.h
+52
-12
include/net/iw_handler.h
include/net/iw_handler.h
+42
-18
net/core/dev.c
net/core/dev.c
+1
-1
net/core/wireless.c
net/core/wireless.c
+145
-65
No files found.
drivers/net/wireless/airo.c
View file @
deeee3bf
...
@@ -1189,6 +1189,7 @@ struct airo_info {
...
@@ -1189,6 +1189,7 @@ struct airo_info {
struct
iw_statistics
wstats
;
// wireless stats
struct
iw_statistics
wstats
;
// wireless stats
unsigned
long
scan_timestamp
;
/* Time started to scan */
unsigned
long
scan_timestamp
;
/* Time started to scan */
struct
iw_spy_data
spy_data
;
struct
iw_spy_data
spy_data
;
struct
iw_public_data
wireless_data
;
#endif
/* WIRELESS_EXT */
#endif
/* WIRELESS_EXT */
#ifdef MICSUPPORT
#ifdef MICSUPPORT
/* MIC stuff */
/* MIC stuff */
...
@@ -2640,8 +2641,7 @@ static void wifi_setup(struct net_device *dev)
...
@@ -2640,8 +2641,7 @@ static void wifi_setup(struct net_device *dev)
dev
->
set_mac_address
=
&
airo_set_mac_address
;
dev
->
set_mac_address
=
&
airo_set_mac_address
;
dev
->
do_ioctl
=
&
airo_ioctl
;
dev
->
do_ioctl
=
&
airo_ioctl
;
#ifdef WIRELESS_EXT
#ifdef WIRELESS_EXT
dev
->
get_wireless_stats
=
airo_get_wireless_stats
;
dev
->
wireless_handlers
=
&
airo_handler_def
;
dev
->
wireless_handlers
=
(
struct
iw_handler_def
*
)
&
airo_handler_def
;
#endif
/* WIRELESS_EXT */
#endif
/* WIRELESS_EXT */
dev
->
change_mtu
=
&
airo_change_mtu
;
dev
->
change_mtu
=
&
airo_change_mtu
;
dev
->
open
=
&
airo_open
;
dev
->
open
=
&
airo_open
;
...
@@ -2668,6 +2668,9 @@ static struct net_device *init_wifidev(struct airo_info *ai,
...
@@ -2668,6 +2668,9 @@ static struct net_device *init_wifidev(struct airo_info *ai,
dev
->
priv
=
ethdev
->
priv
;
dev
->
priv
=
ethdev
->
priv
;
dev
->
irq
=
ethdev
->
irq
;
dev
->
irq
=
ethdev
->
irq
;
dev
->
base_addr
=
ethdev
->
base_addr
;
dev
->
base_addr
=
ethdev
->
base_addr
;
#ifdef WIRELESS_EXT
dev
->
wireless_data
=
ethdev
->
wireless_data
;
#endif
/* WIRELESS_EXT */
memcpy
(
dev
->
dev_addr
,
ethdev
->
dev_addr
,
dev
->
addr_len
);
memcpy
(
dev
->
dev_addr
,
ethdev
->
dev_addr
,
dev
->
addr_len
);
err
=
register_netdev
(
dev
);
err
=
register_netdev
(
dev
);
if
(
err
<
0
)
{
if
(
err
<
0
)
{
...
@@ -2747,8 +2750,9 @@ struct net_device *_init_airo_card( unsigned short irq, int port,
...
@@ -2747,8 +2750,9 @@ struct net_device *_init_airo_card( unsigned short irq, int port,
dev
->
set_mac_address
=
&
airo_set_mac_address
;
dev
->
set_mac_address
=
&
airo_set_mac_address
;
dev
->
do_ioctl
=
&
airo_ioctl
;
dev
->
do_ioctl
=
&
airo_ioctl
;
#ifdef WIRELESS_EXT
#ifdef WIRELESS_EXT
dev
->
get_wireless_stats
=
airo_get_wireless_stats
;
dev
->
wireless_handlers
=
&
airo_handler_def
;
dev
->
wireless_handlers
=
(
struct
iw_handler_def
*
)
&
airo_handler_def
;
ai
->
wireless_data
.
spy_data
=
&
ai
->
spy_data
;
dev
->
wireless_data
=
&
ai
->
wireless_data
;
#endif
/* WIRELESS_EXT */
#endif
/* WIRELESS_EXT */
dev
->
change_mtu
=
&
airo_change_mtu
;
dev
->
change_mtu
=
&
airo_change_mtu
;
dev
->
open
=
&
airo_open
;
dev
->
open
=
&
airo_open
;
...
@@ -3231,7 +3235,7 @@ static irqreturn_t airo_interrupt ( int irq, void* dev_id, struct pt_regs *regs)
...
@@ -3231,7 +3235,7 @@ static irqreturn_t airo_interrupt ( int irq, void* dev_id, struct pt_regs *regs)
goto
exitrx
;
goto
exitrx
;
}
}
}
}
#ifdef
IW_WIRELESS_SPY
/* defined in iw_handler.h */
#ifdef
WIRELESS_SPY
if
(
apriv
->
spy_data
.
spy_number
>
0
)
{
if
(
apriv
->
spy_data
.
spy_number
>
0
)
{
char
*
sa
;
char
*
sa
;
struct
iw_quality
wstats
;
struct
iw_quality
wstats
;
...
@@ -3251,7 +3255,7 @@ static irqreturn_t airo_interrupt ( int irq, void* dev_id, struct pt_regs *regs)
...
@@ -3251,7 +3255,7 @@ static irqreturn_t airo_interrupt ( int irq, void* dev_id, struct pt_regs *regs)
/* Update spy records */
/* Update spy records */
wireless_spy_update
(
dev
,
sa
,
&
wstats
);
wireless_spy_update
(
dev
,
sa
,
&
wstats
);
}
}
#endif
/*
IW_
WIRELESS_SPY */
#endif
/* WIRELESS_SPY */
OUT4500
(
apriv
,
EVACK
,
EV_RX
);
OUT4500
(
apriv
,
EVACK
,
EV_RX
);
if
(
test_bit
(
FLAG_802_11
,
&
apriv
->
flags
))
{
if
(
test_bit
(
FLAG_802_11
,
&
apriv
->
flags
))
{
...
@@ -3476,7 +3480,7 @@ static void mpi_receive_802_3(struct airo_info *ai)
...
@@ -3476,7 +3480,7 @@ static void mpi_receive_802_3(struct airo_info *ai)
#else
#else
memcpy
(
buffer
,
ai
->
rxfids
[
0
].
virtual_host_addr
,
len
);
memcpy
(
buffer
,
ai
->
rxfids
[
0
].
virtual_host_addr
,
len
);
#endif
#endif
#ifdef
IW_WIRELESS_SPY
/* defined in iw_handler.h */
#ifdef
WIRELESS_SPY
if
(
ai
->
spy_data
.
spy_number
>
0
)
{
if
(
ai
->
spy_data
.
spy_number
>
0
)
{
char
*
sa
;
char
*
sa
;
struct
iw_quality
wstats
;
struct
iw_quality
wstats
;
...
@@ -3488,7 +3492,7 @@ static void mpi_receive_802_3(struct airo_info *ai)
...
@@ -3488,7 +3492,7 @@ static void mpi_receive_802_3(struct airo_info *ai)
/* Update spy records */
/* Update spy records */
wireless_spy_update
(
ai
->
dev
,
sa
,
&
wstats
);
wireless_spy_update
(
ai
->
dev
,
sa
,
&
wstats
);
}
}
#endif
/*
IW_
WIRELESS_SPY */
#endif
/* WIRELESS_SPY */
skb
->
dev
=
ai
->
dev
;
skb
->
dev
=
ai
->
dev
;
skb
->
ip_summed
=
CHECKSUM_NONE
;
skb
->
ip_summed
=
CHECKSUM_NONE
;
...
@@ -6520,6 +6524,13 @@ static int airo_get_range(struct net_device *dev,
...
@@ -6520,6 +6524,13 @@ static int airo_get_range(struct net_device *dev,
range
->
avg_qual
.
level
=
176
;
/* -80 dBm */
range
->
avg_qual
.
level
=
176
;
/* -80 dBm */
range
->
avg_qual
.
noise
=
0
;
range
->
avg_qual
.
noise
=
0
;
/* Event capability (kernel + driver) */
range
->
event_capa
[
0
]
=
(
IW_EVENT_CAPA_K_0
|
IW_EVENT_CAPA_MASK
(
SIOCGIWTHRSPY
)
|
IW_EVENT_CAPA_MASK
(
SIOCGIWAP
)
|
IW_EVENT_CAPA_MASK
(
SIOCGIWSCAN
));
range
->
event_capa
[
1
]
=
IW_EVENT_CAPA_K_1
;
range
->
event_capa
[
4
]
=
IW_EVENT_CAPA_MASK
(
IWEVTXDROP
);
return
0
;
return
0
;
}
}
...
@@ -6887,9 +6898,15 @@ static int airo_get_scan(struct net_device *dev,
...
@@ -6887,9 +6898,15 @@ static int airo_get_scan(struct net_device *dev,
while
((
!
rc
)
&&
(
BSSList
.
index
!=
0xffff
))
{
while
((
!
rc
)
&&
(
BSSList
.
index
!=
0xffff
))
{
/* Translate to WE format this entry */
/* Translate to WE format this entry */
current_ev
=
airo_translate_scan
(
dev
,
current_ev
,
current_ev
=
airo_translate_scan
(
dev
,
current_ev
,
extra
+
IW_SCAN_MAX_DATA
,
extra
+
dwrq
->
length
,
&
BSSList
);
&
BSSList
);
/* Check if there is space for one more entry */
if
((
extra
+
dwrq
->
length
-
current_ev
)
<=
IW_EV_ADDR_LEN
)
{
/* Ask user space to try again with a bigger buffer */
return
-
E2BIG
;
}
/* Read next entry */
/* Read next entry */
rc
=
PC4500_readrid
(
ai
,
RID_BSSLISTNEXT
,
rc
=
PC4500_readrid
(
ai
,
RID_BSSLISTNEXT
,
&
BSSList
,
sizeof
(
BSSList
),
1
);
&
BSSList
,
sizeof
(
BSSList
),
1
);
...
@@ -7025,12 +7042,10 @@ static const struct iw_handler_def airo_handler_def =
...
@@ -7025,12 +7042,10 @@ static const struct iw_handler_def airo_handler_def =
.
num_standard
=
sizeof
(
airo_handler
)
/
sizeof
(
iw_handler
),
.
num_standard
=
sizeof
(
airo_handler
)
/
sizeof
(
iw_handler
),
.
num_private
=
sizeof
(
airo_private_handler
)
/
sizeof
(
iw_handler
),
.
num_private
=
sizeof
(
airo_private_handler
)
/
sizeof
(
iw_handler
),
.
num_private_args
=
sizeof
(
airo_private_args
)
/
sizeof
(
struct
iw_priv_args
),
.
num_private_args
=
sizeof
(
airo_private_args
)
/
sizeof
(
struct
iw_priv_args
),
.
standard
=
(
iw_handler
*
)
airo_handler
,
.
standard
=
airo_handler
,
.
private
=
(
iw_handler
*
)
airo_private_handler
,
.
private
=
airo_private_handler
,
.
private_args
=
(
struct
iw_priv_args
*
)
airo_private_args
,
.
private_args
=
airo_private_args
,
.
spy_offset
=
((
void
*
)
(
&
((
struct
airo_info
*
)
NULL
)
->
spy_data
)
-
.
get_wireless_stats
=
airo_get_wireless_stats
,
(
void
*
)
NULL
),
};
};
#endif
/* WIRELESS_EXT */
#endif
/* WIRELESS_EXT */
...
...
drivers/net/wireless/wavelan.c
View file @
deeee3bf
...
@@ -2172,6 +2172,11 @@ static int wavelan_get_range(struct net_device *dev,
...
@@ -2172,6 +2172,11 @@ static int wavelan_get_range(struct net_device *dev,
range
->
num_bitrates
=
1
;
range
->
num_bitrates
=
1
;
range
->
bitrate
[
0
]
=
2000000
;
/* 2 Mb/s */
range
->
bitrate
[
0
]
=
2000000
;
/* 2 Mb/s */
/* Event capability (kernel + driver) */
range
->
event_capa
[
0
]
=
(
IW_EVENT_CAPA_MASK
(
0x8B02
)
|
IW_EVENT_CAPA_MASK
(
0x8B04
));
range
->
event_capa
[
1
]
=
IW_EVENT_CAPA_K_1
;
/* Disable interrupts and save flags. */
/* Disable interrupts and save flags. */
spin_lock_irqsave
(
&
lp
->
spinlock
,
flags
);
spin_lock_irqsave
(
&
lp
->
spinlock
,
flags
);
...
@@ -2403,11 +2408,10 @@ static const struct iw_handler_def wavelan_handler_def =
...
@@ -2403,11 +2408,10 @@ static const struct iw_handler_def wavelan_handler_def =
.
num_standard
=
sizeof
(
wavelan_handler
)
/
sizeof
(
iw_handler
),
.
num_standard
=
sizeof
(
wavelan_handler
)
/
sizeof
(
iw_handler
),
.
num_private
=
sizeof
(
wavelan_private_handler
)
/
sizeof
(
iw_handler
),
.
num_private
=
sizeof
(
wavelan_private_handler
)
/
sizeof
(
iw_handler
),
.
num_private_args
=
sizeof
(
wavelan_private_args
)
/
sizeof
(
struct
iw_priv_args
),
.
num_private_args
=
sizeof
(
wavelan_private_args
)
/
sizeof
(
struct
iw_priv_args
),
.
standard
=
(
iw_handler
*
)
wavelan_handler
,
.
standard
=
wavelan_handler
,
.
private
=
(
iw_handler
*
)
wavelan_private_handler
,
.
private
=
wavelan_private_handler
,
.
private_args
=
(
struct
iw_priv_args
*
)
wavelan_private_args
,
.
private_args
=
wavelan_private_args
,
.
spy_offset
=
((
void
*
)
(
&
((
net_local
*
)
NULL
)
->
spy_data
)
-
.
get_wireless_stats
=
wavelan_get_wireless_stats
,
(
void
*
)
NULL
),
};
};
/*------------------------------------------------------------------*/
/*------------------------------------------------------------------*/
...
@@ -4191,8 +4195,9 @@ static int __init wavelan_config(struct net_device *dev, unsigned short ioaddr)
...
@@ -4191,8 +4195,9 @@ static int __init wavelan_config(struct net_device *dev, unsigned short ioaddr)
#endif
/* SET_MAC_ADDRESS */
#endif
/* SET_MAC_ADDRESS */
#ifdef WIRELESS_EXT
/* if wireless extension exists in the kernel */
#ifdef WIRELESS_EXT
/* if wireless extension exists in the kernel */
dev
->
get_wireless_stats
=
wavelan_get_wireless_stats
;
dev
->
wireless_handlers
=
&
wavelan_handler_def
;
dev
->
wireless_handlers
=
(
struct
iw_handler_def
*
)
&
wavelan_handler_def
;
lp
->
wireless_data
.
spy_data
=
&
lp
->
spy_data
;
dev
->
wireless_data
=
&
lp
->
wireless_data
;
#endif
#endif
dev
->
mtu
=
WAVELAN_MTU
;
dev
->
mtu
=
WAVELAN_MTU
;
...
...
drivers/net/wireless/wavelan.p.h
View file @
deeee3bf
...
@@ -510,6 +510,7 @@ struct net_local
...
@@ -510,6 +510,7 @@ struct net_local
iw_stats
wstats
;
/* Wireless-specific statistics */
iw_stats
wstats
;
/* Wireless-specific statistics */
struct
iw_spy_data
spy_data
;
struct
iw_spy_data
spy_data
;
struct
iw_public_data
wireless_data
;
#endif
#endif
#ifdef HISTOGRAM
#ifdef HISTOGRAM
...
@@ -614,6 +615,8 @@ static inline void
...
@@ -614,6 +615,8 @@ static inline void
/* ------------------- IOCTL, STATS & RECONFIG ------------------- */
/* ------------------- IOCTL, STATS & RECONFIG ------------------- */
static
en_stats
*
static
en_stats
*
wavelan_get_stats
(
struct
net_device
*
);
/* Give stats /proc/net/dev */
wavelan_get_stats
(
struct
net_device
*
);
/* Give stats /proc/net/dev */
static
iw_stats
*
wavelan_get_wireless_stats
(
struct
net_device
*
);
static
void
static
void
wavelan_set_multicast_list
(
struct
net_device
*
);
wavelan_set_multicast_list
(
struct
net_device
*
);
/* ----------------------- PACKET RECEPTION ----------------------- */
/* ----------------------- PACKET RECEPTION ----------------------- */
...
...
drivers/net/wireless/wavelan_cs.c
View file @
deeee3bf
...
@@ -1550,7 +1550,6 @@ wavelan_set_mac_address(struct net_device * dev,
...
@@ -1550,7 +1550,6 @@ wavelan_set_mac_address(struct net_device * dev,
/*
/*
* Frequency setting (for hardware able of it)
* Frequency setting (for hardware able of it)
* It's a bit complicated and you don't really want to look into it...
* It's a bit complicated and you don't really want to look into it...
* (called in wavelan_ioctl)
*/
*/
static
inline
int
static
inline
int
wv_set_frequency
(
u_long
base
,
/* i/o port of the card */
wv_set_frequency
(
u_long
base
,
/* i/o port of the card */
...
@@ -2438,6 +2437,12 @@ static int wavelan_get_range(struct net_device *dev,
...
@@ -2438,6 +2437,12 @@ static int wavelan_get_range(struct net_device *dev,
range
->
num_bitrates
=
1
;
range
->
num_bitrates
=
1
;
range
->
bitrate
[
0
]
=
2000000
;
/* 2 Mb/s */
range
->
bitrate
[
0
]
=
2000000
;
/* 2 Mb/s */
/* Event capability (kernel + driver) */
range
->
event_capa
[
0
]
=
(
IW_EVENT_CAPA_MASK
(
0x8B02
)
|
IW_EVENT_CAPA_MASK
(
0x8B04
)
|
IW_EVENT_CAPA_MASK
(
0x8B06
));
range
->
event_capa
[
1
]
=
IW_EVENT_CAPA_K_1
;
/* Disable interrupts and save flags. */
/* Disable interrupts and save flags. */
spin_lock_irqsave
(
&
lp
->
spinlock
,
flags
);
spin_lock_irqsave
(
&
lp
->
spinlock
,
flags
);
...
@@ -2737,11 +2742,10 @@ static const struct iw_handler_def wavelan_handler_def =
...
@@ -2737,11 +2742,10 @@ static const struct iw_handler_def wavelan_handler_def =
.
num_standard
=
sizeof
(
wavelan_handler
)
/
sizeof
(
iw_handler
),
.
num_standard
=
sizeof
(
wavelan_handler
)
/
sizeof
(
iw_handler
),
.
num_private
=
sizeof
(
wavelan_private_handler
)
/
sizeof
(
iw_handler
),
.
num_private
=
sizeof
(
wavelan_private_handler
)
/
sizeof
(
iw_handler
),
.
num_private_args
=
sizeof
(
wavelan_private_args
)
/
sizeof
(
struct
iw_priv_args
),
.
num_private_args
=
sizeof
(
wavelan_private_args
)
/
sizeof
(
struct
iw_priv_args
),
.
standard
=
(
iw_handler
*
)
wavelan_handler
,
.
standard
=
wavelan_handler
,
.
private
=
(
iw_handler
*
)
wavelan_private_handler
,
.
private
=
wavelan_private_handler
,
.
private_args
=
(
struct
iw_priv_args
*
)
wavelan_private_args
,
.
private_args
=
wavelan_private_args
,
.
spy_offset
=
((
void
*
)
(
&
((
net_local
*
)
NULL
)
->
spy_data
)
-
.
get_wireless_stats
=
wavelan_get_wireless_stats
,
(
void
*
)
NULL
),
};
};
/*------------------------------------------------------------------*/
/*------------------------------------------------------------------*/
...
@@ -4720,9 +4724,10 @@ wavelan_attach(void)
...
@@ -4720,9 +4724,10 @@ wavelan_attach(void)
dev
->
watchdog_timeo
=
WATCHDOG_JIFFIES
;
dev
->
watchdog_timeo
=
WATCHDOG_JIFFIES
;
#ifdef WIRELESS_EXT
/* If wireless extension exist in the kernel */
#ifdef WIRELESS_EXT
/* If wireless extension exist in the kernel */
dev
->
wireless_handlers
=
(
struct
iw_handler_def
*
)
&
wavelan_handler_def
;
dev
->
wireless_handlers
=
&
wavelan_handler_def
;
dev
->
do_ioctl
=
wavelan_ioctl
;
/* old wireless extensions */
dev
->
do_ioctl
=
wavelan_ioctl
;
/* ethtool */
dev
->
get_wireless_stats
=
wavelan_get_wireless_stats
;
lp
->
wireless_data
.
spy_data
=
&
lp
->
spy_data
;
dev
->
wireless_data
=
&
lp
->
wireless_data
;
#endif
#endif
/* Other specific data */
/* Other specific data */
...
...
drivers/net/wireless/wavelan_cs.p.h
View file @
deeee3bf
...
@@ -629,6 +629,7 @@ struct net_local
...
@@ -629,6 +629,7 @@ struct net_local
iw_stats
wstats
;
/* Wireless specific stats */
iw_stats
wstats
;
/* Wireless specific stats */
struct
iw_spy_data
spy_data
;
struct
iw_spy_data
spy_data
;
struct
iw_public_data
wireless_data
;
#endif
#endif
#ifdef HISTOGRAM
#ifdef HISTOGRAM
...
@@ -725,6 +726,8 @@ static inline void
...
@@ -725,6 +726,8 @@ static inline void
/* ------------------- IOCTL, STATS & RECONFIG ------------------- */
/* ------------------- IOCTL, STATS & RECONFIG ------------------- */
static
en_stats
*
static
en_stats
*
wavelan_get_stats
(
struct
net_device
*
);
/* Give stats /proc/net/dev */
wavelan_get_stats
(
struct
net_device
*
);
/* Give stats /proc/net/dev */
static
iw_stats
*
wavelan_get_wireless_stats
(
struct
net_device
*
);
/* ----------------------- PACKET RECEPTION ----------------------- */
/* ----------------------- PACKET RECEPTION ----------------------- */
static
inline
int
static
inline
int
wv_start_of_frame
(
struct
net_device
*
,
/* Seek beggining of current frame */
wv_start_of_frame
(
struct
net_device
*
,
/* Seek beggining of current frame */
...
...
include/linux/netdevice.h
View file @
deeee3bf
...
@@ -309,7 +309,9 @@ struct net_device
...
@@ -309,7 +309,9 @@ struct net_device
/* List of functions to handle Wireless Extensions (instead of ioctl).
/* List of functions to handle Wireless Extensions (instead of ioctl).
* See <net/iw_handler.h> for details. Jean II */
* See <net/iw_handler.h> for details. Jean II */
struct
iw_handler_def
*
wireless_handlers
;
const
struct
iw_handler_def
*
wireless_handlers
;
/* Instance data managed by the core of Wireless Extensions. */
struct
iw_public_data
*
wireless_data
;
struct
ethtool_ops
*
ethtool_ops
;
struct
ethtool_ops
*
ethtool_ops
;
...
...
include/linux/wireless.h
View file @
deeee3bf
/*
/*
* This file define a set of standard wireless extensions
* This file define a set of standard wireless extensions
*
*
* Version : 1
6 2.4.03
* Version : 1
7 21.6.04
*
*
* Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
* Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
* Copyright (c) 1997-200
2
Jean Tourrilhes, All Rights Reserved.
* Copyright (c) 1997-200
4
Jean Tourrilhes, All Rights Reserved.
*/
*/
#ifndef _LINUX_WIRELESS_H
#ifndef _LINUX_WIRELESS_H
...
@@ -47,12 +47,12 @@
...
@@ -47,12 +47,12 @@
* # include/net/iw_handler.h
* # include/net/iw_handler.h
*
*
* Note as well that /proc/net/wireless implementation has now moved in :
* Note as well that /proc/net/wireless implementation has now moved in :
* #
include/linux
/wireless.c
* #
net/core
/wireless.c
*
*
* Wireless Events (2002 -> onward) :
* Wireless Events (2002 -> onward) :
* --------------------------------
* --------------------------------
* Events are defined at the end of this file, and implemented in :
* Events are defined at the end of this file, and implemented in :
* #
include/linux
/wireless.c
* #
net/core
/wireless.c
*
*
* Other comments :
* Other comments :
* --------------
* --------------
...
@@ -82,7 +82,7 @@
...
@@ -82,7 +82,7 @@
* (there is some stuff that will be added in the future...)
* (there is some stuff that will be added in the future...)
* I just plan to increment with each new version.
* I just plan to increment with each new version.
*/
*/
#define WIRELESS_EXT 1
6
#define WIRELESS_EXT 1
7
/*
/*
* Changes :
* Changes :
...
@@ -175,6 +175,13 @@
...
@@ -175,6 +175,13 @@
* - Remove IW_MAX_GET_SPY because conflict with enhanced spy support
* - Remove IW_MAX_GET_SPY because conflict with enhanced spy support
* - Add SIOCSIWTHRSPY/SIOCGIWTHRSPY and "struct iw_thrspy"
* - Add SIOCSIWTHRSPY/SIOCGIWTHRSPY and "struct iw_thrspy"
* - Add IW_ENCODE_TEMP and iw_range->encoding_login_index
* - Add IW_ENCODE_TEMP and iw_range->encoding_login_index
*
* V16 to V17
* ----------
* - Add flags to frequency -> auto/fixed
* - Document (struct iw_quality *)->updated, add new flags (INVALID)
* - Wireless Event capability in struct iw_range
* - Add support for relative TxPower (yick !)
*/
*/
/**************************** CONSTANTS ****************************/
/**************************** CONSTANTS ****************************/
...
@@ -251,7 +258,7 @@
...
@@ -251,7 +258,7 @@
/* -------------------- DEV PRIVATE IOCTL LIST -------------------- */
/* -------------------- DEV PRIVATE IOCTL LIST -------------------- */
/* These
16 ioctl are wireless device private
.
/* These
32 ioctl are wireless device private, for 16 commands
.
* Each driver is free to use them for whatever purpose it chooses,
* Each driver is free to use them for whatever purpose it chooses,
* however the driver *must* export the description of those ioctls
* however the driver *must* export the description of those ioctls
* with SIOCGIWPRIV and *must* use arguments as defined below.
* with SIOCGIWPRIV and *must* use arguments as defined below.
...
@@ -266,8 +273,8 @@
...
@@ -266,8 +273,8 @@
* We now have 32 commands, so a bit more space ;-).
* We now have 32 commands, so a bit more space ;-).
* Also, all 'odd' commands are only usable by root and don't return the
* Also, all 'odd' commands are only usable by root and don't return the
* content of ifr/iwr to user (but you are not obliged to use the set/get
* content of ifr/iwr to user (but you are not obliged to use the set/get
* convention, just use every other two command).
* convention, just use every other two command).
More details in iwpriv.c.
* And I repeat : you are not
obliged to use them with iwspy
, but you
* And I repeat : you are not
forced to use them with iwpriv
, but you
* must be compliant with it.
* must be compliant with it.
*/
*/
...
@@ -352,6 +359,18 @@
...
@@ -352,6 +359,18 @@
#define IW_MODE_SECOND 5
/* Secondary master/repeater (backup) */
#define IW_MODE_SECOND 5
/* Secondary master/repeater (backup) */
#define IW_MODE_MONITOR 6
/* Passive monitor (listen only) */
#define IW_MODE_MONITOR 6
/* Passive monitor (listen only) */
/* Statistics flags (bitmask in updated) */
#define IW_QUAL_QUAL_UPDATED 0x1
/* Value was updated since last read */
#define IW_QUAL_LEVEL_UPDATED 0x2
#define IW_QUAL_NOISE_UPDATED 0x4
#define IW_QUAL_QUAL_INVALID 0x10
/* Driver doesn't provide value */
#define IW_QUAL_LEVEL_INVALID 0x20
#define IW_QUAL_NOISE_INVALID 0x40
/* Frequency flags */
#define IW_FREQ_AUTO 0x00
/* Let the driver decides */
#define IW_FREQ_FIXED 0x01
/* Force a specific value */
/* Maximum number of size of encoding token available
/* Maximum number of size of encoding token available
* they are listed in the range structure */
* they are listed in the range structure */
#define IW_MAX_ENCODING_SIZES 8
#define IW_MAX_ENCODING_SIZES 8
...
@@ -390,6 +409,7 @@
...
@@ -390,6 +409,7 @@
#define IW_TXPOW_TYPE 0x00FF
/* Type of value */
#define IW_TXPOW_TYPE 0x00FF
/* Type of value */
#define IW_TXPOW_DBM 0x0000
/* Value is in dBm */
#define IW_TXPOW_DBM 0x0000
/* Value is in dBm */
#define IW_TXPOW_MWATT 0x0001
/* Value is in mW */
#define IW_TXPOW_MWATT 0x0001
/* Value is in mW */
#define IW_TXPOW_RELATIVE 0x0002
/* Value is in arbitrary units */
#define IW_TXPOW_RANGE 0x1000
/* Range of value between min/max */
#define IW_TXPOW_RANGE 0x1000
/* Range of value between min/max */
/* Retry limits and lifetime flags available */
/* Retry limits and lifetime flags available */
...
@@ -418,6 +438,25 @@
...
@@ -418,6 +438,25 @@
/* Max number of char in custom event - use multiple of them if needed */
/* Max number of char in custom event - use multiple of them if needed */
#define IW_CUSTOM_MAX 256
/* In bytes */
#define IW_CUSTOM_MAX 256
/* In bytes */
/* Event capability macros - in (struct iw_range *)->event_capa
* Because we have more than 32 possible events, we use an array of
* 32 bit bitmasks. Note : 32 bits = 0x20 = 2^5. */
#define IW_EVENT_CAPA_BASE(cmd) ((cmd >= SIOCIWFIRSTPRIV) ? \
(cmd - SIOCIWFIRSTPRIV + 0x60) : \
(cmd - SIOCSIWCOMMIT))
#define IW_EVENT_CAPA_INDEX(cmd) (IW_EVENT_CAPA_BASE(cmd) >> 5)
#define IW_EVENT_CAPA_MASK(cmd) (1 << (IW_EVENT_CAPA_BASE(cmd) & 0x1F))
/* Event capability constants - event autogenerated by the kernel
* This list is valid for most 802.11 devices, customise as needed... */
#define IW_EVENT_CAPA_K_0 (IW_EVENT_CAPA_MASK(0x8B04) | \
IW_EVENT_CAPA_MASK(0x8B06) | \
IW_EVENT_CAPA_MASK(0x8B1A))
#define IW_EVENT_CAPA_K_1 (IW_EVENT_CAPA_MASK(0x8B2A))
/* "Easy" macro to set events in iw_range (less efficient) */
#define IW_EVENT_CAPA_SET(event_capa, cmd) (event_capa[IW_EVENT_CAPA_INDEX(cmd)] |= IW_EVENT_CAPA_MASK(cmd))
#define IW_EVENT_CAPA_SET_KERNEL(event_capa) {event_capa[0] |= IW_EVENT_CAPA_K_0; event_capa[1] |= IW_EVENT_CAPA_K_1; }
/****************************** TYPES ******************************/
/****************************** TYPES ******************************/
/* --------------------------- SUBTYPES --------------------------- */
/* --------------------------- SUBTYPES --------------------------- */
...
@@ -456,7 +495,7 @@ struct iw_freq
...
@@ -456,7 +495,7 @@ struct iw_freq
__s32
m
;
/* Mantissa */
__s32
m
;
/* Mantissa */
__s16
e
;
/* Exponent */
__s16
e
;
/* Exponent */
__u8
i
;
/* List index (when in range struct) */
__u8
i
;
/* List index (when in range struct) */
__u8
pad
;
/* Unused - just for alignement
*/
__u8
flags
;
/* Flags (fixed/auto)
*/
};
};
/*
/*
...
@@ -610,11 +649,12 @@ struct iw_range
...
@@ -610,11 +649,12 @@ struct iw_range
/* Old Frequency (backward compat - moved lower ) */
/* Old Frequency (backward compat - moved lower ) */
__u16
old_num_channels
;
__u16
old_num_channels
;
__u8
old_num_frequency
;
__u8
old_num_frequency
;
/* Filler to keep "version" at the same offset */
__s32
old_freq
[
6
];
/* Wireless event capability bitmasks */
__u32
event_capa
[
6
];
/* signal level threshold range */
/* signal level threshold range */
__s32
sensitivity
;
__s32
sensitivity
;
/* Quality of link & SNR stuff */
/* Quality of link & SNR stuff */
/* Quality range (link, level, noise)
/* Quality range (link, level, noise)
...
...
include/net/iw_handler.h
View file @
deeee3bf
/*
/*
* This file define the new driver API for Wireless Extensions
* This file define the new driver API for Wireless Extensions
*
*
* Version :
5 4.12.02
* Version :
6 21.6.04
*
*
* Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
* Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
* Copyright (c) 2001-200
2
Jean Tourrilhes, All Rights Reserved.
* Copyright (c) 2001-200
4
Jean Tourrilhes, All Rights Reserved.
*/
*/
#ifndef _IW_HANDLER_H
#ifndef _IW_HANDLER_H
...
@@ -206,7 +206,7 @@
...
@@ -206,7 +206,7 @@
* will be needed...
* will be needed...
* I just plan to increment with each new version.
* I just plan to increment with each new version.
*/
*/
#define IW_HANDLER_VERSION
5
#define IW_HANDLER_VERSION
6
/*
/*
* Changes :
* Changes :
...
@@ -224,11 +224,18 @@
...
@@ -224,11 +224,18 @@
* V4 to V5
* V4 to V5
* --------
* --------
* - Add new spy support : struct iw_spy_data & prototypes
* - Add new spy support : struct iw_spy_data & prototypes
*
* V5 to V6
* --------
* - Change the way we get to spy_data method for added safety
* - Remove spy #ifdef, they are always on -> cleaner code
* - Add IW_DESCR_FLAG_NOMAX flag for very large requests
* - Start migrating get_wireless_stats to struct iw_handler_def
*/
*/
/**************************** CONSTANTS ****************************/
/**************************** CONSTANTS ****************************/
/* En
able enhanced spy support. Disable to reduce footprint
*/
/* En
hanced spy support available
*/
#define IW_WIRELESS_SPY
#define IW_WIRELESS_SPY
#define IW_WIRELESS_THRSPY
#define IW_WIRELESS_THRSPY
...
@@ -258,6 +265,7 @@
...
@@ -258,6 +265,7 @@
#define IW_DESCR_FLAG_EVENT 0x0002
/* Generate an event on SET */
#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 */
/* SET : Omit payload from generated iwevent */
#define IW_DESCR_FLAG_NOMAX 0x0008
/* GET : no limit on request size */
/* Driver level flags */
/* Driver level flags */
#define IW_DESCR_FLAG_WAIT 0x0100
/* Wait for driver event */
#define IW_DESCR_FLAG_WAIT 0x0100
/* Wait for driver event */
...
@@ -303,31 +311,33 @@ struct iw_handler_def
...
@@ -303,31 +311,33 @@ struct iw_handler_def
{
{
/* Number of handlers defined (more precisely, index of the
/* Number of handlers defined (more precisely, index of the
* last defined handler + 1) */
* last defined handler + 1) */
__u16
num_standard
;
const
__u16
num_standard
;
__u16
num_private
;
const
__u16
num_private
;
/* Number of private arg description */
/* Number of private arg description */
__u16
num_private_args
;
const
__u16
num_private_args
;
/* Array of handlers for standard ioctls
/* Array of handlers for standard ioctls
* We will call dev->wireless_handlers->standard[ioctl - SIOCSIWNAME]
* We will call dev->wireless_handlers->standard[ioctl - SIOCSIWNAME]
*/
*/
iw_handler
*
standard
;
const
iw_handler
*
standard
;
/* Array of handlers for private ioctls
/* Array of handlers for private ioctls
* Will call dev->wireless_handlers->private[ioctl - SIOCIWFIRSTPRIV]
* Will call dev->wireless_handlers->private[ioctl - SIOCIWFIRSTPRIV]
*/
*/
iw_handler
*
private
;
const
iw_handler
*
private
;
/* Arguments of private handler. This one is just a list, so you
/* Arguments of private handler. This one is just a list, so you
* can put it in any order you want and should not leave holes...
* can put it in any order you want and should not leave holes...
* We will automatically export that to user space... */
* We will automatically export that to user space... */
struct
iw_priv_args
*
private_args
;
const
struct
iw_priv_args
*
private_args
;
/*
Driver enhanced spy support
*/
/*
This field will be *removed* in the next version of WE
*/
long
spy_offset
;
/* Spy data offset
*/
const
long
spy_offset
;
/* DO NOT USE
*/
/* In the long term, get_wireless_stats will move from
/* New location of get_wireless_stats, to de-bloat struct net_device.
* 'struct net_device' to here, to minimise bloat. */
* The old pointer in struct net_device will be gradually phased
* out, and drivers are encouraged to use this one... */
struct
iw_statistics
*
(
*
get_wireless_stats
)(
struct
net_device
*
dev
);
};
};
/* ---------------------- IOCTL DESCRIPTION ---------------------- */
/* ---------------------- IOCTL DESCRIPTION ---------------------- */
...
@@ -374,18 +384,29 @@ struct iw_ioctl_description
...
@@ -374,18 +384,29 @@ struct iw_ioctl_description
*/
*/
struct
iw_spy_data
struct
iw_spy_data
{
{
#ifdef IW_WIRELESS_SPY
/* --- Standard spy support --- */
/* --- Standard spy support --- */
int
spy_number
;
int
spy_number
;
u_char
spy_address
[
IW_MAX_SPY
][
ETH_ALEN
];
u_char
spy_address
[
IW_MAX_SPY
][
ETH_ALEN
];
struct
iw_quality
spy_stat
[
IW_MAX_SPY
];
struct
iw_quality
spy_stat
[
IW_MAX_SPY
];
#ifdef IW_WIRELESS_THRSPY
/* --- Enhanced spy support (event) */
/* --- Enhanced spy support (event) */
struct
iw_quality
spy_thr_low
;
/* Low threshold */
struct
iw_quality
spy_thr_low
;
/* Low threshold */
struct
iw_quality
spy_thr_high
;
/* High threshold */
struct
iw_quality
spy_thr_high
;
/* High threshold */
u_char
spy_thr_under
[
IW_MAX_SPY
];
u_char
spy_thr_under
[
IW_MAX_SPY
];
#endif
/* IW_WIRELESS_THRSPY */
};
#endif
/* IW_WIRELESS_SPY */
/* --------------------- DEVICE WIRELESS DATA --------------------- */
/*
* This is all the wireless data specific to a device instance that
* is managed by the core of Wireless Extensions.
* We only keep pointer to those structures, so that a driver is free
* to share them between instances.
* This structure should be initialised before registering the device.
* Access to this data follow the same rules as any other struct net_device
* data (i.e. valid as long as struct net_device exist, same locking rules).
*/
struct
iw_public_data
{
/* Driver enhanced spy support */
struct
iw_spy_data
*
spy_data
;
};
};
/**************************** PROTOTYPES ****************************/
/**************************** PROTOTYPES ****************************/
...
@@ -394,6 +415,9 @@ struct iw_spy_data
...
@@ -394,6 +415,9 @@ struct iw_spy_data
* Those may be called only within the kernel.
* Those may be called only within the kernel.
*/
*/
/* Data needed by fs/compat_ioctl.c for 32->64 bit conversion */
extern
const
char
iw_priv_type_size
[];
/* First : function strictly used inside the kernel */
/* First : function strictly used inside the kernel */
/* Handle /proc/net/wireless, called in net/code/dev.c */
/* Handle /proc/net/wireless, called in net/code/dev.c */
...
...
net/core/dev.c
View file @
deeee3bf
...
@@ -2745,7 +2745,7 @@ int dev_ioctl(unsigned int cmd, void __user *arg)
...
@@ -2745,7 +2745,7 @@ int dev_ioctl(unsigned int cmd, void __user *arg)
/* Follow me in net/core/wireless.c */
/* Follow me in net/core/wireless.c */
ret
=
wireless_process_ioctl
(
&
ifr
,
cmd
);
ret
=
wireless_process_ioctl
(
&
ifr
,
cmd
);
rtnl_unlock
();
rtnl_unlock
();
if
(
!
ret
&&
IW_IS_GET
(
cmd
)
&&
if
(
IW_IS_GET
(
cmd
)
&&
copy_to_user
(
arg
,
&
ifr
,
copy_to_user
(
arg
,
&
ifr
,
sizeof
(
struct
ifreq
)))
sizeof
(
struct
ifreq
)))
ret
=
-
EFAULT
;
ret
=
-
EFAULT
;
...
...
net/core/wireless.c
View file @
deeee3bf
This diff is collapsed.
Click to expand it.
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