Exemplo n.º 1
0
    def _get_sdr_chunk(self, reservation_id, record_id, offset, length):
        print length
        req = create_request_by_name('GetSdr')
        req.reservation_id = reservation_id
        req.record_id = record_id
        req.offset = offset
        req.bytes_to_read = length
        retry = 5

        while True:
            retry -= 1
            if retry == 0:
                raise RetryError()
            rsp = self.send_message(req)
            if rsp.completion_code == constants.CC_OK:
                break
            elif rsp.completion_code == constants.CC_RES_CANCELED:
                req.reservation_id = self.reserve_sdr_repository()
                time.sleep(0.1)
                continue
            elif rsp.completion_code == constants.CC_TIMEOUT:
                time.sleep(0.1)
                continue
            elif rsp.completion_code == constants.CC_RESP_COULD_NOT_BE_PRV:
                time.sleep(0.1 * retry)
                continue
            else:
                check_completion_code(rsp.completion_code)

        return (rsp.next_record_id, rsp.data)
Exemplo n.º 2
0
 def rearm_sensor_events(self, sensor_number):
     """Rearm sensor events for the given sensor number.
     """
     req = create_request_by_name('RearmSensorEvents')
     req.sensor_number = sensor_number
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
Exemplo n.º 3
0
 def _clear_sdr_repository(self, cmd, reservation_id):
     req = create_request_by_name('ClearSdrRepository')
     req.reservation_id = reservation_id
     req.cmd = cmd
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     return rsp.status.erase_in_progress
Exemplo n.º 4
0
    def _get_sdr_chunk(self, reservation_id, record_id, offset, length):
        print length
        req = create_request_by_name('GetSdr')
        req.reservation_id = reservation_id
        req.record_id = record_id
        req.offset = offset
        req.bytes_to_read = length
        retry = 5

        while True:
            retry -= 1
            if retry == 0:
                raise RetryError()
            rsp = self.send_message(req)
            if rsp.completion_code == constants.CC_OK:
                break
            elif rsp.completion_code == constants.CC_RES_CANCELED:
                req.reservation_id = self.reserve_sdr_repository()
                time.sleep(0.1)
                continue
            elif rsp.completion_code == constants.CC_TIMEOUT:
                time.sleep(0.1)
                continue
            elif rsp.completion_code == constants.CC_RESP_COULD_NOT_BE_PRV:
                time.sleep(0.1 * retry)
                continue
            else:
                check_completion_code(rsp.completion_code)

        return (rsp.next_record_id, rsp.data)
