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
7a508e5b
Commit
7a508e5b
authored
Aug 06, 2003
by
Jeff Garzik
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://kernel.bkbits.net/acme/wl3501-2.5
into redhat.com:/garz/repo/net-drivers-2.6
parents
6857d83f
87b31d5b
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
277 additions
and
103 deletions
+277
-103
CREDITS
CREDITS
+13
-2
MAINTAINERS
MAINTAINERS
+7
-1
drivers/net/wireless/wl3501.h
drivers/net/wireless/wl3501.h
+124
-62
drivers/net/wireless/wl3501_cs.c
drivers/net/wireless/wl3501_cs.c
+133
-38
No files found.
CREDITS
View file @
7a508e5b
...
@@ -2107,14 +2107,16 @@ S: Germany
...
@@ -2107,14 +2107,16 @@ S: Germany
N: Arnaldo Carvalho de Melo
N: Arnaldo Carvalho de Melo
E: acme@conectiva.com.br
E: acme@conectiva.com.br
E: acme@kernel.org
E: acme@gnu.org
E: acme@gnu.org
W: http://bazar.conectiva.com.br/~acme
W: http://bazar
2
.conectiva.com.br/~acme
W: http://advogato.org/person/acme
W: http://advogato.org/person/acme
P: 1024D/9224DF01 D5DF E3BB E3C8 BCBB F8AD 841A B6AB 4681 9224 DF01
P: 1024D/9224DF01 D5DF E3BB E3C8 BCBB F8AD 841A B6AB 4681 9224 DF01
D: wanrouter hacking
D: wanrouter hacking
D: misc Makefile, Config.in, drivers and network stacks fixes
D: misc Makefile, Config.in, drivers and network stacks fixes
D: IPX
M
aintainer
D: IPX
& LLC network stacks m
aintainer
D: Cyclom 2X synchronous card driver
D: Cyclom 2X synchronous card driver
D: wl3501 PCMCIA wireless card driver
D: i18n for minicom, net-tools, util-linux, fetchmail, etc
D: i18n for minicom, net-tools, util-linux, fetchmail, etc
S: Conectiva S.A.
S: Conectiva S.A.
S: R. Tocantins, 89 - Cristo Rei
S: R. Tocantins, 89 - Cristo Rei
...
@@ -2360,6 +2362,15 @@ S: Zum Schiersteiner Grund 2
...
@@ -2360,6 +2362,15 @@ S: Zum Schiersteiner Grund 2
S: 55127 Mainz
S: 55127 Mainz
S: Germany
S: Germany
N: Gustavo Niemeyer
E: niemeyer@conectiva.com
W: https://moin.conectiva.com.br/GustavoNiemeyer
D: wl3501 PCMCIA wireless card initial support for wireless extensions in 2.4
S: Conectiva S.A.
S: R. Tocantins 89
S: 80050-430 Curitiba PR
S: Brazil
N: David C. Niemi
N: David C. Niemi
E: niemi@tux.org
E: niemi@tux.org
W: http://www.tux.org/~niemi/
W: http://www.tux.org/~niemi/
...
...
MAINTAINERS
View file @
7a508e5b
...
@@ -478,7 +478,7 @@ S: Maintained
...
@@ -478,7 +478,7 @@ S: Maintained
CYCLADES 2X SYNC CARD DRIVER
CYCLADES 2X SYNC CARD DRIVER
P: Arnaldo Carvalho de Melo
P: Arnaldo Carvalho de Melo
M: acme@conectiva.com.br
M: acme@conectiva.com.br
W: http://
www.conectiva.com.br/~
acme
W: http://
advogato.org/person/
acme
L: cycsyn-devel@bazar.conectiva.com.br
L: cycsyn-devel@bazar.conectiva.com.br
S: Maintained
S: Maintained
...
@@ -2180,6 +2180,12 @@ M: zaga@fly.cc.fer.hr
...
@@ -2180,6 +2180,12 @@ M: zaga@fly.cc.fer.hr
L: linux-scsi@vger.kernel.org
L: linux-scsi@vger.kernel.org
S: Maintained
S: Maintained
WL3501 WIRELESS PCMCIA CARD DRIVER
P: Arnaldo Carvalho de Melo
M: acme@conectiva.com.br
W: http://advogato.org/person/acme
S: Maintained
X.25 NETWORK LAYER
X.25 NETWORK LAYER
P: Henner Eisen
P: Henner Eisen
M: eis@baty.hanse.de
M: eis@baty.hanse.de
...
...
drivers/net/wireless/wl3501.h
View file @
7a508e5b
...
@@ -203,7 +203,69 @@ enum wl3501_status {
...
@@ -203,7 +203,69 @@ enum wl3501_status {
#define IW_REG_DOMAIN_MKK1 0x41
/* Channel 1-14 Japan */
#define IW_REG_DOMAIN_MKK1 0x41
/* Channel 1-14 Japan */
#define IW_REG_DOMAIN_ISRAEL 0x50
/* Channel 3 - 9 Israel */
#define IW_REG_DOMAIN_ISRAEL 0x50
/* Channel 3 - 9 Israel */
#define WL3501_ESSID_MAX_LEN (IW_ESSID_MAX_SIZE + 2)
#define IW_MGMT_RATE_LABEL_MANDATORY 128
/* MSB */
enum
iw_mgmt_rate_labels
{
IW_MGMT_RATE_LABEL_1MBIT
=
2
,
IW_MGMT_RATE_LABEL_2MBIT
=
4
,
IW_MGMT_RATE_LABEL_5_5MBIT
=
11
,
IW_MGMT_RATE_LABEL_11MBIT
=
22
,
};
enum
iw_mgmt_info_element_ids
{
IW_MGMT_INFO_ELEMENT_SSID
,
/* Service Set Identity */
IW_MGMT_INFO_ELEMENT_SUPPORTED_RATES
,
IW_MGMT_INFO_ELEMENT_FH_PARAMETER_SET
,
IW_MGMT_INFO_ELEMENT_DS_PARAMETER_SET
,
IW_MGMT_INFO_ELEMENT_CS_PARAMETER_SET
,
IW_MGMT_INFO_ELEMENT_CS_TIM
,
/* Traffic Information Map */
IW_MGMT_INFO_ELEMENT_IBSS_PARAMETER_SET
,
/* 7-15: Reserved, unused */
IW_MGMT_INFO_ELEMENT_CHALLENGE_TEXT
=
16
,
/* 17-31 Reserved for challenge text extension */
/* 32-255 Reserved, unused */
};
struct
iw_mgmt_info_element
{
u8
id
;
/* one of enum iw_mgmt_info_element_ids,
but sizeof(enum) > sizeof(u8) :-( */
u8
len
;
u8
data
[
0
];
}
__attribute__
((
packed
));
struct
iw_mgmt_essid_pset
{
struct
iw_mgmt_info_element
el
;
u8
essid
[
IW_ESSID_MAX_SIZE
];
}
__attribute__
((
packed
));
/*
* According to 802.11 Wireless Netowors, the definitive guide - O'Reilly
* Pg 75
*/
#define IW_DATA_RATE_MAX_LABELS 8
struct
iw_mgmt_data_rset
{
struct
iw_mgmt_info_element
el
;
u8
data_rate_labels
[
IW_DATA_RATE_MAX_LABELS
];
}
__attribute__
((
packed
));
struct
iw_mgmt_ds_pset
{
struct
iw_mgmt_info_element
el
;
u8
chan
;
}
__attribute__
((
packed
));
struct
iw_mgmt_cf_pset
{
struct
iw_mgmt_info_element
el
;
u8
cfp_count
;
u8
cfp_period
;
u16
cfp_max_duration
;
u16
cfp_dur_remaining
;
}
__attribute__
((
packed
));
struct
iw_mgmt_ibss_pset
{
struct
iw_mgmt_info_element
el
;
u16
atim_window
;
}
__attribute__
((
packed
));
struct
wl3501_tx_hdr
{
struct
wl3501_tx_hdr
{
u16
tx_cnt
;
u16
tx_cnt
;
...
@@ -251,12 +313,12 @@ struct wl3501_start_req {
...
@@ -251,12 +313,12 @@ struct wl3501_start_req {
u16
dtim_period
;
u16
dtim_period
;
u16
probe_delay
;
u16
probe_delay
;
u16
cap_info
;
u16
cap_info
;
char
ssid
[
WL3501_ESSID_MAX_LEN
]
;
struct
iw_mgmt_essid_pset
ssid
;
u8
bss_basic_rate_set
[
10
]
;
struct
iw_mgmt_data_rset
bss_basic_rset
;
u8
operational_rate_set
[
10
]
;
struct
iw_mgmt_data_rset
operational_rset
;
u8
cf_pset
[
8
]
;
struct
iw_mgmt_cf_pset
cf_pset
;
u8
phy_pset
[
3
]
;
struct
iw_mgmt_ds_pset
ds_pset
;
u8
ibss_pset
[
4
]
;
struct
iw_mgmt_ibss_pset
ibss_pset
;
};
};
struct
wl3501_assoc_req
{
struct
wl3501_assoc_req
{
...
@@ -320,7 +382,7 @@ struct wl3501_join_req {
...
@@ -320,7 +382,7 @@ struct wl3501_join_req {
u16
next_blk
;
u16
next_blk
;
u8
sig_id
;
u8
sig_id
;
u8
reserved
;
u8
reserved
;
u8
operational_rate_set
[
10
]
;
struct
iw_mgmt_data_rset
operational_rset
;
u16
reserved2
;
u16
reserved2
;
u16
timeout
;
u16
timeout
;
u16
probe_delay
;
u16
probe_delay
;
...
@@ -331,11 +393,11 @@ struct wl3501_join_req {
...
@@ -331,11 +393,11 @@ struct wl3501_join_req {
u16
cap_info
;
u16
cap_info
;
u8
bss_type
;
u8
bss_type
;
u8
bssid
[
ETH_ALEN
];
u8
bssid
[
ETH_ALEN
];
char
ssid
[
WL3501_ESSID_MAX_LEN
]
;
struct
iw_mgmt_essid_pset
ssid
;
u8
phy_pset
[
3
]
;
struct
iw_mgmt_ds_pset
ds_pset
;
u8
cf_pset
[
8
]
;
struct
iw_mgmt_cf_pset
cf_pset
;
u8
ibss_pset
[
4
]
;
struct
iw_mgmt_ibss_pset
ibss_pset
;
u8
bss_basic_rate_set
[
10
]
;
struct
iw_mgmt_data_rset
bss_basic_rset
;
};
};
struct
wl3501_join_confirm
{
struct
wl3501_join_confirm
{
...
@@ -369,7 +431,7 @@ struct wl3501_scan_req {
...
@@ -369,7 +431,7 @@ struct wl3501_scan_req {
u16
max_chan_time
;
u16
max_chan_time
;
u8
chan_list
[
14
];
u8
chan_list
[
14
];
u8
bssid
[
ETH_ALEN
];
u8
bssid
[
ETH_ALEN
];
char
ssid
[
WL3501_ESSID_MAX_LEN
]
;
struct
iw_mgmt_essid_pset
ssid
;
enum
wl3501_scan_type
scan_type
;
enum
wl3501_scan_type
scan_type
;
};
};
...
@@ -385,11 +447,11 @@ struct wl3501_scan_confirm {
...
@@ -385,11 +447,11 @@ struct wl3501_scan_confirm {
u16
cap_info
;
u16
cap_info
;
u8
bss_type
;
u8
bss_type
;
u8
bssid
[
ETH_ALEN
];
u8
bssid
[
ETH_ALEN
];
char
ssid
[
WL3501_ESSID_MAX_LEN
]
;
struct
iw_mgmt_essid_pset
ssid
;
u8
phy_pset
[
3
]
;
struct
iw_mgmt_ds_pset
ds_pset
;
u8
cf_pset
[
8
]
;
struct
iw_mgmt_cf_pset
cf_pset
;
u8
ibss_pset
[
4
]
;
struct
iw_mgmt_ibss_pset
ibss_pset
;
u8
bss_basic_rate_set
[
10
]
;
struct
iw_mgmt_data_rset
bss_basic_rset
;
u8
rssi
;
u8
rssi
;
};
};
...
@@ -527,10 +589,10 @@ struct wl3501_card {
...
@@ -527,10 +589,10 @@ struct wl3501_card {
u16
esbq_confirm_start
;
u16
esbq_confirm_start
;
u16
esbq_confirm_end
;
u16
esbq_confirm_end
;
u16
esbq_confirm
;
u16
esbq_confirm
;
u8
essid
[
WL3501_ESSID_MAX_LEN
];
struct
iw_mgmt_essid_pset
essid
;
struct
iw_mgmt_essid_pset
keep_essid
;
u8
bssid
[
ETH_ALEN
];
u8
bssid
[
ETH_ALEN
];
int
net_type
;
int
net_type
;
u8
keep_essid
[
WL3501_ESSID_MAX_LEN
];
char
nick
[
32
];
char
nick
[
32
];
char
card_name
[
32
];
char
card_name
[
32
];
char
firmware_date
[
32
];
char
firmware_date
[
32
];
...
...
drivers/net/wireless/wl3501_cs.c
View file @
7a508e5b
...
@@ -220,6 +220,21 @@ static int iw_default_channel(int reg_domain)
...
@@ -220,6 +220,21 @@ static int iw_default_channel(int reg_domain)
return
rc
;
return
rc
;
}
}
static
void
iw_set_mgmt_info_element
(
enum
iw_mgmt_info_element_ids
id
,
struct
iw_mgmt_info_element
*
el
,
void
*
value
,
int
len
)
{
el
->
id
=
id
;
el
->
len
=
len
;
memcpy
(
el
->
data
,
value
,
len
);
}
static
void
iw_copy_mgmt_info_element
(
struct
iw_mgmt_info_element
*
to
,
struct
iw_mgmt_info_element
*
from
)
{
iw_set_mgmt_info_element
(
from
->
id
,
to
,
from
->
data
,
from
->
len
);
}
/*
/*
* A linked list of "instances" of the wl24 device. Each actual PCMCIA card
* A linked list of "instances" of the wl24 device. Each actual PCMCIA card
* corresponds to one device instance, and is described by one dev_link_t
* corresponds to one device instance, and is described by one dev_link_t
...
@@ -623,8 +638,10 @@ static int wl3501_mgmt_join(struct wl3501_card *this, u16 stas)
...
@@ -623,8 +638,10 @@ static int wl3501_mgmt_join(struct wl3501_card *this, u16 stas)
struct
wl3501_join_req
sig
=
{
struct
wl3501_join_req
sig
=
{
.
sig_id
=
WL3501_SIG_JOIN_REQ
,
.
sig_id
=
WL3501_SIG_JOIN_REQ
,
.
timeout
=
10
,
.
timeout
=
10
,
.
phy_pset
=
{
.
ds_pset
=
{
[
2
]
=
this
->
chan
,
.
el
.
id
=
IW_MGMT_INFO_ELEMENT_DS_PARAMETER_SET
,
.
el
.
len
=
1
,
.
chan
=
this
->
chan
,
},
},
};
};
...
@@ -638,24 +655,42 @@ static int wl3501_mgmt_start(struct wl3501_card *this)
...
@@ -638,24 +655,42 @@ static int wl3501_mgmt_start(struct wl3501_card *this)
.
sig_id
=
WL3501_SIG_START_REQ
,
.
sig_id
=
WL3501_SIG_START_REQ
,
.
beacon_period
=
400
,
.
beacon_period
=
400
,
.
dtim_period
=
1
,
.
dtim_period
=
1
,
.
phy_pset
=
{
.
ds_pset
=
{
[
0
]
=
3
,
[
1
]
=
1
,
[
2
]
=
this
->
chan
,
.
el
.
id
=
IW_MGMT_INFO_ELEMENT_DS_PARAMETER_SET
,
.
el
.
len
=
1
,
.
chan
=
this
->
chan
,
},
.
bss_basic_rset
=
{
.
el
.
id
=
IW_MGMT_INFO_ELEMENT_SUPPORTED_RATES
,
.
el
.
len
=
2
,
.
data_rate_labels
=
{
[
0
]
=
IW_MGMT_RATE_LABEL_MANDATORY
|
IW_MGMT_RATE_LABEL_1MBIT
,
[
1
]
=
IW_MGMT_RATE_LABEL_MANDATORY
|
IW_MGMT_RATE_LABEL_2MBIT
,
},
},
.
bss_basic_rate_set
=
{
[
0
]
=
0x01
,
[
1
]
=
0x02
,
[
2
]
=
0x82
,
[
3
]
=
0x84
,
},
},
.
operational_rate_set
=
{
.
operational_rset
=
{
[
0
]
=
0x01
,
[
1
]
=
0x02
,
[
2
]
=
0x82
,
[
3
]
=
0x84
,
.
el
.
id
=
IW_MGMT_INFO_ELEMENT_SUPPORTED_RATES
,
.
el
.
len
=
2
,
.
data_rate_labels
=
{
[
0
]
=
IW_MGMT_RATE_LABEL_MANDATORY
|
IW_MGMT_RATE_LABEL_1MBIT
,
[
1
]
=
IW_MGMT_RATE_LABEL_MANDATORY
|
IW_MGMT_RATE_LABEL_2MBIT
,
},
},
},
.
ibss_pset
=
{
.
ibss_pset
=
{
[
0
]
=
6
,
[
1
]
=
2
,
[
2
]
=
10
,
.
el
.
id
=
IW_MGMT_INFO_ELEMENT_IBSS_PARAMETER_SET
,
.
el
.
len
=
2
,
.
atim_window
=
10
,
},
},
.
bss_type
=
wl3501_fw_bss_type
(
this
),
.
bss_type
=
wl3501_fw_bss_type
(
this
),
.
cap_info
=
wl3501_fw_cap_info
(
this
),
.
cap_info
=
wl3501_fw_cap_info
(
this
),
};
};
memcpy
(
sig
.
ssid
,
this
->
essid
,
WL3501_ESSID_MAX_LEN
);
iw_copy_mgmt_info_element
(
&
sig
.
ssid
.
el
,
&
this
->
essid
.
el
);
memcpy
(
this
->
keep_essid
,
this
->
essid
,
WL3501_ESSID_MAX_LEN
);
iw_copy_mgmt_info_element
(
&
this
->
keep_essid
.
el
,
&
this
->
essid
.
el
);
return
wl3501_esbq_exec
(
this
,
&
sig
,
sizeof
(
sig
));
return
wl3501_esbq_exec
(
this
,
&
sig
,
sizeof
(
sig
));
}
}
...
@@ -674,15 +709,15 @@ static void wl3501_mgmt_scan_confirm(struct wl3501_card *this, u16 addr)
...
@@ -674,15 +709,15 @@ static void wl3501_mgmt_scan_confirm(struct wl3501_card *this, u16 addr)
(
this
->
net_type
==
IW_MODE_ADHOC
&&
(
this
->
net_type
==
IW_MODE_ADHOC
&&
(
sig
.
cap_info
&
WL3501_MGMT_CAPABILITY_IBSS
))
||
(
sig
.
cap_info
&
WL3501_MGMT_CAPABILITY_IBSS
))
||
this
->
net_type
==
IW_MODE_AUTO
)
{
this
->
net_type
==
IW_MODE_AUTO
)
{
if
(
!
this
->
essid
[
1
]
)
if
(
!
this
->
essid
.
el
.
len
)
matchflag
=
1
;
matchflag
=
1
;
else
if
(
this
->
essid
[
1
]
==
3
&&
else
if
(
this
->
essid
.
el
.
len
==
3
&&
!
strncmp
((
char
*
)
&
this
->
essid
[
2
]
,
"ANY"
,
3
))
!
memcmp
(
this
->
essid
.
essid
,
"ANY"
,
3
))
matchflag
=
1
;
matchflag
=
1
;
else
if
(
this
->
essid
[
1
]
!=
sig
.
ssid
[
1
]
)
else
if
(
this
->
essid
.
el
.
len
!=
sig
.
ssid
.
el
.
len
)
matchflag
=
0
;
matchflag
=
0
;
else
if
(
memcmp
(
&
this
->
essid
[
2
],
&
sig
.
ssid
[
2
]
,
else
if
(
memcmp
(
this
->
essid
.
essid
,
sig
.
ssid
.
essid
,
this
->
essid
[
1
]
))
this
->
essid
.
el
.
len
))
matchflag
=
0
;
matchflag
=
0
;
else
else
matchflag
=
1
;
matchflag
=
1
;
...
@@ -894,17 +929,18 @@ static void wl3501_mgmt_join_confirm(struct net_device *dev, u16 addr)
...
@@ -894,17 +929,18 @@ static void wl3501_mgmt_join_confirm(struct net_device *dev, u16 addr)
const
int
i
=
this
->
join_sta_bss
;
const
int
i
=
this
->
join_sta_bss
;
memcpy
(
this
->
bssid
,
memcpy
(
this
->
bssid
,
this
->
bss_set
[
i
].
bssid
,
ETH_ALEN
);
this
->
bss_set
[
i
].
bssid
,
ETH_ALEN
);
this
->
chan
=
this
->
bss_set
[
i
].
phy_pset
[
2
]
;
this
->
chan
=
this
->
bss_set
[
i
].
ds_pset
.
chan
;
memcpy
(
this
->
keep_essid
,
this
->
bss_set
[
i
].
ssid
,
iw_copy_mgmt_info_element
(
&
this
->
keep_essid
.
el
,
WL3501_ESSID_MAX_LEN
);
&
this
->
bss_set
[
i
].
ssid
.
el
);
wl3501_mgmt_auth
(
this
);
wl3501_mgmt_auth
(
this
);
}
}
}
else
{
}
else
{
const
int
i
=
this
->
join_sta_bss
;
const
int
i
=
this
->
join_sta_bss
;
memcpy
(
this
->
bssid
,
this
->
bss_set
[
i
].
bssid
,
ETH_ALEN
);
this
->
chan
=
this
->
bss_set
[
i
].
phy_pset
[
2
];
memcpy
(
&
this
->
bssid
,
&
this
->
bss_set
[
i
].
bssid
,
ETH_ALEN
);
memcpy
(
this
->
keep_essid
,
this
->
chan
=
this
->
bss_set
[
i
].
ds_pset
.
chan
;
this
->
bss_set
[
i
].
ssid
,
WL3501_ESSID_MAX_LEN
);
iw_copy_mgmt_info_element
(
&
this
->
keep_essid
.
el
,
&
this
->
bss_set
[
i
].
ssid
.
el
);
wl3501_online
(
dev
);
wl3501_online
(
dev
);
}
}
}
else
{
}
else
{
...
@@ -1688,19 +1724,79 @@ static int wl3501_get_wap(struct net_device *dev, struct iw_request_info *info,
...
@@ -1688,19 +1724,79 @@ static int wl3501_get_wap(struct net_device *dev, struct iw_request_info *info,
return
0
;
return
0
;
}
}
static
int
wl3501_set_scan
(
struct
net_device
*
dev
,
struct
iw_request_info
*
info
,
union
iwreq_data
*
wrqu
,
char
*
extra
)
{
/*
* FIXME: trigger scanning with a reset, yes, I'm lazy
*/
return
wl3501_reset
(
dev
);
}
static
int
wl3501_get_scan
(
struct
net_device
*
dev
,
struct
iw_request_info
*
info
,
union
iwreq_data
*
wrqu
,
char
*
extra
)
{
struct
wl3501_card
*
this
=
dev
->
priv
;
int
i
;
char
*
current_ev
=
extra
;
struct
iw_event
iwe
;
for
(
i
=
0
;
i
<
this
->
bss_cnt
;
++
i
)
{
iwe
.
cmd
=
SIOCGIWAP
;
iwe
.
u
.
ap_addr
.
sa_family
=
ARPHRD_ETHER
;
memcpy
(
iwe
.
u
.
ap_addr
.
sa_data
,
this
->
bss_set
[
i
].
bssid
,
ETH_ALEN
);
current_ev
=
iwe_stream_add_event
(
current_ev
,
extra
+
IW_SCAN_MAX_DATA
,
&
iwe
,
IW_EV_ADDR_LEN
);
iwe
.
cmd
=
SIOCGIWESSID
;
iwe
.
u
.
data
.
flags
=
1
;
iwe
.
u
.
data
.
length
=
this
->
bss_set
[
i
].
ssid
.
el
.
len
;
current_ev
=
iwe_stream_add_point
(
current_ev
,
extra
+
IW_SCAN_MAX_DATA
,
&
iwe
,
this
->
bss_set
[
i
].
ssid
.
essid
);
iwe
.
cmd
=
SIOCGIWMODE
;
iwe
.
u
.
mode
=
this
->
bss_set
[
i
].
bss_type
;
current_ev
=
iwe_stream_add_event
(
current_ev
,
extra
+
IW_SCAN_MAX_DATA
,
&
iwe
,
IW_EV_UINT_LEN
);
iwe
.
cmd
=
SIOCGIWFREQ
;
iwe
.
u
.
freq
.
m
=
this
->
bss_set
[
i
].
ds_pset
.
chan
;
iwe
.
u
.
freq
.
e
=
0
;
current_ev
=
iwe_stream_add_event
(
current_ev
,
extra
+
IW_SCAN_MAX_DATA
,
&
iwe
,
IW_EV_FREQ_LEN
);
iwe
.
cmd
=
SIOCGIWENCODE
;
if
(
this
->
bss_set
[
i
].
cap_info
&
WL3501_MGMT_CAPABILITY_PRIVACY
)
iwe
.
u
.
data
.
flags
=
IW_ENCODE_ENABLED
|
IW_ENCODE_NOKEY
;
else
iwe
.
u
.
data
.
flags
=
IW_ENCODE_DISABLED
;
iwe
.
u
.
data
.
length
=
0
;
current_ev
=
iwe_stream_add_point
(
current_ev
,
extra
+
IW_SCAN_MAX_DATA
,
&
iwe
,
NULL
);
}
/* Length of data */
wrqu
->
data
.
length
=
(
current_ev
-
extra
);
wrqu
->
data
.
flags
=
0
;
/* FIXME: set properly these flags */
return
0
;
}
static
int
wl3501_set_essid
(
struct
net_device
*
dev
,
static
int
wl3501_set_essid
(
struct
net_device
*
dev
,
struct
iw_request_info
*
info
,
struct
iw_request_info
*
info
,
union
iwreq_data
*
wrqu
,
char
*
extra
)
union
iwreq_data
*
wrqu
,
char
*
extra
)
{
{
struct
wl3501_card
*
this
=
dev
->
priv
;
struct
wl3501_card
*
this
=
dev
->
priv
;
int
rc
=
0
;
if
(
wrqu
->
data
.
flags
)
{
if
(
wrqu
->
data
.
flags
)
{
strlcpy
(
this
->
essid
+
2
,
extra
,
min_t
(
u16
,
wrqu
->
data
.
length
,
iw_set_mgmt_info_element
(
IW_MGMT_INFO_ELEMENT_SSID
,
IW_ESSID_MAX_SIZE
));
&
this
->
essid
.
el
,
rc
=
wl3501_reset
(
dev
);
extra
,
wrqu
->
data
.
length
);
}
else
{
/* We accept any ESSID */
iw_set_mgmt_info_element
(
IW_MGMT_INFO_ELEMENT_SSID
,
&
this
->
essid
.
el
,
"ANY"
,
3
);
}
}
return
rc
;
return
wl3501_reset
(
dev
)
;
}
}
static
int
wl3501_get_essid
(
struct
net_device
*
dev
,
static
int
wl3501_get_essid
(
struct
net_device
*
dev
,
...
@@ -1712,8 +1808,8 @@ static int wl3501_get_essid(struct net_device *dev,
...
@@ -1712,8 +1808,8 @@ static int wl3501_get_essid(struct net_device *dev,
spin_lock_irqsave
(
&
this
->
lock
,
flags
);
spin_lock_irqsave
(
&
this
->
lock
,
flags
);
wrqu
->
essid
.
flags
=
1
;
wrqu
->
essid
.
flags
=
1
;
wrqu
->
essid
.
length
=
IW_ESSID_MAX_SIZE
;
wrqu
->
essid
.
length
=
this
->
essid
.
el
.
len
;
strlcpy
(
extra
,
this
->
essid
+
2
,
IW_ESSID_MAX_SIZE
);
memcpy
(
extra
,
this
->
essid
.
essid
,
this
->
essid
.
el
.
len
);
spin_unlock_irqrestore
(
&
this
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
this
->
lock
,
flags
);
return
0
;
return
0
;
}
}
...
@@ -1902,6 +1998,8 @@ static const iw_handler wl3501_handler[] = {
...
@@ -1902,6 +1998,8 @@ static const iw_handler wl3501_handler[] = {
[
SIOCGIWTHRSPY
-
SIOCIWFIRST
]
=
iw_handler_get_thrspy
,
[
SIOCGIWTHRSPY
-
SIOCIWFIRST
]
=
iw_handler_get_thrspy
,
[
SIOCSIWAP
-
SIOCIWFIRST
]
=
wl3501_set_wap
,
[
SIOCSIWAP
-
SIOCIWFIRST
]
=
wl3501_set_wap
,
[
SIOCGIWAP
-
SIOCIWFIRST
]
=
wl3501_get_wap
,
[
SIOCGIWAP
-
SIOCIWFIRST
]
=
wl3501_get_wap
,
[
SIOCSIWSCAN
-
SIOCIWFIRST
]
=
wl3501_set_scan
,
[
SIOCGIWSCAN
-
SIOCIWFIRST
]
=
wl3501_get_scan
,
[
SIOCSIWESSID
-
SIOCIWFIRST
]
=
wl3501_set_essid
,
[
SIOCSIWESSID
-
SIOCIWFIRST
]
=
wl3501_set_essid
,
[
SIOCGIWESSID
-
SIOCIWFIRST
]
=
wl3501_get_essid
,
[
SIOCGIWESSID
-
SIOCIWFIRST
]
=
wl3501_get_essid
,
[
SIOCSIWNICKN
-
SIOCIWFIRST
]
=
wl3501_set_nick
,
[
SIOCSIWNICKN
-
SIOCIWFIRST
]
=
wl3501_set_nick
,
...
@@ -2118,11 +2216,8 @@ static void wl3501_config(dev_link_t *link)
...
@@ -2118,11 +2216,8 @@ static void wl3501_config(dev_link_t *link)
this
->
bss_cnt
=
0
;
this
->
bss_cnt
=
0
;
this
->
join_sta_bss
=
0
;
this
->
join_sta_bss
=
0
;
this
->
adhoc_times
=
0
;
this
->
adhoc_times
=
0
;
this
->
essid
[
0
]
=
0
;
iw_set_mgmt_info_element
(
IW_MGMT_INFO_ELEMENT_SSID
,
&
this
->
essid
.
el
,
this
->
essid
[
1
]
=
3
;
"ANY"
,
3
);
this
->
essid
[
2
]
=
'A'
;
this
->
essid
[
3
]
=
'N'
;
this
->
essid
[
4
]
=
'Y'
;
this
->
card_name
[
0
]
=
'\0'
;
this
->
card_name
[
0
]
=
'\0'
;
this
->
firmware_date
[
0
]
=
'\0'
;
this
->
firmware_date
[
0
]
=
'\0'
;
this
->
rssi
=
255
;
this
->
rssi
=
255
;
...
...
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