Example #1
0
 def __init__(self, fantray_index=1, fan_index=1, psu_fan=False):
     FanBase.__init__(self)
     self.is_psu_fan = psu_fan
     if not self.is_psu_fan:
         # API index is starting from 0, DellEMC platform index is starting
         # from 1
         self.fantrayindex = fantray_index + 1
         self.fanindex = fan_index + 1
         self.fan_presence_reg = "fan{}_fault".format(
             2 * (self.fantrayindex - 1) + (self.fanindex - 1) + 1)
         self.fan_status_reg = "fan{}_alarm".format(
             2 * (self.fantrayindex - 1) + (self.fanindex - 1) + 1)
         self.get_fan_speed_reg = "fan{}_input".format(
             2 * (self.fantrayindex - 1) + (self.fanindex - 1) + 1)
         self.get_fan_dir_reg = "fan{}_airflow".format(2 *
                                                       self.fantrayindex -
                                                       1)
         self.fan_serialno_reg = "fan{}_serialno".format(2 *
                                                         self.fantrayindex -
                                                         1)
         self.max_fan_speed = MAX_Z9100_FAN_SPEED
     else:
         # PSU Fan index starts from 11
         self.fanindex = fan_index + 10
         self.fan_presence_reg = "fan{}_fault".format(self.fanindex)
         self.get_fan_speed_reg = "fan{}_input".format(self.fanindex)
         self.get_fan_dir_reg = "fan{}_airflow".format(self.fanindex)
         self.max_fan_speed = MAX_Z9100_PSU_FAN_SPEED
Example #2
0
    def __init__(self, fan_index):
        self.index = fan_index
        self.config_data = {}
        self.fan_speed = 0
        FanBase.__init__(self)

        # e1031 fan attributes
        # Single emc2305 chip located at i2c-23-4d
        # to control a fan module
        self.e1031_emc2305_chip = [
            {
                'device': "23-004d",
                'index_map': [1, 2, 4]
            }
        ]

        self.fan_e1031_presence = "fan{}_prs"
        self.fan_e1031_direction = "fan{}_dir"
        self.fan_e1031_led = "fan{}_led"
        self.fan_e1031_led_col_map = {
            self.STATUS_LED_COLOR_GREEN: "green",
            self.STATUS_LED_COLOR_RED: "amber",
            self.STATUS_LED_COLOR_OFF: "off"
        }
        FanBase.__init__(self)
Example #3
0
    def __init__(self,
                 fan_tray_index,
                 fan_index=0,
                 is_psu_fan=False,
                 psu_index=0):
        self.fan_index = fan_index
        self.fan_tray_index = fan_tray_index
        self.is_psu_fan = is_psu_fan
        if self.is_psu_fan:
            self.psu_index = psu_index
            self.psu_i2c_num = PSU_I2C_MAPPING[self.psu_index]["num"]
            self.psu_i2c_addr = PSU_I2C_MAPPING[self.psu_index]["addr"]
            self.psu_hwmon_path = PSU_HWMON_PATH.format(
                self.psu_i2c_num, self.psu_i2c_addr)

        # e1031 fan attributes
        # Single emc2305 chip located at i2c-23-4d
        # to control a fan module
        self.emc2305_chip_mapping = [{
            'device': "23-004d",
            'index_map': [1, 2, 4]
        }]
        self.fan_e1031_presence = "fan{}_prs"
        self.fan_e1031_direction = "fan{}_dir"
        self.fan_e1031_led = "fan{}_led"
        self.fan_e1031_led_col_map = {
            self.STATUS_LED_COLOR_GREEN: "green",
            self.STATUS_LED_COLOR_RED: "amber",
            self.STATUS_LED_COLOR_OFF: "off"
        }
        FanBase.__init__(self)
