DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Wang WCS documentation floppies

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CR80 Wang WCS documentation floppies

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦1cd090af3⟧ Wang Wps File

    Length: 38913 (0x9801)
    Types: Wang Wps File
    Notes: CPS/SDS/028               
    Names: »2017A «

Derivation

└─⟦6ff65156a⟧ Bits:30006101 8" Wang WCS floppy, CR 0160A
    └─⟦this⟧ »2017A « 

WangText



A…09…A…01…A…06…@…0c…@…01…@…05…?…0a…?…0f…?…01…?
?   ?…06…>…08…>…0a…>…0c…>…0e…>…00…>…02…> >…06…=…08…=…0b…=…0e…=…00…=…02…=
=   =…06…<…08…<…0b…<…0d…<…0f……86…1
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    …02… 
     
     
     
     
     …02…
     
    …02… 
     
     
     
    

…02…CPS/SDS/028

…02…820514…02……02…
I/O CONTROL
DETAILED
 DESIGN
 SPECIFICATION…02……02…CAMPS








4.1.5.7  S̲U̲B̲D̲E̲V̲I̲C̲E̲ ̲I̲N̲T̲E̲R̲F̲A̲C̲E̲ ̲M̲O̲D̲U̲L̲E̲



4.1.5.7.1    F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         The SUBDEVICE INTERFACE module implements the scheduling
         of request among the subdevices, an example is scheduling
         of split communication for the VOV protocol.

         The SUBDEVICE INTERFACE interfaces to the higher level
         protocols of the subdevices through the SPI entries
         of these protocols. Within one protocol it interfaces
         to the INPUTTER, OUTPUTTER, and PROT ̲CONT ̲modules

         The task of the SUBDEVICE INTERFACE is to add subdevice
         address to output data and input request as appropriate
         for the protocol.

         The processing for an input request received from a
         subdevice is:

         1.  A queue element is fetched from the protocol's
             local subdevice data. The input request data is
             stored and the subdevice LDU is saved in the queue
             element.

         2.  The INPUTTER is requested for permission to perform
             input.

         3.  When an input request buffer is available it is
             loaded with the request and sent.

         4.  When data arrives it is marked with the subdevice
             LDU identification and handed to the subdevice.

         5.  The input is complete when END ̲OF ̲LDU or ENTIRE
             ̲LDU has been handed to the subdevice.

         Input requests are only accepted one by one from a
         subdevice.

         The processing for an output request is as follows:

         1.  The SUBDEVICE INTERFACE is called by the subdevice
             RESERVE ̲OUTPUT ̲BUFFER.


         2.  A queue element is fetched from the protocols SUBDEV
             ̲DATA for the subdevice and the OUTPUTTER module
             is called to schedule the output.

         3.  When higher priority output requests have been
             served or an ongoing lower priority request is
             completed the SUBDEVICE INTERFACE is notified of
             the availability of an output buffer.

         4.  The output buffer is handed to the subdevice. First
             buffer is shortened to have room for the protocol
             to load addressing information.

         5.  When the subdevice has loaded the data the protocol
             picks up the subdevice LDU identification and saves
             it in the queue element.

         6.  Addressing information is loaded in the buffer
             as appropriate and the buffer is handed to the
             outputter for transmission.

         7.  The OUTPUTTER is reserved for this subdevice until
             completion of output for one LDU.

         8.  Eventually the SUBDEVICE INTERFACE is notified
             by a buffer of the result. The subdevice identification
             of the request is loaded from the queue element
             and the subdevice is notified.

         The processing for a control buffer request from a
         subdevice is:

         1.  The subdevice calls the protocol via RESERVE ̲OUTPUT
             ̲BUFFER with control priority.

         2.  If the SUBDEVICE INTERFACE has no outgoing control
             the control buffer is immediately handed to the
             requestor else the request is queued by means of
             the requestor's own request buffer.

         3.  After having obtained the buffer the subdevice
             loads the control information and hands it back
             to the SUBDEVICE INTERFACE. The control buffer
             may now contain an input request or a cancel request
             or a protocol control command. Input requests have
             already been described. Cancel request and protocol
             control commands are described below.


         The processing for a cancel of a request is as follows:

         1.  The subdevice has sent a control buffer to the
             SUBDEVICE interface with a request to cancel either
             an input or an output.

         2.  The SUBDEVICE INTERFACE calls the INPUTTER or OUTPUTTER
             to cancel the request and upon completion of the
             call the same control buffer is loaded with transmission
             status or reception status and the buffer is returned
             to the subdevice.

         The processing for a protocol control command is as
         follows:

         1.  The subdevice has sent a control buffer with a
             control command to the SUBDEVICE INTERFACE.

         2.  The control may concern the SUBDEVICE INTERFACE
             locally. In this case the request is processed
             and the buffer used to return completion immediately.

         3.  The request may be to the PROTOCOL module. In this
             case the PROTOCOL module is requested to deliver
             a buffer whereinto the request is copied and handed
             to the PROTOCOL module.

         4.  When the PROTOCOL module has completed it returns
             a buffer as response. This buffer is used to notify
             the subdevice of the result.


4.1.5.7.2    M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

         The SUBDEVICE INTERFACE is called via one of the following:

         TRANSMIT ̲OUTPUT ̲BUFFER        (IF ̲PARAM: SPI ̲PARAM,
                                       SUBDEV: SUBDEV ̲DATA)
                                       (CC: COMPLETION ̲CODE)

         RELEASE ̲OUTPUT ̲BUFFER         (IF ̲PARAM: SPI ̲PARAM,
                                       SUBDEV: SUBDEV ̲DATA)
                                       (CC: COMPLETION ̲CODE)

         CANCEL ̲RESERVE ̲OUTPUT ̲BUFFER  (IF ̲PARAM: SPI ̲PARAM,
                                       SUBDEV: SUBDEV ̲DATA)
                                       (CC: COMPLETION ̲CODE)

         RELEASE ̲INPUT ̲B               (IF ̲PARAM: SPI ̲PARAM,
                                       SUBDEV: SUBDEV ̲DATA)
                                       (CC: COMPLETION ̲CODE)

         RESERVE ̲OUTPUT ̲BUFFER         (IF ̲PARAM: SPI ̲PARAM,
                                       SUBDEV: SUBDEV ̲DATA)
                                       (CC: COMPLETION ̲CODE)

         NOTIFY ̲SUBDEVICE ̲FIRST ̲OUTPUT ̲BUFFER
                     (QEL: IO ̲QEL, BUFFER ̲REF: POINTER)()

         NOTIFY ̲SUBDEVICE ̲SUBSEQUENT ̲OUTPUT ̲BUFFER
                     (QEL: IO ̲QEL, BUFFER ̲REF: POINTER)()

         SUBDEVICE ̲OUTPUT ̲RESULT       (QEL: IO ̲QEL, BUFFER
                                       ̲REF:
                                       POINTER)()

         SUBDEVICE ̲INPUT ̲RESULT        (QEL: IO ̲QEL, BUFFER
                                       ̲REF:
                                       POINTER)()

         NOTIFY ̲SUBDEVICE ̲INPUT ̲REQUEST ̲BUFFER
                     (QEL: IO ̲QEL, BUFFER ̲REF: POINTER)()

         NOTIFY ̲SUBDEVICE ̲INPUT ̲DATA
                     (QEL: IO ̲QEL, BUFFER ̲REF: POINTER)()

         NOTIFY ̲SUBDEVICE ̲FIRST ̲INPUT ̲DATA
                     (QEL: IO ̲QEL, BUFFER ̲REF: POINTER)()

         INITIALIZE ̲SUBDEVICE ̲INTERFACE
                     (PARAM: OPEN ̲SUBDEVICE ̲PARAM)()

         CLEAN ̲SUBDEVICES()()


         SUBDEVICE ̲OUTPUT ̲RESULT       (QEL: IO ̲QEL,
                                       BUFFER-̲REF: POINTER)()

         NOTIFY ̲SUBDEVICE ̲FIRST ̲INPUT ̲DATA (QEL: IO ̲QEL,
                                       BUFFER ̲REF: POINTER)()

         NOTIFY ̲SUBDEVICE ̲INPUT ̲DATA   (QEL: IO ̲QEL,
                                       BUFFER ̲REF: POINTER)()

         NOTIFY ̲SUBDEVICE ̲INPUT ̲REQUEST ̲BUFFER (QEL: IO ̲QEL,
                                       BUFFER ̲REF: POINTER)()

         SUBDEVICE ̲INPUT ̲RESULT        (QEL: IO ̲QEL,
                                       BUFFER ̲REF: POINTER)()

         NOTIFY ̲SUBDEVICE ̲FIRST ̲OUTPUT ̲BUFFER (QEL: IO ̲QEL,
                                       BUFFER ̲REF: POINTER)
                                       ()

         NOTIFY ̲SUBDEVICE ̲SUBSEQUENT ̲OUTPUT ̲BUFFER (QEL: IO
         ̲QEL,
                                       BUFFER ̲REF: POINTER)()

         OPEN ̲SUBDEVICE                (PARAM: OPEN ̲SUBDEVICE
                                       ̲PARAM) (CC: COMPLETION
                                       ̲CODE)

         WANT ̲TO ̲CLOSE                 (SUBDEV: SUBDEV ̲DATA)()


         The SUBDEVICE INTERFACE calls the following functional
         entries of other modules:

         REQUEST ̲DATA ̲INPUT            (QEL: IO ̲QEL,
                                       PRIORITY: PRIORITY ̲TYPE)
                                       (CC: COMPLETION ̲CODE,
                                       BUFFER ̲REF: POINTER)

         SEND ̲INPUT ̲REQUEST            (BUFFER ̲REF: POINTER)()

         REQUEST ̲DATA ̲OUTPUT           (QEL: IO ̲QEL,
                                       PRIORITY: PRIORITY ̲TYPE)
                                       (CC: COMPLETION ̲CODE,
                                       BUFFER ̲REF: POINTER)

         REQUEST ̲NEXT ̲BUFFER()         (CC: COMPLETION ̲CODE,
                                       BUFFER ̲REF: POINTER)()

         SEND ̲OUTPUT ̲BUFFER            (TYPE: BUFFER ̲TYPES,
                                       BYTE ̲COUNT: INTEGER)()


         Furthermore

         PROTOCOL ̲ERROR
         QUEUE
         INIT ̲QD
         EXTRACT ̲FIRST


