conf->bssid, sizeof(conf->bssid));
 }
 
-static int rt2400pci_config_preamble(struct rt2x00_dev *rt2x00dev,
-                                    const int short_preamble,
-                                    const int ack_timeout,
-                                    const int ack_consume_time)
+static int rt2400pci_config_erp(struct rt2x00_dev *rt2x00dev,
+                               struct rt2x00lib_erp *erp)
 {
        int preamble_mask;
        u32 reg;
        /*
         * When short preamble is enabled, we should set bit 0x08
         */
-       preamble_mask = short_preamble << 3;
+       preamble_mask = erp->short_preamble << 3;
 
        rt2x00pci_register_read(rt2x00dev, TXCSR1, ®);
-       rt2x00_set_field32(®, TXCSR1_ACK_TIMEOUT, ack_timeout);
-       rt2x00_set_field32(®, TXCSR1_ACK_CONSUME_TIME, ack_consume_time);
+       rt2x00_set_field32(®, TXCSR1_ACK_TIMEOUT,
+                          erp->ack_timeout);
+       rt2x00_set_field32(®, TXCSR1_ACK_CONSUME_TIME,
+                          erp->ack_consume_time);
        rt2x00pci_register_write(rt2x00dev, TXCSR1, reg);
 
        rt2x00pci_register_read(rt2x00dev, ARCSR2, ®);
        .kick_tx_queue          = rt2400pci_kick_tx_queue,
        .fill_rxdone            = rt2400pci_fill_rxdone,
        .config_intf            = rt2400pci_config_intf,
-       .config_preamble        = rt2400pci_config_preamble,
+       .config_erp             = rt2400pci_config_erp,
        .config                 = rt2400pci_config,
 };
 
 
                                              conf->bssid, sizeof(conf->bssid));
 }
 
-static int rt2500pci_config_preamble(struct rt2x00_dev *rt2x00dev,
-                                    const int short_preamble,
-                                    const int ack_timeout,
-                                    const int ack_consume_time)
+static int rt2500pci_config_erp(struct rt2x00_dev *rt2x00dev,
+                               struct rt2x00lib_erp *erp)
 {
        int preamble_mask;
        u32 reg;
        /*
         * When short preamble is enabled, we should set bit 0x08
         */
-       preamble_mask = short_preamble << 3;
+       preamble_mask = erp->short_preamble << 3;
 
        rt2x00pci_register_read(rt2x00dev, TXCSR1, ®);
-       rt2x00_set_field32(®, TXCSR1_ACK_TIMEOUT, ack_timeout);
-       rt2x00_set_field32(®, TXCSR1_ACK_CONSUME_TIME, ack_consume_time);
+       rt2x00_set_field32(®, TXCSR1_ACK_TIMEOUT,
+                          erp->ack_timeout);
+       rt2x00_set_field32(®, TXCSR1_ACK_CONSUME_TIME,
+                          erp->ack_consume_time);
        rt2x00pci_register_write(rt2x00dev, TXCSR1, reg);
 
        rt2x00pci_register_read(rt2x00dev, ARCSR2, ®);
        .kick_tx_queue          = rt2500pci_kick_tx_queue,
        .fill_rxdone            = rt2500pci_fill_rxdone,
        .config_intf            = rt2500pci_config_intf,
-       .config_preamble        = rt2500pci_config_preamble,
+       .config_erp             = rt2500pci_config_erp,
        .config                 = rt2500pci_config,
 };
 
 
                                              (3 * sizeof(__le16)));
 }
 
-static int rt2500usb_config_preamble(struct rt2x00_dev *rt2x00dev,
-                                    const int short_preamble,
-                                    const int ack_timeout,
-                                    const int ack_consume_time)
+static int rt2500usb_config_erp(struct rt2x00_dev *rt2x00dev,
+                               struct rt2x00lib_erp *erp)
 {
        u16 reg;
 
                return -EAGAIN;
 
        rt2500usb_register_read(rt2x00dev, TXRX_CSR1, ®);
-       rt2x00_set_field16(®, TXRX_CSR1_ACK_TIMEOUT, ack_timeout);
+       rt2x00_set_field16(®, TXRX_CSR1_ACK_TIMEOUT, erp->ack_timeout);
        rt2500usb_register_write(rt2x00dev, TXRX_CSR1, reg);
 
        rt2500usb_register_read(rt2x00dev, TXRX_CSR10, ®);
        rt2x00_set_field16(®, TXRX_CSR10_AUTORESPOND_PREAMBLE,
-                          !!short_preamble);
+                          !!erp->short_preamble);
        rt2500usb_register_write(rt2x00dev, TXRX_CSR10, reg);
 
        return 0;
        .kick_tx_queue          = rt2500usb_kick_tx_queue,
        .fill_rxdone            = rt2500usb_fill_rxdone,
        .config_intf            = rt2500usb_config_intf,