Exemplo n.º 5
0
 def set_lan_configuration_parameters(self, channel, parameter_selector, data):
     req = create_request_by_name('SetLanConfigurationParameters')
     req.command.channel_number = channel
     req.parameter_selector = parameter_selector
     req.data = data
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
Exemplo n.º 6
0
 def get_power_level(self, fru_id, power_type):
     req = create_request_by_name('GetPowerLevel')
     req.fru_id = fru_id
     req.power_type = power_type
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     return PowerLevel(rsp)
Exemplo n.º 7
0
 def get_signaling_class(self, interface, channel):
     req = create_request_by_name('GetSignalingClass')
     req.channel_info.channel_number = channel
     req.channel_info.interface = interface
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     return rsp.channel_signaling.class_capability
Exemplo n.º 8
0
 def fru_control(self, fru_id, option):
     req = create_request_by_name('FruControl')
     req.fru_id = fru_id
     req.option = option
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     return rsp.rsp_data
Exemplo n.º 9
0
 def get_power_channel_status(self, starting_number):
     req = create_request_by_name('GetPowerChannelStatus')
     req.starting_power_channel_number = starting_number
     req.power_channel_count = 1
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     return PowerChannelStatus(rsp.data[0])
Exemplo n.º 10
0
 def set_lan_configuration_parameters(self, channel, parameter_selector, data):
     req = create_request_by_name('SetLanConfigurationParameters')
     req.command.channel_number = channel
     req.parameter_selector = parameter_selector
     req.data = data
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
Exemplo n.º 11
0
 def _clear_sdr_repository(self, cmd, reservation_id):
     req = create_request_by_name('ClearSdrRepository')
     req.reservation_id = reservation_id
     req.cmd = cmd
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     return rsp.status.erase_in_progress
Exemplo n.º 12
0
 def get_power_level(self, fru_id, power_type):
     req = create_request_by_name('GetPowerLevel')
     req.fru_id = fru_id
     req.power_type = power_type
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     return PowerLevel(rsp)
Exemplo n.º 13
0
    def set_sensor_thresholds(self, sensor_number, lun=0, unr=None, ucr=None,
                unc=None, lnc=None, lcr=None, lnr=None):
        """Set the sensor thresholds that are not 'None'

        `sensor_number`
        `unr` for upper non-recoverable
        `ucr` for upper critical
        `unc` for upper non-critical
        `lnc` for lower non-critical
        `lcr` for lower critical
        `lnr` for lower non-recoverable
        """
        req = create_request_by_name('SetSensorThresholds')
        req.sensor_number = sensor_number
        req.lun = lun
        if unr is not None:
            req.set_mask.unr = 1
            req.threshold.unr = unr
        if ucr is not None:
            req.set_mask.ucr = 1
            req.threshold.ucr = ucr
        if unc is not None:
            req.set_mask.unc = 1
            req.threshold.unc = unc
        if lnc is not None:
            req.set_mask.lnc = 1
            req.threshold.lnc = lnc
        if lcr is not None:
            req.set_mask.lcr = 1
            req.threshold.lcr = lcr
        if lnr is not None:
            req.set_mask.lnr = 1
            req.threshold.lnr = lnr
        rsp = self.send_message(req)
        check_completion_code(rsp.completion_code)
Exemplo n.º 14
0
 def get_power_channel_status(self, starting_number):
     req = create_request_by_name('GetPowerChannelStatus')
     req.starting_power_channel_number = starting_number
     req.power_channel_count = 1
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     return PowerChannelStatus(rsp.data[0])
Exemplo n.º 15
0
 def fru_control(self, fru_id, option):
     req = create_request_by_name('FruControl')
     req.fru_id = fru_id
     req.option = option
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     return rsp.rsp_data
Exemplo n.º 16
0
 def clear_fru_deactivation_lock(self, fru_id):
     req = create_request_by_name('SetFruActivationPolicy')
     req.fru_id = fru_id
     req.mask.deactivation_locked = 1
     req.set.deactivation_locked = 0
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
Exemplo n.º 17
0
 def get_signaling_class(self, interface, channel):
     req = create_request_by_name('GetSignalingClass')
     req.channel_info.channel_number = channel
     req.channel_info.interface = interface
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     return rsp.channel_signaling.class_capability
Exemplo n.º 18
0
 def get_led_state(self, fru_id, led_id):
     req = create_request_by_name('GetFruLedState')
     req.fru_id = fru_id
     req.led_id = led_id
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     return LedState(rsp)
Exemplo n.º 19
0
    def set_sensor_thresholds(self, sensor_number, lun=0, unr=None, ucr=None,
                unc=None, lnc=None, lcr=None, lnr=None):
        """Set the sensor thresholds that are not 'None'

        `sensor_number`
        `unr` for upper non-recoverable
        `ucr` for upper critical
        `unc` for upper non-critical
        `lnc` for lower non-critical
        `lcr` for lower critical
        `lnr` for lower non-recoverable
        """
        req = create_request_by_name('SetSensorThresholds')
        req.sensor_number = sensor_number
        req.lun = lun

        thresholds = dict(unr=unr, ucr=ucr, unc=unc, lnc=lnc, lcr=lcr, lnr=lnr)

        for k, v in thresholds.items():
            if v is not None:
                setattr(req.set_mask, k, 1)
                setattr(req.threshold, k, v)

        rsp = self.send_message(req)
        check_completion_code(rsp.completion_code)
