  PROCEDURE [INLINE] dfp$initialize_rma_list
    (    pva: ^cell;
         offset: ost$segment_length;
         length: ost$segment_length;
         p_data_rma_list: dft$p_data_rma_list;
     VAR data_descriptor: dft$data_descriptor;
     VAR status: ost$status);

    VAR
      p_page: ^cell,
      page: 0 .. dfc$max_rma_list_entries,
      page_count: 0 .. dfc$max_rma_list_entries,
      ring: ost$ring,
      rma: integer,
      segment: ost$segment,
      starting_offset: ost$segment_offset,
      touch_byte: cell;

    status.normal := TRUE;
    page_count := dfp$page_count (length);
    data_descriptor.indirect_address := TRUE;
    data_descriptor.actual_length := page_count * 8;
    ring := #RING (pva);
    segment:= #SEGMENT(pva);
    starting_offset := #OFFSET (pva);

  /initialize_rma_list_entry/
    FOR page := 1 TO page_count DO
      p_page := #ADDRESS (ring, segment, starting_offset + offset +
            ((page - 1) * osv$page_size));
      i#real_memory_address (p_page, rma);
      IF (rma = 80000000) OR (rma  <= 0) THEN
        { Touch the page to bring the page into memory.
        touch_byte := p_page^;
        i#real_memory_address (p_page, rma);
      IFEND;
      IF (rma = 80000000) OR (rma  <= 0) THEN
        osp$set_status_abnormal (dfc$file_server_id, dfe$data_length_error, '',
              status);
        RETURN;
      ELSE
        p_data_rma_list^ [page].rma := rma;
        p_data_rma_list^ [page].fill := 0;
        p_data_rma_list^ [page].length :=  osv$page_size;
      IFEND;
    FOREND /initialize_rma_list_entry/;
  PROCEND dfp$initialize_rma_list;
?? PUSH (LISTEXT := ON) ??
*copyc dfc$esm_allocation_constants
*copyc dfd$driver_queue_types
*copyc dfe$error_condition_codes
*copyc dfp$page_count
*copyc i#real_memory_address
*copyc osp$set_status_abnormal
*copyc ost$hardware_subranges
*copyc ost$status
*copyc osv$page_size
?? POP ??
