{ DECK: DFT$REQUEST_BUFFER

{  INN, OUT,  and LIMIT values describe the byte offset from the
{  buffer start.  All three values are multiples of 8.
{  The following conventions apply to this circular request buffer.
{  * LIMIT = total bytes in the buffer
{  * INN + start is the next place for CPU to put entry
{  * OUT + start is the next place for the PP to take an entry
{  * IF INN = OUT THEN buffer is empty
{  * IF INN = OUT - 8 THEN  buffer is full
{  * first is the logical successor of first + LIMIT - 8


  TYPE
    dft$request_buffer_directory = record
      inn: ALIGNED [0 MOD 8] integer,
      out: ALIGNED [0 MOD 8] integer,
      limit: ALIGNED [0 MOD 8] integer,
      fill3: ALIGNED [0 MOD 8] 0 .. 0FFFFFFFF(16),
      request_buffer_rma: ALIGNED [4 MOD 8] ost$real_memory_address,
      fill4: ALIGNED [0 MOD 8] 0 .. 0FFFF(16),
      p_request_buffer: ALIGNED [2 MOD 8] ^dft$request_buffer,
    recend;

  TYPE
    dft$request_buffer = record
      {Driver'S WORK TO DO LIST}
      request_buffer_entries: ALIGNED [0 MOD 4096] dft$request_buffer_entries,
    recend,

    dft$request_buffer_entries = array [1 .. dfc$max_request_buffer_entries] of
          dft$request_buffer_entry;


  TYPE
    dft$request_buffer_entry = record
      flags: ALIGNED [0 MOD 8] dft$request_buffer_entry_flags,
      fill1: ALIGNED [2 MOD 8] 0 .. 0FFFF(16),
      inquiry_message: ALIGNED [4 MOD 8] dft$inquiry_message,
      queue_index: ALIGNED [6 MOD 8] 0 .. 0FF(16),
      queue_entry_index: ALIGNED [7 MOD 8] 0 .. 0FF(16),
    recend,

    dft$request_buffer_entry_flags = packed record
      previously_processed: boolean,
      inquiry: boolean,
      fill: 0 .. 3FFF(16),
    recend;

?? PUSH (LISTEXT := ON) ??
*copyc dfd$driver_queue_types
*copyc dft$inquiry_message
*copyc ost$hardware_subranges
?? POP ??


