?? RIGHT := 110 ??
*copyc osd$default_pragmats
?? TITLE := 'NOS/VE Subsystem IO' ??
?? NEWTITLE := '  Module Header', EJECT ??
MODULE iom$subsystem_io_r223;
{
{  PURPOSE: This module contains the ring 223 code to support subsystem io.
{
{  DESIGN:
{
?? TITLE := '  Declarations', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc ioe$st_errors
?? POP ??
?? TITLE := '  XREF Procedures', EJECT ??
*copyc iop$set_status_abnormal
*copyc cmp$get_io_completion_tbl_entry
*copyc cmp$get_number_of_io_entries
*copyc cmp$destroy_io_completion_tb_r1
*copyc cmp$ssiot_termination
*copyc iop$ssiot_recovery_processing
?? TITLE := '  [XDCL, #GATE] cmp$recover_subsystem_io_table', EJECT ??

*copyc cmh$recover_subsystem_io_table

  PROCEDURE [XDCL, #GATE] cmp$recover_subsystem_io_table ( VAR status: ost$status);


      status.normal := TRUE;

      cmp$ssiot_recovery_processing (status);


PROCEND cmp$recover_subsystem_io_table;
?? TITLE := '  [XDCL, #GATE] cmp$destroy_io_completion_tb_r2', EJECT ??

*copyc cmh$destroy_io_completion_tb_r2

  PROCEDURE [XDCL, #GATE] cmp$destroy_io_completion_tb_r2 (VAR status: ost$status);

     VAR
       io_completion_table_entry_p: ^cmt$io_completion_table_entry,
       index: cmt$io_completion_queue_index,
       number_of_ioct_entries: cmt$io_completion_queue_index;

      status.normal := TRUE;

      cmp$get_number_of_io_entries (number_of_ioct_entries);
      IF number_of_ioct_entries = 0 THEN
         RETURN;
      IFEND;

      FOR index := 1 TO number_of_ioct_entries DO
         cmp$get_io_completion_tbl_entry (index, io_completion_table_entry_p);
         IF NOT io_completion_table_entry_p^.available THEN
            iop$set_status_abnormal (ioe$io_completion_table_error,
              'Trying to destroy io completion table with outstanding requests - IOMSSIOR223',
              status);
            RETURN;
         IFEND;
      FOREND;

      cmp$destroy_io_completion_tb_r1 (status);

  PROCEND cmp$destroy_io_completion_tb_r2;
?? TITLE := '  [XDCL, #GATE] cmp$subsystem_io_job_exit', EJECT ??

*copyc cmh$subsystem_io_job_exit

 PROCEDURE [XDCL, #GATE] cmp$subsystem_io_job_exit (VAR status: ost$status);

      status.normal := TRUE;

      cmp$destroy_io_completion_tb_r2 (status);

 PROCEND cmp$subsystem_io_job_exit;


 PROCEDURE [XDCL, #GATE] cmp$ssiot_termination_r2 (VAR status: ost$status);


  status.normal := TRUE;


  cmp$ssiot_termination (status);

 PROCEND cmp$ssiot_termination_r2;


MODEND iom$subsystem_io_r223;
