Lines Matching defs:local

72 static int translate_frame(ray_dev_t *local, struct tx_msg __iomem *ptx,
74 static void ray_build_header(ray_dev_t *local, struct tx_msg __iomem *ptx,
76 static void untranslate(ray_dev_t *local, struct sk_buff *skb, int len);
81 static void authenticate(ray_dev_t *local);
82 static int build_auth_frame(ray_dev_t *local, UCHAR *dest, int auth_type);
84 static int get_free_ccs(ray_dev_t *local);
85 static int get_free_tx_ccs(ray_dev_t *local);
86 static void init_startup_params(ray_dev_t *local);
90 static int interrupt_ecf(ray_dev_t *local, int ccs);
97 static void clear_interrupt(ray_dev_t *local);
98 static void rx_deauthenticate(ray_dev_t *local, struct rcs __iomem *prcs,
100 static int copy_from_rx_buff(ray_dev_t *local, UCHAR *dest, int pkt_addr, int len);
101 static void ray_rx(struct net_device *dev, ray_dev_t *local, struct rcs __iomem *prcs);
102 static void release_frag_chain(ray_dev_t *local, struct rcs __iomem *prcs);
103 static void rx_authenticate(ray_dev_t *local, struct rcs __iomem *prcs,
107 static void associate(ray_dev_t *local);
271 ray_dev_t *local;
282 local = netdev_priv(dev);
283 local->finder = p_dev;
295 local->finder = p_dev;
296 local->card_status = CARD_INSERTED;
297 local->authentication_state = UNAUTHENTICATED;
298 local->num_multi = 0;
299 dev_dbg(&p_dev->dev, "ray_attach p_dev = %p, dev = %p, local = %p, intr = %p\n",
300 p_dev, dev, local, &ray_interrupt);
306 local->wireless_data.spy_data = &local->spy_data;
307 dev->wireless_data = &local->wireless_data;
314 timer_setup(&local->timer, NULL, 0);
352 ray_dev_t *local = netdev_priv(dev);
385 local->sram = ioremap(link->resource[2]->start,
387 if (!local->sram)
401 local->rmem = ioremap(link->resource[3]->start,
403 if (!local->rmem)
417 local->amem = ioremap(link->resource[4]->start,
419 if (!local->amem)
422 dev_dbg(&link->dev, "ray_config sram=%p\n", local->sram);
423 dev_dbg(&link->dev, "ray_config rmem=%p\n", local->rmem);
424 dev_dbg(&link->dev, "ray_config amem=%p\n", local->amem);
470 ray_dev_t *local = netdev_priv(dev);
471 struct pcmcia_device *link = local->finder;
478 local->net_type = net_type;
479 local->sta_type = TYPE_STA;
481 /* Copy the startup results to local memory */
482 memcpy_fromio(&local->startup_res, local->sram + ECF_TO_HOST_BASE,
486 if (local->startup_res.startup_word != 0x80) {
488 local->startup_res.startup_word);
489 local->card_status = CARD_INIT_ERROR;
493 local->fw_ver = local->startup_res.firmware_version[0];
494 local->fw_bld = local->startup_res.firmware_version[1];
495 local->fw_var = local->startup_res.firmware_version[2];
496 dev_dbg(&link->dev, "ray_init firmware version %d.%d\n", local->fw_ver,
497 local->fw_bld);
499 local->tib_length = 0x20;
500 if ((local->fw_ver == 5) && (local->fw_bld >= 30))
501 local->tib_length = local->startup_res.tib_length;
502 dev_dbg(&link->dev, "ray_init tib_length = 0x%02x\n", local->tib_length);
504 pccs = ccs_base(local);
508 init_startup_params(local);
511 if (!parse_addr(phy_addr, local->sparm.b4.a_mac_addr)) {
512 memcpy(&local->sparm.b4.a_mac_addr,
513 &local->startup_res.station_addr, ADDRLEN);
516 clear_interrupt(local); /* Clear any interrupt from the card */
517 local->card_status = CARD_AWAITING_PARAM;
527 ray_dev_t *local = netdev_priv(dev);
529 struct pcmcia_device *link = local->finder;
538 if (local->fw_ver == 0x55)
539 memcpy_toio(local->sram + HOST_TO_ECF_BASE, &local->sparm.b4,
542 memcpy_toio(local->sram + HOST_TO_ECF_BASE, &local->sparm.b5,
546 if ((ccsindex = get_free_ccs(local)) < 0)
548 local->dl_param_ccs = ccsindex;
549 pccs = ccs_base(local) + ccsindex;
552 local->dl_param_ccs);
554 if (interrupt_ecf(local, ccsindex)) {
557 local->card_status = CARD_DL_PARAM_ERROR;
561 local->card_status = CARD_DL_PARAM;
563 local->timer.expires = jiffies + HZ / 2;
564 local->timer.function = verify_dl_startup;
565 add_timer(&local->timer);
572 static void init_startup_params(ray_dev_t *local)
592 if (local->fw_ver == 0x55) {
593 memcpy(&local->sparm.b4, b4_default_startup_parms,
598 local->sparm.b4.a_hop_time[0] = (i >> 16) & 0xff;
599 local->sparm.b4.a_hop_time[1] = (i >> 8) & 0xff;
600 local->sparm.b4.a_beacon_period[0] = 0;
601 local->sparm.b4.a_beacon_period[1] =
603 local->sparm.b4.a_curr_country_code = country;
604 local->sparm.b4.a_hop_pattern_length =
607 local->sparm.b4.a_ack_timeout = 0x50;
608 local->sparm.b4.a_sifs = 0x3f;
611 memcpy((UCHAR *) &local->sparm.b5, b5_default_startup_parms,
614 local->sparm.b5.a_hop_time[0] = (hop_dwell >> 8) & 0xff;
615 local->sparm.b5.a_hop_time[1] = hop_dwell & 0xff;
616 local->sparm.b5.a_beacon_period[0] =
618 local->sparm.b5.a_beacon_period[1] = beacon_period & 0xff;
620 local->sparm.b5.a_power_mgt_state = 1;
621 local->sparm.b5.a_curr_country_code = country;
622 local->sparm.b5.a_hop_pattern_length =
626 local->sparm.b4.a_network_type = net_type & 0x01;
627 local->sparm.b4.a_acting_as_ap_status = TYPE_STA;
630 strscpy(local->sparm.b4.a_current_ess_id, essid, ESSID_SIZE);
636 ray_dev_t *local = from_timer(local, t, timer);
637 struct ccs __iomem *pccs = ccs_base(local) + local->dl_param_ccs;
639 struct pcmcia_device *link = local->finder;
650 local->dl_param_ccs);
653 (unsigned int)readb(local->sram +
665 local->card_status = CARD_DL_PARAM_ERROR;
668 if (local->sparm.b4.a_network_type == ADHOC)
669 start_net(&local->timer);
671 join_net(&local->timer);
678 ray_dev_t *local = from_timer(local, t, timer);
681 struct pcmcia_device *link = local->finder;
687 if ((ccsindex = get_free_ccs(local)) < 0)
689 pccs = ccs_base(local) + ccsindex;
693 if (interrupt_ecf(local, ccsindex)) {
698 local->card_status = CARD_DOING_ACQ;
705 ray_dev_t *local = from_timer(local, t, timer);
709 struct pcmcia_device *link = local->finder;
716 if ((ccsindex = get_free_ccs(local)) < 0)
718 pccs = ccs_base(local) + ccsindex;
723 if (interrupt_ecf(local, ccsindex)) {
728 local->card_status = CARD_DOING_ACQ;
735 ray_dev_t *local = netdev_priv(dev);
739 del_timer_sync(&local->timer);
741 if (local->sram)
742 iounmap(local->sram);
743 if (local->rmem)
744 iounmap(local->rmem);
745 if (local->amem)
746 iounmap(local->amem);
780 ray_dev_t *local = netdev_priv(dev);
781 struct pcmcia_device *link = local->finder;
801 local->card_status);
805 eth_hw_addr_set(dev, local->sparm.b4.a_mac_addr);
815 ray_dev_t *local = netdev_priv(dev);
816 struct pcmcia_device *link = local->finder;
831 ray_dev_t *local = netdev_priv(dev);
832 struct pcmcia_device *link = local->finder;
842 if (local->authentication_state == NEED_TO_AUTH) {
844 if (!build_auth_frame(local, local->auth_id, OPEN_AUTH_REQUEST)) {
845 local->authentication_state = AUTHENTICATED;
875 ray_dev_t *local = netdev_priv(dev);
888 switch (ccsindex = get_free_tx_ccs(local)) {
904 local->stats.tx_bytes += len;
905 local->stats.tx_packets++;
908 ptx = local->sram + addr;
910 ray_build_header(local, ptx, msg_type, data);
912 offset = translate_frame(local, ptx, data, len);
920 pccs = ccs_base(local) + ccsindex;
924 writeb(local->tib_length, &pccs->var.tx_request.tx_data_ptr[1]);
929 writeb(local->net_default_tx_rate, &pccs->var.tx_request.tx_rate);
932 local->net_default_tx_rate);
935 if (interrupt_ecf(local, ccsindex)) {
948 static int translate_frame(ray_dev_t *local, struct tx_msg __iomem *ptx,
982 static void ray_build_header(ray_dev_t *local, struct tx_msg __iomem *ptx,
993 if (local->net_type == ADHOC) {
999 memcpy_toio(ptx->mac.addr_3, local->bss_id, ADDRLEN);
1002 if (local->sparm.b4.a_acting_as_ap_status) {
1006 memcpy_toio(ptx->mac.addr_2, local->bss_id, 6);
1012 memcpy_toio(ptx->mac.addr_1, local->bss_id, ADDRLEN);
1041 ray_dev_t *local = netdev_priv(dev);
1045 if (local->card_status != CARD_AWAITING_PARAM)
1052 local->sparm.b5.a_hop_pattern = wrqu->freq.m;
1064 ray_dev_t *local = netdev_priv(dev);
1066 wrqu->freq.m = local->sparm.b5.a_hop_pattern;
1078 ray_dev_t *local = netdev_priv(dev);
1081 if (local->card_status != CARD_AWAITING_PARAM)
1094 memset(local->sparm.b5.a_current_ess_id, 0, IW_ESSID_MAX_SIZE);
1095 memcpy(local->sparm.b5.a_current_ess_id, extra, wrqu->essid.length);
1107 ray_dev_t *local = netdev_priv(dev);
1111 memcpy(extra, local->sparm.b5.a_current_ess_id, IW_ESSID_MAX_SIZE);
1112 memcpy(tmp, local->sparm.b5.a_current_ess_id, IW_ESSID_MAX_SIZE);
1129 ray_dev_t *local = netdev_priv(dev);
1131 memcpy(wrqu->ap_addr.sa_data, local->bss_id, ETH_ALEN);
1144 ray_dev_t *local = netdev_priv(dev);
1147 if (local->card_status != CARD_AWAITING_PARAM)
1155 if ((local->fw_ver == 0x55) && /* Please check */
1157 local->net_default_tx_rate = 3;
1159 local->net_default_tx_rate = wrqu->bitrate.value / 500000;
1171 ray_dev_t *local = netdev_priv(dev);
1173 if (local->net_default_tx_rate == 3)
1176 wrqu->bitrate.value = local->net_default_tx_rate * 500000;
1189 ray_dev_t *local = netdev_priv(dev);
1193 if (local->card_status != CARD_AWAITING_PARAM)
1203 local->sparm.b5.a_rts_threshold[0] = (rthr >> 8) & 0xFF;
1204 local->sparm.b5.a_rts_threshold[1] = rthr & 0xFF;
1216 ray_dev_t *local = netdev_priv(dev);
1218 wrqu->rts.value = (local->sparm.b5.a_rts_threshold[0] << 8)
1219 + local->sparm.b5.a_rts_threshold[1];
1233 ray_dev_t *local = netdev_priv(dev);
1237 if (local->card_status != CARD_AWAITING_PARAM)
1247 local->sparm.b5.a_frag_threshold[0] = (fthr >> 8) & 0xFF;
1248 local->sparm.b5.a_frag_threshold[1] = fthr & 0xFF;
1260 ray_dev_t *local = netdev_priv(dev);
1262 wrqu->frag.value = (local->sparm.b5.a_frag_threshold[0] << 8)
1263 + local->sparm.b5.a_frag_threshold[1];
1277 ray_dev_t *local = netdev_priv(dev);
1282 if (local->card_status != CARD_AWAITING_PARAM)
1290 local->sparm.b5.a_network_type = card_mode;
1306 ray_dev_t *local = netdev_priv(dev);
1308 if (local->sparm.b5.a_network_type)
1399 ray_dev_t *local = netdev_priv(dev);
1400 struct pcmcia_device *link = local->finder;
1401 struct status __iomem *p = local->sram + STATUS_BASE;
1403 local->wstats.status = local->card_status;
1405 if ((local->spy_data.spy_number > 0)
1406 && (local->sparm.b5.a_network_type == 0)) {
1408 local->wstats.qual.qual = local->spy_data.spy_stat[0].qual;
1409 local->wstats.qual.level = local->spy_data.spy_stat[0].level;
1410 local->wstats.qual.noise = local->spy_data.spy_stat[0].noise;
1411 local->wstats.qual.updated =
1412 local->spy_data.spy_stat[0].updated;
1417 local->wstats.qual.noise = readb(&p->rxnoise);
1418 local->wstats.qual.updated |= 4;
1421 return &local->wstats;
1487 ray_dev_t *local = netdev_priv(dev);
1489 link = local->finder;
1494 local->num_multi = 0;
1498 if (local->card_status == CARD_AWAITING_PARAM) {
1524 ray_dev_t *local = netdev_priv(dev);
1526 link = local->finder;
1534 * and set local->card_status to CARD_AWAITING_PARAM, so that while the
1550 static int interrupt_ecf(ray_dev_t *local, int ccs)
1553 struct pcmcia_device *link = local->finder;
1559 dev_dbg(&link->dev, "interrupt_ecf(local=%p, ccs = 0x%x\n", local, ccs);
1562 (readb(local->amem + CIS_OFFSET + ECF_INTR_OFFSET) &
1570 writeb(ccs, local->sram + SCB_BASE);
1571 writeb(ECF_INTR_SET, local->amem + CIS_OFFSET + ECF_INTR_OFFSET);
1578 static int get_free_tx_ccs(ray_dev_t *local)
1581 struct ccs __iomem *pccs = ccs_base(local);
1582 struct pcmcia_device *link = local->finder;
1589 if (test_and_set_bit(0, &local->tx_ccs_lock)) {
1598 local->tx_ccs_lock = 0;
1602 local->tx_ccs_lock = 0;
1610 static int get_free_ccs(ray_dev_t *local)
1613 struct ccs __iomem *pccs = ccs_base(local);
1614 struct pcmcia_device *link = local->finder;
1620 if (test_and_set_bit(0, &local->ccs_lock)) {
1629 local->ccs_lock = 0;
1633 local->ccs_lock = 0;
1641 ray_dev_t *local = from_timer(local, t, timer);
1642 del_timer(&local->timer);
1645 join_net(&local->timer);
1684 ray_dev_t *local = netdev_priv(dev);
1685 struct pcmcia_device *link = local->finder;
1686 struct status __iomem *p = local->sram + STATUS_BASE;
1689 return &local->stats;
1692 local->stats.rx_over_errors += swab16(readw(&p->mrx_overflow));
1697 local->stats.rx_crc_errors +=
1703 local->stats.rx_frame_errors += swab16(readw(&p->rx_hec_error));
1707 return &local->stats;
1714 ray_dev_t *local = netdev_priv(dev);
1715 struct pcmcia_device *link = local->finder;
1725 if ((ccsindex = get_free_ccs(local)) < 0) {
1729 pccs = ccs_base(local) + ccsindex;
1735 writeb(value[i], local->sram + HOST_TO_ECF_BASE);
1738 if (interrupt_ecf(local, ccsindex)) {
1749 ray_dev_t *local = netdev_priv(dev);
1750 struct pcmcia_device *link = local->finder;
1751 void __iomem *p = local->sram + HOST_TO_ECF_BASE;
1758 if ((ccsindex = get_free_ccs(local)) < 0) {
1762 pccs = ccs_base(local) + ccsindex;
1767 local->num_multi = 0xff;
1785 local->num_multi = i;
1787 if (interrupt_ecf(local, ccsindex)) {
1797 ray_dev_t *local = netdev_priv(dev);
1803 if (local->sparm.b5.a_promiscuous_mode == 0) {
1805 local->sparm.b5.a_promiscuous_mode = 1;
1811 if (local->sparm.b5.a_promiscuous_mode == 1) {
1813 local->sparm.b5.a_promiscuous_mode = 0;
1823 if (local->num_multi != netdev_mc_count(dev))
1835 ray_dev_t *local;
1850 local = netdev_priv(dev);
1851 link = local->finder;
1857 rcsindex = readb(&((struct scb __iomem *)(local->sram))->rcs_index);
1861 clear_interrupt(local);
1865 pccs = ccs_base(local) + rcsindex;
1870 del_timer(&local->timer);
1903 memcpy(memtmp, local->sparm.b4.a_current_ess_id,
1919 memcpy_fromio(&local->bss_id,
1923 if (local->fw_ver == 0x55)
1924 local->net_default_tx_rate = 3;
1926 local->net_default_tx_rate =
1929 local->encryption =
1931 if (!sniffer && (local->net_type == INFRA)
1932 && !(local->sparm.b4.a_acting_as_ap_status)) {
1933 authenticate(local);
1935 local->card_status = CARD_ACQ_COMPLETE;
1937 local->card_status = CARD_ACQ_FAILED;
1939 del_timer(&local->timer);
1940 local->timer.expires = jiffies + HZ * 5;
1945 local->timer.function = start_net;
1950 local->timer.function = join_net;
1952 add_timer(&local->timer);
1957 local->card_status = CARD_ASSOC_COMPLETE;
1961 local->card_status = CARD_ASSOC_FAILED;
1962 join_net(&local->timer);
1999 prcs = rcs_base(local) + rcsindex;
2003 ray_rx(dev, local, prcs);
2007 local->card_status = CARD_ACQ_COMPLETE;
2009 if (local->sparm.b4.a_network_type == ADHOC) {
2013 memcpy_fromio(&local->bss_id,
2017 local->bss_id);
2019 authenticate(local);
2025 local->card_status = CARD_DOING_ACQ;
2039 clear_interrupt(local);
2044 static void ray_rx(struct net_device *dev, ray_dev_t *local,
2059 local->last_rsl = readb(&prcs->var.rx_packet.rx_sig_lev);
2060 pmsg = local->rmem + pkt_addr;
2071 rx_authenticate(local, prcs, pkt_addr, rx_len);
2078 rx_deauthenticate(local, prcs, pkt_addr, rx_len);
2088 copy_from_rx_buff(local, (UCHAR *) &local->last_bcn, pkt_addr,
2092 local->beacon_rxed = 1;
2110 ray_dev_t *local = netdev_priv(dev);
2115 int siglev = local->last_rsl;
2160 prcslink = rcs_base(local)
2167 local->stats.rx_dropped++;
2168 release_frag_chain(local, prcs);
2178 local->stats.rx_dropped++;
2180 release_frag_chain(local, prcs);
2193 copy_from_rx_buff(local, rx_ptr, pkt_addr & RX_BUFF_END, rx_len);
2208 untranslate(local, skb, total_len);
2220 prcslink = rcs_base(local)
2236 copy_from_rx_buff(local, rx_ptr, pkt_addr, rx_len);
2241 release_frag_chain(local, prcs);
2246 local->stats.rx_packets++;
2247 local->stats.rx_bytes += total_len;
2254 if (!memcmp(linksrcaddr, local->bss_id, ETH_ALEN)) {
2256 /*local->wstats.qual.qual = none ? */
2257 local->wstats.qual.level = siglev;
2258 /*local->wstats.qual.noise = none ? */
2259 local->wstats.qual.updated = 0x2;
2275 static void untranslate(ray_dev_t *local, struct sk_buff *skb, int len)
2367 static int copy_from_rx_buff(ray_dev_t *local, UCHAR *dest, int pkt_addr,
2372 memcpy_fromio(dest, local->rmem + pkt_addr, length);
2375 memcpy_fromio(dest, local->rmem + pkt_addr,
2377 memcpy_fromio(dest + length - wrap_bytes, local->rmem,
2384 static void release_frag_chain(ray_dev_t *local, struct rcs __iomem *prcs)
2397 prcslink = rcs_base(local) + rcsindex;
2404 static void authenticate(ray_dev_t *local)
2406 struct pcmcia_device *link = local->finder;
2413 del_timer(&local->timer);
2414 if (build_auth_frame(local, local->bss_id, OPEN_AUTH_REQUEST)) {
2415 local->timer.function = join_net;
2417 local->timer.function = authenticate_timeout;
2419 local->timer.expires = jiffies + HZ * 2;
2420 add_timer(&local->timer);
2421 local->authentication_state = AWAITING_RESPONSE;
2425 static void rx_authenticate(ray_dev_t *local, struct rcs __iomem *prcs,
2431 del_timer(&local->timer);
2433 copy_from_rx_buff(local, buff, pkt_addr, rx_len & 0xff);
2435 if (local->sparm.b4.a_network_type == ADHOC) {
2440 (local, msg->mac.addr_2, OPEN_AUTH_RESPONSE)) {
2441 local->authentication_state = NEED_TO_AUTH;
2442 memcpy(local->auth_id, msg->mac.addr_2,
2448 if (local->authentication_state == AWAITING_RESPONSE) {
2453 local->card_status = CARD_AUTH_COMPLETE;
2454 associate(local);
2455 local->authentication_state =
2459 local->card_status = CARD_AUTH_REFUSED;
2460 join_net(&local->timer);
2461 local->authentication_state =
2471 static void associate(ray_dev_t *local)
2474 struct pcmcia_device *link = local->finder;
2482 if ((ccsindex = get_free_ccs(local)) < 0) {
2488 pccs = ccs_base(local) + ccsindex;
2492 if (interrupt_ecf(local, ccsindex)) {
2496 del_timer(&local->timer);
2497 local->timer.expires = jiffies + HZ * 2;
2498 local->timer.function = join_net;
2499 add_timer(&local->timer);
2500 local->card_status = CARD_ASSOC_FAILED;
2509 static void rx_deauthenticate(ray_dev_t *local, struct rcs __iomem *prcs,
2516 local->authentication_state = UNAUTHENTICATED;
2518 /* copy_from_rx_buff(local, buff, pkt_addr, rx_len & 0xff);
2523 static void clear_interrupt(ray_dev_t *local)
2525 writeb(0, local->amem + CIS_OFFSET + HCS_INTR_OFFSET);
2562 ray_dev_t *local;
2573 local = netdev_priv(dev);
2574 if (!local)
2581 if (local->fw_ver == 0x55)
2585 local->fw_ver, local->fw_bld, local->fw_var);
2588 c[i] = local->sparm.b5.a_current_ess_id[i];
2591 nettype[local->sparm.b5.a_network_type], c);
2593 p = local->bss_id;
2597 local->sparm.b5.a_curr_country_code);
2599 i = local->card_status;
2608 seq_printf(m, "Last pkt signal lvl = %d\n", local->last_rsl);
2610 if (local->beacon_rxed) {
2613 local->last_bcn.beacon_intvl[0]
2614 + 256 * local->last_bcn.beacon_intvl[1]);
2616 p = local->last_bcn.elements;
2661 static int build_auth_frame(ray_dev_t *local, UCHAR *dest, int auth_type)
2669 if ((ccsindex = get_free_tx_ccs(local)) < 0) {
2674 pccs = ccs_base(local) + ccsindex;
2687 ptx = local->sram + addr;
2693 memcpy_toio(ptx->mac.addr_2, local->sparm.b4.a_mac_addr, ADDRLEN);
2694 memcpy_toio(ptx->mac.addr_3, local->bss_id, ADDRLEN);
2701 if (interrupt_ecf(local, ccsindex)) {