Example #1
0
    def validate_ffff_header(self):
        # Perform a quick validity check of the header.  Generally done when
        # importing an existing FFFF file.

        self.header_validity = FFFF_HDR_VALID

        # Check for erased header

        span = self.ffff_buf[self.header_offset:
                             self.header_offset+FFFF_HDR_LENGTH]
        if is_constant_fill(span, 0) or \
           is_constant_fill(span, 0xff):
            error("FFFF header validates as erased.")
            self.header_validity = FFFF_HDR_ERASED
            return self.header_validity

        # Valid sentinels?
        if self.sentinel != FFFF_SENTINEL or \
                self.tail_sentinel != FFFF_SENTINEL:
            error("Invalid sentinel")
            self.header_validity = FFFF_HDR_INVALID
            return self.header_validity

        # Verify sizes
        if not is_power_of_2(self.erase_block_size):
            error("Erase block size must be 2**n")
            self.header_validity = FFFF_HDR_INVALID
            return self.header_validity
        elif (self.flash_image_length % self.erase_block_size) != 0:
            error("Image length is not a multiple of erase bock size")
            self.header_validity = FFFF_HDR_INVALID
            return self.header_validity

        # Verify that the unused portions of the header are zeroed, per spec.
        span_start = self.header_offset + FFFF_HDR_OFF_ELEMENT_TBL + \
            len(self.elements) * FFFF_ELT_LENGTH
        span_end = self.header_offset + FFFF_HDR_OFF_TAIL_SENTINEL - \
            span_start
        if not is_constant_fill(self.ffff_buf[span_start:span_end], 0):
            error("Unused portions of header are not zeroed: " + str(span_start) + \
                " to " + str(span_end))
            self.header_validity = FFFF_HDR_INVALID
            return self.header_validity

        # check for elemental problems
        if not self.validate_element_table():
            error("Invalid element table.")
            self.header_validity = FFFF_HDR_INVALID

        return self.header_validity
Example #2
0
    def validate_ffff_header(self):
        # Perform a quick validity check of the header.  Generally done when
        # importing an existing FFFF file.

        self.header_validity = FFFF_HDR_VALID

        # Check for erased header

        span = self.ffff_buf[self.header_offset:self.header_offset +
                             FFFF_HDR_LENGTH]
        if is_constant_fill(span, 0) or \
           is_constant_fill(span, 0xff):
            error("FFFF header validates as erased.")
            self.header_validity = FFFF_HDR_ERASED
            return self.header_validity

        # Valid sentinels?
        if self.sentinel != FFFF_SENTINEL or \
                self.tail_sentinel != FFFF_SENTINEL:
            error("Invalid sentinel")
            self.header_validity = FFFF_HDR_INVALID
            return self.header_validity

        # Verify sizes
        if not is_power_of_2(self.erase_block_size):
            error("Erase block size must be 2**n")
            self.header_validity = FFFF_HDR_INVALID
            return self.header_validity
        elif (self.flash_image_length % self.erase_block_size) != 0:
            error("Image length is not a multiple of erase bock size")
            self.header_validity = FFFF_HDR_INVALID
            return self.header_validity

        # Verify that the unused portions of the header are zeroed, per spec.
        span_start = self.header_offset + FFFF_HDR_OFF_ELEMENT_TBL + \
            len(self.elements) * FFFF_ELT_LENGTH
        span_end = self.header_offset + FFFF_HDR_OFF_TAIL_SENTINEL - \
            span_start
        if not is_constant_fill(self.ffff_buf[span_start:span_end], 0):
            error("Unused portions of header are not zeroed: " + str(span_start) + \
                " to " + str(span_end))
            self.header_validity = FFFF_HDR_INVALID
            return self.header_validity

        # check for elemental problems
        if not self.validate_element_table():
            error("Invalid element table.")
            self.header_validity = FFFF_HDR_INVALID

        return self.header_validity