4.1.5.7.3    M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         E̲n̲t̲r̲y̲ ̲p̲o̲i̲n̲t̲ ̲p̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         B̲a̲s̲i̲c̲ ̲p̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         INITIALIZE ̲SUBDEVICE ̲INTERFACE        5.1
         CLEAN ̲SUBDEVICES                      5.1

         I̲n̲p̲u̲t̲-̲o̲u̲t̲p̲u̲t̲ ̲p̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         RELEASE ̲INPUT ̲B                       5.2
         RESERVE ̲OUTPUT ̲BUFFER                 5.2
         CANCEL ̲RESERVE ̲OUTPUT ̲BUFFER          5.2
         RELEASE ̲OUTPUT ̲BUFFER                 5.2
         TRANSMIT ̲OUTPUT ̲BUFFER                5.2

         O̲U̲T̲P̲U̲T̲T̲E̲R̲ ̲n̲o̲t̲i̲f̲i̲c̲a̲t̲i̲o̲n̲ ̲p̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         NOTIFY ̲SUBDEVICE ̲FIRST ̲OUTPUT ̲BUFFER  5.3
         NOTIFY ̲SUBDEVICE ̲SUBSEQUENT ̲OUTPUT
                                       BUFFER  5.3
         SUBDEVICE ̲OUTPUT ̲RESULT               5.3

         I̲N̲P̲U̲T̲T̲E̲R̲ ̲n̲o̲t̲i̲c̲i̲f̲a̲t̲i̲o̲n̲ ̲p̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         NOTIFY ̲SUBDEVICE ̲INPUT ̲REQUEST ̲BUFFER 5.4
         NOTIFY ̲SUBDEVICE ̲FIRST ̲INPUT ̲DATA     5.4
         NOTIFY ̲SUBDEVICE ̲INPUT ̲DATA           5.4
         SUBDEVICE ̲INPUT ̲RESULT                5.4

         S̲u̲b̲d̲e̲v̲i̲c̲e̲ ̲c̲o̲n̲t̲r̲o̲l̲ ̲p̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         OPEN ̲SUBDEVICE                        5.5
         WANT ̲TO ̲CLOSE                         5.5

         C̲o̲m̲p̲o̲n̲e̲n̲t̲ ̲p̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         I̲n̲p̲u̲t̲ ̲h̲a̲n̲d̲l̲i̲n̲g̲ ̲p̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         LOAD ̲INPUT ̲REQUEST                    5.6
         RETURN ̲INPUT ̲DATA                     5.6


         O̲u̲t̲p̲u̲t̲ ̲h̲a̲n̲d̲l̲i̲n̲g̲ ̲p̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         CANCEL ̲ONGOING ̲OUTPUT         5.7
         SETUP ̲FIRST ̲OUTPUT ̲BUFFER     5.7
         SETUP ̲NEXT ̲OUTPUT ̲BUFFER      5.7
         RETURN ̲OUTPUT ̲BUFFER          5.7

         S̲u̲b̲d̲e̲v̲i̲c̲e̲ ̲h̲a̲n̲d̲l̲i̲n̲g̲ ̲p̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         CLEAN ̲SUBDEVICE               5.8
         INITIALIZE ̲SUBDEVICE ̲DATA     5.8

         C̲o̲n̲t̲r̲o̲l̲ ̲h̲a̲n̲d̲l̲i̲n̲g̲ ̲p̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         NOTIFY ̲CONTROL ̲BUFFER         5.9
         NEXT ̲CONTROL                  5.9
         TERMINATE ̲ONGOING ̲CONTROL     5.9


4.1.5.7.4    D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         TYPE    SUBDEVICE ̲INTERFACE ̲DATA =

                     RECORD
                         CONTROL ̲STATE   : ACTIVITY
                         CONTROL ̲BUFFER  : ARRAY(0..SUBDEV ̲IE
                                         ̲
                                           BUFFER ̲SIZE ̲1) OF
                                          BYTES
                         CONTROL ̲BUF-
                         FER ̲ENTRY       : BUFFER ̲ENTRY
                         PENDING ̲CONTROL : QD
                         ONGOING ̲CONTROL : QD
                         OUTPUT ̲BUF-
                         FER ̲ENTRY       : BUFFER ̲ENTRY
                         OUTPUT ̲STATE    : ACTIVITY
                         OUTPUT ̲QEL      : POINTER
                         SPI    : SPI ̲PARAM
                     END


         CONTROL ̲STATE   Indicates if the CONTROL ̲BUFFER is
                         in use or not.

         CONTROL ̲BUFFER, Used to hand to subdevices when-
         CONTROL ̲BUFFER ̲ENTRY   ever RESERVE ̲OUTPUT ̲BUFFER with
                                control priority

         PENDING ̲CONTROL Queue of REQUEST ̲RECORDS for control
                         buffers. (No priority)



         OUTPUT ̲BUFFER ̲ENTRY    Used to load parameters for
                                a possible reduced buffer before
                                returned to subdevice

         OUTPUT ̲STATE           Indicates if SUBDEVICE INTERFACE
                                is responsible for an LDU in
                                transmission.

         OUTPUT ̲QEL             Points the possible active QEL.

         SPI                    For interfare to subdevice


         TYPE    SUBDEV ̲DATA    = RECORD
                 PRIORITY       : PRIORITY ̲TYPE
                 INPUT ̲QEL      : IO ̲QEL
                 OUTPUT ̲EMPTY   : QD

                 QELS           : ARRAY (1.,MAX ̲SUBDEV ̲OUTQELS)
                                  OF IO ̲QELS

         "Protocol dependent"

                 INSAVE         : ARRAY (1..INPUT ̲REQUEST ̲LENGTH)
                                  OF BYTES

                           END

         PRIORITY     The priority to be used for request of
                      input and output is the OPEN ̲SUBDEVICE
                      priority + SUBDEVICE ̲PRIORITY

         INPUT ̲QEL    Holds an input request from the subdevice

         OUTPUT ̲EMPTY Holds pending output requests for one
         QELS         subdevice

         INSAVE       Save area for input request data


