Lines Matching full:local

86 static int translate_frame(ray_dev_t *local, struct tx_msg __iomem *ptx,
88 static void ray_build_header(ray_dev_t *local, struct tx_msg __iomem *ptx,
90 static void untranslate(ray_dev_t *local, struct sk_buff *skb, int len);
95 static void authenticate(ray_dev_t *local);
96 static int build_auth_frame(ray_dev_t *local, UCHAR *dest, int auth_type);
98 static int get_free_ccs(ray_dev_t *local);
99 static int get_free_tx_ccs(ray_dev_t *local);
100 static void init_startup_params(ray_dev_t *local);
104 static int interrupt_ecf(ray_dev_t *local, int ccs);
111 static void clear_interrupt(ray_dev_t *local);
112 static void rx_deauthenticate(ray_dev_t *local, struct rcs __iomem *prcs,
114 static int copy_from_rx_buff(ray_dev_t *local, UCHAR *dest, int pkt_addr, int len);
115 static void ray_rx(struct net_device *dev, ray_dev_t *local, struct rcs __iomem *prcs);
116 static void release_frag_chain(ray_dev_t *local, struct rcs __iomem *prcs);
117 static void rx_authenticate(ray_dev_t *local, struct rcs __iomem *prcs,
121 static void associate(ray_dev_t *local);
125 static void join_net(u_long local);
126 static void start_net(u_long local);
127 /* void start_net(ray_dev_t *local); */
284 ray_dev_t *local; in ray_probe() local
294 local = netdev_priv(dev); in ray_probe()
295 local->finder = p_dev; in ray_probe()
307 local->finder = p_dev; in ray_probe()
308 local->card_status = CARD_INSERTED; in ray_probe()
309 local->authentication_state = UNAUTHENTICATED; in ray_probe()
310 local->num_multi = 0; in ray_probe()
311 dev_dbg(&p_dev->dev, "ray_attach p_dev = %p, dev = %p, local = %p, intr = %p\n", in ray_probe()
312 p_dev, dev, local, &ray_interrupt); in ray_probe()
318 local->wireless_data.spy_data = &local->spy_data; in ray_probe()
319 dev->wireless_data = &local->wireless_data; in ray_probe()
326 init_timer(&local->timer); in ray_probe()
338 ray_dev_t *local; in ray_detach() local
347 local = netdev_priv(dev); in ray_detach()
348 del_timer(&local->timer); in ray_detach()
363 ray_dev_t *local = netdev_priv(dev); in ray_config() local
396 local->sram = ioremap(link->resource[2]->start, in ray_config()
410 local->rmem = ioremap(link->resource[3]->start, in ray_config()
424 local->amem = ioremap(link->resource[4]->start, in ray_config()
427 dev_dbg(&link->dev, "ray_config sram=%p\n", local->sram); in ray_config()
428 dev_dbg(&link->dev, "ray_config rmem=%p\n", local->rmem); in ray_config()
429 dev_dbg(&link->dev, "ray_config amem=%p\n", local->amem); in ray_config()
476 ray_dev_t *local = netdev_priv(dev); in ray_init() local
477 struct pcmcia_device *link = local->finder; in ray_init()
484 local->net_type = net_type; in ray_init()
485 local->sta_type = TYPE_STA; in ray_init()
487 /* Copy the startup results to local memory */ in ray_init()
488 memcpy_fromio(&local->startup_res, local->sram + ECF_TO_HOST_BASE, in ray_init()
492 if (local->startup_res.startup_word != 0x80) { in ray_init()
494 local->startup_res.startup_word); in ray_init()
495 local->card_status = CARD_INIT_ERROR; in ray_init()
499 local->fw_ver = local->startup_res.firmware_version[0]; in ray_init()
500 local->fw_bld = local->startup_res.firmware_version[1]; in ray_init()
501 local->fw_var = local->startup_res.firmware_version[2]; in ray_init()
502 dev_dbg(&link->dev, "ray_init firmware version %d.%d\n", local->fw_ver, in ray_init()
503 local->fw_bld); in ray_init()
505 local->tib_length = 0x20; in ray_init()
506 if ((local->fw_ver == 5) && (local->fw_bld >= 30)) in ray_init()
507 local->tib_length = local->startup_res.tib_length; in ray_init()
508 dev_dbg(&link->dev, "ray_init tib_length = 0x%02x\n", local->tib_length); in ray_init()
510 pccs = ccs_base(local); in ray_init()
514 init_startup_params(local); in ray_init()
517 if (parse_addr(phy_addr, local->sparm.b4.a_mac_addr)) { in ray_init()
518 p = local->sparm.b4.a_mac_addr; in ray_init()
520 memcpy(&local->sparm.b4.a_mac_addr, in ray_init()
521 &local->startup_res.station_addr, ADDRLEN); in ray_init()
522 p = local->sparm.b4.a_mac_addr; in ray_init()
525 clear_interrupt(local); /* Clear any interrupt from the card */ in ray_init()
526 local->card_status = CARD_AWAITING_PARAM; in ray_init()
536 ray_dev_t *local = netdev_priv(dev); in dl_startup_params() local
538 struct pcmcia_device *link = local->finder; in dl_startup_params()
547 if (local->fw_ver == 0x55) in dl_startup_params()
548 memcpy_toio(local->sram + HOST_TO_ECF_BASE, &local->sparm.b4, in dl_startup_params()
551 memcpy_toio(local->sram + HOST_TO_ECF_BASE, &local->sparm.b5, in dl_startup_params()
555 if ((ccsindex = get_free_ccs(local)) < 0) in dl_startup_params()
557 local->dl_param_ccs = ccsindex; in dl_startup_params()
558 pccs = ccs_base(local) + ccsindex; in dl_startup_params()
561 local->dl_param_ccs); in dl_startup_params()
563 if (interrupt_ecf(local, ccsindex)) { in dl_startup_params()
566 local->card_status = CARD_DL_PARAM_ERROR; in dl_startup_params()
570 local->card_status = CARD_DL_PARAM; in dl_startup_params()
572 local->timer.expires = jiffies + HZ / 2; in dl_startup_params()
573 local->timer.data = (long)local; in dl_startup_params()
574 local->timer.function = verify_dl_startup; in dl_startup_params()
575 add_timer(&local->timer); in dl_startup_params()
582 static void init_startup_params(ray_dev_t *local) in init_startup_params() argument
602 if (local->fw_ver == 0x55) { in init_startup_params()
603 memcpy((UCHAR *) &local->sparm.b4, b4_default_startup_parms, in init_startup_params()
608 local->sparm.b4.a_hop_time[0] = (i >> 16) & 0xff; in init_startup_params()
609 local->sparm.b4.a_hop_time[1] = (i >> 8) & 0xff; in init_startup_params()
610 local->sparm.b4.a_beacon_period[0] = 0; in init_startup_params()
611 local->sparm.b4.a_beacon_period[1] = in init_startup_params()
613 local->sparm.b4.a_curr_country_code = country; in init_startup_params()
614 local->sparm.b4.a_hop_pattern_length = in init_startup_params()
617 local->sparm.b4.a_ack_timeout = 0x50; in init_startup_params()
618 local->sparm.b4.a_sifs = 0x3f; in init_startup_params()
621 memcpy((UCHAR *) &local->sparm.b5, b5_default_startup_parms, in init_startup_params()
624 local->sparm.b5.a_hop_time[0] = (hop_dwell >> 8) & 0xff; in init_startup_params()
625 local->sparm.b5.a_hop_time[1] = hop_dwell & 0xff; in init_startup_params()
626 local->sparm.b5.a_beacon_period[0] = in init_startup_params()
628 local->sparm.b5.a_beacon_period[1] = beacon_period & 0xff; in init_startup_params()
630 local->sparm.b5.a_power_mgt_state = 1; in init_startup_params()
631 local->sparm.b5.a_curr_country_code = country; in init_startup_params()
632 local->sparm.b5.a_hop_pattern_length = in init_startup_params()
636 local->sparm.b4.a_network_type = net_type & 0x01; in init_startup_params()
637 local->sparm.b4.a_acting_as_ap_status = TYPE_STA; in init_startup_params()
640 strncpy(local->sparm.b4.a_current_ess_id, essid, ESSID_SIZE); in init_startup_params()
646 ray_dev_t *local = (ray_dev_t *) data; in verify_dl_startup() local
647 struct ccs __iomem *pccs = ccs_base(local) + local->dl_param_ccs; in verify_dl_startup()
649 struct pcmcia_device *link = local->finder; in verify_dl_startup()
660 local->dl_param_ccs); in verify_dl_startup()
663 (unsigned int)readb(local->sram + in verify_dl_startup()
675 local->card_status = CARD_DL_PARAM_ERROR; in verify_dl_startup()
678 if (local->sparm.b4.a_network_type == ADHOC) in verify_dl_startup()
679 start_net((u_long) local); in verify_dl_startup()
681 join_net((u_long) local); in verify_dl_startup()
688 ray_dev_t *local = (ray_dev_t *) data; in start_net() local
691 struct pcmcia_device *link = local->finder; in start_net()
697 if ((ccsindex = get_free_ccs(local)) < 0) in start_net()
699 pccs = ccs_base(local) + ccsindex; in start_net()
703 if (interrupt_ecf(local, ccsindex)) { in start_net()
708 local->card_status = CARD_DOING_ACQ; in start_net()
715 ray_dev_t *local = (ray_dev_t *) data; in join_net() local
719 struct pcmcia_device *link = local->finder; in join_net()
726 if ((ccsindex = get_free_ccs(local)) < 0) in join_net()
728 pccs = ccs_base(local) + ccsindex; in join_net()
733 if (interrupt_ecf(local, ccsindex)) { in join_net()
738 local->card_status = CARD_DOING_ACQ; in join_net()
745 ray_dev_t *local = netdev_priv(dev); in ray_release() local
749 del_timer(&local->timer); in ray_release()
751 iounmap(local->sram); in ray_release()
752 iounmap(local->rmem); in ray_release()
753 iounmap(local->amem); in ray_release()
787 ray_dev_t *local = netdev_priv(dev); in ray_dev_init() local
788 struct pcmcia_device *link = local->finder; in ray_dev_init()
808 local->card_status); in ray_dev_init()
812 memcpy(dev->dev_addr, &local->sparm.b4.a_mac_addr, ADDRLEN); in ray_dev_init()
822 ray_dev_t *local = netdev_priv(dev); in ray_dev_config() local
823 struct pcmcia_device *link = local->finder; in ray_dev_config()
838 ray_dev_t *local = netdev_priv(dev); in ray_dev_start_xmit() local
839 struct pcmcia_device *link = local->finder; in ray_dev_start_xmit()
849 if (local->authentication_state == NEED_TO_AUTH) { in ray_dev_start_xmit()
851 if (!build_auth_frame(local, local->auth_id, OPEN_AUTH_REQUEST)) { in ray_dev_start_xmit()
852 local->authentication_state = AUTHENTICATED; in ray_dev_start_xmit()
882 ray_dev_t *local = netdev_priv(dev); in ray_hw_xmit() local
895 switch (ccsindex = get_free_tx_ccs(local)) { in ray_hw_xmit()
909 local->stats.tx_bytes += len; in ray_hw_xmit()
910 local->stats.tx_packets++; in ray_hw_xmit()
913 ptx = local->sram + addr; in ray_hw_xmit()
915 ray_build_header(local, ptx, msg_type, data); in ray_hw_xmit()
917 offset = translate_frame(local, ptx, data, len); in ray_hw_xmit()
925 pccs = ccs_base(local) + ccsindex; in ray_hw_xmit()
929 writeb(local->tib_length, &pccs->var.tx_request.tx_data_ptr[1]); in ray_hw_xmit()
934 writeb(local->net_default_tx_rate, &pccs->var.tx_request.tx_rate); in ray_hw_xmit()
937 local->net_default_tx_rate); in ray_hw_xmit()
940 if (interrupt_ecf(local, ccsindex)) { in ray_hw_xmit()
953 static int translate_frame(ray_dev_t *local, struct tx_msg __iomem *ptx, in translate_frame() argument
987 static void ray_build_header(ray_dev_t *local, struct tx_msg __iomem *ptx, in ray_build_header() argument
998 if (local->net_type == ADHOC) { in ray_build_header()
1002 memcpy_toio(ptx->mac.addr_3, local->bss_id, ADDRLEN); in ray_build_header()
1005 if (local->sparm.b4.a_acting_as_ap_status) { in ray_build_header()
1009 memcpy_toio(ptx->mac.addr_2, local->bss_id, 6); in ray_build_header()
1015 memcpy_toio(ptx->mac.addr_1, local->bss_id, ADDRLEN); in ray_build_header()
1044 ray_dev_t *local = netdev_priv(dev); in ray_set_freq() local
1048 if (local->card_status != CARD_AWAITING_PARAM) in ray_set_freq()
1055 local->sparm.b5.a_hop_pattern = wrqu->freq.m; in ray_set_freq()
1067 ray_dev_t *local = netdev_priv(dev); in ray_get_freq() local
1069 wrqu->freq.m = local->sparm.b5.a_hop_pattern; in ray_get_freq()
1081 ray_dev_t *local = netdev_priv(dev); in ray_set_essid() local
1084 if (local->card_status != CARD_AWAITING_PARAM) in ray_set_essid()
1097 memset(local->sparm.b5.a_current_ess_id, 0, IW_ESSID_MAX_SIZE); in ray_set_essid()
1098 memcpy(local->sparm.b5.a_current_ess_id, extra, wrqu->essid.length); in ray_set_essid()
1110 ray_dev_t *local = netdev_priv(dev); in ray_get_essid() local
1113 memcpy(extra, local->sparm.b5.a_current_ess_id, IW_ESSID_MAX_SIZE); in ray_get_essid()
1129 ray_dev_t *local = netdev_priv(dev); in ray_get_wap() local
1131 memcpy(wrqu->ap_addr.sa_data, local->bss_id, ETH_ALEN); in ray_get_wap()
1144 ray_dev_t *local = netdev_priv(dev); in ray_set_rate() local
1147 if (local->card_status != CARD_AWAITING_PARAM) in ray_set_rate()
1155 if ((local->fw_ver == 0x55) && /* Please check */ in ray_set_rate()
1157 local->net_default_tx_rate = 3; in ray_set_rate()
1159 local->net_default_tx_rate = wrqu->bitrate.value / 500000; in ray_set_rate()
1171 ray_dev_t *local = netdev_priv(dev); in ray_get_rate() local
1173 if (local->net_default_tx_rate == 3) in ray_get_rate()
1176 wrqu->bitrate.value = local->net_default_tx_rate * 500000; in ray_get_rate()
1189 ray_dev_t *local = netdev_priv(dev); in ray_set_rts() local
1193 if (local->card_status != CARD_AWAITING_PARAM) in ray_set_rts()
1203 local->sparm.b5.a_rts_threshold[0] = (rthr >> 8) & 0xFF; in ray_set_rts()
1204 local->sparm.b5.a_rts_threshold[1] = rthr & 0xFF; in ray_set_rts()
1216 ray_dev_t *local = netdev_priv(dev); in ray_get_rts() local
1218 wrqu->rts.value = (local->sparm.b5.a_rts_threshold[0] << 8) in ray_get_rts()
1219 + local->sparm.b5.a_rts_threshold[1]; in ray_get_rts()
1233 ray_dev_t *local = netdev_priv(dev); in ray_set_frag() local
1237 if (local->card_status != CARD_AWAITING_PARAM) in ray_set_frag()
1247 local->sparm.b5.a_frag_threshold[0] = (fthr >> 8) & 0xFF; in ray_set_frag()
1248 local->sparm.b5.a_frag_threshold[1] = fthr & 0xFF; in ray_set_frag()
1260 ray_dev_t *local = netdev_priv(dev); in ray_get_frag() local
1262 wrqu->frag.value = (local->sparm.b5.a_frag_threshold[0] << 8) in ray_get_frag()
1263 + local->sparm.b5.a_frag_threshold[1]; in ray_get_frag()
1277 ray_dev_t *local = netdev_priv(dev); in ray_set_mode() local
1282 if (local->card_status != CARD_AWAITING_PARAM) in ray_set_mode()
1290 local->sparm.b5.a_network_type = card_mode; in ray_set_mode()
1306 ray_dev_t *local = netdev_priv(dev); in ray_get_mode() local
1308 if (local->sparm.b5.a_network_type) in ray_get_mode()
1399 ray_dev_t *local = netdev_priv(dev); in ray_get_wireless_stats() local
1400 struct pcmcia_device *link = local->finder; in ray_get_wireless_stats()
1401 struct status __iomem *p = local->sram + STATUS_BASE; in ray_get_wireless_stats()
1403 local->wstats.status = local->card_status; in ray_get_wireless_stats()
1405 if ((local->spy_data.spy_number > 0) in ray_get_wireless_stats()
1406 && (local->sparm.b5.a_network_type == 0)) { in ray_get_wireless_stats()
1408 local->wstats.qual.qual = local->spy_data.spy_stat[0].qual; in ray_get_wireless_stats()
1409 local->wstats.qual.level = local->spy_data.spy_stat[0].level; in ray_get_wireless_stats()
1410 local->wstats.qual.noise = local->spy_data.spy_stat[0].noise; in ray_get_wireless_stats()
1411 local->wstats.qual.updated = in ray_get_wireless_stats()
1412 local->spy_data.spy_stat[0].updated; in ray_get_wireless_stats()
1417 local->wstats.qual.noise = readb(&p->rxnoise); in ray_get_wireless_stats()
1418 local->wstats.qual.updated |= 4; in ray_get_wireless_stats()
1421 return &local->wstats; in ray_get_wireless_stats()
1487 ray_dev_t *local = netdev_priv(dev); in ray_open() local
1489 link = local->finder; in ray_open()
1494 local->num_multi = 0; in ray_open()
1498 if (local->card_status == CARD_AWAITING_PARAM) { in ray_open()
1524 ray_dev_t *local = netdev_priv(dev); in ray_dev_close() local
1526 link = local->finder; in ray_dev_close()
1534 * and set local->card_status to CARD_AWAITING_PARAM, so that while the in ray_dev_close()
1550 static int interrupt_ecf(ray_dev_t *local, int ccs) in interrupt_ecf() argument
1553 struct pcmcia_device *link = local->finder; in interrupt_ecf()
1559 dev_dbg(&link->dev, "interrupt_ecf(local=%p, ccs = 0x%x\n", local, ccs); in interrupt_ecf()
1562 (readb(local->amem + CIS_OFFSET + ECF_INTR_OFFSET) & in interrupt_ecf()
1570 writeb(ccs, local->sram + SCB_BASE); in interrupt_ecf()
1571 writeb(ECF_INTR_SET, local->amem + CIS_OFFSET + ECF_INTR_OFFSET); in interrupt_ecf()
1578 static int get_free_tx_ccs(ray_dev_t *local) in get_free_tx_ccs() argument
1581 struct ccs __iomem *pccs = ccs_base(local); in get_free_tx_ccs()
1582 struct pcmcia_device *link = local->finder; in get_free_tx_ccs()
1589 if (test_and_set_bit(0, &local->tx_ccs_lock)) { in get_free_tx_ccs()
1598 local->tx_ccs_lock = 0; in get_free_tx_ccs()
1602 local->tx_ccs_lock = 0; in get_free_tx_ccs()
1610 static int get_free_ccs(ray_dev_t *local) in get_free_ccs() argument
1613 struct ccs __iomem *pccs = ccs_base(local); in get_free_ccs()
1614 struct pcmcia_device *link = local->finder; in get_free_ccs()
1620 if (test_and_set_bit(0, &local->ccs_lock)) { in get_free_ccs()
1629 local->ccs_lock = 0; in get_free_ccs()
1633 local->ccs_lock = 0; in get_free_ccs()
1641 ray_dev_t *local = (ray_dev_t *) data; in authenticate_timeout() local
1642 del_timer(&local->timer); in authenticate_timeout()
1645 join_net((u_long) local); in authenticate_timeout()
1688 ray_dev_t *local = netdev_priv(dev); in ray_get_stats() local
1689 struct pcmcia_device *link = local->finder; in ray_get_stats()
1690 struct status __iomem *p = local->sram + STATUS_BASE; in ray_get_stats()
1693 return &local->stats; in ray_get_stats()
1696 local->stats.rx_over_errors += swab16(readw(&p->mrx_overflow)); in ray_get_stats()
1701 local->stats.rx_crc_errors += in ray_get_stats()
1707 local->stats.rx_frame_errors += swab16(readw(&p->rx_hec_error)); in ray_get_stats()
1711 return &local->stats; in ray_get_stats()
1718 ray_dev_t *local = netdev_priv(dev); in ray_update_parm() local
1719 struct pcmcia_device *link = local->finder; in ray_update_parm()
1729 if ((ccsindex = get_free_ccs(local)) < 0) { in ray_update_parm()
1733 pccs = ccs_base(local) + ccsindex; in ray_update_parm()
1739 writeb(value[i], local->sram + HOST_TO_ECF_BASE); in ray_update_parm()
1742 if (interrupt_ecf(local, ccsindex)) { in ray_update_parm()
1753 ray_dev_t *local = netdev_priv(dev); in ray_update_multi_list() local
1754 struct pcmcia_device *link = local->finder; in ray_update_multi_list()
1755 void __iomem *p = local->sram + HOST_TO_ECF_BASE; in ray_update_multi_list()
1762 if ((ccsindex = get_free_ccs(local)) < 0) { in ray_update_multi_list()
1766 pccs = ccs_base(local) + ccsindex; in ray_update_multi_list()
1771 local->num_multi = 0xff; in ray_update_multi_list()
1789 local->num_multi = i; in ray_update_multi_list()
1791 if (interrupt_ecf(local, ccsindex)) { in ray_update_multi_list()
1801 ray_dev_t *local = netdev_priv(dev); in set_multicast_list() local
1807 if (local->sparm.b5.a_promiscuous_mode == 0) { in set_multicast_list()
1809 local->sparm.b5.a_promiscuous_mode = 1; in set_multicast_list()
1815 if (local->sparm.b5.a_promiscuous_mode == 1) { in set_multicast_list()
1817 local->sparm.b5.a_promiscuous_mode = 0; in set_multicast_list()
1827 if (local->num_multi != netdev_mc_count(dev)) in set_multicast_list()
1839 ray_dev_t *local; in ray_interrupt() local
1852 local = netdev_priv(dev); in ray_interrupt()
1853 link = (struct pcmcia_device *)local->finder; in ray_interrupt()
1859 rcsindex = readb(&((struct scb __iomem *)(local->sram))->rcs_index); in ray_interrupt()
1863 clear_interrupt(local); in ray_interrupt()
1867 pccs = ccs_base(local) + rcsindex; in ray_interrupt()
1872 del_timer(&local->timer); in ray_interrupt()
1911 local->sparm.b4.a_current_ess_id); in ray_interrupt()
1915 local->sparm.b4.a_current_ess_id); in ray_interrupt()
1917 memcpy_fromio(&local->bss_id, in ray_interrupt()
1921 if (local->fw_ver == 0x55) in ray_interrupt()
1922 local->net_default_tx_rate = 3; in ray_interrupt()
1924 local->net_default_tx_rate = in ray_interrupt()
1927 local->encryption = in ray_interrupt()
1929 if (!sniffer && (local->net_type == INFRA) in ray_interrupt()
1930 && !(local->sparm.b4.a_acting_as_ap_status)) { in ray_interrupt()
1931 authenticate(local); in ray_interrupt()
1933 local->card_status = CARD_ACQ_COMPLETE; in ray_interrupt()
1935 local->card_status = CARD_ACQ_FAILED; in ray_interrupt()
1937 del_timer(&local->timer); in ray_interrupt()
1938 local->timer.expires = jiffies + HZ * 5; in ray_interrupt()
1939 local->timer.data = (long)local; in ray_interrupt()
1943 local->sparm.b4.a_current_ess_id); in ray_interrupt()
1944 local->timer.function = start_net; in ray_interrupt()
1948 local->sparm.b4.a_current_ess_id); in ray_interrupt()
1949 local->timer.function = join_net; in ray_interrupt()
1951 add_timer(&local->timer); in ray_interrupt()
1956 local->card_status = CARD_ASSOC_COMPLETE; in ray_interrupt()
1960 local->card_status = CARD_ASSOC_FAILED; in ray_interrupt()
1961 join_net((u_long) local); in ray_interrupt()
1998 prcs = rcs_base(local) + rcsindex; in ray_interrupt()
2002 ray_rx(dev, local, prcs); in ray_interrupt()
2006 local->card_status = CARD_ACQ_COMPLETE; in ray_interrupt()
2008 if (local->sparm.b4.a_network_type == ADHOC) { in ray_interrupt()
2012 memcpy_fromio(&local->bss_id, in ray_interrupt()
2016 local->bss_id); in ray_interrupt()
2018 authenticate(local); in ray_interrupt()
2024 local->card_status = CARD_DOING_ACQ; in ray_interrupt()
2038 clear_interrupt(local); in ray_interrupt()
2043 static void ray_rx(struct net_device *dev, ray_dev_t *local, in ray_rx() argument
2058 local->last_rsl = readb(&prcs->var.rx_packet.rx_sig_lev); in ray_rx()
2059 pmsg = local->rmem + pkt_addr; in ray_rx()
2070 rx_authenticate(local, prcs, pkt_addr, rx_len); in ray_rx()
2077 rx_deauthenticate(local, prcs, pkt_addr, rx_len); in ray_rx()
2087 copy_from_rx_buff(local, (UCHAR *) &local->last_bcn, pkt_addr, in ray_rx()
2091 local->beacon_rxed = 1; in ray_rx()
2109 ray_dev_t *local = netdev_priv(dev); in rx_data() local
2114 int siglev = local->last_rsl; in rx_data()
2159 prcslink = rcs_base(local) in rx_data()
2166 local->stats.rx_dropped++; in rx_data()
2167 release_frag_chain(local, prcs); in rx_data()
2177 local->stats.rx_dropped++; in rx_data()
2179 release_frag_chain(local, prcs); in rx_data()
2192 copy_from_rx_buff(local, rx_ptr, pkt_addr & RX_BUFF_END, rx_len); in rx_data()
2207 untranslate(local, skb, total_len); in rx_data()
2219 prcslink = rcs_base(local) in rx_data()
2235 copy_from_rx_buff(local, rx_ptr, pkt_addr, rx_len); in rx_data()
2240 release_frag_chain(local, prcs); in rx_data()
2245 local->stats.rx_packets++; in rx_data()
2246 local->stats.rx_bytes += total_len; in rx_data()
2253 if (!memcmp(linksrcaddr, local->bss_id, ETH_ALEN)) { in rx_data()
2255 /*local->wstats.qual.qual = none ? */ in rx_data()
2256 local->wstats.qual.level = siglev; in rx_data()
2257 /*local->wstats.qual.noise = none ? */ in rx_data()
2258 local->wstats.qual.updated = 0x2; in rx_data()
2274 static void untranslate(ray_dev_t *local, struct sk_buff *skb, int len) in untranslate() argument
2366 static int copy_from_rx_buff(ray_dev_t *local, UCHAR *dest, int pkt_addr, in copy_from_rx_buff() argument
2371 memcpy_fromio(dest, local->rmem + pkt_addr, length); in copy_from_rx_buff()
2374 memcpy_fromio(dest, local->rmem + pkt_addr, in copy_from_rx_buff()
2376 memcpy_fromio(dest + length - wrap_bytes, local->rmem, in copy_from_rx_buff()
2383 static void release_frag_chain(ray_dev_t *local, struct rcs __iomem *prcs) in release_frag_chain() argument
2396 prcslink = rcs_base(local) + rcsindex; in release_frag_chain()
2403 static void authenticate(ray_dev_t *local) in authenticate() argument
2405 struct pcmcia_device *link = local->finder; in authenticate()
2412 del_timer(&local->timer); in authenticate()
2413 if (build_auth_frame(local, local->bss_id, OPEN_AUTH_REQUEST)) { in authenticate()
2414 local->timer.function = join_net; in authenticate()
2416 local->timer.function = authenticate_timeout; in authenticate()
2418 local->timer.expires = jiffies + HZ * 2; in authenticate()
2419 local->timer.data = (long)local; in authenticate()
2420 add_timer(&local->timer); in authenticate()
2421 local->authentication_state = AWAITING_RESPONSE; in authenticate()
2425 static void rx_authenticate(ray_dev_t *local, struct rcs __iomem *prcs, in rx_authenticate() argument
2431 del_timer(&local->timer); in rx_authenticate()
2433 copy_from_rx_buff(local, buff, pkt_addr, rx_len & 0xff); in rx_authenticate()
2435 if (local->sparm.b4.a_network_type == ADHOC) { in rx_authenticate()
2442 (local, msg->mac.addr_2, OPEN_AUTH_RESPONSE)) { in rx_authenticate()
2443 local->authentication_state = NEED_TO_AUTH; in rx_authenticate()
2444 memcpy(local->auth_id, msg->mac.addr_2, in rx_authenticate()
2450 if (local->authentication_state == AWAITING_RESPONSE) { in rx_authenticate()
2455 local->card_status = CARD_AUTH_COMPLETE; in rx_authenticate()
2456 associate(local); in rx_authenticate()
2457 local->authentication_state = in rx_authenticate()
2461 local->card_status = CARD_AUTH_REFUSED; in rx_authenticate()
2462 join_net((u_long) local); in rx_authenticate()
2463 local->authentication_state = in rx_authenticate()
2473 static void associate(ray_dev_t *local) in associate() argument
2476 struct pcmcia_device *link = local->finder; in associate()
2484 if ((ccsindex = get_free_ccs(local)) < 0) { in associate()
2490 pccs = ccs_base(local) + ccsindex; in associate()
2494 if (interrupt_ecf(local, ccsindex)) { in associate()
2498 del_timer(&local->timer); in associate()
2499 local->timer.expires = jiffies + HZ * 2; in associate()
2500 local->timer.data = (long)local; in associate()
2501 local->timer.function = join_net; in associate()
2502 add_timer(&local->timer); in associate()
2503 local->card_status = CARD_ASSOC_FAILED; in associate()
2512 static void rx_deauthenticate(ray_dev_t *local, struct rcs __iomem *prcs, in rx_deauthenticate() argument
2519 local->authentication_state = UNAUTHENTICATED; in rx_deauthenticate()
2521 /* copy_from_rx_buff(local, buff, pkt_addr, rx_len & 0xff); in rx_deauthenticate()
2526 static void clear_interrupt(ray_dev_t *local) in clear_interrupt() argument
2528 writeb(0, local->amem + CIS_OFFSET + HCS_INTR_OFFSET); in clear_interrupt()
2565 ray_dev_t *local; in ray_cs_proc_show() local
2576 local = netdev_priv(dev); in ray_cs_proc_show()
2577 if (!local) in ray_cs_proc_show()
2584 if (local->fw_ver == 0x55) in ray_cs_proc_show()
2588 local->fw_ver, local->fw_bld, local->fw_var); in ray_cs_proc_show()
2591 c[i] = local->sparm.b5.a_current_ess_id[i]; in ray_cs_proc_show()
2594 nettype[local->sparm.b5.a_network_type], c); in ray_cs_proc_show()
2596 p = local->bss_id; in ray_cs_proc_show()
2600 local->sparm.b5.a_curr_country_code); in ray_cs_proc_show()
2602 i = local->card_status; in ray_cs_proc_show()
2611 seq_printf(m, "Last pkt signal lvl = %d\n", local->last_rsl); in ray_cs_proc_show()
2613 if (local->beacon_rxed) { in ray_cs_proc_show()
2616 local->last_bcn.beacon_intvl[0] in ray_cs_proc_show()
2617 + 256 * local->last_bcn.beacon_intvl[1]); in ray_cs_proc_show()
2619 p = local->last_bcn.elements; in ray_cs_proc_show()
2677 static int build_auth_frame(ray_dev_t *local, UCHAR *dest, int auth_type) in build_auth_frame() argument
2685 if ((ccsindex = get_free_tx_ccs(local)) < 0) { in build_auth_frame()
2690 pccs = ccs_base(local) + ccsindex; in build_auth_frame()
2703 ptx = local->sram + addr; in build_auth_frame()
2709 memcpy_toio(ptx->mac.addr_2, local->sparm.b4.a_mac_addr, ADDRLEN); in build_auth_frame()
2710 memcpy_toio(ptx->mac.addr_3, local->bss_id, ADDRLEN); in build_auth_frame()
2717 if (interrupt_ecf(local, ccsindex)) { in build_auth_frame()