Exemplo n.º 20
0
 def clear_fru_deactivation_lock(self, fru_id):
     req = create_request_by_name('SetFruActivationPolicy')
     req.fru_id = fru_id
     req.mask.deactivation_locked = 1
     req.set.deactivation_locked = 0
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
Exemplo n.º 21
0
 def get_led_state(self, fru_id, led_id):
     req = create_request_by_name('GetFruLedState')
     req.fru_id = fru_id
     req.led_id = led_id
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     return LedState(rsp)
Exemplo n.º 22
0
 def get_event_receiver(self):
     req = create_request_by_name('GetEventReceiver')
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     ipmb_address = rsp.event_receiver.ipmb_i2c_slave_address
     lun = rsp.event_receiver.lun
     return (ipmb_address, lun)
Exemplo n.º 23
0
 def get_event_receiver(self):
     req = create_request_by_name('GetEventReceiver')
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     ipmb_address = rsp.event_receiver.ipmb_i2c_slave_address
     lun = rsp.event_receiver.lun
     return (ipmb_address, lun)
Exemplo n.º 24
0
 def rearm_sensor_events(self, sensor_number):
     """Rearm sensor events for the given sensor number.
     """
     req = create_request_by_name('RearmSensorEvents')
     req.sensor_number = sensor_number
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
Exemplo n.º 25
0
    def send_message_with_name(self, name, *args, **kwargs):
        req = create_request_by_name(name)

        for k, v in kwargs.items():
            setattr(req, k, v)

        rsp = self.send_message(req)
        check_completion_code(rsp.completion_code)
        return rsp
Exemplo n.º 26
0
 def get_fan_level(self, fru_id):
     req = create_request_by_name('GetFanLevel')
     req.fru_id = fru_id
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     local_control_fan_level = None
     if rsp.data:
         local_control_fan_level = rsp.data[0]
     return (rsp.override_fan_level, local_control_fan_level)
Exemplo n.º 27
0
 def get_fan_level(self, fru_id):
     req = create_request_by_name('GetFanLevel')
     req.fru_id = fru_id
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     local_control_fan_level = None
     if rsp.data:
         local_control_fan_level = rsp.data[0]
     return (rsp.override_fan_level, local_control_fan_level)
Exemplo n.º 28
0
    def write_fru_data(self, data, offset=0, fru_id=0):
        req = create_request_by_name('WriteFruData')
        req.fru_id = fru_id

        for chunk in chunks(data, self.write_length):
            req.offset = offset
            req.data = chunk
            rsp = self.send_message(req)
            check_completion_code(rsp.completion_code)
            offset += len(chunk)
Exemplo n.º 29
0
    def write_fru_data(self, data, offset=0, fru_id=0):
        req = create_request_by_name('WriteFruData')
        req.fru_id = fru_id

        for chunk in chunks(data, self.write_length):
            req.offset = offset
            req.data = chunk
            rsp = self.send_message(req)
            check_completion_code(rsp.completion_code)
            offset += len(chunk)
Exemplo n.º 30
0
    def delete_sdr(self, record_id):
        """Deletes the sensor record specified by 'record_id'.
        """

        reservation_id = self.reserve_device_sdr_repository()
        req = create_request_by_name('DeleteSdr')
        req.reservation_id = reservation_id
        req.record_id = record_id
        rsp = self.send_message(req)
        check_completion_code(rsp.completion_code)
        return rsp.record_id
Exemplo n.º 31
0
    def delete_sdr(self, record_id):
        """Deletes the sensor record specified by 'record_id'.
        """

        reservation_id = self.reserve_device_sdr_repository()
        req = create_request_by_name('DeleteSdr')
        req.reservation_id = reservation_id
        req.record_id = record_id
        rsp = self.send_message(req)
        check_completion_code(rsp.completion_code)
        return rsp.record_id
Exemplo n.º 32
0
 def i2c_write_read(self, type, id, channel, address, count, data=None):
     req = create_request_by_name('MasterWriteRead')
     req.bus_id.type = type
     req.bus_id.id = id
     req.bus_id.channel = channel
     req.bus_id.slave_address = address
     req.read_count = count
     if data:
         req.data = data
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     return rsp.data
Exemplo n.º 33
0
    def partial_add_sdr(self,
                reservation_id, record_id, offset, progress, data):

        req = create_request_by_name('PartialAddSdr')
        req.reservation_id = reservation_id
        req.record_id = record_id
        req.offset = offset
        req.status.in_progress = progress
        req.data = data
        rsp = self.send_message(req)
        check_completion_code(rsp.completion_code)
        return rsp.record_id