4.1.5.7.5    M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲


4.1.5.7.5.1 B̲a̲s̲i̲c̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         These are
         INITIALIZE ̲SUBDEVICE ̲INTERFACE
         CLEAN ̲SUBDEVICES.


  INITIALIZE ̲SUBDEVICE ̲INTERFACE (PARAM: OPEN ̲SUBDEVICE
  ̲PARAM)()

  P = OWN ̲SDID. SUBDEVICE ̲IF

  P. CONTROL ̲STATE = IDLE

  INIT ̲QD (P.ONGOING ̲CONTROL)()

  INIT ̲QD (P.PENDING ̲CONTROL)()

  INIT  CONTROL ̲BUFFER ̲ENTRY

  P. OUTPUT ̲STATE = IDLE


  RETURN






























               Figure 4.1.5.7.5.1-1


  CLEAN ̲SUBDEVICES ()()

  LOOP

         SUBDEV= OWN ̲SDID. SDDREF. CHILD ̲QUEUE. EP

         SUBDEV EQ NIL ?

         CLEAN ̲SUBDEVICE (SUBDEV)()

  END LOOP

  RETURN

































               Figure 4.1.5.7.5.1-2


4.1.5.7.5.2 I̲n̲p̲u̲t̲-̲O̲u̲t̲p̲u̲t̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

             These are

             RELEASE ̲INPUT ̲B
             RESERVE ̲OUTPUT ̲BUFFER
             CANCEL ̲RESERVE ̲OUTPUT ̲BUFFER
             RELEASE ̲OUTPUT ̲BUFFER
             TRANSMIT ̲OUTPUT ̲BUFFER


  RELEASE ̲INPUT ̲B    (IF ̲PARAM: SPI ̲PARAM, SUBDEV: SUBDEV
                     ̲DATA)
                     (CC:COMPLETION ̲CODE)

  BREF = IF ̲PARAM. BUFFER ̲ENTRY

  BREF EQ OWN ̲SOID. SUBDEVICE ̲IF
  CONTROL ̲BUFFER ENTRY?

  RELEASE ̲INPUT                 TERMINATE ̲ONGOING ̲
  BUFFER (BREF)()               CONTROL()()

  CC = OK

  RETURN
































               Figure 4.1.5.7.5.2-1


  RESERVE ̲OUTPUT ̲BUFFER (IF ̲PARAM: SPI ̲PARAM, SUBDEV:SUBDEV
  ̲DATA)
                                       (CC: COMPLETION
                                       ̲CODE)

  IF ̲PARAM. PRIORITY                   C̲O̲N̲T̲R̲O̲L̲ ̲3̲
  EQ CONTROL ̲PRIORITY ?

  RR = IF ̲PARAM. REQ ̲RECORD

  RR. WORD2 = SUBDEV. OUTPUT ̲QEL

  SUBDEV. OUTPUT ̲QEL. REQ ̲RECORD = RR

  RR. WORD3 = DATA

  OWN ̲SDID: SUBDEVICE ̲IF:
    OUTPUT ̲STATE NE IDLE?       N̲E̲X̲T̲ ̲O̲U̲T̲P̲U̲T̲ ̲5̲
  

  FIRST OUTPUT 4




























               Figure 4.1.5.7.5.2-2


  C̲O̲N̲T̲R̲O̲L̲ ̲3̲

  RR = IF ̲PARAM. REQ ̲RECORD

  RR. WORD2 = SUBDEV. SDIDREF

  RR. WORD3 = CONTROL

  INSERT (OWN ̲SDID. SUBDEVICE ̲IF. PENDING ̲CONTROL, RR)()

  OWN ̲SDID. SUBDEVICE ̲IF.
  CONTROL ̲STATE.EQ.ACTIVE?      CC= REQUEST ̲QUEUED

  NEXT ̲CONTROL() (CCP)

  IF ̲PARAM. BUFFER ̲ENTRY=
         OWN ̲SDID. SUBDEVICE ̲IF.
         CONTROL ̲BUFFER ̲ENTRY

  CC = OK


























               Figure 4.1.5.7.5.2-3


  F̲I̲R̲S̲T̲ ̲O̲U̲T̲P̲U̲T̲ ̲4̲

  OWN ̲SDID. SUBDEVICE ̲IE. OUTPUT ̲STATE = ACTIVE

  REQUEST ̲DATA ̲OUTPUT           (SUBDEV. OUTPUT ̲QEL,
                                 SUBDEV. PRIORITY)
                                (CCP, BUFFER ̲REF)

  CCP EQ REQUEST ̲QUEUED ?       CC= REQUEST ̲QUEUED

  SETUP ̲FIRST ̲OUTPUT ̲BUFFER (BUFFER ̲REF)()

  IF ̲PARAM. BUFFER ̲ENTRY =
         OWN ̲SDID. SUBDEVICE ̲IF
         OUTPUT ̲BUFFER ̲ENTRY

  CC = OK





























               Figure 4.1.5.7.5.2-4


  N̲E̲X̲T̲ ̲O̲U̲T̲P̲U̲T̲ ̲5̲

  REQUEST ̲NEXT ̲BUFFER() (CCP, BUFFER ̲REF)

  CCP EQ REQUEST ̲QUEUED ?   CC = REQUEST QUEUED

  SETUP ̲NEXT ̲OUTPUT ̲BUFFER (BUFFER ̲REF)()

  IF ̲PARAM. BUFFER ̲ENTRY =
         OWN ̲SDID. SUBDEVICE ̲IF
         OUTPUT ̲BUFFER ̲ENTRY

  CC = OK

































               Figure 4.1.5.7.5.2-5


  CANCEL ̲RESERVE ̲OUTPUT ̲BUFFER         (IF ̲PARAM: SPI
                                       ̲PARAM,
                                        SUBDEV: SUBDEV
                                       ̲DATA)
                                       (CC: COMPLETION
                                       ̲CODE)

  RR = IF ̲PARAM. REQ ̲RECORD

  CASE RR. WORD3 OF

         CONTROL ?              C̲A̲N̲C̲E̲L̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲

         DATA ?                 CANCEL ̲ONGOING ̲OUTPUT()()

  END CASE

  CC = OK

  RETURN






























               Figure 4.1.5.7.5.2-6


  C̲A̲N̲C̲E̲L̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲7̲

         A pending buffer reserve is not active control

  CASE EXTRACT ̲SPECIFIED (OWN ̲SDID. SUBDEVICE ̲IF. PENDING
  ̲
                                       CONTROL, RR)()OF

  FAIL ?     PROTOCOL ̲ERROR (SUBDEVICE ̲2 ̲7)

  PASS ?

  END CASE

  CC = OK

































               Figure 4.1.5.7.5.2-7


  RELEASE ̲OUTPUT ̲BUFFER         (IF ̲PARAM: SPI ̲PARAM,
                                 SUBDEV: SUBDEV ̲DATA)
                                (CC: COMPLETION ̲CODE)

  BREF = IF ̲PARAM. BUFFER ̲ENTRY

  BREF EQ OWN ̲SDID. SUBDEVICE ̲
  IF. CONTROL ̲BUFFER ̲ENTRY?

  CANCEL ̲ONGOING ̲OUTPUT()()     TERMINATE ̲ONGOING ̲CONTROL()()


  RETURN
































               Figure 4.1.5.7.5.2-8


  TRANSMIT ̲OUTPUT ̲BUFFER        (IF ̲PARAM: SPI ̲PARAM,
                                 SUBDEV: SUBDEV ̲DATA)
                                (CC ̲COMPLETION ̲CODE)

  BREF = IF ̲PARAM. BUFFER ̲ENTRY

  BUFFER = BREF. PAGE ̲START

  START = BREF. BUFFER ̲ADDR

  SIZE = BREF. BUFFER ̲SIZE

  TYPE = BUFFER (START+BUFFER ̲TYPE ̲OFFSET)

  TYPE INDICATE CONTROL ?

  D̲A̲T̲A̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲0̲                C̲O̲N̲T̲R̲O̲L̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲1̲


  RETURN



























               Figure 4.1.5.7.5.2-9


  D̲A̲T̲A̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲0̲

  TYPE INDICATE START ̲OF ̲LDU
  OR ENTIRE ̲LOU?

  SIZE 1 = SIZE                 SETUP ̲FIRST ̲OUTPUT ̲BUFFER
                                (SIZE)
                                                    
                                                  (SIZE
                                               1)

  SEND ̲OUTPUT ̲BUFFER (TYPE, SIZE 1)()

  TYPE INDICATE END OF DATA ?

                                OWN ̲SDID. SUBDEVICE ̲IF.
                                OUTPUT ̲STATE = IDLE
































               Figure 4.1.5.7.5.2-10


  C̲O̲N̲T̲R̲O̲L̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲1̲

  CONTROL ̲TYPE = BUFFER (START+CONTROL ̲REQUEST ̲OFFSET)

  CASE CONTROL ̲TYPE OF

         INPUT ̲REQUEST ?               I̲N̲P̲U̲T̲ ̲R̲E̲Q̲U̲E̲S̲T̲
                                       ̲1̲2̲

         CANCEL ̲INPUT ̲REQUEST ?        C̲A̲N̲C̲E̲L̲ ̲I̲N̲P̲U̲T̲ ̲R̲E̲Q̲U̲E̲S̲T̲
                                       ̲1̲3̲

         CANCEL-̲OUTPUT ?               C̲A̲N̲C̲E̲L̲ ̲O̲U̲T̲P̲U̲T̲
                                       ̲1̲4̲

         PROTOCOL ̲COMMAND ?            P̲R̲O̲T̲O̲C̲O̲L̲ ̲C̲O̲M̲M̲A̲N̲D̲
                                       ̲1̲5̲

         OTHER ? PROTOCOL ̲ERROR (SUBDEVICE ̲2 ̲11)

  END CASE

  CONTROL ̲COMPLETE EQ FALSE ?

  NEXT ̲CONTROL() (CCP)

  CCP NE OK ?

  NOTIFY ̲CONTROL ̲BUFFER()()





















               Figure 4.1.5.7.5.2-11


  I̲N̲P̲U̲T̲ ̲R̲E̲Q̲U̲E̲S̲T̲ ̲1̲2̲

  Caller identification

  SUBDEV. INPUT ̲QEL. ADDI = SUBDEV. SDIDREF

  SUBDEV: INPUT ̲QEL. REQUESTOR = SUBDEVICE

         LDU

  SUBDEV. INPUT ̲QEL. REQ ̲REF = BUFFER (START + INPUT
  ̲REQUEST ̲LDU ̲
                                                    
                                                    OFFSET)

  COPY INPUT REQUEST DATA TO SUBDEV. INSAVE

  REQUEST ̲DATA ̲INPUT (SUBDEV.INPUT ̲QEL, SUBDEV.PRIORITY)
                                               CCP, BUFFER
                                               ̲REF)

  CCP NE OK ?

  LOAD ̲INPUT ̲REQUEST (SUBDEV.INPUT ̲QEL, BUFFER ̲REF) (SIZE)

  SEND ̲INPUT ̲REQUEST (SIZE)()

  CONTROL ̲COMPLETE = TRUE






















               Figure 4.1.5.7.5.2-12


  C̲A̲N̲C̲E̲L̲ ̲I̲N̲P̲U̲T̲ ̲R̲E̲Q̲U̲E̲S̲T̲ ̲1̲3̲

  LDU = BUFFER (START + CANCEL ̲INPUT ̲LDU ̲OFFSET)

  LDU NE SUBDEV. INPUT ̲QEL. REF ̲REF ?

  CANCEL ̲INPUT (SUBDEV. INPUT ̲QEL)()

  CONTROL ̲COMPLETE = TRUE






































               Figure 4.1.5.7.5.2-13


  C̲A̲N̲C̲E̲L̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲4̲

     Search LDU in QELS

  LDU = BUFFER (START + CANCEL ̲OUTPUT ̲LDU ̲OFFSET)

  INDEX = 1

  LOOP

     QEL = SUBDEV. QELS (INDEX)

     LDU EQ QELREQ ̲REF ?               FOUND = TRUE

     INDEX GE MAX ̲SUBDEV ̲OUTQELS ?     FOUND = FALSE

     INDEX + 1

  END LOOP

  FOUND EQ FALSE ?

  CANCEL ̲OUTPUT (QEL)()

  INSERT (SUBDEV. OUTPUT ̲EMPTY, QEL)()

  CONTROL ̲COMPLETE = TRUE






















               Figure 4.1.5.7.5.2-14


  P̲R̲O̲T̲O̲C̲O̲L̲ ̲C̲O̲M̲M̲A̲N̲D̲ ̲1̲5̲


  PROTOCOL ̲COMMAND()(CONTROL ̲COMPLETE)










































               Figure 4.1.5.7.5.2-15


