github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/pkg/mount/mtd/chips.go (about)

     1  // Copyright 2019 the u-root 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 mtd
     6  
     7  import "fmt"
     8  
     9  // VendorFromID returns a Vendor or error given a VendorID.
    10  func VendorFromID(v VendorID) (Vendor, error) {
    11  	for _, vendor := range vendors {
    12  		if vendor.id == v {
    13  			return &vendor, nil
    14  		}
    15  	}
    16  	return nil, fmt.Errorf("%v: not a known vendor", v)
    17  }
    18  
    19  // VendorFromName returns a Vendor or error given a VendorName.
    20  func VendorFromName(v VendorName) (Vendor, error) {
    21  	for _, vendor := range vendors {
    22  		for _, n := range vendor.names {
    23  			if n == v {
    24  				return &vendor, nil
    25  			}
    26  		}
    27  	}
    28  	return nil, fmt.Errorf("%v: not a known vendor", v)
    29  }
    30  
    31  // Chip returns a Chip or error given a ChipID.
    32  func (v *vendor) Chip(id ChipID) (Chip, error) {
    33  	for _, d := range devices {
    34  		if d.vendor == v.names[0] && d.id == id {
    35  			return &d, nil
    36  		}
    37  	}
    38  	return nil, fmt.Errorf("no chip with id %#x for vendor %q", id, v.Synonyms())
    39  }
    40  
    41  // ID returns a VendorID.
    42  func (v *vendor) ID() VendorID {
    43  	return v.id
    44  }
    45  
    46  // Name returns the preferred VendorName.
    47  func (v *vendor) Name() VendorName {
    48  	return v.names[0]
    49  }
    50  
    51  // Synonyms returns all the synonyms.
    52  func (v *vendor) Synonyms() []VendorName {
    53  	return v.names[1:]
    54  }
    55  
    56  // ChipFromVIDDID will return a Chip struct, given a Vendor and Device ID.
    57  func ChipFromVIDDID(vid VendorID, did ChipID) (Chip, error) {
    58  	v, err := VendorFromID(vid)
    59  	if err != nil {
    60  		return nil, err
    61  	}
    62  	return v.Chip(did)
    63  }
    64  
    65  // ID returns the ChipID.
    66  func (c *ChipDevice) ID() ChipID {
    67  	return c.id
    68  }
    69  
    70  // Name returns the canonical chip name.
    71  func (c *ChipDevice) Name() ChipName {
    72  	return c.devices[0]
    73  }
    74  
    75  // Synonyms returns all synonyms for a chip.
    76  func (c *ChipDevice) Synonyms() []ChipName {
    77  	return c.devices[1:]
    78  }
    79  
    80  // Size returns a ChipSize in bytes.
    81  func (c *ChipDevice) Size() ChipSize {
    82  	return ChipSize(c.pageSize * c.numPages)
    83  }
    84  
    85  // String is a stringer for a ChipDevice.
    86  func (c *ChipDevice) String() string {
    87  	s := fmt.Sprintf("%s/%s: %d pages, %d pagesize, %#x bytes", c.vendor, c.devices[0], c.numPages, c.pageSize, c.Size())
    88  	if len(c.devices) > 1 {
    89  		s = s + fmt.Sprintf(", synonyms %v", c.devices[1:])
    90  	}
    91  	if len(c.remarks) > 0 {
    92  		s = s + fmt.Sprintf(", remarks: %s", c.remarks)
    93  	}
    94  	return s
    95  }
    96  
    97  // Supported returns true if a chip is supported by this package.
    98  func Supported(c Chip) bool {
    99  	return c.Size() != 0
   100  }