Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/gpu/drm/i915/gt/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quelle  intel_gt_sysfs.c   Sprache: C

 
// SPDX-License-Identifier: MIT
/*
 * Copyright © 2022 Intel Corporation
 */


#include <drm/drm_device.h>
#include <linux/device.h>
#include <linux/kobject.h>
#include <linux/printk.h>
#include <linux/sysfs.h>

#include "i915_drv.h"
#include "i915_sysfs.h"
#include "intel_gt.h"
#include "intel_gt_print.h"
#include "intel_gt_sysfs.h"
#include "intel_gt_sysfs_pm.h"
#include "intel_gt_types.h"
#include "intel_rc6.h"

bool is_object_gt(struct kobject *kobj)
{
 return !strncmp(kobj->name, "gt", 2);
}

struct intel_gt *intel_gt_sysfs_get_drvdata(struct kobject *kobj,
         const char *name)
{
 /*
 * We are interested at knowing from where the interface
 * has been called, whether it's called from gt/ or from
 * the parent directory.
 * From the interface position it depends also the value of
 * the private data.
 * If the interface is called from gt/ then private data is
 * of the "struct intel_gt *" type, otherwise it's * a
 * "struct drm_i915_private *" type.
 */

 if (!is_object_gt(kobj)) {
  struct device *dev = kobj_to_dev(kobj);
  struct drm_i915_private *i915 = kdev_minor_to_i915(dev);

  return to_gt(i915);
 }

 return kobj_to_gt(kobj);
}

static struct kobject *gt_get_parent_obj(struct intel_gt *gt)
{
 return >->i915->drm.primary->kdev->kobj;
}

static ssize_t id_show(struct kobject *kobj,
         struct kobj_attribute *attr,
         char *buf)
{
 struct intel_gt *gt = intel_gt_sysfs_get_drvdata(kobj, attr->attr.name);

 return sysfs_emit(buf, "%u\n", gt->info.id);
}
static struct kobj_attribute attr_id = __ATTR_RO(id);

static struct attribute *id_attrs[] = {
 &attr_id.attr,
 NULL,
};
ATTRIBUTE_GROUPS(id);

/* A kobject needs a release() method even if it does nothing */
static void kobj_gt_release(struct kobject *kobj)
{
}

static const struct kobj_type kobj_gt_type = {
 .release = kobj_gt_release,
 .sysfs_ops = &kobj_sysfs_ops,
 .default_groups = id_groups,
};

void intel_gt_sysfs_register(struct intel_gt *gt)
{
 /*
 * We need to make things right with the
 * ABI compatibility. The files were originally
 * generated under the parent directory.
 *
 * We generate the files only for gt 0
 * to avoid duplicates.
 */

 if (gt_is_root(gt))
  intel_gt_sysfs_pm_init(gt, gt_get_parent_obj(gt));

 /* init and xfer ownership to sysfs tree */
 if (kobject_init_and_add(>->sysfs_gt, &kobj_gt_type,
     gt->i915->sysfs_gt, "gt%d", gt->info.id))
  goto exit_fail;

 gt->sysfs_defaults = kobject_create_and_add(".defaults", >->sysfs_gt);
 if (!gt->sysfs_defaults)
  goto exit_fail;

 intel_gt_sysfs_pm_init(gt, >->sysfs_gt);

 return;

exit_fail:
 kobject_put(>->sysfs_gt);
 gt_warn(gt, "failed to initialize sysfs root\n");
}

void intel_gt_sysfs_unregister(struct intel_gt *gt)
{
 kobject_put(gt->sysfs_defaults);
 kobject_put(>->sysfs_gt);
}

Messung V0.5
C=96 H=87 G=91

¤ Dauer der Verarbeitung: 0.2 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.