/*************************************************************** * * C file: speed.h... for cpuinf32 DLL * * This program has been developed by Intel Corporation. * You have Intel's permission to incorporate this code * into your product, royalty free. Intel has various * intellectual property rights which it may assert under * certain circumstances, such as if another manufacturer's * processor mis-identifies itself as being "GenuineIntel" * when the CPUID instruction is executed. * * Intel specifically disclaims all warranties, express or * implied, and all liability, including consequential and * other indirect damages, for the use of this code, * including liability for infringement of any proprietary * rights, and including the warranties of merchantability * and fitness for a particular purpose. Intel does not * assume any responsibility for any errors which may * appear in this code nor any responsibility to update it. * * * Other brands and names are the property of their respective * owners. * * Copyright (c) 1995, Intel Corporation. All rights reserved. ***************************************************************/ #ifndef speed_h #define speed_h // CONSTANT DEFINITIONS //////////////////////////////////////// #define CLONE_MASK 0x8000 // Mask to be 'OR'ed with proc- #define MAXCLOCKS 150 // Maximum number of cycles per // BSF instruction // ACCURACY AFFECTING CONSTANTS //////////////////////////// #define ITERATIONS 4000 // Number of times to repeat BSF // instruction in samplings. // Initially set to 4000. #define MAX_TRIES 20 // Maximum number of samplings // to allow before giving up // and returning current // average. Initially set to // 20. #define TOLERANCE 1 // Number of MHz to allow // samplings to deviate from // average of samplings. // Initially set to 2. #define SAMPLINGS 10 // Number of BSF sequence // samplings to make. // Initially set to 10. // VARIABLE STRUCTURE DEFINITIONS ////////////////////////////// struct FREQ_INFO { unsigned long in_cycles; // Internal clock cycles during // test unsigned long ex_ticks; // Microseconds elapsed during // test unsigned long raw_freq; // Raw frequency of CPU in MHz unsigned long norm_freq; // Normalized frequency of CPU // in MHz. }; typedef unsigned short ushort; typedef unsigned long ulong; /*************************************************************** * BOOL WINAPI DllMain() * * Inputs: hDLL - handle of DLL * dwReason - indicates why DLL called * lpReserved - reserved * * Return Value: TRUE (always) ***************************************************************/ BOOL WINAPI DllMain (HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved); /*************************************************************** * CpuSpeed() -- Return the raw clock rate of the host CPU. * * Inputs: * clocks: NULL: Use default value for number of cycles * per BSF instruction. * Positive Integer: Use clocks value for number * of cycles per BSF instruction. * -1: Use CMos timer to calculate speed * (May not work for WinNT. * * Returns: * If error then return all zeroes in FREQ_INFO structure * Else return FREQ_INFO structure containing calculated * clock frequency, normalized clock frequency, number of * clock cycles during test sampling, and the number of * microseconds elapsed during the sampling. ***************************************************************/ struct FREQ_INFO cpuspeed(int clocks); unsigned long cpurawspeed(int clocks); unsigned long cpunormspeed(int clocks); unsigned long ProcessorCount(); #endif speed_h