Example #4
0
    def __init__(self, fan_tray_index, fan_index=0, is_psu_fan=False, psu_index=0):
        FanBase.__init__(self)
        self.fan_index = fan_index
        self._api_helper = APIHelper()
        self.fan_tray_index = fan_tray_index
        self.is_psu_fan = is_psu_fan
        if self.is_psu_fan:
            self.psu_index = psu_index
            self.psu_i2c_num = PSU_I2C_MAPPING[self.psu_index]["num"]
            self.psu_i2c_addr = PSU_I2C_MAPPING[self.psu_index]["addr"]
            self.psu_hwmon_path = PSU_HWMON_PATH.format(
                self.psu_i2c_num, self.psu_i2c_addr)

        # dx010 fan attributes
        # Two EMC2305s located at i2c-13-4d and i2c-13-2e
        # to control a dual-fan module.
        self.emc2305_chip_mapping = [
            {
                'device': "13-002e",
                'index_map': [2, 1, 4, 5, 3]
            },
            {
                'device': "13-004d",
                'index_map': [2, 4, 5, 3, 1]
            }
        ]
        self.dx010_fan_gpio = [
            {'base': self.__get_gpio_base()},
            {'prs': 11, 'dir': 16, 'color': {'red': 31, 'green': 32}},  # 1
            {'prs': 10, 'dir': 15, 'color': {'red': 29, 'green': 30}},  # 2
            {'prs': 13, 'dir': 18, 'color': {'red': 35, 'green': 36}},  # 3
            {'prs': 14, 'dir': 19, 'color': {'red': 37, 'green': 38}},  # 4
            {'prs': 12, 'dir': 17, 'color': {'red': 33, 'green': 34}},  # 5
        ]
Example #5
0
    def __init__(self, fan_index):
        self.index = fan_index + 1
        FanBase.__init__(self)

        self.fantray_index = (fan_index) / self.FANS_PERTRAY + 1
        self.fan_index_intray = self.index - (
            (self.fantray_index - 1) * self.FANS_PERTRAY)
Example #6
0
 def __init__(self, fantray_index=1, fan_index=1, psu_fan=False, dependency=None):
     FanBase.__init__(self)
     self.is_psu_fan = psu_fan
     if not self.is_psu_fan:
         # API index is starting from 0, DellEMC platform index is
         # starting from 1
         self.fantrayindex = fantray_index + 1
         self.fanindex = fan_index + 1
         self.index = (self.fantrayindex - 1) * 2 + self.fanindex
         self.prsnt_sensor = IpmiSensor(self.FAN_SENSOR_MAPPING[self.index]["Prsnt"],
                                        is_discrete=True)
         self.state_sensor = IpmiSensor(self.FAN_SENSOR_MAPPING[self.index]["State"],
                                        is_discrete=True)
         self.speed_sensor = IpmiSensor(self.FAN_SENSOR_MAPPING[self.index]["Speed"])
         self.fru = IpmiFru(self.FAN_FRU_MAPPING[self.fantrayindex])
         if self.fanindex == 1:
             self.max_speed_offset = FAN1_MAX_SPEED_OFFSET
         else:
             self.max_speed_offset = FAN2_MAX_SPEED_OFFSET
         self.fan_direction_offset = FAN_DIRECTION_OFFSET
     else:
         self.dependency = dependency
         self.fanindex = fan_index
         self.state_sensor = IpmiSensor(self.PSU_FAN_SENSOR_MAPPING[self.fanindex]["State"],
                                        is_discrete=True)
         self.speed_sensor = IpmiSensor(self.PSU_FAN_SENSOR_MAPPING[self.fanindex]["Speed"])
         self.fru = IpmiFru(self.PSU_FRU_MAPPING[self.fanindex])
         self.max_speed_offset = PSU_FAN_MAX_SPEED_OFFSET
         self.fan_direction_offset = PSU_FAN_DIRECTION_OFFSET
         #self.fan_dir_raw_cmd = "0x3a 0x0a {}".format(7+(fan_index-1))
     self.max_speed = 18000
