From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arend van Spriel Date: Tue, 19 Mar 2013 12:45:30 +0100 Subject: Extracting (boardvendor and) boardtype In-Reply-To: References: <51483BB2.4050105@broadcom.com> <51484A79.5090505@broadcom.com> Message-ID: <51484FDA.1010706@broadcom.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: b43-dev@lists.infradead.org On 03/19/2013 12:37 PM, Rafa? Mi?ecki wrote: > 2013/3/19 Arend van Spriel : >> On 03/19/2013 12:18 PM, Rafa? Mi?ecki wrote: >>> >>> 2013/3/19 Jonas Gorski : >>>> >>>> On 19 March 2013 11:36, Rafa? Mi?ecki wrote: >>>>> >>>>> However take a look at siutils.c you're using internally at Broadcom. >>>>> I've found it in: >>>>> GPL_RT_AC66U_3004270/asuswrt/release/src-rt-6.x/shared/siutils.c >>>>> This file contains si_nvram_process. This function calls that >>>>> si_getdevpathintvar and getintvar I'm not sure about. Does >>>>> si_nvram_process prefer SPROM's boardtype (offset SROM_SSID==0x2 or >>>>> offset SSB_SPROM1_SPID==0x4) if it's available (not 0xFFFF)? >>>> >>>> >>>> The getdevpathintvar and getintvar are for extracting these values >>>> from nvram instead of SPROM - remember that embedded bcm47xx devices >>>> are "sprom"-less and have these values stored in nvram. Since there is >>>> only one global nvram, you need to prefix these values with the >>>> "pci/sb" device path to differentiate if you have more than one wifi >>>> chip (e.g. "sb/1/boardflags" or "pci/1/boardflags"). But this isn't >>>> necessarily done for single wifi devices, hence the getdevpathintvar >>>> -> getinvar path (as the fall back). >>> >>> >>> So what function does Broadcom use to extract something from SPROM? >> >> srom_var_init() > > OK, so for PCI: > 1) srom_var_init calls initvars_srom_pci > 2) initvars_srom_pci calls _initvars_srom_pci > 3) _initvars_srom_pci calls varbuf_append for every entry > > After all we end up with varbuf_t variable filled like an NVRAM > (foo=bar\0baz=qux\0). > > So AFAIU getdevpathintvar and getintvar are still used to access SPROM > (just in a form common for NVRAM), is that right? > > If the above is right, in si_nvram_process we access SPROM (with the > use of getdevpathintvar/getintvar). So it seems in si_nvram_process we > always prefer "boardtype", no matter if it comes from SPROM of NVRAM. > Is that correct? > Yes. Non-volatile variables take precedence to PCI config info regardless from which device, SPROM or flash, it was loaded. Gr. AvS