-       .config_preamble        = rt2500usb_config_preamble,
+       .config_erp             = rt2500usb_config_erp,
        .config                 = rt2500usb_config,
 };
 
 
         */
        unsigned int delayed_flags;
 #define DELAYED_UPDATE_BEACON          0x00000001
-#define DELAYED_CONFIG_PREAMBLE                0x00000002
+#define DELAYED_CONFIG_ERP             0x00000002
 };
 
 static inline struct rt2x00_intf* vif_to_intf(struct ieee80211_vif *vif)
        short eifs;
 };
 
+/*
+ * Configuration structure for erp settings.
+ */
+struct rt2x00lib_erp {
+       int short_preamble;
+
+       int ack_timeout;
+       int ack_consume_time;
+};
+
 /*
  * Configuration structure wrapper around the
  * rt2x00 interface configuration handler.
 #define CONFIG_UPDATE_MAC              ( 1 << 2 )
 #define CONFIG_UPDATE_BSSID            ( 1 << 3 )
 
-       int (*config_preamble) (struct rt2x00_dev *rt2x00dev,
-                               const int short_preamble,
-                               const int ack_timeout,
-                               const int ack_consume_time);
+       int (*config_erp) (struct rt2x00_dev *rt2x00dev,
+                          struct rt2x00lib_erp *erp);
        void (*config) (struct rt2x00_dev *rt2x00dev,
                        struct rt2x00lib_conf *libconf,
                        const unsigned int flags);
 
        rt2x00dev->ops->lib->config_intf(rt2x00dev, intf, &conf, flags);
 }
 
-void rt2x00lib_config_preamble(struct rt2x00_dev *rt2x00dev,
-                              struct rt2x00_intf *intf,
-                              const unsigned int short_preamble)
+void rt2x00lib_config_erp(struct rt2x00_dev *rt2x00dev,
+                         struct rt2x00_intf *intf,
+                         struct ieee80211_bss_conf *bss_conf)
 {
+       struct rt2x00lib_erp erp;
        int retval;
-       int ack_timeout;
-       int ack_consume_time;
 
-       ack_timeout = PLCP + get_duration(ACK_SIZE, 10);
-       ack_consume_time = SIFS + PLCP + get_duration(ACK_SIZE, 10);
+       memset(&erp, 0, sizeof(erp));
+
+       erp.short_preamble = bss_conf->use_short_preamble;
+       erp.ack_timeout = PLCP + get_duration(ACK_SIZE, 10);
+       erp.ack_consume_time = SIFS + PLCP + get_duration(ACK_SIZE, 10);
 
        if (rt2x00dev->hw->conf.flags & IEEE80211_CONF_SHORT_SLOT_TIME)
-               ack_timeout += SHORT_DIFS;
+               erp.ack_timeout += SHORT_DIFS;
        else
-               ack_timeout += DIFS;
+               erp.ack_timeout += DIFS;
 
-       if (short_preamble) {
-               ack_timeout += SHORT_PREAMBLE;
-               ack_consume_time += SHORT_PREAMBLE;
+       if (bss_conf->use_short_preamble) {
+               erp.ack_timeout += SHORT_PREAMBLE;
+               erp.ack_consume_time += SHORT_PREAMBLE;
        } else {
-               ack_timeout += PREAMBLE;
-               ack_consume_time += PREAMBLE;
+               erp.ack_timeout += PREAMBLE;
+               erp.ack_consume_time += PREAMBLE;
        }
 
-       retval = rt2x00dev->ops->lib->config_preamble(rt2x00dev,
-                                                     short_preamble,
-                                                     ack_timeout,
-                                                     ack_consume_time);
-
-       spin_lock(&intf->lock);
+       retval = rt2x00dev->ops->lib->config_erp(rt2x00dev, &erp);
 
        if (retval) {
-               intf->delayed_flags |= DELAYED_CONFIG_PREAMBLE;
+               spin_lock(&intf->lock);
+               intf->delayed_flags |= DELAYED_CONFIG_ERP;
                queue_work(rt2x00dev->hw->workqueue, &rt2x00dev->intf_work);
+               spin_unlock(&intf->lock);
        }
-
-       spin_unlock(&intf->lock);
 }
 
 void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev,
 
                }
        }
 
-       if (delayed_flags & DELAYED_CONFIG_PREAMBLE)
-               rt2x00lib_config_preamble(rt2x00dev, intf,
-                                         intf->conf.use_short_preamble);
+       if (delayed_flags & DELAYED_CONFIG_ERP)
+               rt2x00lib_config_erp(rt2x00dev, intf, &intf->conf);
 }
 
 static void rt2x00lib_intf_scheduled(struct work_struct *work)
 
                           struct rt2x00_intf *intf,
                           enum ieee80211_if_types type,
                           u8 *mac, u8 *bssid);
-void rt2x00lib_config_preamble(struct rt2x00_dev *rt2x00dev,
-                              struct rt2x00_intf *intf,
-                              const unsigned int short_preamble);
+void rt2x00lib_config_erp(struct rt2x00_dev *rt2x00dev,
+                         struct rt2x00_intf *intf,
+                         struct ieee80211_bss_conf *conf);
 void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev,
                              enum antenna rx, enum antenna tx);
 void rt2x00lib_config(struct rt2x00_dev *rt2x00dev,
 
        }
 
        /*
-        * When the preamble mode has changed, we should perform additional
-        * configuration steps. For all other changes we are already done.
+        * When the erp information has changed, we should perform
+        * additional configuration steps. For all other changes we are done.
         */