Example #7
0
 def __init__(self, fantray_index=1, fan_index=1, psu_fan=False,
         dependency=None):
     FanBase.__init__(self)
     self.is_psu_fan = psu_fan
     if not self.is_psu_fan:
         # API index is starting from 0, DellEMC platform index is
         # starting from 1
         self.fantrayindex = fantray_index + 1
         self.fanindex = fan_index + 1
         if (self.fanindex == 1):
             self.max_speed_offset = FAN1_MAX_SPEED_OFFSET
         else:
             self.max_speed_offset = FAN2_MAX_SPEED_OFFSET
         self.fan_direction_offset = FAN_DIRECTION_OFFSET
         self.index = (self.fantrayindex - 1) * 2 + self.fanindex
         self.prsnt_sensor = IpmiSensor(self.FAN_SENSOR_MAPPING[self.index]["Prsnt"],
                                        is_discrete=True)
         self.state_sensor = IpmiSensor(self.FAN_SENSOR_MAPPING[self.index]["State"],
                                        is_discrete=True)
         self.speed_sensor = IpmiSensor(self.FAN_SENSOR_MAPPING[self.index]["Speed"])
         self.fru = IpmiFru(self.FAN_FRU_MAPPING[self.fantrayindex])
     else:
         self.dependency = dependency
         self.fanindex = fan_index
         self.state_sensor = IpmiSensor(self.PSU_FAN_SENSOR_MAPPING[self.fanindex]["State"],
                                        is_discrete=True)
         self.speed_sensor = IpmiSensor(self.PSU_FAN_SENSOR_MAPPING[self.fanindex]["Speed"])
         self.fru = IpmiFru(self.PSU_FRU_MAPPING[self.fanindex])
         self.max_speed_offset = PSU_FAN_MAX_SPEED_OFFSET
         self.fan_direction_offset = PSU_FAN_DIRECTION_OFFSET
     self.max_speed = self.fru.get_fru_data(self.max_speed_offset,2)[1]
     self.max_speed = self.max_speed[1] << 8 | self.max_speed[0]
Example #8
0
    def __init__(self, fan_index, is_psu_fan):
        self.index = fan_index + 1
        self.is_psu_fan = is_psu_fan
        FanBase.__init__(self)
        base_path = "/sys/bus/i2c/devices/"

        if self.is_psu_fan:
            psu_bus_num = [10, 11]
            psu_pmbus_address = [58, 59]
            self.psu_pmbus_path = base_path + "{}-00{}".format(
                psu_bus_num[self.index - 1], psu_pmbus_address[self.index - 1])
            # driver attribute
            self.psu_fan_rpm = "/psu_fan1_speed_rpm"
        else:
            self.fan_path = base_path + '1-005e'
            self.fantray_index = int((fan_index) / self.FANS_PERTRAY) + 1
            self.fan_index_intray = self.index - (
                (self.fantray_index - 1) * self.FANS_PERTRAY)
            self.fan_index_intray_str = 'front' if (self.fan_index_intray
                                                    == 1) else 'rear'
            # driver attribute
            self.fan_present = '/fan{}_present'.format(self.fantray_index)
            self.fan_direction = '/fan{}_direction'.format(self.fantray_index)
            self.fan_speed_rpm = '/fan{}_{}_speed_rpm'.format(
                self.fantray_index, self.fan_index_intray_str)
            self.fan_speed_pwm = '/fan_pwm'
Example #9
0
 def __init__(self,
              fantray_index=1,
              fan_index=1,
              psu_fan=False,
              dependency=None):
     FanBase.__init__(self)
     self.is_psu_fan = psu_fan
     if not self.is_psu_fan:
         # API index is starting from 0, DellEMC platform index is
         # starting from 1
         self.fantrayindex = fantray_index + 1
         self.fanindex = fan_index + 1
         self.index = (self.fantrayindex - 1) * 2 + self.fanindex
         self.prsnt_sensor = IpmiSensor(
             self.FAN_SENSOR_MAPPING[self.index]["Prsnt"], is_discrete=True)
         self.state_sensor = IpmiSensor(
             self.FAN_SENSOR_MAPPING[self.index]["State"], is_discrete=True)
         self.speed_sensor = IpmiSensor(
             self.FAN_SENSOR_MAPPING[self.index]["Speed"])
         self.fan_dir_raw_cmd = "0x3a 0x0a {}".format(fantray_index)
         if self.fanindex == 1:
             self.max_speed = 24700
         else:
             self.max_speed = 29700
     else:
         self.dependency = dependency
         self.fanindex = fan_index
         self.state_sensor = IpmiSensor(
             self.PSU_FAN_SENSOR_MAPPING[self.fanindex]["State"],
             is_discrete=True)
         self.speed_sensor = IpmiSensor(
             self.PSU_FAN_SENSOR_MAPPING[self.fanindex]["Speed"])
         self.fan_dir_raw_cmd = "0x3a 0x0a {}".format(7 + (fan_index - 1))
         self.max_speed = 26500
