Regarding EEPROM limitations, both of these threads contain alot of useful information:
Note that the team has used larger 128KByte EEPROMs with the the BCM2073x, but only the lower 64KBytes will be used/accessed by the firmware.
On the other hand, the EEPROM driver API provides low level access to write to any EEPROM location, so the application can still use the upper 64KBytes by specifying a different I2C slave address than the one used for the lower 64KBytes, which is usually 0xA0/0xA1.
However, you cannot use this space to store app/patch code/configuration – only the apps own data using the raw EEPROM read/write API (note that none of the bleprofile_*NVRAM API will work with the upper 64K).
Note that the 16b/64k limitation is an EEPROM architecture issue more than a firmware related one. EEEPROMs always use 16 bit addresses, which limits their size to 64KBytes. The way EEPROM vendors work around this is to use a different slave address for the higher 64KBytes (so the same 16 bit address space is mapped to a physically different slave).
Unfortunately, the answer to my question cannot be found in
the references provided.
You can use NVRAM IDs between 0x00 and 0x6F and each item is limited to 255 bytes.
This post also discusses:
DLConfigVSLength - length of this volatile section.
ConfigDSLocation - location of the application code and data (also known as DS)
And how to manually manipulate these regions provided they do not overlap.