📄 fpa_systest.c
字号:
/* * static char fpasccsid[] = "@(#)fpa_systest.c 1.1 7/30/92 Copyright Sun Microsystems"; * * Copyright (c) 1985 by Sun Microsystems, Inc * * * * * Author : Chad B. Rao * * Date : 1/16/86 .... Revision A 3/3/86 Revision B * Clayton Woo Modified to fit under sysdiag enviroment */#include <sys/types.h>#include "fpa.h"#include <sys/ioctl.h>#include <sundev/fpareg.h>#include <stdio.h>#include <sys/time.h>#include <errno.h>#include <sys/file.h>#include <math.h>#include <signal.h>#include "fpcrttypes.h"#define SYSTEST_ERROR 6#define FATAL 2typedef void (*func_ptr)(); /* to be used for casting */char *err_msg[] = { "Ierr", "Imask", "Ldptr", "Mapping Ram", "Micro Store Ram", "Register Ram Upper Half", "Simple Instruction", "Register Ram Lower Half", "Shadow Ram", "Pointer", "Pointer Incr. Decr.", "Lock", "F+", "Mode Register", "Wstatus Register", "Weitek Data Path", "Weitek Operation", "Weitek Status", "Jump Conditions", "Timing", "Linpack"};struct shadow_regs { u_long shreg_msw; u_long shreg_lsw;};struct shadow_regs shadow[] = { 0xE0000E00, 0xE0000E04, 0xE0000E08, 0xE0000E0C, 0xE0000E10, 0xE0000E14, 0xE0000E18, 0xE0000E1C, 0xE0000E20, 0xE0000E24, 0xE0000E28, 0xE0000E2C, 0xE0000E30, 0xE0000E34, 0xE0000E38, 0xE0000E3C};/* Lock test */struct registers { u_long reg_msw; u_long reg_lsw;};struct registers user[] = { 0xE0000C00, 0xE0000C04, 0xE0000C08, 0xE0000C0C, 0xE0000C10, 0xE0000C14, 0xE0000C18, 0xE0000C1C, 0xE0000C20, 0xE0000C24, 0xE0000C28, 0xE0000C2C, 0xE0000C30, 0xE0000C34, 0xE0000C38, 0xE0000C3C, 0xE0000C40, 0xE0000C44, 0xE0000C48, 0xE0000C4C, 0xE0000C50, 0xE0000C54, 0xE0000C58, 0xE0000C5C, 0xE0000C60, 0xE0000C64, 0xE0000C68, 0xE0000C6C, 0xE0000C70, 0xE0000C74, 0xE0000C78, 0xE0000C7C, 0xE0000C80, 0xE0000C84, 0xE0000C88, 0xE0000C8C, 0xE0000C90, 0xE0000C94, 0xE0000C98, 0xE0000C9C, 0xE0000CA0, 0xE0000CA4, 0xE0000CA8, 0xE0000CAC, 0xE0000CB0, 0xE0000CB4, 0xE0000CB8, 0xE0000CBC, 0xE0000CC0, 0xE0000CC4, 0xE0000CC8, 0xE0000CCC, 0xE0000CD0, 0xE0000CD4, 0xE0000CD8, 0xE0000CDC, 0xE0000CE0, 0xE0000CE4, 0xE0000CE8, 0xE0000CEC, 0xE0000CF0, 0xE0000CF4, 0xE0000CF8, 0xE0000CFC};/* * struct shadow_regs shadow[] = { * * 0xE0000E00, 0xE0000E04, 0xE0000E08, 0xE0000E0C, 0xE0000E10, 0xE0000E14, * 0xE0000E18, 0xE0000E1C, 0xE0000E20, 0xE0000E24, 0xE0000E28, * 0xE0000E2C, 0xE0000E30, 0xE0000E34, 0xE0000E38, 0xE0000E3C }; */struct dp_short { u_long addr;};/* * struct dp_short dps[] = { * * 0xE0000384, 0xE000038C, 0xE0000394, 0xE000039C, 0xE00003A4, 0xE00003AC, * 0xE00003B4, 0xE00003BC, 0xE00003C4, 0xE00003CC, 0xE00003D4, 0xE00003DC, * 0xE00003E4, 0xE00003EC, 0xE00003F4, 0xE00003FC }; */struct dp_short dps[] = { 0xE0000504, 0xE000050C, 0xE0000514, 0xE000051C, 0xE0000524, 0xE000052C, 0xE0000534, 0xE000053C, 0xE0000544, 0xE000054C, 0xE0000554, 0xE000055C, 0xE0000564, 0xE000056C, 0xE0000574, 0xE000057C};struct dp_ext { u_long addr; u_long addr_lsw;};struct dp_ext ext[] = { 0xE0001484, 0xE0001800, 0xE000148C, 0xE0001808, 0xE0001494, 0xE0001810, 0xE000149C, 0xE0001818, 0xE00014A4, 0xE0001820, 0xE00014AC, 0xE0001828, 0xE00014B4, 0xE0001830, 0xE00014BC, 0xE0001838, 0xE00014C4, 0xE0001840, 0xE00014CC, 0xE0001848, 0xE00014D4, 0xE0001850, 0xE00014DC, 0xE0001858, 0xE00014E4, 0xE0001860, 0xE00014EC, 0xE0001868, 0xE00014F4, 0xE0001870, 0xE00014FC, 0xE0001878};struct dp_cmd { u_long data;};struct dp_cmd nxt_cmd[] = { 0x000, 0x041, 0x082, 0x0C3, 0x104, 0x145, 0x186, 0x1C7, 0x208, 0x249, 0x28A, 0x2CB, 0x30C, 0x34D, 0x38E, 0x3CF, 0x410, 0x452, 0x493, 0x4D4, 0x515, 0x556, 0x597, 0x5D8, 0x619, 0x65A, 0x69B, 0x6DC, 0x71D, 0x75E, 0x79F};struct dp_cmd cmd[] = { 0x020040, 0x030081, 0x0400C2, 0x050103, 0x060144, 0x070185, 0x0801C6, 0x090207, 0x0A0248, 0x0B0289, 0x0C02CA, 0x0D030B, 0x0E034C, 0x0F038D, 0x1003CE, 0x11040F, 0x120450, 0x130491, 0x1404D2, 0x150513, 0x160554, 0x170595, 0x1805D6, 0x190617, 0x1A0658, 0x1B0699, 0x1C06DA, 0x1D071B, 0x1E075C, 0x1F079D};/* Pointer test */struct pointers { u_long start_addr; /* starting address */ u_long incr; /* increment */ u_long no_times; /* number of times to do */ u_long dp_addr; /* starting address for dp */ u_long dp_incr; /* increment for dp address */ u_long reg_value; /* value to be put into * register */ u_long opr_value; /* value used as an oeprand */ u_long result; /* the result to be checked * against */};struct pointers shrt[] ={ {0xE0000380, 8, 16, 0xE0001000, 0, 0x40000000, 0x40000000, 0x41000000}, {0xE0000384, 8, 16, 0xE0001000, 0, 0x40000000, 0x40180000, 0x40200000}, {0x0, 0, 0, 0x0, 0, 0, 0, 0}};struct pointers extend[] ={ {0xE0001300, 8, 16, 0xE0001800, 8, 0, 0, 0}, {0xE0001304, 8, 16, 0xE0001800, 8, 0, 0, 0}, {0x0, 0, 0, 0x0, 0, 0, 0, 0}};u_long sp_short[] ={ 0xE0000380, 0xE0000388, 0xE0000390, 0xE0000398, 0xE00003A0, 0xE00003A8, 0xE00003B0, 0xE00003B8, 0xE00003C0, 0xE00003C8, 0xE00003D0, 0xE00003D8, 0xE00003E0, 0xE00003E8, 0xE00003F0, 0xE00003F8};u_long dp_short[] ={ 0xE0000384, 0xE000038C, 0xE0000394, 0xE000039C, 0xE00003A4, 0xE00003AC, 0xE00003B4, 0xE00003BC, 0xE00003C4, 0xE00003CC, 0xE00003D4, 0xE00003DC, 0xE00003E4, 0xE00003EC, 0xE00003F4, 0xE00003FC};struct single_ext { u_long high; u_long low;};struct single_ext dp_extd[] ={ 0xE000180C, 0xE0001900, 0xE0001814, 0xE0001988, 0xE000181C, 0xE0001A10, 0xE0001824, 0xE0001A98, 0xE000182C, 0xE0001B20, 0xE0001834, 0xE0001BA8, 0xE000183C, 0xE0001C30, 0xE0001844, 0xE0001CB8, 0xE000184C, 0xE0001D40, 0xE0001854, 0xE0001DC8, 0xE000185C, 0xE0001E50, 0xE0001864, 0xE0001ED8, 0xE000186C, 0xE0001F60, 0xE0001874, 0xE0001FE8, 0xE000187C, 0xE0001870, 0xE0001804, 0xE00018F8};struct single_ext sp_extd[] ={ 0xE0001008, 0xE0001800, 0xE0001010, 0xE0001808, 0xE0001018, 0xE0001810, 0xE0001020, 0xE0001818, 0xE0001028, 0xE0001820, 0xE0001030, 0xE0001828, 0xE0001038, 0xE0001830, 0xE0001040, 0xE0001838, 0xE0001048, 0xE0001840, 0xE0001050, 0xE0001848, 0xE0001058, 0xE0001850, 0xE0001060, 0xE0001858, 0xE0001068, 0xE0001860, 0xE0001070, 0xE0001868, 0xE0001078, 0xE0001870, 0xE0001000, 0xE0001878};u_long cmd_reg[] ={ 0x0C020040, 0x10030081, 0x140400C2, 0x18050103, 0x1C060144, 0x20070185, 0x240801C6, 0x28090207, 0x2C0A0248, 0x300B0289, 0x340C02CA, 0x380D030B, 0x3C0E034C, 0x400F038D, 0x441003CE, 0x4811040F, 0x4C120450, 0x50130491, 0x541404D2, 0x58150513, 0x5C160554, 0x60170595, 0x641805D6, 0x68190617, 0x6C1A0658, 0x701B0699, 0x741C06DA, 0x781D071B, 0x7C1E075C};struct sp_dp_cmd { u_long reg1; u_long reg2; u_long reg3; u_long res;};struct sp_dp_cmd sp_dp_res[] ={ 0x40000000, 0x41000000, 0x40800000, 0x41800000, 0x40000000, 0x40200000, 0x40100000, 0x40300000};/* ptr_indec test */struct REGS { u_long reg;};struct REGS users[] = { 0xE0000C00, 0xE0000C08, 0xE0000C10, 0xE0000C18, 0xE0000C20, 0xE0000C28, 0xE0000C30, 0xE0000C38, 0xE0000C40, 0xE0000C48, 0xE0000C50, 0xE0000C58, 0xE0000C60, 0xE0000C68, 0xE0000C70, 0xE0000C78, 0xE0000C80, 0xE0000C88, 0xE0000C90, 0xE0000C98, 0xE0000CA0, 0xE0000CA8, 0xE0000CB0, 0xE0000CB8, 0xE0000CC0, 0xE0000CC8, 0xE0000CD0, 0xE0000CD8, 0xE0000CE0, 0xE0000CE8, 0xE0000CF0, 0xE0000CF8};struct ptr_command { u_long data;};struct ptr_command ptr_cmd[] ={ 0x10005, 0x20046, 0x30087, 0x400C8, 0x50109, 0x6014A, 0x7018B, 0x801CC, 0x9020D, 0xA024E, 0xB028F, 0xC02D0, 0xD0311, 0xE0352, 0xF0393, 0x1003D4, 0x110415, 0x120456, 0x130497, 0x1404D8, 0x150519, 0x16055A, 0x17059B, 0x1805DC, 0x19061D, 0x1A065E, 0x1B069F};u_long val[] = { 0x3FF00000, /* for dp 1 */ 0x40000000, /* for dp 2 */ 0x40080000, /* for dp 3 */ 0x40100000, /* for dp 4 */ 0x40140000 /* for dp 5 */};/* wlwf test */struct fvalue { u_long addr; u_long reg2; u_long reg3; u_long result;};struct fvalue fval[] = { 0xE0000A00, 0x40800000, 0x40400000, 0x3F800000,/* single subtract, f32 - f32, 4 - 3 = 1 */ 0xE0000A04, 0x40100000, 0x40080000, 0x3FF00000,/* double subtract, f32/64 - f32/64, 4 - 3 = 1 */ 0xE0000A10, 0xC0000000, 0x40000000, 0x40800000,/* single magnitude of difference, |f32 - f32|, |-2 - 2| = 4 */ 0xE0000A20, 0xC0800000, 0xC0000000, 0x40000000,/* single subtract of magnitudes, |f32| - |f32|, |-4| - |-2| = 2 */ 0xE0000A40, 0x40000000, 0x00000000, 0xC0000000,/* single negate, -f32 + 0 , 2 = -2 */ 0xE0000A80, 0x40000000, 0x40400000, 0x40A00000,/* single add, f32 + f32, 2 + 3 = 5 */ 0x0, 0x0, 0x0, 0x0 /* end of table */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -