blob: 87eea30cc66c0df419846c3181f6170018ec32d0 [file] [log] [blame]
Zane Shelley5a266612019-08-15 16:23:53 -05001
2#include <isolator/hei_isolator.hpp>
Zane Shelley8deb0902019-10-14 15:52:27 -05003#include <register/hei_scom_register.hpp>
Zane Shelleyfc7ab192019-09-27 15:45:16 -05004#include <util/hei_flyweight.hpp>
Zane Shelley5a266612019-08-15 16:23:53 -05005
6namespace libhei
7{
8
9ReturnCode Isolator::initialize( void * i_buffer, size_t i_bufferSize,
10 bool i_forceInit )
11{
12 ReturnCode rc;
13
14 // BEGIN temporary code
15 HEI_INF( "Isolator::initialize(%p,%lu,%d)", i_buffer, i_bufferSize,
16 i_forceInit );
Zane Shelley65ed96a2019-10-14 13:06:11 -050017
Zane Shelley8deb0902019-10-14 15:52:27 -050018 Flyweight<ScomRegister> & sfw = Flyweight<ScomRegister>::getSingleton();
19 Flyweight<IdScomRegister> & ifw = Flyweight<IdScomRegister>::getSingleton();
20
21 sfw.get( ScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
22 REG_INST_DEFAULT, REG_ACCESS_RW, 0x01234567 } );
23 sfw.get( ScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
24 REG_INST_DEFAULT, REG_ACCESS_RW, 0x00112233 } );
25
26 ifw.get( IdScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
27 REG_INST_DEFAULT, REG_ACCESS_RW,
28 0x0123456789abcdef } );
29 ifw.get( IdScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
30 REG_INST_DEFAULT, REG_ACCESS_RW,
31 0x0011223344556677 } );
Zane Shelley5a266612019-08-15 16:23:53 -050032 // END temporary code
33
34 return rc;
35}
36
37void Isolator::uninitialize()
38{
Zane Shelleyd0af3582019-09-19 10:48:59 -050039 // Must flush the hardware register cache before deleting any
40 // HardwareRegister objects.
41 HardwareRegister::flushAll();
42
Zane Shelley5a266612019-08-15 16:23:53 -050043 // BEGIN temporary code
44 HEI_INF( "Isolator::uninitialize()" );
45 // END temporary code
Zane Shelleyfc7ab192019-09-27 15:45:16 -050046
47 // Remove all of the isolation objects stored in the flyweights.
Zane Shelley8deb0902019-10-14 15:52:27 -050048 Flyweight<ScomRegister>::getSingleton().clear();
49 Flyweight<IdScomRegister>::getSingleton().clear();
Zane Shelley5a266612019-08-15 16:23:53 -050050}
51
Zane Shelleyb406de42019-09-09 16:10:38 -050052ReturnCode Isolator::isolate( const std::vector<Chip> & i_chipList,
53 IsolationData & o_isoData ) const
Zane Shelley5a266612019-08-15 16:23:53 -050054{
55 ReturnCode rc;
56
57 // Flush the isolation data to ensure a clean slate.
58 o_isoData.clear();
59
Zane Shelleyd0af3582019-09-19 10:48:59 -050060 // Flush the hardware register cache to avoid using stale data.
61 HardwareRegister::flushAll();
62
Zane Shelley61565dc2019-09-18 21:57:10 -050063 // Analyze active error on each chip.
Zane Shelleyb406de42019-09-09 16:10:38 -050064 for ( auto const & chip : i_chipList )
65 {
Zane Shelley61565dc2019-09-18 21:57:10 -050066 // In order to access hardware, we must tell the HardwareRegisters which
67 // chip to access.
68 HardwareRegister::setAccessor( chip );
69
70 // 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
74
75 // Clean up the hardware accessor chip to prevent accidental hardware
76 // access.
77 HardwareRegister::clearAccessor();
Zane Shelleyb406de42019-09-09 16:10:38 -050078 }
Zane Shelley5a266612019-08-15 16:23:53 -050079
80 return rc;
81}
82
83} // end namespace libhei