{ DECK: DFD$DRIVER_QUEUE_TYPES

  CONST
    dfc$max_request_buffer_entries = 256;

  TYPE
    dft$id_number = 1 .. dfc$max_number_of_mainframes,
    dft$divisions_per_mainframe = 1 .. dfc$max_esm_divisions;


  TYPE
    dft$p_queue_interface_table = ^dft$queue_interface_table,

    dft$queue_interface_table = record
      request_buffer_directory: ALIGNED [0 MOD 4096]
            dft$request_buffer_directory,
      esm_base_addresses: dft$esm_base_addresses,
      maximum_data_bytes: INTEGER, {dfc$min_data_record_bytes .. dfc$max_data_record_bytes}
      queue_directory: dft$queue_directory,
    recend;

  TYPE

    dft$esm_base_addresses = record
      number_of_mainframes: ALIGNED [0 MOD 8] 0 .. 0FFFF(16),
      divisions_per_mainframe: ALIGNED [2 MOD 8] 0 .. 0FFFF(16),
      esm_flag_base: ALIGNED [4 MOD 8] 0 .. 0FFFF(16),
      esm_memory_base: ALIGNED [6 MOD 8] 0 .. 0FFFFFFFF(16), {Divided by 100 octal}
      esm_division_size: ALIGNED [2 MOD 8] 0 .. 0FFFF(16),   {Divided by 100 octal}
      esm_divsiz_12bit_cw: ALIGNED [4 MOD 8] 0 .. 0FFFF(16), {Divided by 100 octal}
      esm_divsiz_16bit_cw: ALIGNED [6 MOD 8] 0 .. 0FFFF(16), {Divided by 100 octal}
    recend,

    dft$queue_directory = record
      dma_adapter:ALIGNED [0 MOD 8] dft$dma_adapter,
      send_pp_number: ALIGNED [2 MOD 8] iot$pp_number,
      receive_pp_number: ALIGNED [4 MOD 8] iot$pp_number,
      fill1: ALIGNED [6 MOD 8] 0 .. 0FFFF(16),
      fill2: ALIGNED [0 MOD 8] 0 .. 0FFFF(16),
      fill3: ALIGNED [2 MOD 8] 0 .. 0FFFF(16),
      source_id_number: ALIGNED [4 MOD 8] 0 .. 0FFFF(16),
      number_of_queues: ALIGNED [6 MOD 8] 0 .. 0FFFF(16),
      driver_queue_rma_directory: dft$driver_queue_rma_entries,
      driver_queue_pva_directory: dft$driver_queue_pva_entries,
      cpu_queue_pva_directory: dft$cpu_queue_pva_entries,
    recend,

    dft$dma_adapter = packed record
      use_on_send_channel: boolean,
      use_on_recv_channel: boolean,
      iou_i0_model: boolean,
      fill: 0 .. 1FFF(16),
    recend,

    dft$driver_queue_rma_entries = array [1 .. dfc$max_number_of_queues] of
          dft$driver_queue_rma_entry,
    dft$driver_queue_pva_entries = array [1 .. dfc$max_number_of_queues] of
          dft$driver_queue_pva_entry,
    dft$cpu_queue_pva_entries = array [1 .. dfc$max_number_of_queues] of
          dft$cpu_queue_pva_entry,

    dft$driver_queue_rma_entry = record
      fill: ALIGNED [0 MOD 8] 0 .. 0FFFFFFFF(16),
      driver_queue_rma: ALIGNED [4 MOD 8] ost$real_memory_address,
    recend,

    dft$driver_queue_pva_entry = record
      p_driver_queue: ^dft$driver_queue,
    recend,

    dft$cpu_queue_pva_entry = record
      p_cpu_queue: ^dft$cpu_queue,
    recend;

  TYPE
    dft$driver_queue = record
      queue_header: ALIGNED [0 MOD 4096] dft$driver_queue_header,
      queue_entries: ALIGNED [0 MOD 8] dft$driver_queue_entries,
    recend,

    dft$driver_queue_header = record
      flags: ALIGNED [0 MOD 8] dft$driver_queue_header_flags,
      interrupt: ALIGNED [2 MOD 8] dft$interrupt,
      number_of_queue_entries: ALIGNED [6 MOD 8] 0 .. 0FFFF(16),
      connection_descriptor: ALIGNED [0 MOD 8] dft$connection_descriptor,
    recend,

    dft$driver_queue_header_flags = packed record
      idle: boolean,
      fill: 0 .. 07FFF(16),
    recend,

    dft$interrupt = packed record
      fill: 0 .. 3(16),
      interrupt: iot$interrupt,
    recend,

    dft$connection_descriptor = record
      source: dft$connection_address,
      destination: dft$connection_address,
      fill: ost$word,
    recend,

    dft$connection_address = record
      flags: dft$connection_flags,
      id_number: 0 .. 0FFFF(16),
      fill1: 0 .. 0FFFF(16),
      queue_index: 0 .. 0FF(16),
      queue_entry_index: 0 .. 0FF(16),
    recend,

    dft$connection_flags = packed record
      server_to_client: boolean,
      fill: 0 .. 7FFF(16),
    recend,

    dft$driver_queue_entries = array [1 .. * ] of dft$driver_queue_entry,

    dft$driver_queue_entry = record
      flags: ALIGNED [0 MOD 8] dft$queue_entry_flags,
      error_condition: ALIGNED [2 MOD 8] 0 .. 0FFFF(16),
      { BEGIN  driver usage only }
      held_over_cm_word_count: ALIGNED [4 MOD 8] 0 .. 0FFFF(16),
      held_over_esm_division_number: 0 .. 0FFFF(16),
      { END driver usage only }
      send_buffer_descriptor: ALIGNED [0 MOD 8] dft$data_descriptor,
      receive_buffer_descriptor: ALIGNED [0 MOD 8] dft$data_descriptor,
      data_descriptor: ALIGNED [0 MOD 8] dft$data_descriptor,
    recend,

    dft$queue_entry_flags = packed record
      { queue control }
      active_entry: boolean,
      driver_action: boolean,
      subsystem_action: boolean,
      driver_error_alert: boolean,

      { command driver }
      send_command: boolean,
      send_data: boolean,
      fill: boolean,
      send_ready_for_data: boolean,

      { event status }
      buffer_sent: boolean,
      data_sent: boolean,
      buffer_received: boolean,
      data_received: boolean,

      { driver status }
      ready_for_data_sent: boolean,
      ready_for_data_received: boolean,
      process_response: boolean,
      fill1: boolean,
    recend,

    dft$error_condition = 0 .. 0FFFF(16),

    dft$data_descriptor = packed record
      indirect_address: boolean,
      fill: 0 .. 07FFF(16),
      {  IF NOT indirect_address length (bytes) must be a multiple of word
      { size (8)
      actual_length: 0 .. 0FFFF(16),
      address: ost$real_memory_address,
    recend;


?? PUSH (LISTEXT := ON) ??
*copyc cmc$maximum_esm_size
*copyc dfc$esm_allocation_constants
*copyc dft$cpu_queue
*copyc dft$fs_pp_response
*copyc dft$queue_index
*copyc dft$request_buffer
*copyc iot$pp_number
*copyc iot$request_recovery
*copyc ost$hardware_subranges
?? POP ??
