Home | History | Annotate | Download | only in network_WlanDriver
      1 # Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import logging
      6 
      7 from autotest_lib.client.bin import test
      8 from autotest_lib.client.bin import utils
      9 from autotest_lib.client.common_lib import error
     10 from autotest_lib.client.common_lib.cros.network import interface
     11 
     12 
     13 class network_WlanDriver(test.test):
     14     """
     15     Ensure wireless devices have the expected associated kernel driver.
     16     """
     17     version = 1
     18     DEVICES = [ 'wlan0', 'mlan0' ]
     19     EXPECTED_DRIVER = {
     20             'Atheros AR9280': {
     21                     '3.4': 'wireless/ath/ath9k/ath9k.ko',
     22                     '3.8': 'wireless-3.4/ath/ath9k/ath9k.ko'
     23             },
     24             'Atheros AR9382': {
     25                     '3.4': 'wireless/ath/ath9k/ath9k.ko',
     26                     '3.8': 'wireless-3.4/ath/ath9k/ath9k.ko'
     27             },
     28             'Intel 7260': {
     29                     '3.8': 'wireless/iwl7000/iwlwifi/iwlwifi.ko',
     30                     '3.10': 'wireless-3.8/iwl7000/iwlwifi/iwlwifi.ko',
     31                     '3.14': 'wireless-3.8/iwl7000/iwlwifi/iwlwifi.ko'
     32             },
     33             'Intel 7265': {
     34                     '3.8': 'wireless/iwl7000/iwlwifi/iwlwifi.ko',
     35                     '3.10': 'wireless-3.8/iwl7000/iwlwifi/iwlwifi.ko',
     36                     '3.14': 'wireless-3.8/iwl7000/iwlwifi/iwlwifi.ko',
     37                     '3.18': 'wireless/iwl7000/iwlwifi/iwlwifi.ko'
     38             },
     39             'Atheros AR9462': {
     40                     '3.4': 'wireless/ath/ath9k_btcoex/ath9k_btcoex.ko',
     41                     '3.8': 'wireless-3.4/ath/ath9k_btcoex/ath9k_btcoex.ko'
     42             },
     43             'Marvell 88W8797 SDIO': {
     44                     '3.4': 'wireless/mwifiex/mwifiex_sdio.ko',
     45                     '3.8': 'wireless-3.4/mwifiex/mwifiex_sdio.ko'
     46             },
     47             'Marvell 88W8887 SDIO': {
     48                      '3.14': 'wireless-3.8/mwifiex/mwifiex_sdio.ko'
     49             },
     50             'Marvell 88W8897 PCIE': {
     51                      '3.8': 'wireless/mwifiex/mwifiex_pcie.ko',
     52                      '3.10': 'wireless-3.8/mwifiex/mwifiex_pcie.ko'
     53             },
     54             'Marvell 88W8897 SDIO': {
     55                      '3.8': 'wireless/mwifiex/mwifiex_sdio.ko',
     56                      '3.10': 'wireless-3.8/mwifiex/mwifiex_sdio.ko',
     57                      '3.14': 'wireless-3.8/mwifiex/mwifiex_sdio.ko'
     58             },
     59             'Broadcom BCM4354 SDIO': {
     60                      '3.8': 'wireless/brcm80211/brcmfmac/brcmfmac.ko',
     61                      '3.14': 'wireless-3.8/brcm80211/brcmfmac/brcmfmac.ko'
     62             },
     63             'Broadcom BCM4356 PCIE': {
     64                      '3.10': 'wireless-3.8/brcm80211/brcmfmac/brcmfmac.ko'
     65             },
     66     }
     67 
     68 
     69     def run_once(self):
     70         """Test main loop"""
     71         # full_revision looks like "3.4.0".
     72         full_revision = utils.system_output('uname -r')
     73         # base_revision looks like "3.4".
     74         base_revision = '.'.join(full_revision.split('.')[:2])
     75         logging.info('Kernel base is %s', base_revision)
     76 
     77         found_devices = 0
     78         for device in self.DEVICES:
     79             net_if = interface.Interface(device)
     80             device_description = net_if.device_description
     81 
     82             if not device_description:
     83                 continue
     84 
     85             device_name, module_path = device_description
     86             logging.info('Device name %s, module path %s',
     87                          device_name, module_path)
     88             if not device_name in self.EXPECTED_DRIVER:
     89                 raise error.TestFail('Unexpected device name %s' %
     90                                      device_name)
     91 
     92             if not base_revision in self.EXPECTED_DRIVER[device_name]:
     93                 raise error.TestNAError('Unexpected base kernel revision %s '
     94                                         'with device name %s' %
     95                                         (base_revision, device_name))
     96 
     97             expected_driver = self.EXPECTED_DRIVER[device_name][base_revision]
     98             if module_path != expected_driver:
     99                 raise error.TestFail('Unexpected driver for %s/%s; '
    100                                      'got %s but expected %s' %
    101                                      (base_revision, device_name,
    102                                       module_path, expected_driver))
    103             found_devices += 1
    104         if not found_devices:
    105             raise error.TestNAError('Found no recognized wireless devices?')
    106