@@ -181,14 +181,16 @@ func fpgaInfo(fname string, quiet bool) error {
181181}
182182
183183func fmeInfo (fname string , quiet bool ) error {
184- var f fpga.FME
185- var err error
186- f , err = fpga .NewFME (fname )
184+ fme , err := fpga .NewFME (fname )
187185 if err != nil {
188186 return err
189187 }
190- defer f .Close ()
191- return printFpgaFME (f , quiet )
188+ defer fme .Close ()
189+ // check that kernel API is compatible
190+ if _ , err := fme .GetAPIVersion (); err != nil {
191+ return errors .Wrap (err , "kernel API mismatch" )
192+ }
193+ return printFpgaFME (fme , quiet )
192194}
193195
194196func printFpgaFME (f fpga.FME , quiet bool ) (err error ) {
@@ -218,28 +220,33 @@ func printFpgaFME(f fpga.FME, quiet bool) (err error) {
218220}
219221
220222func portReleaseOrAssign (fname string , port uint , release , quiet bool ) error {
221- var f fpga.FME
222- var err error
223- f , err = fpga .NewFME (fname )
223+ fme , err := fpga .NewFME (fname )
224224 if err != nil {
225225 return err
226226 }
227- defer f .Close ()
227+ defer fme .Close ()
228+ // check that kernel API is compatible
229+ if _ , err := fme .GetAPIVersion (); err != nil {
230+ return errors .Wrap (err , "kernel API mismatch" )
231+ }
228232 if release {
229- return f .PortRelease (uint32 (port ))
233+ return fme .PortRelease (uint32 (port ))
230234 }
231- return f .PortAssign (uint32 (port ))
235+ return fme .PortAssign (uint32 (port ))
232236}
233237
234238func portInfo (fname string , quiet bool ) error {
235- var f fpga.Port
236- var err error
237- f , err = fpga .NewPort (fname )
239+ port , err := fpga .NewPort (fname )
238240 if err != nil {
239241 return err
240242 }
241- defer f .Close ()
242- return printFpgaPort (f , quiet )
243+ defer port .Close ()
244+ // check that kernel API is compatible
245+ if _ , err = port .GetAPIVersion (); err != nil {
246+ return errors .Wrap (err , "kernel API mismatch" )
247+ }
248+
249+ return printFpgaPort (port , quiet )
243250}
244251
245252func printFpgaPort (f fpga.Port , quiet bool ) (err error ) {
@@ -313,32 +320,37 @@ func printPCIeInfo(pci *fpga.PCIDevice, quiet bool) {
313320 }
314321}
315322
316- func doPR (dev , fname string , dryRun , quiet bool ) ( err error ) {
317- fp , err := fpga .NewPort (dev )
323+ func doPR (dev , fname string , dryRun , quiet bool ) error {
324+ port , err := fpga .NewPort (dev )
318325 if err != nil {
319- return
326+ return err
327+ }
328+ defer port .Close ()
329+ // check that kernel API is compatible
330+ if _ , err = port .GetAPIVersion (); err != nil {
331+ return errors .Wrap (err , "kernel API mismatch" )
320332 }
321- defer fp . Close ()
333+
322334 bs , err := bitstream .Open (fname )
323335 if err != nil {
324- return
336+ return err
325337 }
326338 defer bs .Close ()
327339
328340 if ! quiet {
329- fmt .Printf ("Before: Interface ID: %q AFU ID: %q\n " , fp .GetInterfaceUUID (), fp .GetAcceleratorTypeUUID ())
341+ fmt .Printf ("Before: Interface ID: %q AFU ID: %q\n " , port .GetInterfaceUUID (), port .GetAcceleratorTypeUUID ())
330342 fmt .Printf ("Programming %q to port %q: " , fname , dev )
331343 }
332- err = fp .PR (bs , dryRun )
344+ err = port .PR (bs , dryRun )
333345 if ! quiet {
334346 if err != nil {
335347 fmt .Println ("FAILED" )
336348 } else {
337349 fmt .Println ("OK" )
338350 }
339- fmt .Printf ("After : Interface ID: %q AFU ID: %q\n " , fp .GetInterfaceUUID (), fp .GetAcceleratorTypeUUID ())
351+ fmt .Printf ("After : Interface ID: %q AFU ID: %q\n " , port .GetInterfaceUUID (), port .GetAcceleratorTypeUUID ())
340352 }
341- return
353+ return err
342354}
343355
344356func listDevices (listFMEs , listPorts , quiet bool ) error {
0 commit comments