[PATCH] osmo-bts[master]: osmo-bts-sysmo eeprom.c Restore ability to read/write EEPROM

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Keith Whyte gerrit-no-reply at lists.osmocom.org
Tue Apr 3 09:35:58 UTC 2018


Hello Vadim Yanitskiy, Pau Espin Pedrol, Jenkins Builder,

I'd like you to reexamine a change.  Please visit

    https://gerrit.osmocom.org/7572

to look at the new patch set (#4).

osmo-bts-sysmo eeprom.c Restore ability to read/write EEPROM

This commit restores ability to read write to the
SuperFemto EEPROM.

Use offsetof() instead of casts to pointers when
calculating the address to pass to
eeprom_read() and eeprom_write()

Fixes: 7cf144b27d75fadfb4ec65019985bb10660a066a

Change-Id: Iaa7318387ad7bb248c261b1f428019244039e7d2
---
M src/osmo-bts-sysmo/eeprom.c
1 file changed, 7 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/72/7572/4

diff --git a/src/osmo-bts-sysmo/eeprom.c b/src/osmo-bts-sysmo/eeprom.c
index a7f3d77..472b78e 100644
--- a/src/osmo-bts-sysmo/eeprom.c
+++ b/src/osmo-bts-sysmo/eeprom.c
@@ -59,6 +59,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdint.h>
+#include <stddef.h>
 #include <string.h>
 
 #include "eeprom.h"
@@ -495,7 +496,7 @@
         case EEPROM_HDR_V2:
         {
             // Get a copy of the EEPROM section
-            err = eeprom_read( EEPROM_CFG_START_ADDR + ((uint32_t*)&ee.cfg.v1.sysInfo - (uint32_t*)&ee), sizeof(ee.cfg.v1.sysInfo), (char *)&ee.cfg.v1.sysInfo );
+            err = eeprom_read( EEPROM_CFG_START_ADDR + offsetof(eeprom_Cfg_t, cfg.v1.sysInfo), sizeof(ee.cfg.v1.sysInfo), (char *)&ee.cfg.v1.sysInfo );
             if ( err != sizeof(ee.cfg.v1.sysInfo) )
             {
                 PERROR( "Error while reading the EEPROM content (%d)\n", err );
@@ -602,7 +603,7 @@
             ee.cfg.v1.sysInfo.u16Crc = eeprom_crc( (uint8_t *)&ee.cfg.v1.sysInfo.u32Time, sizeof(ee.cfg.v1.sysInfo) - 2 * sizeof(uint16_t) );
 
             // Write it to the EEPROM
-            err = eeprom_write( EEPROM_CFG_START_ADDR + ((uint32_t*)&ee.cfg.v1.sysInfo - (uint32_t*)&ee), sizeof(ee.cfg.v1.sysInfo), (const char *) &ee.cfg.v1.sysInfo );
+            err = eeprom_write( EEPROM_CFG_START_ADDR + offsetof(eeprom_Cfg_t, cfg.v1.sysInfo), sizeof(ee.cfg.v1.sysInfo), (const char *) &ee.cfg.v1.sysInfo );
             if ( err != sizeof(ee.cfg.v1.sysInfo) )
             {
                 PERROR( "Error while writing to the EEPROM (%d)\n", err );
@@ -660,7 +661,7 @@
     	case EEPROM_HDR_V2:
         {
             // Get a copy of the EEPROM section 
-            err = eeprom_read( EEPROM_CFG_START_ADDR + ((uint32_t*)&ee.cfg.v1.rfClk - (uint32_t*)&ee), sizeof(ee.cfg.v1.rfClk), (char *)&ee.cfg.v1.rfClk );
+            err = eeprom_read( EEPROM_CFG_START_ADDR + offsetof(eeprom_Cfg_t, cfg.v1.rfClk), sizeof(ee.cfg.v1.rfClk), (char *)&ee.cfg.v1.rfClk );
             if ( err != sizeof(ee.cfg.v1.rfClk) )
             {
                 PERROR( "Error while reading the EEPROM content (%d)\n", err );
@@ -755,7 +756,7 @@
             ee.cfg.v1.rfClk.u16Crc = eeprom_crc( (uint8_t *)&ee.cfg.v1.rfClk.u32Time, sizeof(ee.cfg.v1.rfClk) - 2 * sizeof(uint16_t) );
 
             // Write it to the EEPROM
-            err = eeprom_write( EEPROM_CFG_START_ADDR + ((uint32_t*)&ee.cfg.v1.rfClk - (uint32_t*)&ee), sizeof(ee.cfg.v1.rfClk), (const char *) &ee.cfg.v1.rfClk );
+            err = eeprom_write( EEPROM_CFG_START_ADDR + offsetof(eeprom_Cfg_t, cfg.v1.rfClk), sizeof(ee.cfg.v1.rfClk), (const char *) &ee.cfg.v1.rfClk );
             if ( err != sizeof(ee.cfg.v1.rfClk) )
             {
                 PERROR( "Error while writing to the EEPROM (%d)\n", err );
@@ -1099,7 +1100,7 @@
             pCfgTxCal->u16Crc = eeprom_crc( (uint8_t *)&pCfgTxCal->u32Time, size - 2 * sizeof(uint16_t) );
 
             // Write it to the EEPROM
-            err = eeprom_write( EEPROM_CFG_START_ADDR + ((uint32_t*)pCfgTxCal - (uint32_t*)&ee), size, (const char *)pCfgTxCal );
+            err = eeprom_write( EEPROM_CFG_START_ADDR + ((uint8_t*)pCfgTxCal - (uint8_t*)&ee), size, (const char *)pCfgTxCal );
             if ( err != size )
             {
                 PERROR( "Error while writing to the EEPROM (%d)\n", err );
@@ -1592,7 +1593,7 @@
             pCfgRxCal->u16Crc = eeprom_crc( (uint8_t *)&pCfgRxCal->u32Time, size - 2 * sizeof(uint16_t) );
 
             // Write it to the EEPROM
-            err = eeprom_write( EEPROM_CFG_START_ADDR + ((uint32_t*)pCfgRxCal - (uint32_t*)&ee), size, (const char *)pCfgRxCal );
+            err = eeprom_write( EEPROM_CFG_START_ADDR + ((uint8_t*)pCfgRxCal - (uint8_t*)&ee), size, (const char *)pCfgRxCal );
             if ( err != size )
             {
                 PERROR( "Error while writing to the EEPROM (%d)\n", err );

-- 
To view, visit https://gerrit.osmocom.org/7572
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: Iaa7318387ad7bb248c261b1f428019244039e7d2
Gerrit-PatchSet: 4
Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Owner: Keith Whyte <keith at rhizomatica.org>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Keith Whyte <keith at rhizomatica.org>
Gerrit-Reviewer: Pau Espin Pedrol <pespin at sysmocom.de>
Gerrit-Reviewer: Vadim Yanitskiy <axilirator at gmail.com>



More information about the gerrit-log mailing list