As always with these things if you really want to understand what is going on, look at the code:https://sourceforge.net/p/lejos/code/69 ... /nxt/i2c.c
To answer your questions you need to understand a little history and the rather odd Lego i2c implementation...
1. The Lego implementation is not standard i2c it has various oddities (like extra delays and strange handling of stop and restart cases).
2. There have been several implementations of i2c in leJOS over the years, some less efficient than the current one.
LEGO_MODE turns on support for pretty much all of the strange i2c features of the LEGO firmware. You probably only need this if you are talking to the Lego Ultrasonic sensor, or some strange homebrew devices that was built to be compatible with the Lego protocol.
STANDARD_MODE is the alternative to LEGO_MODE it disables all of the Lego strange stuff and tries to be as close to normal i2c as possible (but remember this is a bit banged implementation, not hardware).
The above two are mode settings use one or the other.
The remaining settings are flags that can be added to either of the above modes.
HIGH_SPEED enables higher speed operation (approx 125KHz). If this bit is not set then the default speed of 9.6KHz is used.
ALWAYS_ACTIVE enables compatibility with an older leJOS i2c driver feature which kept the timer interrupt running all of the time (even if no i2c operations are in progress). This adds considerable cpu load and can impact program timing. It is unlikely that any program will need it unless they are using cpu based timing loops and are old.
NO_RELEASE means that after the completion of an i2c operation the i2c bus will not be released, instead the clock line will be held low. I seem to remember that this mode was needed for some devices that required a series of i2c operations to be issued without the bus being released to reprogram them.