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.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/kernel/gsp_phys_booter.h b/kernel/gsp_phys_booter.h
index dd7e64a..a27225b 100644
--- a/kernel/gsp_phys_booter.h
+++ b/kernel/gsp_phys_booter.h
@@ -515,6 +515,16 @@ struct gsp_phys_gr_submit {
*/
bool mme_carrier;
/*
+ * SAVED-WINDOW RELEASE CARRIER (sema_gl_mme_pack_release): the caller
+ * is the service's synthetic request carrying the snapshot the booter
+ * took at a held-call window. The submit path replays the saved window
+ * (raw bytes, so the normal relocation build runs again) with the held
+ * CALL runs RELEASED, after the packed program completed. Distinct from
+ * mme_carrier: this launch carries a real window and is not LOAD-ONLY.
+ * No guest release/semaphore fields are set.
+ */
+ bool mme_release;
+ /*
* 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
@@ -575,6 +585,23 @@ bool gsp_phys_gr_mme_carry_take(u32 h_object, u32 *gen, u32 *off,
void gsp_phys_gr_mme_carry_cancel(const char *reason);
void gsp_phys_gr_mme_carry_failed(int rc);
+/*
+ * Saved-window release carrier (sema_gl_mme_pack_release). The booter saves
+ * the raw window + launch capture at a held-call window; once the packed
+ * program completes and no client window consumed the release within the
+ * settle grace, the service pump peeks for a due release, takes it
+ * (re-validating residency/handle) and queues the synthetic release request.
+ * release_fill() copies the saved capture into the caller's submit request
+ * (stream points at the saved kernel window); the work item then submits it
+ * through the normal fill/build path with the CALL runs released.
+ */
+bool gsp_phys_gr_mme_release_peek(u32 *h_object);
+bool gsp_phys_gr_mme_release_take(u32 h_object, u32 *held, u32 *win);
+void gsp_phys_gr_mme_release_cancel(const char *reason);
+void gsp_phys_gr_mme_release_failed(int rc);
+void gsp_phys_gr_mme_release_complete(void);
+bool gsp_phys_gr_mme_release_fill(struct gsp_phys_gr_submit *out);
+
/* 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);