-       if (changes & BSS_CHANGED_ERP_PREAMBLE) {
-               rt2x00lib_config_preamble(rt2x00dev, intf,
-                                         bss_conf->use_short_preamble);
+       if (changes & BSS_CHANGED_ERP_PREAMBLE)
+               rt2x00lib_config_erp(rt2x00dev, intf, bss_conf);
 
-               spin_lock(&intf->lock);
-               memcpy(&intf->conf, bss_conf, sizeof(*bss_conf));
-               spin_unlock(&intf->lock);
-       }
+       spin_lock(&intf->lock);
+       memcpy(&intf->conf, bss_conf, sizeof(*bss_conf));
+       spin_unlock(&intf->lock);
 }
 EXPORT_SYMBOL_GPL(rt2x00mac_bss_info_changed);
 
 
        }
 }
 
-static int rt61pci_config_preamble(struct rt2x00_dev *rt2x00dev,
-                                  const int short_preamble,
-                                  const int ack_timeout,
-                                  const int ack_consume_time)
+static int rt61pci_config_erp(struct rt2x00_dev *rt2x00dev,
+                             struct rt2x00lib_erp *erp)
 {
        u32 reg;
 
        rt2x00pci_register_read(rt2x00dev, TXRX_CSR0, ®);
-       rt2x00_set_field32(®, TXRX_CSR0_RX_ACK_TIMEOUT, ack_timeout);
+       rt2x00_set_field32(®, TXRX_CSR0_RX_ACK_TIMEOUT, erp->ack_timeout);
        rt2x00pci_register_write(rt2x00dev, TXRX_CSR0, reg);
 
        rt2x00pci_register_read(rt2x00dev, TXRX_CSR4, ®);
        rt2x00_set_field32(®, TXRX_CSR4_AUTORESPOND_PREAMBLE,
-                          !!short_preamble);
+                          !!erp->short_preamble);
        rt2x00pci_register_write(rt2x00dev, TXRX_CSR4, reg);
 
        return 0;
        .kick_tx_queue          = rt61pci_kick_tx_queue,
        .fill_rxdone            = rt61pci_fill_rxdone,
        .config_intf            = rt61pci_config_intf,
-       .config_preamble        = rt61pci_config_preamble,
+       .config_erp             = rt61pci_config_erp,
        .config                 = rt61pci_config,
 };
 
 
        }
 }
 
-static int rt73usb_config_preamble(struct rt2x00_dev *rt2x00dev,
-                                  const int short_preamble,
-                                  const int ack_timeout,
-                                  const int ack_consume_time)
+static int rt73usb_config_erp(struct rt2x00_dev *rt2x00dev,
+                             struct rt2x00lib_erp *erp)
 {
        u32 reg;
 
                return -EAGAIN;
 
        rt73usb_register_read(rt2x00dev, TXRX_CSR0, ®);
-       rt2x00_set_field32(®, TXRX_CSR0_RX_ACK_TIMEOUT, ack_timeout);
+       rt2x00_set_field32(®, TXRX_CSR0_RX_ACK_TIMEOUT, erp->ack_timeout);
        rt73usb_register_write(rt2x00dev, TXRX_CSR0, reg);
 
        rt73usb_register_read(rt2x00dev, TXRX_CSR4, ®);
        rt2x00_set_field32(®, TXRX_CSR4_AUTORESPOND_PREAMBLE,
-                          !!short_preamble);
+                          !!erp->short_preamble);
        rt73usb_register_write(rt2x00dev, TXRX_CSR4, reg);
 
        return 0;
        .kick_tx_queue          = rt73usb_kick_tx_queue,
        .fill_rxdone            = rt73usb_fill_rxdone,
        .config_intf            = rt73usb_config_intf,
-       .config_preamble        = rt73usb_config_preamble,
+       .config_erp             = rt73usb_config_erp,
        .config                 = rt73usb_config,
 };