Lines Matching refs:ctx

16 	struct spu_context *ctx = spu->ctx;  in spufs_stop_callback()  local
25 if (ctx) { in spufs_stop_callback()
29 ctx->csa.class_0_pending = spu->class_0_pending; in spufs_stop_callback()
30 ctx->csa.class_0_dar = spu->class_0_dar; in spufs_stop_callback()
33 ctx->csa.class_1_dsisr = spu->class_1_dsisr; in spufs_stop_callback()
34 ctx->csa.class_1_dar = spu->class_1_dar; in spufs_stop_callback()
44 wake_up_all(&ctx->stop_wq); in spufs_stop_callback()
48 int spu_stopped(struct spu_context *ctx, u32 *stat) in spu_stopped() argument
57 *stat = ctx->ops->status_read(ctx); in spu_stopped()
68 if (test_bit(SPU_SCHED_NOTIFY_ACTIVE, &ctx->sched_flags)) in spu_stopped()
71 dsisr = ctx->csa.class_1_dsisr; in spu_stopped()
75 if (ctx->csa.class_0_pending) in spu_stopped()
81 static int spu_setup_isolated(struct spu_context *ctx) in spu_setup_isolated() argument
101 spu_unmap_mappings(ctx); in spu_setup_isolated()
103 mfc_cntl = &ctx->spu->priv2->mfc_control_RW; in spu_setup_isolated()
124 sr1 = spu_mfc_sr1_get(ctx->spu); in spu_setup_isolated()
126 spu_mfc_sr1_set(ctx->spu, sr1); in spu_setup_isolated()
129 ctx->ops->signal1_write(ctx, (unsigned long)isolated_loader >> 32); in spu_setup_isolated()
130 ctx->ops->signal2_write(ctx, in spu_setup_isolated()
133 ctx->ops->runcntl_write(ctx, in spu_setup_isolated()
138 while (((status = ctx->ops->status_read(ctx)) & status_loading) == in spu_setup_isolated()
153 ctx->ops->runcntl_write(ctx, SPU_RUNCNTL_RUNNABLE); in spu_setup_isolated()
161 ctx->ops->runcntl_write(ctx, SPU_RUNCNTL_STOP); in spu_setup_isolated()
169 spu_mfc_sr1_set(ctx->spu, sr1); in spu_setup_isolated()
175 static int spu_run_init(struct spu_context *ctx, u32 *npc) in spu_run_init() argument
180 spuctx_switch_state(ctx, SPU_UTIL_SYSTEM); in spu_run_init()
186 if (ctx->flags & SPU_CREATE_NOSCHED) { in spu_run_init()
187 if (ctx->state == SPU_STATE_SAVED) { in spu_run_init()
188 ret = spu_activate(ctx, 0); in spu_run_init()
197 if (ctx->flags & SPU_CREATE_ISOLATE) { in spu_run_init()
198 if (!(ctx->ops->status_read(ctx) & SPU_STATUS_ISOLATED_STATE)) { in spu_run_init()
199 ret = spu_setup_isolated(ctx); in spu_run_init()
208 runcntl = ctx->ops->runcntl_read(ctx) & in spu_run_init()
220 ctx->ops->privcntl_write(ctx, privcntl); in spu_run_init()
221 ctx->ops->npc_write(ctx, *npc); in spu_run_init()
224 ctx->ops->runcntl_write(ctx, runcntl); in spu_run_init()
226 if (ctx->flags & SPU_CREATE_NOSCHED) { in spu_run_init()
227 spuctx_switch_state(ctx, SPU_UTIL_USER); in spu_run_init()
230 if (ctx->state == SPU_STATE_SAVED) { in spu_run_init()
231 ret = spu_activate(ctx, 0); in spu_run_init()
235 spuctx_switch_state(ctx, SPU_UTIL_USER); in spu_run_init()
239 set_bit(SPU_SCHED_SPU_RUN, &ctx->sched_flags); in spu_run_init()
243 static int spu_run_fini(struct spu_context *ctx, u32 *npc, in spu_run_fini() argument
248 spu_del_from_rq(ctx); in spu_run_fini()
250 *status = ctx->ops->status_read(ctx); in spu_run_fini()
251 *npc = ctx->ops->npc_read(ctx); in spu_run_fini()
253 spuctx_switch_state(ctx, SPU_UTIL_IDLE_LOADED); in spu_run_fini()
254 clear_bit(SPU_SCHED_SPU_RUN, &ctx->sched_flags); in spu_run_fini()
255 spu_switch_log_notify(NULL, ctx, SWITCH_LOG_EXIT, *status); in spu_run_fini()
256 spu_release(ctx); in spu_run_fini()
272 static int spu_handle_restartsys(struct spu_context *ctx, long *spu_ret, in spu_handle_restartsys() argument
308 static int spu_process_callback(struct spu_context *ctx) in spu_process_callback() argument
317 npc = ctx->ops->npc_read(ctx) & ~3; in spu_process_callback()
318 ls = (void __iomem *)ctx->ops->get_ls(ctx); in spu_process_callback()
330 spu_release(ctx); in spu_process_callback()
334 ret = spu_handle_restartsys(ctx, &spu_ret, &npc); in spu_process_callback()
336 mutex_lock(&ctx->state_mutex); in spu_process_callback()
343 ls = (void __iomem *)ctx->ops->get_ls(ctx); in spu_process_callback()
347 ctx->ops->npc_write(ctx, npc); in spu_process_callback()
348 ctx->ops->runcntl_write(ctx, SPU_RUNCNTL_RUNNABLE); in spu_process_callback()
352 long spufs_run_spu(struct spu_context *ctx, u32 *npc, u32 *event) in spufs_run_spu() argument
358 if (mutex_lock_interruptible(&ctx->run_mutex)) in spufs_run_spu()
361 ctx->event_return = 0; in spufs_run_spu()
363 ret = spu_acquire(ctx); in spufs_run_spu()
367 spu_enable_spu(ctx); in spufs_run_spu()
369 spu_update_sched_info(ctx); in spufs_run_spu()
371 ret = spu_run_init(ctx, npc); in spufs_run_spu()
373 spu_release(ctx); in spufs_run_spu()
378 ret = spufs_wait(ctx->stop_wq, spu_stopped(ctx, &status)); in spufs_run_spu()
385 mutex_lock(&ctx->state_mutex); in spufs_run_spu()
388 spu = ctx->spu; in spufs_run_spu()
390 &ctx->sched_flags))) { in spufs_run_spu()
392 spu_switch_notify(spu, ctx); in spufs_run_spu()
397 spuctx_switch_state(ctx, SPU_UTIL_SYSTEM); in spufs_run_spu()
401 ret = spu_process_callback(ctx); in spufs_run_spu()
406 ret = spufs_handle_class1(ctx); in spufs_run_spu()
410 ret = spufs_handle_class0(ctx); in spufs_run_spu()
420 spu_disable_spu(ctx); in spufs_run_spu()
421 ret = spu_run_fini(ctx, npc, &status); in spufs_run_spu()
422 spu_yield(ctx); in spufs_run_spu()
426 ctx->stats.libassist++; in spufs_run_spu()
450 *event = ctx->event_return; in spufs_run_spu()
452 mutex_unlock(&ctx->run_mutex); in spufs_run_spu()