19 #define LIBSMBIOS_SOURCE
41 using namespace smbios;
45 #if defined(DEBUG_SYSINFO)
46 # define DCOUT(line) do { cout << line; } while(0)
47 # define DCERR(line) do { cerr << line; } while(0)
49 # define DCOUT(line) do {} while(0)
50 # define DCERR(line) do {} while(0)
69 size_t ch = strlen(str);
94 else if( tagval > 0x14 )
96 else if( tagval > 0x0F )
98 else if( tagval > 0x0C )
100 else if( tagval > 0x09 )
113 if( ((tag)[0] & (1<<7)) == (1<<7) )
122 new_tag[2] =
dell_decode_digit( (((tag[1] & 0x01)<<4) | ((tag[2]>>4) & 0xF)) & 0x1F);
124 new_tag[0] = (tag[0] ^ (1<<7));
138 int uc = toupper(ch);
140 if ( uc >=
'0' && uc <=
'9' )
142 if ( uc >=
'B' && uc <=
'D' )
144 if ( uc >=
'F' && uc <=
'H' )
146 if ( uc >=
'J' && uc <=
'N' )
148 if ( uc >=
'P' && uc <=
'T' )
150 if ( uc >=
'V' && uc <=
'Z' )
152 return static_cast<unsigned char>(retval);
176 newTagBuf[0] = tagToSet[0] | 1<<7;
213 delete []
const_cast<char *
>(ptr);
219 u32 args[4] = {0,}, res[4] = {0,};
222 char *retval =
new char[16];
223 memset(retval,
'\0', 16);
225 memcpy(retval, reinterpret_cast<u8 *>(&(res[1])),
sizeof(res));
227 for(
size_t i=0; i<strlen(retval); i++)
228 if( static_cast<unsigned char>(retval[i]) == 0xFF ) retval[i] =
'\0';
236 u32 args[4] = {0,}, res[4] = {0,};
237 strncpy(reinterpret_cast<char *>(args), newTag, 12);
248 throw InternalErrorImpl();
250 const char *tempval = 0;
256 size_t slen = strlen(tempval);
257 char *retval =
new char[slen + 1];
258 strncpy(retval,tempval,slen);
262 if ( ! strlen(retval ))
274 DCOUT(
"in getServiceTagFromSysInfo()" << endl);
280 DCOUT(
"in getServiceTagFromSysEncl()" << endl);
290 DCOUT(
"in getServiceTagFromCMOSToken()" << endl);
294 throw InternalErrorImpl();
310 u16 indexPort, dataPort;
314 dynamic_cast< smbios::ICmosToken *
>(token)->getCMOSDetails( &indexPort, &dataPort, &location );
322 csum = (csum + cmos->
readByte( indexPort, dataPort, location + i )) & 0xFF;
326 csum = (csum - cmos->
readByte( indexPort, dataPort, location + SVC_TAG_CMOS_LEN_MAX )) & 0xFF;
328 throw "Bad checksum";
342 DCOUT(
"in getServiceTagFromSMI()" << endl);
362 char *serviceTag = 0;
366 DCOUT(
"numEntries: " << numEntries << endl);
368 for (
int i = 0; (i < numEntries) && (!serviceTag); ++i)
373 DCOUT(
" try #" << i << endl);
377 catch(
const exception &e)
379 DCOUT(
" Caught exception: " << e.what() << endl);
384 DCOUT(
" Caught unknown exception" << endl);
389 DCOUT(
" GOT TAG: -->" << serviceTag <<
"<--" << endl);
402 throw InternalErrorImpl();
420 u16 indexPort, dataPort;
424 dynamic_cast< smbios::ICmosToken *
>(token)->getCMOSDetails( &indexPort, &dataPort, &location );
432 csum = (csum + cmos->
readByte( indexPort, dataPort, location + i )) & 0xFF;
438 location + SVC_TAG_CMOS_LEN_MAX,
462 void (*f_ptr)(
const char *, size_t);
479 for (
int i = 0; (i < numEntries); ++i)
514 throw InternalErrorImpl();
525 u16 indexPort, dataPort;
529 dynamic_cast< smbios::ICmosToken *
>(token)->getCMOSDetails( &indexPort, &dataPort, &location );
537 csum = (csum + cmos->
readByte( indexPort, dataPort, location + i )) & 0xFF;
541 csum = (csum - cmos->
readByte( indexPort, dataPort, location + ASSET_TAG_CMOS_LEN_MAX )) & 0xFF;
543 throw "Bad checksum";
551 return reinterpret_cast<char*
>(tempval);
578 for (
int i = 0; (i < numEntries) && (!assetTag); ++i)
608 throw InternalErrorImpl();
617 u16 indexPort, dataPort;
621 dynamic_cast< smbios::ICmosToken *
>(token)->getCMOSDetails( &indexPort, &dataPort, &location );
629 csum = (csum + cmos->
readByte( indexPort, dataPort, location + i )) & 0xFF;
635 location + ASSET_TAG_CMOS_LEN_MAX,
655 void (*f_ptr)(
const char *, size_t);
673 for (
int i = 0; (i < numEntries); ++i)
716 for (
int i = 0; (i < numEntries) && (!systemName); ++i)
748 throw InternalErrorImpl();
755 biosVersion =
new u8[4];
757 biosVersion[3] =
'\0';
764 biosVersion =
new u8[4];
766 biosVersion[3] =
'\0';
769 return reinterpret_cast<char*
>(biosVersion);
793 for (
int i = 0; (i < numEntries) && (!systemName); ++i)
846 u8 tempData[2] = {0,0};
876 u8 tempData[2] = {0,0};
886 retval |= (*tempData << 8);
899 if( (retval & 0x8000) != user )
907 if ((user & 0xF000) == 0xF000 )
909 if( (retval & 0xFF00) != user )
917 if( (retval & 0xF000) != user )
931 if ( user == 0x0000 )
936 else if( (user & 0xF000) == 0xF000 )
950 u8 *tempData =
reinterpret_cast<u8*
>(&value);
972 memset(&tempUP, 0,
sizeof(tempUP));
975 unsigned int fp = 0xF0000;
977 while( fp < (0xFFFFFUL -
sizeof(tempUP)) )
980 reinterpret_cast<u8 *>(&tempUP),
985 if ( 0 == memcmp( &(tempUP.
anchor),
"_UP_", 4))
994 if( step_size > 1 && fp >= (0xFFFFFUL -
sizeof(tempUP)) )
1002 memcpy( up, &tempUP,
sizeof(tempUP) );
1008 =
false,
bool value=
false)
1018 memset( reinterpret_cast<u8*>(&up), 0,
sizeof(up));
1029 buf = (*tokenTable)[
NvramByte2_Token ]->getItemRef().getBufferCopy(length);
1069 delete []
const_cast<u8 *
>(buf);
1090 bool value = (state == 1) ?
true:
false;
1102 catch(
const exception &)