~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise

« back to all changes in this revision

Viewing changes to drivers/net/wireless/p54/fwio.c

  • Committer: Bazaar Package Importer
  • Author(s): Paolo Pisati
  • Date: 2011-06-29 15:23:51 UTC
  • mfrom: (26.1.1 natty-proposed)
  • Revision ID: james.westby@ubuntu.com-20110629152351-xs96tm303d95rpbk
Tags: 3.0.0-1200.2
* Rebased against 3.0.0-6.7
* BSP from TI based on 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
397
397
        union p54_scan_body_union *body;
398
398
        struct p54_scan_tail_rate *rate;
399
399
        struct pda_rssi_cal_entry *rssi;
 
400
        struct p54_rssi_db_entry *rssi_data;
400
401
        unsigned int i;
401
402
        void *entry;
402
 
        int band = priv->hw->conf.channel->band;
403
403
        __le16 freq = cpu_to_le16(priv->hw->conf.channel->center_freq);
404
404
 
405
405
        skb = p54_alloc_skb(priv, P54_HDR_FLAG_CONTROL_OPSET, sizeof(*head) +
503
503
        }
504
504
 
505
505
        rssi = (struct pda_rssi_cal_entry *) skb_put(skb, sizeof(*rssi));
506
 
        rssi->mul = cpu_to_le16(priv->rssical_db[band].mul);
507
 
        rssi->add = cpu_to_le16(priv->rssical_db[band].add);
 
506
        rssi_data = p54_rssi_find(priv, le16_to_cpu(freq));
 
507
        rssi->mul = cpu_to_le16(rssi_data->mul);
 
508
        rssi->add = cpu_to_le16(rssi_data->add);
508
509
        if (priv->rxhw == PDR_SYNTH_FRONTEND_LONGBOW) {
509
510
                /* Longbow frontend needs ever more */
510
511
                rssi = (void *) skb_put(skb, sizeof(*rssi));
511
 
                rssi->mul = cpu_to_le16(priv->rssical_db[band].longbow_unkn);
512
 
                rssi->add = cpu_to_le16(priv->rssical_db[band].longbow_unk2);
 
512
                rssi->mul = cpu_to_le16(rssi_data->longbow_unkn);
 
513
                rssi->add = cpu_to_le16(rssi_data->longbow_unk2);
513
514
        }
514
515
 
515
516
        if (priv->fw_var >= 0x509) {
523
524
        hdr->len = cpu_to_le16(skb->len - sizeof(*hdr));
524
525
 
525
526
        p54_tx(priv, skb);
 
527
        priv->cur_rssi = rssi_data;
526
528
        return 0;
527
529
 
528
530
err:
557
559
{
558
560
        struct sk_buff *skb;
559
561
        struct p54_edcf *edcf;
 
562
        u8 rtd;
560
563
 
561
564
        skb = p54_alloc_skb(priv, P54_HDR_FLAG_CONTROL_OPSET, sizeof(*edcf),
562
565
                            P54_CONTROL_TYPE_DCFINIT, GFP_ATOMIC);
573
576
                edcf->sifs = 0x0a;
574
577
                edcf->eofpad = 0x06;
575
578
        }
 
579
        /*
 
580
         * calculate the extra round trip delay according to the
 
581
         * formula from 802.11-2007 17.3.8.6.
 
582
         */
 
583
        rtd = 3 * priv->coverage_class;
 
584
        edcf->slottime += rtd;
 
585
        edcf->round_trip_delay = cpu_to_le16(rtd);
576
586
        /* (see prism54/isl_oid.h for further details) */
577
587
        edcf->frameburst = cpu_to_le16(0);
578
 
        edcf->round_trip_delay = cpu_to_le16(0);
579
588
        edcf->flags = 0;
580
589
        memset(edcf->mapping, 0, sizeof(edcf->mapping));
581
590
        memcpy(edcf->queue, priv->qos_params, sizeof(edcf->queue));
718
727
        p54_tx(priv, skb);
719
728
        return 0;
720
729
}
 
730
 
 
731
int p54_set_groupfilter(struct p54_common *priv)
 
732
{
 
733
        struct p54_group_address_table *grp;
 
734
        struct sk_buff *skb;
 
735
        bool on = false;
 
736
 
 
737
        skb = p54_alloc_skb(priv, P54_HDR_FLAG_CONTROL_OPSET, sizeof(*grp),
 
738
                            P54_CONTROL_TYPE_GROUP_ADDRESS_TABLE, GFP_KERNEL);
 
739
        if (!skb)
 
740
                return -ENOMEM;
 
741
 
 
742
        grp = (struct p54_group_address_table *)skb_put(skb, sizeof(*grp));
 
743
 
 
744
        on = !(priv->filter_flags & FIF_ALLMULTI) &&
 
745
             (priv->mc_maclist_num > 0 &&
 
746
              priv->mc_maclist_num <= MC_FILTER_ADDRESS_NUM);
 
747
 
 
748
        if (on) {
 
749
                grp->filter_enable = cpu_to_le16(1);
 
750
                grp->num_address = cpu_to_le16(priv->mc_maclist_num);
 
751
                memcpy(grp->mac_list, priv->mc_maclist, sizeof(grp->mac_list));
 
752
        } else {
 
753
                grp->filter_enable = cpu_to_le16(0);
 
754
                grp->num_address = cpu_to_le16(0);
 
755
                memset(grp->mac_list, 0, sizeof(grp->mac_list));
 
756
        }
 
757
 
 
758
        p54_tx(priv, skb);
 
759
        return 0;
 
760
}