Exemplo n.º 34
0
 def i2c_write_read(self, type, id, channel, address, count, data=None):
     req = create_request_by_name('MasterWriteRead')
     req.bus_id.type = type
     req.bus_id.id= id
     req.bus_id.channel = channel
     req.bus_id.slave_address = address
     req.read_count = count
     if data:
         req.data = data
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     return rsp.data
Exemplo n.º 35
0
 def get_lan_configuration_parameters(self, channel=0, parameter_selector=0,
         set_selector=0, block_selector=0, revision_only=0):
     req = create_request_by_name('GetLanConfigurationParameters')
     req.command.get_parameter_revision_only = revision_only
     if revision_only is not 1:
         req.command.channel_number = channel
         req.parameter_selector = parameter_selector
         req.set_selector = set_selector
         req.block_selector = block_selector
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     return rsp.data
Exemplo n.º 36
0
    def partial_add_sdr(self, reservation_id, record_id, offset, progress,
                        data):

        req = create_request_by_name('PartialAddSdr')
        req.reservation_id = reservation_id
        req.record_id = record_id
        req.offset = offset
        req.status.in_progress = progress
        req.data = data
        rsp = self.send_message(req)
        check_completion_code(rsp.completion_code)
        return rsp.record_id
Exemplo n.º 37
0
 def get_lan_configuration_parameters(self, channel=0, parameter_selector=0,
         set_selector=0, block_selector=0, revision_only=0):
     req = create_request_by_name('GetLanConfigurationParameters')
     req.command.get_parameter_revision_only = revision_only
     if revision_only is not 1:
         req.command.channel_number = channel
         req.parameter_selector = parameter_selector
         req.set_selector = set_selector
         req.block_selector = block_selector
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     return rsp.data
Exemplo n.º 38
0
 def finish_upload_and_wait(self, component, length,
         timeout=2, interval=0.1):
     """ Finish the firmware upload process and wait for
         long running command. """
     try:
         rsp = self.finish_firmware_upload(component, length)
         check_completion_code(rsp.completion_code)
     except CompletionCodeError, e:
         if e.cc == LONG_DURATION_CMD_IN_PROGRESS_CC:
             self.wait_for_long_duration_command(
                         constants.CMDID_HPM_FINISH_FIRMWARE_UPLOAD,
                         timeout, interval)
         else:
             raise HpmError('finish_firmware_upload CC=0x%02x' % e.cc)
Exemplo n.º 39
0
 def set_port_state(self, link_descr, state):
     req = create_request_by_name('SetPortState')
     req.link_info.channel = link_descr.channel
     req.link_info.interface = link_descr.interface
     req.link_info.port_0 = (link_descr.link_flags >> 0) & 1
     req.link_info.port_1 = (link_descr.link_flags >> 1) & 1
     req.link_info.port_2 = (link_descr.link_flags >> 2) & 1
     req.link_info.port_3 = (link_descr.link_flags >> 3) & 1
     req.link_info.type = link_descr.type
     req.link_info.sig_class = link_descr.sig_class
     req.link_info.type_extension = link_descr.extension
     req.link_info.grouping_id = link_descr.grouping_id
     req.state = state
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
Exemplo n.º 40
0
 def set_port_state(self, link_descr, state):
     req = create_request_by_name('SetPortState')
     req.link_info.channel = link_descr.channel
     req.link_info.interface = link_descr.interface
     req.link_info.port_0 = (link_descr.link_flags >> 0) & 1
     req.link_info.port_1 = (link_descr.link_flags >> 1) & 1
     req.link_info.port_2 = (link_descr.link_flags >> 2) & 1
     req.link_info.port_3 = (link_descr.link_flags >> 3) & 1
     req.link_info.type = link_descr.type
     req.link_info.sig_class = link_descr.sig_class
     req.link_info.type_extension = link_descr.extension
     req.link_info.grouping_id = link_descr.grouping_id
     req.state = state
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
Exemplo n.º 41
0
    def set_watchdog_timer(self, config):
        req = create_request_by_name('SetWatchdogTimer')
        req.timer_use.timer_use = config.timer_use
        req.timer_use.dont_stop = config.dont_stop and 1 or 0
        req.timer_use.dont_log = config.dont_log and 1 or 0

        req.timer_actions.pre_timeout_interrupt = \
                config.pre_timeout_interrupt
        req.timer_actions.timeout_action = \
                config.timeout_action

        req.pre_timeout_interval = config.pre_timeout_interval
        req.timer_use_expiration_flags = config.timer_use_expiration_flags
        req.initial_countdown = config.initial_countdown
        rsp = self.send_message(req)
        check_completion_code(rsp.completion_code)
