pci.go 666 Bytes
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package utils

import (
	"fmt"
	"strings"
)

// 0000:01:00.0    # 域0000,总线01,设备00,功能0
func PCIBus(id uint64, funcId uint) string {
	str := fmt.Sprintf("%X", id)
	fstr := fmt.Sprintf("%X", funcId)
	l := len(str)
	if l == 0 {
		return "0000:00:00." + fstr
	}
	if l <= 2 {
		return "0000:00" + ":" + strings.Repeat("0", 2-l) + str + "." + fstr
	}
	if l <= 4 {
		return "0000:" + strings.Repeat("0", 4-l) + str[:l-2] + ":" + str[l-2:] + "." + fstr
	}
	if l <= 8 {
		return strings.Repeat("0", 8-l) + str[:l-4] + ":" + str[l-4:l-2] + ":" + str[l-2:] + "." + fstr
	}
	strs := str[l-8:]
	return strs[:4] + ":" + str[4:6] + ":" + str[6:8] + "." + fstr
}