diff options
Diffstat (limited to 'kernel/gsp_phys_booter.h')
| -rw-r--r-- | kernel/gsp_phys_booter.h | 25 |
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); |
