github.com/linuxboot/fiano@v1.2.0/pkg/uefi/flashdescriptormap.go (about)

     1  // Copyright 2018 the LinuxBoot Authors. All rights reserved
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package uefi
     6  
     7  import (
     8  	"bytes"
     9  	"encoding/binary"
    10  	"fmt"
    11  )
    12  
    13  const (
    14  	// FlashDescriptorMapMaxBase is the maximum base address for a flash descriptor
    15  	// region
    16  	FlashDescriptorMapMaxBase = 0xe0
    17  
    18  	// FlashDescriptorMapSize is the size in byte of the FlashDescriptorMap
    19  	FlashDescriptorMapSize = 16
    20  )
    21  
    22  // FlashDescriptorMap represent an Intel flash descriptor. This object provides
    23  // accessors to the various descriptor fields.
    24  type FlashDescriptorMap struct {
    25  	// FLMAP0
    26  	ComponentBase      uint8
    27  	NumberOfFlashChips uint8
    28  	RegionBase         uint8
    29  	NumberOfRegions    uint8
    30  	// FLMAP1
    31  	MasterBase        uint8
    32  	NumberOfMasters   uint8
    33  	PchStrapsBase     uint8
    34  	NumberOfPchStraps uint8
    35  	// FLMAP2
    36  	ProcStrapsBase          uint8
    37  	NumberOfProcStraps      uint8
    38  	IccTableBase            uint8
    39  	NumberOfIccTableEntries uint8
    40  	// FLMAP3
    41  	DmiTableBase            uint8
    42  	NumberOfDmiTableEntries uint8
    43  	Reserved0               uint8
    44  	Reserved1               uint8
    45  }
    46  
    47  // NewFlashDescriptorMap initializes a FlashDescriptor from a slice of bytes.
    48  func NewFlashDescriptorMap(buf []byte) (*FlashDescriptorMap, error) {
    49  	r := bytes.NewReader(buf)
    50  	var descriptor FlashDescriptorMap
    51  	if err := binary.Read(r, binary.LittleEndian, &descriptor); err != nil {
    52  		return nil, err
    53  	}
    54  	return &descriptor, nil
    55  }
    56  
    57  func (d *FlashDescriptorMap) String() string {
    58  	return fmt.Sprintf("FlashDescriptorMap{NumberOfRegions=%v, NumberOfFlashChips=%v, NumberOfMasters=%v, NumberOfPCHStraps=%v, NumberOfProcessorStraps=%v, NumberOfICCTableEntries=%v, DMITableEntries=%v}",
    59  		d.NumberOfRegions,
    60  		d.NumberOfFlashChips,
    61  		d.NumberOfMasters,
    62  		d.NumberOfPchStraps,
    63  		d.NumberOfProcStraps,
    64  		d.NumberOfIccTableEntries,
    65  		d.NumberOfDmiTableEntries,
    66  	)
    67  }