Exemplo n.º 42
0
    def set_watchdog_timer(self, config):
        req = create_request_by_name('SetWatchdogTimer')
        req.timer_use.timer_use = config.timer_use
        req.timer_use.dont_stop = config.dont_stop and 1 or 0
        req.timer_use.dont_log = config.dont_log and 1 or 0

        req.timer_actions.pre_timeout_interrupt = \
                config.pre_timeout_interrupt
        req.timer_actions.timeout_action = \
                config.timeout_action

        req.pre_timeout_interval = config.pre_timeout_interval
        req.timer_use_expiration_flags = config.timer_use_expiration_flags
        req.initial_countdown = config.initial_countdown
        rsp = self.send_message(req)
        check_completion_code(rsp.completion_code)
Exemplo n.º 43
0
 def finish_upload_and_wait(self,
                            component,
                            length,
                            timeout=2,
                            interval=0.1):
     """ Finish the firmware upload process and wait for
         long running command. """
     try:
         rsp = self.finish_firmware_upload(component, length)
         check_completion_code(rsp.completion_code)
     except CompletionCodeError, e:
         if e.cc == LONG_DURATION_CMD_IN_PROGRESS_CC:
             self.wait_for_long_duration_command(
                 constants.CMDID_HPM_FINISH_FIRMWARE_UPLOAD, timeout,
                 interval)
         else:
             raise HpmError('finish_firmware_upload CC=0x%02x' % e.cc)
Exemplo n.º 44
0
    def sel_entries(self):
        """Generator which returns all SEL entries."""
        req = create_request_by_name('GetSelInfo')
        rsp = self.send_message(req)
        check_completion_code(rsp.completion_code)
        if rsp.entries == 0:
            return
        reservation_id = self.get_sel_reservation_id()
        next_record_id = 0
        while True:
            req = create_request_by_name('GetSelEntry')
            req.reservation_id = reservation_id
            req.record_id = next_record_id
            req.offset = 0
            self.max_req_len = 0xff  # read entire record

            record_data = ByteBuffer()
            while True:
                req.length = self.max_req_len
                if (self.max_req_len != 0xff
                        and (req.offset + req.length) > 16):
                    req.length = 16 - req.offset

                rsp = self.send_message(req)
                if rsp.completion_code == constants.CC_CANT_RET_NUM_REQ_BYTES:
                    if self.max_req_len == 0xff:
                        self.max_req_len = 16
                    else:
                        self.max_req_len -= 1
                    continue
                else:
                    check_completion_code(rsp.completion_code)

                record_data.append_array(rsp.record_data)
                req.offset = len(record_data)

                if len(record_data) >= 16:
                    break

            next_record_id = rsp.next_record_id

            yield SelEntry(record_data)
            if next_record_id == 0xffff:
                break
Exemplo n.º 45
0
    def sel_entries(self):
        """Generator which returns all SEL entries."""
        req = create_request_by_name('GetSelInfo')
        rsp = self.send_message(req)
        check_completion_code(rsp.completion_code)
        if rsp.entries == 0:
            return
        reservation_id = self.get_sel_reservation_id()
        next_record_id = 0
        while True:
            req = create_request_by_name('GetSelEntry')
            req.reservation_id = reservation_id
            req.record_id = next_record_id
            req.offset = 0
            self.max_req_len = 0xff # read entire record

            record_data = ByteBuffer()
            while True:
                req.length = self.max_req_len
                if (self.max_req_len != 0xff
                        and (req.offset + req.length) > 16):
                    req.length = 16 - req.offset

                rsp = self.send_message(req)
                if rsp.completion_code == constants.CC_CANT_RET_NUM_REQ_BYTES:
                    if self.max_req_len  == 0xff:
                        self.max_req_len = 16
                    else:
                        self.max_req_len -= 1
                    continue
                else:
                    check_completion_code(rsp.completion_code)

                record_data.append_array(rsp.record_data)
                req.offset = len(record_data)

                if len(record_data) >= 16:
                    break

            next_record_id = rsp.next_record_id

            yield SelEntry(record_data)
            if next_record_id == 0xffff:
                break
