blob: becd1b1b14c7633cb570084d62bb57d06270c0ab [file] [log] [blame]
Zane Shelley5a266612019-08-15 16:23:53 -05001
2#include <isolator/hei_isolator.hpp>
Zane Shelley75e68e92019-10-18 16:16:23 -05003#include <register/hei_hardware_register.hpp>
Zane Shelleyfc7ab192019-09-27 15:45:16 -05004#include <util/hei_flyweight.hpp>
Zane Shelley5a266612019-08-15 16:23:53 -05005
Zane Shelley75e68e92019-10-18 16:16:23 -05006// BEGIN temporary code
7#include <register/hei_scom_register.hpp>
8// END temporary code
9
Zane Shelley5a266612019-08-15 16:23:53 -050010namespace libhei
11{
12
13ReturnCode Isolator::initialize( void * i_buffer, size_t i_bufferSize,
14 bool i_forceInit )
15{
16 ReturnCode rc;
17
18 // BEGIN temporary code
19 HEI_INF( "Isolator::initialize(%p,%lu,%d)", i_buffer, i_bufferSize,
20 i_forceInit );
Zane Shelley65ed96a2019-10-14 13:06:11 -050021
Zane Shelley8deb0902019-10-14 15:52:27 -050022 Flyweight<ScomRegister> & sfw = Flyweight<ScomRegister>::getSingleton();
23 Flyweight<IdScomRegister> & ifw = Flyweight<IdScomRegister>::getSingleton();
24
25 sfw.get( ScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
26 REG_INST_DEFAULT, REG_ACCESS_RW, 0x01234567 } );
27 sfw.get( ScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
28 REG_INST_DEFAULT, REG_ACCESS_RW, 0x00112233 } );
29
30 ifw.get( IdScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
31 REG_INST_DEFAULT, REG_ACCESS_RW,
32 0x0123456789abcdef } );
33 ifw.get( IdScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
34 REG_INST_DEFAULT, REG_ACCESS_RW,
35 0x0011223344556677 } );
Zane Shelley5a266612019-08-15 16:23:53 -050036 // END temporary code
37
38 return rc;
39}
40
41void Isolator::uninitialize()
42{
Zane Shelleyd0af3582019-09-19 10:48:59 -050043 // Must flush the hardware register cache before deleting any
44 // HardwareRegister objects.
45 HardwareRegister::flushAll();
46
Zane Shelley5a266612019-08-15 16:23:53 -050047 // BEGIN temporary code
48 HEI_INF( "Isolator::uninitialize()" );
49 // END temporary code
Zane Shelleyfc7ab192019-09-27 15:45:16 -050050
51 // Remove all of the isolation objects stored in the flyweights.
Zane Shelley8deb0902019-10-14 15:52:27 -050052 Flyweight<ScomRegister>::getSingleton().clear();
53 Flyweight<IdScomRegister>::getSingleton().clear();
Zane Shelley5a266612019-08-15 16:23:53 -050054}
55
Zane Shelleyb406de42019-09-09 16:10:38 -050056ReturnCode Isolator::isolate( const std::vector<Chip> & i_chipList,
57 IsolationData & o_isoData ) const
Zane Shelley5a266612019-08-15 16:23:53 -050058{
59 ReturnCode rc;
60
61 // Flush the isolation data to ensure a clean slate.
Zane Shelley93b61ad2019-10-16 20:41:03 -050062 o_isoData.flush();
Zane Shelley5a266612019-08-15 16:23:53 -050063
Zane Shelleyd0af3582019-09-19 10:48:59 -050064 // Flush the hardware register cache to avoid using stale data.
65 HardwareRegister::flushAll();
66
Zane Shelley61565dc2019-09-18 21:57:10 -050067 // Analyze active error on each chip.
Zane Shelleyb406de42019-09-09 16:10:38 -050068 for ( auto const & chip : i_chipList )
69 {
Zane Shelley61565dc2019-09-18 21:57:10 -050070 // BEGIN temporary code
Zane Shelleyb406de42019-09-09 16:10:38 -050071 HEI_INF( "Isolator::isolate(%p,%u)", chip.getChip(),
72 chip.getType() );
Zane Shelley61565dc2019-09-18 21:57:10 -050073 // END temporary code
Zane Shelleyb406de42019-09-09 16:10:38 -050074 }
Zane Shelley5a266612019-08-15 16:23:53 -050075
76 return rc;
77}
78
79} // end namespace libhei