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
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
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