?? RIGHT := 110 ??
?? NEWTITLE := 'NOS/VE MANAGE MEMORY UTILITY - Ring3 helper routines' ??
MODULE mmm$manage_memory_helper_r3;

{ PURPOSE:
{   This module contains the fetch and store helper routines which act as an interface between the
{   Manage_Memory Utility which executes in 2dd and the ring1 fetch and store routines.
{
{ DESIGN:
{   The store procedure ensures that the store function is only performed from the system job.  Both procs
{   simply call the corresponding ring1 routine to actually fetch/store the data.  Per standard ring crossing
{   coding, these procs use local variables for the calls to the Ring 1 procedures.  Thus Ring 1 is insulated
{   from possible access violations if the input parameters to Ring3 are incorrect.

?? NEWTITLE := 'Glocal Declarations Referenced by This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc mmt$manage_memory_utility
*copyc mmt$page_queue_list
*copyc ofe$error_codes
*copyc ost$status
?? POP ??
*copyc avp$configuration_administrator
*copyc avp$system_administrator
*copyc mmp$fetch_dynamic_aging_enab_r1
*copyc mmp$fetch_manage_memory_data_r1
*copyc mmp$fetch_site_active_q_cnt_r1
*copyc mmp$reset_dynamic_aging_r1
*copyc mmp$store_manage_memory_data_r1
*copyc osp$set_status_abnormal
*copyc osp$verify_system_privilege
?? OLDTITLE ??
?? NEWTITLE := 'Glocal Declarations Referenced by This Module', EJECT ??

{ begin of temporary for debugging purpose ...
*copyc oss$task_private

  TYPE
    t$force_dynamic_aging_attribute = (c$display_memory_attributes, c$display_shared_queue_attrib,
          c$change_memory_attributes, c$change_shared_queue_attrib),
    t$force_dynamic_aging_attribs = set of t$force_dynamic_aging_attribute,
    mmt$mmu_debug_options = record
      force_dynamic_aging_attributes: t$force_dynamic_aging_attribs,
    recend;

  VAR
    mmv$debug_options: [XDCL, #GATE, oss$task_private] mmt$mmu_debug_options :=
          [$t$force_dynamic_aging_attribs []];

?? NEWTITLE := 'mmp$mmu_set_debug_options', EJECT ??

  PROCEDURE [XDCL, #GATE] mmp$mmu_set_debug_options
    (  debug_options: mmt$mmu_debug_options);

    mmv$debug_options := debug_options;

  PROCEND mmp$mmu_set_debug_options;

{ end of temporary for debugging purpose ...
?? OLDTITLE ??
?? NEWTITLE := 'mmp$fetch_dynamic_aging_enab_r3', EJECT ??

{ PURPOSE:
{   This procedure retrieves the dynamic aging enabled attribute for the Manage Memory Utility from ring1.

  PROCEDURE [XDCL, #GATE] mmp$fetch_dynamic_aging_enab_r3
    (VAR dynamic_aging_enabled: boolean);

    VAR
      local_dynamic_aging_enabled: boolean;

    osp$verify_system_privilege;

    mmp$fetch_dynamic_aging_enab_r1 (local_dynamic_aging_enabled);

    dynamic_aging_enabled := local_dynamic_aging_enabled;

  PROCEND mmp$fetch_dynamic_aging_enab_r3;
?? OLDTITLE ??
?? NEWTITLE := 'mmp$fetch_manage_memory_data_r3', EJECT ??

{ PURPOSE:
{   This procedure retrieves the data for the Manage Memory Utility from ring1.

  PROCEDURE [XDCL, #GATE] mmp$fetch_manage_memory_data_r3
    (VAR queues: mmt$global_page_queue_list;
     VAR ma_values: mmt$mmu_ma_values;
     VAR gpql_default: mmt$mmu_gpql_default;
     VAR ma_default: mmt$mmu_ma_default);

    VAR
      local_gpql_default: mmt$mmu_gpql_default,
      local_ma_default: mmt$mmu_ma_default,
      local_ma_values: mmt$mmu_ma_values,
      local_queues: mmt$global_page_queue_list;

    osp$verify_system_privilege;

    mmp$fetch_manage_memory_data_r1 (local_queues, local_ma_values, local_gpql_default, local_ma_default);

    gpql_default := local_gpql_default;
    ma_default := local_ma_default;
    queues := local_queues;
    ma_values := local_ma_values;

  PROCEND mmp$fetch_manage_memory_data_r3;
?? OLDTITLE ??
?? NEWTITLE := 'mmp$fetch_site_active_q_cnt_r3', EJECT ??

{ PURPOSE:
{   This procedure retrieves the site active queue count for the Manage Memory Utility from ring1.

  PROCEDURE [XDCL, #GATE] mmp$fetch_site_active_q_cnt_r3
    (VAR site_active_queue_count: 0 .. mmc$pq_shared_num_sites);

    VAR
      local_site_active_queue_count: 0 .. mmc$pq_shared_num_sites;

    osp$verify_system_privilege;

    mmp$fetch_site_active_q_cnt_r1 (local_site_active_queue_count);

    site_active_queue_count := local_site_active_queue_count;

  PROCEND mmp$fetch_site_active_q_cnt_r3;

?? OLDTITLE ??
?? NEWTITLE := 'mmp$reset_dynamic_aging_r3', EJECT ??

  PROCEDURE [XDCL, #GATE] mmp$reset_dynamic_aging_r3
    (    queues: set of mmt$global_page_queue_index;
         reset_values: mmt$mmu_reset_values;
     VAR status: ost$status);

    VAR
      local_queues: set of mmt$global_page_queue_index;

    IF NOT (avp$system_administrator () OR avp$configuration_administrator ()) THEN
      osp$set_status_abnormal ('OF', ofe$sou_not_active,
            'system_administration or configuration_administration', status);
      RETURN; {----->
    IFEND;

    local_queues := queues;

    mmp$reset_dynamic_aging_r1 (local_queues, reset_values);

  PROCEND mmp$reset_dynamic_aging_r3;
?? OLDTITLE ??
?? NEWTITLE := 'mmp$store_manage_memory_data_r3', EJECT ??

{ PURPOSE:
{   This procedure stores the data for the Manage Memory Utility.  A check is made to ensure that the user is
{   authorized to store the data.  The input parameters are transferred to local variables before the call to
{   the Ring 1 procedure.

  PROCEDURE [XDCL, #GATE] mmp$store_manage_memory_data_r3
    (    reset_dynamic_aging: boolean;
     VAR queues: mmt$global_page_queue_list;
     VAR ma_values: mmt$mmu_ma_values;
     VAR status: ost$status);

    VAR
      local_ma_values: mmt$mmu_ma_values,
      local_reset_dynamic_aging: boolean,
      local_queues: mmt$global_page_queue_list;

    IF NOT (avp$system_administrator () OR avp$configuration_administrator ()) THEN
      osp$set_status_abnormal ('OF', ofe$sou_not_active,
            'system_administration or configuration_administration', status);
      RETURN; {----->
    IFEND;

    local_reset_dynamic_aging := reset_dynamic_aging;
    local_queues := queues;
    local_ma_values := ma_values;

    mmp$store_manage_memory_data_r1 (local_reset_dynamic_aging, local_queues, local_ma_values, status);

  PROCEND mmp$store_manage_memory_data_r3;

MODEND mmm$manage_memory_helper_r3;
