top - download
⟦e637f14be⟧ Wang Wps File
Length: 13087 (0x331f)
Types: Wang Wps File
Notes: CPS/SDS/028
Names: »2022A «
Derivation
└─⟦c59a533be⟧ Bits:30006100 8" Wang WCS floppy, CR 0155A
└─ ⟦this⟧ »2022A «
WangText
…02…CPS/SDS/028
…02…820514
I/O CONTROL
DETAILED DESIGN SPECIFICATION CAMPS
4.1.4.2 D̲A̲M̲O̲S̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲s̲ ̲f̲o̲r̲ ̲h̲a̲n̲d̲l̲e̲r̲s̲
TYPE SDD =
RECORD
SISTER ̲LINK: INTEGER; "Pointer to SDD of sister
subdevice
PARENT ̲LINK: INTEGER; "Pointer to SDD of parent
subdevice
CHILD ̲QUEUE: QD; "Queue descriptor for child
subdevices
SD ̲SDID: INTEGER; "User defined subdevice
identi-
fication
SD ̲SE: INTEGER; User defined synchronization
element
SDIDREF: INTEGER; Pointer to SDID part of
SDB
END;
TYPE SDID =
RECORD
SDDREF: INTEGER; "Pointer to SDD part of
SDB
DCBREF: INTEGER; "Pointer to DCB
PROTOCOL: INTEGER; "Protocol table index
STACK ̲POINTER:INTEGER; "Pointer to current stack
level in
STACK: "Link save stack
ARRAY(0..STACKSIZE-1) OF INTEGER;
END;
S̲u̲b̲d̲e̲v̲i̲c̲e̲ ̲B̲l̲o̲c̲k̲:̲ ̲S̲D̲B̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
SDD.SISTER ̲LINK # ref
to
sister
SDD
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
SDD.PARENT ̲LINK # ref
to
parent
SDD
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
SDD.CHILD ̲QUEUE # QD.IP
# - - -
- - -
# QD.EP
# - - -
- - -
# QD.RC
# ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
SDD.SD ̲SDID # user
defined
sd
id
# ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲
SDD.SD ̲SE # user
defined
SE
# ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲
SDD.SDIDREF # pointer
to
SDID
# ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲
work area
for
parent subdevice
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲
SDID.SDDREF # pointer
to
SDD
# ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲
SDID.DCBREF # pointer
to
DCB
# ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲
SDID.PROTOCOL # protocol
number
# ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲
SDID.STACK ̲POINTER # stack
pointer
# ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲
SDID.STACK # stack
of:
sdid's
# and
link's
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲
work area
for
subdevice
Fig. 4.1.4.2-1 HANDLER DATA LAYOUT
TYPE BUFFER ̲TYPES =
"The buffers relation to the logical data
unit (ldu)
(ENTIRE ̲LDU "whole ldu
in one transfer
,START ̲OF ̲LDU
,PART ̲OF-LDU
,END ̲OF-LDU
);
TYPE BUFFER ̲ENTRY =
RECORD
LINK, "Link field
DEVICE ̲BUFFER ̲ID, "Device defined
buffer identifier
PAGE ̲START, "Start address
of page containing
the buffer
PAGE ̲ADDR, "Page
address
(page
number)
BUFFER ̲ADDR, Byte address
relative
to page
BUFFER ̲SIZE "Number of
bytes in
buffer.
: INTEGER;
END;
TYPE SPI ̲PARAM =
RECORD
PRIORITY: INTEGER; "Priority of request
(O = control)
BUFFER ̲ID: INTEGER; "Caller defined buffer
id.
REQ ̲RECORD: INTEGER; "Pointer to request
record
BUFFER ̲ENTRY: INTEGER; "Pointer to buffer
entry
PARAM: INTEGER; "Pointer to parameter
area
STATUS: INTEGER; "Result of performed
operation
END;
TYPE SPI ̲FUNCTIONS = (
NOTIFY ̲INPUT ̲BUFFER,
RELEASE ̲INPUT ̲BUFFER,
RESERVE ̲OUTPUT ̲BUFFER,
CANCEL ̲RESERVE ̲OUTPUT ̲BUFFER,
NOTIFY ̲OUTPUT ̲BUFFER,
RELEASE ̲OUTPUT ̲BUFFER,
TRANSMIT ̲OUTPUT ̲BUFFER,
NOTIFY ̲TRANSMISSION,
OPEN ̲PROTOCOL,
WANT ̲TO ̲CLOSE,
CLEAN ̲UP ̲ALL,
CLEAN ̲UP ̲USER,
CONTROL ̲PROTOCOL)
"parameter records used by TMS when calling device
functions"
TYPE VARIABLE ̲SIZE ̲DATA = ARRAY (0..0) OF INTEGER;
TYPE INITIALIZE ̲PARAM = "used when calling initialize-device
RECORD
SIZEOF, "C K size of record -1
STATUS ̲SE, "C K object descriptor index
SDID, "C K caller's device Id
H ̲SDID, "-R handler's device Id
H ̲OPID, "-R handler's Id for operation
OPID: "C K caller's Id for operation
INTEGER;
PARAMETERS " device dependent parameters
(may be nil)
:variable-size-data;
END
TYPE OPEN ̲SUBDEVICE ̲PARAM = "used when calling
open-subdevice
RECORD
SIZEOF, "C K size of record -1
H ̲SDID, "C handler's Id for parent
subdevice at call
"R handler's Id for new subdevice
at return
H ̲OPID, "-R handler's Id for operation
OPID, "C K caller's Id for operation
SDID, "C K caller's Id for new subdevice
SDA, "C K address of new subdevice
STATUS ̲SE, "C K object descr index for subdevice
status SE
PROTOCOL ̲ID "C K Id of protocol for new
subdevice
:INTEGER;
PARAMETERS "device dependent parameters
:variable ̲size ̲data;
END;
TYPE CLOSE ̲SUBDEVICE ̲PARAM = "used when calling close
̲subdevice and
RECORD "shutdown
SIZEOF, "C K size of record -1
H ̲SDID "C K handler's Id for subdevice
:INTEGER;
END;
TYPE ENABLE ̲PARAM = "used when calling enable ̲input
and
RECORD "enable ̲control ̲input
SIZEOF, "C K size of record -1
H ̲SDID, "C K handler's Id for subdevice
H ̲OPID, "-R handler's Id for operation
OPID "C K caller's Id for operation
: INTEGER;
POSITION :C K terminal ̲position (e.g.
cursor address)
ions;
BUF ̲SIZE, "C K size in bytes of user buffer
BYTE ̲COUNT, "-R number of bytes available
PAGE ̲ADDR, "-R physical page address of buffer
BYTE ̲ADDR "-R byte address within page of
buffer
INTEGER;
BUFFER ̲TYPE "-R state of logical data unit
:buffer ̲types;
END;
TYPE TEST ̲OPERATION ̲PARAM = "used when calling test
̲operation
RECORD
SIZEOF , "C K size of record -1
H ̲SDID , "C K handler's Id for subdevice
H ̲OPID : "C K handler's Id for operation
INTEGER;
RESULT : "-R
operation ̲status;
END;
TYPE SET ̲BUFFER ̲PARAM = "used when calling set ̲output
̲buffer and
RECORD "set ̲control ̲buffer
SIZEOF , "C K size of record -1
H ̲SDID , "C K handler's Id for subdevice
H ̲OPID , "- R handler's Id for operation
OPID , "C K caller's Id for operation
BUF ̲SIZE , "-R size of buffer in bytes
PAGE ̲ADDR , "-R physical page address of buffer
BYTE ̲ADDR , "-R byte address of buffer within
page
: INTEGER;
END;
TYPE INIT ̲OUTPUT ̲PARAM = "used when calling init
̲output
RECORD
SIZEOF , "C K size of record -1
H ̲SDID , "C K handler's Id for subdevice
H ̲OPID , "C identifies the buffer at call
"R identifies this operation
at return
OPID "C K caller's Id for this operation
integer;
POSITION "C K terminal ̲position (e.g.
cursor address)
ions;
BYTE ̲COUNT "C K number of bytes to output
: integer;
PURGE "C K purge flag
: boolean;
BUFFER ̲TYPE "C K state of logical data
unit
: BUFFER ̲TYPES;
END;
TYPE ACK ̲OR ̲CANCEL ̲PARAM = "used when calling acknowledge
̲input and
RECORD "cancel ̲operation
SIZEOF , "C K size of record -1
H ̲SDID , "C K handler's Id for subdevice
H ̲OPID "C K handler's Id for operation
: integer;
PURGE "C K purge flag
: BOOLEAN;
END;
TYPE ENABLE ̲STATUS ̲PARAM = "used when calling enable
̲status ̲response
RECORD
SIZEOF , "C K size of record -1
H ̲SDID "C K handler's Id for subdevice
: INTEGER;
END;
"Asynchronous response formats
TYPE MESSAGE ̲TYPE =
(OP ̲REPLY
,STATUS ̲MESSAGE
);
TYPE OPERATION ̲RESULT ̲TYPE = integer;
"values:
CONST
OPERATION ̲OK = OK;
OPERATION ̲CANCELLED = REQUEST ̲QUEUED;
OPERATION ̲ABORTED = REQUEST ̲QUEUED;
TYPE H ̲OP ̲REPLY ̲MESSAGE =
RECORD
RESPONSE: MESSAGE ̲TYPE; " = op ̲reply
OPID, "receiver's Id of operation
H ̲OPID "handler's Id for operation
: integer;
RESULT: OPERATION ̲RESULT ̲TYPE;
BYTE ̲COUNT, "number of bytes transferred
PAGE ̲ADDR, "physical page address of buffer
BYTE ̲ADDR: "intra page byte ̲offset to buffer
integer;
BUFFER ̲TYPE "state of logical data unit
:BUFFER ̲TYPES;
END;
TYPE DEVICE ̲STATUS =
(SUBDEVICE ̲BREAK
,SUBDEVICE ̲OFFLINE
,DEVICE ̲FAILURE
,PROTOCOL ̲EVENT
,USER ̲RESPONSE
,SD ̲FAILORE
,SD ̲OTHER ̲STATUS
);
TYPE H ̲STATUS ̲MESSAGE =
RECORD
RESPONSE: MESSAGE ̲TYPE; " = status ̲message
H ̲SDID, "handler's Id for subdevice
SDID: "receiver's Id for subdevice
integer;
STATUS: device ̲status;
INFO ̲SIZE: "size of info field following
integer;
INFO: "additional info (max 14 words)
VARIABLE ̲SIZE ̲DATA;
END;
4.1.4.3 I̲O̲C̲ ̲H̲A̲N̲D̲L̲E̲R̲ ̲D̲A̲T̲A̲
PRIORITY ̲TYPE = INTEGER
CONTROLLER ̲PRIORITY = 0
USER ̲PRIORITY = 3
SUBDEVICE ̲PRIORITY = USER ̲PRIORITY
TYPE IO ̲QEL = RECORD
LINK: POINTER
PRIORITY: PRIORITY ̲TYPE
QUEUE: POINTER
REQUESTOR: (NONE, USER, SUBDEVICE,
CONTROLLER, PROTOCOL)
REQ ̲RECORD: POINTER
REQ ̲REF: INTEGER
ADDI: INTEGER
END;
CONST BUFFER ̲TYPE ̲OFFSET = 0
LDU ̲OFFSET = 1
SPLIT ̲ADDR ̲OFFSET = 2
CONTROL ̲REQUESTS ̲OFFSET = 1
CANCEL ̲INPUT ̲LDU ̲OFFSET = 2
CANCEL ̲OUTPUT ̲LDU ̲OFFSET = 2
INPUT ̲REQ ̲BYTE ̲LENGTH ̲OFFSET = 3
INPUT ̲REQ ̲LDU ̲OFFSET = 2
INPUT ̲REQ ̲DATA ̲OFFSET = 4
STATUS ̲TYPE ̲OFFSET = 1
RECEPTION ̲STATUS ̲LDU ̲OFFSET = 2
TRANSMISSION ̲STATUS ̲LDU ̲OFFSET = 2
TRANSMISSION ̲STATUS ̲CODE ̲OFFSET =
3
CONTROL ̲PRIORITY = 0
DATA ̲PRIORITY = 1
LDU ̲DATA ̲OFFSET = 1
START ̲LDU ̲DATA ̲OFFSET = 2
CONTROL ̲REQUEST = Entire LDU with
control set
LDU ̲HEAD ̲OFFSET = 1
PROTOCOL ̲COMMAND ̲DATA ̲OFFSET = 2
PROTOCOL ̲STATUS ̲DATA ̲OFFSET = 2
SUBDEV ̲INIT ̲DATA = RECORD
PRIORITY: PRIORITY ̲TYPE
Other data is dependent of the protocol.
CONST INTERRUPT ̲TYPE ̲OFFSET = 2
INT ̲ERROR ̲CODE ̲OFFSET = 3
REPORT ̲PRIORITY = (PROTOCOL ̲FAILURE ̲PRI,
EXT ̲D ̲FAILURE ̲PRI,
EXT ̲D ̲STATUS ̲PRI,
MIN ̲PRI)
TYPE SD ̲OTHER ̲STATUS ̲REC = RECORD
ACTION ̲TYPE: (DEVICE ̲ACTION, USER
̲ACTION,
DEVICE ̲RESPONSE)
ACTION ̲SUBTYPE: INTEGER
END
DEVICE ̲ACTION ̲TYPE = (PAPER ̲OK, PAPER ̲OUT,
AUDIO ̲ALARM
USER ̲ACTION ̲TYPE = (KEY ̲OFF, KEY ̲ON,
SYSTEM ̲KEY
DEVICE ̲RESPONSE ̲TYPE = INTEGER
TYPE NICS-TARE ̲FAILURE = (DF,NT ̲LINK ̲FAIL, NT ̲EDC
̲FAIL)
NICS ̲TARE ̲OTHER ̲STATUS = (DS, NT ̲MAN ̲SYNC,
NT ̲INC ̲RESET)
TYPE CCIS ̲SCARS ̲FAILURE (DCS, CS ̲RX ̲DISC, LS ̲RX
̲DISC)
CCIS ̲SCARS ̲OTHER ̲STATUS = (DCSO, CS ̲RX ̲CONN)
CS ̲COMMAND = (CSDO, CS ̲REOPEN, CS ̲SET ̲UP ̲LINK,
CS ̲DISC ̲LINK, CS ̲SET ̲UP ̲LINES,
CS ̲DISC ̲LINES, CS ̲SET ̲V24,
CSD7, CSD8, CSD9, CSD10, CSD11,
CSD12,
CSD13, CSD14, CSD15, CSD16, CS
̲READ ̲V24,
CS ̲STATISTIC)
CS ̲COMMAND ̲ERROR = (OK, CS ̲LEV2 ̲NOT ̲DISCONN, CS ̲LEV2
̲NOT ̲CONN,
CS ̲PARAM ̲ERROR)
PROT ̲COMMAND = (PCD, PC ̲ENABLE, PC ̲OPEN ̲PROTOCOL,
PC ̲CLOSE ̲PROTOCOL,
PC ̲REDEFINE ̲PARAMS, PC ̲STATISTICS,
PC ̲STATUS,
PC ̲DEVICE ̲STATUS)
SDID ̲RECORD = RECORD
SDID: SDID "see DAMOS"
PARENT ̲SDID: SDID
OPENER: USER ̲ID
STATUS: (DISABLED, ENABLED)
STATUS ̲SE: OBJECT ̲DESCRIPTOR
REPLY: H ̲OP ̲REPLY ̲MESSAGE
STATUS ̲REPORT: H ̲STATUS ̲MESSAGE
REPORT ̲PRIORITY: INTEGER
"Inputter data"
INPUTTER: INPUTTER ̲DATA
"Outputter data"
OUTPUTTER: OUTPUTTER ̲DATA
"User data"
USER: USER ̲DATA
Only high level protocols
"Controller Data"
CONTROLLER: CONTROLLER ̲DATA
Only when Controller present
"Subdevice data
SUBDEVICE ̲IF: SUBDEVICE ̲INTERFACE ̲DATA
"Protocol data"
PROTOCOL: Protocol dependent
END
TYPE PROTOCOL ̲ERR
= (DUMMY,
SPI ̲ENTRY
̲1, SPI ̲ENTRY
̲6,
INPUTTER
̲3 ̲4,
INPUTTER
̲3 ̲5, INPUTTER
̲3 ̲7
INPUTTER
̲5 ̲1, INPUTTER
̲6 ̲1
INPUTTER
̲6 ̲2, INPUTTER
̲7 ̲1
INPUTTER
̲7 ̲2 ̲A,INPUTTER
̲7 ̲2 ̲B,
OUTPUTTER
̲3 ̲3 ̲A,
OUTPUTTER
̲3 ̲3 ̲B,
OUTPUTTER
̲4 ̲1, OUTPUTTER
̲5 ̲2,
OUTPUTTER
̲5 ̲3, OUTPUTTER
̲6 ̲1
OUTPUTTER
̲6 ̲6, USER
̲IF ̲2 ̲4,
CONTROLLER
̲2 ̲4,CONTROLLER
̲2 ̲5
CONTROLLER
̲2 ̲6,CONTROLLER
̲2 ̲7
CONTROLLER
̲3 ̲3,CONTROLLER
̲3 ̲10,
CONTROLLER
̲3 ̲16,CONTROLLER
̲4 ̲1
CONTROLLER
̲4 ̲2, CONTROLLER
̲4 ̲4,
SUBDEVICE
̲2 ̲7, SUBDEVICE
̲2 ̲11,
SUBDEVICE
̲8 ̲1, PROT
̲CONT ̲2 ̲2,
PROT ̲CONT
̲2 ̲3, PROT
̲CONT ̲3 ̲3
PROT ̲CONT
̲5 ̲3)