4.1.5.7.5.3 O̲U̲T̲P̲U̲T̲T̲E̲R̲ ̲N̲o̲t̲i̲f̲i̲c̲a̲t̲i̲o̲n̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         These are:

         NOTIFY ̲SUBDEVICE ̲FIRST ̲OUTPUT ̲BUFFER
         NOTIFY ̲SUBDEVICE ̲SUBSEQUENT ̲OUTPUT ̲BUFFER
         SUBDEVICE ̲OUTPUT ̲RESULT






  NOTIFY ̲SUBDEVICE ̲FIRST ̲OUTPUT ̲BUFFER (QEL: IO ̲QEL,
                                        BUFFER ̲REF: POINTER)()

  SETUP ̲FIRST ̲OUTPUT ̲BUFFER (BUFFER ̲REF)

  RETURN ̲OUTPUT ̲BUFFER (QEL)()

  RETURN






































               Figure 4.1.5.7.5.3-1


  NOTIFY ̲SUBDEVICE ̲SUBSEQUENT ̲OUTPUT ̲BUFFER
                     (QEL: IO ̲QEL, BUFFER ̲REF: POINTER)()

  SETUP ̲NEXT ̲OUTPUT ̲BUFFER (BUFFER ̲REF)()

  RETURN ̲OUTPUT ̲BUFFER (QEL)()

  RETURN







































               Figure 4.1.5.7.5.3-2


  SUBDEVICE ̲OUTPUT ̲RESULT (QEL: IO ̲QEL, BUFFER ̲REF: POINTER)()

     Put the subdevice LDU into the result

     BUFFER = BUFFER ̲REF.PAGE ̲START

  START = BUFFER ̲REF. BUFFER ̲ADDR

  BUFFER (START + TRANSMISSION ̲START ̲LDU ̲OFFSET) = QEL.REQ
  ̲REF

     Release queue element

  SUBDEV = QEL. ADDI. SDDREF

  INSERT (SUBDEV. OUTPUT ̲EMPTY, QEL)()

     Send buffer

  RETURN ̲INPUT ̲DATA (QEL, BUFFER ̲REF)()

  RETURN

























               Figure 4.1.5.7.5.3-3


