mirror of https://gitee.com/openkylin/linux.git
drm/nouveau/pm: reorganize the nvif interface
This commit introduces the NVIF_IOCTL_NEW_V0_PERFMON class which will be used in order to query domains, signals and sources. This separates the querying and the counting interface. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
a78ce96f96
commit
5a0bc4b5ae
|
@ -251,6 +251,20 @@ struct gf110_dma_v0 {
|
||||||
* perfmon
|
* perfmon
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
|
#define NVIF_PERFMON_V0_QUERY_SIGNAL 0x00
|
||||||
|
|
||||||
|
struct nvif_perfmon_query_signal_v0 {
|
||||||
|
__u8 version;
|
||||||
|
__u8 pad01[3];
|
||||||
|
__u32 iter;
|
||||||
|
char name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* perfctr
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
struct nvif_perfctr_v0 {
|
struct nvif_perfctr_v0 {
|
||||||
__u8 version;
|
__u8 version;
|
||||||
__u8 pad01[1];
|
__u8 pad01[1];
|
||||||
|
@ -259,16 +273,8 @@ struct nvif_perfctr_v0 {
|
||||||
char name[4][64];
|
char name[4][64];
|
||||||
};
|
};
|
||||||
|
|
||||||
#define NVIF_PERFCTR_V0_QUERY 0x00
|
#define NVIF_PERFCTR_V0_SAMPLE 0x00
|
||||||
#define NVIF_PERFCTR_V0_SAMPLE 0x01
|
#define NVIF_PERFCTR_V0_READ 0x01
|
||||||
#define NVIF_PERFCTR_V0_READ 0x02
|
|
||||||
|
|
||||||
struct nvif_perfctr_query_v0 {
|
|
||||||
__u8 version;
|
|
||||||
__u8 pad01[3];
|
|
||||||
__u32 iter;
|
|
||||||
char name[64];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct nvif_perfctr_sample {
|
struct nvif_perfctr_sample {
|
||||||
};
|
};
|
||||||
|
|
|
@ -49,8 +49,9 @@ struct nvif_ioctl_new_v0 {
|
||||||
__u64 token;
|
__u64 token;
|
||||||
__u32 handle;
|
__u32 handle;
|
||||||
/* these class numbers are made up by us, and not nvidia-assigned */
|
/* these class numbers are made up by us, and not nvidia-assigned */
|
||||||
#define NVIF_IOCTL_NEW_V0_PERFCTR 0x0000ffff
|
#define NVIF_IOCTL_NEW_V0_PERFMON 0x0000ffff
|
||||||
#define NVIF_IOCTL_NEW_V0_CONTROL 0x0000fffe
|
#define NVIF_IOCTL_NEW_V0_PERFCTR 0x0000fffe
|
||||||
|
#define NVIF_IOCTL_NEW_V0_CONTROL 0x0000fffd
|
||||||
__u32 oclass;
|
__u32 oclass;
|
||||||
__u8 data[]; /* class data (class.h) */
|
__u8 data[]; /* class data (class.h) */
|
||||||
};
|
};
|
||||||
|
|
|
@ -83,10 +83,10 @@ nvkm_perfsig_find(struct nvkm_pm *ppm, const char *name, u32 size,
|
||||||
* Perfmon object classes
|
* Perfmon object classes
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
static int
|
static int
|
||||||
nvkm_perfctr_query(struct nvkm_object *object, void *data, u32 size)
|
nvkm_perfmon_mthd_query_signal(struct nvkm_object *object, void *data, u32 size)
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
struct nvif_perfctr_query_v0 v0;
|
struct nvif_perfmon_query_signal_v0 v0;
|
||||||
} *args = data;
|
} *args = data;
|
||||||
struct nvkm_device *device = nv_device(object);
|
struct nvkm_device *device = nv_device(object);
|
||||||
struct nvkm_pm *ppm = (void *)object->engine;
|
struct nvkm_pm *ppm = (void *)object->engine;
|
||||||
|
@ -97,9 +97,9 @@ nvkm_perfctr_query(struct nvkm_object *object, void *data, u32 size)
|
||||||
int tmp = 0, di, si;
|
int tmp = 0, di, si;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
nv_ioctl(object, "perfctr query size %d\n", size);
|
nv_ioctl(object, "perfmon query signal size %d\n", size);
|
||||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||||
nv_ioctl(object, "perfctr query vers %d iter %08x\n",
|
nv_ioctl(object, "perfmon query signal vers %d iter %08x\n",
|
||||||
args->v0.version, args->v0.iter);
|
args->v0.version, args->v0.iter);
|
||||||
di = (args->v0.iter & 0xff000000) >> 24;
|
di = (args->v0.iter & 0xff000000) >> 24;
|
||||||
si = (args->v0.iter & 0x00ffffff) - 1;
|
si = (args->v0.iter & 0x00ffffff) - 1;
|
||||||
|
@ -141,6 +141,30 @@ nvkm_perfctr_query(struct nvkm_object *object, void *data, u32 size)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
nvkm_perfmon_mthd(struct nvkm_object *object, u32 mthd, void *data, u32 size)
|
||||||
|
{
|
||||||
|
switch (mthd) {
|
||||||
|
case NVIF_PERFMON_V0_QUERY_SIGNAL:
|
||||||
|
return nvkm_perfmon_mthd_query_signal(object, data, size);
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct nvkm_ofuncs
|
||||||
|
nvkm_perfmon_ofuncs = {
|
||||||
|
.ctor = _nvkm_object_ctor,
|
||||||
|
.dtor = nvkm_object_destroy,
|
||||||
|
.init = nvkm_object_init,
|
||||||
|
.fini = nvkm_object_fini,
|
||||||
|
.mthd = nvkm_perfmon_mthd,
|
||||||
|
};
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Perfctr object classes
|
||||||
|
******************************************************************************/
|
||||||
static int
|
static int
|
||||||
nvkm_perfctr_sample(struct nvkm_object *object, void *data, u32 size)
|
nvkm_perfctr_sample(struct nvkm_object *object, void *data, u32 size)
|
||||||
{
|
{
|
||||||
|
@ -221,8 +245,6 @@ static int
|
||||||
nvkm_perfctr_mthd(struct nvkm_object *object, u32 mthd, void *data, u32 size)
|
nvkm_perfctr_mthd(struct nvkm_object *object, u32 mthd, void *data, u32 size)
|
||||||
{
|
{
|
||||||
switch (mthd) {
|
switch (mthd) {
|
||||||
case NVIF_PERFCTR_V0_QUERY:
|
|
||||||
return nvkm_perfctr_query(object, data, size);
|
|
||||||
case NVIF_PERFCTR_V0_SAMPLE:
|
case NVIF_PERFCTR_V0_SAMPLE:
|
||||||
return nvkm_perfctr_sample(object, data, size);
|
return nvkm_perfctr_sample(object, data, size);
|
||||||
case NVIF_PERFCTR_V0_READ:
|
case NVIF_PERFCTR_V0_READ:
|
||||||
|
@ -299,6 +321,10 @@ nvkm_perfctr_ofuncs = {
|
||||||
|
|
||||||
struct nvkm_oclass
|
struct nvkm_oclass
|
||||||
nvkm_pm_sclass[] = {
|
nvkm_pm_sclass[] = {
|
||||||
|
{
|
||||||
|
.handle = NVIF_IOCTL_NEW_V0_PERFMON,
|
||||||
|
.ofuncs = &nvkm_perfmon_ofuncs,
|
||||||
|
},
|
||||||
{ .handle = NVIF_IOCTL_NEW_V0_PERFCTR,
|
{ .handle = NVIF_IOCTL_NEW_V0_PERFCTR,
|
||||||
.ofuncs = &nvkm_perfctr_ofuncs,
|
.ofuncs = &nvkm_perfctr_ofuncs,
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue