gsc_context
struct gsc_context *ctx = dev_id;
static int gsc_reset(struct gsc_context *ctx)
static void gsc_start(struct gsc_context *ctx)
struct gsc_context *ctx = container_of(ipp, struct gsc_context, ipp);
struct gsc_context *ctx =
container_of(ipp, struct gsc_context, ipp);
struct gsc_context *ctx = dev_get_drvdata(dev);
struct gsc_context *ctx = dev_get_drvdata(dev);
struct gsc_context *ctx;
struct gsc_context *ctx = get_gsc_context(dev);
struct gsc_context *ctx = get_gsc_context(dev);
static int gsc_sw_reset(struct gsc_context *ctx)
static void gsc_handle_irq(struct gsc_context *ctx, bool enable,
static void gsc_src_set_fmt(struct gsc_context *ctx, u32 fmt, bool tiled)
static void gsc_src_set_transf(struct gsc_context *ctx, unsigned int rotation)
static void gsc_src_set_size(struct gsc_context *ctx,
static void gsc_src_set_buf_seq(struct gsc_context *ctx, u32 buf_id,
static void gsc_src_set_addr(struct gsc_context *ctx, u32 buf_id,
static void gsc_dst_set_fmt(struct gsc_context *ctx, u32 fmt, bool tiled)
static int gsc_get_ratio_shift(struct gsc_context *ctx, u32 src, u32 dst,
static int gsc_set_prescaler(struct gsc_context *ctx, struct gsc_scaler *sc,
static void gsc_set_h_coef(struct gsc_context *ctx, unsigned long main_hratio)
static void gsc_set_v_coef(struct gsc_context *ctx, unsigned long main_vratio)
static void gsc_set_scaler(struct gsc_context *ctx, struct gsc_scaler *sc)
static void gsc_dst_set_size(struct gsc_context *ctx,
static int gsc_dst_get_buf_seq(struct gsc_context *ctx)
static void gsc_dst_set_buf_seq(struct gsc_context *ctx, u32 buf_id,
static void gsc_dst_set_addr(struct gsc_context *ctx,
static int gsc_get_src_buf_index(struct gsc_context *ctx)
static int gsc_get_dst_buf_index(struct gsc_context *ctx)
struct intel_hdcp_gsc_context *gsc_context;
byte = intel_parent_hdcp_gsc_msg_send(display, gsc_context,
struct intel_hdcp_gsc_context *gsc_context;
gsc_context = display->hdcp.gsc_context;
byte = intel_parent_hdcp_gsc_msg_send(display, gsc_context,
struct intel_hdcp_gsc_context *gsc_context;
gsc_context = display->hdcp.gsc_context;
struct intel_hdcp_gsc_context *gsc_context;
byte = intel_parent_hdcp_gsc_msg_send(display, gsc_context,
struct intel_hdcp_gsc_context *gsc_context;
gsc_context = display->hdcp.gsc_context;
byte = intel_parent_hdcp_gsc_msg_send(display, gsc_context,
struct intel_hdcp_gsc_context *gsc_context;
gsc_context = display->hdcp.gsc_context;
byte = intel_parent_hdcp_gsc_msg_send(display, gsc_context,
gsc_context = display->hdcp.gsc_context;
struct intel_hdcp_gsc_context *gsc_context;
gsc_context = display->hdcp.gsc_context;
byte = intel_parent_hdcp_gsc_msg_send(display, gsc_context,
struct intel_hdcp_gsc_context *gsc_context;
gsc_context = display->hdcp.gsc_context;
byte = intel_parent_hdcp_gsc_msg_send(display, gsc_context,
struct intel_hdcp_gsc_context *gsc_context;
byte = intel_parent_hdcp_gsc_msg_send(display, gsc_context,
gsc_context = display->hdcp.gsc_context;
byte = intel_parent_hdcp_gsc_msg_send(display, gsc_context,
struct intel_hdcp_gsc_context *gsc_context;
gsc_context = display->hdcp.gsc_context;
byte = intel_parent_hdcp_gsc_msg_send(display, gsc_context,
struct intel_hdcp_gsc_context *gsc_context;
gsc_context = display->hdcp.gsc_context;
byte = intel_parent_hdcp_gsc_msg_send(display, gsc_context,
struct intel_hdcp_gsc_context *gsc_context;
gsc_context = intel_parent_hdcp_gsc_context_alloc(display);
if (IS_ERR(gsc_context)) {
ret = PTR_ERR(gsc_context);
display->hdcp.gsc_context = gsc_context;
intel_parent_hdcp_gsc_context_free(display, display->hdcp.gsc_context);
display->hdcp.gsc_context = NULL;
struct intel_hdcp_gsc_context *gsc_context;
gsc_context = display->hdcp.gsc_context;
struct intel_hdcp_gsc_context *gsc_context,
return display->parent->hdcp->gsc_msg_send(gsc_context, msg_in, msg_in_len, msg_out, msg_out_len);
struct intel_hdcp_gsc_context *gsc_context)
display->parent->hdcp->gsc_context_free(gsc_context);
struct intel_hdcp_gsc_context *gsc_context,
struct intel_hdcp_gsc_context *gsc_context);
ret = intel_hdcp_gsc_initialize_message(i915, gsc_context);
kfree(gsc_context);
gsc_context = ERR_PTR(ret);
return gsc_context;
static void intel_hdcp_gsc_context_free(struct intel_hdcp_gsc_context *gsc_context)
if (!gsc_context)
i915_vma_unpin_and_release(&gsc_context->vma, I915_VMA_RELEASE_MAP);
kfree(gsc_context);
static ssize_t intel_hdcp_gsc_msg_send(struct intel_hdcp_gsc_context *gsc_context,
struct drm_i915_private *i915 = gsc_context->i915;
header_in = gsc_context->hdcp_cmd_in;
header_out = gsc_context->hdcp_cmd_out;
addr_in = i915_ggtt_offset(gsc_context->vma);
memcpy(gsc_context->hdcp_cmd_in + sizeof(*header_in), msg_in, msg_in_len);
memcpy(msg_out, gsc_context->hdcp_cmd_out + sizeof(*header_out), msg_out_len);
struct intel_hdcp_gsc_context *gsc_context)
gsc_context->hdcp_cmd_in = cmd_in;
gsc_context->hdcp_cmd_out = cmd_out;
gsc_context->vma = vma;
gsc_context->i915 = i915;
struct intel_hdcp_gsc_context *gsc_context;
gsc_context = kzalloc_obj(*gsc_context);
if (!gsc_context)
ret = intel_hdcp_gsc_initialize_message(xe, gsc_context);
kfree(gsc_context);
gsc_context = ERR_PTR(ret);
return gsc_context;
static void intel_hdcp_gsc_context_free(struct intel_hdcp_gsc_context *gsc_context)
if (!gsc_context)
xe_bo_unpin_map_no_vm(gsc_context->hdcp_bo);
kfree(gsc_context);
struct intel_hdcp_gsc_context *gsc_context,
struct xe_gt *gt = gsc_context->hdcp_bo->tile->media_gt;
struct iosys_map *map = &gsc_context->hdcp_bo->vmap;
ret = xe_gsc_pkt_submit_kernel(gsc, gsc_context->hdcp_cmd_in, msg_size_in,
gsc_context->hdcp_cmd_out, msg_size_out);
static ssize_t intel_hdcp_gsc_msg_send(struct intel_hdcp_gsc_context *gsc_context,
struct xe_device *xe = gsc_context->xe;
addr_in_wr_off = xe_gsc_emit_header(xe, &gsc_context->hdcp_bo->vmap,
xe_map_memcpy_to(xe, &gsc_context->hdcp_bo->vmap, addr_in_wr_off,
ret = xe_gsc_send_sync(xe, gsc_context, msg_size_in, msg_size_out,
xe_map_memcpy_from(xe, msg_out, &gsc_context->hdcp_bo->vmap,
struct intel_hdcp_gsc_context *gsc_context)
gsc_context->hdcp_bo = bo;
gsc_context->hdcp_cmd_in = cmd_in;
gsc_context->hdcp_cmd_out = cmd_out;
gsc_context->xe = xe;
struct intel_hdcp_gsc_context *gsc_context;
gsc_context = kzalloc_obj(*gsc_context);
if (!gsc_context)
ssize_t (*gsc_msg_send)(struct intel_hdcp_gsc_context *gsc_context,
void (*gsc_context_free)(struct intel_hdcp_gsc_context *gsc_context);