Exemplo n.º 46
0
    def set_fru_activation_policy(self, fru_id, ctrl):
        req = create_request_by_name('SetFruActivationPolicy')
        req.fru_id = fru_id

        if ctrl == self.ACTIVATION_LOCK_SET:
            req.mask.activation_locked = 1
            req.set.activation_locked = 1
        elif ctrl == self.ACTIVATION_LOCK_CLEAR:
            req.mask.activation_locked = 1
            req.set.activation_locked = 0
        elif ctrl == self.DEACTIVATION_LOCK_SET:
            req.mask.deactivation_locked = 1
            req.set.deactivation_locked = 1
        elif ctrl == self.DEACTIVATION_LOCK_CLEAR:
            req.mask.deactivation_locked = 1
            req.set.deactivation_locked = 0

        rsp = self.send_message(req)
        check_completion_code(rsp.completion_code)
Exemplo n.º 47
0
    def get_port_state(self, channel_number, channel_interface):
        req = create_request_by_name('GetPortState')
        req.channel.number = channel_number
        req.channel.interface = channel_interface
        rsp = self.send_message(req)
        check_completion_code(rsp.completion_code)

        if len(rsp.data) > 4:
            link = LinkDescriptor()
            link.channel = rsp.data[0] & 0x3F
            link.interface = rsp.data[0]>>6 & 0x3
            link.link_flags = rsp.data[1]&0xf
            link.type = rsp.data[1]>>4&0xf
            link.sig_class = rsp.data[2] &0xf
            link.extension = rsp.data[2]>>4&0xf
            link.grouping_id = rsp.data[3]
            state = rsp.data[4]

        return (link, state)
Exemplo n.º 48
0
    def get_port_state(self, channel_number, channel_interface):
        req = create_request_by_name('GetPortState')
        req.channel.number = channel_number
        req.channel.interface = channel_interface
        rsp = self.send_message(req)
        check_completion_code(rsp.completion_code)

        if len(rsp.data) > 4:
            link = LinkDescriptor()
            link.channel = rsp.data[0] & 0x3F
            link.interface = rsp.data[0] >> 6 & 0x3
            link.link_flags = rsp.data[1] & 0xf
            link.type = rsp.data[1] >> 4 & 0xf
            link.sig_class = rsp.data[2] & 0xf
            link.extension = rsp.data[2] >> 4 & 0xf
            link.grouping_id = rsp.data[3]
            state = rsp.data[4]

        return (link, state)
Exemplo n.º 49
0
    def set_sensor_thresholds(self,
                              sensor_number,
                              lun=0,
                              unr=None,
                              ucr=None,
                              unc=None,
                              lnc=None,
                              lcr=None,
                              lnr=None):
        """Set the sensor thresholds that are not 'None'

        `sensor_number`
        `unr` for upper non-recoverable
        `ucr` for upper critical
        `unc` for upper non-critical
        `lnc` for lower non-critical
        `lcr` for lower critical
        `lnr` for lower non-recoverable
        """
        req = create_request_by_name('SetSensorThresholds')
        req.sensor_number = sensor_number
        req.lun = lun
        if unr is not None:
            req.set_mask.unr = 1
            req.threshold.unr = unr
        if ucr is not None:
            req.set_mask.ucr = 1
            req.threshold.ucr = ucr
        if unc is not None:
            req.set_mask.unc = 1
            req.threshold.unc = unc
        if lnc is not None:
            req.set_mask.lnc = 1
            req.threshold.lnc = lnc
        if lcr is not None:
            req.set_mask.lcr = 1
            req.threshold.lcr = lcr
        if lnr is not None:
            req.set_mask.lnr = 1
            req.threshold.lnr = lnr
        rsp = self.send_message(req)
        check_completion_code(rsp.completion_code)
