diff options
Diffstat (limited to 'sys/dev/wi')
-rw-r--r-- | sys/dev/wi/if_wi.c | 25 | ||||
-rw-r--r-- | sys/dev/wi/if_wireg.h | 7 |
2 files changed, 28 insertions, 4 deletions
diff --git a/sys/dev/wi/if_wi.c b/sys/dev/wi/if_wi.c index 35f585e..5a4948d 100644 --- a/sys/dev/wi/if_wi.c +++ b/sys/dev/wi/if_wi.c @@ -29,7 +29,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: if_wi.c,v 1.48 1999/05/05 00:32:13 wpaul Exp wpaul $ + * $Id: if_wi.c,v 1.52 1999/05/06 16:28:02 wpaul Exp $ */ /* @@ -116,7 +116,7 @@ #if !defined(lint) static const char rcsid[] = - "$Id: if_wi.c,v 1.48 1999/05/05 00:32:13 wpaul Exp wpaul $"; + "$Id: if_wi.c,v 1.52 1999/05/06 16:28:02 wpaul Exp $"; #endif static struct wi_softc wi_softc[NWI]; @@ -275,6 +275,7 @@ static int wi_attach(isa_dev) { struct wi_softc *sc; struct wi_ltv_macaddr mac; + struct wi_ltv_gen gen; struct ifnet *ifp; char ifname[IFNAMSIZ]; @@ -330,6 +331,17 @@ static int wi_attach(isa_dev) sc->wi_max_data_len = WI_DEFAULT_DATALEN; sc->wi_create_ibss = WI_DEFAULT_CREATE_IBSS; + /* + * Read the default channel from the NIC. This may vary + * depending on the country where the NIC was purchased, so + * we can't hard-code a default and expect it to work for + * everyone. + */ + gen.wi_type = WI_RID_OWN_CHNL; + gen.wi_len = 2; + wi_read_record(sc, &gen); + sc->wi_channel = gen.wi_val; + bzero((char *)&sc->wi_stats, sizeof(sc->wi_stats)); wi_init(sc); @@ -941,6 +953,9 @@ static void wi_setdef(sc, wreq) case WI_RID_CREATE_IBSS: sc->wi_create_ibss = wreq->wi_val[0]; break; + case WI_RID_OWN_CHNL: + sc->wi_channel = wreq->wi_val[0]; + break; case WI_RID_NODENAME: bzero(sc->wi_node_name, sizeof(sc->wi_node_name)); bcopy((char *)&wreq->wi_val[1], sc->wi_node_name, 30); @@ -957,6 +972,9 @@ static void wi_setdef(sc, wreq) break; } + /* Reinitialize WaveLAN. */ + wi_init(sc); + return; } @@ -1094,6 +1112,9 @@ static void wi_init(xsc) /* Specify the network name */ WI_SETSTR(WI_RID_DESIRED_SSID, sc->wi_net_name); + /* Specify the frequency to use */ + WI_SETVAL(WI_RID_OWN_CHNL, sc->wi_channel); + /* Program the nodename. */ WI_SETSTR(WI_RID_NODENAME, sc->wi_node_name); diff --git a/sys/dev/wi/if_wireg.h b/sys/dev/wi/if_wireg.h index 271092d..a2db415 100644 --- a/sys/dev/wi/if_wireg.h +++ b/sys/dev/wi/if_wireg.h @@ -29,7 +29,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: if_wireg.h,v 1.29 1999/05/06 03:05:48 wpaul Exp $ + * $Id: if_wireg.h,v 1.30 1999/05/06 16:12:06 wpaul Exp $ */ struct wi_counters { @@ -73,6 +73,7 @@ struct wi_softc { u_int16_t wi_ap_density; u_int16_t wi_tx_rate; u_int16_t wi_create_ibss; + u_int16_t wi_channel; char wi_node_name[32]; char wi_net_name[32]; char wi_ibss_name[32]; @@ -111,6 +112,8 @@ struct wi_softc { #define WI_DEFAULT_IBSS "FreeBSD IBSS" +#define WI_DEFAULT_CHAN 3 + /* * register space access macros */ @@ -456,7 +459,7 @@ struct wi_ltv_ssid { /* * Set communications channel (radio frequency). */ -#define WI_RID_CHNL 0xFC03 +#define WI_RID_OWN_CHNL 0xFC03 /* * Frame data size. |