diff options
Diffstat (limited to 'tools/perf/arch/powerpc/util')
| -rw-r--r-- | tools/perf/arch/powerpc/util/dwarf-regs.c | 2 | ||||
| -rw-r--r-- | tools/perf/arch/powerpc/util/header.c | 36 | 
2 files changed, 37 insertions, 1 deletions
diff --git a/tools/perf/arch/powerpc/util/dwarf-regs.c b/tools/perf/arch/powerpc/util/dwarf-regs.c index 48ae0c5e3f7..733151cdf46 100644 --- a/tools/perf/arch/powerpc/util/dwarf-regs.c +++ b/tools/perf/arch/powerpc/util/dwarf-regs.c @@ -9,7 +9,7 @@   * 2 of the License, or (at your option) any later version.   */ -#include <libio.h> +#include <stddef.h>  #include <dwarf-regs.h> diff --git a/tools/perf/arch/powerpc/util/header.c b/tools/perf/arch/powerpc/util/header.c new file mode 100644 index 00000000000..2f7073d107f --- /dev/null +++ b/tools/perf/arch/powerpc/util/header.c @@ -0,0 +1,36 @@ +#include <sys/types.h> +#include <unistd.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "../../util/header.h" + +#define __stringify_1(x)        #x +#define __stringify(x)          __stringify_1(x) + +#define mfspr(rn)       ({unsigned long rval; \ +			 asm volatile("mfspr %0," __stringify(rn) \ +				      : "=r" (rval)); rval; }) + +#define SPRN_PVR        0x11F	/* Processor Version Register */ +#define PVR_VER(pvr)    (((pvr) >>  16) & 0xFFFF) /* Version field */ +#define PVR_REV(pvr)    (((pvr) >>   0) & 0xFFFF) /* Revison field */ + +int +get_cpuid(char *buffer, size_t sz) +{ +	unsigned long pvr; +	int nb; + +	pvr = mfspr(SPRN_PVR); + +	nb = scnprintf(buffer, sz, "%lu,%lu$", PVR_VER(pvr), PVR_REV(pvr)); + +	/* look for end marker to ensure the entire data fit */ +	if (strchr(buffer, '$')) { +		buffer[nb-1] = '\0'; +		return 0; +	} +	return -1; +}  | 
