#ifndef I915_REQUEST_H
#define I915_REQUEST_H
#include <linux/dma-fence.h>
#include <linux/hrtimer.h>
#include <linux/irq_work.h>
#include <linux/llist.h>
#include <linux/lockdep.h>
#include "gem/i915_gem_context_types.h"
#include "gt/intel_context_types.h"
#include "gt/intel_engine_types.h"
#include "gt/intel_timeline_types.h"
#include "i915_gem.h"
#include "i915_scheduler.h"
#include "i915_selftest.h"
#include "i915_sw_fence.h"
#include "i915_vma_resource.h"
#include <uapi/drm/i915_drm.h>
struct drm_file;
struct drm_i915_gem_object;
struct drm_printer;
struct i915_deps;
struct i915_request;
#if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR)
struct i915_capture_list { … };
void i915_request_free_capture_list(struct i915_capture_list *capture);
#else
#define i915_request_free_capture_list …
#endif
#define RQ_TRACE(rq, fmt, ...) …
enum { … };
struct i915_request { … };
#define I915_FENCE_GFP …
extern const struct dma_fence_ops i915_fence_ops;
static inline bool dma_fence_is_i915(const struct dma_fence *fence)
{ … }
struct kmem_cache *i915_request_slab_cache(void);
struct i915_request * __must_check
__i915_request_create(struct intel_context *ce, gfp_t gfp);
struct i915_request * __must_check
i915_request_create(struct intel_context *ce);
void __i915_request_skip(struct i915_request *rq);
bool i915_request_set_error_once(struct i915_request *rq, int error);
struct i915_request *i915_request_mark_eio(struct i915_request *rq);
struct i915_request *__i915_request_commit(struct i915_request *request);
void __i915_request_queue(struct i915_request *rq,
const struct i915_sched_attr *attr);
void __i915_request_queue_bh(struct i915_request *rq);
bool i915_request_retire(struct i915_request *rq);
void i915_request_retire_upto(struct i915_request *rq);
static inline struct i915_request *
to_request(struct dma_fence *fence)
{ … }
static inline struct i915_request *
i915_request_get(struct i915_request *rq)
{ … }
static inline struct i915_request *
i915_request_get_rcu(struct i915_request *rq)
{ … }
static inline void
i915_request_put(struct i915_request *rq)
{ … }
int i915_request_await_object(struct i915_request *to,
struct drm_i915_gem_object *obj,
bool write);
int i915_request_await_dma_fence(struct i915_request *rq,
struct dma_fence *fence);
int i915_request_await_deps(struct i915_request *rq, const struct i915_deps *deps);
int i915_request_await_execution(struct i915_request *rq,
struct dma_fence *fence);
void i915_request_add(struct i915_request *rq);
bool __i915_request_submit(struct i915_request *request);
void i915_request_submit(struct i915_request *request);
void __i915_request_unsubmit(struct i915_request *request);
void i915_request_unsubmit(struct i915_request *request);
void i915_request_cancel(struct i915_request *rq, int error);
long i915_request_wait_timeout(struct i915_request *rq,
unsigned int flags,
long timeout)
__attribute__((nonnull(1)));
long i915_request_wait(struct i915_request *rq,
unsigned int flags,
long timeout)
__attribute__((nonnull(1)));
#define I915_WAIT_INTERRUPTIBLE …
#define I915_WAIT_PRIORITY …
#define I915_WAIT_ALL …
void i915_request_show(struct drm_printer *m,
const struct i915_request *rq,
const char *prefix,
int indent);
static inline bool i915_request_signaled(const struct i915_request *rq)
{ … }
static inline bool i915_request_is_active(const struct i915_request *rq)
{ … }
static inline bool i915_request_in_priority_queue(const struct i915_request *rq)
{ … }
static inline bool
i915_request_has_initial_breadcrumb(const struct i915_request *rq)
{ … }
static inline bool i915_seqno_passed(u32 seq1, u32 seq2)
{ … }
static inline u32 __hwsp_seqno(const struct i915_request *rq)
{ … }
static inline u32 hwsp_seqno(const struct i915_request *rq)
{ … }
static inline bool __i915_request_has_started(const struct i915_request *rq)
{ … }
static inline bool i915_request_started(const struct i915_request *rq)
{ … }
static inline bool i915_request_is_running(const struct i915_request *rq)
{ … }
static inline bool i915_request_is_ready(const struct i915_request *rq)
{ … }
static inline bool __i915_request_is_complete(const struct i915_request *rq)
{ … }
static inline bool i915_request_completed(const struct i915_request *rq)
{ … }
static inline void i915_request_mark_complete(struct i915_request *rq)
{ … }
static inline bool i915_request_has_waitboost(const struct i915_request *rq)
{ … }
static inline bool i915_request_has_nopreempt(const struct i915_request *rq)
{ … }
static inline bool i915_request_has_sentinel(const struct i915_request *rq)
{ … }
static inline bool i915_request_on_hold(const struct i915_request *rq)
{ … }
static inline void i915_request_set_hold(struct i915_request *rq)
{ … }
static inline void i915_request_clear_hold(struct i915_request *rq)
{ … }
static inline struct intel_timeline *
i915_request_timeline(const struct i915_request *rq)
{ … }
static inline struct i915_gem_context *
i915_request_gem_context(const struct i915_request *rq)
{ … }
static inline struct intel_timeline *
i915_request_active_timeline(const struct i915_request *rq)
{ … }
static inline u32
i915_request_active_seqno(const struct i915_request *rq)
{ … }
bool
i915_request_active_engine(struct i915_request *rq,
struct intel_engine_cs **active);
void i915_request_notify_execute_cb_imm(struct i915_request *rq);
enum i915_request_state { … };
enum i915_request_state i915_test_request_state(struct i915_request *rq);
void i915_request_module_exit(void);
int i915_request_module_init(void);
#endif