source: trunk/package/mac80211/patches/820-b43-add-antenna-control.patch @ 28940

Last change on this file since 28940 was 28940, checked in by jow, 5 years ago

[package] mac80211: add antenna control api for b43

File size: 4.0 KB
  • drivers/net/wireless/b43/main.c

    a b static void b43_write_beacon_template(st 
    15351535                                  len, ram_offset, shm_size_offset, rate); 
    15361536 
    15371537        /* Write the PHY TX control parameters. */ 
    1538         antenna = B43_ANTENNA_DEFAULT; 
     1538        antenna = dev->tx_antenna; 
    15391539        antenna = b43_antenna_to_phyctl(antenna); 
    15401540        ctl = b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_BEACPHYCTL); 
    15411541        /* We can't send beacons with short preamble. Would get PHY errors. */ 
    static int b43_chip_init(struct b43_wlde 
    30523052 
    30533053        /* Select the antennae */ 
    30543054        if (phy->ops->set_rx_antenna) 
    3055                 phy->ops->set_rx_antenna(dev, B43_ANTENNA_DEFAULT); 
    3056         b43_mgmtframe_txantenna(dev, B43_ANTENNA_DEFAULT); 
     3055                phy->ops->set_rx_antenna(dev, dev->rx_antenna); 
     3056        b43_mgmtframe_txantenna(dev, dev->tx_antenna); 
    30573057 
    30583058        if (phy->type == B43_PHYTYPE_B) { 
    30593059                value16 = b43_read16(dev, 0x005E); 
    static int b43_op_config(struct ieee8021 
    37823782        struct b43_wldev *dev; 
    37833783        struct b43_phy *phy; 
    37843784        struct ieee80211_conf *conf = &hw->conf; 
    3785         int antenna; 
    37863785        int err = 0; 
    37873786        bool reload_bss = false; 
    37883787 
    static int b43_op_config(struct ieee8021 
    38363835        } 
    38373836 
    38383837        /* Antennas for RX and management frame TX. */ 
    3839         antenna = B43_ANTENNA_DEFAULT; 
    3840         b43_mgmtframe_txantenna(dev, antenna); 
    3841         antenna = B43_ANTENNA_DEFAULT; 
     3838        b43_mgmtframe_txantenna(dev, dev->tx_antenna); 
    38423839        if (phy->ops->set_rx_antenna) 
    3843                 phy->ops->set_rx_antenna(dev, antenna); 
     3840                phy->ops->set_rx_antenna(dev, dev->rx_antenna); 
    38443841 
    38453842        if (wl->radio_enabled != phy->radio_on) { 
    38463843                if (wl->radio_enabled) { 
    static int b43_op_get_survey(struct ieee 
    49104907        return 0; 
    49114908} 
    49124909 
     4910static int b43_op_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant) 
     4911{ 
     4912        struct b43_wl *wl = hw_to_b43_wl(hw); 
     4913        struct b43_wldev *dev = wl->current_dev; 
     4914 
     4915        if (tx_ant == 1 && rx_ant == 1) { 
     4916                dev->tx_antenna = B43_ANTENNA0; 
     4917                dev->rx_antenna = B43_ANTENNA0; 
     4918        } 
     4919        else if (tx_ant == 2 && rx_ant == 2) { 
     4920                dev->tx_antenna = B43_ANTENNA1; 
     4921                dev->rx_antenna = B43_ANTENNA1; 
     4922        } 
     4923        else if ((tx_ant & 3) == 3 && (rx_ant & 3) == 3) { 
     4924                dev->tx_antenna = B43_ANTENNA_DEFAULT; 
     4925                dev->rx_antenna = B43_ANTENNA_DEFAULT; 
     4926        } 
     4927        else { 
     4928                return -EINVAL; 
     4929        } 
     4930 
     4931        return 0; 
     4932} 
     4933 
     4934 
     4935static int b43_op_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant) 
     4936{ 
     4937        struct b43_wl *wl = hw_to_b43_wl(hw); 
     4938        struct b43_wldev *dev = wl->current_dev; 
     4939 
     4940        switch (dev->tx_antenna) { 
     4941        case B43_ANTENNA0: 
     4942                *tx_ant = 1; *rx_ant = 1; break; 
     4943        case B43_ANTENNA1: 
     4944                *tx_ant = 2; *rx_ant = 2; break; 
     4945        case B43_ANTENNA_DEFAULT: 
     4946                *tx_ant = 3; *rx_ant = 3; break; 
     4947        } 
     4948        return 0; 
     4949} 
     4950 
    49134951static const struct ieee80211_ops b43_hw_ops = { 
    49144952        .tx                     = b43_op_tx, 
    49154953        .conf_tx                = b43_op_conf_tx, 
    static const struct ieee80211_ops b43_hw 
    49314969        .sw_scan_complete       = b43_op_sw_scan_complete_notifier, 
    49324970        .get_survey             = b43_op_get_survey, 
    49334971        .rfkill_poll            = b43_rfkill_poll, 
     4972        .set_antenna            = b43_op_set_antenna, 
     4973        .get_antenna            = b43_op_get_antenna, 
    49344974}; 
    49354975 
    49364976/* Hard-reset the chip. Do not call this directly. 
    static int b43_one_core_attach(struct b4 
    51775217        if (!wldev) 
    51785218                goto out; 
    51795219 
     5220        wldev->rx_antenna = B43_ANTENNA_DEFAULT; 
     5221        wldev->tx_antenna = B43_ANTENNA_DEFAULT; 
    51805222        wldev->use_pio = b43_modparam_pio; 
    51815223        wldev->dev = dev; 
    51825224        wldev->wl = wl; 
    static struct b43_wl *b43_wireless_init( 
    52645306                BIT(NL80211_IFTYPE_WDS) | 
    52655307                BIT(NL80211_IFTYPE_ADHOC); 
    52665308 
     5309        hw->wiphy->available_antennas_rx = 0x3; 
     5310        hw->wiphy->available_antennas_tx = 0x3; 
     5311 
    52675312        hw->queues = modparam_qos ? 4 : 1; 
    52685313        wl->mac80211_initially_registered_queues = hw->queues; 
    52695314        hw->max_rates = 2; 
  • drivers/net/wireless/b43/b43.h

    a b struct b43_wldev { 
    792792        bool hwcrypto_enabled;          /* TRUE, if HW crypto acceleration is enabled. */ 
    793793        bool use_pio;                   /* TRUE if next init should use PIO */ 
    794794        int gpiomask;                   /* GPIO LED mask as a module parameter */ 
     795        int rx_antenna;                 /* Used RX antenna (B43_ANTENNAxxx) */ 
     796        int tx_antenna;                 /* Used TX antenna (B43_ANTENNAxxx) */ 
    795797 
    796798        /* PHY/Radio device. */ 
    797799        struct b43_phy phy; 
Note: See TracBrowser for help on using the repository browser.