Example #3
0
    def validate_ffff_header(self):
        # Perform a quick validity check of the header.  Generally done when
        # importing an existing FFFF file.

        self.header_validity = FFFF_HDR_VALID

        # Check for erased header

        span = self.ffff_buf[self.header_offset:self.header_offset +
                             self.header_size]
        if is_constant_fill(span, 0) or \
           is_constant_fill(span, 0xff):
            error("FFFF header validates as erased.")
            self.header_validity = FFFF_HDR_ERASED
            return self.header_validity

        # Valid sentinels?
        if self.sentinel != FFFF_SENTINEL or \
                self.tail_sentinel != FFFF_SENTINEL:
            error("Invalid sentinel")
            self.header_validity = FFFF_HDR_INVALID
            return self.header_validity

        # Verify sizes
        if (self.header_size < FFFF_HEADER_SIZE_MIN) or \
           (self.header_size > FFFF_HEADER_SIZE_MAX):
            error("header_size is out of range")
            return self.header_validity
        elif not is_power_of_2(self.erase_block_size):
            error("Erase block size must be 2**n")
            self.header_validity = FFFF_HDR_INVALID
            return self.header_validity
        elif (self.flash_image_length % self.erase_block_size) != 0:
            error("Image length is not a multiple of erase bock size")
            self.header_validity = FFFF_HDR_INVALID
            return self.header_validity

        # Verify that the reserved portion of the header is zeroed.
        for rsvd in self.reserved:
            if rsvd != 0:
                error("Reserved fields are non-zero")
                self.header_validity = FFFF_HDR_INVALID
                return self.header_validity

        # Verify that the unused portions of the header are zeroed, per spec.
        span_start = self.header_offset + FFFF_HDR_OFF_ELEMENT_TBL + \
            len(self.elements) * FFFF_ELT_LENGTH
        span_end = self.header_offset + FFFF_HDR_OFF_TAIL_SENTINEL - \
            span_start
        if not is_constant_fill(self.ffff_buf[span_start:span_end], 0):
            error("Unused portions of FFFF header are non-zero: "
                  "(0x{0:x}-0x{1:x})".format(span_start, span_end))
            self.header_validity = FFFF_HDR_INVALID
            return self.header_validity

        # check for elemental problems
        if not self.validate_element_table():
            error("Invalid element table.")
            self.header_validity = FFFF_HDR_INVALID

        return self.header_validity
    def validate_ffff_header(self):
        # Perform a quick validity check of the header.  Generally done when
        # importing an existing FFFF file.

        self.header_validity = FFFF_HDR_VALID

        # Check for erased header

        span = self.ffff_buf[self.header_offset:
                             self.header_offset+self.header_size]
        if is_constant_fill(span, 0) or \
           is_constant_fill(span, 0xff):
            error("FFFF header validates as erased.")
            self.header_validity = FFFF_HDR_ERASED
            return self.header_validity

        # Valid sentinels?
        if self.sentinel != FFFF_SENTINEL or \
                self.tail_sentinel != FFFF_SENTINEL:
            error("Invalid sentinel")
            self.header_validity = FFFF_HDR_INVALID
            return self.header_validity

        # Verify sizes
        if (self.header_size < FFFF_HEADER_SIZE_MIN) or \
           (self.header_size > FFFF_HEADER_SIZE_MAX):
            error("header_size is out of range")
            return self.header_validity
        elif not is_power_of_2(self.erase_block_size):
            error("Erase block size must be 2**n")
            self.header_validity = FFFF_HDR_INVALID
            return self.header_validity
        elif (self.flash_image_length % self.erase_block_size) != 0:
            error("Image length is not a multiple of erase bock size")
            self.header_validity = FFFF_HDR_INVALID
            return self.header_validity

        # Verify that the reserved portion of the header is zeroed.
        for rsvd in self.reserved:
            if rsvd != 0:
                error("Reserved fields are non-zero")
                self.header_validity = FFFF_HDR_INVALID
                return self.header_validity

        # Verify that the unused portions of the header are zeroed, per spec.
        span_start = self.header_offset + FFFF_HDR_OFF_ELEMENT_TBL + \
            len(self.elements) * FFFF_ELT_LENGTH
        span_end = self.header_offset + FFFF_HDR_OFF_TAIL_SENTINEL - \
            span_start
        if not is_constant_fill(self.ffff_buf[span_start:span_end], 0):
            error("Unused portions of FFFF header are non-zero: "
                  "(0x{0:x}-0x{1:x})".format(span_start, span_end))
            self.header_validity = FFFF_HDR_INVALID
            return self.header_validity

        # check for elemental problems
        if not self.validate_element_table():
            error("Invalid element table.")
            self.header_validity = FFFF_HDR_INVALID

        return self.header_validity