
{
{    Type definitions for memory management.
{
{
{ NOTE: If TYPE declarations or record fields are added/changed/deleted, please
{   make the appropriate changes in the corresponding display procedures in the
{   module(s) for the System Core Debugger: SYM$DEBUG, SYM$DEBUG1
{

  TYPE
    mmt$attribute_keyword = (mmc$kw_null_keyword, mmc$kw_ring_numbers,
      mmc$kw_segment_number, mmc$kw_current_segment_length,
      mmc$kw_max_segment_length, mmc$kw_clear_space,
      mmc$kw_error_exit_procedure, mmc$kw_software_attributes, mmc$kw_gl_key,
      mmc$kw_preset_value, mmc$kw_segment_access_control, mmc$kw_asid,
      mmc$kw_inheritance, mmc$kw_hardware_attributes,
      mmc$kw_shadow_segment, mmc$kw_wired_segment, mmc$kw_ps_transfer_size ),

{ * * *  WARNING - mmc$kw_hardware_attributes and mmc$kw_ring_numbers
{ * * *           will be deleted. Replace with mmc$kw_access_control.


{Define the record used to describe an attribute of a segment.}

    mmt$attribute_descriptor = record
      case keyword: mmt$attribute_keyword of
      = mmc$kw_ring_numbers =
        r1: ost$ring,
        r2: ost$ring,
      = mmc$kw_segment_number =
        segnum: ost$segment,
      = mmc$kw_current_segment_length =
        current_length: ost$segment_length,
      = mmc$kw_max_segment_length =
        max_length: ost$segment_length,
      = mmc$kw_gl_key =
        gl_key: ost$key_lock,
      = mmc$kw_clear_space =
        clear_space: boolean,
      = mmc$kw_preset_value =
        preset_value: pmt$initialization_value,
      = mmc$kw_error_exit_procedure = {? ? may use conditions ? ?}
        err_exit_proc: ^procedure (pva: ^cell;
          VAR status: ost$status),
      = mmc$kw_hardware_attributes =
        hardware_attri_set: mmt$hardware_attribute_set,
      = mmc$kw_software_attributes =
        software_attri_set: mmt$software_attribute_set,
      = mmc$kw_segment_access_control =
        access_control: ost$segment_access_control,
      = mmc$kw_asid =
        asid: ost$asid,
      = mmc$kw_inheritance =
        inheritance: mmt$segment_inheritance,
      = mmc$kw_shadow_segment =
        shadow_p: ^cell,
        shadow_length: ost$segment_length,
      = mmc$kw_wired_segment =
        wired_segment_length: ost$segment_length,
        contiguous_real_memory: boolean,          {NOT SUPPORTED FOR 1.2.2}
      = mmc$kw_ps_transfer_size =
        ps_transfer_size: ost$segment_length,
      casend,
    recend;


  TYPE
    mmt$hardware_attributes = (mmc$ha_read, mmc$ha_read_key_lock,
      mmc$ha_binding, mmc$ha_write, mmc$ha_write_key_lock, mmc$ha_execute,
      mmc$ha_execute_local, mmc$ha_execute_global, mmc$ha_cache_bypass),


{  The software attributes from mmc$sa_wired to mmc$sa_stack can not be set
{  from above ring 3.

    mmt$software_attributes = (mmc$sa_wired, mmc$sa_fixed,
      mmc$sa_stack, mmc$sa_read_transfer_unit, mmc$sa_free_behind,
      mmc$sa_no_append, mmc$sa_job_shared),

    mmt$hardware_attribute_set = set of mmt$hardware_attributes,

    mmt$software_attribute_set = set of mmt$software_attributes;



{Define type declarations for specifying  pointers.}

  TYPE
    mmt$segment_pointer_kind = (mmc$cell_pointer, mmc$sequence_pointer,
      mmc$heap_pointer),

    mmt$segment_pointer = record
      case kind: mmt$segment_pointer_kind of
      = mmc$cell_pointer =
        cell_pointer: ^cell,
      = mmc$sequence_pointer =
        seq_pointer: ^SEQ ( * ),
      = mmc$heap_pointer =
        heap_pointer: ^HEAP ( * ),
      casend,
    recend;


*copyc MMT$SEGMENT_INHERITANCE
*copyc OSD$VIRTUAL_ADDRESS
*copyc OST$HARDWARE_SUBRANGES
*copyc OST$SEGMENT_ACCESS_CONTROL
*copyc OST$STATUS
*copyc PMT$INITIALIZATION_VALUE