Example #10
0
 def __init__(self, fan_tray_index, fan_index=0):
     self.fan_index = fan_index
     self.fan_tray_index = fan_tray_index
     self.fan_presence = "fan{}_present"
     self.fan_direction = "fan{}_direction"
     self.fan_fault = "fan{}_{}_fault"
     self.fan_speed_rpm = "fan{}_{}_speed_rpm"
     FanBase.__init__(self)
Example #11
0
    def __init__(self, index, drawer_index, is_psu_fan=False, psu_index=0, conf=None):
        FanBase.__init__(self)

        self.fan_index = index
        self.drawer_index = drawer_index

        self._config = conf
        self._api_common = Common()
        self._name = self.get_name()
        self._is_psu_fan = is_psu_fan
Example #12
0
    def __init__(self, fan_index):
        self.index = fan_index
        self.config_data = {}
        self.fan_speed = 0
        FanBase.__init__(self)

        # dx010 fan attributes
        # Two EMC2305s located at i2c-13-4d and i2c-13-2e
        # to control a dual-fan module.
        self.dx010_emc2305_chip = [{
            'device': "13-002e",
            'index_map': [4, 3, 2, 1]
        }, {
            'device': "13-004d",
            'index_map': [2, 4, 3, 1]
        }]

        self.dx010_fan_gpio = [
            {
                'base': self.get_gpio_base()
            },
            {
                'prs': 10,
                'dir': 15,
                'color': {
                    'red': 31,
                    'green': 32
                }
            },
            {
                'prs': 11,
                'dir': 16,
                'color': {
                    'red': 29,
                    'green': 30
                }
            },
            {
                'prs': 12,
                'dir': 17,
                'color': {
                    'red': 35,
                    'green': 36
                }
            },
            {
                'prs': 13,
                'dir': 18,
                'color': {
                    'red': 37,
                    'green': 38
                }
            },
        ]
Example #13
0
    def __init__(self, index, is_psu_fan=False, psu_index=0, conf=None):
        FanBase.__init__(self)

        self._fan_index = index
        self._config = conf
        self._api_common = Common()

        self._is_psu_fan = is_psu_fan
        if self._is_psu_fan:
            self._initialize_psu_fan(psu_index)

        self._name = self.get_name()
Example #14
0
 def __init__(self,
              fan_tray_index,
              fan_index=0,
              is_psu_fan=False,
              psu_index=0):
     FanBase.__init__(self)
     self.fan_index = fan_index
     self.fan_tray_index = fan_tray_index
     self.is_psu_fan = is_psu_fan
     if self.is_psu_fan:
         self.psu_index = psu_index
     self._api_helper = APIHelper()
     self.index = self.fan_tray_index * 2 + self.fan_index
Example #15
0
 def __init__(self, fan_index):
     self.index = fan_index + 1
     self.psu_path = "/sys/bus/i2c/devices/"
     self.psu_fan_rpm_max = 10000
     self.psu_fan_rpm = "/psu_fan1_speed_rpm"
     if os.path.exists(self.psu_path + "9-0058"):
         self.psu_pmbus_mapping = {
             1: "9-0058",
             2: "10-0059",
         }
     else:
         self.psu_pmbus_mapping = {
             1: "32-0058",
             2: "33-0059",
         }
     FanBase.__init__(self)
Example #16
0
    def __init__(self,
                 fan_tray_index,
                 fan_index=0,
                 is_psu_fan=False,
                 psu_index=0):
        self._api_helper = APIHelper()
        self.fan_index = fan_index
        self.fan_tray_index = fan_tray_index
        self.is_psu_fan = is_psu_fan
        if self.is_psu_fan:
            self.psu_index = psu_index
            self.psu_i2c_num = PSU_I2C_MAPPING[self.psu_index]['num']
            self.psu_i2c_addr = PSU_I2C_MAPPING[self.psu_index]['addr']
            self.psu_hwmon_path = PSU_HWMON_I2C_PATH.format(
                self.psu_i2c_num, self.psu_i2c_addr)

        FanBase.__init__(self)
