Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: MIT */
0002 /*
0003  * Copyright © 2019 Intel Corporation
0004  */
0005 
0006 #ifndef __INTEL_BREADCRUMBS__
0007 #define __INTEL_BREADCRUMBS__
0008 
0009 #include <linux/atomic.h>
0010 #include <linux/irq_work.h>
0011 
0012 #include "intel_breadcrumbs_types.h"
0013 
0014 struct drm_printer;
0015 struct i915_request;
0016 struct intel_breadcrumbs;
0017 
0018 struct intel_breadcrumbs *
0019 intel_breadcrumbs_create(struct intel_engine_cs *irq_engine);
0020 void intel_breadcrumbs_free(struct kref *kref);
0021 
0022 void intel_breadcrumbs_reset(struct intel_breadcrumbs *b);
0023 void __intel_breadcrumbs_park(struct intel_breadcrumbs *b);
0024 
0025 static inline void intel_breadcrumbs_unpark(struct intel_breadcrumbs *b)
0026 {
0027     atomic_inc(&b->active);
0028 }
0029 
0030 static inline void intel_breadcrumbs_park(struct intel_breadcrumbs *b)
0031 {
0032     if (atomic_dec_and_test(&b->active))
0033         __intel_breadcrumbs_park(b);
0034 }
0035 
0036 static inline void
0037 intel_engine_signal_breadcrumbs(struct intel_engine_cs *engine)
0038 {
0039     irq_work_queue(&engine->breadcrumbs->irq_work);
0040 }
0041 
0042 void intel_engine_print_breadcrumbs(struct intel_engine_cs *engine,
0043                     struct drm_printer *p);
0044 
0045 bool i915_request_enable_breadcrumb(struct i915_request *request);
0046 void i915_request_cancel_breadcrumb(struct i915_request *request);
0047 
0048 void intel_context_remove_breadcrumbs(struct intel_context *ce,
0049                       struct intel_breadcrumbs *b);
0050 
0051 static inline struct intel_breadcrumbs *
0052 intel_breadcrumbs_get(struct intel_breadcrumbs *b)
0053 {
0054     kref_get(&b->ref);
0055     return b;
0056 }
0057 
0058 static inline void intel_breadcrumbs_put(struct intel_breadcrumbs *b)
0059 {
0060     kref_put(&b->ref, intel_breadcrumbs_free);
0061 }
0062 
0063 #endif /* __INTEL_BREADCRUMBS__ */