Lines Matching refs:mac

5  static int reset_mode(struct zd_mac *mac)
7 struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
9 - return zd_iowrite32(&mac->chip, CR_RX_FILTER, filter);
20 + return zd_iowrite32a(&mac->chip, ioreqs, ARRAY_SIZE(ioreqs));
27 housekeeping_enable(mac);
43 + struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
51 - cs_set_control(mac, cs, hdr);
55 + cs_set_control(mac, cs, hdr);
63 - r = zd_usb_tx(&mac->chip.usb, skb->data, skb->len);
66 + r = zd_usb_tx_inject(&mac->chip.usb, skb->data, skb->len);
68 + r = zd_usb_tx(&mac->chip.usb, skb->data, skb->len);
80 static void fill_rt_header(void *buffer, struct zd_mac *mac,
109 struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
153 +static void housekeeping_init(struct zd_mac *mac);
154 +static void housekeeping_enable(struct zd_mac *mac);
155 +static void housekeeping_disable(struct zd_mac *mac);
161 +int zd_mac_init(struct zd_mac *mac,
167 + memset(mac, 0, sizeof(*mac));
168 + spin_lock_init(&mac->lock);
169 + mac->netdev = netdev;
170 + INIT_DELAYED_WORK(&mac->set_rts_cts_work, set_rts_cts_work);
171 + INIT_DELAYED_WORK(&mac->set_basic_rates_work, set_basic_rates_work);
173 + skb_queue_head_init(&mac->rx_queue);
174 + tasklet_init(&mac->rx_tasklet, do_rx, (unsigned long)mac);
175 + tasklet_disable(&mac->rx_tasklet);
179 + zd_chip_init(&mac->chip, netdev, intf);
180 + housekeeping_init(mac);
181 + INIT_WORK(&mac->set_multicast_hash_work, set_multicast_hash_handler);
185 +static int reset_channel(struct zd_mac *mac)
191 + spin_lock_irqsave(&mac->lock, flags);
192 + range = zd_channel_range(mac->regdomain);
197 + mac->requested_channel = range->start;
200 + spin_unlock_irqrestore(&mac->lock, flags);
204 +int zd_mac_init_hw(struct zd_mac *mac, u8 device_type)
207 + struct zd_chip *chip = &mac->chip;
223 + spin_lock_irq(&mac->lock);
224 + memcpy(mac->netdev->dev_addr, addr, ETH_ALEN);
225 + spin_unlock_irq(&mac->lock);
231 + dev_dbg_f(zd_mac_dev(mac),
237 + spin_lock_irq(&mac->lock);
238 + mac->regdomain = mac->default_regdomain = default_regdomain;
239 + spin_unlock_irq(&mac->lock);
240 + r = reset_channel(mac);
250 + r = zd_geo_init(zd_mac_to_ieee80211(mac), mac->regdomain);
261 +void zd_mac_clear(struct zd_mac *mac)
264 + skb_queue_purge(&mac->rx_queue);
265 + tasklet_kill(&mac->rx_tasklet);
266 + zd_chip_clear(&mac->chip);
267 + ZD_ASSERT(!spin_is_locked(&mac->lock));
268 + ZD_MEMCLEAR(mac, sizeof(struct zd_mac));
271 +static int reset_mode(struct zd_mac *mac)
273 + struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
275 + return zd_iowrite32(&mac->chip, CR_RX_FILTER, filter);
280 + struct zd_mac *mac = zd_netdev_mac(netdev);
281 + struct zd_chip *chip = &mac->chip;
284 + tasklet_enable(&mac->rx_tasklet);
293 + r = reset_mode(mac);
299 + r = zd_chip_set_channel(chip, mac->requested_channel);
309 + housekeeping_enable(mac);
330 + struct zd_mac *mac = zd_netdev_mac(netdev);
331 + struct zd_chip *chip = &mac->chip;
342 + skb_queue_purge(&mac->rx_queue);
343 + tasklet_disable(&mac->rx_tasklet);
344 + housekeeping_disable(mac);
348 + cancel_delayed_work(&mac->set_rts_cts_work);
349 + cancel_delayed_work(&mac->set_basic_rates_work);
351 + mac->updating_rts_rate = 0;
352 + mac->updating_basic_rates = 0;
366 + struct zd_mac *mac = zd_netdev_mac(netdev);
367 + struct zd_chip *chip = &mac->chip;
372 + dev_dbg_f(zd_mac_dev(mac),
379 + spin_lock_irqsave(&mac->lock, flags);
381 + spin_unlock_irqrestore(&mac->lock, flags);
388 + struct zd_mac *mac = container_of(work, struct zd_mac,
392 + spin_lock_irq(&mac->lock);
393 + hash = mac->multicast_hash;
394 + spin_unlock_irq(&mac->lock);
396 + zd_chip_set_multicast_hash(&mac->chip, &hash);
402 + struct zd_mac *mac = zd_netdev_mac(dev);
411 + dev_dbg_f(zd_mac_dev(mac), "mc addr " MAC_FMT "\n",
417 + spin_lock_irqsave(&mac->lock, flags);
418 + mac->multicast_hash = hash;
419 + spin_unlock_irqrestore(&mac->lock, flags);
420 + queue_work(zd_workqueue, &mac->set_multicast_hash_work);
423 +int zd_mac_set_regdomain(struct zd_mac *mac, u8 regdomain)
429 + spin_lock_irq(&mac->lock);
431 + regdomain = mac->default_regdomain;
434 + spin_unlock_irq(&mac->lock);
437 + mac->regdomain = regdomain;
438 + channel = mac->requested_channel;
439 + spin_unlock_irq(&mac->lock);
441 + r = zd_geo_init(zd_mac_to_ieee80211(mac), regdomain);
445 + r = reset_channel(mac);
453 +u8 zd_mac_get_regdomain(struct zd_mac *mac)
458 + spin_lock_irqsave(&mac->lock, flags);
459 + regdomain = mac->regdomain;
460 + spin_unlock_irqrestore(&mac->lock, flags);
523 +static void try_enable_tx(struct zd_mac *mac)
527 + spin_lock_irqsave(&mac->lock, flags);
528 + if (mac->updating_rts_rate == 0 && mac->updating_basic_rates == 0)
529 + netif_wake_queue(mac->netdev);
530 + spin_unlock_irqrestore(&mac->lock, flags);
535 + struct zd_mac *mac =
541 + mutex_lock(&mac->chip.mutex);
543 + spin_lock_irqsave(&mac->lock, flags);
544 + mac->updating_rts_rate = 0;
545 + rts_rate = mac->rts_rate;
546 + short_preamble = mac->short_preamble;
547 + spin_unlock_irqrestore(&mac->lock, flags);
549 + zd_chip_set_rts_cts_rate_locked(&mac->chip, rts_rate, short_preamble);
550 + mutex_unlock(&mac->chip.mutex);
552 + try_enable_tx(mac);
557 + struct zd_mac *mac =
562 + mutex_lock(&mac->chip.mutex);
564 + spin_lock_irqsave(&mac->lock, flags);
565 + mac->updating_basic_rates = 0;
566 + basic_rates = mac->basic_rates;
567 + spin_unlock_irqrestore(&mac->lock, flags);
569 + zd_chip_set_basic_rates_locked(&mac->chip, basic_rates);
570 + mutex_unlock(&mac->chip.mutex);
572 + try_enable_tx(mac);
577 + struct zd_mac *mac = zd_netdev_mac(netdev);
585 + dev_dbg_f(zd_mac_dev(mac), "changes: %x\n", changes);
588 + spin_lock_irqsave(&mac->lock, flags);
589 + mac->short_preamble = bssinfo->short_preamble;
590 + spin_unlock_irqrestore(&mac->lock, flags);
600 + spin_lock_irqsave(&mac->lock, flags);
601 + if (hi_rate != mac->rts_rate) {
602 + mac->rts_rate = hi_rate;
605 + spin_unlock_irqrestore(&mac->lock, flags);
625 + spin_lock_irqsave(&mac->lock, flags);
626 + mac->basic_rates = basic_rates;
627 + spin_unlock_irqrestore(&mac->lock, flags);
632 + spin_lock_irqsave(&mac->lock, flags);
633 + if (need_set_rts_cts && !mac->updating_rts_rate) {
634 + mac->updating_rts_rate = 1;
635 + netif_stop_queue(mac->netdev);
636 + queue_delayed_work(zd_workqueue, &mac->set_rts_cts_work, 0);
638 + if (need_set_rates && !mac->updating_basic_rates) {
639 + mac->updating_basic_rates = 1;
640 + netif_stop_queue(mac->netdev);
641 + queue_delayed_work(zd_workqueue, &mac->set_basic_rates_work,
644 + spin_unlock_irqrestore(&mac->lock, flags);
649 + struct zd_mac *mac = zd_netdev_mac(netdev);
651 + dev_dbg_f(zd_mac_dev(mac), "channel %d\n", channel);
653 + zd_chip_set_channel(&mac->chip, channel);
656 +int zd_mac_request_channel(struct zd_mac *mac, u8 channel)
659 + struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
664 + spin_lock_irqsave(&mac->lock, lock_flags);
665 + if (!zd_regdomain_supports_channel(mac->regdomain, channel)) {
666 + spin_unlock_irqrestore(&mac->lock, lock_flags);
669 + mac->requested_channel = channel;
670 + spin_unlock_irqrestore(&mac->lock, lock_flags);
671 + if (netif_running(mac->netdev))
672 + return zd_chip_set_channel(&mac->chip, channel);
677 +u8 zd_mac_get_channel(struct zd_mac *mac)
679 + u8 channel = zd_chip_get_channel(&mac->chip);
681 + dev_dbg_f(zd_mac_dev(mac), "channel %u\n", channel);
707 +int zd_mac_set_mode(struct zd_mac *mac, u32 mode)
715 + mac->netdev->type = ARPHRD_ETHER;
718 + mac->netdev->type = ARPHRD_IEEE80211_RADIOTAP;
721 + dev_dbg_f(zd_mac_dev(mac), "wrong mode %u\n", mode);
725 + ieee = zd_mac_to_ieee80211(mac);
731 + if (netif_running(mac->netdev))
732 + return reset_mode(mac);
737 +int zd_mac_get_mode(struct zd_mac *mac, u32 *mode)
742 + ieee = zd_mac_to_ieee80211(mac);
749 +int zd_mac_get_range(struct zd_mac *mac, struct iw_range *range)
789 + spin_lock_irq(&mac->lock);
790 + regdomain = mac->regdomain;
791 + spin_unlock_irq(&mac->lock);
877 +static void cs_set_modulation(struct zd_mac *mac, struct zd_ctrlset *cs,
880 + struct ieee80211softmac_device *softmac = ieee80211_priv(mac->netdev);
899 +static void cs_set_control(struct zd_mac *mac, struct zd_ctrlset *cs,
902 + struct ieee80211softmac_device *softmac = ieee80211_priv(mac->netdev);
931 + tx_length > zd_netdev_ieee80211(mac->netdev)->rts)
945 +static int fill_ctrlset(struct zd_mac *mac,
949 + struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
969 + cs_set_modulation(mac, cs, hdr);
976 + cs_set_control(mac, cs, hdr);
983 + cs->packet_length = cpu_to_le16(mac->chip.is_zd1211b ?
1019 +static int zd_mac_tx(struct zd_mac *mac, struct ieee80211_txb *txb, int pri)
1022 + struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
1027 + r = fill_ctrlset(mac, txb, i);
1034 + r = zd_usb_tx_inject(&mac->chip.usb, skb->data, skb->len);
1036 + r = zd_usb_tx(&mac->chip.usb, skb->data, skb->len);
1044 + mac->netdev->trans_start = jiffies;
1060 +static void fill_rt_header(void *buffer, struct zd_mac *mac,
1083 + _zd_chip_get_channel(&mac->chip)));
1166 +static void update_qual_rssi(struct zd_mac *mac,
1177 + if (compare_ether_addr(hdr->addr2, zd_mac_to_ieee80211(mac)->bssid) != 0)
1180 + spin_lock_irqsave(&mac->lock, flags);
1181 + i = mac->stats_count % ZD_MAC_STATS_BUFFER_SIZE;
1182 + mac->qual_buffer[i] = qual_percent;
1183 + mac->rssi_buffer[i] = rssi_percent;
1184 + mac->stats_count++;
1185 + spin_unlock_irqrestore(&mac->lock, flags);
1190 + struct zd_mac *mac,
1198 + struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
1220 + stats->received_channel = _zd_chip_get_channel(&mac->chip);
1233 +static void zd_mac_rx(struct zd_mac *mac, struct sk_buff *skb)
1236 + struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
1248 + r = fill_rx_stats(&stats, &status, mac, skb->data, skb->len);
1260 + update_qual_rssi(mac, skb->data, skb->len, stats.signal,
1267 + dev_dbg_f(zd_mac_dev(mac), "Error in packet.\n");
1273 + fill_rt_header(skb_push(skb, sizeof(struct zd_rt_hdr)), mac,
1286 + struct zd_mac *mac = (struct zd_mac *)mac_ptr;
1289 + while ((skb = skb_dequeue(&mac->rx_queue)) != NULL)
1290 + zd_mac_rx(mac, skb);
1293 +int zd_mac_rx_irq(struct zd_mac *mac, const u8 *buffer, unsigned int length)
1299 + struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
1300 + dev_warn(zd_mac_dev(mac), "Could not allocate skb.\n");
1306 + skb_queue_tail(&mac->rx_queue, skb);
1307 + tasklet_schedule(&mac->rx_tasklet);
1394 + struct zd_mac *mac = zd_netdev_mac(ndev);
1395 + struct iw_statistics *iw_stats = &mac->iw_stats;
1402 + spin_lock_irq(&mac->lock);
1403 + count = mac->stats_count < ZD_MAC_STATS_BUFFER_SIZE ?
1404 + mac->stats_count : ZD_MAC_STATS_BUFFER_SIZE;
1407 + qual_total += mac->qual_buffer[i];
1408 + rssi_total += mac->rssi_buffer[i];
1410 + spin_unlock_irq(&mac->lock);
1429 + struct zd_mac *mac =
1431 + struct zd_chip *chip = &mac->chip;
1432 + struct ieee80211softmac_device *sm = ieee80211_priv(mac->netdev);
1436 + spin_lock_irq(&mac->lock);
1438 + spin_unlock_irq(&mac->lock);
1443 + dev_err(zd_mac_dev(mac), "zd_chip_control_leds error %d\n", r);
1445 + queue_delayed_work(zd_workqueue, &mac->housekeeping.link_led_work,
1449 +static void housekeeping_init(struct zd_mac *mac)
1451 + INIT_DELAYED_WORK(&mac->housekeeping.link_led_work, link_led_handler);
1454 +static void housekeeping_enable(struct zd_mac *mac)
1456 + dev_dbg_f(zd_mac_dev(mac), "\n");
1457 + queue_delayed_work(zd_workqueue, &mac->housekeeping.link_led_work,
1461 +static void housekeeping_disable(struct zd_mac *mac)
1463 + dev_dbg_f(zd_mac_dev(mac), "\n");
1465 + &mac->housekeeping.link_led_work);
1466 + zd_chip_control_leds(&mac->chip, LED_OFF);