4.1.5.7.5.4 I̲N̲P̲U̲T̲T̲E̲R̲ ̲N̲o̲t̲i̲f̲i̲c̲a̲t̲i̲o̲n̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         These are:

         NOTIFY ̲SUBDEVICE ̲INPUT ̲REQUEST ̲BUFFER
         NOTIFY ̲SUBDEVICE ̲FIRST INPUT ̲DATA
         NOTIFY ̲SUBDEVOCE ̲INPUT ̲DATA
         SUBDEVICE ̲INPUT ̲RESULT






  NOTIFY ̲SUBDEVICE ̲INPUT ̲REQUEST ̲BUFFER (QEL: IO ̲QEL,
  BUFFER ̲REF:
                                                    
                                                POINTER)()

  LOAD ̲INPUT ̲REQUEST (QEL, BUFFER ̲REF)(SIZE)

  SEND ̲INPUT ̲REQUEST (SIZE)()

  RETURN






































               Figure 4.1.5.7.5.4-1


  NOTIFY ̲SUBDEVICE ̲FIRST ̲INPUT ̲DATA
                     (QEL: IO ̲QEL, BUFFER ̲REF: POINTER)()

     Copy the subdevice identification into the buffer
     (LDU)

  BUFFER = BUFFER ̲REF.PAGE ̲START

  START = BUFFER ̲REF.BUFFER ̲ADDR

  BUFFER (START + LDU ̲HEAD ̲OFFSET) = QEL. REQ ̲REF

  RETURN ̲INPUT ̲DATA (QEL, BUFFER ̲REF)

  RETURN

































               Figure 4.1.5.7.5.4-2


  NOTIFY ̲SUBDEVICE ̲INPUT ̲DATA
                     (QEL: IO ̲QEL, BUFFER ̲REF: POINTER)()

  RETURN ̲INPUT ̲DATA (QEL, BUFFER ̲REF)

  RETURN








































               Figure 4.1.5.7.5.4-3


  SUBDEVICE ̲INPUT ̲RESULT (QEL: IO ̲QEL, BUFFER ̲REF: POINTER)()

     Put the subdevice LDU into the result

  BUFFER = BUFFER ̲REF. PAGE ̲START

  START = BUFFER ̲REF. BUFFER ̲ADDR

  BUFFER (START + RECEPTION ̲STATUS ̲LDU ̲OFFSET) = QEL.
  REQ ̲REF

  RETURN ̲INPUT ̲DATA (QEL, BUFFER ̲REF)

  RETURN


































               Figure 4.1.5.7.5.4-4


4.1.5.7.5.5 S̲u̲b̲d̲e̲v̲i̲c̲e̲ ̲C̲e̲n̲t̲r̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         These are:

         OPEN ̲SUBDEVICE
         WANT ̲TO ̲CLOSE





  OPEN ̲SUBDEVICE (PARAM: OPEN ̲SUBDEVICE ̲PARAM)(CC: COMPLETION
  ̲
                                                    
                                                   CODE)

  CASE CREATE ̲CHILD()(SUBDEV) OF

     FAIL ?          CC = NO ̲RESOURCE

     PASS ?

  END CASE

  INITIALIZE ̲SUBDEVICE ̲DATA (PARAM, SUBDEV)()

  OWN ̲SDID.SUBDEVICE ̲IF. SPI. PARAM = PARAM

  ACTIVATE ̲SUBDEVICE ̲SPI (SUBDEV. SDIDREF,
             OPEN ̲PROTOCOL,
             OWN ̲SDID. SUBDEVICE ̲IF. SPI) (CCP)

  CC = OK


























               Figure 4.1.5.7.5.5-1


  WANT ̲TO ̲CLOSE (SUBDEV: SUBDEV ̲DATA)()

  CLEAN ̲SUBDEVICE (SUBDEV)()

  RETURN










































               Figure 4.1.5.7.5.5-2


4.1.5.7.5.6 I̲n̲p̲u̲t̲ ̲H̲a̲n̲d̲l̲i̲n̲g̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         These are:

         LOAD ̲INPUT ̲REQUEST
         RETURN ̲INPUT ̲DATA





  LOAD ̲INPUT ̲REQUEST (QEL: IO ̲QEL, BUFFER ̲REF: POINTER)

  COPY FROM SUBDEV. INSAVE DATA FOR
  INPUT REQUEST

  RETURN









































               Figure 4.1.5.7.5.6-1


  RETURN ̲INPUT ̲DATA (QEL: IO ̲QEL, BUFFER ̲REF: POINTER)()

  OWN ̲SDID. SUBDEVICE ̲IF. SPI. BUFFER ̲ENTRY = BUFFER
  ̲REF

  CHILD = QEL. ADDI

  ACTIVATE ̲SUBDEVICE ̲SPI (CHILD,
         NOTIFY ̲INPUT ̲BUFFER,
         OWN ̲SDID, SUBDEVICE ̲IF. SPI)()

  RETURN



































               Figure 4.1.5.7.5.6-2


4.1.5.7.5.7 O̲u̲t̲p̲u̲t̲ ̲H̲a̲n̲d̲l̲i̲n̲g̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         These are:

         CANCEL ̲ONGOING ̲OUTPUT
         SETUP ̲FIRST ̲OUTPUT ̲BUFFER
         SETUP ̲NEXT ̲OUTPUT ̲BUFFER
         RETURN ̲OUTPUT ̲BUFFER


  CANCEL ̲ONGOING ̲OUTPUT()()

  QEL = OWN ̲SDID. SUBDEVICE ̲IF. OUTPUT ̲QEL

  CANCEL ̲OUTPUT (QEL)()

  SUBDEV = QEL. ADDI. SDDREF

  INSERT (SUBDEV. OUTPUT ̲EMPTY, QEL)()

  OWN ̲SDID. SUBDEVICE ̲IF. OUTPUT ̲STATE = IDLE

  RETURN



































               Figure 4.1.5.7.5.7-1


  SETUP ̲FIRST ̲OUTPUT ̲BUFFER (BUFFER ̲ENTRY: POINTER)()

  COPY BUFFER ̲ENTRY TO
     OWN ̲SDID, SUBDEVICE ̲IF. OUTPUT ̲BUFFER ̲ENTRY

  REDUCE BUFFER SIZE LEAVING ROOM FOR
     SUBDEVICE ADDRESS

  RETURN





































               Figure 4.1.5.7.5.7-2


  SETUP ̲NEXT ̲OUTPUT ̲BUFFER (BUFFER ̲ENTRY: POINTER)()

  OWN ̲SDID. SUBDEVICE ̲IF. OUTPUT ̲BUFFER ̲ENTRY = BUFFER
  ̲ENTRY

  RETURN











































               Figure 4.1.5.7.5.7-3


  RETURN ̲OUTPUT ̲BUFFER (QEL: IO ̲QEL)()

  OWN ̲SDID. SUBDEVICE ̲IF. SPI. BUFFER ̲ENTRY =
     OWN ̲SDID, SUBDEVICE ̲IF. OUTPUT ̲BUFFER ̲ENTRY

  REQ ̲RECORD = QEL. REQ ̲RECORD

  OWN ̲SDID. SUBDEVICE ̲IF. SPI. REQ ̲RECORD = REQ ̲RECORD

  CHILD = QEL. ADDI

  ACTIVATE ̲SUBDEVICE ̲SPI (CHILD,
     NOTIFY ̲OUTPUT ̲BUFFER,
     OWN ̲SDID. SUBDEVICE ̲IF. SPI)(CCP)

  RETURN































               Figure 4.1.5.7.5.7-4


