Changeset 053fc2b in mainline for uspace/drv


Ignore:
Timestamp:
2015-04-10T13:52:11Z (11 years ago)
Author:
Jan Kolarik <kolarik@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
a931b7b
Parents:
d7dadcb4
Message:

Locking, correctly disconnecting device, sending DHCP address discover after connecting to WiFi network

Location:
uspace/drv/nic/ar9271
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/nic/ar9271/ar9271.c

    rd7dadcb4 r053fc2b  
    105105static int ar9271_ieee80211_set_freq(ieee80211_dev_t *ieee80211_dev,
    106106        uint16_t freq);
    107 static int ar9271_ieee80211_bssid_change(ieee80211_dev_t *ieee80211_dev);
     107static int ar9271_ieee80211_bssid_change(ieee80211_dev_t *ieee80211_dev,
     108        bool connected);
    108109static int ar9271_ieee80211_key_config(ieee80211_dev_t *ieee80211_dev,
    109110        ieee80211_key_config_t *key_conf, bool insert);
     
    351352        ar9271_t *ar9271 = (ar9271_t *) ieee80211_get_specific(ieee80211_dev);
    352353       
    353         //hw_wakeup(ar9271);
    354        
    355354        wmi_send_command(ar9271->htc_device, WMI_DISABLE_INTR, NULL, 0, NULL);
    356355        wmi_send_command(ar9271->htc_device, WMI_DRAIN_TXQ_ALL, NULL, 0, NULL);
     
    379378}
    380379
    381 static int ar9271_ieee80211_bssid_change(ieee80211_dev_t *ieee80211_dev)
     380static int ar9271_ieee80211_bssid_change(ieee80211_dev_t *ieee80211_dev,
     381        bool connected)
    382382{
    383383        assert(ieee80211_dev);
     
    385385        ar9271_t *ar9271 = (ar9271_t *) ieee80211_get_specific(ieee80211_dev);
    386386
    387         /* Check if we are connected or disconnected. */
    388         if(ieee80211_is_connected(ieee80211_dev)) {
     387        if(connected) {
    389388                nic_address_t bssid;
    390389                ieee80211_query_bssid(ieee80211_dev, &bssid);
     
    433432{
    434433        assert(ieee80211_dev);
    435         assert(key_conf);
    436434       
    437435        ar9271_t *ar9271 = (ar9271_t *) ieee80211_get_specific(ieee80211_dev);
    438436       
    439         uint32_t key[5];
    440         uint32_t key_type;
    441         uint32_t reg_ptr;
    442         void *data_start;
    443        
    444437        if(insert) {
     438                assert(key_conf);
     439               
     440                uint32_t key[5];
     441                uint32_t key_type;
     442                uint32_t reg_ptr;
     443                void *data_start;
     444               
    445445                nic_address_t bssid;
    446446                ieee80211_query_bssid(ieee80211_dev, &bssid);
     
    520520                        ieee80211_setup_key_confirm(ieee80211_dev, true);
    521521        } else {
    522                 // TODO
     522                // TODO: Delete keys from device
     523                ieee80211_setup_key_confirm(ieee80211_dev, false);
    523524        }
    524525       
     
    562563                        data_header->keyix = AR9271_STA_KEY_INDEX;
    563564                        int sec_suite =
    564                                 ieee80211_get_security_suite(ieee80211_dev);
     565                                ieee80211_get_pairwise_security(ieee80211_dev);
    565566                        switch(sec_suite) {
    566567                                case IEEE80211_SECURITY_SUITE_WEP40:
  • uspace/drv/nic/ar9271/hw.c

    rd7dadcb4 r053fc2b  
    377377}
    378378
    379 int hw_wakeup(ar9271_t *ar9271)
    380 {
    381         int rc;
    382        
    383         uint32_t rtc_status;
    384         wmi_reg_read(ar9271->htc_device, AR9271_RTC_STATUS, &rtc_status);
    385         if((rtc_status & AR9271_RTC_STATUS_MASK) == AR9271_RTC_STATUS_SHUTDOWN) {
    386                 rc = hw_reset_power_on(ar9271);
    387                 if(rc != EOK) {
    388                         usb_log_info("Failed to HW reset power on.\n");
    389                         return rc;
    390                 }
    391 
    392                 rc = hw_set_reset(ar9271, false);
    393                 if(rc != EOK) {
    394                         usb_log_info("Failed to HW warm reset.\n");
    395                         return rc;
    396                 }
    397         }
    398        
    399         wmi_reg_set_bit(ar9271->htc_device, AR9271_RTC_FORCE_WAKE,
    400                 AR9271_RTC_FORCE_WAKE_ENABLE);
    401        
    402         size_t i;
    403         for(i = 0; i < HW_WAIT_LOOPS; i++) {
    404                 wmi_reg_read(ar9271->htc_device, AR9271_RTC_STATUS,
    405                         &rtc_status);
    406                 if((rtc_status & AR9271_RTC_STATUS_MASK) ==
    407                         AR9271_RTC_STATUS_ON) {
    408                         break;
    409                 }
    410                 wmi_reg_set_bit(ar9271->htc_device, AR9271_RTC_FORCE_WAKE,
    411                         AR9271_RTC_FORCE_WAKE_ENABLE);
    412                 udelay(50);
    413         }       
    414        
    415         if(i == HW_WAIT_LOOPS) {
    416                 return EINVAL;
    417         } else {
    418                 return EOK;
    419         }
    420 }
    421 
    422379int hw_freq_switch(ar9271_t *ar9271, uint16_t freq)
    423380{
  • uspace/drv/nic/ar9271/hw.h

    rd7dadcb4 r053fc2b  
    4545extern int hw_rx_init(ar9271_t *ar9271);
    4646extern int hw_reset(ar9271_t *ar9271);
    47 extern int hw_wakeup(ar9271_t *ar9271);
    4847extern int hw_set_bssid(ar9271_t *ar9271);
    4948extern int hw_set_rx_filter(ar9271_t *ar9271, bool assoc);
Note: See TracChangeset for help on using the changeset viewer.