Merge pull request #497 from bart0sh/PR0094-move-GetAPIVersion-out-of-NewPort

fpga: move GetAPIVersion call out of NewPort and NewFME
This commit is contained in:
Alexander D. Kanevskiy 2020-11-11 12:09:13 +02:00 committed by GitHub
commit 75355c9937
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 38 additions and 43 deletions

View File

@ -181,14 +181,16 @@ func fpgaInfo(fname string, quiet bool) error {
} }
func fmeInfo(fname string, quiet bool) error { func fmeInfo(fname string, quiet bool) error {
var f fpga.FME fme, err := fpga.NewFME(fname)
var err error
f, err = fpga.NewFME(fname)
if err != nil { if err != nil {
return err return err
} }
defer f.Close() defer fme.Close()
return printFpgaFME(f, quiet) // check that kernel API is compatible
if _, err := fme.GetAPIVersion(); err != nil {
return errors.Wrap(err, "kernel API mismatch")
}
return printFpgaFME(fme, quiet)
} }
func printFpgaFME(f fpga.FME, quiet bool) (err error) { func printFpgaFME(f fpga.FME, quiet bool) (err error) {
@ -218,28 +220,33 @@ func printFpgaFME(f fpga.FME, quiet bool) (err error) {
} }
func portReleaseOrAssign(fname string, port uint, release, quiet bool) error { func portReleaseOrAssign(fname string, port uint, release, quiet bool) error {
var f fpga.FME fme, err := fpga.NewFME(fname)
var err error
f, err = fpga.NewFME(fname)
if err != nil { if err != nil {
return err return err
} }
defer f.Close() defer fme.Close()
if release { // check that kernel API is compatible
return f.PortRelease(uint32(port)) if _, err := fme.GetAPIVersion(); err != nil {
return errors.Wrap(err, "kernel API mismatch")
} }
return f.PortAssign(uint32(port)) if release {
return fme.PortRelease(uint32(port))
}
return fme.PortAssign(uint32(port))
} }
func portInfo(fname string, quiet bool) error { func portInfo(fname string, quiet bool) error {
var f fpga.Port port, err := fpga.NewPort(fname)
var err error
f, err = fpga.NewPort(fname)
if err != nil { if err != nil {
return err return err
} }
defer f.Close() defer port.Close()
return printFpgaPort(f, quiet) // check that kernel API is compatible
if _, err = port.GetAPIVersion(); err != nil {
return errors.Wrap(err, "kernel API mismatch")
}
return printFpgaPort(port, quiet)
} }
func printFpgaPort(f fpga.Port, quiet bool) (err error) { func printFpgaPort(f fpga.Port, quiet bool) (err error) {
@ -313,32 +320,37 @@ func printPCIeInfo(pci *fpga.PCIDevice, quiet bool) {
} }
} }
func doPR(dev, fname string, dryRun, quiet bool) (err error) { func doPR(dev, fname string, dryRun, quiet bool) error {
fp, err := fpga.NewPort(dev) port, err := fpga.NewPort(dev)
if err != nil { if err != nil {
return return err
} }
defer fp.Close() defer port.Close()
// check that kernel API is compatible
if _, err = port.GetAPIVersion(); err != nil {
return errors.Wrap(err, "kernel API mismatch")
}
bs, err := bitstream.Open(fname) bs, err := bitstream.Open(fname)
if err != nil { if err != nil {
return return err
} }
defer bs.Close() defer bs.Close()
if !quiet { if !quiet {
fmt.Printf("Before: Interface ID: %q AFU ID: %q\n", fp.GetInterfaceUUID(), fp.GetAcceleratorTypeUUID()) fmt.Printf("Before: Interface ID: %q AFU ID: %q\n", port.GetInterfaceUUID(), port.GetAcceleratorTypeUUID())
fmt.Printf("Programming %q to port %q: ", fname, dev) fmt.Printf("Programming %q to port %q: ", fname, dev)
} }
err = fp.PR(bs, dryRun) err = port.PR(bs, dryRun)
if !quiet { if !quiet {
if err != nil { if err != nil {
fmt.Println("FAILED") fmt.Println("FAILED")
} else { } else {
fmt.Println("OK") fmt.Println("OK")
} }
fmt.Printf("After : Interface ID: %q AFU ID: %q\n", fp.GetInterfaceUUID(), fp.GetAcceleratorTypeUUID()) fmt.Printf("After : Interface ID: %q AFU ID: %q\n", port.GetInterfaceUUID(), port.GetAcceleratorTypeUUID())
} }
return return err
} }
func listDevices(listFMEs, listPorts, quiet bool) error { func listDevices(listFMEs, listPorts, quiet bool) error {

View File

@ -56,10 +56,6 @@ func (f *DflFME) Close() error {
// NewDflFME Opens device. // NewDflFME Opens device.
func NewDflFME(dev string) (FME, error) { func NewDflFME(dev string) (FME, error) {
fme := &DflFME{DevPath: dev} fme := &DflFME{DevPath: dev}
// check that kernel API is compatible
if _, err := fme.GetAPIVersion(); err != nil {
return nil, errors.Wrap(err, "kernel API mismatch")
}
if err := checkVendorAndClass(fme); err != nil { if err := checkVendorAndClass(fme); err != nil {
return nil, err return nil, err
} }
@ -96,10 +92,6 @@ func (f *DflPort) Close() error {
// NewDflPort Opens device. // NewDflPort Opens device.
func NewDflPort(dev string) (Port, error) { func NewDflPort(dev string) (Port, error) {
port := &DflPort{DevPath: dev} port := &DflPort{DevPath: dev}
// check that kernel API is compatible
if _, err := port.GetAPIVersion(); err != nil {
return nil, errors.Wrap(err, "kernel API mismatch")
}
if err := checkVendorAndClass(port); err != nil { if err := checkVendorAndClass(port); err != nil {
return nil, err return nil, err
} }

View File

@ -53,10 +53,6 @@ func (f *IntelFpgaFME) Close() error {
// NewIntelFpgaFME Opens device. // NewIntelFpgaFME Opens device.
func NewIntelFpgaFME(dev string) (FME, error) { func NewIntelFpgaFME(dev string) (FME, error) {
fme := &IntelFpgaFME{DevPath: dev} fme := &IntelFpgaFME{DevPath: dev}
// check that kernel API is compatible
if _, err := fme.GetAPIVersion(); err != nil {
return nil, errors.Wrap(err, "kernel API mismatch")
}
if err := checkVendorAndClass(fme); err != nil { if err := checkVendorAndClass(fme); err != nil {
return nil, err return nil, err
} }
@ -90,11 +86,6 @@ func (f *IntelFpgaPort) Close() error {
// NewIntelFpgaPort Opens device. // NewIntelFpgaPort Opens device.
func NewIntelFpgaPort(dev string) (Port, error) { func NewIntelFpgaPort(dev string) (Port, error) {
port := &IntelFpgaPort{DevPath: dev} port := &IntelFpgaPort{DevPath: dev}
// check that kernel API is compatible
if _, err := port.GetAPIVersion(); err != nil {
port.Close()
return nil, errors.Wrap(err, "kernel API mismatch")
}
if err := checkVendorAndClass(port); err != nil { if err := checkVendorAndClass(port); err != nil {
port.Close() port.Close()
return nil, err return nil, err