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 }