@@ -13,11 +13,12 @@ namespace x86 {
1313struct softreset_t
1414{
1515 uint32_t checksum;
16- uintptr_t high_mem;
16+ uint64_t liveupdate_loc;
17+ uint64_t high_mem;
1718 MHz cpu_freq;
1819 uint32_t apic_ticks;
19- void * extra;
20- size_t extra_len;
20+ uint64_t extra;
21+ uint32_t extra_len;
2122};
2223
2324bool OS::is_softreset_magic (uint32_t value)
@@ -44,14 +45,15 @@ void OS::resume_softreset(intptr_t addr)
4445 data->checksum = csum_copy;
4546
4647 // / restore known values
47- OS::memory_end_ = data->high_mem ;
48+ OS::liveupdate_loc_ = data->liveupdate_loc ;
49+ OS::memory_end_ = data->high_mem ;
4850 OS::low_memory_size_ = 0x100000 ;
4951 OS::high_memory_size_ = OS::memory_end_ - 0x100000 ;
5052 OS::cpu_mhz_ = data->cpu_freq ;
5153 x86::apic_timer_set_ticks (data->apic_ticks );
5254
5355 // / call service-specific softreset handler
54- softreset_service_handler (data->extra , data->extra_len );
56+ softreset_service_handler (( void *) data->extra , data->extra_len );
5557}
5658
5759extern " C"
@@ -60,10 +62,11 @@ void* __os_store_soft_reset(void* extra, size_t extra_len)
6062 // store softreset data in low memory
6163 auto * data = (softreset_t *) SOFT_RESET_LOCATION;
6264 data->checksum = 0 ;
65+ data->liveupdate_loc = (uintptr_t ) OS::liveupdate_storage_area ();
6366 data->high_mem = OS::memory_end ();
6467 data->cpu_freq = OS::cpu_freq ();
6568 data->apic_ticks = x86::apic_timer_get_ticks ();
66- data->extra = extra;
69+ data->extra = ( uint64_t ) extra;
6770 data->extra_len = extra_len;
6871
6972 uint32_t csum = crc32_fast (data, sizeof (softreset_t ));
0 commit comments