Example #17
0
    def __init__(self,
                 fan_tray_index,
                 fan_index=0,
                 is_psu_fan=False,
                 psu_index=0):
        self.fan_index = fan_index
        self.fan_tray_index = fan_tray_index
        self.is_psu_fan = is_psu_fan

        if self.is_psu_fan:
            self.psu_index = psu_index
            self.psu_i2c_num = PSU_I2C_MAPPING[self.psu_index]["num"]
            self.psu_i2c_addr = PSU_I2C_MAPPING[self.psu_index]["addr"]
            self.psu_hwmon_path = PSU_HWMON_I2C_PATH.format(
                self.psu_i2c_num, self.psu_i2c_addr)

        FanBase.__init__(self)
Example #18
0
    def __init__(self,
                 fantray_index=1,
                 fan_index=1,
                 psu_index=1,
                 psu_fan=False,
                 dependency=None):
        FanBase.__init__(self)
        self._target_speed = None
        self.is_psu_fan = psu_fan
        self.is_driver_initialized = True

        if not self.is_psu_fan:
            # Fan is 1-based in DellEMC platforms
            self.fantray_index = fantray_index
            self.index = fan_index
            self.dependency = dependency

            hwmon_dir = self.I2C_DIR +\
                    "{}/hwmon/".format(self.FAN_DEV_MAPPING[fantray_index][fan_index][0])
            hwmon_node = os.listdir(hwmon_dir)[0]
            self.fan_status_reg = hwmon_dir + hwmon_node +\
                    "/fan{}_alarm".format(self.FAN_DEV_MAPPING[fantray_index][fan_index][1])
            self.get_fan_speed_reg = hwmon_dir + hwmon_node +\
                    "/fan{}_input".format(self.FAN_DEV_MAPPING[fantray_index][fan_index][1])
            self.set_fan_speed_reg = hwmon_dir + hwmon_node +\
                    "/fan{}_target".format(self.FAN_DEV_MAPPING[fantray_index][fan_index][1])
            self.max_fan_speed = MAX_S6000_FAN_SPEED
            self.thermal_level_to_speed = THERMAL_LEVEL_FAN_SPEED
        else:
            self.psu_index = psu_index
            self.index = 1
            self.dependency = dependency
            self.set_fan_speed_reg = self.I2C_DIR +\
                    "i2c-1/1-005{}/fan1_target".format(10 - self.psu_index)

            hwmon_dir = self.I2C_DIR +\
                    "i2c-1/1-005{}/hwmon/".format(10 - self.psu_index)
            try:
                hwmon_node = os.listdir(hwmon_dir)[0]
            except OSError:
                hwmon_node = "hwmon*"
                self.is_driver_initialized = False

            self.get_fan_speed_reg = hwmon_dir + hwmon_node + '/fan1_input'
            self.max_fan_speed = MAX_S6000_PSU_FAN_SPEED
            self.thermal_level_to_speed = THERMAL_LEVEL_PSU_FAN_SPEED
Example #19
0
    def __init__(self,
                 fan_tray_index,
                 fan_index=0,
                 is_psu_fan=False,
                 psu_index=0):
        self.fan_index = fan_index
        self.fan_tray_index = fan_tray_index
        self.is_psu_fan = is_psu_fan
        self.psu_index = psu_index

        if self.is_psu_fan:
            psu_i2c_bus = PSU_HWMON_I2C_MAPPING[psu_index]["bus"]
            psu_i2c_addr = PSU_HWMON_I2C_MAPPING[psu_index]["addr"]
            self.psu_hwmon_path = PSU_I2C_PATH.format(psu_i2c_bus,
                                                      psu_i2c_addr)
            psu_i2c_bus = PSU_CPLD_I2C_MAPPING[psu_index]["bus"]
            psu_i2c_addr = PSU_CPLD_I2C_MAPPING[psu_index]["addr"]
            self.cpld_path = PSU_I2C_PATH.format(psu_i2c_bus, psu_i2c_addr)

        FanBase.__init__(self)
Example #20
0
 def __init__(self, fan_index):
     self.fan_tray_index = fan_index
     self.fan_presence = "fan{}_present"
     self.fan_direction = "fan{}_direction"
     self.fan_speed_rpm = "fan{}_input"
     FanBase.__init__(self)
Example #21
0
    def __init__(self, fan_tray_index, fan_index=0):
        self.fan_index = fan_index
        self.fan_tray_index = fan_tray_index

        FanBase.__init__(self)
Example #22
0
 def __init__(self, parent, fan):
     FanBase.__init__(self)
     self._parent = parent
     self._target_speed = None
     self._fan = fan