#include <linux/component.h>
#include <drm/intel/i915_component.h>
#include <drm/intel/i915_gsc_proxy_mei_interface.h>
#include "gt/intel_gt.h"
#include "gt/intel_gt_print.h"
#include "intel_gsc_proxy.h"
#include "intel_gsc_uc.h"
#include "intel_gsc_uc_heci_cmd_submit.h"
#include "i915_drv.h"
#include "i915_reg.h"
#define GSC_PROXY_INIT_TIMEOUT_MS …
#define GSC_PROXY_BUFFER_SIZE …
#define GSC_PROXY_CHANNEL_SIZE …
#define GSC_PROXY_MAX_MSG_SIZE …
struct intel_gsc_proxy_header { … } __packed;
enum intel_gsc_proxy_type { … };
struct gsc_proxy_msg { … } __packed;
static int proxy_send_to_csme(struct intel_gsc_uc *gsc)
{ … }
static int proxy_send_to_gsc(struct intel_gsc_uc *gsc)
{ … }
static int validate_proxy_header(struct intel_gsc_proxy_header *header,
u32 source, u32 dest)
{ … }
static int proxy_query(struct intel_gsc_uc *gsc)
{ … }
int intel_gsc_proxy_request_handler(struct intel_gsc_uc *gsc)
{ … }
void intel_gsc_proxy_irq_handler(struct intel_gsc_uc *gsc, u32 iir)
{ … }
static int i915_gsc_proxy_component_bind(struct device *i915_kdev,
struct device *mei_kdev, void *data)
{ … }
static void i915_gsc_proxy_component_unbind(struct device *i915_kdev,
struct device *mei_kdev, void *data)
{ … }
static const struct component_ops i915_gsc_proxy_component_ops = …;
static int proxy_channel_alloc(struct intel_gsc_uc *gsc)
{ … }
static void proxy_channel_free(struct intel_gsc_uc *gsc)
{ … }
void intel_gsc_proxy_fini(struct intel_gsc_uc *gsc)
{ … }
int intel_gsc_proxy_init(struct intel_gsc_uc *gsc)
{ … }