4.1.5.7.5.8 S̲u̲b̲d̲e̲v̲i̲c̲e̲ ̲H̲a̲n̲d̲l̲i̲n̲g̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         These are:

         CLEAN ̲SUBDEVICE
         INITIALIZE ̲SUBDEVICE ̲DATA




  CLEAN ̲SUBDEVICE (SUBDEV: SUBDEV ̲DATA)()

  C̲A̲N̲C̲E̲L̲ ̲I̲N̲P̲U̲T̲ ̲2̲

  C̲A̲N̲C̲E̲L̲ ̲O̲U̲T̲P̲U̲T̲ ̲3̲

  C̲A̲N̲C̲E̲L̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲4̲

  CHILD = SUBDEV. SDIDREF

  ACTIVATE ̲SUBDEVICE ̲SPI (CHILD,
     CLEAN ̲UP ̲ALL, DUMMY)()

  CASE DELETE ̲CHILD (SUBDEV)() OF

     FAIL ?  PROTOCOL ̲ERROR (SUBDEVICE ̲8 ̲1)

     PASS ?

  END CASE

  RETURN

























               Figure 4.1.5.7.5.8-1


  C̲A̲N̲C̲E̲L̲ ̲I̲N̲P̲U̲T̲ ̲2̲

  SUBDEV. INPUT ̲QEL. REQUESTOR EQ NONE ?

  CANCEL ̲INPUT (SUBDEV. INPUT ̲QEL)()










































               Figure 4.1.5.7.5.8-2


  C̲A̲N̲C̲E̲L̲ ̲O̲U̲T̲P̲U̲T̲ ̲3̲

  INDEX = 1

  LOOP

     SUBDEV. QELS (INDEX). REQUESTOR EQ NONE

     CANCEL ̲OUTPUT (SUBDEV. QELS (INDEX)()

     INDEX GE MAX ̲SUBDEV ̲OUTQELS

     INDEX + 1

  END LOOP
































               Figure 4.1.5.7.5.8-3


  C̲A̲N̲C̲E̲L̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲4̲

     Search in pending control queue.
     There might be up to 3 requests pending
     (from controller, input and output)

  CHILD = SUBDEV. SDIDREF

  LOOP

     CASE SEARCH ̲RECORD (OWN ̲SDID. SUBDEVICE ̲IF. PENDING
     ̲CONTROL,
                                       CONTROL ̲SDID ̲OFFSET,
                                       SUBDEV. CHILD)
                                       (QEL) OF

         FAIL ?

         PASS ?

     END CASE

     CASE EXTRACT ̲SPECIFIED (OWN ̲SDID. SUBDEVICE ̲IF.
                                PENDING ̲CONTROL,
                                QEL)() OF

         FAIL, PASS

     END CASE

  END LOOP



















               Figure 4.1.5.7.5.8-4


  INITIALIZE ̲SUBDEVICE ̲DATA     (PARAM: OPEN ̲SUBDEVICE
                                ̲PARAM,
                                 SUBDEV: SUBDEV ̲DATA)()

  EQUIVALENCE (PARAM. PARAMETERS, INIT ̲D: SUBDEV ̲INIT
  ̲DATA)

  SUBDEV: PRIORITY = INIT ̲D. PRIORITY + SUBDEVICE ̲PRIORITY

  INIT ̲QD (SUBDEV. OUTPUT ̲EMPTY)()

  INDEX = 1

  LOOP

     INSERT (SUBDEV. QELS(INDEX), SUBDEV, OUTPUT ̲EMPTY)()

     INDEX GE MAX ̲SUBDEV ̲OUTQELS ?

     INDEX + 1

  END LOOP

     "Protocol dependend data"

  INITIALIZE ̲PROTOCOL ̲DATA ̲FOR ̲SUBDEVICE (INIT ̲D, SUBDEV)()

  RETURN




















               Figure 4.1.5.7.5.8-5


4.1.5.7.5.9 C̲o̲n̲t̲r̲o̲l̲ ̲H̲a̲n̲d̲l̲i̲n̲g̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         These are:

         NOTIFY ̲CONTROL ̲BUFFER
         NEXT ̲CONTROL
         TERMINATE ̲ONGOING ̲CONTROL



  NOTIFY ̲CONTROL ̲BUFFER()()

  CHILD = OWN ̲SDID, SUBDEVICE ̲IF. ONGOING ̲CONTROL.EP.
             WORD2

  OWN ̲SDID. SUBDEVICE ̲IF. SPI. REQ ̲RECORD =
             OWN ̲SDID. SUBDEVICE ̲IF. ONGOING ̲CONTROL.EP

  ACTIVATE ̲SUBDEVICE ̲SPI (CHILD,
             NOTIFY ̲OUTPUT ̲BUFFER,
             OWN ̲SDID. SUBDEVICE ̲IF. SPI)(CCP)

  RETURN


































               Figure 4.1.5.7.5.9-1


  NEXT ̲CONTROL() (CC: COMPLETION ̲CODE)

  CASE EXTRACT ̲FIRST (OWN ̲SDID. SUBDEVICE ̲IF. PENDING
  ̲CONTROL)
                                                    (QEL)
                                               OF

     FAIL ?          CC = NO ̲PENDING

     PASS ?

  END CASE

  OWN ̲SDID. SUBDEVICE ̲IF. ONGOING ̲CONTROL.EP = QEL

     Reset control buffer

  OWN ̲SDID. SUBDEVICE ̲IF. CONTROL ̲
     BUFFER ̲ENTRY. BUFFER ̲SIZE =
     SUBDEV ̲IF ̲BUFFER ̲SIZE-1

  CC = OK

  RETURN

























               Figure 4.1.5.7.5.9-2


  T̲E̲R̲M̲I̲N̲A̲T̲E̲ ̲O̲N̲G̲O̲I̲N̲G̲ ̲C̲O̲N̲T̲R̲O̲L̲()()

  NEXT ̲CONTROL()(CCP)

  CCP NE OK?     no pending

  NOTIFY ̲CONTROL ̲BUFFER()()

  RETURN




































               Figure 4.1.5.7.5.9-3


4.1.5.8  P̲R̲O̲T̲ ̲C̲O̲N̲T̲ ̲M̲o̲d̲u̲l̲e̲

4.1.5.8.1    F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         The PROT ̲CONT module controls the exchange of Protocol
         command/Protocol status buffers with the Parent protocol.

         Especially the CONTROLLER and the PROTOCOL modules
         make use of this.

         The processing is as follows:

         The PROT ̲CONT module controls that only one Protocol
         Command to LTU/LTUX is in execution at any time.

         The requestor calls REQUEST ̲PROT ̲CONT and may either
         be queued or immediately be supplied with a buffer.

         When the requestor gets a control buffer he loads it
         with the command and hands it to the PROT ̲CONT module
         for transmission.

         The requestor may here specify that no response is
         expected and the request is complete. If a response
         is expected, the PROT ̲CONT module awaits the arrival
         and hands back the buffer to the requestor. From now
         on the requestor is in charge of the buffer (e.g. for
         cancel processing) and the PROT ̲CONT module executes
         next request.


4.1.5.8.2    M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

         The PROT ̲CONT is called via one of the following entries:

         INITIALIZE ̲PROT ̲CONT (PARAM: OPEN ̲SUBDEVICE ̲PARAM)()

         REQUEST ̲PROT ̲CONT (QEL: IO ̲QEL,
                            PRIORITY: PRIORITY ̲TYPE)
                            (CC: COMPLETION ̲CODE,
                            BUFFER ̲REF: POINTER)

         NOTIFY ̲PROT ̲CONT ̲OUTPUT ̲BUFFER (BUFFER ̲REF: POINTER)()

         NOTIFY ̲PROT ̲CONT ̲OF ̲RESPONSE   (BUFFER ̲REF: POINTER)()

         SEND ̲PROT ̲CONT (RESPONSE: BOOLEAN,
                             SIZE: INTEGER)()

         CANCEL ̲PROT ̲CONT (QEL: IO ̲QEL)()

         CLEAN ̲PROT ̲CONT()()


         The PROT ̲CONT module calls the following functional
         entries of other modules:

         USER ̲PROT ̲CONT ̲RESULT (QEL: IO ̲QEL, BUFFER ̲REF: POINTER)()

         CONTROLLER ̲PROT ̲CONT ̲RESULT (QEL: IO ̲QEL,BUFFER ̲REF:POINTER)()

         PROTOCOL ̲PROT ̲CONT ̲RESULT (QEL:IO ̲QEL,BUFFER ̲REF:POINTER)()

         NOTIFY ̲USER ̲PROT ̲CONT ̲BUFFER (QEL:IO ̲QEL,BUFFER ̲REF:POINTER)()

         NOTIFY ̲CONTROLLER ̲PROT ̲CONT ̲BUFFER (QEL:IO ̲QEL, BUFFER
         ̲REF:
                                                           
                      POINTER)()

         NOTIFY ̲PROTOCOL ̲PROT ̲CONT ̲BUFFER (QEL:IO ̲QEL,BUFFER
         ̲REF:
                                                           
                      POINTER)()

         Furthermore:
         PROTOCOL ̲ERROR
         ACTIVATE ̲SUBDEVICE ̲SPI
         QUEUE ̲PRIORITIZED
         QUEUE
         INIT ̲QD
         EXTRACT ̲FIRST
         EXTRACT ̲SPECIFIED


4.1.5.8.3    M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         E̲n̲t̲r̲y̲ ̲p̲o̲i̲n̲t̲ ̲p̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         B̲a̲s̲i̲c̲ ̲p̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         INITIALIZE ̲PROT ̲CONT                     5.1
         CLEAN ̲PROT ̲CONT                          5.1

         R̲e̲q̲u̲e̲s̲t̲ ̲p̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         REQUEST ̲PROT ̲CONT                        5.2
         CANCEL ̲PROT ̲CONT                         5.2
         SEND ̲PROT ̲CONT                           5.2

         P̲a̲r̲e̲n̲t̲ ̲p̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         NOTIFY ̲PROT ̲CONT ̲OUTPUT ̲BUFFER           5.3
         NOTIFY ̲PROT ̲CONT ̲OF ̲RESPONSE             5.3

         C̲o̲m̲p̲o̲n̲e̲n̲t̲ ̲p̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         R̲e̲q̲u̲e̲s̲t̲o̲r̲ ̲n̲o̲t̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         RETURN ̲PROT ̲CONT ̲BUFFER                  5.4

         C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲p̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         NEXT ̲PROT ̲CONT                           5.5
         RELEASE ̲PROT ̲CONT ̲BUFFER                 5.5
         PROC ̲FOR ̲END ̲OF ̲PROT ̲CONT                5.5




4.1.5.8.4    D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         PROT ̲CONT ̲DATA  = RECORD

             STATE       : (IDLE, ACTIVE)

             PENDING     : QD

             ONGOING     : QD

             BUFFER ̲STATE: (NO ̲BUF, PENDING ̲RESERVE, DELIVERED)

             BUFFER ̲ENTRY: POINTER

             REQ ̲RECORD  : REQ ̲RECORD ̲TYPE

             SPI         : SPI ̲PARAM

             ID          : 0.. PROT ̲CONT ̲ID ̲MAX

             END


         STATE          Identifies if active

         PENDING,       Queues holding waiting request
         ONGOING        and the possible ongoing request

         BUFFER ̲STATE   Status of output control buffer

         BUFFER ̲ENTRY   Pointer to a buffer returned to 
                                                   requestor

         REQ ̲RECORD     Used for parent communication
         SPI

         ID             The identification sent with a protocol
                          command (is returned in the correspon-
                          ding status).



4.1.5.8.5    M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲


4.1.5.8.5.1 B̲a̲s̲i̲c̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         These are:  INITIALIZE ̲PROT ̲CONT
                     CLEAN ̲PROT ̲CONT





  INITIALIZE ̲PROT ̲CONT (PARAM: OPEN ̲SUBDEVICE ̲PARAM)()

  OWN ̲SDID. PROT ̲CONT. SPI.PRIORITY = CONTROL ̲PRIORITY

  OWN ̲SDID. PROT ̲CONT. SPI. REQ ̲RECORD =
         POINTER TO OWN ̲SDID. PROT ̲CONT. REQ ̲RECORD

  INIT ̲QD (OWN ̲SDID. PROT ̲CONT. PENDING)()

  INIT ̲QD (OWN ̲SDID. PROT ̲CONT. ONGOING)()

  OWN ̲SDID. PROT ̲CONT. BUFFER ̲STATE = NO ̲BUF

  OWN ̲SDID. PROT ̲CONT. STATE = IDLE

  OWN ̲SDID. PROT ̲CONT. ID = PROT ̲CONT ̲ID ̲MAX

  RETURN





























               Figure 4.1.5.8.5.1-1


  CLEAN ̲PROT ̲CONT()()

     The buffer is released by the requestor

  RETURN










































               Figure 4.1.5.8.5.1-2


4.1.5.8.5.2 R̲e̲q̲u̲e̲s̲t̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         These are: REQUEST ̲PROT ̲CONT
                    CANCEL ̲PROT ̲CONT
                    SEND ̲PROT ̲CONT






  REQUEST ̲PROT ̲CONT (QEL: IO ̲QEL,
                    PRIORITY: PRIORITY ̲TYPE)
                    (CC: COMPLETION ̲CODE,
                    BUFFER ̲REF: POINTER)

  QUEUE PRIORITIZED (OWN ̲SDID.PROT ̲CONT. PENDING, PRIORITY,
  QEL)()

  OWN ̲SDID. PROT ̲CONT.
  STATE NE IDLE?           CC = REQUEST ̲QUEUED

  NEXT ̲PROT ̲CONT()(CCP)

  CCP EQ REQUEST ̲QUEUED ?        CC = REQUEST ̲QUEUED

  OWN ̲SDID. PROT ̲CONT. STATE = DELIVERED

  BUFFER ̲REF = OWN ̲SDID. PROT ̲CONT. BUFFER ̲ENTRY

  CC = OK

  RETURN

























               Figure 4.1.5.8.5.2-1


  CANCEL ̲PROT ̲CONT (QEL: IO ̲QEL)()

  CASE QEL. QUEUE OF

     OWN ̲SDID. PROT ̲CONT.
     PENDING?      PENDING 3

     OWN ̲SDID. PROT ̲CONT.
     ONGOING?                  PENDING 4

     OTHER ?     PROTOCOL ̲ERROR (PROT ̲CONT ̲2 ̲2)

  END CASE

  RETURN































               Figure 4.1.5.8.5.2-2


  P̲E̲N̲D̲I̲N̲G̲ ̲3̲

  CASE EXTRACT ̲SPECIFIED (QEL, OWN ̲SDID. PROT ̲CONT. PENDING)()
  OF

     FAIL ?  PROTOCOL ̲ERROR (PROT ̲CONT ̲2 ̲3)

     PASS ?

  END CASE






































               Figure 4.1.5.8.5.2-3


  O̲N̲G̲O̲I̲N̲G̲ ̲4̲

  CASE OWN ̲SDID. PROT ̲CONT. BUFFER ̲STATE OF

     NO ̲BUF ?

     PENDING ̲RESERVE ?      C̲A̲N̲C̲E̲L̲ ̲R̲E̲S̲E̲R̲V̲A̲T̲I̲O̲N̲ ̲5̲

     DELIVERED ?            R̲E̲L̲E̲A̲S̲E̲ ̲B̲U̲F̲F̲E̲R̲ ̲6̲

  END CASE

  PROCESS ̲FOR ̲END ̲OF ̲PROT ̲CONT ()()
































               Figure 4.1.5.8.5.2-4


  C̲A̲N̲C̲E̲L̲ ̲R̲E̲S̲E̲R̲V̲A̲T̲I̲O̲N̲ ̲5̲

  ACTIVATE ̲SUBDEVICE ̲SPI (OWN ̲SDID. PARENT ̲SDID,
         CANCEL ̲RESERVE ̲OUTPUT ̲BUFFER,
         OWN ̲SDID. PROT ̲CONT. SPI) (CCP)









































               Figure 4.1.5.8.5.2-5


  R̲E̲L̲E̲A̲S̲E̲ ̲B̲U̲F̲F̲E̲R̲ ̲6̲

  OWN ̲SDID. PROT ̲CONT. SPI. BUFFER ̲ENTRY =
         OWN ̲SDID. PROT ̲CONT. BUFFER ̲ENTRY

  ACTIVATE ̲SUBDEVICE ̲SPI (OWN ̲SDID. PARENT ̲SDID,
         RELEASE ̲OUTPUT ̲BUFFER,
         OWN ̲SDID. PROT ̲CONT. SPI) (CCP)






































               Figure 4.1.5.8.5.2-6


  SEND ̲PROT ̲CONT  (RESPONSE: BOOLEAN,
                   SIZE    : INTEGER)

  BREF = OWN ̲SDID. PROT ̲CONT. BUFFER ̲ENTRY

  BREF. BUFFER ̲SIZE = SIZE

  BUFFER = BREF. PAGE ̲START

  START = BREF. BUFFER ̲ADDR

  BUFFER (START+BUFFER ̲TYPE ̲OFFSET) = CONTROL, ENTIRE
  ̲LDU

  BUFFER (START+CONTROL ̲REQUEST ̲OFFSET) = PROTOCOL ̲COMMAND

  OWN ̲SDID. PROT ̲CONT. ID  GE
  PROT ̲CONT ̲ID ̲MAX?            OWN ̲SDID.PROT ̲CONT.ID
  = 0

  OWN ̲SDID. PROT ̲CONT.ID+1

  BUFFER (START+PROT ̲CONT ̲ID ̲OFFSET) = OWN ̲SDID. PROT
  ̲CONT.ID

  OWN ̲SDID. PROT ̲CONT. BUFFER ̲STATE = NO ̲BUF

  OWN ̲SDID. PROT ̲CONT. SPI. BUFFER ̲ENTRY = BREF

  ACTIVATE ̲SUBDEVICE ̲SPI (OWN ̲SDID. PARENT ̲SDID,
         TRANSMIT ̲OUTPUT ̲BUFFER,
         OWN ̲SDID. PROT ̲CONT. SPI) (CCP)

  RESPONSE EQ TRUE ?

     No response expected

  OWN ̲SDID. PROT ̲CONT. STATE = IDLE

  NEXT ̲PROT ̲CONT () (CCP)

  CCP NE OK ?

  RETURN ̲PROT ̲CONT ̲BUFFER()()

  RETURN



               Figure 4.1.5.8.5.2-7


4.1.5.8.5.3 P̲a̲r̲e̲n̲t̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         These are:  NOTIFY ̲PROT ̲CONT ̲OUTPUT ̲BUFFER
                     NOTIFY ̲PROT ̲CONT ̲OF ̲RESPONSE








  NOTIFY ̲PROT ̲CONT ̲OUTPUT ̲BUFFER (BUFFER ̲REF: POINTER)()

  OWN ̲SDID. PROT ̲CONT. BUFFER ̲ENTRY = BUFFER ̲REF

  RETURN ̲PROT ̲CONT ̲BUFFER()()

  RETURN








































               Figure 4.1.5.8.5.3-1


  NOTIFY ̲PROT ̲CONT ̲OF ̲RESPONSE (BUFFER ̲REF: POINTER)()

  BUFFER = BUFFER ̲REF. PAGE ̲START

  START = BUFFER ̲REF. BUFFER ̲ADDR

  BUFFER (START+PROT ̲CONT ̲ID ̲OFFSET) NE
  OWN ̲SDID.PROT ̲CONT.ID?                  RELEASE ̲PROT
  ̲CONT ̲BUFFER
                                         (BUFFER ̲REF)()


  CASE EXTRACT ̲FIRST (OWN ̲SDID. PROT ̲CONT. ONGOING)(QEL)
  OF

     FAIL ?           RELEASE ̲PROT ̲CONT ̲BUFFER (BUFFER
     ̲REF)()

     PASS ?           N̲O̲T̲I̲F̲Y̲ ̲B̲U̲F̲F̲E̲R̲ ̲3̲

  END CASE

  OWN ̲SDID. PROT ̲CONT. STATE = IDLE

  NEXT ̲PROT ̲CONT()(CCP)

  CCP NE OK ?

  RETURN ̲PROT ̲CONT ̲BUFFER()()

  RETURN















               Figure 4.1.5.8.5.3-2




  N̲O̲T̲I̲F̲Y̲ ̲B̲U̲F̲F̲E̲R̲ ̲3̲

  CASE QEL. REQUESTOR OF

     USER ?         USER ̲PROT ̲CONT ̲RESULT (QEL, BUFFER
     ̲REF)()

     CONTROLLER ?   CONTROLLER ̲PROT ̲CONT ̲RESULT (QEL,
     BUFFER ̲
                                                    
                                                   REF)()

     PROTOCOL ?     PROTOCOL ̲PROT ̲CONT ̲RESULT (QEL, BUFFER
     ̲REF)()

     OTHER ?        PROTOCOL ̲ERROR (PROT ̲CONT ̲3 ̲3)

   END CASE
































               Figure 4.1.5.8.5.3-3


4.1.5.8.5.4 R̲e̲q̲u̲e̲s̲t̲o̲r̲ ̲N̲o̲t̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         This is     RETURN ̲PROT ̲CONT ̲BUFFER







  RETURN ̲PROT ̲CONT ̲BUFFER()()

  OWN ̲SDID. PROT ̲CONT. BUFFER ̲STATE = DELIVERED

  QEL = OWN ̲SDID. PROT ̲CONT. ONGOING. EP

  BUF = OWN ̲SDID. PROT ̲CONT. BUFFER ̲ENTRY

  CASE QEL. REQUESTOR OF

     USER ?      NOTIFY ̲USER ̲PROT ̲CONT ̲BUFFER (QEL, BUF)()

     CONTROLLER? NOTIFY ̲CONTROLLER ̲PROT ̲CONT ̲BUFFER (QEL,BUF)()

     PROTOCOL ?  NOTIFY ̲PROTOCOL ̲PROT ̲CONT ̲BUFFER (QEL,BUF)()

     OTHER ?     PROTOCOL ̲ERROR (PROT ̲CONT ̲4 ̲1)

  END CASE

  RETURN


























               Figure 4.1.5.8.5.4-1


4.1.5.8.5.5 C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         These are:  NEXT ̲PROT ̲CONT
                     RELEASE ̲PROT ̲CONT ̲BUFFER
                     PROC ̲FOR ̲END ̲OF ̲PROT ̲CONT.



  NEXT ̲PROT ̲CONT()(CC: COMPLETION ̲CODE)

  CASE EXTRACT ̲FIRST (OWN ̲SDID. PROT ̲CONT. PENDING)(QEL)
  OF

     FAIL ?      CC = NO ̲PENDING

     PASS ?

  END CASE

  OWN ̲SDID. PROT ̲CONT. STATE = ACTIVE

  QUEUE (OWN ̲SDID, PROT ̲CONT. ONGOING, QEL)()

  OWN ̲SDID. PROT ̲CONT. BUFFER ̲STATE = PENDING ̲RESERVE

  ACTIVATE ̲SUBDEVICE ̲SPI (OWN ̲SDID. PARENT ̲SDID,
     RESERVE ̲OUTPUT ̲BUFFER,
     OWN ̲SDID. PROT ̲CONT. SPI)(CCP)

  CCP EQ REQUEST ̲QUEUED ?    CC = REQUEST ̲QUEUED

  OWN ̲SDID. PROT ̲CONT. BUFFER ̲ENTRY =
     OWN ̲SDID. PROT ̲CONT. SPI. BUFFER ̲ENTRY

  CC = OK

  RETURN



















               Figure 4.1.5.8.5.5-1


  RELEASE ̲PROT ̲CONT ̲BUFFER (BUFFER ̲REF: POINTER)()

  OWN ̲SDID. PROT ̲CONT. SPI. BUFFER ̲ENTRY= BUFFER ̲REF

  ACTIVATE ̲SUBDEVICE ̲SPI (OWN ̲SDID. PARENT ̲SDID,
     RELEASE ̲INPUT ̲BUFFER,
     OWN ̲SDID. PROT ̲CONT. SPI) (CCP)

  RETURN




               Figure 4.1.5.8.5.5-2


































  PROC ̲FOR ̲END ̲OF ̲PROT ̲CONT()()

  CASE EXTRACT ̲FIRST (OWN ̲SDID. PROT ̲CONT. ONGOING)(QEL)
  OF

     FAIL ?      PROTOCOL ̲ERROR (PROT ̲CONT ̲5 ̲3)

     PASS ?

  END CASE

  OWN ̲SDID. PROT ̲CONT. STATE = IDLE

  RETURN



































               Figure 4.1.5.8.5.5-3