Exemplo n.º 50
0
    def initiate_upgrade_action(self, components_mask, action):
        """ Initiate Upgrade Action
        components:
        action:
            ACTION_BACKUP_COMPONENT = 0x00
            ACTION_PREPARE_COMPONENT = 0x01
            ACTION_UPLOAD_FOR_UPGRADE = 0x02
            ACTION_UPLOAD_FOR_COMPARE = 0x03
        """

        if action in (ACTION_UPLOAD_FOR_UPGRADE, ACTION_UPLOAD_FOR_COMPARE):
            if self._get_component_count(components_mask) != 1:
                raise HpmError("more than 1 component not support for action")

        req = create_request_by_name('InitiateUpgradeAction')
        req.components = components_mask
        req.action = action

        rsp = self.send_message(req)
        check_completion_code(rsp.completion_code)
Exemplo n.º 51
0
 def get_sensor_thresholds(self, sensor_number, lun=0):
     req = create_request_by_name('GetSensorThresholds')
     req.sensor_number = sensor_number
     req.lun = lun
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     thresholds = {}
     if rsp.readable_mask.unr:
         thresholds['unr'] = rsp.threshold.unr
     if rsp.readable_mask.ucr:
         thresholds['ucr'] = rsp.threshold.ucr
     if rsp.readable_mask.unc:
         thresholds['unc'] = rsp.threshold.unc
     if rsp.readable_mask.lnc:
         thresholds['lnc'] = rsp.threshold.lnc
     if rsp.readable_mask.lcr:
         thresholds['lcr'] = rsp.threshold.lcr
     if rsp.readable_mask.lnr:
         thresholds['lnr'] = rsp.threshold.lnr
     return thresholds
Exemplo n.º 52
0
    def initiate_upgrade_action(self, components_mask, action):
        """ Initiate Upgrade Action
        components:
        action:
            ACTION_BACKUP_COMPONENT = 0x00
            ACTION_PREPARE_COMPONENT = 0x01
            ACTION_UPLOAD_FOR_UPGRADE = 0x02
            ACTION_UPLOAD_FOR_COMPARE = 0x03
        """

        if action in (ACTION_UPLOAD_FOR_UPGRADE, ACTION_UPLOAD_FOR_COMPARE):
            if self._get_component_count(components_mask) != 1:
                raise HpmError("more than 1 component not support for action")

        req = create_request_by_name('InitiateUpgradeAction')
        req.components = components_mask
        req.action = action

        rsp = self.send_message(req)
        check_completion_code(rsp.completion_code)
Exemplo n.º 53
0
 def get_sensor_thresholds(self, sensor_number, lun=0):
     req = create_request_by_name('GetSensorThresholds')
     req.sensor_number = sensor_number
     req.lun = lun
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     thresholds = {}
     if rsp.readable_mask.unr:
         thresholds['unr'] = rsp.threshold.unr
     if rsp.readable_mask.ucr:
         thresholds['ucr'] = rsp.threshold.ucr
     if rsp.readable_mask.unc:
         thresholds['unc'] = rsp.threshold.unc
     if rsp.readable_mask.lnc:
         thresholds['lnc'] = rsp.threshold.lnc
     if rsp.readable_mask.lcr:
         thresholds['lcr'] = rsp.threshold.lcr
     if rsp.readable_mask.lnr:
         thresholds['lnr'] = rsp.threshold.lnr
     return thresholds
Exemplo n.º 54
0
def _clear_repository(reserve_fn, clear_fn, ctrl, retry, reservation):
    while True:
        retry -= 1
        if retry <= 0:
            raise RetryError()

        try:
            in_progress = clear_fn(ctrl, reservation)
        except CompletionCodeError as e:
            if e.cc == constants.CC_RES_CANCELED:
                time.sleep(0.2)
                reservation = reserve_fn()
                continue
            else:
                check_completion_code(e.cc)

        if in_progress == ERASURE_IN_PROGRESS:
            time.sleep(0.5)
            continue

        break
    return reservation
