MODULE osm$spi_monitor_mode;
*copyc iot$io_request
*copyc osd$default_pragmats
*copyc oss$mainframe_wired
*copyc ost$spi_control
*copyc tmp$check_taskid
*copyc tmp$set_task_ready

?? TITLE := 'PROCEDURE osp$spi_response_processor', EJECT ??

  PROCEDURE [XDCL] osp$spi_response_processor
    (    pp_response_p: ^iot$pp_response;
         detailed_status_p: ^iot$detailed_status;
         pp: 1 .. ioc$pp_count;
     VAR status: syt$monitor_status);

{
{ Purpose:
{
{ The purpose of this module is to ready the SPI data collector task when
{ the PP issues an unsolicited interupt.
{

    VAR
      osv$spi_response_processor: [XDCL, STATIC, #GATE, oss$mainframe_wired]
            iot$response_processor := ^osp$spi_response_processor,
      osv$spi_control: [XDCL, STATIC, #GATE, oss$mainframe_wired]
            ost$spi_control;

    status.normal := TRUE;

{
{ The collector task may have terminated by this time. First check to see
{ if the task is still running. If it is still running then ready the task.
{
    tmp$check_taskid (osv$spi_control.collector_task, tmc$opt_return, status);

    IF NOT status.normal THEN
      status.normal := TRUE;
      RETURN;
    IFEND;

    tmp$set_task_ready (osv$spi_control.collector_task, 0 {readying_task_priority},
          tmc$rc_ready_conditional_wi);

  PROCEND osp$spi_response_processor;

MODEND osm$spi_monitor_mode;
