Lines Matching +full:firmware +full:- +full:initialised
1 // SPDX-License-Identifier: GPL-2.0-only
11 * Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 08/08/2000
12 * - reorganize kmallocs in ray_attach, checking all for failure
15 * Daniele Bellucci <bellucda@tiscali.it> - 07/10/2003
16 * - Audit copy_to_user in ioctl(SIOCGIWESSID)
194 0xff, 0xff, /* roam-low snr, low snr count */
197 /* b4 - b5 differences start here */
229 0xff, 0xff, /* roam-low snr, low snr count */
232 /* b4 - b5 differences start here */
255 "Raylink/WebGear wireless LAN - Corey <Thomas corey@world.std.com>";
274 dev_dbg(&p_dev->dev, "ray_attach()\n"); in ray_probe()
276 /* Allocate space for private device-specific data */ in ray_probe()
282 local->finder = p_dev; in ray_probe()
285 p_dev->resource[0]->end = 0; in ray_probe()
286 p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_8; in ray_probe()
289 p_dev->config_flags |= CONF_ENABLE_IRQ; in ray_probe()
290 p_dev->config_index = 1; in ray_probe()
292 p_dev->priv = dev; in ray_probe()
294 local->finder = p_dev; in ray_probe()
295 local->card_status = CARD_INSERTED; in ray_probe()
296 local->authentication_state = UNAUTHENTICATED; in ray_probe()
297 local->num_multi = 0; in ray_probe()
298 dev_dbg(&p_dev->dev, "ray_attach p_dev = %p, dev = %p, local = %p, intr = %p\n", in ray_probe()
302 dev->netdev_ops = &ray_netdev_ops; in ray_probe()
303 dev->wireless_handlers = &ray_handler_def; in ray_probe()
305 local->wireless_data.spy_data = &local->spy_data; in ray_probe()
306 dev->wireless_data = &local->wireless_data; in ray_probe()
310 dev_dbg(&p_dev->dev, "ray_cs ray_attach calling ether_setup.)\n"); in ray_probe()
313 timer_setup(&local->timer, NULL, 0); in ray_probe()
319 return -ENOMEM; in ray_probe()
327 dev_dbg(&link->dev, "ray_detach\n"); in ray_detach()
330 dev = link->priv; in ray_detach()
335 del_timer_sync(&local->timer); in ray_detach()
337 if (link->priv) { in ray_detach()
341 dev_dbg(&link->dev, "ray_cs ray_detach ending\n"); in ray_detach()
349 struct net_device *dev = (struct net_device *)link->priv; in ray_config()
352 dev_dbg(&link->dev, "ray_config\n"); in ray_config()
354 /* Determine card type and firmware version */ in ray_config()
356 link->prod_id[0] ? link->prod_id[0] : " ", in ray_config()
357 link->prod_id[1] ? link->prod_id[1] : " ", in ray_config()
358 link->prod_id[2] ? link->prod_id[2] : " ", in ray_config()
359 link->prod_id[3] ? link->prod_id[3] : " "); in ray_config()
367 dev->irq = link->irq; in ray_config()
374 link->resource[2]->flags |= WIN_DATA_WIDTH_8 | WIN_MEMORY_TYPE_CM | WIN_ENABLE | WIN_USE_WAIT; in ray_config()
375 link->resource[2]->start = 0; in ray_config()
376 link->resource[2]->end = 0x8000; in ray_config()
377 ret = pcmcia_request_window(link, link->resource[2], ray_mem_speed); in ray_config()
380 ret = pcmcia_map_mem_page(link, link->resource[2], 0); in ray_config()
383 local->sram = ioremap(link->resource[2]->start, in ray_config()
384 resource_size(link->resource[2])); in ray_config()
385 if (!local->sram) in ray_config()
389 link->resource[3]->flags |= in ray_config()
391 link->resource[3]->start = 0; in ray_config()
392 link->resource[3]->end = 0x4000; in ray_config()
393 ret = pcmcia_request_window(link, link->resource[3], ray_mem_speed); in ray_config()
396 ret = pcmcia_map_mem_page(link, link->resource[3], 0x8000); in ray_config()
399 local->rmem = ioremap(link->resource[3]->start, in ray_config()
400 resource_size(link->resource[3])); in ray_config()
401 if (!local->rmem) in ray_config()
405 link->resource[4]->flags |= in ray_config()
407 link->resource[4]->start = 0; in ray_config()
408 link->resource[4]->end = 0x1000; in ray_config()
409 ret = pcmcia_request_window(link, link->resource[4], ray_mem_speed); in ray_config()
412 ret = pcmcia_map_mem_page(link, link->resource[4], 0); in ray_config()
415 local->amem = ioremap(link->resource[4]->start, in ray_config()
416 resource_size(link->resource[4])); in ray_config()
417 if (!local->amem) in ray_config()
420 dev_dbg(&link->dev, "ray_config sram=%p\n", local->sram); in ray_config()
421 dev_dbg(&link->dev, "ray_config rmem=%p\n", local->rmem); in ray_config()
422 dev_dbg(&link->dev, "ray_config amem=%p\n", local->amem); in ray_config()
425 return -ENODEV; in ray_config()
428 SET_NETDEV_DEV(dev, &link->dev); in ray_config()
437 dev->name, dev->irq, dev->dev_addr); in ray_config()
443 return -ENODEV; in ray_config()
448 return dev->sram + CCS_BASE; in ccs_base()
460 return dev->sram + CCS_BASE; in rcs_base()
469 struct pcmcia_device *link = local->finder; in ray_init()
470 dev_dbg(&link->dev, "ray_init(0x%p)\n", dev); in ray_init()
472 dev_dbg(&link->dev, "ray_init - device not present\n"); in ray_init()
473 return -1; in ray_init()
476 local->net_type = net_type; in ray_init()
477 local->sta_type = TYPE_STA; in ray_init()
480 memcpy_fromio(&local->startup_res, local->sram + ECF_TO_HOST_BASE, in ray_init()
484 if (local->startup_res.startup_word != 0x80) { in ray_init()
486 local->startup_res.startup_word); in ray_init()
487 local->card_status = CARD_INIT_ERROR; in ray_init()
488 return -1; in ray_init()
491 local->fw_ver = local->startup_res.firmware_version[0]; in ray_init()
492 local->fw_bld = local->startup_res.firmware_version[1]; in ray_init()
493 local->fw_var = local->startup_res.firmware_version[2]; in ray_init()
494 dev_dbg(&link->dev, "ray_init firmware version %d.%d\n", local->fw_ver, in ray_init()
495 local->fw_bld); in ray_init()
497 local->tib_length = 0x20; in ray_init()
498 if ((local->fw_ver == 5) && (local->fw_bld >= 30)) in ray_init()
499 local->tib_length = local->startup_res.tib_length; in ray_init()
500 dev_dbg(&link->dev, "ray_init tib_length = 0x%02x\n", local->tib_length); in ray_init()
504 writeb(CCS_BUFFER_FREE, &(pccs++)->buffer_status); in ray_init()
509 if (!parse_addr(phy_addr, local->sparm.b4.a_mac_addr)) { in ray_init()
510 memcpy(&local->sparm.b4.a_mac_addr, in ray_init()
511 &local->startup_res.station_addr, ADDRLEN); in ray_init()
515 local->card_status = CARD_AWAITING_PARAM; in ray_init()
516 dev_dbg(&link->dev, "ray_init ending\n"); in ray_init()
527 struct pcmcia_device *link = local->finder; in dl_startup_params()
529 dev_dbg(&link->dev, "dl_startup_params entered\n"); in dl_startup_params()
531 dev_dbg(&link->dev, "ray_cs dl_startup_params - device not present\n"); in dl_startup_params()
532 return -1; in dl_startup_params()
536 if (local->fw_ver == 0x55) in dl_startup_params()
537 memcpy_toio(local->sram + HOST_TO_ECF_BASE, &local->sparm.b4, in dl_startup_params()
540 memcpy_toio(local->sram + HOST_TO_ECF_BASE, &local->sparm.b5, in dl_startup_params()
545 return -1; in dl_startup_params()
546 local->dl_param_ccs = ccsindex; in dl_startup_params()
548 writeb(CCS_DOWNLOAD_STARTUP_PARAMS, &pccs->cmd); in dl_startup_params()
549 dev_dbg(&link->dev, "dl_startup_params start ccsindex = %d\n", in dl_startup_params()
550 local->dl_param_ccs); in dl_startup_params()
551 /* Interrupt the firmware to process the command */ in dl_startup_params()
553 printk(KERN_INFO "ray dl_startup_params failed - " in dl_startup_params()
555 local->card_status = CARD_DL_PARAM_ERROR; in dl_startup_params()
556 writeb(CCS_BUFFER_FREE, &(pccs++)->buffer_status); in dl_startup_params()
557 return -2; in dl_startup_params()
559 local->card_status = CARD_DL_PARAM; in dl_startup_params()
561 local->timer.expires = jiffies + HZ / 2; in dl_startup_params()
562 local->timer.function = verify_dl_startup; in dl_startup_params()
563 add_timer(&local->timer); in dl_startup_params()
564 dev_dbg(&link->dev, in dl_startup_params()
579 * New 802.11D6.1 format. Card firmware is still using old format in init_startup_params()
590 if (local->fw_ver == 0x55) { in init_startup_params()
591 memcpy(&local->sparm.b4, b4_default_startup_parms, in init_startup_params()
596 local->sparm.b4.a_hop_time[0] = (i >> 16) & 0xff; in init_startup_params()
597 local->sparm.b4.a_hop_time[1] = (i >> 8) & 0xff; in init_startup_params()
598 local->sparm.b4.a_beacon_period[0] = 0; in init_startup_params()
599 local->sparm.b4.a_beacon_period[1] = in init_startup_params()
600 ((beacon_period / hop_dwell) - 1) & 0xff; in init_startup_params()
601 local->sparm.b4.a_curr_country_code = country; in init_startup_params()
602 local->sparm.b4.a_hop_pattern_length = in init_startup_params()
603 hop_pattern_length[(int)country] - 1; in init_startup_params()
605 local->sparm.b4.a_ack_timeout = 0x50; in init_startup_params()
606 local->sparm.b4.a_sifs = 0x3f; in init_startup_params()
609 memcpy((UCHAR *) &local->sparm.b5, b5_default_startup_parms, in init_startup_params()
612 local->sparm.b5.a_hop_time[0] = (hop_dwell >> 8) & 0xff; in init_startup_params()
613 local->sparm.b5.a_hop_time[1] = hop_dwell & 0xff; in init_startup_params()
614 local->sparm.b5.a_beacon_period[0] = in init_startup_params()
616 local->sparm.b5.a_beacon_period[1] = beacon_period & 0xff; in init_startup_params()
618 local->sparm.b5.a_power_mgt_state = 1; in init_startup_params()
619 local->sparm.b5.a_curr_country_code = country; in init_startup_params()
620 local->sparm.b5.a_hop_pattern_length = in init_startup_params()
624 local->sparm.b4.a_network_type = net_type & 0x01; in init_startup_params()
625 local->sparm.b4.a_acting_as_ap_status = TYPE_STA; in init_startup_params()
628 strncpy(local->sparm.b4.a_current_ess_id, essid, ESSID_SIZE); in init_startup_params()
635 struct ccs __iomem *pccs = ccs_base(local) + local->dl_param_ccs; in verify_dl_startup()
637 struct pcmcia_device *link = local->finder; in verify_dl_startup()
640 dev_dbg(&link->dev, "ray_cs verify_dl_startup - device not present\n"); in verify_dl_startup()
648 local->dl_param_ccs); in verify_dl_startup()
651 (unsigned int)readb(local->sram + in verify_dl_startup()
658 status = readb(&pccs->buffer_status); in verify_dl_startup()
663 local->card_status = CARD_DL_PARAM_ERROR; in verify_dl_startup()
666 if (local->sparm.b4.a_network_type == ADHOC) in verify_dl_startup()
667 start_net(&local->timer); in verify_dl_startup()
669 join_net(&local->timer); in verify_dl_startup()
679 struct pcmcia_device *link = local->finder; in start_net()
681 dev_dbg(&link->dev, "ray_cs start_net - device not present\n"); in start_net()
688 writeb(CCS_START_NETWORK, &pccs->cmd); in start_net()
689 writeb(0, &pccs->var.start_network.update_param); in start_net()
690 /* Interrupt the firmware to process the command */ in start_net()
692 dev_dbg(&link->dev, "ray start net failed - card not ready for intr\n"); in start_net()
693 writeb(CCS_BUFFER_FREE, &(pccs++)->buffer_status); in start_net()
696 local->card_status = CARD_DOING_ACQ; in start_net()
707 struct pcmcia_device *link = local->finder; in join_net()
710 dev_dbg(&link->dev, "ray_cs join_net - device not present\n"); in join_net()
717 writeb(CCS_JOIN_NETWORK, &pccs->cmd); in join_net()
718 writeb(0, &pccs->var.join_network.update_param); in join_net()
719 writeb(0, &pccs->var.join_network.net_initiated); in join_net()
720 /* Interrupt the firmware to process the command */ in join_net()
722 dev_dbg(&link->dev, "ray join net failed - card not ready for intr\n"); in join_net()
723 writeb(CCS_BUFFER_FREE, &(pccs++)->buffer_status); in join_net()
726 local->card_status = CARD_DOING_ACQ; in join_net()
732 struct net_device *dev = link->priv; in ray_release()
735 dev_dbg(&link->dev, "ray_release\n"); in ray_release()
737 del_timer(&local->timer); in ray_release()
739 iounmap(local->sram); in ray_release()
740 iounmap(local->rmem); in ray_release()
741 iounmap(local->amem); in ray_release()
744 dev_dbg(&link->dev, "ray_release ending\n"); in ray_release()
749 struct net_device *dev = link->priv; in ray_suspend()
751 if (link->open) in ray_suspend()
759 struct net_device *dev = link->priv; in ray_resume()
761 if (link->open) { in ray_resume()
776 struct pcmcia_device *link = local->finder; in ray_dev_init()
778 dev_dbg(&link->dev, "ray_dev_init(dev=%p)\n", dev); in ray_dev_init()
780 dev_dbg(&link->dev, "ray_dev_init - device not present\n"); in ray_dev_init()
781 return -1; in ray_dev_init()
786 printk(KERN_INFO "ray_dev_init dl_startup_params failed - " in ray_dev_init()
788 return -1; in ray_dev_init()
793 * in ray_open() - Jean II */ in ray_dev_init()
794 dev_dbg(&link->dev, in ray_dev_init()
796 local->card_status); in ray_dev_init()
800 memcpy(dev->dev_addr, &local->sparm.b4.a_mac_addr, ADDRLEN); in ray_dev_init()
801 eth_broadcast_addr(dev->broadcast); in ray_dev_init()
803 dev_dbg(&link->dev, "ray_dev_init ending\n"); in ray_dev_init()
811 struct pcmcia_device *link = local->finder; in ray_dev_config()
813 dev_dbg(&link->dev, "ray_dev_config(dev=%p,ifmap=%p)\n", dev, map); in ray_dev_config()
815 dev_dbg(&link->dev, "ray_dev_config - device not present\n"); in ray_dev_config()
816 return -1; in ray_dev_config()
827 struct pcmcia_device *link = local->finder; in ray_dev_start_xmit()
828 short length = skb->len; in ray_dev_start_xmit()
831 dev_dbg(&link->dev, "ray_dev_start_xmit - device not present\n"); in ray_dev_start_xmit()
836 dev_dbg(&link->dev, "ray_dev_start_xmit(skb=%p, dev=%p)\n", skb, dev); in ray_dev_start_xmit()
837 if (local->authentication_state == NEED_TO_AUTH) { in ray_dev_start_xmit()
838 dev_dbg(&link->dev, "ray_cs Sending authentication request.\n"); in ray_dev_start_xmit()
839 if (!build_auth_frame(local, local->auth_id, OPEN_AUTH_REQUEST)) { in ray_dev_start_xmit()
840 local->authentication_state = AUTHENTICATED; in ray_dev_start_xmit()
851 switch (ray_hw_xmit(skb->data, length, dev, DATA_TYPE)) { in ray_dev_start_xmit()
899 local->stats.tx_bytes += len; in ray_hw_xmit()
900 local->stats.tx_packets++; in ray_hw_xmit()
903 ptx = local->sram + addr; in ray_hw_xmit()
909 /* TBD TIB length will move address of ptx->var */ in ray_hw_xmit()
910 memcpy_toio(&ptx->var, data, len); in ray_hw_xmit()
917 writeb(CCS_TX_REQUEST, &pccs->cmd); in ray_hw_xmit()
918 writeb(addr >> 8, &pccs->var.tx_request.tx_data_ptr[0]); in ray_hw_xmit()
919 writeb(local->tib_length, &pccs->var.tx_request.tx_data_ptr[1]); in ray_hw_xmit()
920 writeb(len >> 8, &pccs->var.tx_request.tx_data_length[0]); in ray_hw_xmit()
921 writeb(len & 0xff, &pccs->var.tx_request.tx_data_length[1]); in ray_hw_xmit()
923 writeb(PSM_CAM, &pccs->var.tx_request.pow_sav_mode); in ray_hw_xmit()
924 writeb(local->net_default_tx_rate, &pccs->var.tx_request.tx_rate); in ray_hw_xmit()
925 writeb(0, &pccs->var.tx_request.antenna); in ray_hw_xmit()
927 local->net_default_tx_rate); in ray_hw_xmit()
929 /* Interrupt the firmware to process the command */ in ray_hw_xmit()
931 pr_debug("ray_hw_xmit failed - ECF not ready for intr\n"); in ray_hw_xmit()
936 writeb(CCS_BUFFER_FREE, &pccs->buffer_status); in ray_hw_xmit()
946 __be16 proto = ((struct ethhdr *)data)->h_proto; in translate_frame()
950 memcpy_toio(&ptx->var, eth2_llc, sizeof(eth2_llc)); in translate_frame()
951 memcpy_toio(((void __iomem *)&ptx->var) + sizeof(eth2_llc), in translate_frame()
956 &((struct snaphdr_t __iomem *)ptx->var)->org[2]); in translate_frame()
959 memcpy_toio((void __iomem *)&ptx->var + in translate_frame()
961 len - ETH_HLEN); in translate_frame()
962 return (int)sizeof(struct snaphdr_t) - ETH_HLEN; in translate_frame()
967 memcpy_toio(&ptx->var, data + ETH_HLEN, len - ETH_HLEN); in translate_frame()
968 return 0 - ETH_HLEN; in translate_frame()
970 memcpy_toio(&ptx->var, data + ETH_HLEN, len - ETH_HLEN); in translate_frame()
971 return 0 - ETH_HLEN; in translate_frame()
980 writeb(PROTOCOL_VER | msg_type, &ptx->mac.frame_ctl_1); in ray_build_header()
988 if (local->net_type == ADHOC) { in ray_build_header()
989 writeb(0, &ptx->mac.frame_ctl_2); in ray_build_header()
990 memcpy_toio(ptx->mac.addr_1, ((struct ethhdr *)data)->h_dest, in ray_build_header()
992 memcpy_toio(ptx->mac.addr_3, local->bss_id, ADDRLEN); in ray_build_header()
995 if (local->sparm.b4.a_acting_as_ap_status) { in ray_build_header()
996 writeb(FC2_FROM_DS, &ptx->mac.frame_ctl_2); in ray_build_header()
997 memcpy_toio(ptx->mac.addr_1, in ray_build_header()
998 ((struct ethhdr *)data)->h_dest, ADDRLEN); in ray_build_header()
999 memcpy_toio(ptx->mac.addr_2, local->bss_id, 6); in ray_build_header()
1000 memcpy_toio(ptx->mac.addr_3, in ray_build_header()
1001 ((struct ethhdr *)data)->h_source, ADDRLEN); in ray_build_header()
1004 writeb(FC2_TO_DS, &ptx->mac.frame_ctl_2); in ray_build_header()
1005 memcpy_toio(ptx->mac.addr_1, local->bss_id, ADDRLEN); in ray_build_header()
1006 memcpy_toio(ptx->mac.addr_2, in ray_build_header()
1007 ((struct ethhdr *)data)->h_source, ADDRLEN); in ray_build_header()
1008 memcpy_toio(ptx->mac.addr_3, in ray_build_header()
1009 ((struct ethhdr *)data)->h_dest, ADDRLEN); in ray_build_header()
1016 /*------------------------------------------------------------------*/
1023 strcpy(wrqu->name, "IEEE 802.11-FH"); in ray_get_name()
1027 /*------------------------------------------------------------------*/
1035 int err = -EINPROGRESS; /* Call commit handler */ in ray_set_freq()
1037 /* Reject if card is already initialised */ in ray_set_freq()
1038 if (local->card_status != CARD_AWAITING_PARAM) in ray_set_freq()
1039 return -EBUSY; in ray_set_freq()
1042 if ((wrqu->freq.m > USA_HOP_MOD) || (wrqu->freq.e > 0)) in ray_set_freq()
1043 err = -EOPNOTSUPP; in ray_set_freq()
1045 local->sparm.b5.a_hop_pattern = wrqu->freq.m; in ray_set_freq()
1050 /*------------------------------------------------------------------*/
1059 wrqu->freq.m = local->sparm.b5.a_hop_pattern; in ray_get_freq()
1060 wrqu->freq.e = 0; in ray_get_freq()
1064 /*------------------------------------------------------------------*/
1073 /* Reject if card is already initialised */ in ray_set_essid()
1074 if (local->card_status != CARD_AWAITING_PARAM) in ray_set_essid()
1075 return -EBUSY; in ray_set_essid()
1078 if (wrqu->essid.flags == 0) in ray_set_essid()
1080 return -EOPNOTSUPP; in ray_set_essid()
1083 if (wrqu->essid.length > IW_ESSID_MAX_SIZE) in ray_set_essid()
1084 return -E2BIG; in ray_set_essid()
1087 memset(local->sparm.b5.a_current_ess_id, 0, IW_ESSID_MAX_SIZE); in ray_set_essid()
1088 memcpy(local->sparm.b5.a_current_ess_id, extra, wrqu->essid.length); in ray_set_essid()
1090 return -EINPROGRESS; /* Call commit handler */ in ray_set_essid()
1093 /*------------------------------------------------------------------*/
1104 memcpy(extra, local->sparm.b5.a_current_ess_id, IW_ESSID_MAX_SIZE); in ray_get_essid()
1105 memcpy(tmp, local->sparm.b5.a_current_ess_id, IW_ESSID_MAX_SIZE); in ray_get_essid()
1109 wrqu->essid.length = strlen(tmp); in ray_get_essid()
1110 wrqu->essid.flags = 1; /* active */ in ray_get_essid()
1115 /*------------------------------------------------------------------*/
1124 memcpy(wrqu->ap_addr.sa_data, local->bss_id, ETH_ALEN); in ray_get_wap()
1125 wrqu->ap_addr.sa_family = ARPHRD_ETHER; in ray_get_wap()
1130 /*------------------------------------------------------------------*/
1132 * Wireless Handler : set Bit-Rate
1139 /* Reject if card is already initialised */ in ray_set_rate()
1140 if (local->card_status != CARD_AWAITING_PARAM) in ray_set_rate()
1141 return -EBUSY; in ray_set_rate()
1144 if ((wrqu->bitrate.value != 1000000) && (wrqu->bitrate.value != 2000000)) in ray_set_rate()
1145 return -EINVAL; in ray_set_rate()
1148 if ((local->fw_ver == 0x55) && /* Please check */ in ray_set_rate()
1149 (wrqu->bitrate.value == 2000000)) in ray_set_rate()
1150 local->net_default_tx_rate = 3; in ray_set_rate()
1152 local->net_default_tx_rate = wrqu->bitrate.value / 500000; in ray_set_rate()
1157 /*------------------------------------------------------------------*/
1159 * Wireless Handler : get Bit-Rate
1166 if (local->net_default_tx_rate == 3) in ray_get_rate()
1167 wrqu->bitrate.value = 2000000; /* Hum... */ in ray_get_rate()
1169 wrqu->bitrate.value = local->net_default_tx_rate * 500000; in ray_get_rate()
1170 wrqu->bitrate.fixed = 0; /* We are in auto mode */ in ray_get_rate()
1175 /*------------------------------------------------------------------*/
1183 int rthr = wrqu->rts.value; in ray_set_rts()
1185 /* Reject if card is already initialised */ in ray_set_rts()
1186 if (local->card_status != CARD_AWAITING_PARAM) in ray_set_rts()
1187 return -EBUSY; in ray_set_rts()
1189 /* if(wrq->u.rts.fixed == 0) we should complain */ in ray_set_rts()
1190 if (wrqu->rts.disabled) in ray_set_rts()
1194 return -EINVAL; in ray_set_rts()
1196 local->sparm.b5.a_rts_threshold[0] = (rthr >> 8) & 0xFF; in ray_set_rts()
1197 local->sparm.b5.a_rts_threshold[1] = rthr & 0xFF; in ray_set_rts()
1199 return -EINPROGRESS; /* Call commit handler */ in ray_set_rts()
1202 /*------------------------------------------------------------------*/
1211 wrqu->rts.value = (local->sparm.b5.a_rts_threshold[0] << 8) in ray_get_rts()
1212 + local->sparm.b5.a_rts_threshold[1]; in ray_get_rts()
1213 wrqu->rts.disabled = (wrqu->rts.value == 32767); in ray_get_rts()
1214 wrqu->rts.fixed = 1; in ray_get_rts()
1219 /*------------------------------------------------------------------*/
1227 int fthr = wrqu->frag.value; in ray_set_frag()
1229 /* Reject if card is already initialised */ in ray_set_frag()
1230 if (local->card_status != CARD_AWAITING_PARAM) in ray_set_frag()
1231 return -EBUSY; in ray_set_frag()
1233 /* if(wrq->u.frag.fixed == 0) should complain */ in ray_set_frag()
1234 if (wrqu->frag.disabled) in ray_set_frag()
1238 return -EINVAL; in ray_set_frag()
1240 local->sparm.b5.a_frag_threshold[0] = (fthr >> 8) & 0xFF; in ray_set_frag()
1241 local->sparm.b5.a_frag_threshold[1] = fthr & 0xFF; in ray_set_frag()
1243 return -EINPROGRESS; /* Call commit handler */ in ray_set_frag()
1246 /*------------------------------------------------------------------*/
1255 wrqu->frag.value = (local->sparm.b5.a_frag_threshold[0] << 8) in ray_get_frag()
1256 + local->sparm.b5.a_frag_threshold[1]; in ray_get_frag()
1257 wrqu->frag.disabled = (wrqu->frag.value == 32767); in ray_get_frag()
1258 wrqu->frag.fixed = 1; in ray_get_frag()
1263 /*------------------------------------------------------------------*/
1271 int err = -EINPROGRESS; /* Call commit handler */ in ray_set_mode()
1274 /* Reject if card is already initialised */ in ray_set_mode()
1275 if (local->card_status != CARD_AWAITING_PARAM) in ray_set_mode()
1276 return -EBUSY; in ray_set_mode()
1278 switch (wrqu->mode) { in ray_set_mode()
1283 local->sparm.b5.a_network_type = card_mode; in ray_set_mode()
1286 err = -EINVAL; in ray_set_mode()
1292 /*------------------------------------------------------------------*/
1301 if (local->sparm.b5.a_network_type) in ray_get_mode()
1302 wrqu->mode = IW_MODE_INFRA; in ray_get_mode()
1304 wrqu->mode = IW_MODE_ADHOC; in ray_get_mode()
1309 /*------------------------------------------------------------------*/
1321 wrqu->data.length = sizeof(struct iw_range); in ray_get_range()
1324 range->we_version_compiled = WIRELESS_EXT; in ray_get_range()
1325 range->we_version_source = 9; in ray_get_range()
1328 range->throughput = 1.1 * 1000 * 1000; /* Put the right number here */ in ray_get_range()
1329 range->num_channels = hop_pattern_length[(int)country]; in ray_get_range()
1330 range->num_frequency = 0; in ray_get_range()
1331 range->max_qual.qual = 0; in ray_get_range()
1332 range->max_qual.level = 255; /* What's the correct value ? */ in ray_get_range()
1333 range->max_qual.noise = 255; /* Idem */ in ray_get_range()
1334 range->num_bitrates = 2; in ray_get_range()
1335 range->bitrate[0] = 1000000; /* 1 Mb/s */ in ray_get_range()
1336 range->bitrate[1] = 2000000; /* 2 Mb/s */ in ray_get_range()
1340 /*------------------------------------------------------------------*/
1352 /*------------------------------------------------------------------*/
1364 /*------------------------------------------------------------------*/
1376 /*------------------------------------------------------------------*/
1386 /*------------------------------------------------------------------*/
1393 struct pcmcia_device *link = local->finder; in ray_get_wireless_stats()
1394 struct status __iomem *p = local->sram + STATUS_BASE; in ray_get_wireless_stats()
1396 local->wstats.status = local->card_status; in ray_get_wireless_stats()
1398 if ((local->spy_data.spy_number > 0) in ray_get_wireless_stats()
1399 && (local->sparm.b5.a_network_type == 0)) { in ray_get_wireless_stats()
1401 local->wstats.qual.qual = local->spy_data.spy_stat[0].qual; in ray_get_wireless_stats()
1402 local->wstats.qual.level = local->spy_data.spy_stat[0].level; in ray_get_wireless_stats()
1403 local->wstats.qual.noise = local->spy_data.spy_stat[0].noise; in ray_get_wireless_stats()
1404 local->wstats.qual.updated = in ray_get_wireless_stats()
1405 local->spy_data.spy_stat[0].updated; in ray_get_wireless_stats()
1410 local->wstats.qual.noise = readb(&p->rxnoise); in ray_get_wireless_stats()
1411 local->wstats.qual.updated |= 4; in ray_get_wireless_stats()
1414 return &local->wstats; in ray_get_wireless_stats()
1417 /*------------------------------------------------------------------*/
1482 link = local->finder; in ray_open()
1484 dev_dbg(&link->dev, "ray_open('%s')\n", dev->name); in ray_open()
1486 if (link->open == 0) in ray_open()
1487 local->num_multi = 0; in ray_open()
1488 link->open++; in ray_open()
1490 /* If the card is not started, time to start it ! - Jean II */ in ray_open()
1491 if (local->card_status == CARD_AWAITING_PARAM) { in ray_open()
1494 dev_dbg(&link->dev, "ray_open: doing init now !\n"); in ray_open()
1499 "ray_dev_init dl_startup_params failed - " in ray_open()
1501 return -1; in ray_open()
1510 dev_dbg(&link->dev, "ray_open ending\n"); in ray_open()
1519 link = local->finder; in ray_dev_close()
1521 dev_dbg(&link->dev, "ray_dev_close('%s')\n", dev->name); in ray_dev_close()
1523 link->open--; in ray_dev_close()
1527 * and set local->card_status to CARD_AWAITING_PARAM, so that while the in ray_dev_close()
1529 * Probably also need a COR reset to get sane state - Jean II */ in ray_dev_close()
1541 /* Cause a firmware interrupt if it is ready for one */
1546 struct pcmcia_device *link = local->finder; in interrupt_ecf()
1549 dev_dbg(&link->dev, "ray_cs interrupt_ecf - device not present\n"); in interrupt_ecf()
1550 return -1; in interrupt_ecf()
1552 dev_dbg(&link->dev, "interrupt_ecf(local=%p, ccs = 0x%x\n", local, ccs); in interrupt_ecf()
1555 (readb(local->amem + CIS_OFFSET + ECF_INTR_OFFSET) & in interrupt_ecf()
1557 i--; in interrupt_ecf()
1559 dev_dbg(&link->dev, "ray_cs interrupt_ecf card not ready for interrupt\n"); in interrupt_ecf()
1560 return -1; in interrupt_ecf()
1563 writeb(ccs, local->sram + SCB_BASE); in interrupt_ecf()
1564 writeb(ECF_INTR_SET, local->amem + CIS_OFFSET + ECF_INTR_OFFSET); in interrupt_ecf()
1570 /* Return - index of current tx ccs */
1575 struct pcmcia_device *link = local->finder; in get_free_tx_ccs()
1578 dev_dbg(&link->dev, "ray_cs get_free_tx_ccs - device not present\n"); in get_free_tx_ccs()
1582 if (test_and_set_bit(0, &local->tx_ccs_lock)) { in get_free_tx_ccs()
1583 dev_dbg(&link->dev, "ray_cs tx_ccs_lock busy\n"); in get_free_tx_ccs()
1588 if (readb(&(pccs + i)->buffer_status) == CCS_BUFFER_FREE) { in get_free_tx_ccs()
1589 writeb(CCS_BUFFER_BUSY, &(pccs + i)->buffer_status); in get_free_tx_ccs()
1590 writeb(CCS_END_LIST, &(pccs + i)->link); in get_free_tx_ccs()
1591 local->tx_ccs_lock = 0; in get_free_tx_ccs()
1595 local->tx_ccs_lock = 0; in get_free_tx_ccs()
1596 dev_dbg(&link->dev, "ray_cs ERROR no free tx CCS for raylink card\n"); in get_free_tx_ccs()
1602 /* Return - index of current ccs */
1607 struct pcmcia_device *link = local->finder; in get_free_ccs()
1610 dev_dbg(&link->dev, "ray_cs get_free_ccs - device not present\n"); in get_free_ccs()
1613 if (test_and_set_bit(0, &local->ccs_lock)) { in get_free_ccs()
1614 dev_dbg(&link->dev, "ray_cs ccs_lock busy\n"); in get_free_ccs()
1619 if (readb(&(pccs + i)->buffer_status) == CCS_BUFFER_FREE) { in get_free_ccs()
1620 writeb(CCS_BUFFER_BUSY, &(pccs + i)->buffer_status); in get_free_ccs()
1621 writeb(CCS_END_LIST, &(pccs + i)->link); in get_free_ccs()
1622 local->ccs_lock = 0; in get_free_ccs()
1626 local->ccs_lock = 0; in get_free_ccs()
1627 dev_dbg(&link->dev, "ray_cs ERROR no free CCS for raylink card\n"); in get_free_ccs()
1635 del_timer(&local->timer); in authenticate_timeout()
1637 " - timeout\n"); in authenticate_timeout()
1638 join_net(&local->timer); in authenticate_timeout()
1655 j = len - 1; in parse_addr()
1661 if ((k = hex_to_bin(in_str[j--])) != -1) in parse_addr()
1668 if ((k = hex_to_bin(in_str[j--])) != -1) in parse_addr()
1672 if (!i--) in parse_addr()
1682 struct pcmcia_device *link = local->finder; in ray_get_stats()
1683 struct status __iomem *p = local->sram + STATUS_BASE; in ray_get_stats()
1685 dev_dbg(&link->dev, "ray_cs net_device_stats - device not present\n"); in ray_get_stats()
1686 return &local->stats; in ray_get_stats()
1688 if (readb(&p->mrx_overflow_for_host)) { in ray_get_stats()
1689 local->stats.rx_over_errors += swab16(readw(&p->mrx_overflow)); in ray_get_stats()
1690 writeb(0, &p->mrx_overflow); in ray_get_stats()
1691 writeb(0, &p->mrx_overflow_for_host); in ray_get_stats()
1693 if (readb(&p->mrx_checksum_error_for_host)) { in ray_get_stats()
1694 local->stats.rx_crc_errors += in ray_get_stats()
1695 swab16(readw(&p->mrx_checksum_error)); in ray_get_stats()
1696 writeb(0, &p->mrx_checksum_error); in ray_get_stats()
1697 writeb(0, &p->mrx_checksum_error_for_host); in ray_get_stats()
1699 if (readb(&p->rx_hec_error_for_host)) { in ray_get_stats()
1700 local->stats.rx_frame_errors += swab16(readw(&p->rx_hec_error)); in ray_get_stats()
1701 writeb(0, &p->rx_hec_error); in ray_get_stats()
1702 writeb(0, &p->rx_hec_error_for_host); in ray_get_stats()
1704 return &local->stats; in ray_get_stats()
1712 struct pcmcia_device *link = local->finder; in ray_update_parm()
1718 dev_dbg(&link->dev, "ray_update_parm - device not present\n"); in ray_update_parm()
1723 dev_dbg(&link->dev, "ray_update_parm - No free ccs\n"); in ray_update_parm()
1727 writeb(CCS_UPDATE_PARAMS, &pccs->cmd); in ray_update_parm()
1728 writeb(objid, &pccs->var.update_param.object_id); in ray_update_parm()
1729 writeb(1, &pccs->var.update_param.number_objects); in ray_update_parm()
1730 writeb(0, &pccs->var.update_param.failure_cause); in ray_update_parm()
1732 writeb(value[i], local->sram + HOST_TO_ECF_BASE); in ray_update_parm()
1734 /* Interrupt the firmware to process the command */ in ray_update_parm()
1736 dev_dbg(&link->dev, "ray_cs associate failed - ECF not ready for intr\n"); in ray_update_parm()
1737 writeb(CCS_BUFFER_FREE, &(pccs++)->buffer_status); in ray_update_parm()
1747 struct pcmcia_device *link = local->finder; in ray_update_multi_list()
1748 void __iomem *p = local->sram + HOST_TO_ECF_BASE; in ray_update_multi_list()
1751 dev_dbg(&link->dev, "ray_update_multi_list - device not present\n"); in ray_update_multi_list()
1754 dev_dbg(&link->dev, "ray_update_multi_list(%p)\n", dev); in ray_update_multi_list()
1756 dev_dbg(&link->dev, "ray_update_multi - No free ccs\n"); in ray_update_multi_list()
1760 writeb(CCS_UPDATE_MULTICAST_LIST, &pccs->cmd); in ray_update_multi_list()
1763 writeb(0xff, &pccs->var); in ray_update_multi_list()
1764 local->num_multi = 0xff; in ray_update_multi_list()
1771 memcpy_toio(p, ha->addr, ETH_ALEN); in ray_update_multi_list()
1772 dev_dbg(&link->dev, "ray_update_multi add addr %pm\n", in ray_update_multi_list()
1773 ha->addr); in ray_update_multi_list()
1779 writeb((UCHAR) i, &pccs->var); in ray_update_multi_list()
1780 dev_dbg(&link->dev, "ray_cs update_multi %d addresses in list\n", i); in ray_update_multi_list()
1781 /* Interrupt the firmware to process the command */ in ray_update_multi_list()
1782 local->num_multi = i; in ray_update_multi_list()
1785 dev_dbg(&link->dev, in ray_update_multi_list()
1786 "ray_cs update_multi failed - ECF not ready for intr\n"); in ray_update_multi_list()
1787 writeb(CCS_BUFFER_FREE, &(pccs++)->buffer_status); in ray_update_multi_list()
1799 if (dev->flags & IFF_PROMISC) { in set_multicast_list()
1800 if (local->sparm.b5.a_promiscuous_mode == 0) { in set_multicast_list()
1802 local->sparm.b5.a_promiscuous_mode = 1; in set_multicast_list()
1808 if (local->sparm.b5.a_promiscuous_mode == 1) { in set_multicast_list()
1810 local->sparm.b5.a_promiscuous_mode = 0; in set_multicast_list()
1817 if (dev->flags & IFF_ALLMULTI) in set_multicast_list()
1820 if (local->num_multi != netdev_mc_count(dev)) in set_multicast_list()
1842 if (dev == NULL) /* Note that we want interrupts with dev->start == 0 */ in ray_interrupt()
1848 link = local->finder; in ray_interrupt()
1854 rcsindex = readb(&((struct scb __iomem *)(local->sram))->rcs_index); in ray_interrupt()
1857 dev_dbg(&link->dev, "ray_cs interrupt bad rcsindex = 0x%x\n", rcsindex); in ray_interrupt()
1863 cmd = readb(&pccs->cmd); in ray_interrupt()
1864 status = readb(&pccs->buffer_status); in ray_interrupt()
1866 case CCS_DOWNLOAD_STARTUP_PARAMS: /* Happens in firmware someday */ in ray_interrupt()
1867 del_timer(&local->timer); in ray_interrupt()
1869 dev_dbg(&link->dev, in ray_interrupt()
1872 dev_dbg(&link->dev, in ray_interrupt()
1877 dev_dbg(&link->dev, "ray_cs interrupt update params done\n"); in ray_interrupt()
1880 readb(&pccs->var.update_param. in ray_interrupt()
1882 dev_dbg(&link->dev, in ray_interrupt()
1883 "ray_cs interrupt update params failed - reason %d\n", in ray_interrupt()
1888 dev_dbg(&link->dev, "ray_cs interrupt report params done\n"); in ray_interrupt()
1891 dev_dbg(&link->dev, in ray_interrupt()
1895 dev_dbg(&link->dev, in ray_interrupt()
1900 memcpy(memtmp, local->sparm.b4.a_current_ess_id, in ray_interrupt()
1906 (&pccs->var.start_network.net_initiated) == in ray_interrupt()
1908 dev_dbg(&link->dev, in ray_interrupt()
1912 dev_dbg(&link->dev, in ray_interrupt()
1916 memcpy_fromio(&local->bss_id, in ray_interrupt()
1917 pccs->var.start_network.bssid, in ray_interrupt()
1920 if (local->fw_ver == 0x55) in ray_interrupt()
1921 local->net_default_tx_rate = 3; in ray_interrupt()
1923 local->net_default_tx_rate = in ray_interrupt()
1924 readb(&pccs->var.start_network. in ray_interrupt()
1926 local->encryption = in ray_interrupt()
1927 readb(&pccs->var.start_network.encryption); in ray_interrupt()
1928 if (!sniffer && (local->net_type == INFRA) in ray_interrupt()
1929 && !(local->sparm.b4.a_acting_as_ap_status)) { in ray_interrupt()
1932 local->card_status = CARD_ACQ_COMPLETE; in ray_interrupt()
1934 local->card_status = CARD_ACQ_FAILED; in ray_interrupt()
1936 del_timer(&local->timer); in ray_interrupt()
1937 local->timer.expires = jiffies + HZ * 5; in ray_interrupt()
1939 dev_dbg(&link->dev, in ray_interrupt()
1942 local->timer.function = start_net; in ray_interrupt()
1944 dev_dbg(&link->dev, in ray_interrupt()
1947 local->timer.function = join_net; in ray_interrupt()
1949 add_timer(&local->timer); in ray_interrupt()
1954 local->card_status = CARD_ASSOC_COMPLETE; in ray_interrupt()
1955 dev_dbg(&link->dev, "ray_cs association successful\n"); in ray_interrupt()
1957 dev_dbg(&link->dev, "ray_cs association failed,\n"); in ray_interrupt()
1958 local->card_status = CARD_ASSOC_FAILED; in ray_interrupt()
1959 join_net(&local->timer); in ray_interrupt()
1964 dev_dbg(&link->dev, in ray_interrupt()
1967 dev_dbg(&link->dev, in ray_interrupt()
1975 dev_dbg(&link->dev, "ray_cs interrupt mem test done\n"); in ray_interrupt()
1978 dev_dbg(&link->dev, in ray_interrupt()
1979 "ray_cs interrupt Unexpected CCS returned - Shutdown\n"); in ray_interrupt()
1982 dev_dbg(&link->dev, "ray_cs interrupt dump memory done\n"); in ray_interrupt()
1985 dev_dbg(&link->dev, in ray_interrupt()
1986 "ray_cs interrupt DING - raylink timer expired\n"); in ray_interrupt()
1989 dev_dbg(&link->dev, in ray_interrupt()
1993 writeb(CCS_BUFFER_FREE, &pccs->buffer_status); in ray_interrupt()
1998 switch (readb(&prcs->interrupt_id)) { in ray_interrupt()
2003 dev_dbg(&link->dev, "ray_cs interrupt rejoin net complete\n"); in ray_interrupt()
2004 local->card_status = CARD_ACQ_COMPLETE; in ray_interrupt()
2006 if (local->sparm.b4.a_network_type == ADHOC) { in ray_interrupt()
2010 memcpy_fromio(&local->bss_id, in ray_interrupt()
2011 prcs->var.rejoin_net_complete. in ray_interrupt()
2013 dev_dbg(&link->dev, "ray_cs new BSSID = %pm\n", in ray_interrupt()
2014 local->bss_id); in ray_interrupt()
2020 dev_dbg(&link->dev, "ray_cs interrupt roaming initiated\n"); in ray_interrupt()
2022 local->card_status = CARD_DOING_ACQ; in ray_interrupt()
2025 dev_dbg(&link->dev, "ray_cs interrupt japan call sign rx\n"); in ray_interrupt()
2028 dev_dbg(&link->dev, in ray_interrupt()
2031 (unsigned int)readb(&prcs->interrupt_id)); in ray_interrupt()
2034 writeb(CCS_BUFFER_FREE, &prcs->buffer_status); in ray_interrupt()
2050 pkt_addr = ((readb(&prcs->var.rx_packet.rx_data_ptr[0]) << 8) in ray_rx()
2051 + readb(&prcs->var.rx_packet.rx_data_ptr[1])) & RX_BUFF_END; in ray_rx()
2053 rx_len = (readb(&prcs->var.rx_packet.rx_data_length[0]) << 8) in ray_rx()
2054 + readb(&prcs->var.rx_packet.rx_data_length[1]); in ray_rx()
2056 local->last_rsl = readb(&prcs->var.rx_packet.rx_sig_lev); in ray_rx()
2057 pmsg = local->rmem + pkt_addr; in ray_rx()
2085 copy_from_rx_buff(local, (UCHAR *) &local->last_bcn, pkt_addr, in ray_rx()
2089 local->beacon_rxed = 1; in ray_rx()
2112 int siglev = local->last_rsl; in rx_data()
2121 (dev->mtu + RX_MAC_HEADER_LENGTH + ETH_HLEN + in rx_data()
2132 (dev->mtu + RX_MAC_HEADER_LENGTH + ETH_HLEN + in rx_data()
2143 if (readb(&prcs->var.rx_packet.next_frag_rcs_index) != 0xFF) { in rx_data()
2145 tmp = (readb(&prcs->var.rx_packet.totalpacketlength[0]) << 8) in rx_data()
2146 + readb(&prcs->var.rx_packet.totalpacketlength[1]); in rx_data()
2150 tmp -= in rx_data()
2151 (readb(&prcslink->var.rx_packet.rx_data_length[0]) in rx_data()
2153 + readb(&prcslink->var.rx_packet.rx_data_length[1]); in rx_data()
2154 if (readb(&prcslink->var.rx_packet.next_frag_rcs_index) in rx_data()
2158 + readb(&prcslink->link_field); in rx_data()
2164 local->stats.rx_dropped++; in rx_data()
2175 local->stats.rx_dropped++; in rx_data()
2176 if (readb(&prcs->var.rx_packet.next_frag_rcs_index) != 0xFF) in rx_data()
2213 if (readb(&prcs->var.rx_packet.next_frag_rcs_index) != 0xFF) { in rx_data()
2219 readb(&prcslink->var.rx_packet.next_frag_rcs_index); in rx_data()
2221 ((readb(&prcslink->var.rx_packet.rx_data_length[0]) in rx_data()
2224 readb(&prcslink->var.rx_packet.rx_data_length[1])) in rx_data()
2227 ((readb(&prcslink->var.rx_packet.rx_data_ptr[0]) << in rx_data()
2229 + readb(&prcslink->var.rx_packet.rx_data_ptr[1])) in rx_data()
2235 } while (tmp-- && in rx_data()
2236 readb(&prcslink->var.rx_packet.next_frag_rcs_index) != in rx_data()
2241 skb->protocol = eth_type_trans(skb, dev); in rx_data()
2243 local->stats.rx_packets++; in rx_data()
2244 local->stats.rx_bytes += total_len; in rx_data()
2248 /* For the Access Point or the node having started the ad-hoc net in rx_data()
2249 * note : ad-hoc work only in some specific configurations, but we in rx_data()
2251 if (!memcmp(linksrcaddr, local->bss_id, ETH_ALEN)) { in rx_data()
2253 /*local->wstats.qual.qual = none ? */ in rx_data()
2254 local->wstats.qual.level = siglev; in rx_data()
2255 /*local->wstats.qual.noise = none ? */ in rx_data()
2256 local->wstats.qual.updated = 0x2; in rx_data()
2274 snaphdr_t *psnap = (snaphdr_t *) (skb->data + RX_MAC_HEADER_LENGTH); in untranslate()
2275 struct ieee80211_hdr *pmac = (struct ieee80211_hdr *)skb->data; in untranslate()
2276 __be16 type = *(__be16 *) psnap->ethertype; in untranslate()
2289 print_hex_dump(KERN_DEBUG, "skb->data before untranslate: ", in untranslate()
2291 skb->data, 64, true); in untranslate()
2294 ntohs(type), psnap->dsap, psnap->ssap, psnap->ctrl, in untranslate()
2295 psnap->org[0], psnap->org[1], psnap->org[2]); in untranslate()
2296 printk(KERN_DEBUG "untranslate skb->data = %p\n", skb->data); in untranslate()
2300 if (psnap->dsap != 0xaa || psnap->ssap != 0xaa || psnap->ctrl != 3) { in untranslate()
2303 psnap->dsap, psnap->ssap, psnap->ctrl); in untranslate()
2305 delta = RX_MAC_HEADER_LENGTH - ETH_HLEN; in untranslate()
2306 peth = (struct ethhdr *)(skb->data + delta); in untranslate()
2307 peth->h_proto = htons(len - RX_MAC_HEADER_LENGTH); in untranslate()
2309 if (memcmp(psnap->org, org_bridge, 3) == 0) { in untranslate()
2313 + sizeof(struct snaphdr_t) - ETH_HLEN; in untranslate()
2314 peth = (struct ethhdr *)(skb->data + delta); in untranslate()
2315 peth->h_proto = type; in untranslate()
2316 } else if (memcmp(psnap->org, org_1042, 3) == 0) { in untranslate()
2321 delta = RX_MAC_HEADER_LENGTH - ETH_HLEN; in untranslate()
2322 peth = (struct ethhdr *)(skb->data + delta); in untranslate()
2323 peth->h_proto = in untranslate()
2324 htons(len - RX_MAC_HEADER_LENGTH); in untranslate()
2329 sizeof(struct snaphdr_t) - ETH_HLEN; in untranslate()
2330 peth = (struct ethhdr *)(skb->data + delta); in untranslate()
2331 peth->h_proto = type; in untranslate()
2336 delta = RX_MAC_HEADER_LENGTH - ETH_HLEN; in untranslate()
2337 peth = (struct ethhdr *)(skb->data + delta); in untranslate()
2338 peth->h_proto = type; in untranslate()
2343 pr_debug("untranslate after skb_pull(%d), skb->data = %p\n", delta, in untranslate()
2344 skb->data); in untranslate()
2345 memcpy(peth->h_dest, destaddr, ADDRLEN); in untranslate()
2346 memcpy(peth->h_source, srcaddr, ADDRLEN); in untranslate()
2350 printk(KERN_DEBUG "skb->data after untranslate:"); in untranslate()
2352 printk("%02x ", skb->data[i]); in untranslate()
2367 int wrap_bytes = (pkt_addr + length) - (RX_BUFF_END + 1); in copy_from_rx_buff()
2369 memcpy_fromio(dest, local->rmem + pkt_addr, length); in copy_from_rx_buff()
2372 memcpy_fromio(dest, local->rmem + pkt_addr, in copy_from_rx_buff()
2373 length - wrap_bytes); in copy_from_rx_buff()
2374 memcpy_fromio(dest + length - wrap_bytes, local->rmem, in copy_from_rx_buff()
2385 unsigned rcsindex = readb(&prcs->var.rx_packet.next_frag_rcs_index); in release_frag_chain()
2387 while (tmp--) { in release_frag_chain()
2388 writeb(CCS_BUFFER_FREE, &prcslink->buffer_status); in release_frag_chain()
2395 rcsindex = readb(&prcslink->var.rx_packet.next_frag_rcs_index); in release_frag_chain()
2397 writeb(CCS_BUFFER_FREE, &prcslink->buffer_status); in release_frag_chain()
2403 struct pcmcia_device *link = local->finder; in authenticate()
2404 dev_dbg(&link->dev, "ray_cs Starting authentication.\n"); in authenticate()
2406 dev_dbg(&link->dev, "ray_cs authenticate - device not present\n"); in authenticate()
2410 del_timer(&local->timer); in authenticate()
2411 if (build_auth_frame(local, local->bss_id, OPEN_AUTH_REQUEST)) { in authenticate()
2412 local->timer.function = join_net; in authenticate()
2414 local->timer.function = authenticate_timeout; in authenticate()
2416 local->timer.expires = jiffies + HZ * 2; in authenticate()
2417 add_timer(&local->timer); in authenticate()
2418 local->authentication_state = AWAITING_RESPONSE; in authenticate()
2428 del_timer(&local->timer); in rx_authenticate()
2432 if (local->sparm.b4.a_network_type == ADHOC) { in rx_authenticate()
2434 msg->var[0], msg->var[1], msg->var[2], msg->var[3], in rx_authenticate()
2435 msg->var[4], msg->var[5]); in rx_authenticate()
2436 if (msg->var[2] == 1) { in rx_authenticate()
2439 (local, msg->mac.addr_2, OPEN_AUTH_RESPONSE)) { in rx_authenticate()
2440 local->authentication_state = NEED_TO_AUTH; in rx_authenticate()
2441 memcpy(local->auth_id, msg->mac.addr_2, in rx_authenticate()
2447 if (local->authentication_state == AWAITING_RESPONSE) { in rx_authenticate()
2449 if (msg->var[2] == 2) { in rx_authenticate()
2450 if ((msg->var[3] | msg->var[4]) == 0) { in rx_authenticate()
2452 local->card_status = CARD_AUTH_COMPLETE; in rx_authenticate()
2454 local->authentication_state = in rx_authenticate()
2458 local->card_status = CARD_AUTH_REFUSED; in rx_authenticate()
2459 join_net(&local->timer); in rx_authenticate()
2460 local->authentication_state = in rx_authenticate()
2473 struct pcmcia_device *link = local->finder; in associate()
2474 struct net_device *dev = link->priv; in associate()
2477 dev_dbg(&link->dev, "ray_cs associate - device not present\n"); in associate()
2483 dev_dbg(&link->dev, "ray_cs associate - No free ccs\n"); in associate()
2486 dev_dbg(&link->dev, "ray_cs Starting association with access point\n"); in associate()
2489 writeb(CCS_START_ASSOCIATION, &pccs->cmd); in associate()
2490 /* Interrupt the firmware to process the command */ in associate()
2492 dev_dbg(&link->dev, "ray_cs associate failed - ECF not ready for intr\n"); in associate()
2493 writeb(CCS_BUFFER_FREE, &(pccs++)->buffer_status); in associate()
2495 del_timer(&local->timer); in associate()
2496 local->timer.expires = jiffies + HZ * 2; in associate()
2497 local->timer.function = join_net; in associate()
2498 add_timer(&local->timer); in associate()
2499 local->card_status = CARD_ASSOC_FAILED; in associate()
2515 local->authentication_state = UNAUTHENTICATED; in rx_deauthenticate()
2524 writeb(0, local->amem + CIS_OFFSET + HCS_INTR_OFFSET); in clear_interrupt()
2529 #define MAXDATA (PAGE_SIZE - 80)
2532 "Card inserted - uninitialized", /* 0 */
2569 dev = (struct net_device *)link->priv; in ray_cs_proc_show()
2579 seq_puts(m, "Firmware version = "); in ray_cs_proc_show()
2580 if (local->fw_ver == 0x55) in ray_cs_proc_show()
2581 seq_puts(m, "4 - Use dump_cis for more details\n"); in ray_cs_proc_show()
2584 local->fw_ver, local->fw_bld, local->fw_var); in ray_cs_proc_show()
2587 c[i] = local->sparm.b5.a_current_ess_id[i]; in ray_cs_proc_show()
2590 nettype[local->sparm.b5.a_network_type], c); in ray_cs_proc_show()
2592 p = local->bss_id; in ray_cs_proc_show()
2596 local->sparm.b5.a_curr_country_code); in ray_cs_proc_show()
2598 i = local->card_status; in ray_cs_proc_show()
2607 seq_printf(m, "Last pkt signal lvl = %d\n", local->last_rsl); in ray_cs_proc_show()
2609 if (local->beacon_rxed) { in ray_cs_proc_show()
2612 local->last_bcn.beacon_intvl[0] in ray_cs_proc_show()
2613 + 256 * local->last_bcn.beacon_intvl[1]); in ray_cs_proc_show()
2615 p = local->last_bcn.elements; in ray_cs_proc_show()
2639 pfh->dwell_time[0] + in ray_cs_proc_show()
2640 256 * pfh->dwell_time[1]); in ray_cs_proc_show()
2642 pfh->hop_set); in ray_cs_proc_show()
2644 pfh->hop_pattern); in ray_cs_proc_show()
2646 pfh->hop_index); in ray_cs_proc_show()
2669 pr_debug("ray_cs send authenticate - No free tx ccs\n"); in build_auth_frame()
2670 return -1; in build_auth_frame()
2678 writeb(CCS_TX_REQUEST, &pccs->cmd); in build_auth_frame()
2679 writeb(addr >> 8, pccs->var.tx_request.tx_data_ptr); in build_auth_frame()
2680 writeb(0x20, pccs->var.tx_request.tx_data_ptr + 1); in build_auth_frame()
2681 writeb(TX_AUTHENTICATE_LENGTH_MSB, pccs->var.tx_request.tx_data_length); in build_auth_frame()
2683 pccs->var.tx_request.tx_data_length + 1); in build_auth_frame()
2684 writeb(0, &pccs->var.tx_request.pow_sav_mode); in build_auth_frame()
2686 ptx = local->sram + addr; in build_auth_frame()
2688 writeb(PROTOCOL_VER | AUTHENTIC_TYPE, &ptx->mac.frame_ctl_1); in build_auth_frame()
2689 writeb(0, &ptx->mac.frame_ctl_2); in build_auth_frame()
2691 memcpy_toio(ptx->mac.addr_1, dest, ADDRLEN); in build_auth_frame()
2692 memcpy_toio(ptx->mac.addr_2, local->sparm.b4.a_mac_addr, ADDRLEN); in build_auth_frame()
2693 memcpy_toio(ptx->mac.addr_3, local->bss_id, ADDRLEN); in build_auth_frame()
2696 memset_io(ptx->var, 0, 6); in build_auth_frame()
2697 writeb(auth_type & 0xff, ptx->var + 2); in build_auth_frame()
2699 /* Interrupt the firmware to process the command */ in build_auth_frame()
2702 "ray_cs send authentication request failed - ECF not ready for intr\n"); in build_auth_frame()
2703 writeb(CCS_BUFFER_FREE, &(pccs++)->buffer_status); in build_auth_frame()
2704 return -1; in build_auth_frame()
2721 return -EFAULT; in ray_cs_essid_proc_write()
2742 return -EINVAL; in int_proc_write()
2744 return -EFAULT; in int_proc_write()
2749 unsigned int c = *p - '0'; in int_proc_write()
2751 return -EINVAL; in int_proc_write()
2754 } while (--len); in int_proc_write()