I'm currently testing NonVolatile Option (nvo) support for myri10ge 
adapters.  It's working, but I need to nail down some loose ends before 
submitting the patches:

UI glitches
============

In the "config net0.nvo" GUI, there is no GUI way to clear a field once 
it is set, and there is no way to set a field to a zero-length string.
So, I'd like to modify the GUI so ^C clears the field, ESC abandons 
edits, and zero-length strings fields are supported.

Also, there are more nvo settings ing gPXE than will fit on screen.  I'd
like to make the screen list jump-scroll when there are more options 
than fit.  (I believe jump-scrolling is friendlier to serial consoles 
than scrolling a line at a time.)

Would such changes be acceptable?  Would I be replicating others' efforts?

nvs/nvo API
===========

Myri10ge NICs use a 1MB EEPROM comprised of 64KB blocks.  Blocks must be 
erased as a whole to an all-bits-set state, but may be written a byte at 
a time.  (This is typical EEPROM behavior, I believe.)  gPXE gets to use 
the last 64KB block for NVO.

Superficially, this fits the nvs/nvo model, but some problems arise in 
practice:  When I register a 64KB nvo block, gPXE tries to allocate 64KB 
at driver load, and fails.  So, I'm currently giving NVO only a single 
512 byte fragment, wasting the other 63.5KB of the block.

One problem lies in choosing the 'right' size for the NVO fragment.  If 
I make it too small, settings won't fit.  If I make it too large, 
malloc() will fail on more systems.  The 2 other gPXE drivers that 
support NVO provide 256 bytes or less of NVO fragments.

So, can anyone tell me the maximum legitimate NVO record length that 
gPXE can currently generate?

Another problem lies in the semantics of nvs writes: the documenting 
comments do not define what happens to unwritten bytes within the block. 
  Can we add "NVS writes leave any unwritten bytes within the written 
block in an undefined state." to clarify the semantics in an 
EEPROM-compatible way, without requiring any change the the extant drivers?

Production considerations
=========================

We'd like to ship a single gPXE ROM that is usable by as many of our 
customers as possible.  The default autoboot behaviour satisfies most, 
but some are asking pure nvo configuration without DHCP.  I can roll a 
custom ROM with a gPXE boot script for them, but this seems a waste when 
all they want to do is 'sanboot ${net0.nvo/root-path}' with the network 
interface configured via nvo.  The sanboot support is already in the 
default ROM, and it's a shame if they have to build and field-upgrade 
the ROM in each NIC just for a one-line boot script.

So, is there a way to do this without building a custom ROM?
If not, I'm thinking of adding a 'boot-script' nvo setting that is used 
if set.  Is there a better way?

Thanks,
--Glenn
_______________________________________________
gPXE mailing list
gPXE@etherboot.org
http://etherboot.org/mailman/listinfo/gpxe

Reply via email to