00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "coremark.h"
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #if (SEED_METHOD==SEED_VOLATILE)
00034 extern volatile ee_s32 seed1_volatile;
00035 extern volatile ee_s32 seed2_volatile;
00036 extern volatile ee_s32 seed3_volatile;
00037 extern volatile ee_s32 seed4_volatile;
00038 extern volatile ee_s32 seed5_volatile;
00039 ee_s32 get_seed_32(int i) {
00040 ee_s32 retval;
00041 switch (i) {
00042 case 1:
00043 retval=seed1_volatile;
00044 break;
00045 case 2:
00046 retval=seed2_volatile;
00047 break;
00048 case 3:
00049 retval=seed3_volatile;
00050 break;
00051 case 4:
00052 retval=seed4_volatile;
00053 break;
00054 case 5:
00055 retval=seed5_volatile;
00056 break;
00057 default:
00058 retval=0;
00059 break;
00060 }
00061 return retval;
00062 }
00063 #elif (SEED_METHOD==SEED_ARG)
00064 ee_s32 parseval(char *valstring) {
00065 ee_s32 retval=0;
00066 ee_s32 neg=1;
00067 int hexmode=0;
00068 if (*valstring == '-') {
00069 neg=-1;
00070 valstring++;
00071 }
00072 if ((valstring[0] == '0') && (valstring[1] == 'x')) {
00073 hexmode=1;
00074 valstring+=2;
00075 }
00076
00077 if (hexmode) {
00078 while (((*valstring >= '0') && (*valstring <= '9')) || ((*valstring >= 'a') && (*valstring <= 'f'))) {
00079 ee_s32 digit=*valstring-'0';
00080 if (digit>9)
00081 digit=10+*valstring-'a';
00082 retval*=16;
00083 retval+=digit;
00084 valstring++;
00085 }
00086 } else {
00087 while ((*valstring >= '0') && (*valstring <= '9')) {
00088 ee_s32 digit=*valstring-'0';
00089 retval*=10;
00090 retval+=digit;
00091 valstring++;
00092 }
00093 }
00094
00095 if (*valstring=='K')
00096 retval*=1024;
00097 if (*valstring=='M')
00098 retval*=1024*1024;
00099
00100 retval*=neg;
00101 return retval;
00102 }
00103
00104 ee_s32 get_seed_args(int i, int argc, char *argv[]) {
00105 if (argc>i)
00106 return parseval(argv[i]);
00107 return 0;
00108 }
00109
00110 #elif (SEED_METHOD==SEED_FUNC)
00111
00112 ee_s32 get_seed_32(int i) {
00113 ee_s32 retval;
00114 switch (i) {
00115 case 1:
00116 retval=portme_sys1();
00117 break;
00118 case 2:
00119 retval=portme_sys2();
00120 break;
00121 case 3:
00122 retval=portme_sys3();
00123 break;
00124 case 4:
00125 retval=portme_sys4();
00126 break;
00127 case 5:
00128 retval=portme_sys5();
00129 break;
00130 default:
00131 retval=0;
00132 break;
00133 }
00134 return retval;
00135 }
00136 #endif
00137
00138
00139
00140
00141
00142 ee_u16 crcu8(ee_u8 data, ee_u16 crc )
00143 {
00144 ee_u8 i=0,x16=0,carry=0;
00145
00146 for (i = 0; i < 8; i++)
00147 {
00148 x16 = (ee_u8)((data & 1) ^ ((ee_u8)crc & 1));
00149 data >>= 1;
00150
00151 if (x16 == 1)
00152 {
00153 crc ^= 0x4002;
00154 carry = 1;
00155 }
00156 else
00157 carry = 0;
00158 crc >>= 1;
00159 if (carry)
00160 crc |= 0x8000;
00161 else
00162 crc &= 0x7fff;
00163 }
00164 return crc;
00165 }
00166 ee_u16 crcu16(ee_u16 newval, ee_u16 crc) {
00167 crc=crcu8( (ee_u8) (newval) ,crc);
00168 crc=crcu8( (ee_u8) ((newval)>>8) ,crc);
00169 return crc;
00170 }
00171 ee_u16 crcu32(ee_u32 newval, ee_u16 crc) {
00172 crc=crc16((ee_s16) newval ,crc);
00173 crc=crc16((ee_s16) (newval>>16) ,crc);
00174 return crc;
00175 }
00176
00177 ee_u16 crc16(ee_s16 newval, ee_u16 crc) {
00178 return crcu16((ee_u16)newval, crc);
00179 }
00180