Exemplo n.º 55
0
    def read_fru_data(self, offset=None, count=None, fru_id=0):
        off = 0
        area_size = 0
        req_size = 32
        data = array.array('B')

        # first check for maximum area size
        if offset is None:
            area_size = self.get_fru_inventory_area_info(fru_id)
            off = 0
        else:
            area_size = offset + count
            off = offset

        while off < area_size:
            if (off + req_size) > area_size:
                req_size = area_size - off

            req = create_request_by_name('ReadFruData')
            req.fru_id = fru_id
            req.offset = off
            req.count = req_size
            try:
                rsp = self.send_message(req)
                check_completion_code(rsp.completion_code)
            except CompletionCodeError, e:
                if e.cc in (constants.CC_CANT_RET_NUM_REQ_BYTES,
                            constants.CC_REQ_DATA_FIELD_EXCEED,
                            constants.CC_PARAM_OUT_OF_RANGE):
                    req_size -= 2
                    if req_size <= 0:
                        raise
                    continue
                else:
                    raise

            data.extend(rsp.data)
            off += rsp.count
Exemplo n.º 56
0
    def read_fru_data(self, offset=None, count=None, fru_id=0):
        off = 0
        area_size = 0
        req_size = 32
        data = array.array('B')

        # first check for maximum area size
        if offset is None:
            area_size = self.get_fru_inventory_area_info(fru_id)
            off = 0
        else:
            area_size = offset + count
            off = offset

        while off < area_size:
            if (off + req_size) > area_size:
                req_size = area_size - off

            req = create_request_by_name('ReadFruData')
            req.fru_id = fru_id
            req.offset = off
            req.count = req_size
            try:
                rsp = self.send_message(req)
                check_completion_code(rsp.completion_code)
            except CompletionCodeError, e:
                if e.cc in (constants.CC_CANT_RET_NUM_REQ_BYTES,
                            constants.CC_REQ_DATA_FIELD_EXCEED,
                            constants.CC_PARAM_OUT_OF_RANGE):
                    req_size -= 2
                    if req_size <= 0:
                        raise
                    continue
                else:
                    raise

            data.extend(rsp.data)
            off += rsp.count
Exemplo n.º 57
0
    def get_sensor_reading(self, sensor_number, lun=0):
        """Returns the sensor reading at the assertion states for the given
        sensor number.

        `sensor_number`

        Returns a tuple with `raw reading`and `assertion states`.
        """
        req = create_request_by_name('GetSensorReading')
        req.sensor_number = sensor_number
        req.lun = lun
        rsp = self.send_message(req)
        check_completion_code(rsp.completion_code)

        reading = rsp.sensor_reading
        if rsp.config.initial_update_in_progress:
            reading = None

        states = None
        if rsp.states1 is not None:
            states = rsp.states1
        if rsp.states2 is not None:
            states |= (rsp.states2 << 8)
        return (reading, states)
Exemplo n.º 58
0
def clear_repository_helper(reserve_fn, clear_fn, retry=5, reservation=None):
    """Helper function to start repository erasure and wait until finish.
    This helper is used by clear_sel and clear_sdr_repository.
    """

    reservation = reserve_fn()

    # start erasure
    while True:
        retry -= 1
        if retry <= 0:
            raise RetryError()

        try:
            clear_fn(INITIATE_ERASE, reservation)
        except CompletionCodeError, e:
            if e.cc == constants.CC_RES_CANCELED:
                time.sleep(0.2)
                reservation = reserve_fn()
                continue
            else:
                check_completion_code(e.cc)

        break
Exemplo n.º 59
0
 def reserve_sdr_repository(self):
     req = create_request_by_name('ReserveSdrRepository')
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     return rsp.reservation_id
Exemplo n.º 60
0
 def get_sdr_repository_allocation_info(self):
     req = create_request_by_name('GetSdrRepositoryAllocationInfo')
     rsp = self.send_message(req)
     check_completion_code(rsp.completion_code)
     return SdrRepositoryAllocationInfo(rsp)