Linux Perf
header.c
Go to the documentation of this file.
1
// SPDX-License-Identifier: GPL-2.0
2
#include <sys/types.h>
3
#include <unistd.h>
4
#include <stdio.h>
5
#include <stdlib.h>
6
#include <string.h>
7
#include <linux/stringify.h>
8
#include "
header.h
"
9
#include "util.h"
10
11
#define mfspr(rn) ({unsigned long rval; \
12
asm volatile("mfspr %0," __stringify(rn) \
13
: "=r" (rval)); rval; })
14
15
#define SPRN_PVR 0x11F
/* Processor Version Register */
16
#define PVR_VER(pvr) (((pvr) >> 16) & 0xFFFF)
/* Version field */
17
#define PVR_REV(pvr) (((pvr) >> 0) & 0xFFFF)
/* Revison field */
18
19
int
20
get_cpuid
(
char
*buffer,
size_t
sz)
21
{
22
unsigned
long
pvr;
23
int
nb;
24
25
pvr =
mfspr
(
SPRN_PVR
);
26
27
nb = scnprintf(buffer, sz,
"%lu,%lu$"
,
PVR_VER
(pvr),
PVR_REV
(pvr));
28
29
/* look for end marker to ensure the entire data fit */
30
if
(strchr(buffer,
'$'
)) {
31
buffer[nb-1] =
'\0'
;
32
return
0;
33
}
34
return
-1;
35
}
36
37
char
*
38
get_cpuid_str
(
struct
perf_pmu
*pmu __maybe_unused)
39
{
40
char
*bufp;
41
42
if
(asprintf(&bufp,
"%.8lx"
,
mfspr
(
SPRN_PVR
)) < 0)
43
bufp = NULL;
44
45
return
bufp;
46
}
get_cpuid
int get_cpuid(char *buffer, size_t sz)
Definition:
header.c:20
get_cpuid_str
char * get_cpuid_str(struct perf_pmu *pmu)
Definition:
header.c:12
PVR_VER
#define PVR_VER(pvr)
Definition:
header.c:16
SPRN_PVR
#define SPRN_PVR
Definition:
header.c:15
header.h
perf_pmu
Definition:
pmu.h:22
PVR_REV
#define PVR_REV(pvr)
Definition:
header.c:17
mfspr
#define mfspr(rn)
Definition:
header.c:11
arch
powerpc
util
header.c
Generated by
1.8.13