linux/drivers/gpu/drm/nouveau/core/engine/perfmon/nva3.c
<<
>>
Prefs
   1/*
   2 * Copyright 2013 Red Hat Inc.
   3 *
   4 * Permission is hereby granted, free of charge, to any person obtaining a
   5 * copy of this software and associated documentation files (the "Software"),
   6 * to deal in the Software without restriction, including without limitation
   7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
   8 * and/or sell copies of the Software, and to permit persons to whom the
   9 * Software is furnished to do so, subject to the following conditions:
  10 *
  11 * The above copyright notice and this permission notice shall be included in
  12 * all copies or substantial portions of the Software.
  13 *
  14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
  18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  20 * OTHER DEALINGS IN THE SOFTWARE.
  21 *
  22 * Authors: Ben Skeggs
  23 */
  24
  25#include "nv40.h"
  26
  27/*******************************************************************************
  28 * Perfmon object classes
  29 ******************************************************************************/
  30
  31/*******************************************************************************
  32 * PPM context
  33 ******************************************************************************/
  34
  35/*******************************************************************************
  36 * PPM engine/subdev functions
  37 ******************************************************************************/
  38
  39static const struct nouveau_specdom
  40nva3_perfmon[] = {
  41        { 0x20, (const struct nouveau_specsig[]) {
  42                        {}
  43                }, &nv40_perfctr_func },
  44        { 0x20, (const struct nouveau_specsig[]) {
  45                        {}
  46                }, &nv40_perfctr_func },
  47        { 0x20, (const struct nouveau_specsig[]) {
  48                        {}
  49                }, &nv40_perfctr_func },
  50        { 0x20, (const struct nouveau_specsig[]) {
  51                        {}
  52                }, &nv40_perfctr_func },
  53        { 0x20, (const struct nouveau_specsig[]) {
  54                        {}
  55                }, &nv40_perfctr_func },
  56        { 0x20, (const struct nouveau_specsig[]) {
  57                        {}
  58                }, &nv40_perfctr_func },
  59        { 0x20, (const struct nouveau_specsig[]) {
  60                        {}
  61                }, &nv40_perfctr_func },
  62        { 0x20, (const struct nouveau_specsig[]) {
  63                        {}
  64                }, &nv40_perfctr_func },
  65        {}
  66};
  67
  68static int
  69nva3_perfmon_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
  70                  struct nouveau_oclass *oclass, void *data, u32 size,
  71                  struct nouveau_object **object)
  72{
  73        int ret = nv40_perfmon_ctor(parent, engine, oclass, data, size, object);
  74        if (ret == 0) {
  75                struct nv40_perfmon_priv *priv = (void *)*object;
  76                ret = nouveau_perfdom_new(&priv->base, "pwr", 0, 0, 0, 0,
  77                                           nva3_perfmon_pwr);
  78                if (ret)
  79                        return ret;
  80
  81                priv->base.last = 3;
  82        }
  83        return ret;
  84}
  85
  86struct nouveau_oclass *
  87nva3_perfmon_oclass = &(struct nv40_perfmon_oclass) {
  88        .base.handle = NV_ENGINE(PERFMON, 0xa3),
  89        .base.ofuncs = &(struct nouveau_ofuncs) {
  90                .ctor = nva3_perfmon_ctor,
  91                .dtor = _nouveau_perfmon_dtor,
  92                .init = _nouveau_perfmon_init,
  93                .fini = _nouveau_perfmon_fini,
  94        },
  95        .doms = nva3_perfmon,
  96}.base;
  97