summaryrefslogtreecommitdiff
path: root/util/autoport/log_reader.go
diff options
context:
space:
mode:
authorLeah Rowe <leah@libreboot.org>2024-07-16 03:57:08 +0100
committerLeah Rowe <leah@libreboot.org>2024-07-16 03:57:08 +0100
commitf367afabc1a9c35cee749efe5540af09914f14e2 (patch)
tree924624472479eb0affb3f79b39ec478152c1a2bc /util/autoport/log_reader.go
parent373c2eb23dfed9ca0cef80321e7d57ddaf550d35 (diff)
remove util/autoport
upstream has merged all of the changes that it contained, so we don't need this anymore. we'll have the newer upstream changes on the next general revision updates for coreboot, within config/coreboot/ Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'util/autoport/log_reader.go')
-rw-r--r--util/autoport/log_reader.go417
1 files changed, 0 insertions, 417 deletions
diff --git a/util/autoport/log_reader.go b/util/autoport/log_reader.go
deleted file mode 100644
index b0518d25..00000000
--- a/util/autoport/log_reader.go
+++ /dev/null
@@ -1,417 +0,0 @@
-package main
-
-import (
- "bufio"
- "flag"
- "fmt"
- "log"
- "os"
- "regexp"
- "strconv"
- "strings"
-)
-
-type LogDevReader struct {
- InputDirectory string
- ACPITables map[string][]byte
- EC []byte
-}
-
-func isXDigit(x uint8) bool {
- if x >= '0' && x <= '9' {
- return true
- }
- if x >= 'a' && x <= 'f' {
- return true
- }
- if x >= 'A' && x <= 'F' {
- return true
- }
- return false
-}
-
-type HexLine struct {
- length uint
- values [16]byte
- start uint
-}
-
-func (l *LogDevReader) ReadHexLine(line string) (hex HexLine) {
- hex.start = 0
- line = strings.Trim(line, " ")
- fmt.Sscanf(line, "%x:", &hex.start)
- ll, _ := fmt.Sscanf(line, "%x: %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x", &hex.start,
- &hex.values[0], &hex.values[1], &hex.values[2],
- &hex.values[3], &hex.values[4], &hex.values[5],
- &hex.values[6], &hex.values[7], &hex.values[8],
- &hex.values[9], &hex.values[10], &hex.values[11],
- &hex.values[12], &hex.values[13], &hex.values[14],
- &hex.values[15])
- hex.length = uint(ll - 1)
- return
-}
-
-func (l *LogDevReader) AssignHexLine(inp string, target []byte) []byte {
- hex := l.ReadHexLine(inp)
- if hex.start+hex.length > uint(len(target)) {
- target = target[0 : hex.start+hex.length]
- }
- copy(target[hex.start:hex.start+hex.length], hex.values[0:hex.length])
- return target
-}
-
-func (l *LogDevReader) GetEC() []byte {
- if l.EC != nil {
- return l.EC
- }
- l.EC = make([]byte, 0x100, 0x100)
-
- file, err := os.Open(l.InputDirectory + "/ectool.log")
- if err != nil {
- log.Fatal(err)
- }
- defer file.Close()
-
- scanner := bufio.NewScanner(file)
-
- for scanner.Scan() {
- line := scanner.Text()
- if len(line) > 7 && isXDigit(line[0]) && isXDigit(line[1]) && line[2] == ':' {
- l.EC = l.AssignHexLine(line, l.EC)
- }
- }
-
- if err := scanner.Err(); err != nil {
- log.Fatal(err)
- }
-
- return l.EC
-}
-
-func (l *LogDevReader) GetACPI() (Tables map[string][]byte) {
- if l.ACPITables != nil {
- return l.ACPITables
- }
- l.ACPITables = Tables
-
- file, err := os.Open(l.InputDirectory + "/acpidump.log")
- if err != nil {
- log.Fatal(err)
- }
- defer file.Close()
-
- scanner := bufio.NewScanner(file)
-
- Tables = map[string][]byte{}
-
- curTable := ""
- for scanner.Scan() {
- line := scanner.Text()
- /* Only supports ACPI tables up to 0x100000 in size, FIXME if needed */
- is_hexline, _ := regexp.MatchString(" *[0-9A-Fa-f]{4,5}: ", line)
- switch {
- case len(line) >= 6 && line[5] == '@':
- curTable = line[0:4]
- Tables[curTable] = make([]byte, 0, 0x100000)
- case is_hexline:
- Tables[curTable] = l.AssignHexLine(line, Tables[curTable])
- }
- }
-
- if err := scanner.Err(); err != nil {
- log.Fatal(err)
- }
-
- return
-}
-
-func (l *LogDevReader) GetPCIList() (PCIList []PCIDevData) {
- file, err := os.Open(l.InputDirectory + "/lspci.log")
- if err != nil {
- log.Fatal(err)
- }
- defer file.Close()
-
- scanner := bufio.NewScanner(file)
-
- PCIList = []PCIDevData{}
-
- for scanner.Scan() {
- line := scanner.Text()
- switch {
- case !(len(line) < 7 || !isXDigit(line[0]) || !isXDigit(line[1]) || line[2] != ':' || !isXDigit(line[3]) || !isXDigit(line[4]) || line[5] != '.' || !isXDigit(line[6])):
- cur := PCIDevData{}
- fmt.Sscanf(line, "%x:%x.%x", &cur.Bus, &cur.Dev, &cur.Func)
- lc := strings.LastIndex(line, ":")
- li := strings.LastIndex(line[0:lc], "[")
- if li < 0 {
- continue
- }
- ven := 0
- dev := 0
- fmt.Sscanf(line[li+1:], "%x:%x", &ven, &dev)
- cur.PCIDevID = uint16(dev)
- cur.PCIVenID = uint16(ven)
- cur.ConfigDump = make([]byte, 0x100, 0x1000)
- PCIList = append(PCIList, cur)
- case len(line) > 7 && isXDigit(line[0]) && line[1] == '0' && line[2] == ':':
- start := 0
- fmt.Sscanf(line, "%x:", &start)
- cur := &PCIList[len(PCIList)-1]
- cur.ConfigDump = l.AssignHexLine(line, cur.ConfigDump)
- }
- }
-
- if err := scanner.Err(); err != nil {
- log.Fatal(err)
- }
-
- return
-}
-
-func (l *LogDevReader) GetInteltool() (ret InteltoolData) {
- file, err := os.Open(l.InputDirectory + "/inteltool.log")
- if err != nil {
- log.Fatal(err)
- }
- defer file.Close()
-
- scanner := bufio.NewScanner(file)
- paragraph := ""
- ret.GPIO = map[uint16]uint32{}
- ret.RCBA = map[uint16]uint32{}
- ret.IOBP = map[uint32]uint32{}
- ret.IGD = map[uint32]uint32{}
- ret.MCHBAR = map[uint16]uint32{}
- ret.PMBASE = map[uint16]uint32{}
- for scanner.Scan() {
- line := scanner.Text()
- switch {
- case len(line) > 7 && line[0] == '0' && line[1] == 'x' && line[6] == ':' && paragraph == "RCBA":
- addr, value := 0, 0
- fmt.Sscanf(line, "0x%x: 0x%x", &addr, &value)
- ret.RCBA[uint16(addr)] = uint32(value)
- case len(line) > 11 && line[0] == '0' && line[1] == 'x' && line[10] == ':' && paragraph == "IOBP":
- addr, value := 0, 0
- fmt.Sscanf(line, "0x%x: 0x%x", &addr, &value)
- ret.IOBP[uint32(addr)] = uint32(value)
- case len(line) > 9 && line[0] == '0' && line[1] == 'x' && line[8] == ':' && paragraph == "IGD":
- addr, value := 0, 0
- fmt.Sscanf(line, "0x%x: 0x%x", &addr, &value)
- ret.IGD[uint32(addr)] = uint32(value)
- case len(line) > 7 && line[0] == '0' && line[1] == 'x' && line[6] == ':' && paragraph == "MCHBAR":
- addr, value := 0, 0
- fmt.Sscanf(line, "0x%x: 0x%x", &addr, &value)
- ret.MCHBAR[uint16(addr)] = uint32(value)
- case strings.Contains(line, "DEFAULT"):
- continue
- case strings.Contains(line, "DIFF"):
- continue
- case strings.HasPrefix(line, "gpiobase"):
- addr, value := 0, 0
- fmt.Sscanf(line, "gpiobase+0x%x: 0x%x", &addr, &value)
- ret.GPIO[uint16(addr)] = uint32(value)
- case strings.HasPrefix(line, "pmbase"):
- addr, value := 0, 0
- fmt.Sscanf(line, "pmbase+0x%x: 0x%x", &addr, &value)
- ret.PMBASE[uint16(addr)] = uint32(value)
- case strings.HasPrefix(line, "============="):
- paragraph = strings.Trim(line, "= ")
- }
- }
-
- if err := scanner.Err(); err != nil {
- log.Fatal(err)
- }
- return
-}
-
-func (l *LogDevReader) GetDMI() (ret DMIData) {
- file, err := os.Open(l.InputDirectory + "/dmidecode.log")
- if err != nil {
- log.Fatal(err)
- }
- defer file.Close()
-
- scanner := bufio.NewScanner(file)
- paragraph := ""
- for scanner.Scan() {
- line := scanner.Text()
- if !strings.HasPrefix(line, "\t") {
- paragraph = strings.TrimSpace(line)
- continue
- }
- idx := strings.Index(line, ":")
- if idx < 0 {
- continue
- }
- name := strings.TrimSpace(line[0:idx])
- value := strings.TrimSpace(line[idx+1:])
- switch paragraph + ":" + name {
- case "System Information:Manufacturer":
- ret.Vendor = value
- case "System Information:Product Name":
- ret.Model = value
- case "System Information:Version":
- ret.Version = value
- case "Chassis Information:Type":
- ret.IsLaptop = (value == "Notebook" || value == "Laptop")
- }
- }
-
- if err := scanner.Err(); err != nil {
- log.Fatal(err)
- }
- return
-}
-
-func (l *LogDevReader) GetAzaliaCodecs() (ret []AzaliaCodec) {
- cardno := -1
- for i := 0; i < 10; i++ {
- pin, err := os.Open(l.InputDirectory + "/pin_hwC" + strconv.Itoa(i) + "D0")
- if err == nil {
- pin.Close()
- cardno = i
- break
- }
- }
- if cardno == -1 {
- return
- }
- for codecno := 0; codecno < 10; codecno++ {
- cur := AzaliaCodec{CodecNo: codecno, PinConfig: map[int]uint32{}}
- codec, err := os.Open(l.InputDirectory + "/codec#" + strconv.Itoa(codecno))
- if err != nil {
- continue
- }
- defer codec.Close()
- pin, err := os.Open(l.InputDirectory + "/pin_hwC" + strconv.Itoa(cardno) +
- "D" + strconv.Itoa(codecno))
- if err != nil {
- continue
- }
- defer pin.Close()
-
- scanner := bufio.NewScanner(codec)
- for scanner.Scan() {
- line := scanner.Text()
- if strings.HasPrefix(line, "Codec:") {
- fmt.Sscanf(line, "Codec: %s", &cur.Name)
- continue
- }
- if strings.HasPrefix(line, "Vendor Id:") {
- fmt.Sscanf(line, "Vendor Id: 0x%x", &cur.VendorID)
- continue
- }
- if strings.HasPrefix(line, "Subsystem Id:") {
- fmt.Sscanf(line, "Subsystem Id: 0x%x", &cur.SubsystemID)
- continue
- }
- }
-
- scanner = bufio.NewScanner(pin)
- for scanner.Scan() {
- line := scanner.Text()
- addr := 0
- val := uint32(0)
- fmt.Sscanf(line, "0x%x 0x%x", &addr, &val)
- cur.PinConfig[addr] = val
- }
- ret = append(ret, cur)
- }
- return
-}
-
-func (l *LogDevReader) GetIOPorts() []IOPorts {
- file, err := os.Open(l.InputDirectory + "/ioports.log")
- if err != nil {
- log.Fatal(err)
- }
- defer file.Close()
- scanner := bufio.NewScanner(file)
- ret := make([]IOPorts, 0, 100)
- for scanner.Scan() {
- line := scanner.Text()
- el := IOPorts{}
- fmt.Sscanf(line, " %x-%x : %s", &el.Start, &el.End, &el.Usage)
- ret = append(ret, el)
- }
-
- if err := scanner.Err(); err != nil {
- log.Fatal(err)
- }
- return ret
-
-}
-
-func (l *LogDevReader) GetCPUModel() (ret []uint32) {
- file, err := os.Open(l.InputDirectory + "/cpuinfo.log")
- if err != nil {
- log.Fatal(err)
- }
- defer file.Close()
-
- scanner := bufio.NewScanner(file)
- ret = make([]uint32, 0, 100)
- proc := 0
- for scanner.Scan() {
- line := scanner.Text()
- sep := strings.Index(line, ":")
- if sep < 0 {
- continue
- }
- key := strings.TrimSpace(line[0:sep])
- val := strings.TrimSpace(line[sep+1:])
-
- if key == "processor" {
- proc, _ := strconv.Atoi(val)
- if len(ret) <= proc {
- ret = ret[0 : proc+1]
- }
- continue
- }
- if key == "cpu family" {
- family, _ := strconv.Atoi(val)
- ret[proc] |= uint32(((family & 0xf) << 8) | ((family & 0xff0) << 16))
- }
- if key == "model" {
- model, _ := strconv.Atoi(val)
- ret[proc] |= uint32(((model & 0xf) << 4) | ((model & 0xf0) << 12))
- }
- if key == "stepping" {
- stepping, _ := strconv.Atoi(val)
- ret[proc] |= uint32(stepping & 0xf)
- }
- }
-
- if err := scanner.Err(); err != nil {
- log.Fatal(err)
- }
- return
-}
-
-func (l *LogDevReader) HasPS2() bool {
- file, err := os.Open(l.InputDirectory + "/input_bustypes.log")
- if err != nil {
- log.Fatal(err)
- }
- defer file.Close()
- scanner := bufio.NewScanner(file)
- for scanner.Scan() {
- line := scanner.Text()
- if strings.Index(line, "0011") >= 0 {
- return true
- }
- }
- return false
-}
-
-var FlagLogInput = flag.String("input_log", ".", "Input log directory")
-var FlagLogMkLogs = flag.Bool("make_logs", false, "Dump logs")
-
-func MakeLogReader() *LogDevReader {
- if *FlagLogMkLogs {
- MakeLogs(*FlagLogInput)
- }
- return &LogDevReader{InputDirectory: *FlagLogInput}
-}