summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_phys_booter.h
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/gsp_phys_booter.h')
-rw-r--r--kernel/gsp_phys_booter.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/kernel/gsp_phys_booter.h b/kernel/gsp_phys_booter.h
index 92c8e69..dd7e64a 100644
--- a/kernel/gsp_phys_booter.h
+++ b/kernel/gsp_phys_booter.h
@@ -505,6 +505,16 @@ struct gsp_phys_gr_submit {
*/
u32 stream_rel;
/*
+ * Host-initiated MME pack-continuation carrier (sema_gl_mme_pack_carry):
+ * the caller is the service's synthetic request, not a guest push.
+ * The submit path then ignores req->stream/pages/inl/data/releases,
+ * emits the builder's static WAIT_FOR_IDLE stub window (never
+ * executed: the launch is forced LOAD-ONLY with the CALL runs held)
+ * and lets the builder carry the next packed-prelude part from its
+ * own live cursor. No guest memory is read or written.
+ */
+ bool mme_carrier;
+ /*
* SESSION 153-CONTINUED-87: the first program VA the captured
* window binds (SET_PIPELINE_PROGRAM_ADDRESS pair; 0 when none).
* The launch builder uses its 4K page as the program family for
@@ -550,6 +560,21 @@ int gsp_phys_backend_guest_gr_submit(const struct gsp_phys_gr_submit *req,
*/
bool gsp_phys_gr_mme_fe_defer_wanted(u32 h_object, u32 win3d_n);
+/*
+ * Host-initiated MME pack-continuation carrier (sema_gl_mme_pack_carry).
+ * The service pump peeks for a due carrier, then takes it (which re-validates
+ * the live pack cursor/handle/golden state) and submits the synthetic
+ * load-only request. On launch failure the service calls carry_failed so the
+ * next client window re-emits from word 0; carry_cancel drops a carrier on a
+ * non-launch path (queue failure etc.). All three are no-ops when no carrier
+ * is armed.
+ */
+bool gsp_phys_gr_mme_carry_peek(u32 *h_object);
+bool gsp_phys_gr_mme_carry_take(u32 h_object, u32 *gen, u32 *off,
+ u32 *maxa);
+void gsp_phys_gr_mme_carry_cancel(const char *reason);
+void gsp_phys_gr_mme_carry_failed(int rc);
+
/* GR forwarding counters (submitted/verified/cancelled), plain reads. */
void gsp_phys_backend_gr_counters(u64 *submitted, u64 *ok, u64 *refused,
u64 *timed_out, u64 *pool_exhausted);