VirtualBox

Changeset 24020 in vbox for trunk/src/VBox/Devices


Ignore:
Timestamp:
Oct 23, 2009 11:03:34 AM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
53863
Message:

E1000: EEPROM save/load functions

Location:
trunk/src/VBox/Devices
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/DevE1000.cpp

    r23969 r24020  
    576576            eeprom.write(u32Wires);
    577577        }
     578
     579        int load(PSSMHANDLE pSSM)
     580        {
     581            return eeprom.load(pSSM);
     582        }
     583
     584        void save(PSSMHANDLE pSSM)
     585        {
     586            eeprom.save(pSSM);
     587        }
    578588#endif /* IN_RING3 */
    579589};
     
    860870    RTGCPHYS    addrMMReg;
    861871    /** MAC address obtained from the configuration. */
    862     RTMAC       macAddress;
     872    RTMAC       macConfigured;
    863873    /** Base port of I/O space region. */
    864874    RTIOPORT    addrIOPort;
     
    44134423static void e1kSaveConfig(E1KSTATE *pState, PSSMHANDLE pSSM)
    44144424{
    4415     SSMR3PutMem(pSSM, &pState->macAddress, sizeof(pState->macAddress));
     4425    SSMR3PutMem(pSSM, &pState->macConfigured, sizeof(pState->macConfigured));
    44164426    SSMR3PutU32(pSSM, pState->eChip);
    44174427}
     
    44874497#if 0 /** @todo FIXME: enable when bumping the version. */
    44884498    e1kSaveConfig(pState, pSSM);
     4499    pState->eeprom.save(pSSM);
    44894500#endif
    44904501    e1kDumpState(pState);
     
    45764587    {
    45774588        /* config checks */
    4578         RTMAC macAddress;
    4579         rc = SSMR3GetMem(pSSM, &macAddress, sizeof(macAddress));
     4589        RTMAC macConfigured;
     4590        rc = SSMR3GetMem(pSSM, &macConfigured, sizeof(macConfigured));
    45804591        AssertRCReturn(rc, rc);
    4581         if (   memcmp(&macAddress, &pState->macAddress, sizeof(macAddress))
     4592        if (   memcmp(&macConfigured, &pState->macConfigured, sizeof(macConfigured))
    45824593            && (uPass == 0 || !PDMDevHlpVMTeleportedAndNotFullyResumedYet(pDevIns)) )
    4583             LogRel(("%s: The mac address differs: config=%RTmac saved=%RTmac\n", INSTANCE(pState), &pState->macAddress, &macAddress));
     4594            LogRel(("%s: The mac address differs: config=%RTmac saved=%RTmac\n", INSTANCE(pState), &pState->macConfigured, &macConfigured));
    45844595
    45854596        E1KCHIP eChip;
     
    45954606    if (uPass == SSM_PASS_FINAL)
    45964607    {
     4608        if (uVersion > E1K_SAVEDSTATE_VERSION_VBOX_30)
     4609        {
     4610            rc = pState->eeprom.load(pSSM);
     4611            AssertRCReturn(rc, rc);
     4612        }
    45974613        /* the state */
    45984614        SSMR3GetMem(pSSM, &pState->auRegs, sizeof(pState->auRegs));
     
    47944810
    47954811    /* Get config params */
    4796     rc = CFGMR3QueryBytes(pCfgHandle, "MAC", pState->macAddress.au8,
    4797                           sizeof(pState->macAddress.au8));
     4812    rc = CFGMR3QueryBytes(pCfgHandle, "MAC", pState->macConfigured.au8,
     4813                          sizeof(pState->macConfigured.au8));
    47984814    if (RT_FAILURE(rc))
    47994815        return PDMDEV_SET_ERROR(pDevIns, rc,
     
    48674883
    48684884    /* Initialize the EEPROM */
    4869     pState->eeprom.init(pState->macAddress);
     4885    pState->eeprom.init(pState->macConfigured);
    48704886
    48714887    /* Initialize internal PHY */
  • trunk/src/VBox/Devices/Network/DevEEPROM.cpp

    r15955 r24020  
    2222#define LOG_GROUP LOG_GROUP_DEV_E1000   /// @todo Add a EEPROM logging group.
    2323#include <VBox/log.h>
     24#include <VBox/pdmdev.h>
    2425#include <iprt/string.h>
    2526#include "DevEEPROM.h"
     
    243244}
    244245
     246void EEPROM93C46::save(PSSMHANDLE pSSM)
     247{
     248    SSMR3PutU8(  pSSM, EEPROM93C46_SAVEDSTATE_VERSION);
     249    SSMR3PutU8(  pSSM, m_eState);
     250    SSMR3PutU8(  pSSM, m_eOp);
     251    SSMR3PutBool(pSSM, m_fWriteEnabled);
     252    SSMR3PutU32( pSSM, m_u32InternalWires);
     253    SSMR3PutU16( pSSM, m_u16Word);
     254    SSMR3PutU16( pSSM, m_u16Mask);
     255    SSMR3PutU16( pSSM, m_u16Addr);
     256    SSMR3PutMem( pSSM, m_au16Data, sizeof(m_au16Data));
     257}
     258
     259int EEPROM93C46::load(PSSMHANDLE pSSM)
     260{
     261    int rc = VINF_SUCCESS;
     262    uint8_t uVersion = 0;
     263
     264    rc = SSMR3GetU8(pSSM, &uVersion);
     265    AssertRCReturn(rc, rc);
     266    if (uVersion != EEPROM93C46_SAVEDSTATE_VERSION)
     267        return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION;
     268
     269    rc = SSMR3GetU8(  pSSM, (uint8_t*)&m_eState);
     270    AssertRCReturn(rc, rc);
     271    rc = SSMR3GetU8(  pSSM, (uint8_t*)&m_eOp);
     272    AssertRCReturn(rc, rc);
     273    rc = SSMR3GetBool(pSSM, &m_fWriteEnabled);
     274    AssertRCReturn(rc, rc);
     275    rc = SSMR3GetU32( pSSM, &m_u32InternalWires);
     276    AssertRCReturn(rc, rc);
     277    rc = SSMR3GetU16( pSSM, &m_u16Word);
     278    AssertRCReturn(rc, rc);
     279    rc = SSMR3GetU16( pSSM, &m_u16Mask);
     280    AssertRCReturn(rc, rc);
     281    rc = SSMR3GetU16( pSSM, &m_u16Addr);
     282    AssertRCReturn(rc, rc);
     283    rc = SSMR3GetMem( pSSM, m_au16Data, sizeof(m_au16Data));
     284
     285    return rc;
     286}
  • trunk/src/VBox/Devices/Network/DevEEPROM.h

    r23966 r24020  
    2222/* Interface */
    2323#include <iprt/types.h>
     24
     25/** The current Saved state version. */
     26#define EEPROM93C46_SAVEDSTATE_VERSION 1
    2427
    2528/**
     
    7073
    7174    /** @todo save and load methods */
     75    void save(PSSMHANDLE pSSM);
     76    int  load(PSSMHANDLE pSSM);
    7277
    7378    /** Actual content of EEPROM */
  • trunk/src/VBox/Devices/testcase/tstDeviceStructSizeGC.cpp

    r22885 r24020  
    12781278    GEN_CHECK_OFF(E1KSTATE, hTxSem);
    12791279    GEN_CHECK_OFF(E1KSTATE, addrMMReg);
    1280     GEN_CHECK_OFF(E1KSTATE, macAddress);
     1280    GEN_CHECK_OFF(E1KSTATE, macConfigured);
    12811281    GEN_CHECK_OFF(E1KSTATE, addrIOPort);
    12821282    GEN_CHECK_OFF(E1KSTATE, pciDevice);
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette