mirror of
				https://github.com/siderolabs/talos.git
				synced 2025-11-04 02:11:12 +01:00 
			
		
		
		
	See https://go.dev/doc/go1.19 Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// This Source Code Form is subject to the terms of the Mozilla Public
 | 
						|
// License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
						|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | 
						|
 | 
						|
package pci
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	"errors"
 | 
						|
	"fmt"
 | 
						|
	"io/fs"
 | 
						|
	"os"
 | 
						|
	"strconv"
 | 
						|
)
 | 
						|
 | 
						|
const sysfsPath = "/sys/bus/pci/devices/%s/%s"
 | 
						|
 | 
						|
func readID(busPath, name string) (uint16, error) {
 | 
						|
	contents, err := os.ReadFile(fmt.Sprintf(sysfsPath, busPath, name))
 | 
						|
	if err != nil {
 | 
						|
		return 0, err
 | 
						|
	}
 | 
						|
 | 
						|
	v, err := strconv.ParseUint(string(bytes.TrimSpace(contents)), 0, 16)
 | 
						|
 | 
						|
	return uint16(v), err
 | 
						|
}
 | 
						|
 | 
						|
// SysfsDeviceInfo looks up vendor and product ID from sysfs.
 | 
						|
func SysfsDeviceInfo(busPath string) (*Device, error) {
 | 
						|
	var (
 | 
						|
		d   Device
 | 
						|
		err error
 | 
						|
	)
 | 
						|
 | 
						|
	d.ProductID, err = readID(busPath, "device")
 | 
						|
	if err != nil {
 | 
						|
		if errors.Is(err, fs.ErrNotExist) {
 | 
						|
			return nil, nil
 | 
						|
		}
 | 
						|
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	d.VendorID, err = readID(busPath, "vendor")
 | 
						|
	if err != nil {
 | 
						|
		if errors.Is(err, fs.ErrNotExist) {
 | 
						|
			return nil, nil
 | 
						|
		}
 | 
						|
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	return &d, err
 | 
						|
}
 |