/* Writes to ut_os_version_index a zero-based index identifying the OS version and HW model. * Also sets up the syscalls table. * Should be called only once. * May be used for OS-specific arrays of constants (marked with "// OS-specific"). */ void ut_read_os_version_index(void) { switch (*(unsigned*)(0x10000020)) { #ifndef NDLESS_39 // OS-specific #ifndef NDLESS_36 case 0x102F0FA0: // 3.1.0 non-CAS ut_os_version_index = 0; break; case 0x102F16D0: // 3.1.0 CAS ut_os_version_index = 1; break; case 0x102F0A10: // 3.1.0 non-CAS CX ut_os_version_index = 2; break; case 0x102F11A0: // 3.1.0 CAS CX ut_os_version_index = 3; break; case 0x102DBF20: // 3.1.0 CM-C ut_os_version_index = 4; break; case 0x102DC6B0: // 3.1.0 CAS CM-C ut_os_version_index = 5; break; #endif case 0x10375BB0: // 3.6.0 non-CAS ut_os_version_index = 6; break; case 0x103765F0: // 3.6.0 CAS ut_os_version_index = 7; break; case 0x10375620: // 3.6.0 non-CAS CX ut_os_version_index = 8; break; case 0x10376090: // 3.6.0 CAS CX ut_os_version_index = 9; break; #endif #if !defined(STAGE1) || NDLESS_39 == 39 case 0x1037CDE0: // 3.9.0 non-CAS ut_os_version_index = 10; break; case 0x1037D320: // 3.9.0 CAS ut_os_version_index = 11; break; case 0x1037C760: // 3.9.0 non-CAS CX ut_os_version_index = 12; break; case 0x1037CCC0: // 3.9.0 CAS CX ut_os_version_index = 13; break; #endif #if !defined(STAGE1) || NDLESS_39 == 391 case 0x1037D160: // 3.9.1 non-CAS CX ut_os_version_index = 16; break; case 0x1037D6C0: // 3.9.1 CAS CX ut_os_version_index = 17; break; #endif #ifndef STAGE1 case 0x10386E70: // 4.0.0.235 non-CAS CX ut_os_version_index = 18; break; case 0x103873B0: // 4.0.0.235 CAS CX ut_os_version_index = 19; break; #endif #if !defined(STAGE1) || NDLESS_403 case 0x1038C290: // 4.0.3.93 non-CAS CX ut_os_version_index = 20; break; case 0x1038C7D0: // 4.0.3.93 CAS CX ut_os_version_index = 21; break; #endif #if !defined(STAGE1) || NDLESS_420 case 0x1039C7A0: // 4.2.0.532 non-CAS CX ut_os_version_index = 22; break; case 0x1039CD20: // 4.2.0.532 CAS CX ut_os_version_index = 23; break; #endif #if !defined(STAGE1) // No installer for this yet :-/ case 0x103A3100: // 4.3.0.702 non-CAS CX ut_os_version_index = 24; break; case 0x103A3690: // 4.3.0.702 CAS CX ut_os_version_index = 25; break; #endif default: ut_calc_reboot(); } #ifndef STAGE1 sc_addrs_ptr = syscall_addrs[ut_os_version_index]; #endif }
void __attribute__ ((noreturn)) ut_panic(const char *msg) { puts(msg); ut_calc_reboot(); }