EY-2278E-MM-0001 Listings Book Oct84

Index of /pdf/dec/vax/vms/training

EY-2278E-MM-0001 Listings Book Oct84
EY-2278E-MM-0001
LISTINGS BOOK
Prepared by Educational Services of
Digital Equipment Corporation

First Edition, October 1984

Copyright© 1984 by Digital Equipment Corporation All Rights Reserved
The reproduction of this material, in part or whole, is strictly prohibited. For copy information, contact the Educational Services Department, Digital Equipment Corporation, Bedford, Massachusetts 01730.

Printed in U.S.A.

The information in this document is subject to change without notice and should not be construed as a commitment by Digital Equipment Corporation. Digital Equipment Corporation assumes no responsibility for any errors that may appear in this document.
The software described in this document is furnished under a license and may not be used or copied except in accordance with the terms of such license.
Digital Equipment Corporation assumes no responsibility for the use or reliability of its software on equipment that is not supplied by Digital.

The manuscript for this book was created using DIGITAL Standard Runoff. Book production was done by Educational Services Development and Publishing in Nashua, NH.

The following are trademarks of Digital Equipment Corporation:

~n~oomoTM
DATATRIEVE DEC DE Cm ate DECnet DEC set DECsystem-10 DECSYSTEM-20

DECtape DECUS DECwriter DIBOL MASS BUS PDP P/OS Professional

Rainbow RSTS RSX UNIBUS VAX VMS VT Work Processor

APPENDIX

Supplemental Listings
The following listings are provided for your reference. Some are executive source modules. Others are solutions to Module Test problems.

Executive Source Modules
1. CRDRIVER - Card Reader Driver

2. SYSQIOREQ - $QIO System Service Procedure

3. SYSQIOFDT - System $QIO FDT Routines

4. IOSUBNPAG - Nonpaged 1/0 Subroutines

5. FORKCNTRL - Fork Process Dispatcher

6. INITADP

- UNIBUS Adapter Initialization Routines only (entry INI$UBADP)

7. LIOSUB780 - Purge Data Path Routine

8. LOADMREG - Load Mapping Registers Routines

9. IOCIOPOST - 1/0 Post-Processing Routines

10. COMDRVSUB - Communication Routines

Solutions to Module Test Problems

l . PCDRIVER.LIS
PCDRIVER.COM PCDRIVER.OPT LOADER.COM READV. F'OR RANDWV.FOR MODE.FOR

PCll Reader/Punch Driver
Assembles and Links Driver Used for Linking Driver Loads Driver and Connects Units Test Program Test Prograra Test Program

2. ACPMNT.LIS ACPMNT.COM PCACP.LIS PCACP.COM PCDMT.LIS PCDMT.COM TESTPROG.FOR

Mount Image for ACP
Assembles and Links Mount Image PCll ACP Assembles and Links ACP Dismount Image for ACP Assembles and Links Dismount Image Test Program

3. PCDRIVER.LIS
PCDRIVER.COM PCDRIVER.OPT
PC LOAD.COM ATTN .FOR

Set Attention PCll Driver Assembles and Links Driver Used for Linking Driver Loads Driver and Connects Units Test Program -- Controls PCll

4. PRINTER.LIS PRINTER.COM CINLOAD.COM

Connect to Interrupt Example
Assembles and Links Program Connects Printer with Connect to Interrupt Driver

CRDRIVER

CRDRIVER Table of co~tents

( 1)

686

( 1)

724

( 1)

752

( 1)

824

( 1)

1007

( 1)

1063

( 1)

1085

- CR11 CARD READER DRIVER
CRll FUNCTION DECISION TABLE CANCEL I/O ON CHANNEL READ FUNCTION PROCESSING START I/O OPERATION ON CR11 CARD ReADER CRll CARD READER INTDERRUPTS CARD READER INITIALIZATION CARD READER UNIT INITIALIZATION

3-JUN-1984 11:02:03 VAX-11 Macro V03-0l

Page 0

CRDRIVER V03-002 ;EMD0087
-1
;EMD0087 ;EMD0087 ;EMD0087 ;EMD0087 ;EMD0087 ;EMD0087 ;EMD0(}87 ;EMD0087 ;EMD0087 -6
KDM0002 EMD0087 EMD0087 KDM0002 2
KDM0002 KDM0002 KDM0002

- CRll CARD READER DRIVER

3-JUN-1984 11:02:03 VAX-11 Macro V03-01

Page 1

10-MAR-1982 20:31:59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(l)

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000

1

.TITLE CRDRIVER - CRll CARD READER DRIVER

.1

.!DENT 'V03-002'

3

4 ;

5 ;****************************************************************************

6 ;* 7 ;* COPYRIGHT (c) 1978, 1980, 1982 BY 8 ;* DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS.

* *
*

9 ; * ALL RIGHTS RESERVED.

*

10 ;*

*

11 ;*
12 ;* 13 ;* 14 ;* 15 ;* 16 ;*

THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.

* * * * * *

17 18

; **

THE INFORMATION IN THIS SOFTWARE IS

SUBJECT TO CHANGE WITHOUT NOTICE

19 * AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT

* * *

20 * CORPORATION.

*

21 22 23

* * *

DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.

* * *

24 ; *
25 ;*

* *

26 ;****************************************************************************

27

28 D. N. CUTLER 1-SEP-77

29

.1 MODIFICATION HISTORY:

. 2

.3

V03-002 EMD0087

Ellen M. Dusseault

30-Apr-1984

.4

Add DEV$M NNM characteristic to DEVCHAR2 so that these

.5

devices wTl l have the "node$" prefix.

.6

. 7

V03-001 KDM0002

Kathleen D. Morse

28-Jun-1982

. 8

Added $DVNDEF, $SSDEF, $DCDEF, and $PRDEF.

.9

36

37 MACRO LIBRARY CALLS

38

39

40

$CRBDEF

;DEFINE CRB OFFSETS

41

$CRDEF

;DEFINE CARD READER STATUS BITS

.1

$DCDEF

;DEFINE ADAPTER TYPES

. 2

$DDBDEF

;DEFINE DOB OFFSETS

.3

$DPTDEF

;DEFINE DPT OFFSETS

.4

$DYNDEF

;DEFINE DYNAMIC DATA STRUCTURE TYPES

44

$IDBDEF

;DEFINE IDB OFFSETS

45

$IODEF

;DEFINE I/O FUNCTION CODES

46

$IRPDEF

;DEFINE IRP OFFSETS

47

$JIBDEF

;DEFINE JIB OFFSETS

48

$MSGDEF

;DEFINE SYSTEM MESSAGE TYPES

49

$PCBDEF

;DEFINE PCB OFFSETS

.1

$PRDEF

;DEFINE PROCESSOR REGISTERS

. 2

$UCBDEF

;DEFINE UCB OFFSETS

.3

$SSDEF

;DEFINE STATUS CODES

CRDRIVER V03-002
-1

- CR11 CARD READER DRIVER

3-JUN-1984 11:02:03 VAX-11 Macro V03-01

Page 2

10-MAR-1982 20:31 :59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(1)

00000000 00000004 00000008
oooooooc
00000010 00000014 OOOOOFOF 000008A2 OOOOOAAA
00000090

0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0004
0006 0006 0000 0000 0000 0000 0000
0000 0000 0000

51

$VECDEF

;DEFINE VEC OFFSETS

52

53

54 LOCAL SYMBOLS

55

56 ARGUMENT LIST OFFSET DEFINITIONS

57

58

59 Pl=O

FIRST FUNCTION DEPENDENT PARAMETER

60 P2=4

SECOND FUNCTION DEPENDENT PARAMETER

61 P3=8

THIRD FUNCTION DEPENDENT PARAMETER

62 P4=12

FOURTH FUNCTION DEPENDENT PARAMETER

63 P5=16

FIFTH FUNCTION DEPENDENT PARAMETER

64 P6=20

SIZTH FUNCTION DEPENDENT PARAMETER

65

66

67 ; SPECIAL CARD COLUMN PATTERNS

68

69

70 CR EOF=AB111100001111

END OF FILE (12-11-0-1-6-7-8-9)

71 CR-026=AB100010100010

TRANSLATE 026 CARD CODE (12-2-4-8)

72 CR=029=AB101010101010

TRANSLATE 029 CARD CODE (12-0-2-4-6-8)

73

74

75 CR11 CONTROLLER REGISTER OFFSET DEFINITIONS

76

77

78

$DEFINI CR

79

80 $DEF

CR CSR

.BLKW

;CONTROL STATUS REGISTER

81

_VIELD CR CSR,O,<-

CONTROL STATUS REGISTER FIELD DEFINITIONS

82

<READ, ,M> ,-

READ CARD

83

<EJECT, ,M>,-.

EJECT CARD

84

<,4>,-

RESERVED BITS

85

<IE, ,M>,-

INTERRUPT ENABLE

86

<CLDONE, , M>, -

COLUMN DONE

87

<OFFLIN, ,M>,-

READER OFF LI NE

88

<BUSY,, M>, -

CARD BEING READ

89

<ONLINE, , M>, -

READER ONLINE

90

<TIMERR,,M>,-

TIMING ERROR

91

<MCHECK, ,M>,-

MOTION CHECK

92

<HCHECK, ,M>,-

HOPPER CHECK

93

<CRDONE, ,M> ,-

CARO DONE

94

<ERROR, , M>, -

ERROR CONDITION

95

>

96 $DEF

CR CRB1

.BLKW

;CARD READ DATA BUFFER 1 (BINARY)

97 $DEF

CR-CRB2

.BLKW

;CARD READ DATA BUFFER 2 (PACKED)

98

99

$DEFEND CR

100

101

102 DEFINE DEVICE DEPENDENT UNIT CONTROL BLOCK OFFSETS

103

104

105

$DEFINI UCB

106

107 .=UCB$K_LENGTH

CRDRIVER V03-002
;EMDa087 ;EMD0087

- CR11 CARD READER DRIVER

3-JUN-1984 11 :02:03 VAX-11 Macro V03-01

Page 3

10-MAR-1982 20:31 :59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(1)

00000098

0090 0090 0091 oa92 aa93 0094 oa96 oa98 0098 a098 0098 ooao 0000 0000 0000 0000 0000 0000 0000 0000 aooa 0000 oooa aa38 0038 003C 003C 003C 003C oa43 0043 004A 004E 0052 0057 005E 0062 0062 0067 Oa6C 0071 0076 oooa 0000 0000 0000 0000 0000 0000 0000 0000 0000 ooao 0000 0000 aa38 aa38

108

109 $DEF

UCB$B CR COLCNT .BLKB

CURRENT COLUMN COUNT

11a $DEF

UCB$B-CR-EOFCNT .BLKB

END OF FILE PUNCH COUNT

111 $DEF

UCB$B-CR-EOFCOL .BLKB

NUMBER OF END OF FILE PUNCHES REQUIRED

112 $DEF

UCB$B-CR-OFLCNT .BLKB

OFFLINE TIME COUNTER

113 $DEF

UCB$W-CR-FSTCOL .BLKW

FIRST COLUMN BINARY DATA

114 $DEF

UCB$W=CR=CSR

.BLKW

SAVED FINAL CONTROL STATUS REGISTER

115

116 UCB$K_CR LENGTH=.

117

118

$DEFEND UCB

119

12a

121 LOCAL DATA

122

123 DRIVER PROLOGUE TABLE

124

125

126

DPTAB -

DEFINE DRIVER PROLOGUE TABLE

127

END=CR END,-

END OF DRIVER

128

ADAPTER=UBA,-

ADAPTER TYPE

129

UCBSIZE=UCB$K CR LENGTH,

;UCB SIZE

13a

NAME=CRDRIVER- -

;DRIVER NAME

131

DPT STORE INIT

;CONTROL BLOCK INIT VALUES

132

DPT-STORE UCB,UCB$B FIPL,B,8

;FORK IPL

133

DPT-STORE UCB,UCB$L-DEVCHAR,L,- ;DEVICE CHARACTERISTICS

134

-

<DEV$M REC-

; RECORD ORIENTED

135

!DEV$M-AVL-

; AVAILABLE

136

!DEV$M-IDV>

; INPUT DEVICE

.1

DPT STORE UCB,UCB$L DEVCHAR2,L,- ; DEVICE CHARACTERISTIC

. 2

-

<DEV$M NNM> -

; PREFIX WITH "NODE$"

137

DPT STORE UCB,UCB$B DEVCLASS,B,DC$ CARD ;DEVICE CLASS

138

DPT-STORE UCB,UCB$B-DEVTYPE,B,DT$ CR11 ;DEVICE TYPE

139

DPT-STORE UCB,UCB$W-DEVBUFSIZ,W,80 ;DEFAULT BUFFER SIZE

140

DPT-STORE UCB,UCB$L-DEVDEPEND,L,CR$K Ta29 ;DEFAULT TRANSLATION MODE

141

DPT-STORE UCB,UCB$B-DIPL,B,22 ;DEVICE IPL

142

DPT-STORE REINIT -

;CONTROL BLOCK RE-INIT VALUES

143

DPT-STORE CRB,CRB$L INTD+4,D,CR$INT ;INTERRUPT SERVICE ROUTINE ADDRESS

144

DPT=STORE CRB,CRB$L=INTD+VEC$L_INITIAL,D,CR_INITIAL ;CONTROLLER INIT

145

DPT STORE CRB,CRB$L INTD+VEC$L UNITINIT,D,CR CRll !NIT ;UNIT INIT

146

DPT-STORE DDB,DDB$L-DDT,D,CR$DDT ;DDT ADDRESS

-

147

DPT-STORE END

-

148

149

150 DRIVER DISPATCH TABLE

151

152

153

DDT AB CR.-

;DRIVER DISPATCH TABLE

154

CR STARTIO, -

;START I/O OPERATION

155

0 '::

;UNSOLICITED INTERRUPT

156

CR FUNCTABLE,-

;FUNCTION DECISION TABLE

157 158

CR-CANCELI 0, -
a ::

;CANCEL I/O OPERATION ;REGISTER DUMP ROUTINE

159

a.-

;SIZE OF DIAGNOSTIC BUFFER

160

a

;SIZE OF ERROR LOG BUFFER

161

162

CRDRIVER V03-002

- CR 11 CARD READER DRIVER

0038 0038 0038 0038 20 0038 31 0039 32 003A 33 003B 34 003C 35 003D 36 003E 37 003F 38 0040 60 0041 3A 0042 23 0043 40 0044 27 0045 30 0046 22 0047 39 0048 5C 0049 16 004A 5C 004B 5C 004C 5C 004D 5C 004E 04 004F 5C 0050 5C 0051 5C 0052 5C 0053 14 0054 15 0055 5C 0056 1A 0057 30 0058 2F 0059 53 005A 54 005B 55 005C 56 005D 57 005E 58 005F 59 0060 5C 0061 5C 0062 2C 0063 25 0064 5F 0065 3E 0066 3F 0067 5A 0068 5C 0069 5C 006A 5C 006B SC 006C

163 : 029 CONVERSION TABLE

164

165

166 CR_CVT029:

167

.BYTE AA/ I

168

.BYTE AA I 1 I

169

.BYTE AA/2/

170

.BYTE AA/3/

171

.BYTE AA/4/

172

.BYTE AA/5/

173

.BYTE AA/6/

174

.BYTE AA /7 I

175

.BYTE AA/8/

176

.BYTE AA I ' I

177

.BYTE AA I : I

178

.BYTE /\A/#/

179

.BYTE AA/@/

180

.BYTE AA I' I

181

.BYTE AA/=/

182

.BYTE AA/" I

183

.BYTE AA/9/

184

.BYTE AA/\/

185

.BYTE AX16

186

.BYTE AA/\/

187

.BYTE AA/\/

188

.BYTE AA/\/

189

.BYTE AA/\/

190

.BYTE AX04

191

.BYTE AA/\/

192

.BYTE AA/\/

193

.BYTE AA/\/

194

.BYTE AA/\/

195

.BYTE AX14

196

.BYTE AX15

197

.BYTE AA/\/

198

.BYTE AXlA

199

.BYTE J\A/01

200

.BYTE AA\/\

201

.BYTE AA/S/

202

.BYTE AA/T/

203

.BYTE AA/U/

204

.BYTE AA/V/

205

.BYTE /\A/WI

206

.BYTE AA/XI

207

.BYTE AA/Y/

208

.BYTE AA/\/

209

.BYTE /\A/\/

210

.BYTE AA/,/

211

.BYTE AA/%/

212

.BYTE AA/ I

213

.BYTE AA/">/

214

.BYTE AA/? I

215

.BYTE AA/Z/

216

.BYTE AA/\/

217

.BYTE AA/\/

218

.BYTE AA/\/

219

.BYTE AA/\/

3-JUN-1984 11:02:03 VAX-11 Macro V03-01

Page 4

10-MAR-1982 20:31 :59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(1)

;029 TRANSLATE TABLE
; 0 AXOO A0000 ; 1 AX01 /\0001 ; 2 AX02 /\0002 ; 3 AX03 /\0003 ; 4 AX04 /\0004 ; 5 AX05 /\0005 ; 6 AX06 /\0006 ; 7 AX07 /\0007 ; 8 AX08 /\0010 ; 9 AX09 A0011 ; 10 AXOA /\0012 ; 1·1 AXOB /\0013 ; 12 AXOC /\0014 ; 13 AXOD /\0015 ; 14 AXOE /\0016 ; 15 AXOF /\0017 ; 16 AX10 /\Q020 ; 17 AX 11 /\Q021 ; 18 AX12 /\Q022 ; 19 AX13 /\0023 ; 20 AX14 /\0024 ; 21 AX 15 /\0025 ; 22 AX16 /\0026 ; 23 AX17 /\0027 ; 24 AX18 /\Q030 ; 25 AX19 /\0031 ; 26 AXlA /\Q032 ; 27 AX1B /\0033 ; 28 AX1C /\0034 ; 29 AXlD /\Q035 ; 30 AX1E /\0036 ; 31 AXlF /\Q037 ; 32 AX20 /\0040
; 33 AX21 /\0041 ; 34 AX22 /\Q042 ; 35 AX23 /\0043 ; 36 AX24 /\0044 ; 37 AX25 /\0045 ; 38 AX26 /\0046 ; 39 AX27 /\0047 ; 40 AX28 /\0050 ; 41 AX29 /\Q051 ; 42 AX2A /\0052 ; 43 AX2B /\0053 ; 44 AX2C /\0054 ; 45 AX2D /\Q055 ; 46 AX2E /\0056 ; 47 AX2F /\0057 ; 48 AX30 /\0060 ; 49 AX31 /\0061 ; 50 AX32 /\0062
; 51 AX33 /\0063 : 52 AX34 "0064

CRDRIVER V03-002

~ CR 11 CARD READER DRIVER

DA 0060 220 17 006E 221 1B 006F 222 5.C 0070 223 5C 0071 224 5C 0072 225 5C 0073 226 5C 0074 227 05 0075 228 06 0076 229 07 0077 230 2D 0078 231 4A 0079 232 4B 007A 233 4C 007B 234 40 007C 235 4E 0070 236 4F 007E 237 50 007F 238 51 0080 239 5C 0081 240 50 0082 241 24 0083 242 2A 0084 243 29 0085 244 38 0086 245 5E 0087 246 52 0088 247 11 0089 248 12 008A 249 13 0088 250 5C 008C 251 5C 0080 252 08 DOSE 253 5C 008F 254 18 0090 255 19 0091 256 5C 0092 257 5C 0093 258
1c 0094 259
10 0095 260 1E 0096 261 1F 0097 262 70 0098 263 7E 0099 264 73 009A 265 74 009B 266 75 009C 267 76 009D 268 77 009E 269 78 009F 270 79 OOAO 271 5C OOA1 272 5C OOA2 273 5C OOA3 274 5C OOA4 275 5C OOA5 276

.BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE
.BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE
.BYTE .BYTE .BYTE .BYTE
.BYTE .BYTE .BYTE .BYTE

AXOA AX17 AX1B AA/\/ AA/\/ AA/\/ AA/\/ AA/\/
AX05 AX06 AX07 AA/-/ AA/J/ AA/K/ AA/L/ AA/M/ AA/N/ AA/0/ AA/P/ AA/Q/ AA/\/ AA/] I AA/$/ AA/*/ AA/)/ AA/;/ AA/A/ AA/R/ AX11 AX12 AX13 AA/\/ AA/\/
AX08 AA/\/
AX18 AX19 AA/\/ AA/\/ AX1C AX 1D AX1E AX 1 F AA/}/ AA/-/ AA/s/ AA/t/ AA/u/ AA/v/
AA/w/ AA/x/
AA/y/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/

3-JUN-1984 11: 02: 03 VAX-11 Macro V03-0l

Page 5

10-MAR-1982 20:31 :59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(1)

; 53 ; 54 ; 55 ; 56 ; 57 ; 58 ; 59 ; 60 ; 61 ; 62 ; 63 ; 64 ; 65 ; 66 ; 67
; 68 ; 69 ; 70 ; 71 ; 72 ; 73 ; 74 ; 75 ; 76 ; 77 ; 78 ; 79 ; 80 ; 81 ; 82 ; 83 ; 84 ; 85 ; 86 ; 87
; 88 ; 89 ; 90 ; 91 ; 92 ; 93 ; 94 ; 95 ; 96 ; 97 ; 98 ; 99 ; 100 ; 101
; 102 ; 103 ; 104 ; 105 ; 106 ; 107 ; 108 : 109

AX35 AX36 AX37 AX38 AX39 AX3A AX3B AX3C
AX3D AX3E AX3F AX40 AX41 AX42 AX43 AX44 AX45 AX46 AX47 AX48 AX49 AX4A AX48 AX4C AX4D AX4E AX4F AX50 AX51 AX52 AX53 AX54 AX55 AX56
AX57 AX58 AX59 AX5A AX5B AX5C AX5D AX5E AX5F AX60 AX61 AX62 AX63 AX64 AX65
AX66 AX67
AX68
AX69 AX6A AX6B AX6C AX6D

AQ065 AQ066 A0067 AQQ70 AQQ71
A0072 A0073 AQQ74
A0075 A0076 AQ077 A0100 A0101 A0102 A01Q3 A0104 AQ105 A0106 AQ1Q7 AQ11 Q AQl 11 AQl 12 AQl 13 AQl 14 AQl 15 AQl 16 A0117 AQ12Q AQ121 A0122 AQ123 AQ124 AQ125 AQ126 AQ127 AQ13Q AO 131 A0132 A0133 A0134 AQ135 /\Q136 /\0137 AQ140 AQ141 AQ142 AQ143 A0144 A0145 A0146 AQ147 AQ150 AQ151 AQ152 A0153 A0154 A0155

CRDRIVER V03-002

- CR 11 CARD READER DRIVER

5C OOA6 277 5C OOA7 278 7A OOA8 279 5C OOA9 280 5C OOAA 281 5C OOAB 282 5C OOAC 283 5C OOAO 284 5C OOAE 285 5C OOAF 286 5C OOBO 287 SC OOBl 288 SC OOB2 289 5C OOB3 290 5C OOB4 291 5C OOB5 292 5C OOB6 293 5C OOB7 294 26 OOB8 295 41 OOB9 296 42 OOBA 297 43 DOBB 298 44 OOBC 299 45 OOBO 300 46 OOBE 301 47 OOBF 302
48 ooco 303
5C OOCl 304 5B OOC2 305 2E OOC3 306 3C OOC4 307 28 OOC5 308 2B OOC6 309 21 OOC7 310 49 DOCS 311 01 OOC9 312 02 OOCA 313 03 OOCB 314
5C oocc 315
09 OOCD 316 5C OOCE 317 FF OOCF 318 5C 0000 319 5C 0001 320 5C 0002 321 OB OOD3 322 QC 0004 323
OD 0005 324 OE 0006 325 OF 0007 326 7B 0008 327 61 0009 328 62 OODA 329
63 0008 330 64 OODC 331 65 0000 332 66 OODE 333

.BYTE
.BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE
.BYTE
.BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYT:= .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .. BYTE .BYTE .BYTE .BYTE .BYTE

AA/\/ AA/\/
AA/z/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/
AA/&/ AA/A/ AA/B/ AA/C/ AA/0/ AA/E/ AA/F/ AA/G/ AA/H/ AA/\/ /\A/[/ AA/./ AA/</ AA/(/ /\A/+/
AA/! I AA/I/ AXQl /\XQ2
/\X03 AA/\/ AX09 AA/\/
AXFF AA/\/ AA/\/ /\A/\/
AXOB AXOC AXQD AXQE
AXOF AA/{/ /\A/a/ AA/b/
AA/c/ /\A/d/ AA/e/ AA/f/

3-JUN-1984 11:02:03 VAX-11 Macro V03-0l

Page 6

10-MAR-1982 20:31:59 DISK$VMSMASTER:[ORIVER.SRC]CRORIVE(l)

; 110
; 111 ; 112 ; 113 ; 114 ; 11S ; 116 ; 117 ; 118 ; 119 ; 120 ; 121 ; 122 ; 123 ; 124 ; 125 ; 126 ; 127
; 128 ; 129 ; 130 ; 131 ; 132 ; 133 ; 134 ; 135 ; 136 ; 137 ; 138 ; 139 ; 140 ; 141 ; 142 ; 143 ; 144 j 145 ; 146 j 147 ; 148 j 149 ; 150 ; 151 j 152 ; 153 ; 154 ; 155 ; 156 ; 157 ; 158 ; 159 ; 160 ; 161 ; 162 ; 163 ; 164 ; 165 ; 166

AX6E AX6F AX70 AX71 AX72 AX73 AX74 AX75 AX76 AX77 AX78 AX79 AX7A AX7B AX7C AX70 AX7E AX7F AX80 AX81 AX82 AX83 AX84 AX85 AX86 AX87 AX88 AX89 AX8A AX8B AX8C AX8D AXSE AX8F AX90 AX9 l /\X92 /\X93 AX94 AX95 AX96 AX97 AX98 AX99 AX9A AX9B AX9C AX9D AX9E AX9F /\XAO AXAl AXA2 AXA3 /\X.A4
/\XA5 AXA6

A0156 AQ157 AQ16Q
AQ 161 AQ162 AQ163 AQ164 AQ165
A0166 AQ167 AQ17Q
AO 171 AQ172 AQ173 AQ174 AQ175 AQ176 AQ177 AQ2QQ
AQ2Q1 AQ202 AQ2Q3 AQ204 AQ2Q5 AQ2Q6 AQ2Q7
AQ210 /\Q211 AQ212 AQ213 AQ214 AQ215 /\0216 AQ217 AQ22Q
AQ221 AQ222 AQ223 AQ224 AQ225 AQ226 /\0227 AQ23Q AQ231 /\Q232 AQ233
AQ234 AQ235 AQ236
AQ237 /\0240 AQ241 AQ242 AQ243 AQ244 AQ245 /\0246

CRDRIVER V03-002

- CRl 1 CARD READER DRIVER

67 OODF 334 68 DOED 335 SC ODEl 336 5C DOE2 337 SC OOE3 338 SC OOE4 339 SC DOES 34D SC OOE6 341 SC OOE7 342 69 DOE8 343 SC DDE9 344 5C OOEA 345 5C OOEB 346 SC DOEC 347
SC DOED 348 SC ODEE 349
SC ODEF 350 SC OOFO 351 SC ODFl 3S2 5C OOF2 3S3 SC OOF3 354 5C OOF4 355 5C DOF5 356 SC DOF6 3S7 SC OOF7 3S8 7C OOF8 3S9 6A OOF9 360 6B OOFA 361 6C OOFB 362 60 OOFC 363 6E OOFD 364 6F OOFE 36S 70 OOFF 366 71 0100 367 SC 01Dl 368 5C 0102 369 SC 0103 370 SC 0104 371 SC OlOS 372 SC 0106 373 5C 0107 374 72 0108 37S SC 0109 376 SC OlOA 377 SC OlOB 378 SC OlOC 379 SC OlOD 380
5C OlOE 381 SC DlOF 382 SC D11D 383 10 0111 384 SC 0112 385 5C 0113 386 SC 0114 387 SC 01 lS 388 SC 0116 389
5C 0117 390

.BYTE
.BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE
.BYTE .BYTE .BYTE
.BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE
.BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE
.BYTE

/\A/g/ AA/h/ /\A/\/
/\A/\/ AA/\/ /\A/\/ AA/\/ AA/\/ AA/\/ AA/ i I AA/\/ AA/\/ AA/\/
/\A/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/I/ AA/j/ AA/k/ AA I 1 I AA/m/ AA/n/ AA/o/ AA/p/ AA/q/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/r/ /\A/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/
AXlD AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/

3-JUN-1984 11: 02: 03 VAX-11 Macro V03-01

Page 7

10-MAR-1982 2D:31:59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(l)

; 167 ; 168 ; 169 ; 17D ; 171 ; 172 ; 173 ; 174
; 17S ; 176 ; 177 ; 178 ; 179 ; 18D ; 181 ; 182 ; 183 ; 184 ; 185 ; 186 ; 187 ; 188 ; 189 ; 19D ; 191 ; 192 ; 193 ; 194 ; 195 ; 196 ; 197 ; 198 ; 199 ; 2DD ; 2D1 ; 2D2 ; 203 ; 204 ; 205 ; 206 ; 2D7 ; 2D8 ; 2D9 ; 210 ; 211 ; 212 ; 213 ; 214 ; 21S ; 216 ; 217 ; 218 ; 219 ; 22D ; 221 ; 222 : 223

AXA7 AXA8 AXA9 AXAA AXAB AXAC AXAD AXAE AXAF AXBO AXBl AX82 AX83 AXB4
AXB5 AXB6
AXB7 AX88 AX89 AXBA AXBB AXBC AXBD AXBE AXBF AXCO AXCl AXC2 AXC3 AXC4 AXC5 AXC6 AXC7 AXC8 AXC9 AXCA AXCB AXCC AXCD AXCE AXCF AXDD AX01 AX02 AX03 AX04 AX05 AX06 AX07 AX08 AX09 AXDA AXDB AXDC AXDD AXDE AXDF

/\0247 A02SD /\02S1 /\0252 /\Q253 A02S4 /\0255 /\0256 A02S7 AQ26D AQ261
A0262 A0263 A0264 A0265 A0266 A0267 A027Q A0271 AQ272 A0273 A0274 A0275 A0276 A0277 A03D0 A0301 AQ302
A03D3 /\0304 A0305 A0306 A03D7 A031D A0311 A0312 A0313 A0314 AQ31S AQ316 A0317 A032D A0321 A0322 A0323 AQ324 AQ325 AQ326 A0327 A033D A0331 A0332 A0333 A0334 AQ33S AQ336 AQ337

CRDRIVER V03-002

- CR 11 CARD READER DRIVER

5C 0118 5C 0119 5C 01 lA 5C 011B 5C 011C 5C 011 D 5C 011 E 5C 011 F 5C 0120
5C 0121 5C 0122 5C 0123 5C 0124 5C 0125 5C 0126 5C 0127 5C 0128 5C 0129 5C 012A 5C 012B 5C 012C 5C 012D 5C 012E 5C 012F 5C 0130 5C 0131 5C 0132 5C 0133 5C 0134 5C 0135 5C 0136 5C 0137
0138 0138 0138 0138 0138 0138 20 0138 31 0139 32 013A 33 013B 34 013C 35 013D 36 013E 37 013F 38 0140 60 0141 5F 0142 3D 0143
40 0144 5E 0145 27 0146 5C 0147 39 0148 5C 0149 16 014A

391

.BYTE AA/\/

392

.BYTE AA/\/

393

.BYTE AA/\/

394

.BYTE AA/\/

395

.BYTE AA/\/

396

.BYTE AA/\/

397

.BYTE AA/\/

398

.BYTE AA/\/

399

.BYTE /\A/\/

400

.BYTE AA/\/

401

.BYTE AA/\/

402

.BYTE AA/\/

403

.BYTE AA/\/

404

.BYTE AA/\/

405

.BYTE AA/\/

406

.BYTE AA/\/

407

.BYTE AA/\/

408

.BYTE AA/\/

409

.BYTE AA/\/

410

.BYTE /\A/\/

411

.BYTE /\A/\/

412

.BYTE AA/\/

413

.BYTE AA/\/

414

.BYTE AA/\/

415

.BYTE AA/\/

416

.BYTE /\A/\/

417

.BYTE AA/\/

418

.BYTE /\A/\/

419

.BYTE /\A/\/

420

.BYTE AA/\/

421

.BYTE AA/\/

422

.BYTE AA/\/

423

424

425 ; 026 CONVERSION TABLE

426

427

428 CR__ CVT026:

429

.BYTE /\A/ I

430

.BYTE AA/ 1I

431

.BYTE AA/2/

432

.BYTE /\A/3/

433

.BYTE /\A/4/

434

.BYTE AA/5/

435

.BYTE /\A/6/

436

.BYTE AA/7/

437

.BYTE AA/8/

438

.BYTE AA/' I

439

.BYTE AA/ I

440

.BYTE AA/-;/

441

.BYTE AA/@/

442

.BYTE AA//\/

443

.BYTE AA/' I

444

.BYTE AA/\/

445

.BYTE AA/9/

446

.BYTE AA/\/

447

.BYTE AX16

3-JUN-1984 11:02:03 VAX-11 Macro V03-01

Page 8

10-MAR-1982 20:31 :59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(1)

; 224 ; 225 ; 226 ; 227 ; 228 ; 229 ; 230 ; 231 ; 232 ; 233 ; 234
; 235 ; 236 ; 237 ; 238 ; 239 ; 240 ; 241 ; 242 ; 243 ; 244 ; 245 ; 246 ; 247 ; 248 ; 249 ; 250 ; 251 ; 252 ; 253 ; 254 ; 255

AXEO AXE1 AXE2 AXE3 AXE4 AXE5 AXE6 AXE7 AXES AXE9 AXEA AXEB AXEC AXED AXEE AXEF AXFO AXF1 AXF2 AXF3 AXF4 AXF5 AXF6 /\Xf7 AXF8 /\Xf 9 AXFA AXFB /\XfC AXFD AXFE /\Xff

/\Q340 /\Q341 /\Q342 /\Q343 /\Q344 /\Q345 /\0346 /\0347 /\0350 /\0351 /\Q352
/\0353 /\Q354 /\Q355 /\0356 /\0357 /\0360 /\Q361 /\0362 /\Q363 /\Q364 /\Q365 /\Q366 /\Q367 /\0370 /\Q371 /\Q372 /\Q373 /\Q374
/\0375 /\Q376 /\Q377

;026 TRANSLATE TABLE ; 0 AXOO AQOOO ; 1 AXO 1 A0001 ; 2 AXQ2 /\Q002 ; 3 AX03 /\Q003 ; 4 AX04 /\0004 ; 5 AX05 /\Q005 ; 6 AX06 /\0006 ; 7 AX07 /\QQ07 ; 8 AX08 /\Q010 ; 9 AX09 /\QO 11 ; 10 AXOA l\Q012 ; 11 AXOB /\0013
; 12 AXOC /\Q014 ; 13 AXOD /\Q015
; 14 AXOE l\Q016
; 15 AXOF AQ017 ; 16 AX10 /\0020 ; 17 /\Xl 1 AQ021 : 18 AX 12 /\QQ22

CRDRIVER V03-002

- CR 11 CARD READER DRIVER

5C 014B 448 5C 014C 449 5C 014D 450 5-C 014E 451 04 014F 452 5C 0150 453 5C 0151 454 5C 0152 455 5C 0153 456 14 0154 457 15 0155 458 5C 0156 459 1A 0157 460 30 0158 461 2F 0159 462 53 015A 463 54 015B 464 55 015C 465
56 0150 466 57 015E 467 58 015F 468 59 0160 469 5C 0161 470 3B 0162 471 2C 0163 472 28 0164 473 22 0165 474 23 0166 475 25 0167 476 5A 0168 477 5C 0169 478 5C 016A 479 5C 016B 480 5C 016C 481 OA 0160 482 17 016E 483 18 016F 484 5C 0170 485 5C 0171 486 5C 0172 487 5C 0173 488 5C 0174 489 05 0175 490 06 0176 491 07 0177 492 2D 0178 493 4A 0179 494 48 017A 495 4C 017B 496 4D 017C 497 4E 0170 498 4F 017E 499 50 017F 500 51 0180 501 5C 0181 502 3A 0182 503 24 0183 504

.BYTE .BYTE .BYTE ·.BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE

AA/\/ AA/\/ AA/\/ /\A/\/
AX04 AA/\/ AA/\/ AA/\/ AA/\/
AX14 AX15 AA/\/ AX1A AA/0/
/\A\/\
/\A/S/ AA/T/ AA/U/
AA/V/ /\A/W/
AA/X/ /\A/Y/ AA/\/ AA/;/ AA I, I AA/(/ AA I" I AA/#/ AA/%/ AA/Z/ AA/\/ AA/\/ AA/\/ /\A/\/ AXOA AX17 AXlB AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AX05 /\XQ6 AX07 AA/-/ /\A/J/ AA/K/
AA I LI AA/M/ AA/N/ AA/O/ AA/P/ AA/Q/ AA/\/ AA/: I /\A/$/

3-JUN-1984 11: 02: 03 VAX-11 Macro V03-01

Page 9

10-MAR-1982 20:31:59 DISK$VMSMASTER: [DRIVER.SRC]CRDRIVE(l)

; 19 ; 20 ; 21 ; 22 ; 23 ; 24 ; 25 ; 26 ; 27 ; 28 ; 29 ; 30 ; 31 ; 32 ; 33 ; 34 ; 35 ; 36 ; 37 ; 38 ; 39 ; 40 ; 41 ; 42 ; 43 ; 44 ; 45 ; 46 ; 47 ; 48 ; 49 ; 50 ; 51 ; 52 ; 53 ; 54 ; 55 ; 56 ; 57 ; 58 ; 59 ; 60 ; 61 ; 62 ; 63 ; 64 ; 65 ; 66 ; 67 ; 68 ; 69 ; 70 ; 71 ; 72 ; 73 ; 74 : 75

/\Xl 3 /\X14 /\X15 /\X16
AX17 AX18 /\X19 AX1A /\X1B AX1C AX1D /\X1 E /\X 1 F /\X20 /\X21 /\X22 AX23 AX24
AX25 /\X26 /\X27 AX28 /\X29 AX2A /\X2B /\X2C /\X2D AX2E /\X2F /\X30 /\X31 /\X32 /\X33 /\X34
AX35 AX36 AX37 AX38 /\X39 AX3A /\X3B AX3C AX30 AX3E AX3F AX40 /\X41 AX42 AX43 AX44 AX45 AX46 /\X47
AX48 AX49 AX4A AX4B

A0023 /\0024 A0025 /\0026
/\0027 /\0030 A0031 A0032 A0033 A0034 /\Q035 A0036 /\Q037 /\Q040 /\0041 /\0042 /\0043 A0044 /\QQ45 /\QQ46 /\Q047 /\Q050 /\0051 A0052 A0053 /\0054 A0055 A0056 A0057 /\0060 /\Q061 /\0062 /\Q063 AQ064 /\QQ65 A0066 A0067
1\0070
A0071 A0072 A0073 A0074 A0075 A0076 A0077 /\Q100 AO 101 AQ102 AQl 03 AQ104 AQ105 /\0106 /\Ql07 /\Q 1 1 0 AQl 11 A0112 AQ113

CRDRIVER V03-002

- CR11 CARD READER DRIVER

2A 0184 5B 0185 3E 0186 26 0187 52 0188 11 0189 12 018A 13 018B 5C 018C 5C 0180 08 018E 5C 018F 18 0190 19 0191 5C 0192 5C 0193 lC 0194 10 0195 1E 0196 1F 0197 70 0198 7E 0199 73 019A 74 019B 75 019C 76 0190 77 019E
78 019f 79 OlAO 5C 01A1 SC 01A2 SC 01A3 SC 01A4 5C 01AS 5C 01A6 5C 01A7 7A 01A8 5C 01A9 5C 01AA SC OlAB 5C 01AC 5C 01AD SC 01AE SC OlAF 5C 01BO SC OlBl 5C 01B2 SC 01B3 5C 01B4 SC 01B5 SC 01B6 5C 01B7 2B 01B8 41 0189 42 OlBA 43 01BB 44 OlBC

505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547
548 549 550 551 SS2 553 554 S55 556 557 558 559 560 S61

.BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE

/\A/*/ /\A/[/ /\A/>/ /\A/&/ /\A/R/ /\X 11 AX12 /\Xl3 /\A/\/ /\A/\/ AX08 AA/\/ /\Xl8 AX19 /\A/\/ AA/\/ AXlC AXlD AXl E AX 1 F /\Al} I /\A/-/ /\A/s/ /\A/ ti /\A/u/ /\A/v/ /\A/w/ AA/x/ AA/y/ /\A/\/ AA/\/ AA/\/ /\A/\/ /\A/\/ /\A/\/ /\A/\/ /\A/z/ AA/\/ /\A/\/ /\A/\/ /\A/\/ AA/\/ /\A/\/
AA/\/ AA/\/ /\A/\/ AA/\/ AA/\/ /\A/\/ AA/\/ AA/\/ /\A/\/ /\A/+/ AA/A/ AA/B/
AA/Cl
AA/D/

3-JUN-1984 11:02:03 VAX-11 Macro V03-01

Page 10

10-MAR-1982 20:31:59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(1)

; 76 ; 77 ; 78 ; 79 ; 80 ; 81 ; 82 ; 83 ; 84 ; 85 ; 86 ; 87 ; 88 ; 89 ; 90 ; 91 ; 92 ; 93 ; 94 ; 95 ; 96 ; 97 ; 98 ; 99 ; 100 ; 101 ; 102 ; 103 ; 104 ; 105 ; 106 ; 107 ; 108 ; 109 ; 110 ; 111 ; 112 ; 113 ; 114 ; 115 ; 116 ; 117 ; 118 ; 119 ; 120 ; 121 ; 122 ; 123 ; 124 ; 125 ; 126 ; 127 ; 128 ; 129 ; 130 ; 131 : 132

/\X4C /\X4D /\X4E AX4F AX50 /\X51 /\X52 /\X53 /\X54
AX55 AX56 AX57 AX58 /\X59 /\X5A /\X5B AX5C AX50 /\X5E AX5F AX60 /\X61 /\X62 /\X63 /\X64 AX65 /\X66 AX67 AX68 /\X69 AX6A /\X6B /\X6C /\X60 /\X6E
AX6f AX70 AX71 AX72 AX73 AX74 AX75 AX76 /\X77 AX78 /\)(79 AX7A AX7B AX7C AX70 /\X7E AX7F AX80 /\X81 /\X82 AX83 AX84

/\0114 /\0115 /\Q 116 AO 117 /\0120 /\0121 /\0122 A0123 A0124 /\0125 /\0126 A0127 A0130 AO 131 /\0132 /\0133 A0134 A0135 AQ136 A0137 A0140 /\0141 /\0142 /\0143 /\0144 A0145 /\0146 A0147 /\0150 /\Q 151 AQ152 /\0153 /\0154 /\0155 /\0156 A0157 /\Ql60 AO 161 A0162 A0163 /\0164 A0165 /\Ql66 /\Ql67 AQ170 AO 171 AQ172 AQ173 /\0174 A0175 A0176 AQ177 /\0200 /\Q201 /\0202 A0203 A0204

CRDRIVER V03-002

- CR11 CARD READER DRIVER

45 01BO 562 46 01BE 563 47 01BF 564 48 OlCO 565 5C 01C1 566 3F 01C2 567 2E 01C3 568 29 01C4 569
50 01C5 570 3C 01C6 571 21 01C7 572 49 01C8 573 01 01C9 574 02 01CA 575 03 01CB 576 5C 01CC 577 09 01CO 578 5C 01CE 579 FF OlCF 580 5C 0100 581 5C 01D1 582 5C 0102 583 OB 0103 584
oc 0104 585
OD 0105 586 OE 01D6 587 OF 0107 588 76 0108 589 61 01D9 590 62 01DA 591 63 010B 592 64 OlDC 593 65 0100 594 66 OlDE 595 67 01DF 596 68 01EO 597 5C 01E1 598 5C 01E2 599 5C 01E3 600 SC 01E4 601 5C 01E5 602 SC 01E6 603 5C 01E7 604 69 01E8 605 5C 01E9 606 5C 01EA 607 5C OlEB 608 5C OlEC 609 5C OlEO 610 5C 01EE 611 5C 01EF 612 5C 01FO 613 5C 01F1 614
5C 01F2 615
5C 01F3 616 5C 01F4 617 5C 01F5 618

.BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE
.BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE ·.BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE
.BYTE .BYTE .BYTE
.BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE
.BYTE
.BYTE .BYTE .BYTE .BYTE

AA/E/ AA/F/ AA/G/ AA/H/ AA/\/
AA I? I AA/./ AA/)/
AA/] I AA/</
AA/!/ AA/I/ AX01 AX02 AX03 AA/\/
AX09 AA/\/ AXFF AA/\/ AA/\/ AA/\/ AXOB
AXOC AXOD AXOE AXOF AA/{/ AA/a/ AA/b/ AA/c/ AA/d/ AA/e/ AA/f/ AA/g/
AA/h/ AA/\/
AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/ i I AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/
AA/\/
AA/\/ AA/\/ AA/\/ AA/\/

3-JUN-1984 11:02:03 VAX-11 Macro V03-01

Page 11

10-MAR-1982 20:31 :59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(1)

; 133 ; 134 ; 135 ; 136 ; 137 ; 138 ; 139 ; 140 ; 141 ; 142 ; 143 ; 144 ; 145 ; 146 ; 147 ; 148 ; 149 ; 150 ; 151 ; 152 ; 153 ; 154 ; 155
: 156 ; 157 ; 158 ; 159 ; 160 ; 161 ; 162 ; 163 ; 164 ; 165 ; 166 ; 167 ; 168 ; 169 ; 170 ; 171 ; 172 ; 173 ; 174 ; 175 ; 176 ; 177 ; 178 ; 179 ; 180 ; 181 ; 182 ; 183 ; 184 ; 185 ; 186 ; 187 ; 188 : 189

AX85 AX86 AX87 AX88 AX89 AX8A AX8B AX8C AX80 AX8E AX8F AX90 AX91 AX92 AX93 AX94 AX95 AX96 AX97 AX98 AX99 AX9A AX9B
AX9C AX9D AX9E AX9F AXAO AXA1 AXA2 AXA3 AXA4 AXA5 AXA6 AXA7 AXA8 AXA9 AXAA AXAB AXAC AXAO AXAE AXAF AXBO AXBl AXB2 AXB3 AXB4 AXB5 AXB6 AXB7 AXB8 AXB9 AXBA AXBB AXBC AXBO

A0205 A0206 /\0207 A0210 AQ211 AQ212 AQ213 AQ214
A0215 A0216 A0217 A0220 A0221 /\Q222 /\0223 AQ224 A0225 /\Q226 A0227 A0230 /\Q231 A0232 /\0233
AQ234 /\Q235 /\Q236 AQ237 A0240 /\Q241 AQ242 A0243 A0244 ,l\Q245 /\Q246 A0247 A0250 A0251 'A0252 A0253 A0254 A0255 A0256 A0257 A0260 /\0261 A0262 A0263 A0264 A0265 A0266 A0267 A0270 A0271 /\0272 A0273 A0274 A0275

CRDRIVER V03-002

- CR 11 CARD READER DRIVER

5C 01F6 619 5C 01F7 620 7C 01f8 621 6A 01F9 622
6B OlFA 623
6C OlFB 624 6D OlFC 625 6E OlFD 626
6F 01FE 627
70 01 FF· 628 71 0200 629 5C 0201 630 5C 0202 631 5C 0203 632 5C 0204 633 5C 0205 634 5C 0206 635 5C 0207 636 72 0208 637 5C 0209 638 5C 020A 639 5C 020B 640 5C 020C 641 5C 020D 642 5C 020E 643 5C 020F 644 5C 0210 645 10 0211 646 5C 0212 647 5C 0213 648 5C 0214 649 5C 0215 650 5C 0216 651 5C 0217 652 5C 0218 653 5C 0219 654 5C 021A 655 5C 021B 656 5C 021C 657 5C 0210 658 5C 021E 659 5C 021F 660 5C 0220 661 5C 0221 662 5C 0222 663 5C 0223 664 5C 0224 665 5C 0225 666 5C 0226 667 5C 0227 668 5C 0228 669 5C 0229 670
5C 022A 671 5C 022B 672 5C 022C 673 5C 0220 674 5C 022E 675

.BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE
.BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE
.BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE
.BYTE .BYTE .BYTE
.BYTE .BYTE .BYTE
.BYTE .BYTE

AA/\/ AA/\/ AA/I/ AA/j/ AA/k/ AA/1/ AA/rn/ AA/n/ AA/o/ AA/p/ AA/q/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/r/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AX 10 AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/
AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/

3-JUN-1984 11:02:03 VAX-11 Macro V03-0l

Page 12---

10-MAR-1982 20:31:59 DISK$VMSMkSTER:[DRIVER.SRC]CRDRIVE(l)

; 190

; 191

; 192

; 193

; 194

; 195

; 196

; 197

; 198

; 199

; 200

; 201

; 202

; 203

; 204

; 205

; 206

; 207

; 208

; 209

; 210

; 211

; 212

; 213

; 214

; 215

; 216

; 217

; '

218 219

; 220

; 221

; 222

; 223

; 224

; 225

; 226

; 227

; 228

; 229

; 230

; 231

; 232

; 233

; 234

; 235

; 236

; 237

; 238

; 239

; 240

; 241

; 242

; 243

; 244

; 245

: 246

AXBE AXBF AXCO AXCl AXC2 AXC3 AXC4 AXC5 AXC6 AXC7 AXC8 AXC9 AXCA AXCB AXCC AXCD AXCE AXCF AXDO AXDl AXD2 AX03 AXD4 AXD5 AXD6 AXD7 AXDB AXD9 AXDA AXDB AXDC AXDD AXDE AXDF AXEO AXEl AXE2 AXE3 AXE4 AXE5 AXE6 AXE7 AXES AXE9 AXEA AXEB AXEC AXED AXEE AXEF AXFO AXFl AXF2 AXF3 AXf 4 AXf 5 AXf6

/\0276 /\0277 /\0300 A0301 A0302 AQ303 A0304 A0305 AQ306 A0307 A0310 A0311 A0312 AQ313 A0314 AQ315 AQ316 /\0317 A0320 A0321 AQ322 AQ323 A0324 A0325 /\0326 /\0327 A0330 A0331 A0332 AQ333 A0334 A0335 AQ336 AQ337 A0340 A0341 A0342 AQ343 AQ344 AQ345 AQ346 A0347 A0350 A0351 A0352 A0353 A0354 AQ355 AQ356 AQ357 A0360 AQ361 AQ362
A0363 ,f\0364 A0365 A0366

CRDRIVER V03-002

- CR 11 CARD READER DRIVER

5C 022F 676 5C 0230 677 5C 0231 678 5-C 0232 679 5C 0233 680 5C 0234 681 5C 0235 682 5C 0236 683 5C 0237 684

.BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE

AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/ AA/\/

3-JUN-1984 11 :02:03 VAX-11 Macro V03-0l

Page 13

10-MAR-1982 20:31:59 DISK$VMSMASTER: [DRIVER.SRC]CRDRIVE(l)

; 247 ; 248 ; 249 ; 250 ; 251 ; 252 ; 253 ; 254 : 255

AXF7 /\Xf 8 AXF9 AXFA AXFB AXFC AXFD AXFE AXFF

/\Q367 /\Q370 /\Q371 /\Q372 /\Q373 /\Q374 /\0375 /\Q376 /\Q377

CRDRIVER V03-002

- CR11 CARD READER DRIVER CR11 FUNCTION DECISION TABLE

3-JUN-1984 11 :02:03 VAX-11 Macro V03-01

Page 14

10-MAR-1982 20:31:59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIV~(1)

0238 0238
0238 0238 0238 0238 0238 0238 0238 0238 0238 0238 0238 0238 0238 0240 0240 0240 0240 0240 0240 0240 0240 0240 0248 0248 0248 0248 0248 0254 0254 0254 0254 0260 0260 0260 0260

686

.SBTTL CR11 FUNCTION DECISION TABLE

687

688 CR11 FUNCTION DECISION TABLE

689

690

691 CR FUNCTABLE:

;FUNCTION DECISION TABLE

692 693

FUNCTAB <' READLBLK,-

; LEGAL FUNCTION ;READ LOGICAL BLOCK

694

READPBLK,-

;READ PHYSICAL BLOCK

695

READVBLK,-

;READ VIRTUAL BLOCK

696

SENSEMODE,-

;SENSE READ MODE

697

SENSECHAR,-

;SENSE READER CHARACTERISTICS

698

SETMODE,-

;SET READER MODE

699

SETCHAR,-

;SET READER CHARACTERISTICS

700

>

701

FUNCTAB

';BUFFERED I/O FUNCTIONS

702

<READLBLK,-

;READ LOGICAL BLOCK

703

READPBLK,-

;READ PHYSICAL BLOCK

704

READVBLK,-

;READ VIRTUAL BLOCK

705

SENSEMODE,-

;SENSE READ MODE

706

SENSECHAR,-

;SENSE READER CHARACTERISTICS

707

SETMODE,-

;SET READER MODE

708

SETCHAR,-

;SET READER CHARACTERISTICS

709

>

710

FUNCTAB CR READ,-

;' READ FUNCTIONS

711

<READLBLK,-

;READ LOGICAL BLOCK

712

READPBLK,-

;READ PHYSICAL BLOCK

713

READVBLK,-

;READ VIRTUAL BLOCK

714

>

715

FUNCTAB +EXE$SETMODE,-

SET MODE/CHARACTERISTICS FUNCTIONS

716

<SETCHAR,-

SET READER CHARACTERISTICS

717

SETMODE,-

SET READER MODE

718

>

719

fUNCTAB TEXE$SENSEMODE,-

SENSE MODE/CHARACTERISTICS FUNCTIONS

720

<SENSECHAR,-

SENSE READER CHARACTERISTICS

721

SENSEMODE,-

SENSE READER MODE

722

>

CRDRIVER V03-002

- CR11 CARD READER DRIVER CANCEL I/O ON CHANNEL

3-JUN-1984 11:02:03 VAX-11 Macro V03-01

Page 15

10-MAR-1982 20:31:59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(1)

5C A5
04 68 A5 01 OOOOOOOO'GF

026C 026C 026C 026C 026C 026C 026C 026C 026C
Q,26C 026C 026C 026C 026C 026C 026C 026C 026C 026C 026C
026C 026C 026C 65 026C 12 026F AA 0271 17 0275

724

.SBTTL CANCEL I/0 ON CHANNEL

725 ;+

726 CR CANCELIO - CANCEL I/0 ON CHANNEL

727

728 THIS ROUTINE IS CALLED WHEN THE LAST CHANNEL ASSIGNED TO A DEVICE IS DEASSIGNED.

729 THE DEVICE IS DEALLOCATED, AND WHEN THE CANCEL I/O ON CHANNEL SYSTEM SERVICE IS

730 EXECUTED.

731

732 INPUTS:

733 734 735

= R2 NEGATIVE CHANNEL NUMBER. = R3 ADDRESS OF CURRENT I/O REQUEST PACKET.

736

R4 = CURRENT PROCESS PCB ADDRESS.

737

R5 = DEVICE UCB ADDRESS.

738

739 OUTPUTS:

740

741

THE DEVICE INDEPENDENT CANCEL I/O ROUTINE IS CALLED AND A CHECK IS MADE

742

TO SEE IF THE UCB REFERENCE COUNT IS ZERO. IF THE REFERENCE COUNT IS ZERO,

743

THEN THE MESSAGE SENT TO JOB CONTROLLER BIT IS CLEARED.

744

745

746 CR CANCE LI 0:

;CANCEL I/0 ON CHANNEL

747 -

TSTW

UCB$W REFC(R5)

;REFERENCE COUNT ZERO?

748

BNEQ

10$ -

;IF NEQ NO

749

BICW

#UCB$M JOB,UCB$W DEVSTS(R5) ;CLEAR MESSAGE SENT BIT

750 10$:

JMP

GAIOC$CANCELIO -

;CANCEL I/O ON CHANNEL

CRDRIVER V03-002

- CRll CARD READER DRIVER READ FUNCTION PROCESSING

3-JUN-1984 11:02:03 VAX-11 Macro V03-01

Page 16

10-MAR-1982 20:31:59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(1)

50 6C DO 51 04 AC 3C
5C 13 OOOOOOOO'GF 16
32 A3 51 BO
09 BB 51 50 BF 9A 03 20 A3 06 El
51 02 C4 32 A3 51 Bl
04 1E 32 A3 51 BO
51 DC co
OOOOOOOO'GF 16 37 50 E9
OOOOOOOO'GF 16 2E 50 E9 09 BA
2C A3 52 DO 30 A3 51 BO
50 DD
50 0080 C4 DO 20 AO 51 C2 50 8EDO 82 OC A2 9E 62 50 DO
OOOOOOOO'GF 17

027B 027B 027B 027B 027B 027B 027B 027B 0278 027B 0218 027B 027B 027B 027B 027B 0278 027B 027B 0278 027B 027B 027B 0278 027B 027B 027B 027B 027B 0278 027B 027E 0282 0284 028A
028E 0290 0294 0299 029C 02AO 02A2 02A6 02A9 02AF 02B2
02B8 02BB 02BD 02C1 02C5 02C7
02CC 02DO 02D3 02D7 02DA

752

.SBTTL READ FUNCTION PROCESSING

753 ;+

754 CR_READ - READ FUNCTION PROCESSING

755

756 THIS ROUTINE IS CALLED FROM THE FUNCTION DECISION TABLE DISPATCHER TO PROCESS

757 A READ LOGICAL, READ PHYSICAL, OR READ VIRTUAL FUNCTION TO A CARD READER.

758

759 INPUTS:

760

761

RO = SCRATCH.

762

Rl = SCRATCH.

763

R2 = SCRATCH.

764

R3 = ADDRESS OF I/O REQUEST PACKET.

765

R4 = CURRENT PROCESS PCB ADDRESS.

766

R5 = ASSIGNED DEVICE UCB ADDRESS.

767

R6 = ADDRESS OF CCB.

768

R7 = I/O FUNCTION CODE.

769

R8 = FUNCTION DECISION TABLE DISPATCH ADDRESS.

770

R9 = SCRATCH.

771

R10 = SCRATCH.

772

R11 =SCRATCH.

773

AP = ADDRESS OF FIRST FUNCTION DEPENDENT PARAMETER.

774

775 OUTPUTS:

776

777

THE FUNCTION PARAMETERS ARE CHECKED AND A BUFFER IS ALLOCATED FOR THE

778

CARD READER DRIVER TO READ A CARD IMAGE INTO.

779

780

781 CR READ:

;READ FUNCTION PROCESSING

782

MOVL

Pl(AP),RO

;GET ADDRESS OF USER BUFFER

783

MOVZWL P2(AP),R1

;GET LENGTH OF USER BUFFER

784

BEQL

30$

;IF EQL ZERO LENGTH TRANSFER

785

JSB

GAEXE$READCHK

;CHECK ACCESSIBILITY OF USER BUFFER

786

MOVW

Rl,IRP$W BCNT(R3)

;INSERT LENGTH OF USER BUFFER

787

PUSHR #AM<RO,R3>

;SAVE BUFFER AND I/0.PACKET ADDRESSES

788

MOVZBL #80,Rl

;SET LENGTH REQUIRED FOR ASCII READ

789

BBC

#IO$V BINARY,IRP$W FUNC(R3),10$ ;IF CLR, ASCII READ

790

MULL

#2,Rl-

-

;SET LENGTH REQUIRED FOR BINARY READ

791 10$;

CMPW

Rl ,IRP$W BCNT(R3)

;LENGTH OF READ LARGER THAN USER ~UFFER?

792

BGEQU 20$

-

;IF GEQU YES

793

MOVW

R1,IRP$W BCNT(R3)

;SET LENGTH OF USER BUFFER TO SIZE OF READ

794 20$:

ADDL

#12,Rl -

;ACCOUNT FOR BUFFER OVERHEAD

795

JSB

GAEXE$BUFFRQUOTA

;CHECK IF PROCESS HAS SUFFICIENT QUOTA

796

BLBC

R0,40$

;IF LBC QUOTA CHECK FAILURE

797

JSB

GAEXE$ALLOCBUF

;ALLOCATE BUFFER FOR CARD READ

798

BLBC

R0,40$

;IF LBC ALLOCATION FAILURE

799

POPR

#AM<RO,R3>

;RETRIEVE BUFFER AND I/O PACKET ADDRESSES

800

MOVL

R2,IRP$L SVAPTE(R3)

;INSERT ADDRESS OF READ BUFFER

801

MOVW

R1,IRP$W-BOFF(R3)

;INSERT NUMBER OF QUOTA BYTES CHARGED

802

PUSHL RO

-

;SAVE BUFFER ADDRESS

803

MOVL

PCB$L JIB(R4),RO

;GET JIB ADDRESS

804

SUBL

R1,JIB$L BYTCNT(RO)

;CHARGE PROCESS FOR BUFFER

805

POPL

RO

-

;RESTORE BUFFER ADDRESS

806

MOVAB 12(R2),(R2)+

;INSERT ADDRESS OF DATA AREA

807

MOVL

RO,(R2)

;SAVE ADDRESS OF USER BUFFER

808

JMP

GAEXE$QIODRVPKT

;QUEUE DRIVER PACKET

CRDRIVER V03-002

- CR11 CARD READER DRIVER READ FUNCTION PROCESSING

3-JUN-1984 11 :02:03 VAX-11 Macro V03-01

Page 17

10-MAR-1982 20:31 :59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(l)

50 01 OOOOOOOO'GF
OC OOOOOOOO'GF

02EO 02EO 02EO 02EO 02EO 3C 02EO 17 02E3 02E9 02E9 02E9 02E9 02E9 BA 02E9 17 02EB

809

810

811 ; ZERO LENGTH TRANSFER

812

813

814 30$:

MOVZWL #SS$ NORMAL,RO

815

JMP

GAEXE$F IN I SH IOC

816

817

818 ; QUOTA OR BUFFER ALLOCATION FAILURE

819

820

821 40$:

POPR

#AM<R2,R3>

822

JMP

GAEXE$ABORTI 0

;SET NORMAL COMPLETION STATUS ;FINISH I/O
;RETRIEVE I/O PACKET ADDRESS ;ABORT I/O OPERATION

CRDRIVER V03-002

- CRll CARD READER DRIVER

3-JUN-1984 11:02:03 VAX-11 Macro V03-01

Page 18

START I/O OPERATION ON CR11 CARD READER 10-MAR-1982 20:31:59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(l)

06 00 23 20 A3
OD 06 00 lA 20 A3
12

40 A5 38 A3

42 A5 44 A5

3A A3 3C A3
016A

78 AS 2C B3
0091 C5 01
05 20 A3 06 0091 C5 08 0091 C5 0092 C5 0090 C5 01 0093 C5 54 24 A5

02F1 02F1 02Fl 02F1
02F1 02F1 02F1 02F1 02Fl 02F1 02F1 02F1 02F1 02Fl 02F1 02F1 02F1 02F1 02F1 02F1 02F1 02Fl 02F1 ED 02F1 02F4 13 02F7 ED 02F9 02FC 12 02FF 0301
0301 0301 0301 0301 BO 0301 0306 0306 0306 0306 0306 BO 0306 DO 030B 31 0310 . 0313
0313 0313 0313 0313 DO 0313 90 0318 El 031D 90 0322 90 0327 0328 BE 032E 94 0333 DO 0337

824

.SBTTL START I/O OPERATION ON CR11 CARD READER

825 ;+ 826 CR STARTIO - START I/O OPERATION ON CR11 CARD READER

827

828 THIS ROUTINE IS ENTERED WHEN THE ASSOCIATED UNIT IS IDLE AND A PACKET IS

829 AVAILABLE FOR PROCESSING.

830

831 INPUTS:

832

833

R3 ADDRESS OF I/O REQUEST PACKET.

834

R5 ADDRESS OF DEVICE UNIT UCB.

835

836 OUTPUTS:

837

838

CARD MOTION IS STARTED BY SETTING THE APPROPRIATE FUNCTION BITS IN THE

839

CONTROL STATUS REGISTER. AS EACH COLUMN INTERRUPT OCCURS, THE DATA FROM

840

THE DATA BUFFER REGISTER(S) IS STORED IN THE BUFFER ALLOCATED BY THE

841

FDT ROUTINE. WHEN ALL 80 COLUMNS HAVE BEEN READ, A FORK PROCESS IS CREAT-

842

ED, THE COLUMN DATA IS CONVERTED ACCORDING TO THE I/O FUNCTION CODE, AND

843

REQUEST COMPLETE IS CALLED FOR POST PROCESSING.

844 ' 845

846 CR STARTIO:

;START I/O OPERATION

847 -

CMPZV #IRP$V FCODE,#IRP$S FCODE,- ;SET MODE FUNCTION?

848

IRP$W FUNC(R3),#I0$-SETMODE ;

849

8EQL

10$ -

-

;IF EQL YES

850

CMPZV #IRP$V FCODE,#IRP$S FCODE,- ;SET CHARACTERISTICS FUNCTION?

851

IRP$W FUNC(R3),#IO$-SETCHAR ;

852

BNEQ

20$ -

-

;IF NEQ NO

853

854

855 SET READER CHARACTERISTICS

856

857

858

MOVW

IRP$L_MEDIA(R3),UCB$B_DEVCLASS(R5)

;SET DEV{CE CLASS AND TYPE

859

860

861 SET READER MODE

862

863

864 10$:

MOVW

IRP$L MEDIA+2(R3),UCB$W DEVBUFSIZ(R5) ;SET DEFAULT BUFFER SIZE

865

MOVL

IRP$L-MEDIA+4(R3),UCB$L-DEVDEPEND(R5) ;SET DEVICE DEPENDENT FLAGS

866

BRW

140$ -

-

867

868

869 SET UP PARAMETERS AND READ CARD

870

871

872 20$:

MOVL

@IRP$L SVAPTE(R3),UCB$L SVAPTE(RS) ;SET ADDRESS OF BUFFER

873

MOVB #1,UCB$B CR EOFCNT(R5) -;SET END OF FILE COUNT FOR ASCII

874

BBC

#I0$V 8INARV,IRP$W FUNC(R3),30$ ;IF CLR, ASCII READ

875

MOVB

#8,UCB$B CR EOFCNT(R5) ;SET END OF FILE COUNT FOR BINARY

876 30$:

MOVB

UCB$B_CR=EOFCNT(R5),UCB$B_CR_EOFCOL(R5) ;SET REQUIRED NUMBER

877

MNEGS #1,UCB$B CR COLCNT(R5) SET INIT1AL COLUMN COUNT

878

CLRB

UCB$B CR-OFLCNT(R5) . SET INITIAL OFFLINE COUNT

879

MOVL

UCB$L=CRB(R5),R4

GET ADDRESS OF CRB

CRDRIVER V03-002

- CR11 CARD READER DRIVER

3-JUN-1984 11:02:03 VAX-11 Macro V03-01

Page 19

START I/O OPERATION ON CR11 CARD READER 10-MAR-1982 20:31:59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(1)

54 2C B4 64 0100 BF
5D
El
64 40 SF 22 64 A5 03
01 OF FFCC 0093 CS
0093 C5 18
54 05 OOOOOOOO'GF
53 OOOOOOOO'GF
lB B2
50 2C OOF3
64 40 SF
OOB2 cs
50 0054 BF DODD
02 A4 41 BF
64 64 COOO BF
4A 51 02 A4 52 04 A4
0090 cs
05
0094 cs Sl

DO 0338 033F
83 0345 13 034A
034C 0356 11 035C 03SE 035E 035E 035E 03SE 9B 035E 0362 EO 0366 9D 036B 036E 94 0373 BB 0377
9A 0379 9E 037C
0382 16 03B3 BA 03B9 11 03BB
03BD 038D 038D 038D 03·8D 3C 038D 31 0390
0393 0393 0393 0393 98 0393 0397 86 039D 3C 03A1 31 03A6 03A9 03A9 03A9 03A9 03A9 BS 03A9 9B 03AC 03AF
03BO
83 03BA 12 03BF BO 03C1 BO 03C5 96 03C9 12 03CD BO 03CF

880

MOVL

@CR8$L INTD+VEC$L ID8(R4),R4 ;GET DEVICE CSR ADDRESS

881 40$:

DS8INT ,.;tPL"'3i-

-

;DISABLE INTERRUPTS

882

BITW #CR CSR M OFFLIN,CR CSR(R4) ;READER OFFLINE?

8B3

BEQL

70$- - -

-

IF EQL NO

884

WFIKPCH 50$,#2

WAIT FOR TIMEOUT

8B5

IOFORK

CREATE FORK PROCESS

BB6

BRB

40$

8B7

888

889 READER TIME OUT OR DEVICE ERROR

890

891

892 50$:

MOVZ8W #CR CSR M IE,CR CSR(R4) ;CLEAR READER ERRORS

893

SETI PL UCB$8 FIPL(R5) -

;LOWER TO DEVICE FORK LEVEL

894

BBS

#UCB$V CANCEL,UCB$W STS(R5),60$ ;IF SET, CANCEL I/O REQUESTED

895

ACBB

#15,#l~UCB$B_CR_OFLCNT(R5),40$ ;IF SET, NOT TIME FOR MESSAGE

896

~LRB

UCB$B CR OFLCNT(R5)

CLEAR OFFLINE COUNT

897

PUSHR #AM<R3,R4>

SAVE REGISTERS

89B

MOVZBL #MSG$ DEVOFFLIN,R4

SET DEVICE MESSAGE NUMBER

899

MOVA8 GASYS$GL_OPRMBX,R3

GET ADDRESS OF OPERATOR MAILBOX

900

JSB

GAEXE$SNDEVMSG

;SEND MESSAGE TO OPERATOR

901

POPR

#AM<R3,R4>

;RESTORE REGISTERS

902

BRB

40$

903

904

905 CANCEL CURRENT READ REQUEST

906

907

908 60$:

MOVZWL #SS$ ABORT,RO

;SET ABORT STATUS

909

BRW

150$-

910 ;

911 ; DATA OVERFLOW (MORE THAN 80 COL) DETECTED

912

913

914 65$:

MOVZBW #CR_CSR_M_IE,CR_CSR(R4) ;INHIBIT READS

915

IOFORK

916

INCW UCB$W ERRCNT(R5)

;INCREMENT HARDWARE ERROR COUNT

917

MOVZWL #SS$ CTRLERR,RO

;RETURN HARDWARE ERROR STATUS

91B

BRW

150$-

919

920

921 I NI TI ATE READ

922

923

924 70$:

TSTW

CR CRB1(R4)

;CLEAR COLUMN BUFFER

92S

MOVZBW #CR CSR M IE!CR CSR M READ,- ;ENABLE INTERRUPTS AND START READ

926

CR CSR(R4)

- -- ;

927 BO$:

WFIKPCH S0$,#3

;WAITFOR INTERRUPT OR TIMEOUT

92B 929

BITW BNEQ

#CR CSR 120$ -

M -

CRDONE!CR -

CSR -

Ml fERNREOQR,CYRES C S R ( R 4 )

;CARD DONE OR ERROR?

930

MOVW

CR CRB1(R4),R1

READ BINARY COLUMN

931

MOVW

CR-CRB2(R4),R2

READ PACKED COLUMN

932

INCB

UCi$B CR COLCNT(RS)

INCREMENT COLUMN COUNT

933

BNEQ

90$ - -

IF NEQ NOT FIRST COLUMN

934

MOVW

R1,UCB$W_CR_FSTCOL(RS) SAVE FIRST COLUMN BINARY DATA

CRDRIVER V03-002

- CR11 CARD READER DRIVER

3-JUN-19S4 11:02:03 VAX-11 Macro V03-01

Page 20

START I/O OPERATION ON CRll CARD READER 10-MAR-19B2 20:31:59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(1)

0092 C5 0090 C5
OB 51 OFOF BF
04 0091 C5
50 BF 0090 C5
A3 7B B5 52 07 20 A3 06 7S B5 51
7S A5 7S A5
A5

0096 C5 64 64 40 SF
50 OS70 SF 0091 C5 61
50 OS3S SF 51 0096 C5
53 51 OB
65 51 oc

04 51 OD 5D 51 OF

50 01
50 51 61 61

OOCO SF 20 A3 36
OAAA SF 0094 C5
3E OSA2 SF 0094 C5
3D FBDB CF 04 00
44 A5
05 FCCE CF
55 2C B3
32 A3 60 00
32 A3

91 03D4 03DS
15 03DB Bl 03DD 12 03E2 97 03E4
91 03ES 03EB
lB 03EE 90 03FO E1 03F4 BO 03F9 D6 03FD D6 0400
0403
11 0409 040B 040B 040B 040B 040B
BO 040B 9B 0410
0414 3C 041A 95 041F 13 0423 3C 0425
3C 042A EO 042F EO 0433
0437 0437 0437 0437 EO 0437 EO 043B 043F B3 043F 0443 12 0445 Bl 0447 044B 13 044E
B1 0450 0454
13 0457 9E 0459 ED 045E
0461 13 0464 9E 0466 DD 046B DO 046D 2E 0471
0475
0477

935 90$:

CMPB

UCB$B_CR_EOFCOL(R5),UCB$B_CR_COLCNT(R5) ;PAST END OF FILE DATA?

936 937 93S 939 940 100$:

BLEQ CMPW BNEQ DECB CMPB

100$

;IF LEQ YES

#CR EOF,R1

;END OF FILE PUNCH?

100$

;IF NEQ NO

UCB$B CR EOFCNT(R5)

;DECREMENT END OF FILE COUNT

#SO,UCB$B_CR_COLCNT(R5) ;DATA OVERFLOW (MORE THAN 80 COL) ?

941

BLEQU 65$

;IF LEQU, YES

942

MOVB

R2,@UCB$L SVAPTE(R5)

;STORE PACKED COLUMN

943

BBC

#I0$V BINARY,IRP$W FUNC(R3),110$ ;IF CLR, ASCII READ

944

MOVW

R1,@UCB$L SVAPTE(R5)

STORE BINARY COLUMN

945

INCL

UCB$L SVAPTE(R5)

UPDATE BUFFER ADDRESS

946 110$: INCL

UCB$L-SVAPTE(R5)

UPDATE BUFFER ADDRESS

947

DSBINT

-

DISABLE INTERRUPTS

94S

BRB

SO$

949

950

951 SPECIAL CONDITION

952

953

954 120$: MOVW

CR CSR(R4),UCB$W CR CSR(R5) ;SAVE READER STATUS

955

MOVZBW #CR CSR M IE,CR CSR(R4) ;CLEAR READER ERRORS

956

IOFORK

- --

-

;CREATE FORK PROCESS

957

MOVZWL #SS$ ENDOFFILE,RO

;ASSUME END OF FILE ENCOUNTERED

95S

TSTB

UCB$B CR EOFCNT(R5)

;END OF FILE?

959

BEQL

150$ - -

;IF EQL YES

960

MOVZWL #SS$ DATAOVERUN,RO

;ASSUME TIMING ERROR

961

MOVZWL UCB$W CR CSR(R5),Rl

;GET READER STATUS

962

BBS

#CR CSR V TIMERR,Rl,150$ ;IF SET, TIMING ERROR - EXIT

963

BBS

#CR=CSR=V=MCHECK,R1 ,1SO$ ;IF SET, MOTION CHECK - RETRY

964 965

;' ***

NOTE:

SINCE HOPPER

CHECK

SETS

ERROR,

A READ

CHECK

IS

NOT

DETECTABLE

966 ;*** IF HOPPER CHECK IS ALSO SET, IE. NO READ CHECK RETRIES ON LAST CARD

967

96S

BBS

#CR CSR V HCHECK,Rl,125$ ;IF SET, HOPPER CHECK - OK

969

BBS

#CR=CSR=V=ERROR,Rl,180$ ;IF SET, READ CHECK - RETRY

970 125$:

971

BITW

#IO$M- BINARY!I0$M- PACKED,IRP$W- FUNC(R3),, ;BINARY OR PACKED READ?

972

BNEQ

140$

;IF NEQ YES

973

CMPW

#CR_029,UCB$W_CR FSTCOL(R5) ;CHANGE MODE TO 029 TRANSLATION?

974

BEQL

160$

;IF EQL YES

975

CMPW

#CR 026,UCB$W_CR_FSTCOL(R5) ;CHANGE MODE TO 026 TRANSLATION?

976 977 97S 979 9SO 981 9B2 130$: 9B3 9S4

BEQL MOVAB CMPZV
BEQL MOVAB PUSHL MOVL MOVTC

170$

;IF EQL YES

CR CVT029,RO

;GET ADDRESS OF 029 TRANSLATION TABLE

#CR$V TMODE,#CR$S TMODE,- ;029 TRANSLATION MODE?

UCB$L-DEVDEPEND(R5),#CR$K T029 ;

130$ -

;IF EQL YES

CR CVT026,RO

;GET ADDRESS OF 026 TRANSLATION TABLE

RS-

;SAVE ADDRESS OF UCB

@IRP$L SVAPTE(R3),R1

;GET ADDRESS OF I/O BUFFER

IRP$W_BCNT(R3),(R1),#0,(RO),IRP$W_BCNT(R3),(R1) ;TRANSLATE

CRDRIVER V03-002

- CR11 CARD READER DRIVER

3-JUN~l984 11: 02: 03 VAX-11 Macro V03-0l

Page 21

START I/O OPERATION ON CR11 CARD READER 10-MAR-1982 20:31 :59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(1)

55 8EDO 50 01 3C 10 7E A5 FO 50 10
51 04
00 01 FO 44 AS 04
06 11
00 00 FO 44 A5 04
FE74 31

047A 047D 0480 0484 0486 0488 048E 048E 048E
048E 048E 048E 0491 0494 0496 0496 0496 0496 0496 0496 0499 049C

985 986 140$: 987

POPL

R5

;RETRIEVE ADDRESS OF UCB

MOVZWL #SS$ NORMAL,RO

;SET NORMAL COMPLETION

INSV

UCB$W_BCNT(R5),#16,#16,RO ;INSERT TRANSFER BYTE COUNT

988 150$: CLRL

Rl

;CLEAR SECOND I/O LONGWORD

989

REQCOM

;COMPLETE REQUEST

990

991

992 ; SET 029 TRANSLATION MODE

993

994

995 160$: INSV

#CR$K T029,#CR$V TMODE,- ;SET 029 TRANSLATION MODE

996

#CR$S=TMODE,UCB$L DEVDEPEND(R5)

997

BRB

180$

998

999

1000 ; SET 026 TRANSLATION MODE

1001

1002

1003 170$: INSV

#CR$K T026,#CR$V TMODE,- ;SET 026 TRANSLATION MODE

1004

#CR$S=TMODE,UCB$L_DEVDEPEND(R5)

1005 180$: BRW

20$

CRDRIVER V03-002

- CR11 CARD READER DRIVER CR11 CARD READER INTDERRUPTS

3-JUN-1984 11:02:03 VAX-11 Macro V03-01

Page 22

10-MAR-1982 20:31:59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(l)

53 9E 54 63 11 64 A5 01 53 10 A5
OC B5 50 BE 52 BE 54 BE
50 64 64 40 BF 50 0400 SF
oc
5C A5 07
02 68 A5 00 QA
50 BE 52 BE 54 BE
OOOOOOOO'GF 54 02
OOOOOOOO'GF 53
OOOOOOOO'GF 04 50
68 A5 01

049F 1007

.SBTTL CR11 CARD READER INTDERRUPTS

049F 1008 ;+

049F 1009 CR$INT - CR11 CARD READER INTERRUPTS

049F 1010

049F 1011 THIS ROUTINE IS ENTERED VIA A JSB INSTRUCTION WHEN AN INTERRUPT OCCURS ON A

049F 1012 CR11 CARD READER CONTROLLER. THE STATE OF THE STACK ON ENTRY IS:

049F 049F 049F 049F

1013 1014 1015 1016

OO(SP) = ADDRESS OF IDB ADDRESS. = 04(SP) - 24(SP) = SAVED RO - R5.
28(SP) INTERRUPT PC.

049F 1017

32(SP) = INTERRUPT PSL.

049F 1018

049F 1019 INTERRUPT DISPATCHING OCCURS AS FOLLOWS:

049F 1020

049F 1021

IF THE INTERRUPT IS EXPECTED, THE DRIVER IS CALLED AT ITS

049F 1022

INTERRUPT RETURN ADDRESS (UCB$L FPC). IF THE INTERRUPT IS

049F 1 02;3

NOT EXPECTED AND THE DEVICE IS NOT ALLOCATED, A MESSAGE IS

049F 1024

SENT TO THE JOB CONTROLLER TO INFORM IT THAT AN INPUT

049F 1025

SYMBIONT PROCESS SHOULD BE CREATED TO READ THE CARDS.

049F 1026 '

049F 1027

049F 1028 CR$INT::

CARD READER INTERRUPT

DO 049F 1029

MOVL

@(SP)+,R3

GET ADDRESS OF IDB

7D 04A2 1030

MOVQ

IDB$L CSR(R3),R4

GET CONTROLLER CSR AND OWNER UCB ADDRESS

E5 04A5 1031

BBCC

#UCB$V INT,UCB$W STS(R5) 10$ ;IF CLR, INTERRUPT NOT EXPECTED

DO 04AA 1032

MOVL

UCB$L FR3(R5),R3-

RESTORE REMAINING DRIVER CONTEXT

16 04AE 1033

JSB

@UCB$L FPC(R5)

CALL DRIVER

7D 04B1 1034

MOVQ

(SP)+,RO

RESTORE REGISTERS

7D 04B4 1035

MOVQ

(SP)+,R2

70 0487 1036

MOVQ

(SP)+,R4

02 04BA 1037

REI

04BB 1038

04BB 1039

04BB 1040 UNSOLICITED INTERRUPT

04BB 1041

04BB 1042

3C 04BB 1043 10$:

MOVZWL CR CSR(R4),RO

;GET READER STATUS

9B 04BE 1044

MOVZBW #CR CSR M IE,CR CSR(R4) ;CLEAR STATUS, ENABLE INTERRUPTS

B3 04C2 1045

BITW #CR-CSR-M-ONLINE,RO

;READER TRANSITION TO ONLINE?

13 04C7 1046

BEQL

20$- - -

;IF EQL NO

B5 04C9 1047

TSTW

UCB$W REFC(R5)

;DEVICE ASSIGNED OR ALLOCATED?

12 04CC 1048

BNEQ

20$ -

;IF NEQ YES

E2 04CE 1049

BBSS

#UCB$V JOB,UCB$W DEVSTS(R5),20$ ;IF SET, MESSAGE ALREADY SENT

10 04D3 1050

BSBB

30$ -

-

;SEND MESSAGE TO JOB CONTROLLER

7D 0405 1051 20$:

MOVQ

(SP)+,RO

;RESTORE REGISTERS

7D 04D8 1052

MOVQ

(SP)+,R2

7D 04DB 1053

MOVQ

(SP)+,R4

02 04DE 1054

REI

16 04DF 1055 30$:

JSB

GAEXE$FORK

;' CREATE FORK PROCESS

9A 04E5 1056

MOVZBL #MSG$ CRUNSOLIC,R4

;SET MESSAGE TYPE

9E 04E8 1057

MOVAB GASYS$GL JOBCTLMB,R3

;SET ADDRESS OF JOB CONTROLLER MAILBOX

04EE

16 04EF 1058

JSB

GAEXE$SNDEVMSG

;SENT MESSAGE TO JOB CONTROLLER

EB 04F5 1059

BLBS

R0,40$

;IF LBS SUCCESSFUL NOTIFICATION

AA 04F8 1060

BICW #UCB$M JOB,UCB$W_DEVSTS(R5) ;CLEAR MESSAGE SENT BIT

05 04FC 1061 40$:

RSB

CRDRIVER V03-002

- CR\1 CARD READER DRIVER CARD READER INITIALIZATION

3-JUN-1984 11:02:03 VAX-11 Macro V03-01

Page 23

10-MAR-1982 20:31:59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(1)

04FD 1063

.SBTTL CARD READER INITIALIZATION

04FD 1064 ;+

04FD 1065 CR INITIAL - CR11 CARD READER INITIALIZATION

04FD 1066

04FD 106'7 THIS ROUTINE IS CALLED AT SYSTEM STARTUP AND AFTER A POWER FAILURE. THE CSR

04FD 1068 ADDRESS OF THE RESPECTIVE CR11 CONTROLLER IS READ TO INSURE ITS PRESENCE ON

04FD 1069 THE UBA AND THEN CARD READER INTERRUPTS ARE ENABLED.

04FD 1070

04FD 1071 INPUTS:

04FD 1072 04FD 1073

R4 = CR11 CONTROLLER CSR ADDRESS.

04FD 1074

R5 = IDB ADDRESS OF DEVICE UNIT.

04FD 1075

04FD 1076 OUTPUTS:

04FD 1077

04FD 1078

ALL REGISTERS ARE PRESERVED.

04FD 1079

04FD 1080

04FD 1081 CR INITIAL:

;CRll INITIALIZATION

64 40 BF 96 04FD 1082 05 0501 1083

MOVZBW #CR CSR M IE,CR CSR(R4) :ENABLE CRll INTERRUPTS-

RSB

- --

·~

CRDRIVER V03-002

- CR11 CARD READER DRIVER CARD READER UNIT INITIALIZATION

3-JUN-1984 11:02:03 VAX-11 Macro V03-01

Page 24

10-MAR-1982 20:31 :59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(1)

64 A5 10 50 24 A5 50 2C AO 04 AO· 55

0502 1085

.SBTTL CARD READER UNIT INITIALIZATION

0502 1086 ;+

0502 1087 CR CRll INIT - CARD READER UNIT INITIALIZATION

0502 1088

0502 1089 THIS ROUTINE IS CALLED AT SYSTEM STARTUP AND AFTER A POWER FAILURE. THE

0502 1090 ONLINE BIT IS SET IN THE DEVICE UCB.

0502 1091

0502 1092 INPUTS:

0502 1093 0502 1094

R5 = ADDRESS OF DEVICE UCB.

0502 1095

0502 1096 OUTPUTS:

0502 1097

0502 1098

THE ONLINE BIT IS SET IN THE DEVICE UCB AND THE ADDRESS OF THE UCB

0502 1099

IS FILLED INTO THE OWNER FIELD OF THE IDB.

0502 1100

0502 1101

0502 1102 CR CRl 1 INIT:

;CARD READER UNIT INITIALIZATION

AB 0502 1103

BISW

#UCB$M ONLINE,UCB$W STS(R5) ;SET UNIT ONLINE

DO g5Q6 1104

MOVL

UCB$L CRB(R5),RO -

;GET ADDRESS OF CRB

DO 050A 1105

MOVL

CRB$L-INTD+VEC$L IDB(RO),RO ;GET ADDRESS OF IDB

DO 050E 1106

MOVL

R5,IDB$L_OWNER(RO)

;SET ADDRESS OF DEVICE UCB

05 0512 1107

RSB

0513 1108 CR END:

ADDRESS OF LAST LOCATION IN DRIVER

0513 1109

0513 1110

.END

CRDRIVER Symbol table
$$$ $$OP AT$ UBA CR$DDT CR$INT CR$K T026 CR$K-T029 CR$S-TMODE .CR$V-TMODE
CRB$L INTO CR 026 CR-029 CR-CANCEL! 0 CR-CR11 INIT CR-CRB1CR-CRB2 CR-CSR
CR-CSR M CRDONE CR-CSR-M-ERROR CR-CSR-M-IE
CR-CSR-M-OFFLI N CR-CSR-M-ONLINE CR-C·SR-M-READ CR-CSR-V-ERROR CR-CSR-V-tiCHECK CR-CSR-V-MCHECK CR-CSR-V-TIMERR CR-CVT02G CR-CVT029 CR-END CR:-EOF CR-FUNCTABLE CR-INITIAL CR-READ CR-START IO
DC$ CARD DDB$L DDT DEV$M-AVL DEV$M-IDV DEV$M-NNM DEV$M-REC DPT$C-LENGTH DPT$C-VERSION DPT$INITAB DPT$REINITAB DPT$TAB OT$ CR11 DVN$C CRB DVN$C-DDB
DYN$C=QPT DVN$C UCB
EXE$ABORl'I 0 EXE$ALLOCBUF · EXE$BUFFRQUOTA EXE$FINISHIOC EXE$FORI! EXE$IOFORK

- CR 11 CARD READER DRIVER

3-JUN-1984 11: 02: 03 VAX-11 Macro V03-0l

Page 25

10-MAR-1982 20:31 :59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(l)

= =

00000020 00000002

R

02

= 00000001

0.0000000 RG

03

0000049F RG

= =

00000000 00000001

= 00000004

= 00000000

= 00000024

= 000008A2

= OOOOOAAA

03

0000026C R

03

00000502 R

03

00000002

00000004

= 00000000 00004000

= 00008000

== 00000040 00000100

= 00000400

= 00000001

= = = =

OOOOOOOF
00000000
oooooooc
00000008

00000138 R

03

00000038 R

03

= 00000513 R OOOOOFOF

03

00000238 R

03

000004FD R

03

00000276 R

03

000002F1

= =

00000041
oooooooc

R

03

******** x 02

******** x 02

******** x 02

=

********
00000038

x

02

= 00000004

00000038 R

02

00000062 R

02

00000000 R
= 00000001 = 00000005

02

= =

00000006 OOOOOOlE

= 00000010

******** x 03

******** x 03

******** x 03

******** ******** ********

x x x

03 03 03

EXE$QIODRVPKT EXE$READCHK EXE$SENSEMODE EXE$SETMODE EXE$SNDEVMSG FUNCTA8 LEN
IDB$L CSR IDB$L-OWNER
IO$M BINARY IO$M-PACKED I0$V-BINARV
IO$ READLBLK IO$-READPBLK I0$-READVBLK !0$-SENSECHAR IO$-SENSEMODE IO$-SETCHAR IO$-SETMODE !0$-VIRTUAL
IOC$CANCELI 0
IOC$MNTVER IOC$REQCOM
IOC$RETURN IOC$WFIKPCH IRP$L MEDIA IRP$L-SVAPTE IRP$S-FCODE IRP$V-FCODE IRP$W-BCNT IRP$W-BOFF IRP$W-FUNC
JIB$L=BVTCNT MASKH MAS KL MSG$ CR UN SO LI C
MSG$=DEVOFFLIN Pl P2 P3 P4 P5
P6 PCB$L JIB PR$_ IPL
SIZ ... SS$ ABORT
sss:=cTRLERR SS$ DATAOVERUN SS$-ENDOFFILE SS$-NORMAL
svs$GL JOBCTLMB SYS$GL-OPRMBX
UCB$B CR COLCNT UCB$B-CR-EOFCNT UCB$8-CR-EOFCOL UCB$B_CR_OFLCNT
UCB$B=DEVCLASS

******** x 03

******** x 03
******** x 03

******** x 03

=

********
00000034

x

03

= = =

00000000 00000004 00000040

= 00000080

= 00000006

= 00000021

= oooooooc

= 00000031

= 00000018

= 00000027

= =

OOOOOOlA 00000023

= 0000003F

******** x 03

****************

x x

03 03

******** x 03

=

********
00000038

x

03

== 0000002C 00000006

= 00000000

= 00000032

= 00000030

= =

00000020 00000020

= = =

00000080 08000000
00000002

= = = = =

00000005 00000000 00000004 00000008
oooooooc

= = = = = = =

00000010 00000014 00000080 00000012 00000001 0000002C 00000054

= = =

00000838 00000870 00000001

******** x 03 ******** x 03

00000090

00000091

00000092

=

00000093 00000040

CRDRIVER Symbol table

- CR11 CARD READER DRIVER

3-JUN-1984 11 :02:03 VAX-11 Macro V03-01

Page 26

10-MAR-1982 20:31:59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(1)

UCB$B DEVTVPE UCB$B-DIPL UCB$B-FIPL UCB$K-CR LENGTH UCB$K-LENGTH UCB$L-CRB
UCB$L-DEVCHAR UCB$L-DEVCHAR2 UCB$L-DEVDEPEND UCB$L-FPC UCB$L-FR3 UCB$L-SVAPTE UCB$M-JOB UCB$M-ONLINE UCB$V-CANCEL UCB$V-INT UCB$V-JOB
UCB$W-BCNT UCB$W-CR CSR UCB$W-CR-FSTCOL UCB$W-DEVBUFSIZ UCB$W-DEVSTS UCB$W-ERRCNT UCB$W-REFC UCB$W-STS VEC$L-IDB VEC$L -INITIAL
VEC$L=UN IT IN IT

00000041 0000005E
oooooooe
00000098
00000090 00000024 00000038 0000003C 00000044
oooooooc
00000010 00000078 00000001 00000010 00000003 00000001 00000000
0000007E 00000096 00000094 00000042 00000068 00000082 0000005C 00000064 00000008
oooooooc
00000018

+----------------+ +! -P-s-e-c--t --s-y-n-o-p-s-i-s-+!

PSECT name
ABS $ABS$ $$$105 PROLOGUE $$$115=DRIVER

Allocation
----------

-PS-E-C-T---N-o-.

Attributes
----------

00000000 (

0. ) 00 ( 0.) NOP IC USR CON ABS LCL NOSHR NOEXE NORD NOWRT NOVEC BYTE

00000098 ( 152.) 01 ( 1 . ) NOP IC USR CON ABS LCL NOSHR EXE RD

WRT NOVEC BYTE

00000077 ( 119.) 02 ( 2.) NOPIC USR CON REL LCL NOSHR EXE RD

WRT NOVEC BYTE

00000513 ( 1299.) 03 ( 3.) NOPIC USR CON REL LCL NOSHR EXE RD

WRT NOVEC LONG

+------------------------+
! Performance indicators !
+----~-------------------+

Phase

Page faults

CPU Time

Elapsed Time

Initialization Command processing Pass 1 Symbol table sort Pass 2 Symbol table output Psect synopsis output Cross-reference output Assembler run totals

35

00:00:00.08

00:00:02.17

97

00:00:00.51

00:00:06.20

524

00:00:23.55

00:01:16.65

0

00:00:03.25

00:00: 10.16

199

00:00:04.98

00:00:17.35

16

00:00:00.14

00:00:00.71

3

00:00:00.02

0.0:00 00.02

0

00:00:00.00

00:00 00.00

877

00:00:32.54

00:01 53.26

The working set limit was 1800 pages.

CRDRIVER VAX-11 Macro Run Statistics

- CR11 CARD READER DRIVER

3-JUN-1984 11 :02:03 VAX-11 Macro V03-0l

Page 27

10-MAR-1982 20:31 :59 DISK$VMSMASTER:[DRIVER.SRC]CRDRIVE(1)

123849 bytes (242 pages) of virtual memory were used to buffer the intermediate code. There were 110 pages of symbol table space allocated to hold 2103 non-local and 29 local symbols. 1119 source lines were read in Pass 1, producing 18 object records in Pass 2. 36 pages of virtual memory were used to define 33 macros.

+--------------------------+
! Macro library statistics ! +--------------------------+

Macro library name

Macros defined

$255$DUA28:[SYS.OBJ]LIB.MLB;1

20

-$255$DUA28:[SYSLIB]STARLET.MLB;2

11

TOTALS (all libraries)

31

2350 GETS were required to define 31 macros.

There were no errors, warnings or information messages.

MACRO/LIS=LIS$:CRDRIVER/OBJ=OBJ$:CRDRIVER MSRC$:CRDRIVER/UPDATE=(ENH$:CRDRIVER)+EXECML$/LIB

SYSQIOREQ

SYSQIOREQ Table of contents

( 1)

76

( 1)

131. 32

( 1)

165

( 1)

583

( 1)

701

( 1)

752

( 1)

775

( 1)

810

( 1)

845. 10

( 1)

847

( 1)

870

- QUEUE I/O REQUEST SYSTEM SERVICE

3-JUN-1984 15:39:30 VAX-11 Macro V03-01

DECLARATIONS QIO ERROR AND EXCEPTION HANDLING ROUTINES QUEUE I/O REQUEST BUILD I/O.PACKET FOR PAGE READ/WRITE COMPLETE I/O OPERATION QUEUE I/O PACKET TO DRIVER EXE$ALTQUEPKT - Call driver ALTSTART entry point QUEUE I/O PACKET TO ACP EXE$QXQPPKT - QUEUE I/O PACKET TO XQP INSERT I/O PACKET IN UNIT QUEUE INSERT I/O PACKET IN QUEUE BY PRIORITY

Page 0

SYSQIOREQ V03-012 ;LMP0221
-1
;LMP0221 ;LMP0221 ;LMP0221 ;SRB0118 ; SRBO 118 ;SRB0118 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;SSA0017 ;SSA0017 ;SSA0017 ;SSA0017 SSA0017 LMP0206 LMP0206 LMP0206

- QUEUE I/O REQUEST SYSTEM SERVICE

3-JUN-1984 15:39:30 VAX-11 Macro V03-01

Page 1

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC)SYSQIOREQ.(1)

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

1

.TITLE SYSQIOREQ - QUEUE I/O REQUEST SYSTEM SERVICE

.1

.!DENT 'V03-012'

3

4 5

;' ****************************************************************************

6 ;*
7 ;* 8 ;* 9 ;* 10

COPYRIGHT (c) 1978, 1980, 1982 BY DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS. ALL RIGHTS RESERVED.

* * *
*

; * * 11 ;*
12 ;* 13 ;* 14 ;*
15 ;* 16 ;*
17 ; *
18 ;*

THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.
THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE

* * *
* * *
*

* 19 * 20

;;**

21 ; *

22 ;*

AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS

* *

* 23 ;* SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
24 ; * 25 ; *

* *

* 26 ;****************************************************************************

27

28 ;++

29

30 AUTHOR:

31

32

D. N. CUTLER, 14-JUN-76

33

34 FACILITY:

35

36

SYSTEM SERVICE QUEUE 1/0 REQUEST

37

38 MODIFIED BY:

39

.1

V03-012 LMP0221

L. Mark Pilant,

30-Mar-1984 17:08

. 2

Remove references to UCB$L_OWNUIC and UCNB$W_VPROT.

.3

.4

V03-0l1 SRB0118

Steve Beckhardt

23-Mar-1984

. 5

Changed waiting ~or DIOCNT or BIOCNT tci' wait at IPL 0.

.6

. 7

V03-010 CDS0005

Christian D. Saether

20-Mar-1984

.8

Use symbolic definition to locate XQP queue header.

.9

Give the XQP ast a priority boost.

. 10

.11

V03-009 SSA0017

Stan Amway

9-Mar-1984

. 12

Maintain device queue length in UCB.

. 13

Efficiently supports MONITORS disk class and provides

.14

accurate queue lengths for HSC and UDA disks.

.. 15

. 16

V03-008 LMP0206

L. Mark Pilant,

7-Mar-1984 12:20

. 17

Only do an access check on the first QIO to the channel for

. 18

logical and physical requests.

SYSQIOREQ V03-012
;LMP0206 ;LMP0185 ;LMP0185 ;LMP0185 ;CDS0004 ;CDS0004 ;CDS0004 ;CDS0004 ;CDS0004 ;RLRMXBCNTC ;RLRMXBCNTC ;RLRMXBCNTC ;RLRMXBCNTC ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003
;CD~0002
;CDS0002 ;CDS0002 ;CDS0002 ;CDS0002 ;CDS0002 ;CDS0002 ;CDSOOOl ;CDSOOOl ;CDSOOOl ;LJK0172 ;LJK0172 ;LJK0172 -33

- QUEUE 1/0 REQUEST SYSTEM SERVICE

3-JUN-1984 15:39:30 VAX-11 Macro V03-0l

Page 2

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(1)

0000 0000 000{) 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

.19 .20 ; . 21 ; .22 ; .23 ; .24 ; .25 ; . 26 ; .27 ; .28 ; .29 ;
. . 30 ;
. 31 .32 ;
.33 ; . 34 ; .35 ; .36 ; .37 ; .38 ;
.39 ; .40 ; . 41 ; .42 ; .43 ;
.44 ;
.45 ; .46 ; .47 ; . 48 ; 73 74

V03-007 LMP0185

L. Mark Pilant,

Add support for ACLs on devices.

27-Jan-1984 11 :05

V03-006 CDS0004

Christian D. Saether

20-May-1983

Get the PIO from the PCB instead of the IRP so that

journalling works ( i t uses the irp pid field for

something else) .

V03-005 RLRMXBCNTc

Robert L. Rappaport

28-Mar-1983

Verify IRP$L DIAGBUF is non-zero before assuming that i t

contains the-original value of IRP$L_SVAPTE in VIRTUAL_LOGIO .

V03-004 CDS0003

Christian D. Saether

14-Mar-1983

Return from EXE$QXQPPKT with status, rather than

assuming success .

V03-003 CDS0002

Christian D. Saether

12-Mar-1983

Do not insque packet to xqp work queue in EXE$QXQPPKT,

but rather pass it as the ast parameter and queue it

in the xqp, if necessary. This avoids a problem

where the packet is processed by the xqp before the

ast is dequeued .

V03-002 CDS0001

c Saether

13-Aug-1982

Changes to send file system packets to XQP.

V03-001 LJK0172

Lawrence J. Kenah

18-June-1982

Count 1/0 operations in EXE$BLDPKTxxxx to allow file

expiration to work correctly for mapped files .

SYSQIOREQ V03-012
;CDS0001 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 -4

- QUEUE I/O REQUEST SYSTEM SERVICE DECLARATIONS

3-JUN-1984 15:39:30 VAX-11 Macro V03-01

Page 3

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SVS.SRC]SYSQIOREQ.(1)

00000004 00000008
oooooooc
00000010 00000014 00000018 0000001C 00000020 00000024 00000028 0000002C 00000030
00000000 00000008

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000
0000 0000 0000
0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000
0000 0000 0000 0000
0000 0000
0000 0000
0000 0000

76

.SBTTL DECLARATIONS

77

78

79 MACRO LIBRARY CALLS

80

81

82

$ACBDEF

;DEFINE ACB OFFSETS

83

$AQBDEF

;DEFINE AQB OFFSETS

84

$CA DEF

;DEFINE CONDITIONAL ASSEMBLY PARAMETERS

85

$CCBDEF

;DEFINE CCB OFFSETS

. 1

$CDRPDEF

;DEFINE CORP OFFSETS

. 2

$DDBDEF

;DEFINE DOB OFFSETS

· 3

$DDTDEF

;DEFINE DDT OFFSETS

.4

$DEVDEF

;DEFINE DEV VALUES

.5

$DYNDEF

;DEFINE DATA STRUCTURE TYPE CODES

.6

$F11BDEF

;DEFINE F11BXQP OFFSETS

90

$IODEF

;DEFINE IO FUNCTION CODES

91

$IPLDEF

92

$IRPDEF

;DEFINE INTERRUPT PRIORITY LEVELS ;DEFINE IRP OFFSETS

93

$PCBDEF

94

$PHDDEF

;DEFINE PCB OFFSETS ;DEFINE PHO OFFSETS

95

$PRDEF

;DEFINE PROCESSOR REGISTERS

96

$PRIDEF

;DEFINE PRIORITY CLASS INCREMENTS

97

$PRVDEF

;DEFINE PRIVILEGE BITS

98

$PSLDEF

;DEFINE PROCESSOR STATUS FIELDS

99

$RSNDEF

100

$SECDEF

;DEFINE RESOURCE WAIT NUMBERS ;DEFINE SEC OFFSETS

101

$SSDEF

102

$UCBDEF

;DEFINE STATUS VALUES ;DEFINE UCB OFFSETS

103

$VCBDEF

;DEFINE VCB OFFSETS

104

$WCBDEF

;DEFINE WINDOW CONTROL BLOCK OFFSETS

105

106

107 LOCAL SYMBOLS

108

109 ARGUMENT LIST OFFSET DEFINITIONS

110

111

112 EFN=4 113 CHA.N=S
114 FUNC=12 115 IOSB=16 116 ASTADR=20 117 ASTPRM=24 118 P1=28 119 P2=32 120 P3=36 121 P4=40 122 P5=44 123 P6=48
. 124
125

;EVENT FLAG NUMBER ;l/O CHANNEL NUMBER ;I/O FUNCTION CODE ;ADDRESS OF I/O STATUS BLOCK ;ADDRESS OF AST SERVICE ROUTINE ;AST SERVICE ROUTINE PARAMETER ;FIRST FUNCTION DEPENDENT PARAMETER ;SECOND FUNCTION DEPENDENT PARAMETER ;THIRD FUNCTION DEPENDENT PARAMETER
;FOURTH FUNCTION DEPENDENT PARAMETER ;FIFTH FWNCTION DEPENDENT PARAMETER ;SIXTH FUNCTION DEPENDENT PARAMETER

126 ; FUNCTION DECISION TABLE OFFSET DEFINITIONS

127

128

129 LEGAL=O 130 IOTYPE=8

;LEGAL FUNCTION MASK ;I/O FUNCTION TYPE MASK

SYSQIOREQ V03-012
;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ·; LMPOl 85 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP'0185 ;LMP0185 ;LMP0185
LMP0185 LMP0185 LMP0185 LMP0185 LMP0185 LMP0185

- QUEUE I/O REQUEST SYSTEM SERVICE DECLARATIONS

3-JuN~1984 15:39:30 VAX-11 Macro V03-01

Page 4

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(1)

00000010

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0008 0008 0008 0008 0008

131 FDTACT=16

;ACTION ROUTINE MASKS

.1

. 2

· 3 TABLES FOR DETERMINING THE ACCESS DESIRED, BASED UPON THE I/O FUNCTION

.4 CODE. THIS IS NECESSARY FOR THE FIRST TIME THROUGH PROTECTION CHECK DONE

. 5 ON SHARABLE, NON-MOUNTABLE (NON-FILES ORIENTED) DEVICES .

.6

· 7

.8

.MACRO ACCMSK CODES

.9 MAS KL = 0

.10 MASKH = 0

.11

. 12

.IRP

X,<CODES>

.13

.IF

GT

<IO$ 'X&IO$ VIRTUAL>-31

.14 MASKH
.15 .16 MAS KL . 17

= MASKH!<l@<<IO$ 'X&IO$ VIRTUAL>-32>>

.IFF

-

-

= MASKL!<l@<IO$ 'X&IO$ VIRTUAL>>

.ENDC; GT

-<IO$ 'X&IO$ VIRTUAL>~31

. 18

.ENDR ; X,<CODES> -

-

.19

.LONG MASKL,MASKH

.20

.ENDM ACCMSK

. 21

.22 READ ACCESS:

.23

- ACCMSK <READPBLK,READLBLK,READVBLK,-

.24

READHEAD,READTRACKD,REREADN,REREADP,-

.25

READPROMPT,TTYREADALL,TTVREADPALL>

.26

.27 WRITE ACCESS:

.28

- ACCMSK <WRITEPBLK,WRITELBLK,WRITEVBLK,-

.29

WRITECHECK,WRITECHECKH,-

.30

WRITEHEAD,WRITETRACKD,WRITERET>

SYSQIOREQ V03-012 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 ;LMP0185 -2
LMP0185 LMP0185 LMP0185 LMP0185 LMPO 1"85

- QUEUE I/O REQUEST SYSTEM SERVICE

3-JUN-1984 15:39:30 VAX-11 Macro V03-0l

Page 5

QIO ERROR AND EXCEPTION HANDLING ROUTINE 12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(1)

0010

0010

0010

0010

0010

1E 08 A6 02 E2 0010

19 38 A5 10 El 0015

50 OOOO'CF 9E 001A

OA DD AF _ 57 EO 001F

50 OOOO'CF 9E 0024

05 DB AF 57 El 0029

60 16 002E

12 50 E9 0030

0092 31 0033

0036

0036

0036

0036

0036

0036

FFC7' 30 0036

40 11 0039

50 013C BF 3C 003B

03 11 0040

50 24 3C 0042

OODF 31 0045

0048

0048

0048

0048

0048

0048

0048

4C A4 01 3C 004B

52 OOOO'CF 7E 004F

4C A4 E2 0054

00 OOOO'CF

0057

FFA2' 31 005B

005E

005E

005E

57 2F Dl 005E

60 18 0061

55 60 A5 DO 0063

SA 11 0067

0069

0069

0069

0069

A5 11 0069

.32

.SBTTL QIO ERROR AND EXCEPTION HANDLING ROUTINES

.33

. 34 Device is not mountable.

.35
.36

N' OT

FILE

DEV:

See if it is necessary to do the protection check .

.37

-

BBSS

#CCB$V PROCHKDON,CCB$B STS(R6),20$

;XFER IF HERE ALREADY

.38

BBC

#DEV$V-SHR,UCB$L DEVCHAR(R5),20$

;XFER IF NOT SHARABLE

.39

MOVAB WAEXE$CHKRDACCES:Ro

;SET ADDR OF CHECKING ROUTINE

.40

BBS

R7,READ ACCESS,10$

;XFER IF A READ FUNCTION

.41

MOVAB WAEXE$CHKWRTACCES,RO

;SET ADDR OF CHECKING ROUTINE

.42

BBC

R7,WRITE ACCESS,20$

;XFER IF NOT WRITE FUNCTION

.43 10$:

JSB

(RO)

-

;DO PROTECTION CHECK

.44

BLBC

RO,ERRORB

;XFER IF NOT SUCCESSFUL

.45 20$:

BRW

CHKDON

;ELSE REJOIN MAINLINE CODE

134

135 ; MISCELLANEOUS ERROR HANDLING AND EXCEPTION HANDLING ROUTINES. THESE HAVE

136 ; BEEN MOVED OUT OF LINE TO MAKE THE COMMON PATH NEARLY BRANCH FREE.

137

138

139 CLREF:

140

BSBW

SCH$CLREF

CLEAR SPECIFIED EVENT FLAG

141

BRB

VCHAN

CONTINUE WITH QIO

142 IVCHAN: MOVZWL #SS$ IVCHAN,RO

SET ERROR STATUS

143

BRB

ERR ORB

AND ERROR REQUEST

144 PRIVERR: MOVZWL #SS$ NOPRIV,RO

SET ERROR STATUS

145 ERRORB: BRW

ERROR

AND ERROR REQUEST

146

147

148 An access or deaccess operation is pending for this channel. Wait for

149 it to complete, then retry the QIO.

150

151

152 DACSPND:SETIPL #IPL$ SYNCH

;SYNCHRONIZE ACCESS TO SYSTEM DATA BASE

153

MOVZWL #RSN$-ASTWAIT,PCB$L EFWM(R4) ;SET AST WAIT RESOURCE NUMBER

154

MOVAQ WASCHiGQ MWAIT,R2 -

;SET ADDRESS OF WAIT QUEUE

155

BBSS

PCB$L_EFWM(R4),WASCH$GL_RESMASK,10$ ;SEI WAITING FLAG

156 10$:

BRW

157 .

SCH$WAIT

;WAIT FOR AST

158 ,; Device is marked spooled. Acquire intermediate UCB address if virtual funtion.

159 160

S' POOL:

CMPL

SA#IO$ LOGICAL,R7

VIRTUAL I/O FUNCTION?

161

BGEQ

NS POOL

IF GEQ NO

162

MOVL

UCB$L AMB(R5),R5

GET INTERMEDIATE DEVICE UCB ADDRESS

163

BRB

NS POOL

· 1

· 2 Intermediate branch to the protection checking routine.

. 3 .4

N' OT

FILE

DEVB:

.5

-

BRB

NOT- FILE- DEV

SYSQIOREQ V03-012

- QUEUE I/O REQUEST SYSTEM SERVICE QUEUE I/O REQUEST

3-JUN-1984 15:39:30 VAX-11 Macro V03-0l

Page 6

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(1)

0068 006B
006B 006B 0068 0068 006B 0068 0068 006B 0068 0068 006B 0068
0068 006B 0068 0068 006B 0068 0068 0068 006B 0068 006B 006B 0068 0068 0068 0068
006B 0068 0068 0068 006B 006B 0068 0068 0068 0068 0068 006B 0068 0068 006B
006B 006B 006B 0068 006B 006B 0068 006B 006B 006B 0068
006B

165

.SBTTL QUEUE I/O REQUEST

166 ;+

167 ; EXE$QIOREQ - QUEUE I/O REQUEST

168

169 THIS SERVICE PROVIDES THE CAPABILITY TO INITIATE AN I/0 OPERATION

170 BY QUEUEING A REQUEST TO A DEVICE'S ASSOCIATED DRIVER. ONCE THE

171 OPERATION HAS BEEN INITIATED, CONTROL WILL RETURN TO THE CALLER

172 WHO CAN SYNCHRONIZE I/O COMPLETION IN ONE OF THREE WAYS:

173

174

1) SPECIFY THE ADDRESS OF AN AST ROUTINE THAT WILL BE

175

EXECUTED WHEN THE I/O COMPLETES.

176

177

2) WAIT FOR THE SPECIFIED EVENT FLAG TO BE SET.

178

179

3) POLL THE SPECIFIED I/O STATUS BLOCK FOR A COMPLETION

180

STATUS.

181

182 THIS ROUTINE VERIFIES THE FUNCTION INDEPENDENT PARAMETERS, ALLOCATES

183 AN I/O REQUEST PACKET, COPIES THE FUNCTION INDEPENDENT PARAMETERS AND

184 PROCESS INFORMATION TO THE I/O PACKET, CHECKS ACCESS TO THE DEVICE,

185 AND CALLS THE DRIVER'S FUNCTION DECISION TABLE ROUTINE(S) THAT CORRESPOND

186 TO THE SPECIFIED FUNCTION. IT IS THEN UP TO THE FDT ROUTINE TO EITHER

187 COMPLETE THE REQUEST IMMEDIATELY (EXE$ABORTIO OR EXE$FINISHIO) OR TO

188 QUEUE THE I/O REQUEST FOR FURTHER PROCESSING BY THE DRIVER'S STARTIO

189 ROUTINE (EXE$QIODRVPKT).

190

191 INPUTS:

192

193

EFN(AP) = EVENT FLAG NUMBER.

194

CHAN(AP) = I/0 CHANNEL NUMBER.

195

FUNC(AP) = I/0 FUNCTION CODE.

196

IOSB(AP) = ADDRESS OF I/O STATUS BLOCK.

197

ASTADR(AP) = ADDRESS OF AST SERVICE ROUTINE.

198

ASTPRM(AP) = AST SERVICE ROUTINE PARAMETER.

199

Pl(AP) TO P6(AP) =FUNCTION DEPENDENT PARAMETERS.

200

201

R4 = CURRENT PROCESS PCB ADDRESS.

202

203 OUTPUTS:

204

205

RO LOW BIT CLEAR INDICATES FAILURE TO INITIATE THE I/O REQUEST.

206

207

RO = SS$_ABORT - A NETWORK LOGICAL LINK WAS BROKEN.

208

209

RO = SS$ ACCVIO - THE I/0 STATUS BLOCK CANNOT BE WRITTEN BY

210

THE CALLER.

211

212

RO = SS$_DEVOFFLINE - THE SPECIFIED DEVICE IS OFFLINE.

213

214

RO = SS$ EXQUOTA - THE PROCESS HAS EXCEEDED ITS BUFFERED I/O

215

QUOTA, DIRECT I/O QUOTA, OR BUFFERED I/O BYTE COUNT

216

QUOTA AND HAS DISABLED RESOURCE WAIT MODE. OR, THE

217

PROCESS HAS EXCEEDED ITS AST LIMIT QUOTA.

218

219

RO = SS$_ILLEFC - AN ILLEGAL EVENT FLAG NUMBER WAS SPECIFIED.

220

221

RO = SS$ INSFMEM - INSUFFICIENT DYNAMIC MEMORY IS AVAILABLE

SVSQIOREQ V03-012

- QUEUE I/0 REQUEST SYSTEM SERVICE QUEUE I/O REQUEST

3-JUN-1984 15:39:30 VAX-11 Macro V03-01

Page 7

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(1)

OFFC
53 04 AC 9A 3F 53 91
co 1A
00 50 A4 53 E5
FFFFOOOF 8F CB 50 08 AC 85 13 50 81
00000000'9F AC 1A
59 50 CE OOOOOOOO'FF49 9E
56 53 DC 53 02 16 EF 58 59 59 10 78 09 A6 58 91 97 18 55 66 DO 96 04 A6 EB
5A OC AC 3C FFFFFFCO BF CB
57 5A 98 38 A5 06 EO

0068 0068 0068 0068 0068 0068 0068 006B 0068 0068 006B 006B 006B 006B 0068 0068 0068 0068 006D 006D 006D
006D 006D 0071 0074 0076 007B 007B 007B 007B 007B 007B 0081 0084 0086
0088 0080 008F 0092 0099 009A
009C OOAO 00A1 00A5 OOA9 OOAB OOAE OOB2
OOB2
0082
0082 OOB2
OOB2 0086 OOBC OOBE

222

TO ALLOCATE AN I/O REQUEST PACKET AND THE PROCESS HAS

223

DISABLED RESOURCE WAIT MODE.

224 225

RO = SS$_IVCHAN - AN INVALID CHANNEL NUMBER WAS SPECIFIED.

226

227

RO = SS$ NOPRIV - THE SPECIFIED CHANNEL DOES NOT EXIST OR WAS

228

ASSIGNED FROM A MORE PRIVILEGED ACCESS MODE. OR, THE

229

PROCESS DOES NOT HAVE THE PRIVILEGE TO PERFORM THE

230

SPECIFIED TYPE OF I/O FUNCTION ON THE DEVICE.

231

232

RO = SS$_UNASEFC - UNASSOCIATED EVENT FLAG CLUSTER SPECIFIED.

233

234

RO LOW BIT SET INDICATES SUCCESSFUL COMPLETION.

235

236

= RO SS$_NORMAL - NORMAL COMPLETION.

237

238

239

.ENTRY EXE$QI0,AM<R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>

240

241 Clear specified event flag. For local event flags, this is done in line.

242

243

244 QIO:

MOVZBL EFN(AP),R3

GET EVENT FLAG NUMBER

245

CMPB

R3,#63

CHECK FOR LOCAL

246

BGTRU CLREF

IF NO, MUST DO FULL CLREF

247

BBCC

R3,PCB$L_EFCS(R4),VCHAN CLEAR SPECIFIED EVENT FLAG

248

249

250 Validate channel number, compute CCB address and acquire UCB address.

251

252

253 VCHAN: BICL3 #<AXFFFFOOOO!<CCB$C LENGTH-1>>,-;FETCH'CHANNEL NUMBER AND

254

CHAN(AP),RO

-

CLEAR EXTRANEOUS BITS

255

BEQL

IVCHAN

IF EQL INVALID CHANNEL

256

CMPW

RO,@#CTL$GW_CHINDX

LEGAL CHANNEL NUMBER?

257

BGTRU IVCHAN

IF GTRU NO

258

MNEGL RO,R9

CONVERT TO CHANNEL INDEX

259

MOVAB @CTL$GL_CCBBASE[R9],R6 GET ADDRESS OF CORRESPONDING CCB

260

MOVPSL R3

;READ CURRENT PSL

261

EXTZV #PSL$V_PRVMOD,#PSL$S_PRVMOD,R3,R11 ;EXTRACT PREVIOUS MODE FIELD

262

ASHL

#16,R9,R9

PREPARE CHANNEL INDEX. FOR LATER MERGE

263

CMPB

R11 ,CCB$B AMOD(R6)

CALLER HAVE PRIVILEGE TO ACCESS CHANNEL?

264

BGEQ

PRIVERR -

IF GEO NO

265

MOVL

CCB$L UCB(R6),R5

GET ASSIGNED DEVICE UCB ADDRESS

266

BLBS

CCB$L=WIND(R6),DACSPND IF LBS ACCESS/DEACCESS PENDING

267

268

269 Isolate function code and begin decoding

270

271

272

MOVZWL FUNC(AP),RlO

;GET I/O FUNCTION CODE AND MODIFIERS

273

BICL3 #AC<IO$M_FCODE>,R10,R7 ;CLEAR ALL BUT I/O FUNCTION CODE

274

BBS

SA#DEV$V_SPL,UCB$L_DEVCHAR(R5),SPOOL ;IF SET, DEVICE IS SPOOLED

SYSQIOREQ V03-012
LMP01S5 LMP01S5 1
;SRB0118

- QUEUE I/O REQUEST SYSTEM SERVICE QUEUE I/0 REQUEST

3-JUN-1984 15:39:30 VAX-11 Macro V03-0l

Page 8

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SVSQIOREQ.(1)

Al 3S AS OE
50 0088 cs
SB 08 AO 37 68 57 39 64 AS 04
51 10 AC 08
61
7B 08 AB S7
S9 3A A4
79 3A A4 52 6E
62
FEFB' lF 50
9E 64
50 OOF4 BF 14
57 34 C2
57 3S BO
50 0084 BF
03
50 DC
so
51 60 A4 52

OOC3 OOC3 OOC3 OOC3
OOC3 El OOC3 DO DOCS DO OOCD El 0001 El 0005
OODA OODA OODA OODA OODA DO OODA 13 OODE OOEO 7C DOES ODES OOEB OOEB ODES OOEB OOEB OOEB OOEB El OOEB OOFO
B6 OOFO 87 OOF2 18 OOFS 3F OOF7 DO OOFA B6 OOFD
DOFF 30 0102 E9 0105 B7 010S 11 OlOA
OlOC 3C 010C 11 0111
0113
91 0113
13 0116 91 0118 13 01 lB
0110
3C 0110 11 0122
0124 3C 0124
0127 DD 012A DO 012C 04 0130

275

276

277 Acquire FDT address.

278

279

.1 NSPOOL: BBC

#DEV$V FOD,UCB$L DEVCHAR(R5),NOT FILE DEVB

;XFER IF NOT MOUNTAB

. 2 CHKDON: MOVL

UCB$L DDT(R5),RO-

;GET ADDRESS OF DDT

281

MOVL

DDT$L-FDT(RO),R8

;GET ADDRESS OF FDT

282

BBC

R7,LEGAL(R8),ILLIO

;IF CLR, ILLEGAL I/O FUNCTION

283

BBC

#UCB$V_ONLINE,UCB$W_STS(R5),0FFLINE ;IF CLR, DEVICE OFFLINE

284

285

286 Probe and clear IOSB if it is specified.

287

288

289 PRIOSB: MOVL

IOSB(AP),Rl

GET ADDRESS OF I/O STATUS BLOCK

290

BEQL

NOIOSB

IF EQL NONE SPECIFIED

291

IFNOWRT #8,(Rl),ACCVIO

CAN I/O STATUS BLOCK BE WRITT~N?

292

CLRQ

(Rl)

CLEAR I/O STATUS BLOCK

293

294

295 Charge appropriate I/O counts depending upon type. Counts will have to

296 be backed out if no I/O packet is available. Set IPL to block process

297 deletion once we are committed.

298

299

300 NOIOSB: SETIPL #IPL$ ASTDEL

;PREVENT PROCESS DELETION

301

BBC

R7,IOTVPE(RB),DIRECT

;IF CLR, DIRECT I/O FUNCTION

302

ASSUME IRP$M BUFIO EQ 1

;TO ALLOW INCREMENT BELOW

303

INCW

R9 -

;SET IRP$M BUF~O

304

DECW

PCB$W BIOCNT(R4)

;CHARGE FOR ANOTHER BUFFERED I/O

305

BGEQ

OK -

;OK IF NOT NEGATIVE

306

PUSHAW PCB$W BIOCNT(R4)

;SET ADDRESS OF QUOTA CELL

307 NOCNT: MOVL

(SP) ,R2

;FETCH QUOTA ADDRESS

308

INCW

(R2)

;BACKOUT CHARGE

.1

SETI PL #0

;LOWER IPL TO WAIT AT IPL 0

309

BSBW

EXE$SNGLEQUOTA

;CHECK UNIT QUOTA OF I/O FUNCTION TYPE

310

BLBC

RO,ERROR

;IF LBC QUOTA EXCEEDED

311

DECW

@(SP)+

;CHARGE FOR I/O OF TYPE

312

BRB

OK

313

314 I LLI 0: MOVZWL #SS$ ILLIOFUNC,RO

;SET ILLEGAL I/O FUNCTION STATUS

315

BRB

ERROR

316

317 OFFLINE:CMPB

#IO$ DEACCESS,R7

;CHECK FOR DEACCESS I/O FUNCTION

318

BEQL

PRIOSB

;ALLOW IT TO PROCEED

319

CMPB

#IO$ ACPCONTROL,R7

;LIKEWISE FOR ACP CONTROL

320

BEQL

PRIOSB

;SO THAT A FILE ON AN OFFLINE DEVICE

321

;MAY BE CLOSED

322

MOVZWL #SS$ DEVOFFLINE,RO

;SET DEVICE OFFLINE STATUS

323

BRB

ERROR

324

325 ACCVIO: MOVZWL SA#SS$ ACCV IO, RO

326 ERROR: SETI PL #0

-

SET ACCESS VIOLATION STATUS ALLOW INTERRUPTS

327

PUSHL RO

SAVE FINAL STATUS

328

MOVL

PCB$L PID(R4),Rl

GET PROCESS ID OF CURRENT PROCESS

329

CLRL

R2 -

SET PRIORITY CLASS INCREMENT

SVSQIOREQ V03-012
-7

- QUEUE I/O REQUEST SYSTEM SERVICE QUEUE I/O REQUEST

3-JUN-19B4 15:39:30 VAX-11 Macro V03-01

Page 9

12-MAR-19B2 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(1)

53 04 AC 9A 0132

FEC7 30 0136

01 BA 0139

04 013B

013C

013C

013C

013C

013C

FEC 1' 30 013C

35 50 EB 013F

3A A4 3F 0142

03 59 EB 0145

3E A4 3F 0148

9E B6 014B

DB 11 014D

014F

014F

014F

014F

014F

50 04 A6 32 014F

00000000'9F DO 0153

51

0159

51 20 Al CO 015A

OC A140 DO 015E

FC A2

0162

52 11 0164

0166

3E A4 3F 0166

BF 11 0169

016B

3E A4 87 016B

F6 19 016E

0170

52 OOOO'DF OF 0170

C5 1D 0175

0177

0177

0177

0177

0177

0177

0177

0177

0177

0177

0177

0177

0177

0177

OA A6 86 0177

017A

53 B2 7E 017A

50 14 AC 7D 017D

OOBC C4 DO 0181

58 A3

0185

330

MOVZBL EFN(AP),R3

GET SPECIFIED EVENT FLAG NUMBER

331

BSBW

SCH$POSTEF

POST SPECIFIED EVENT FLAG

332

POPR

#AM<RO>

RESTORE FINAL STATUS

333

RET

334

335

336 ALLOCATE REQUEST I/0 PACKET - WHEN THE LOOKASIDE LIST IS EMPTY.

337

338

339 ALLOC: BSBW

EXE$ALLOCIRP

ALLOCATE I/O REQUEST PACKET

340

BLBS

RO,SUCCES

IF LBS SUCCESSFUL ALLOCATION

341

PUSHAW PCB$W BIOCNT(R4)

ASSUME BUFFERED I/O

342

BLBS

R9,NALLOC

IF SET, BUFFERED I/O

343

PUSHAW PCB$W DIOCNT(R4)

ELSE DIRECT I/O

344 NALLOC: INCW @(SP)+

RESTORE COUNT, SINCE NO I/O STARTED

345

BRB

ERROR

346

347

34B Convert section index to window address.

349

350

351 SECTION: CVTWL CCB$L WIND(R6),RO

;SIGN EXTEND SECTION INDEX

352

MOVL

@#CTL$GL PHD,Rl

;GET ADDRESS OF PROCESS HEADER

353

ADDL

PHD$L PSTBASOFF(R1),Rl ;CALCULATE BASE ADDRESS OF SECTION TABLE

7

354

MOVL

SEC$L.::::WINDOW(Rl)[R0],-4(R2)

;GET ADDRESS OF REAL WINDOW

355

BRB

NO SECT

356

364 NODCNT: PUSHAW PCB$W DIOCNT ( R4)

;SET FOR DIRECT I/O FUNCTION

365

BRB

NOC NT-

366

367 DIRECT: DECW

PCB$W DIOCNT(R4)

;CHARGE FOR ANOTHER DIRECT I/O

36B

BLSS

NODCNT

;BR IF NONE ALLOWED

369 OK:

370 GTPKT: REMQUE @WAIOC$GL IRPFL,R2

;GET I/O PACKET FROM LOOK ASIDE LIST

371

BVS

ALLOC

-

;IF VS EMPTY LIST

372

373 ;

374 BUILD DEVICE INDEPENDENT PART OF I/0 PACKET

375

376 R2 - !RP Address

377 R4 - PCB Address

378 R5 - UCB Address

379 , R6 - CCB Address

0 380

7 - Function code (original)

3Bl

8 - FDT address

382 R9 - Channel index @ 16 + (IRP$M_BUFIO -- if buffered I/O)

383 ; RlO - Function code (transformed)

3B4 Rll - Access mode

385 386

S' UCCES:

I NCW

CCB$W IOC(R6)

;INCREMENT OUTSTANDING I/O ON CHANNEL

387

ASSUME IRP$W-SIZE EQ 8

;FOR FOLLOWING OPTIMIZATION

3BB

MOVAQ (R2)+:R3

;COPY ADDRESS AND ADD IRP$W SIZE TO R2

3B9

MOVQ

ASTADR(AP),RO

;INSERT A$T ADDRESS AND PARAMETER

390

MOVL

PCB$L_ARB(R4),IRP$L_ARB(R3) ;COPY ACCESS RIGHTS BLOCK ADDRESS

SYSQIOREQ V03-012
;RLRMXBCNTC :; SR80118 ; SR80118· ;SR80118 ; SR80118 ; SR80·118 ;SR80118 ;SR80118 ; SR80118 ; SR80118 ;SR80118
SR80118 SR80118 SRBOl 18

- QUEUE I/O REQUEST SYSTEM SERVICE QUEUE I/O REQUEST

3-JUN-1984 15:39:30 VAX-11 Macro V03-01

Page 10

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(1)

0187

50 D5 0187

07 13 0189

58 40 SF 88 0188

38 A4 87 018F

58 58 18 78 0192

0196

58 C9 0196

OOOAOOC4 SF

0198

82

019D

2C A4 10 9C 019E

58

01A2

01A3

82 60 A4 DO 01A3

58 04 AC 90 01A7

01A8

01AB

OlAB

82 50 7D 01A8

5B 58 10 9C 01AE

0182

0182

82 04 A6 DO 0182

97 14 0186

0188

0188

82 55 DO 0188

0188

58 5A BO 0188

018E

018E

018E

82 58 DO 018E
58 04 co 01C1

82 10 AC DO 01C4
5C 1C co 01C8

01C8

01CB

82 59 10 9C 01CB

59 57 01 CB 01CF

82 7C 01D3

62 D4 0105

4C A3 D4 01D7

OlDA

01DA

OOOO'CF D5 01DA

05 13 01DE

FE1D' 30 01EO

10 11 01E3

01E5

01E5

01E5

OOOO'CF DO 01E8

50 A3

01EC

OOOO'CF 06 01EE

01F2

58 38 A5 DO 01F5

391 392 393 394 395 396 5$: 397 398

ASSUME TSTL BEQL 8IS8 DECW ASHL ASSUME 8ISL3

IRP$B RMOD EQ 11

;FOR SHIFT BELOW

RO -

;CHECK FOR AST

5$

;NONE

#ACB$M QUOTA,Rll

;NOTE QUOTA CHARGE

PC8$W ASTCNT(R4)

;CHARGE QUOTA

#24,Rll,Rll

;ALIGN ACCESS MODE

IRP$B TYPE EQ 10

;FOR BISL BELOW

R11,#<<DYN$C_IRP@16>!IRP$C_LENGTH>,(R2)+ ;INSERT TYPE AND LENGTH

399

ROTL

#16,PCB$B_PRIB-3(R4),R11;FETCH AND ALIGN PRIORITY

400 401

ASSUME IRP$L PIO EQ 12

MOVL

PCB$L-PID(R4),(R2)+

;' INSERT PROCESS ID OF CURRENT PROCESS

402

MOVB

EFN(AP),Rll

;MERGE EVENT FLAG NUMBER

403

404

ASSUME IRP$L AST EQ 16

FOR MOVQ BELOW

405

ASSUME IRP$L-ASTPRM EQ 20

FOR MOVQ BELOW

406

MOVQ

RO,(R°2)+

INSERT AST ADDRESS AND PARAMETER

407

ROTL

#16,Rl 1,Rl1

ALIGN PRIORITY AND EVENT FLAG NUMBER

408

409

ASSUME IRP$L WIND EQ 24

410

MOVL

CCB$L-WIND(R6),(R2)+

;GET WINDOW ADDRESS

411

BGTR

SECTION

;BR IF SECTION INDEX

412

413

ASSUME IRP$L UCB EQ 28

414 NOSECT: MOVL

R5,(R°2)+

;INSERT DEVICE UCB ADDRESS

415

ASSUME IRP$W FUNC EQ 32

416

MOVW

R10,Rl1

;MERGE I/O FUNCTION CODE

417

ASSUME IRP$B EFN EQ 34

418

ASSUME IRP$B-PRI EQ 35

419

ASSUME IRP$L-IOSB EQ 36

420

MOVL

R11,(R2)+

INSERT PRI,EFN,FUNC

421

AODL ~~#FDTACT-12,RB

POINT TO ACTION ROUTINE MASKS

422

MOVL / IOSB(AP), (R2)+

INSERT I/O STATUS BLOCK ADDRESS

423

ADDL

#Pl ,AP

POINT TO FIRST FUNCTION DEPENDENT PARAMETER

424

ASSUME IRP$W CHAN EQ 40

425

ASSUME IRP$W-STS EQ 42

426

ROTL

#16,R9,(R2)+

INSERT CHANNEL INDEX AND STATUS

427

BICL3 #1,R7,R9

PREPARE FOR VIRTUAL CHECK BELOW

428

CLRQ

(R2)+

CLEAR PTE ADDRESS, BYTE OFFSET, AND BYTE CO

429

CLRL

(R2)

;

.1

CLRL

IRP$L_DIAG8UF(R3)

;INIT ORIGINAL PTE ADDR (LOG OR VIRT I/0

· 2

.3

. IF DF CA$ MEASURE IOT

.4

TSTL

WAPMS$GL IOPFMPDB

DATA COLLECTION ENABLED?

.5

BEQL

3$

-

BR IF NO

.6

8SBW .PMS$START RQ

· 7

BRB

4$

-

INSERT START OF I/O REQUEST MESSAGE

.8

.ENDC

.9

.10 3$:

SETIPL #15

;DISABLE SOFTWARE INTERRUPTS

.11

MOVL WAPMS$GL_IOPFMSEQ,IRP$L_SEQNUM(R3) ;INSERT PACKET SEQUENCE NUMBER

. 12 . 13 .14 4$:

INCL

WAPMS$GL IOPFMSEQ

SETI PL #IPL$ ASTDEL

MOVL

UCB$L=DEVCHAR(R5),R11

INCREMENT I/O TRANSACTION SEQUENCE NUMBER ENABLE INTERRUPTS GET DEVICE CHARACTISTICS FOR MANY

SYSQIOREQ V03-012 -13
;SRB0118
-1

- QUEUE I/O REQUEST SYSTEM SERVICE QUEUE I/O REQUEST

3-JUN-1984 15:39:30 VAX-11 Macro V03-01

Page 11

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(1)

59 30 35
OD 5B OE
18 A3 18
53 58 13 61 58 18
57 10 20 A3 10 00014040 SF
58
14
38 A4 40

01F9 01F9 01F9 01F9 01F9 01F9 01F9 D1 01F9 12 OlFC El OlFE 0202 0202 0202 0202 0202 D5 0202 12 0205 El 0207 El 0208 020F 020F 020F 020F
020F C2 020F A2 0212 D3 0216
021C 021D 021D 12 021D 021F 021F 021F 021F B5 021F 19 0222 0224 0224 0224 0224 0224 0224 0224 0224 0224
0224
0224
0224 0224
0224 0224 0224
0224 0224 0224 0224

443

;COMPARES BELOW

444

445 CHECK IF REQUESTING PROCESS HAS PRIVILEGE TO ACCESS DEVICE

446

447 NOTE: LOW BIT OF FUNCTION CODE WAS CLEARED ABOVE

448

449

ASSUME IO$ READVBLK-IO$ WRITEVBLK EQ 1

.1

CMPL

$A#l0$ WRITEVBLK~R9

VIRTUAL READ OR WRITE?

451

BNEQ

15$ -

IF NEQ NO

452

BBC

SA#DEV$V_FOD,R11 ,5$

IF CLR, NOT FILE DEVICE

453

454

455 THE FOLLOWING TEST IS NECESSITATED BY THE SYSTEM INITIALIZATION SEQUENCE

456

457

458

TSTL

IRP$L WIND(R3)

WINDOW ADDRESS SPECIFIED?

459

BNEQ

90$ -

IF NEQ YES

460

BBC

$A#DEV$V MNT,Rll,60$

IF CLR, DEVICE NOT MOUNTED

461

BBC

SA#DEV$V=FOR,R11 ,80$

IF CLR, MOUNTED STRUCTURED

462

463

464 CONVERT VIRTUAL READ/WRITE FUNCTION TO ITS LOGICAL COUNTERPART

465

466

467 5$:

SUBL

SA#IO$ READVBLK-IO$ READLBLK,R7 ;CONVERT TO LOGICAL FUNCTION

468

SUBW

SA#IO$-READVBLK-I0$-READLBLK,IRP$W FUNC(R3)

469

BITL

#<DEV$M_SPL!-

-

;NOT SPOOLED,

470

DEV$M .=oo ! -

NOT FILE DEVICE,

471

DEV$M-SHR>,R11

AND NOT SHARABLE

472

BNEQ

15$ -

BR IF SATISFIED

473

474 CHECK IF AST QUOTA IS EXCEEDED

475

476

477 90$:

TSTW

PCB$W ASTCNT(R4)

;AST QUEUE ENTRY QUOTA EXCEEDED?

478

BLSS

75$ -

;IF LEQ YES

479

480

481 SCAN FUNCTION DECISION TABLE CALLING EACH SELECTED ACTION ROUTINE WITH:

482

483

RO = ADDRESS OF ACTION ROUTINE ENTRY POINT.

484

Rl = SCRATCH.

485

R2 = SCRATCH.

486

R3 = ADDRESS OF I/O REQUEST PACKET.

487

R4 = CURRENT PROCESS PCB ADDRESS.

488

R5 = ASSIGNED DEVICE UCB ADDRESS.

489

R6 = ADDRESS OF CCB.

490

R7 = I/O FUNCTION CODE BIT NUMBER.

491

RB = FDT DISPATCH ADDRESS. (UPDATED TO POINT TO ACTION ROUTINE MASKS)

492

R9 = SCRATCH.

493

R10 = SCRATCH.

494

R11 =SCRATCH.

495

AP = ADDRESS OF FIRST FUNCTION DEPENDENT PARAMETER.

496

497

NB: in the Guide to Writing a Device Driver, we document the contents

498

of RO as being the address of the FDT action routine entry point.

SYSQIOREQ V03-012
;LMP0206 ;LMP0221 ;LMP0221 ;LMP0221 ;LMP0221 ;LMP0221 ;LMP0221 -7
;LMP0206

- QUEUE I/O REQUEST SYSTEM SERVICE QUEUE I/O REQUEST

3-JUN-19B4 15:39:30 VAX-11 Macro V03-01

Page 12

12-MAR-19B2 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(1)

5B OC F9 6B 57 50 OB AB
60 Fl
57 2F 3B
57 1F 6E
22 OB A6 04 5A OOOO'CF 6C
17 58 10
6A 12 50 50 24
OOFC 10 A3
BB 50 lC
F3 E5
57 lF AA
0100 BF 2A A3
59 14 AC 9E

0224 0224
0224 0224
0224 0224
co 0224
El 0227 DO 022B 16 022F 1 1 0231
0233 0233
0233 0233 0233
Dl 0233 19 0236
023B 023B 0238 023B 023B 023B Dl 023E 19 0241 0243 E2 0249 9E 024E 11 0253
0255 El 0255
0259 0259 16 0259 EB 025B 3C 025E 31 0261 D5 0264 13 0267 3C 0269 11 026C 11 026E 0270 0270 0270 0270 Dl 0270
19 0273 AS 0275
0279 DO 027B 13 027F
02B1 02B1 0281 0281

499

This is the only reason that the dispatch code below does not read:

500

JSB

@8(R8)

501

Should future gererations wish to modify FDT dispatching to use the

502

single dispatch instruction, they must bear the responsibility for

503

breaking user written drivers.

504

505 110$: ADDL

#12,R8

POINT TO NEXT FUNCTION MASK

506

BBC

R7, (RB) , 11 0$

IF CLR, THEN ACTION NOT SELECTED

507

MOVL

8(R8),RO

GET ADDRESS OF ACTION ROUTINE

50B

JSB

(RO)

CALL ACTION ROUTINE

509

BRB

110$

510

511

512 CONTINUE DECODING FUNCTIONS OTHER THAN VIRTUAL READ/WRITE

513

514

515 15$: 516

CMPL BLSS

SA#IO$ LOGICAL,R7 BO$ -

:VIRTUAL I/O FUNCTION? ;IF LSS YES

517

51B

519 LOGICAL OR PHYSICAL I/O FUNCTION

520

521

522

IFPRIV PHY I0,80$

;PROCESS HAVE PHYSICAL I/0 PRIVILEGE?

523

CMPL

SA#IO$ PHYSICAL,R7

;PHYSICAL I/O FUNCTION?

524

BLSS

20$ -

;IF LSS NO

525

IFNPRIV LOG I0,60$

;PROCESS HAVE LOGICAL I/O PRIVILEGE?

.1

BBSS

#CCB$V PHYCHKDON,CCB$B STS(R6),80$

;XFER IF CHECK DONE

· 2

MOVAB WAEXE$CHKPHYACCES,R10 - ;SET FOR PHYSICAL I/O FUNCTION CHECK

. 3

BRB

30$

.4

.5 40$:

BBC

SA#DEV$V_SHR,R11,80$

IF CLR, DEVICE NOT SHAREABLE

. 6 50$:

R4 - PCB ADDRESS

.7

RS - UCB ADDRESS

533

JSB

(RlO)

CHECK ACCESS TO VOLUME

534

BLBS

R0,80$

IF LBS ACCESS ALLOWED

535 60$: 536 70$:

MOVZWL #SS$ NOPRIV,RO

BRW

EXE$ABORTI 0

.SET NO PRIVILEGE STATUS

537 75$: 53B

TSTL BEQL

IRP$L AST(R3) 110$ -

;DOES THIS REQUEST NEED AN AST? ;NO, THEN CAN'T BE QUOTA EXCEEDED.

539 540

MOVZWL #SS$ EXQUOTA,RO

BRB

70$ -

.;AST QUOTA EXCEEDED

. .1 77$:
541

BRB

40$

;INTERMEDIATE BRANCH

542 ; PROCESS HAS ACCESS TO DEVICE

543

544

545 80$:

CMPL

SA#IO$ PHYSICAL,R7

;LOGICAL OR VIRTUAL I/O FUNCTION?

546

BLSS 90$ -

;IF LSS YES

547

BISW

#IRP$M_PHYSIO,IRP$W_STS(R3) ;SET PHYSICAL I/O FLAG

548

MOVL

<P6-Pl:>(AP),R9

;GET ADDRESS OF DIAGNOSTIC BUFFER

549

BEQL

90$

;IF EQL THEN NOT SPECIFIED

550

551 Process diagnostic buffer parameter

552

553

IFNPRIV DIAGNOSE,60$

;PROCESS HAVE PRIVILEGE TO DIAGNOSE?

SYSQIOREQ V03-012 ;LMP0206
-1
;LMP0206
;LMP0206
-1

- QUEUE I/O REQUEST SYSTEM SERVICE QUEUE I/O REQUEST

3-JUN-1984 15:39:30 VAX-11 Macro V03-01

Page 13

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SVSQIOREQ.(1)

S-1 0088 C5 DO 51 14 Al 3C lC 13 53 DD FD69 30 53 8EDO C4 50 E9 4C A3 52 DO 82 QC A2 9E 62 59 DO 0080 BF AB 2A A3 FF6E 31
B4 08 A6 03 E2 SA OOOO'CF- 9E
99 5B 06 EO AS 5B OE El 91 5B 13 El SD SB 18 El
FF85 31

0287
028C 0290 0292 0294 0297 029A 029D
02A1 02A5 02A8 02AC 02AE 02B1
02B1 02Bl 02Bl 02Bl 0287 02BC 02C1 02Cl 02Cl 02Cl 02Cl 02Cl 02C5 02C9 02CD 02D1

554

MOVL

UCB$L DDT(RS),Rl

;GET ADDRESS OF DDT

555

MOVZWL DDT$W=DIAGBUF(R1),R1

;GET SIZE OF DIAGNOSTIC BUFFER

.1

BEQL

130$

;IF EQL NO DIAGNOSTIC FUNCTIONS

557

PUSHL R3

;SAVE I/O PACKET ADDRESS

558

BSBW

EXE$ALLOCBUF

;ALLOCATE DIAGNOSTIC BUFFER

559

POPL

R3

;RETRIEVE I/O PACKET ADDRESS

560

BLBC

R0,70$

;IF LBC ALLOCATION FAILURE

561

MOVL

R2,IRP$L DIAGBUF(R3)

;SAVE ADDRESS OF DIAGNOSTIC BUFFER

562

MOVAB 12(R2),(R2)+

;SET POINTER TO DATA AREA

563

MOVL

R9,(R2)

;SAVE USER ADDRESS OF DIAGNOSTIC BUFFER

564

BISW

#IRP$M_DIAGBUF,IRP$W_STS(R3) ;SET DIAGNOSTIC BUFFER PRESENT

565 130$: BRW

90$

566 ;

567 ; LOGICAL I/O FUNCTION

568

569

570 20$:

IFPRIV LOG I0, 130$

;PROCESS HAVE LOGICAL I/O PRIVILEGE?

.1

BBSS

#CCB$V LOGCHKDON,CCB$B STS(R6),80$

;XFER IF CHECK DON~

S71

MOVAB WAEXE$CHKLOGACCES,R10 - ;SET FOR LOGICAL I/0 FUNCTION CHECK

572

573

574 ; PHYSICAL OR LOGICAL I/0 FUNCTION - CHECK ACCESSIBILITY OF DEVICE

575

576

577 30$:

BBS

SA#DEV$V_SPL,Rl1,60$

IF SET, SPOOLED DEVICE

.1

BBC

SA#DEV$V_FOD,R11,77$

IF CLR, NOT FILE DEVICE

579

BBC

SA#DEV$V_MNT,R11,60$

IF CLR, DEVICE NOT MOUNTED

580

BBC

SA#DEV$V_FOR,R11,60$

IF CLR, MOUNTED STRUCTURED

581

BRW

50$

SYSQIOREQ V03-012

- QUEUE I/O REQUEST SYSTEM SERVICE BUILD I/0 PACKET FOR PAGE READ/WRITE

3-JUN-1984 15:39:30 VAX-11 Macro V03-01

Page 14

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(1)

02D4 02D4 02D4 0204 0204 02D4
0204 0204 0204 02D4 02D4 0204 0204 02D4 02D4 02D4 02D4 0204 0204 0204 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 0204 02D4
02D4 0204 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4

583

.SBTTL BUILD I/O PACKET FOR PAGE READ/WRITE

584 + 585 EXE$BUILDPKTR - BUILD I/O PACKET FOR PAGE READ

586 EXE$BUILDPKTW - BUILD I/O PACKET FOR PAGE WRITE

587 EXE$BLDPKTSWPR - BUILD I/O PACKET FOR SWAP READ

588 EXE$BLDPKTSWPW - BUILD I/0 PACKET FOR SWAP WRITE

589 EXE$BLDPKTGSR - BUILD I/O PACKET FOR SHARED MEMORY GLOBAL SECTION READ

590 EXE$BLDPKTGSW - BUILD I/O PACKET FOR SHARED MEMORY GLOBAL SECTION WRITE

591 592 THIS ROUTINE IS CALLED TO FILL OUT AND QUEUE AN I/O PACKET

593 FOR A SWAPPING OR PAGING READ OR WRITE.

594

595 INPUTS:

596 597 598
599

RO = VIRTUAL BLOCK NUMBER Rl = NUMBER OF BYTES TO TRANSFER (PAGE INCREMENTS) R2 = WINDOW ADDRESS FOR MAPPING VBN TO LBN

600 601

= R3 = SYSTEM VIRTUAL ADDRESS OF PAGE TABLE ENTRY·
R4 CURRENT PROCESS CONTROL BLOCK ADDRESS

602

PCB$W DIOCNT(R4) IS ASSUMED GREATER THAN ZERO

603 604

AND MUST BE CHECKED BY THE CALLER.
R5 = I/0 REQUEST PACKET ADDRESS

605

WITH THE FOLLOWING FIELDS ALREADY FILLED IN

606

607

IRP$W SIZE(R5) AND IRP$B TYPE(R5)

608

FOR ENTRY AT EXE$BUILDPKTW, EXE$BLDPKTGSR, AND EXE$BLDPKTGSW,

609

THESE ARE FILLED IN BY THE CALL:" FOR ALL OTHER ENTRY POINTS

610

THEY ARE FILLED IN BY THIS CODE.

611

IRP$L AST(R5) =

612

FOR PAGE READ CASE - SYSTEM VIRTUAL ADDRESS OF SLAVE (PROCESS)

613

PAGE TABLE ENTRY FOR THE CASE OF A GLOBAL PAGE READ.

614

THIS MUST BE 0 FOR A SYSTEM OR PROCESS PAGE READ.

615

FOR PAGE WRITE CASE - STANDARD QI/O AST ADDRESS

616

FOR SWAPIO CASE - THIS PARAMETER IS CURRENTLY NOT USED

617

618

IRP$L ASTPRM(R5) =

619

FOR PAGE READ CASE - THE CONTENTS OF THE FAULTED PAGE TABLE ENTRY

620

USED TO RECOVER THE ORIGINAL BACKING STORE ADDRESS WHEN A PAGE

621

READ ERROR OCCURRED FOR A COPY ON REFERENCE PAGE.

622

FOR PAGE WRITE CASE - STANDARD QI/O AST PARAMETER

623

FOR SWAPIO CASE - ADDRESS OF KERNEL AST ROUTINE TO CALL

624

625

IRP$B_PRI(R5) = THE PRIORITY AT WHICH THE TRANSFER IS TO BE QUEUED

626

627

IRP$B RMOD(R5) =

628

FOR PAGE WRITE CASE - STANDARD QI/O MODE OF REQUESTER

629

FOR ALL OTHER CASES - CONTAINS GARBAGE WHICH IS IGNORED

630

631

IRP$B EFN(R5)

632

FOR PAGE WRITE CASE - STANDARD QI/O EVENT FLAG NUMBER

633

FOR ALL OTHER CASES - CONTAINS GARBAGE WHICH IS IGNORED

634

635

IRP$L IOSB(R5) =

636

FOR PAGE WRITE CASE - STANDARD QI/O I/O STATUS BLOCK ADDRESS

637

FOR ALL OTHER CASES - CONTAINS GARBAGE WHICH IS IGNORED

638

639 OUTPUTS:

SYSQIOREQ V03-012
;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ; LJKO 1"72 ;LJK0172
LJK0172 LJK0172 LJK0172 LJK0172
;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172 ;LJK0172
;LJK0172
;LJK0172 ;LJK0172

- QUEUE I/O REQUEST SYSTEM SERVICE BUILD I/O PACKET FOR PAGE READ/WRITE

3-JUN-1984 15:39:30 VAX-11 Macro V03-0l

Page 15

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(1)

00520000 BF 30
00500000 8F 28
00520000 8F 16
00500000 BF OE
00140000 BF 10
00160000 8F
OOOAOOC4 SF 18 00 08 A5
2C A5 53 4C A5 53
53 55 6t::. 01 11
55
28 A245 OB 55
20 A3 )00FFFF SF
55 SE

02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 02D4 DD 02D4 11 02DA 02DC 02DC DD 02DC 11 02E2 02E4 02E4 DD 02E4 11 02EA 02EC 02EC DD 02EC 11 02F2 02F4 02F4 DD 02F4 11 02FA 02FC 02FC DD 02FC 0302
FO 0302 0308 030A
DO 030C DO 0310 DO 0314 EE 0317
031B 031C 031C 031C 031C 031C 031C 031C D6 031C A3 0320 0323 CB 0325 0328 032D 032D

640

641

R4,R5 ALTERED

642 ' 643

644

.ENABL LSB

.1

. 2 Note that the differentiation between READ and WRITE operations is

.3 encoded in the setting of the IRP$M_FUNC bit.

.4

. 5

IRP$M FUNC 1 => IO$ READPBLK ; Read operation

.6

IRP$M=FUNC 0 => I0$=WRITEPBLK ; Write operation

. 7

.8 EXE$BLDPKTGSR::

;BUILD PACKET FOR SHMGSD READ

.9

PUSHL #<IRP$M SWAPIO IRP$M VIRTUAL ! IRP$M FUNC>@16

,,.. 10

BRB

20$

-

- ;TYPE/SIZE ALREADY SET IN PACKET

. , 2 EXE$BLDPKTGSW: :

;BUILD PACKET FOR SHMGSD WRITE

. ,3

PUSHL #<IRP$M SWAPIO IRP$M VIRTUAL>@16

. 14

BRB

20$

-

- ;TYPE/SIZE ALREADY SET IN PACKET

. 15

. 16 EXE$BLDPKTSWPR::

;BUILD SWAP READ PACKET

. 17

PUSHL #<IRP$M SWAPIO IRP$M_VIRTUAL ! IRP$M_FUNC>@16

. 18

BRB

10$

-

. 19

.20 EXE$BLDPKTSWPW::

;BUILD SWAP WRITE PACKET

. 2,

PUSHL #<IRP$M SWAPIO IRP$M_VIRTUAL>@16

.22

BRB

10$

-

.23

.24 EXE$BUILDPKTW::

;BUILD I/O PACKET FOR PAGE WRITE

.25

PUSHL #<IRP$M PAGIO IRP$M_VIRTUAL>@16

.26

BRB

20$

-

.27

.28 EXE$BUILDPKTR::

;BUILD I/O PACKET FOR PAGE READ

.29

PUSHL #<IRP$M PAGIO ! IRP$M_VIRTUAL ! IRP$M_FUNC>@16

.30

. 31 10$:

INSV

#<DYN$C IRP@16 ! IRP$C LENGTH>,- ;SET SIZE

.32

#0,#24,lRP$W_SIZE(R5) - ;AND TYPE OF PACKET

. 33 20$ :. .34 .35 .36

MOVL MOVL MOVL EXTV

R3,IRP$L SVAPTE(R5)

;SYSTEM VIRTUAL ADR OF PAGE TABLE ENTRY

R3,IRP$L-DIAGBUF(R5)

;NEED COPY OF ORIGINAL FOR SEGMENTED XFERS

R5,R3 -

;PACKET ADDRESS TO R3

#<IRP$V_FUNC+16>,#1 ,(SP),R5

.37

.38 R5 -1 for read

.39 R5

0 for write

.40

.41

ASSUME <IO$ WRITEPBLK + 1> EQ IO$ READPBLK

.42

ASSUME <WCB$L_WRITES - 4> EQ WCB$L_READS

.43

.44

INCL

WCB$L WRITES(R2)[R5]

;USE CODE TO BUMP READ OR WRITE COUNT

.45

SUBW3 R5,#IO$_WRITEPBLK,IRP$W_FUNC(R3) ;SET REAL FUNCTION CODE

.46

BICL3 #AXFFFF,(SP)+,R5

;GET STATUS BITS AND CLEAR CHANNEL

.47

.48

ASSUME IRP$W_STS EQ IRP$W_CHAN+2

SYSQIOREQ V03-012
;LJK0172 -33

- QUEUE I/O REQUEST SYSTEM SERVICE BUILD I/O PACKET FOR PAGE READ/WRITE

3-JUN-1984 15:39:30 VAX-11 Macro V03-01

Page 16

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(1)

032D .49

28 A3 55 DO 0320 678

55 10 A2 DO 0331 679

lC A3 55 DO 0335 680

OC A3 60 A4 DO 0339 681

48 A3 50 DO 033E 682

18 A3 52 DO 0342 683

OOBC C4 DO 0346 684

58 A3

034A

034C 685

30 A3 84 034C 686

32 A3 51 DO 034F 687

40 A3 04 0353 688

44 A3 51 DO 0356 689

035A 690

035A 691

035A 692

FCA3' 30 035A 693

035D 694

035D 695

035D 696

FCAO' 31 035D 697

0360 698

0360 699

MOVL MOVL MOVL MOVL MOVL MOVL MOVL

R5,IRP$W CHAN(R3)

;SET CHANNEL AND STATUS

WCB$L ORGUCB(R2),R5

;GET UCB ADDRESS FROM WINDOW

R5,IRP$L UCB(R3)

;SET UCB ADDRESS

PCB$L PID(R4),IRP$L PID(R3) ;PROCESS ID FROM PCB

RO,IRP$L SEGVBN(R3)-

;STARTING VIRTUAL BLOCK NUMBER

R2,IRP$L-WIND(R3)

;WINDOW ADDRESS

PCB$L_ARB(R4),IRP$L_ARB(R3) ;ACCESS RIGHTS BLOCK ADDRESS

CLRW MOVL CLRL MOVL

IRP$W BOFF(R3) R1,IRP$L BCNT(R3) IRP$L ABCNT(R3) R1,IRP$L_OBCNT(R3)

. IF

DF,CA$_MEASURE_IOT

BSBW

PMS$START_RQ

.ENDC

BRW

IOC$QNXTSEG1

.DSABL LSB

;ZERO BYTE OFFSET ;SET BYTE COUNT ;ZERO ACCUMULATED BYTE COUNT ;SET ORIGINAL BVTE COUNT
;INSERT START OF I/O REQUEST MESSAGE
;QUEUE THE FIRST SEGMENT OF THE I/O REQUEST ;AND RETURN

SYSQIOREQ V03-012

- QUEUE I/0 REQUEST SYSTEM SERVICE COMPLETE I/O OPERATION

3-JUN-1984 15:39:30 VAX-11 Macro V03-0l

Page 17

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(l)

24 A3 11 OB A3 06
38 A4
oc
51
70 A5 38 A3 50
50 01 OOOO'DF 63
39

0360 0360 0360 0360
0360 0360 0360 0360 0360 0360 0360 0360 0360 0360 0360 0360 0360 0360 0360
0360 0360 0360 0360 0360 0360 0360 0360 0360 0360 0360 0360 0360 0360 0360 0360 0360 D4 0360 E5 0363 B6 0368 11 036B 036D
D4 036D 036F
D6 036F 7D 0372 3C 0376 OE 0379
037E
11 0381
0383

701

.SBTTL COMPLETE I/O OPERATION

702 +

703 EXE$ABORTIO - ABORT I/0 OPERATION

704

705 THIS ROUTINE IS JUMPED TO FROM A FUNCTION DECISION TABLE ACTION ROUTINE

706 TO FINISH AN I/O OPERATION WITHOUT RETURNING THE FINAL I/O STATUS.

707

708 EXE$FINISHIO - FINISH I/O OPERATION

709

710 THIS ROUTINE IS JUMPED TO FROM A FUNCTION DECISION TABLE ACTION ROUTINE

711 TO FINISH AN I/O OPERATION AND RETURN THE FINAL I/O STATUS.

712

713 EXE$FINISHIOC - FINISH I/O OPERATION WITH SECOND I/0 STATUS LONGWORD CLEARED

714

715 THIS ROUTINE IS JUMPED TO FROM A FUNCTION DESCISION TABLE ACTION ROUTINE

716 TO FINISH AN I/O OPERATION AND RETURN THE FINAL I/O STATUS WITH THE

717 SECOND I/O STATUS LONGWORD CLEARED.

718

719 INPUTS:

720
721

= RO FIRST LONGWORD OF FINAL I/O STATUS.

722

Rl = SECOND LONGWORD OF FINAL I/O STATUS.

723 724

= R3 = ADDRESS Of I/O REQUEST PACKET.
R4 CURRENT PROCESS PCB ADDRESS.

725

R5 =UCB ADDRESS OF DEVICE UNIT.

726

727 OUTPUTS:

728

729

THE FINAL I/0 STATUS IS STORED IN THE I/0 PACKET AND THE PACKET IS

730

INSERTED IN THE I/O POST PROCESSING QUEUE. A SOFTWARE INTERRUPT

731

IS GENERATED TO INITIATE I/O POST PROCESSING AND THE FIRST WORD

732

OF THE FINAL I/O STATUS IS RETURNED AS THE SERVICE STATUS.

733

734

735

.ENABL LSB

736 EXE$ABORTI 0: :

;ABORT I/O OPERATION

737

CLRL

IRP$L IOSB(R3)

;CLEAR ADDRESS OF I/O STATUS BLOCK

738

BBCC

#ACB$V QUOTA,IRP$B RMOD(R3),10$ ;If CLR, NO AST SPECIFIED

739

INCW

PCB$W ASTCNT(R4) -

;UPDATE AVAILABLE AST QUEUE ENTRIES

740

BRB

10$ -

;

741 EXE$FINISHIOC::

;FINISH I/O OPERATION CLEAR SECOND LONGWORD

742

CLRL

Rl

;CLEAR SECOND I/O STATUS LONGWORD

743 EXE$FINISHIO::

;FINISH I/O OPERATION

744

INCL

UCB$L OPCNT(R5)

;INCREMENT OPERATIONS COMPLETED

745

MOVQ

RO,IRP$L MEDIA(R3)

;STORE FINAL I/O STATUS

746

MOVZWL SA#SS$ NORMAL,RO

;SET NORMAL COMPLETION STATUS

747 10$: 748

INSQUE (R3),@iAIOC$GL PSBL SOFT INT #I PL$ IOPOST -

;INSERT I/O PACKET IN POST PROCESS QUEUE ;INITIATE SOFTWARE INTERRUPT

749

BRB

QIORETURN

750

.DSABL LSB

SYSQIOREQ V03-012

- QUEUE I/O REQUEST SYSTEM SERVICE QUEUE I/O PACKET TO DRIVER

3-JUN-1984 15:39:30 VAX-11 Macro V03-01

Page 18

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(1)

0383 752

.SBTTL QUEUE I/O PACKET TO DRIVER

0383 753 ;+

0383 754 EXE$QIODRVPKT - QUEUE I/O PACKET TO DRIVER

0383 755

0383 756 THIS ROUTINE IS JUMPED TO FROM A FUNCTION DECISION TABLE ACTION ROUTINE

0383 757 TO QUEUE AN I/0 PACKET TO THE APPROPRIATE DRIVER.

0383 758

0383 759 INPUTS:

0383 760

0383 761

R3 ADDRESS OF I/O REQUEST PACKET.

0383 762

R4 CURRENT PROCESS PCB ADDRESS.

0383 763

R5 UCB ADDRESS OF DEVICE UNIT.

0383 764

0383 765 ' OUTPUTS:

0383 766

0383 767

THE I/0 PACKET IS QUEUED BY PRIORITY IN THE APPROPRIATE DEVICE

0383 768

QUEUE AND A NORMAL COMPLETION STATUS IS RETURNED.

0383 769 '

0383 770

0383 771 EXE$QIODRVPKT::

QUEUE I/O PACKET

66 10 0383 772

BSBB

EXE$INSIOQ

INSERT I/O PACKET IN DEVICE QUEUE

32 11 0385 773

BRB

EXE$QIORETURN

SVSQIOREQ V03-012

- QUEUE I/O REQUEST SYSTEM SERVICE

3-JUN-1984 15:39:30 VAX-11 Macro V03-01

Page 19

EXE$ALTQUEPKT - Cal 1 driver ALTSTART ent 12-MAR-1982 17:19:50 DISK$VMSMASTER:[SVS.SRC]SYSQIOREQ.(1)

0387 775

.SBTTL EXE$ALTQUEPKT - Call driver ALTSTART entry point

0387 776

0387 777

0387 778 EXE$ALTQUEPKT - activates a driver at its ALTSTART entry point

0387 779

0387 780 Routine description:

0387 781

0387 782

Locates and cal ls a driver entry point supplied, as an alternate

0387 783

START I/0 entry point. Does not test for unit busy before the

0387 784

call. Exits by returning to caller.

0387 785

0387 786

The routine expects to gain control at or below driver fork

0387 787

level. The routine raises to driver fork IPL before the call,

0387 788

and restores the previous IPL before returning to its caller.

0387 789

0387 790 Inputs:

0387 791

0387 792

R3

- address of packet or buffer

0387 793

R5

- address of UCB

0387 794

0387 795 Outputs:

0387 796

0387 797

Control returns to the requesting process.

0387 798

0387 799

The routine destroys RO-Rl.

0387 800

0387 801

0387 802

0387 803 EXE$ALTQUEPKT::

Start 1/0 in driver.

0387 804

DSBINT UCB$B FIPL(R5)

Raise to fork IPL.

50 0088 C5 DO 038E 805

MOVL

UCB$L-DDT(R5),RO

Get address of unit's DDT.

lC BO 16 0393 806

JSB

@DDT$L_ALTSTART(RO)

Call alternate start I/O routine.

0396 807

ENBINT

Reenable interrupts.

05 0399 808

RSB

Return to caller.

SYSQIOREQ V03-012
;CDSOOOl
-1
;CDSOOOl -1
;CDSOOOl ;CDSOOOl
;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDSOOOS ;CDSOOOS ;CDSOOOS ;CDS0005 ;CDS0005 ;CDS0005 ;CDSOOOS ;CDS0005 ;CDS0005

- QUEUE I/O REQUEST SYSTEM SERVICE QUEUE I/O PACKET TO ACP

3-JUN-1984 15:39:30 VAX-11 Macro V03-0l

Page 20

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC)SYSQIOREQ.(l)

039A 039A 039A 039A 039A 039A 039A 039A 039A 039A 039A 039A 039A 039A 039A
039A 039A 039A 039A 039A 039A 039A 039A 52 34 A5 DO 039A 52 10 A2 DO 039E QC A2 05 03A2 19 13 03A5 60 10 03A7 OE 12 03A9 51 OC A2 DO 03AB FC4E' 30 03AF 04 50 ES 03B2 03B5 0389 50 01 3C 0389 03BC 03BC 04 03BF 03CO 55 60 A3 9E 03C.O 03C4 F2 AF 9F 03C7 03CA 03CA 03CA 03CA 03CA 03CA 03CA 03CA 03CA
03CA 03CA 03CA 03CA 03CA 03CA

810

.SBTTL QUEUE I/0 PACKET TO ACP

811 ;+

812 ; EXE$QIOACPPKT - QUEUE I/O PACKET TO ACP

813 814 THIS ROUTINE IS JUMPED TO FROM A FUNCTION DECISION TABLE ACTION ROUTINE

.1 TO QUEUE AN I/O PACKET TO THE APPROPRIATE ACP OR XQP.

816

817 INPUTS:

818

819

R3 ADDRESS OF I/O REQUEST PACKET.

820

R4 CURRENT PROCESS PCB ADDRESS.

821

R5 UCB ADDRESS OF DEVICE UNIT.

822

823

CURRENT IPL MUST BE AT SYNCH OR HIGHER LEVEL.

824

825 OUTPUTS:

826

827

R4 ALTERED

.1

THE I/O PACKET IS QUEUED AT THE END OF THE APPROPRIATE ACP OR XQP QUEUE

829

AND A NORMAL COMPLETION STATUS IS RETURNED.

830 ' 831

832 EXE$QIOACPPKT::

;QUEUE I/O PACKET TO ACP

833

MOVL

UCB$L VCB(R5),R2

;GET ADDRESS OF VCB

834

MOVL

VCB$L-AQB(R2),R2

;GET ADDRESS OF ACP AQB

· 1

TSTL

AQB$L-ACPPID(R2)

;GET ADDRESS OF AQB

. 2

BEQL

XQP -

;EQL IF IT'S FOR XQP

835

BSBB

EXE$INSERTIRP

;INSERT I/O PACKET IN ACP QUEUE

836

BNEQ

EXE$QIORETURN

;IF NEQ NOT FIRST ENTRY IN QUEUE

837

MOVL

AQB$L ACPPID(R2),R1

;GfT ACP PROCESS ID

838

BSBW

SCH$WAKE

;WAKE UP ACP PROCESS

839

BLBS

RO,EXE$QIORETURN

;IF LBS ACP STILL PRESENT

840

BUG CHECK NONEXSTACP

;NONEXISTENT ACP PROCESS

841 EXE$QIORETURN: :

;QUEUE I/O REQUEST COMPLETION STATUS RETURN

842

MOVZWL #SS$ NORMAL,RO

;SET NORMAL COMPLETION STATUS

843 QIORETURN:

-

;RETURN SPECIFIED STATUS

844

SETI PL #0

;ALLOW ALL INTERRUPTS

845

RET

· 1 XQP:

. 2

MOVAB IRP$L FQFL(R3), R5

USE CORP PART OF IRP AS ACS

.3

SETI PL #IPL$-ASTDEL

ALLOW PAGEFAULTS

.4

PUSHAB QIORETURN

RETURN ADDRESS FROM EXE$QXQPPKT

.5

.6 FALL THROUGH TO XQP QUEUEING ROUTINE IMMEDIATELY FOLLOWING.

· 7 RSB FROM THIS ROUTINE RETURNS TO EXIT ABOVE.

.8

.9

. 10

.SBTTL EXE$QXQPPKT - QUEUE I/O PACKET TO XQP

· 11 ;+

. 12 EXE$QXQPPKT - INSERT I/O PACKET IN XQP QUEUE

. 13

. 14 THIS ROUTINE IS CALLED TO INSERT AN I/O PACKET IN THE XQP QUEUE

. 15 AND START THE THREAD OF EXECUTION IF IT IS THE ONLY REQUEST.

. 16

. 17 CALLING SEQUENCE:

. 18

BSB/JSB EXE$QXQPPKT - THIS IS EITHER CALLED FROM QIO OR

. 19

AS A SPECIAL KERNEL AST INVOKED BY IOPOST.

SYSQIOREQ V03-012
;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDSOOOS ;CDS0005
;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005 ;CDS0005

- QUEUE I/O REQUEST SYSTEM SERVICE EXE$QXQPPKT - QUEUE I/O PACKET TO XQP

3-JUN-1984 15:39:30 VAX-11 Macro V03-01

Page 21

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(1)

OOOOOOOO'GF . DO 50
14 A5 AO AS 9E
20 90 OB AS DC AS 60 A4 DO 10 A5 08 AO DO 52 02 DO
FC16' 30 05

03CA 03CA 03CA 03CA 03CA 03CA 03CA 03CA 03CA 03CA 03CA 03CA 03CA 03CA 03CA 03CA 03CA
03CA 03CA 03CA 03CA 03CA 0300 03D1 03D6 0306 03D8 03DA 03DF 03E4 03E7 03EA

.20

. 21 INPUTS:

.22 . 23 . 24

= R4 CURRENT PROCESS PCB ADDRESS . = RS ADDRESS OF TEMP ACB PART OF IRP .

.25

.26 OUTPUTS:

.27 . 28

= RO status from SCH$QAST .

.29

.30

IF SUCCESS:

.31

A KERNEL AST IS QUEUED TO THE DISPATCH ROUTINE OF THE XQP

. 32

IF NO PACKETS WERE ALREADY ON THE REQUEST QUEUE OF THE XQP .

.33

.34

THIS ROUTINE MUST BE CALLED AT IPL ASTDEL SO THAT THE

.35

IRP CANNOT BE LOST (BECAUSE OF PROCESS DELETION) UNTIL IT

. 36

IS PLACED ON THE XQP REQUEST QUEUE .

.37

.38

.39

.40 EXE$QXQPPKT::

. 41

MOVL

GACTL$GL_F11BXQP, RO

;ADDR OF XQP QUEUE HEAD

.42

MOVAB CDRP$L IOQFL(R5), -

;ADDRESS OF IRP

.43

ACB$L ASTPRM(R5)

;IS AST PARAMETER.

.44

MOVB

#PSL$C KERNEL!ACB$M NODELETE,-,;KERNEL MODE, DON'T DELETE IRP

.45

ACB$B RMOD(R5)

-

.46

MOVL

PCB$L-PID(R4), ACB$L PID(R5) ;COPY PIO.

.47

MOVL

F11B$L DISPATCH(RO),-ACB$L AST(R5) ;XQP DISPATCHER ADDRESS.

. 48

MOVL #PRI$ RESAVL, R2

;SAME AS AFTER WAITING FOR A LOCK .

.49

BSBW

SCH$QAST

;QUEUE THE AST.

.50

RSB

;AND RETURN

SYSQIOREQ V03-012
;SSA0017

- QUEUE 1/0 REQUEST SYSTEM SERVICE INSERT 1/0 PACKET IN UNIT QUEUE

3-JUN-1984 15:39:30 VAX-11 Macro V03-01

Page 22

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(1)

6A A5 05 64 A5 08
FC03
06 52 4C AS
04

03EB 03EB 03EB 03EB
03EB 03EB 03EB 03EB 03EB 03EB 03EB 03EB 03EB 03EB 03EB 86 03F2 E2 03F5 30 03FA 11 03FD DE ,03FF 10 0403 0405 05 0408

847

.SBTTL INSERT 1/0 PACKET IN UNIT QUEUE

848 ;+

849 EXE$INSIOQ - INSERT 1/0 PACKET IN UNIT QUEUE

850

851 THIS ROUTINE IS CALLED TO INSERT AN 1/0 PACKET IN A UNIT QUEUE AND CALL

852 THE APPROPRIATE 1/0 DRIVER IF THE UNIT IS NOT BUSY.

853

854 INPUTS:

855 856 857

= R3 ADDRESS OF I/O REQUEST PACKET. = RS UCB ADDRESS OF DEVICE UNIT.

858

859

860 EXE$INSIOQ::

INSERT IN I/O QUEUE

861

DSBINT UCB$B FIPL(R5)

RAISE IPL TO FORK LEVEL

.1

INCW UCB$W-QLEN(R5)

Bump device queue length

862

BBSS

#UCB$V BSY,UCB$W STS(R5),10$ ;IF SET, THEN DEVICE IS BUSY

863

BSBW

IOC$INITIATE

-

;INITIATE 1/0 FUNCTION

864 865 10$:

BRB

20$

MOVAL UCB$L IOQFL(RS),R2

;'GET ADDRESS OF I/0 QUEUE LISTHEAD

866

BSBB

EXE$INSERTIRP

;INSERT I/O PACKET IN DEVICE QUEUE

867 20$:

ENBINT

;ENABLE INTERRUPTS

868

RSB

SYSQIOREQ V03-012

- QUEUE I/O REQUEST SYSTEM SERVICE INSERT I/O PACKET IN QUEUE BY PRIORITY

3-JUN-1984 15:39:30 VAX-11 Macro V03-01

Page 23

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(1)

51 52 51 04 Al
51 52 07
23 Al 23 A3 FO
61 63

0409 0409 0409 0409 0409 0409 0409 0409
0409 0409 0409 0409 0409 0409
0409 0409 0409 0409 0409 0409 0409 0409 0409 0409 0409 0409 0409 0409 DO 0409 DO 040C D1 0410 13 0413 91 0415 1F 041A OE 041C 05 041F 0420
0420

870

.SBTTL INSERT I/0 PACKET IN QUEUE BY PRIORITY

871 ;+

872 EXE$INSERTIRP - INSERT 1/0 PACKET IN QUEUE BY PRIORITY

873

874 THIS ROUTINE IS CALLED TO INSERT AN 1/0 PACKET IN A SPECIFIED QUEUE BY

875 PRIORITY.

876

877 INPUTS:

878

879

R2 = ADDRESS OF QUEUE LISTHEAD.

880

R3 = ADDRESS OF I/O PACKET.

881

882

CURRENT IPL MUST BE THE FORK LEVEL OF THE RESPECTIVE DRIVER PROCESS

883

OR HIGHER.

884

885 OUTPUTS:

886

887

THE 1/0 PACKET IS INSERTED IN THE SPECIFIED QUEUE BY PRIORITY ANO

888

THE 'Z' CONDITION CODE IS RETURNED TO THE CALLER.

889 890

, z,

ENTRY WAS FIRST ENTRY IN THE QUEUE.

891 892

z I

I

0 -:;..

ENTRIES WERE ALREADY IN THE QUEUE.

893

894

R2 AND R3 ARE PRESERVED ACROSS THE CALL.

895

896

897 EXE$INSERTIRP::

;INSERT I/O PACKET IN QUEUE BY PRIORITY

898

MOVL R2,Rl

;COPY LISTHEAO ADDRESS

899 10$: 900

MOVL CMPL

IRP$L IOQBL(R1),R1
R2,R1~

;GET ADDRESS OF NEXT ENTRY ;END OF QUEUE?

901

BEQL

20$

;IF EQL YES

902

CMPB

IRP$8 PRI(R3),IRP$B PRI(R1) ;NEW ENTRY PRIORITY GREATER?

903

BLSSU 10$ -

-

;IF LSS YES

904 20$:

INSQUE I~P$L_IOQFL(R3),IRP$L_IOQFL(R1) ;INSERT PACKET IN I/O QUEUE

905

RSB

906

907

.END

SYSQlOREQ Symbol table
ACB$B RMOD ACB$L-AST ACB$L-ASTPRM ACB$L-PID ACB$M-NODELETE ACB$M-QUOTA ACB$V-QUOTA
ACCV IO
~LLOC
AQB$L ACPPID ASTADR ASTPRM BUG$ NONEXSTACP CCB$B AMOD CCB$B-STS CCB$C-LENGTH CCB$L-UCB CCB$L-WIND CCB$V-LOGCHKDON CCB$V-PHYCHKDON CCB$V-PROCHKDON CCB$W-IOC CDRP$L_IOQFL CHAN CH KOON CLREF CTL$GL CCBBASE CTL$GL-F11BXQP CTL$GL-PHD CTL$GW-CHINDX DACSPND DDT$L ALTSTART DDT$L-FDT DDT$W-DIAGBUF DEV$M-FOD DEV$M-SHR DEV$M-SPL DEV$V-FOD DEV$V-FOR DEV$V-MNT DEV$V-SHR DEV$V-SPL
DIREC'f DYN$C_IRP EFN ERROR ERRORS EXE$ABORTIO
EXE$ALLOCBUF EXE$ALl:.OCIRP EXE$ALTQUEPKT EXE$BLDPKTGSR EXE$BLDPKTGSW EXE$BLDPKTSWPR EXE$BLDPKTSWPW EXE$BUILDPKTR EXE$BUILDPKTW

- QUEUE I/0 REQUEST SYSTEM SERVICE

3-JUN-1984 15:39:30 VAX-11 ~aero V03-0l

Page 24

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(1)

= 00000008 = 00000010 = 00000014 = O-OOOOOOC = 00000020 = 00000040 = 00000006

00000124 R

01

= = =

0000013C
oooooooc
00000014
00000018

R

01

********
= 00000009 = 00000008 = 00000010 = 00000000

x

01

= = = = = = =

00000004 00000003 00000004 00000002 OOOOOOOA FFFFFFAO 00000008

OOOOOOC8 R

01

00000036 R

01

******** x 01 ******** x 01 "'******* x 01 ******** x 01

00000048 R
= 0000001C = 00000008 = 00000014 = 00004000

01

= =

00010000 00000040

= OOOOOOOE

= 00000018

= 00000013

= 00000010

= 00000006

= 00000168 R = OOOOOOOA
00000004

01

00000127 R

01

00000045 R

01

00000360 RG

01

******** x 01 ******** x 01

00000387 RG

01

00000204 RG

01

000002DC RG

01

000002E4 RG

01

000002EC RG

01

000002FC RG

01

000002F4 RG

01

EXE$CHKLOGACCES EXE$CHKPHYACCES EXE$CHKRDACCES EXE$CHKWRTACCES
EXE$FINISHlO EXE$FINISHlOC EXE$INSERTIRP EXE$INSlOQ EXE$QIO EXE$QIOACPPKT
EXE$QIODRVPKT EXE$QIORETURN EXE$QXQPPKT EXE$SNGLEQUOTA F118$L_DISPATCH FDTACT FUNC GTPKT ILLIO
l0$M FCODE IO$ ACPCONTROL 10$-DEACCESS IO$-LOGICAL 10$-PHYSI CAL 10$-READHEAD IO$-READLBLK IO$-READPBLK IO$-READPROMPT IO$-READTRACKD I0$-READVBLK IO$-REREADN 10$-REREADP I0$-TTVREADALL IO$-TTVREADPALL 10$-VIRTUAL
IO$-WRITECHECK 10$-WRITECHECKH I0$-WRITEHEAD 10$-WR ITEL8LK
l0$-WRITEP8LK 10$-WRITERET 10$-WRITETRACKD 10$-WR ITEV8LK
lOC$GL IRPFL lOC$GL-PSBL
lOC$INITIATE lOC$QNXTSEG1 IOSB
IO TYPE IPL$ ASTDEL IPL$-IOPOST IPL$-SVNCH
IRP$B EFN IRP$B-PRI IRP$B-RMOD IRP$B-TYPE IRP$C-LENGTH

******** x 01 ******** x 01 ******** x 01 ******** x 01

0000036F RG

01

00000360 RG

01

00000409 RG

01

000003EB RG

01

00000068 RG

01

0000039A RG

01

00000383 RG

01

00000389 RG

01

000003CA RG

01

= =
=

********
00000008 00000010
oooooooc

x

01

00000170 R

01

OOOOOlOC R

01

== 0000003F 00000038

= =

00000034 0000002F

== 0000001F OOOOOOOE

= 00000021

= oooooooc

== 00000037 00000010

= =

00000031 00000016

= 00000017

= 0000003A

= =

00000038 0000003F

= OOOOO"OOA == 00000018
00000000
= 00000020

= 00000008
= 00000018 = OOOOOOOF = 00000030

******** x 01

******** x 01

******** x 01

= =

********
00000010

=

00000008 00000002

x

01

== 00000004

=

00000008 00000022

== 00000023 00000008

== OOOOOOOA OOOOOOC4

SYSQIOREQ Symbol table
IRP$L ABCNT IRP$L-ARB IRP$L-AST IRP$L -ASTPRM IRP$L-BCNT IRP$L-DIAGBUF IRP$L-FQFL I RP$L-IOQ6L IRP$L-IOQFL IRP$L-IOSB IRP$L-MEDIA IRP$L-06CNT IRP$L-PID IRP$L-SEGV6N IRP$L-SEQNUM IRP$L-SVAPTE IRP$L-UCB IRP$L-WIND IRP$M-6UFIO IRP$M-DIAG6UF IRP$M-FUNC IRP$M-PAGIO IRP$M-PHYSIO IRP$M-SWAPIO IRP$M-VIRTUAL IRP$V-FUNC IRP$W-60FF IRP$W-CHAN IRP$W-FUNC IRP$W-SIZE IRP$W-STS
IVCHAN LEGAL MASKH MAS KL NALLOC NOC NT NODCNT NOIOS6 NOSE CT NOT FILE DEV NOT-FILE-DEV6 NSPOOL -
OFF LI NE OK Pl P2 P3 P4 P5 P6 PCB$8 PRIS PCB$L-ARB PCB$L-EFCS PCB$L-EFWM PCB$L-PID
PCB$Q=PRIV

- QUEUE I/0 REQUEST SYSTEM SERVICE

3-JUN-1984 15:39:30 VAX-11 Macro V03-01

Page 25

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SYS.SRC]SYSQIOREQ.(1)

= =

00000040 00000058

= 00000010

= = =

00000014 00000032 0000004C

= = =

00000060 00000004 00000000

= 00000024

= 00000038

= =

00000044
oooooooc

= = =

00000048 00000050 0000002C

= 0000001C

== 00000018

= =

00000001 00000080 00000002

= =

00000004 00000100

= 00000040 = 00000010 = 00000001

== 00000030 00000028

= 00000020

= =

00000008 0000002A

00000036 R
= 00000000 = 00010001 = 0100ACOO

01

00000146 R

01

OOOOOOFA R

01

00000166 R

01

OOOOOOE8 R

01

00000188 R

01

00000010 R

01

00000069 R

01

OOOOOOC3 R

01

00000113 R

01

00000170 R
= OOOOOOlC = 00000020

01

= 00000024

= 00000028
= 0000002C = 00000030 = 0000002F = 0000008C = 00000050

= 0000004~
= 00000060 = 00000084

PCB$W ASTCNT PCB$W-B IOCNT PCB$W-DIOCNT PHD$L-PSTBASOFF
PMS$GL IOPFMPD6 PMS$GL-IOPFMSEQ
PMS$START_RQ PR$ IPL PR$-SIRR
PRI$ RESAVL PR IOSB PRIVERR PRV$V DIAGNOSE PRV$V-LOG IO PRV$V-PHY-IO
PSL$C-KERNEL PSL$S-PRVMOD
PSL$V=PRVMOD QIO QIORETURN
READ ACCESS RSN$-ASTWAIT
SCH$CLREF SCH$GL RESMASK SCH.$GQ-MWA IT
SCH$POSTEF SCH$QAST SCH$WAIT SCH$WAKE SEC$L WINDOW SECTION SPOOL SS$ ACCVIO SS$-DEVOFFLI NE SS$-EXQUOTA
SS$-! LLIOFUNC SS$-IVCHAN SS$-NOPRIV SS$-NORMAL
SUCCES UC6$6 FIPL UCB$L-AM6 UC6$L-DDT UCB$L-DEVCHAR UCB$L-IOQFL UCB$L-OPCNT UCB$L-VCB UCB$V-BSY UC8$V-ONLINE UCB$W-QLEN UCB$W-STS
VCB$L=AQB VCHAN WCB$L ORGUCB WCB$L-READS WCB$L -WRITES
WRITE=ACCESS

= = = =

00000038 0000003A 0000003E 00000020

********

********

=

********
00000012

x x x

01 01 01

= =

00000014 00000002

OOOOOODA R

01

00000042 R

01

= 00000006

= = =

00000007 00000016 00000000

= =

00000002 00000016

0000006D R

01

0000036C R

01

= 00000000 R 00000001

01

******** ********

x x

01 01

******** x 01

******** x 01

******** x 01

******** x 01

= o*o**o*o*o*o*o*c x 01

0000014F R

01

= = = = =

0000005E
oooooooc
00000084
0000001C
OOOOOOF4
0000013C

R

01

== 00000024 00000001

00000177 R

= 00000006

= =

00000060 00000088

= 00000038

= 0000004C

01

= 00000070

= =

00000034 00000008

= 00000004

= 0000006A

= 00000064

= 00000010

00000078 R

01

= 00000010

= =

00000024 00000028

00000008 R

01

SVSQIOREQ Symbol table

- QUEUE I/O REQUEST SYSTEM SERVICE

3-JUN-1984 15:39:30 VAX-11 Macro V03-01

Page 26

12-MAR-1982 17:19:50 DISK$VMSMASTER:[SVS.SRC]SVSQIOREQ.(1)

XQP

000003CO R

01

PSECT name

Allocation

+--~-------------+
! Psect synopsis !
+--------------~-+
PSECT No. Attributes

ABS . BLANK . $ABS$

00000000 00000420 00000000

0.) 00 1056.) 01
0.) 02

0.) NOPIC USR CON ABS LCL NOSHR NOEXE NORD NOWRT NOVEC BYTE

1.) NOP IC USR CON REL LCL NOSHR EXE RD

WRT NOVEC BYTE

2.) NOPIC USR CON ABS LCL NOSHR EXE RD WRT NOVEC BYTE

+---------------~--------+
+! -P-e-r-f-o-r-m-a-n--c-e--i-n-d-i-c-a-t-o-r-s-+!

Phase
Initialization Command processing Pass 1 Symbol table sort Pass 2 Symbol table output Psect synopsis output Cross-reference output Assembler run totals

-P-a-g-e --f-a-u-l-t-s 9
77 608
0 250
29 6 0
983

-CP-U---T-im--e
00:00:00.09 00:00:00.67 00:00:26.37 00:00:03.89 00:00:06.58 00:00:00.21 00:00:00.03 00:00:00.00 00:00:37.87

Elapsed Time
-------------
00:00:00.54 00:00:06.51 00:02:38.99 00:00:18.56 00:00:34.76 00:00:00.37 00:00:00.14 00:00:00.00 00:03:39.88

The working set limit was 1650 pages. 13Q110 bytes (272 pages) of vi~tual memory were used to buffer the intermediate
There were 140 pages of symbol table space allocated to hold 2591 non-local and 1039 source lines were read in Pass 1, producing 18 object records in Pass 2. 42 pages of virtual memory were used to define 41 macros.

code. 27 local

symbols.

+--------------------------+ +! -M--a-cr-o---li-b-r-a-r-y---s-t-a-t-i-s-t-i-c-s-+!

Macro library name

Macros defined

$255$DUA28:[SVS.OBJ]LIB.MLB;1

26

-$255$DUA28:[SVS~IB]STARLET.MLB;2

11

TOTALS (all libraries)

37

2723 GETS were required to define 37 macros.

There were no error~. warnings or information messages.

MACRO/LIS=LIS$:SYSQIOREQ/OBJ=OBJ$:SYSQIOREQ MSRC$:SYSQIOREQ/UPDATE=(ENH$:SYSQIOREQ)+EXECML$/LIB

SYSQIOFDT

SYSQIOFDT Table of contents

( 1)

97

( 1)

148

( 1)

181

( 1)

213. 1

( 1)

214

( 1)

267

( 1)

310

( 1)

400

(2)

438

(2)

474

(2)

513

(2)

587

(2)

652

(2)

692

(2)

735

(2)

773

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-01
PLACE PROCESS IN I/O RESOURCE WAIT ONE PARAMETER FUNCTION PROCESSING ZERO PARAMETER FUNCTION PROCESSING LOCAL DIS~ VALID FUNCTION PROCESSING READ AND WRITE FUNCTION PROCESSING READ AND WRITE FUNCTION BUFFER CHECK AND LOCK ROUTINES READ AND WRITE BUFFER CHECK AND LOCK AND RETURN ROUTINES BACKOUT A QIO CHECK BUFFER ACCESSIBILITY FOR READ FUNCTION CHECK BUFFER ACCESSIBILITY FOR WRITE FUNCTION CHECK BUFFER ACCESSIBILITY FOR READ FUNCTION AND RETURN CHECK BUFFER ACCESSIBILITY FOR WRITE FUNCTION AND RETURN SET DEVICE MODE AND CHARACTERISTICS FUNCTIONS (AT FDT LEVEL) SET DEVICE MODE AND CHARACTERISTICS FUNCTIONS SENSE DEVICE MODE AND CHARACTERISTICS FUNCTIONS CARRIAGE CONTROL INTERPRETATION

Page 0

SYSQIOFDT V03-009
;WMC0001
-1
;WMC0001 ;WMC0001 ;WMCOOOl ;ROW0259 ;ROW0259 ;ROW0259 ;ROW0259 ;ROW0259 ;ROW0259 ;ROW0259 ;ROW0259 ;SSA00002 ;SSA00002 ;SSA00002 ;SSA00002 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;PRD0030 ;PRD0030 ;PRD0030 ;PRD0030 ;ROW0192

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-01

Page 1

24-APR-1982 15:51:12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(l)

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

1

. TITLE SYSQIOFDT - SYSTEM SERVICE QUEUE I/O FDT SUBROUTINES

.1

. !DENT 'V03-009'

3

4 5

;' ****************************************************************************

6 7

·;' **

COPYRIGHT (c) 1978, 1980, 1982 BY

* 8 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS.

*
* *

9 ;*

10 11 12 13 14

; ; ; ; ;

* * * * *

15 ; *

16 17

; ;

* *

18 ; *

19 20 21

; ; ;

* * *

22 ; *

23 ;*

ALL RIGHTS RESERVED.
THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.
THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.

* * * * * * * * * * * * * * *

24
25 26

;;; ********************************************************************************

27

28 D. N. CUTLER 15-SEP-76

29

30 MODIFIED BY:

31

· 1

V03-009 WMCOOOl

Wayne Cardoza

23-Apr-1984

. 2

Add a comment warning about general use of EXE$IORSNWAIT.

.3

.4

V03-008 ROW0259

Ralph 0. Weber

20-NOV-1983

.5

For IO$ PACKACK operations passing through EXE$LCLDSKVALID,

.6

always allow the PACKACK request to go to the driver when

. 7

UCB$V VALID in UCB$L STS is clear, regardless of any other

.8

conditions. However7 UCB$V LCL VALID and UCB$B ONLCNT must

.9

still be correctly adjusted~ This is believed to allow

. 10

PACKACKs to fail and be retried.

. 11

. 12

V03-007 SSA00002

Stan Amway

30-SEP-1983

.13

Modified BACKOUT QIO to call new routine PMS$ABORT RQ

. 14

to insure complete traces of I/O activity.

-

.15

.16

V03-'006 ROW0224

Ralph 0. Weber

15-SEP-1983

. 17

Change EXE$LCLDSKVALID to alter UCB$B ONLCNT either up or down

. 18

only if the local processor has not already performed such an

.19

alteration. Use UCB$V LCL VALID in UCB$L STS to determine

.20

state of device with respect to the local-processor.

. 21

.22

V03-005 PRD0030

Paul R. Destefano

09-Sep-1983

.23

Added EXE$LCLDSKVALID routine to track disk online count

.24

and local valid status.

.25

.26

V03-004 ROW0192

Ralph 0. Weber

20-AUG-1983

SYSQIOFDT V03-009
;ROW0192 ;ROW0192 ;ROW0192 ;ROW0192 ;ROW49973 ;ROW49973 ;ROW49973 ;ROW49973 ;ROW49973 ;ROW49973 ;ROW49973 ;ROW49973 ;PRD0030 ;PRD0030 ;PRD0030 ;PRD0030 ;PRD0030 ;PRQ.0030 ;PRD0030 -35
;ROW49973 ;ROW49973 ;ROW49973 ;ROW49973 ;ROW49973 ;ROW49973 ;ROW49973 -4

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-01

Page 2

24-APR-1982 15:51:12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(1)

00000000
00000004
00000008
oooooooc
00000010
00000014

0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000
0000 0000 0000 0000 0000

. 27

Fix EXE$WRITE and EXE$READ to allow longword byte counts .

. 28

This should allow virtual disk transfers to exceed 65K bytes .

.29

(This wil 1 be distributed in V3.5 as SYS ECO 65.)

.30

.31

V03-003 ROW49973

Ralph 0. Weber

29-0CT-1982

.32

Change calling requirements for EXE$IORSNWAIT from an entry

.33

IPL of IPL$ SYNCH to an entry IPL of IPL$ ASTDEL. Have the

.34

call to BACKOUT QIO made at IPL$ ASTDEL. -Then, raise to

.35

IPL$ SYNCH to perform scheduler operations. This eliminates

.36

undesirable page faults at an IPL above' IPL$ ASTDEL when

. 37

BACKOUT_QIO references a channel control block .

.38

.39

V03-002 ROW49577

Ralph 0. Weber

27-SEP-1982

.40

ECO 25 Change EXE$SETCHAR and EXE$SETMODE to return SS$ ILLIOFUNC if

.41

UCB$8 DEVCLASS equals DC$ DISK. This is to prohibit SETMODE

.42

(set ~ode) and SETCHAR (set characteristics) functions on disk

.43

devices. On disk devices, those functions overwrite the disk

.44

geometry information which results in abbarant system

.45

behavior.

67

68 SYSTEM SERVICE QUEUE I/O FUNCTION DECISION TABLE SUBROUTINES

69

70 MACRO LIBRARY CALLS

71

72

73

$ACBDEF

;DEFINE ACB OFFSETS

74

$CCBDEF

;DEFINE CCB OFFSETS

.1

$DC DEF

;DEFINE DEVICE CLASSES

.2

$DE\/DEF

;DEFINE DEVICE CHARACTERISTICS

. 3

$IODEF

;DEFINE I/O FUNCTION CODES

.4

$IPLDEF

;DEFINE SYSTEM IPLS

.5

$IRPDEF

;DEFINE IRP OFFSETS

.6

$PCBDEF

;DEFINE PCB VALUES

. 7

$PRDEF

;DEFINE PROCESSOR REGISTERS

79

$SSDEF

;DEFINE SYSTEM STATUS VALUES

80

$UCBDEF

;DEFINE UCB OFFSETS

81

$VADEF

;DEFINE VIRTUAL ADDRESS FIELDS

82

$SF DEF

;DEFINE CALL FRAME

83

84

85 LOCAL SYMBOLS

86

87 ARGUMENT LIST OFFSET DEFINITIONS

88

89

90 Pl=O

FIRST FUNCTION DEPENDENT PARAMETER

91 P2=4

SECOND FUNCTION DEPENDENT PARAMETER

92 P3=8

THIRD FUN~TION DEPENDENT PARAMETER

93 P4=12

FOURTH FUNCTION DEPENDENT PARAMETER

94 P5=16

FIFTH FUNCTION DEPENDENT PARAMETER

95 P6=20

SIXTH FUNCTION DEPENDENT PARAMETER

SYSQIOFDT V03-009
;WMCOOOl ;WMC0001 ;WMCOOOl ;WMC0001 ;WMCOOOl ;WMCOOOl ;WMC0001 ;ROW49973 -4
ROW49973 ROW49973 ROW49973 ROW49973 3

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-0l

Page 3

PLACE PROCESS IN 1/0 RESOURCE WAIT

24-APR-1982 15:51:12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(1)

21 24 A4 OA 51
OOf 5
4C A4 6E OOOO'CF SE
5C 08 AD 5E 50
52 OOOO'CF FFDA'
FFD7'

0000 0000 0000 0000 0000 0000 0000 0000 0000 OOOQ 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 000()
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 EO 0000 DD 0005 30 0007 OOOA 9A OOOD E2 0011 00 0016 DO 0017 DO 0016 7E 001E 31 0023 0026 0026 0026 31 0026

97

.SBTTL PLACE PROCESS IN I/O RESOURCE WAIT

98 ;+

99 EXE$IORSNWAIT - PLACE PROCESS IN I/O RESOURCE WAIT

100

101 FUNCTIONAL DESCRIPTION:

10:2

103 104

THIS ROUTINE IS USED BY FDT PROCEEDURES TO RE-START A QIO REQUEST AFTER A RESOURCE WAIT. THE CURRENT I/O IS CLEANED up'~ND THE PRE-QIO

105 STACK IS SET UP. THEN THE PROCESS IS PLACED IN THE WAIT STATE.

106 IF THE PROCESS DOES NOT HAVE RESOURCE WIAT ENABLED, THE I/O IS ABORTED

107 WITH A STATUS SPECIFIED BY THE CALLER.

108

.1 **CAUTION** THIS ROUTINE IS NOT CALLED AT SYNCH SO THE RESOURCE MAY ALREADY

. 2 HAVE BEEN DECLARED AVAILABLE. THIS ROUTINE SHOULD ONLY BE USED FOR RESOURCES

. 3 WHICH ARE GUARANTEED TO BE PERIODICALLY (TIMESCHDL) DECLARED AVAILABLE .

.4

. 5

.6 IMPLICIT INPUTS:

.7

. 8

CALLER MUST BE AT IPL=IPL$_ASTDEL

113

114 INPUTS:

115 116 117

= RO STATUS TO RETURN IF NO WAIT REQUESTED = Rl RESOURCE NUMBER TO WAIT FOR

118 119

= R3 = ADDRESS OF CURRENT PACKET
R4 ADDRESS OF THE CURRENT PCB

120

R6 = ADDRESS OF CHANNEL CONTROL BLOCK

121

122 OUTPUTS:

123

124

RO,R1 ,R2,R3 ARE USED.

125

126

CONTROL IS TRANSFERED TO EXE$ABORTIO IF NO RESOURCE WAIT

127

HAS BEEN REQUESTED,

128

129

OR TO SCH$WAIT IF RESOURCE WAIT IS REQUESTED.

130

131

132

133 EXE$IORSNWA1 T: :

;PLACE PROCESS IN RESOURCE WAIT

134

BBS

#PCB$V SSRWAIT,PCB$L STS(R4),50$ ;BR IF NO WAIT REQUEST

.1

PUSHL Rl

-

- ;REMEMBER RESOURCE NUMBER

. 2

BSBW

BACKOUT QIO

;CLEANUP QIO

. 3

SETI PL #IPL$ SYNCH

;SYNCHRONIZE WITH SCHEDULER DATABASE

.4

MOVZBL (SP),PCB$L EFWM(R4)

;SET UP WAIT MARKER

138

BBSS

(SP)+,WASCH$GL_RESMASK,30$ ;INDICATE PROCESS IS WAITING

139 30$:

MOVL

SF$L SAVE AP(FP),AP

RESTORE PRE-QIO ARGUMENT LIST POINTER

140

MOVL

FP,SP

-

CLEAN STACK BACK TO CALL FRAME

141

MOVAQ WASCH$GQ MWAIT,R2

ADDRESS WAIT LIST

142

BRW

SCH$WAIT-

PLACE PROCESS IN WAIT STATE

143

144 NO RESOURCE WAIT REQUESTED - ABORT THE I/O

145 146

5' 0$:

BRW

EXE$ABORTIO

SYSQIOFDT V03-009

38 A3

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-01

Page 4

ONE PARAMETER FUNCTION PROCESSING

24-APR-1982 15:51 :12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(1)

0029 148

.SBTTL ONE PARAMETER FUNCTION PROCESSING

0029 149 ;+

0029 150 ; EXE$0NEPARM - ONE PARAMETER FUNCTION PROCESSING

0029 151 ;

0029 152 ; THIS ROUTINE IS CALLED FROM THE FUNCTION DECISION TABLE DISPATCHER TO

0029 153 ; PROCESS A ONE PARAMETER FUNCTION THAT REQUIRES NO SPECIAL CHECKING.

0029 154 ;

0029 155 ; INPUTS:

0029 0029

156 ; 157 ;

= RO SCRATCH.

0029 158 ;

Rl = SCRATCH.

0029 159 ;

R2 = SCRATCH.

0029 160 ;

R3 =ADDRESS OF I/O REQUEST PACKET.

0029 0029 0029 0029 0029 0029

161 ;
162 ; 163 ; 164 ; 165 ; 166 ;

= R4 = CURRENT PROCESS PCB ADDRESS.
R5 ASSIGNED DEVICE UCB ADDRESS.
= R6 ADDRESS OF CCB. = R7 I/O FUNCTION CODE BIT NUMBER. = RB FUNCTION DECISION TABLE DISPATCH ADDRESS. = R9 SCRATCH.

0029 0029 0029

167 ; 168 ; 169 ;

= RlO = SCRATCH.
Rl 1 SCRATCH.
AP = ADDRESS OF FIRST FUNCTION DEPENDENT PARAMETER.

0029 170

0029 171 ; OUTPUTS:

0029 172 ;

0029 173 ; ***TBS***

0029 174 ;

0029 175

0029 176

.ENABL LSB

0029 177 EXE$0NEPARM::

;ONE PARAMETER FUNCTION PROCESSING

6C DO 0029 178

MOVL

Pl(AP),IRP$L_MEDIA(R3) :STORE PARAMETER IN MEDIA ADDRESS

03 11 0020 179

BRB

10$

SYSQIOFDT V03-009

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-01

Page 5

ZERO PARAMETER FUNCTION PROCESSING

24-APR-1982 15:51:12 DISK$VMSMASTER:[SYS.SRC]SVSQIOFDT.(1)

002F 002F 002F 002F 002F 002F 002F 002F 002F 002F 002F
002F 002F 002F
002F 002F 002F 002F
002F 002F 002F 002F 002F 002F 002F
002F 002F 002F 002F 38 A3 04 002F FFCB' 31 0032
0035

181

.SBTTL ZERO PARAMETER FUNCTION PROCESSING

182 ;+

183 ; EXE$ZEROPARAM - ZERO PARAMETER FUNCTION PROCESSING

184 ;

185 ; THIS ROUTINE IS CALLED FROM THE FUNCTION DECISION TABLE DISPATCHER TO

186 ; PROCESS A ZERO PARAMETER FUNCTION THAT REQUIRES NO ADDITION CHECKING.

187 ;

188 ; INPUTS:

189 ; 190 ; 191 ; 192 ; 193 ; 194 ; 195 ; 196 ; 197 ; 198 ; 199 ; 200 ; 201 ; 202 ;

RO Rl R2 R3

= SCRATCH. = SCRATCH. = SCRATCH. = ADDRESS OF

I/O

REQUEST

PACKET.

R4 = CURRENT PROCESS PCB ADDRESS.

R5 = ASSIGNED DEVICE UCB ADDRESS.

R6 = ADDRESS OF CCB.

R7 = I/O FUNCTION CODE BIT NUMBER.

RS = FUNCTION DECISION TABLE DISPATCH ADDRESS.

= R9 = SCRATCH. = RlO SCRATCH.
R11 SCRATCH.

AP = ADDRESS OF FIRST FUNCTION DEPENDENT PARAMETER.

203 ;

204 ; OUTPUTS:

205 ;

206 ; ***TBS***

207

208

209 EXE$ZEROPARM::

ZERO PARAMETER FUNCTION PROCESSING

210

CLRL

IRP$L MEDIA(R3)

CLEAR PARAMETER

211 10$:

BRW

EXE$QIODRVPKT

QUEUE I/0 PACKET TO DRIVER

212

.DSABL LSB

SYSQIOFDT V03-009
;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0259 ;ROW0259 ;ROW0259 ;ROW0224 ;ROW0224
;R0~0224
;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0'224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0259 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0259 ;ROW0259 ;ROW0259 ;ROW0259 ;ROW0259 ;ROW0259 ;ROW0259 ;ROW0259 ;ROW0259 ;ROW0224

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-0l

Page 6

LOCAL DISK VALID FUNCTION PROCESSING

24-APR-1982 15:51:12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(1)

0035 0035 0035 0035 0035 0035 0035 0035 0035 0035 0035 0035 0035
0035 0035 0035 0035 0035 0035 0035 0035 0035 0035 0035 0035
0035 0035
0035 0035 0035 0035 0035 0035 0035 0035
0035 0035 0035 0035 0035 08 57 91 0035 1B 12 0038 OE 64 A5 11 E2 003A 003F 003F OOAE C5 96 0042 01 OOAE C5 91 0046 05 13 004B 11 64 A5 OB EO 004D 0052 0052 0052 FFAB' 31 0052 0055 0055 0055 0055

.1

.SBTTL LOCAL DISK VALID FUNCTION PROCESSING

. 2 ;+

. 3 EXE$LCLDSKVALID - LOCAL DISK VALID FUNCTION FROCESSING

.4

.5

This routine is cal led from the function decision table dispatcher to

.6

process functions which affect the online count and local valid status

. 7

of a disk.

.8

.9

If the function is the first local pack acknowedge function

. 10

(UCB$V LCL VALID is clear), the online count, UCB$B ONLCNT, is

.11

incremented and UCB$V LCL VALID is set. If the onlTne count was

. 12

previously zero, the I/O packet is queued to the driver for further

. 13

PACKACK processing. If the online count was not previously zero but

.14

the UCB$V VALID bit is clear, the I/O packet is also queued to the

. 15

driver for further processing.

.16

. 17

If the function is the first local available or unload function

. 18

(UCB$V LCL VALID is set), the onl ine count, UCB$B ONLCNT, is

. 19

decremented and UCB$V LCL VALID is cleared. If the decremented online

.20

count is zero, the I/0 packet is queued to the driver for further

. 21

AVAILABLE or UNLOAD processing .

.22

.23 INPUTS:

.24

.25

RO = SCRATCH.

.26

R3 =ADDRESS OF I/O REQUEST PACKET.

.27 .28

= R5 = ASSIGNED DEVICE UCB ADDRESS.
R7 I/O FUNCTION CODE BIT NUMBER.

.29

.30 OUTPUTS:

.31

.32

UCB$B ONLCNT is altered to reflect the number of hosts which have set

. 33

the drive online (i.e. issued PACKACK functions to the drive) .

.34

.35

UCB$V LCL VALID in UCB$L STS is set for PACKACK functions and cleared

. 36

for AVAILABLE or UNLOAD functions .

.37

.38

.39 EXE$LCLDSKVALID::

LOCAL DISK VALID FUNCTION PROCESSING.

.40

.41

CMPB

R7, #IO$ PACKACK

.42

BNEQ

50$

-

Pack acknowledge function? Branch if not a PACKACK.

.43

BBSS

#UCB$V LCL VALID, -

Is this the first local PACKACK?

.44

UCB$L STS(R5), 20$

Branch if not first local PACKACK.

.45

SETI PL #IPL$-SCS

Synchronize with the MSCP server.

.46

INCB

UCB$B-ONLCNT(R5)

Increment online count.

.47

CMPB

UCB$B-ONLCNT(R5), #1

Is this the first cluster PACKACK?

.48

BEQL

30$ -

Branch if first cluster PACKACK.

.49 20$:

BBS

#UCB$V VALID, -

Is the volume already valid?

.50

UCB$L STS(R5), 80$

Branch if volume is already valid.

. 5,

.52

.53 30$:

BRW

EXE$QIODRVPKT

For f i rs t c I us t er PAC KA CK , 1as t

.54

cluster UNLOAD or AVAILABLE, or

.55

truely invalid volume, ask driver

.56

to really perform the function.

.57

SVSQIOFDT V03-009
;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224 ;ROW0224

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-01

Page 7

LOCAL DISK VALID FUNCTION PROCESSING

24-APR-1982 15 :51: 12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(1)

0055 09 64 A5 11 E5 0055
005A 005A OOAE C5 97 0050 EF 13 0061 0063 0063 0063 50 01 3C 0063 FF97' 31 0066

. 58 50$: .59 . 60 . 61 . 62 .63 .64 .65 80$: .66 .67 .68

BBCC
SETI PL DECB BEQL

#UCB$V LCL VALID, UCB$L STS(R5), 80$ #IPL$-SCS
UCB$B=ONLCNT(R5) 30$

MOVZWL #SS$_NORMAL, RO

BRW

EXE$FINISHIOC

UNLOAD and AVAILABLE come here . First local UNLOAD or AVAILABLE? Branch if not first . Synchronize with MSCP server . Decrement online count . Branch if the online count is zero.
For requests which are not being passed on to the driver. Set normal completion status. Finish I/0 operation.

SYSQIOFDT V03-009
;ROW0192 -1

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-19B4 15:36:44 VAX~11 Macro V03-01

Page B

READ AND WRITE FUNCTION PROCESSING

24-APR-19B2 15:51:12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(1)

52 A1 'AF 04
52 9B'AF 04 2A A3 01
52 9E'AF 3C A3 OC AC
06 00 lF 20 A3
04 15 20 A3 51 04 AC 05 50 6C 62 FF65 1

0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 0069 DE 0069 11 006D 006F DE 006F E3 0073 007B DE 007B DO 007C ED OOBl OOB4 15 OOB7 A2 OOB9 DOBB DO OOBD 13 0091 DO 0093 16 0096 31 0098 0099

214

.SBTTL READ AND WRITE FUNCTION PROCESSING

215 +

216 EXE$READ - READ FUNCTION PROCESSING

217 EXE$WRITE - WRITE FUNCTION PROCESSING

21B EXE$MODIFY - MODIFY FUNCTION PROCESSING

219

220 THESE ROUTINES ARE CALLED FROM THE FUNCTION DECISION TABLE DISPATCHER TO

221 PROCESS A READ OR WRITE PHYSICAL OR LOGICAL FUNCTION.

222 EXE$MODIFY IS USED FOR FUNCTIONS THAT READ AND WRITE MEMORY.

223

224 INPUTS:

225 226 227

= RO SCRATCH. = Rl SCRATCH.

228

R2 = SCRATCH.

229

R3 =ADDRESS OF I/O REQUEST PACKET.

230

R4 = CURRENT PROCESS PCB ADDRESS.

231

R5 = ASSIGNED DEVICE UCB ADDRESS.

232

R6 = ADDRESS OF CCB.

233

R7 = I/O FUNCTION CODE BIT NUMBER.

234 235

= RB = FUNCTION DECISION TABLE DISPATCH ADDRESS.
R9 SCRATCH.

236

RlO = SCRATCH.

237

R11 =SCRATCH.

23B

AP = ADDRESS OF FIRST FUNCTION DEPENDENT PARAMETER.

239

240 OUTPUTS:

241

242 ***TBS***

243 ' 244

245

.ENABL LSB

246 EXE$MODIFY::

;MODIFY FUNCTION PROCESSING

247

MOVAL B/\EXE$MODIFYLOCK,R2

;SET ADDRESS OF BUFFER CHECK ROUTINE

248

BRB

5$

249 EXE$READ::

;READ FUNCTION PROCESSING

250

MOVAL B/\EXE$READLOCK,R2

;SET ADDRESS OF BUFFER CHECK ROUTINE

251 5$:

BBCS

#IRP$V FUNC,IRP$W STS(R3) ,10$ ;SET READ FUNCTION STATUS

252 EXE$WRITE::

-

;WRITE FUNCTION PROCESSING

253

MOVAL B"EXE$WRITELOCK,R2

;SET ADDRESS OF BUFFER CHECK ROUTINE

254 10$: 255 256 257

MOVL CMPZV
BLEQ

P4(AP),IRP$B CARCON(R3) ;INSERT CARRIAGE CONTROL BYTE

#IRP$V FCODE~#IRP$S FCODE,- ;PHYSICAL I/O FUNCTION?

IRP$W FUNC(R3),#IO$-PHYSICAL ;

20$ -

-

;IF LEQ YES

25B

SUBW

#IO$ READLBLK-IO$ READPBLK,- ;CONVERT TO PHYSICAL FUNCTION

259

IRP$W FUNC ( R3), -

.1 20$:

MOVL

P2(AP),Rl

GET NUMBER OF BYTES TO TRANSFER

261

BEQL

30$

IF EQL NONE

262

MOVL

Pl(AP),RO

GET STARTING VIRTUAL ADDRESS OF TRANSFER

263

JSB

(R2)

CHECK BUFFER AND LOCK IN MEMORY

264 30$:

BRW

EXE$QIODRVPKT

QUEUE I/O PACKET TO DRIVER

265

.DSABL LSB

SYSQIOFDT V03-009

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-01

Page 9

READ AND WRITE FUNCTION BUFFER CHECK AND 24-APR-1982 15:51:12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(l)

009B 267

.SBTTL READ AND WRITE FUNCTION BUFFER CHECK AND LOCK ROUTINES

009B 268 ; +

009B 269 EXE$READLOCK - CHECK BUFFER FOR READ ACCESSIBILITY AND LOCK

009B 270 EXE$WRITELOCK - CHECK BUFFER FOR WRITE ACCESSIBILITY AND LOCK

009B 271 EXE$MODIFYLOCK - CHECK BUFFER FOR READ ACCESSIBILITY AND LOCK

009B 272

009B 273 THESE ROUTINES ARE CALLED TO CHECK THE ACCESSIBILITY OF AN I/O BUFFER AND

009B 274 TO LOCK THE BUFFER IN MEMORY FOR A DIRECT MEMORY TRANSFER.

009B 275

009B 276 INPUTS:

009B 277

009B 278

RO STARTING ADDRESS OF I/O BUFFER.

009B 279

R1 LENGTH OF TRANSFER IN BYTES.

009B 280

R4 CURRENT PROCESS PCB ADDRESS.

009B 281

R6 ADDRESS OF CCB.

009B 282

009B 283 OUTPUTS:

009B 284

009B 285

THE I/O BUFFER IS CHECKED FOR THE PROPER ACCESSIBILITY. IF THE

009B 286

CHECK SUCCEEDS, THEN THE BUFFER IS LOCKED IN MEMORY AND THE STARTING

009B 287

ADDRESS OF THE PAGE TABLE ENTRIES THAT MAP THE TRANSFER IS STORED

009B 288

IN THE I/O PACKET. ELSE THE I/O IS COMPLETED WITH A STATUS OF

009B 289

ACCESS VIOLATION.

009B 290 '

009B 291

009B 292 EXE$READLOCK::

CHECK BUFFER FOR READ FUNCTION AND LOCK

11 10 009B 293

BSBB

EXE$READLOCKR

EXE$READLOCKR RETURNS NORMALLY ON

009D 294

SUCCESS, VIA COROUTINE CALL ON FAILURE

05 009D 295

RSB

RETURNS TO CALLER ON SUCCESS, TO

009E 296

EXE$READLOCKR ON FAILURE

009E 297

009E 298 EXE$WR ITELOCK: :

CHECK BUFFER FOR WRITE FUNCTION AND LOCK

15 10 009E 299

BSBB

EXE$WRIT.ELOCKR

EXE$WRITELOCKR RETURNS NORMALLY ON

OOAO 300

SUCCESS, VIA COROUTINE CALL ON FAILURE

05 OOAO 301

RSB

RETURNS TO CALLER ON SUCCESS, TO

OOAl 302

EXE$WRITELOCKR ON FAILURE

OOAl 303

OOAl 304 EXE$MODIFYLOCK::

CHECK BUFFER FOR MODIFY FUNCTION AND LOCK

01 10 OOA1 305

BSBB

EXE$MODIFYLOCKR

EXE$MODIFYLOCKR RETURNS NORMALLY ON

OOA3 306

SUCCESS, VIA COROUTINE CALL ON FAILURE

05 OOA3 307

RSB

RETURNS TO CALLER ON SUCCESS, TO

OOA4 308

EXE$MODIFYLOCKR ON FAILURE

SYSQIOFDT V03-009

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-01

Page 10

READ AND WRITE BUFFER CHECK AND LOCK AND 24-APR-1982 15:51:12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(1)

50 009D 52 04
QC
50

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

00A4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

OOA4

DD OOA4

3ca0

OOA6 OOA9

11 OOAC

OOAE

OOAE

DD OOAE

310

.SBTTL READ AND WRITE BUFFER CHECK AND LOCK AND RETURN ROUTINES

311 +

312 EXE$READLOCKR - CHECK BUFFER FOR READ ACCESSIBILITY AND LOCK AND RETURN

313

ON ERROR

314 EXE$WRITELOCKR - CHECK BUFFER FOR WRITE ACCESSIBILITY AND LOCK AND RETURN

315

ON ERROR

316 EXE$MODIFYLOCKR - CHECK BUFFER FOR READ ACCESSIBILITY AND LOCK AND RETURN

317

ON ERROR

318

319 THESE ROUTINES ARE CALLED TO CHECK THE ACCESSIBILITY OF AN I/0 BUFFER

320 AND TO LOCK THE BUFFER IN MEMORY FOR A DIRECT MEMORY TRANSFER. IN

321 ADDITION, THESE ROUTINES PERFORM A COROUTINE CALL IF THERE IS AN ERROR

322 OR ANY PAGES HAVE TO BE FAULTED IN. THE PURPOSE OF THE COROUTINE

323 CALL IS TO ALLOW THE CALLER TO PERFORM ANY NECESSARY CLEANUP BEFORE

324 THE QIO IS BACKED UP OR ABORTED. THESE ROUTINES ARE TYPICALLY CALLED

325 BY DRIVERS THAT MUST LOCK MULTIPLE AREAS INTO MEMORY. SINCE THESE

326 ROUTINES CANNOT UNLOCK AREAS PREVIOUSLY LOCKED, THE COROUTINE CALL ALLOWS

327 THE CALLER (THE DRIVER) TO UNLOCK PREVIOUSLY LOCKED AREAS (AND PERFORM

328 ANY OTHER CLEANUP) AND THEN RETURN HERE TO BACK UP OR ABORT THE I/O.

329

330 EXE$MODIFYLOCKR IS USED WHEN THE BUFFER WILL BE READ AND WRITTEN BY THE

331 I/O DEVICE. IT DISABLES AN OPTIMIZATION IN MMG$IOLOCK WHICH IS USED

332 WHEN THE BUFFER IS ONLY WRITTEN.

333

334 INPUTS:

335

336

RO STARTING ADDRESS OF I/O BUFFER.

337

Rl LENGTH OF BUFFER IN BYTES.

338

R4 CURRENT PROCESS PCB ADDRESS.

339

R6 ADDRESS OF CCB.

340

341 OUTPUTS:

342

343

THE I/O BUFFER IS CHECKED FOR THE PROPER ACCESSIBILITY. IF THE

344

CHECK SUCCEEDS, THEN THE BUFFER IS LOCKED IN MEMORY AND THE STARTING

345

ADDRESS OF THE PAGE TABLE ENTRIES THAT MAP THE TRANSFER IS STORED

346

IN THE I/O PACKET.

347

348

RO = RETURN CODE

349

350

NOTE THAT IF THERE ARE NO ERRORS AND NO PAGES HAVE TO BE FAULTED

351

IN, THEN THESE ROUTINES RETURN NORMALLY. HOWEVER, IF THERE IS AN

352

ERROR OR A PAGE HAS TO BE FAULTED IN, THEN THE CALLER IS CALLED

353

BY A COROUTINE CALL. THE CALLER'S RSB THEN RETURNS HERE WHERE

354

THE QIO IS EITHER BACKED UP OR ABORTED. NOTE THAT IN THIS CASE

355

THE CALLER'S ERROR HANDLING CODE MUST PRESERVE ALL REGISTERS,

356

INCLUDING RO AND Rl.

357

358

.ENABL LSB

359 EXE$MODIFYLOCKR::

CHECK BUFFER FOR MODIFY FUNCTION AND LOCK

360

PUSHL RO

SAVE STARTING ADDRESS OF BUFFER

361

BSBW

EXE$READCHKR

CHECK BUFFER FOR READ FUNCTION

362

BISL

#4,R2

DISABLE OPTIMIZATION IN MMG$IOLOCK

363

BRB

10$

364

365 EXE$READLOCKR::

;CHECK BUFFER FOR READ FUNCTION AND LOCK

366

PUSHL RO

;SAVE STARTING ADDRESS OF BUFFER

SYSQIOFDT V03-009

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-0l

Page 11

READ AND WRITE BUFFER CHECK AND LOCK AND 24-APR-19B2 15: 51: 12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(1)

0093 30 05 11
50 DD ODEA 30 lA 50 E9
50 BEDO 50 FEOO BF AB
30 A3 53 DD
FF34' 30 53 BE DO
OB 50 E9 2C A3 51 DO
05 5E 04 co
9E 16 50 D5
1 c 12
51 DD lB 10 02 BA 5E 5D DO 5C OB AD 7D 5E 00' co 50 8E 04 C3 F8'AF 9F
02 61 95 60 17 FFO 1' 31

OOBO OOB3 0085 0095
OOB5 OOB7 OOBA
OOBD ooco oocs
ooci
OOC9 oocc OOCF OOD2 OOD6 OOD7 OODA OODC DODE OOEO OOE2 OOE4 OOE6 OOE9 ODED OOFO OOF4 OOF7 OOF8 OOFA OOFC DOFF

367

BSBW

EXE$READCHKR

;CHECK BUFFER FOR READ FUNCTION

36B

BRB

10$

369

370 EXE$WRITELOCKR::

;CHECK BUFFER FOR WRITE FUNCTION AND LOCK

371

PUSHL RO

;SAVE STARTING ADDRESS OF BUFFER

372

BSBW

EXE$WRITECHKR

;CHECK BUFFER FOR WRITE FUNCTION

373 10$:

BLBC

RO, 15$

;BRANCH IF ERROR

374

POPL

RO

;RESTORE STARTING ADDRESS OF BUFFER

375

BICW3 #AC<VA$M_BYTE>,RO,IRP$W_BOFF(R3) ;SET BYTE OFFSET IN PAGE

376 377 378 379 3BO 3B1 3B2 15$: 3B3 20$: 3B4 385 3B6 387 388 3B9 390 391 392 393 394 395 40$: 396 397 50$: 398

PUSHL BSBW MOVL BLBC MOVL RSB ADDL JSB TSTL BNEQ PUSHL BSBB POPR MOVL MOVQ ADDL SUBL3 PUSHAB REI TSTB JMP BRW .DSABL

R3 MMG$IOLOCK (SP)+,R3 R0,20$ R1,IRP$L_SVAPTE(R3)
#4,SP @(SP)+ RO 50$ Rl BACKOUT_QIO #AM<Rl> FP,SP B(FP),AP SA#EXE$C CMSTKSZ,SP #4,(SP)+-:-Ro BA40$
( R1) (RO) EXE$ABORTI 0 LSB

;SAVE ADDRESS OF I/O PACKET ;LOCK PAGES FOR I/O ;RETRIEVE ADDRESS OF I/O PACKET ;IF LBC LOCK FAILURE ;INSERT ADDRESS OF FIRST PTE IN PACKET
';THROW AWAY OLD RO ;COROUTINE CALL TO CLEANUP ;ERRORS ENCOUNTERED? ; IF NEQ YES ;SAVE VIRTUAL ADDRESS OF PAGE TO FAULT ;CLEANUP QIO ;RETRIEVE VIRTUAL ADDRESS OF PAGE TO FAULT ;TRIM STACK BACK TO CHANGE MODE FRAME ;RESTORE USER ARGUMENT AND FRAME POINTERS ;REMOVE CHANGE MODE CALL FRAME FROM STACK ;CALCULATE RESTART ADDRESS ;SET NEW RETURN ADDRESS
;
;FAULT USER BUFFER AGAIN ;REPEAT SYSTEM SERVICE ;ABORT I/O REQUEST

SYSQIOFDT V03-009
;SSAb0002

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-0l

Page 12

BACKOUT A QIO

24-APR-1982 15:51:12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(1)

FEFE' 30 OA A6 B7 05 2A A3 00 El 3A A4 86
03 11 3E A4 B6 OC 2A A3 07 El 50 4C A3 DO
53 DD FEEO' 30
53 8EDO 03 OB A3 06 El
38 A4 B6
50 53 DO FECF' 30
05

DOFF OOFF OOFF DOFF DOFF DOFF OOFF DOFF OOFF DOFF OOFF OOFF OOFF OOFF DOFF DOFF DOFF OOFF OOFF OOFF OOFF OOFF OOFF 0102 0105 010A 010D 010F 0112 0117 01 lB 01 lD 0120 0123 0128 0128 012E
0131

400

.SBTTL BACKOUT A QIO

401 ;+

402 BACKOUT_QIO - BACKOUT A QIO

403

404 THIS ROUTINE IS CALLED TO BACKOUT A QIO. IT DECREMENTS THE CHANNEL I/0

405 COUNT, INCREMENTS THE DIRECT OR BUFFERED I/O COUNT, DEALLOCATES THE 406 DIAGNOSTIC BUFFER (IF PRESENT), OPTIONALLY INCREMENTS THE AST COUNT, AND

407 FINALLY DEALLOCATES THE IRP.

408

409 INPUTS:

410

411

R3 ADDRESS OF I/O REQUEST PACKET

412

R4 CURRENT PROCESS PCB ADDRESS

413

R6 ADDRESS OF CCB

414

415 OUTPUTS:

416

417

RO - R3 CLOBBERED

418

419 ' 420

421 BACKOUT QIO:

.1

-BSBW

PMS$ABORT RQ

;BACKOUT A QIO ;RECORD ABORT IF I/0 MONITORING ENABLED

422

DECW

CCB$W IOC(R6)

;DECREMENT CHANNEL I/O COUNT

423

BBC

#IRP$V BUFIO,IRP$W STS(R3),10$ ;BR IF NOT BUFFERED I/O

424

INCW

PCB$W BIOCNT(R4) -

;ADJUST COUNT OF BUFFERED I/O

425

BRB

20$ -

;CONTINUE

426 10$:

INCW

PCB$W DIOCNT(R4)

;ADJUST DIRECT I/O COUNT

427 20$:

BBC

#IRP$V DIAGBUF,IRP$W STS(R3),30$ ;BR. IF NO DIAGNOSTIC BUFFER

428

MOVL

IRP$L DIAGBUF(R3),RO- ;GET ADDRESS OF DIAGNOSTIC BUFFER

429

PUSHL R3 -

;SAVE R3

430

BSBW

EXE$DEANONPAGED

;DEALLOCATE DIAGNOSTIC BUFFER

431

POPL

R3

;RESTORE R3

432 30$:

BBC

#ACB$V QUOTA,IRP$B RMOD(R3) ,40$ ;BR IF AST NOT REQUESTED

433

INCW

PCB$W ASTCNT(R4) -

;ADJUST AST COUNT

434 40$:

MOVL

R3,RO-

:DEALLOCATE PACKET

435

BSBW

EXE$DEANONPAGED

436

RSB

SYSQIOFDT V03-009

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-0l

Page 13

CHECK BUFFER ACCESSIBILITY FOR READ FUNC 24-APR-1982 15:51:12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(2)

0132 438

.SBTTL CHECK BUFFER ACCESSIBILITY FOR READ FUNCTION

0132 439 ;+

0132 440 EXE$READCHK - CHECK BUFFER ACCESSIBILITY FOR READ FUNCTION

0132 441

0132 442 THIS ROUTINE IS CALLED TO CHECK BUFFER ACCESSIBILITY FOR A READ I/O

0132 443 FUNCTION.

0132 444

0132 445 INPUTS:

0132 446

0132 447

RO = ADDRESS OF BUFFER.

0132 448

Rl = SIZE OF TRANSFER IN BYTES.

0132 449

R3 =ADDRESS OF I/O REQUEST PACKET.

0132 450

0132 451 OUTPUTS:

0132 452

0132 453

IF BUFFER IS NOT WRITE ACCESSIBLE, THEN THE I/O REQUEST IS TERM-

0132 454

INATED VIA EXE$IOFINISH WITH A STATUS OF SS$_ACCVl0.

0132 455

0132 456

If BUFFER IS WRITE ACCESSIBLE, THEN THE FOLLOWING VALUES ARE RE-

0132 457

TURNED:

0132 458

0132 459

RO = ADDRESS OF BUFFER.

0132 460

Rl = SIZE OF TRANSFER IN BYTES.

0132 461

R2 =READ FUNCTION INDICATOR (1).

0132 462

R3 = ADDRESS OF I/O REQUEST PACKET.

0132 463

0132 464

IRP$W BCNT(R3) SIZE OF TRANSFER IN BYTES.

0132 465

IRP$W=FUNC(R3) READ.

0132 466

0132 467

0132 468

.ENABL LSB

0132 469 EXE$READCHK::

CHECK BUFFER FOR READ FUNCTION

50 DD 0132 470

PUSHL RO

SAVE ADDRESS OF BUFFER

10 10 0134 471

BSBB

EXE$READCHKR

CHECK BUFFER

04 11 0136 472

BRB

10$

SYSQIOFDT V03:-009

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-0l

Page 14

CHECK BUFFER ACCESSIBILITY FOR WRITE FUN 24-APR-1982 15:51:12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(2)

50 DD 68 10 03 50 EB FEBE' 31
50 8EPO 05

0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 0138 013A 013C 013F 0142 0145 0146

474

.SBTTL CHECK BUFFER ACCESSIBILITY FOR WRITE FUNCTION

475 ;+

476 EXE$WRITECHK - CHECK BUFFER ACCESSIBILITY FOR WRITE FUNCTION

477

478 THIS ROUTINE IS CALLED TO CHECK BUFFER ACCESSIBILITY FOR A WRITE I/O

479 FUNCTION.

480

481 INPUTS:

482

483

RO ADDRESS OF BUFFER.

484

Rl SIZE OF TRANSFER IN BYTES.

485

R3 ADDRESS OF I/O REQUEST PACKET.

486

487 OUTPUTS:

488

489

IF BUFFER IS NOT READ ACCESSIBLE, THEN THE I/O REQUEST IS TERM-

490

INATED VIA EXE$IOFINISH WITH A STATUS OF SS$_ACCVIO.

491

492

IF BUFFER IS READ ACCESSIBLE, THEN THE FOLLOWING VALUES ARE RE-

493

TURNED:

494

495

RO ADDRESS OF BUFFER.

496

Rl SIZE OF TRANSFER IN BYTES.

497

R2 WRITE FUNCTION INDICATOR (0).

498

R3 ADDRESS OF I/O REQUEST PACKET.

499

500

IRP$W BCNT(R3) SIZE OF TRANSFER IN BYTES.

501

IRP$W=FUNC(R3) WRITE.

502 ·

503

504 EXE$WRITECHK::

CHECK BUFFER FOR WRITE FUNCTION

505

PUSHL RO

SAVE ADDRESS OF BUFFER

506

BSBB

EXE$WRITECHKR

CHECK BUFFER

507 10$:

BLBS

R0,20$

BRANCH IF SUCCESS

508

BRW

EXE$ABORTI 0

ABORT I/O

509 20$:

POPL

RO

RESTORE ADDRESS OF BUFFER

510

RSB

511

.DSABL LSB

SYSQIOFDT V03-009

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-01

Page 15

CHECK BUFFER ACCESSIBILITY FOR READ FUNC 24-APR-1982 15:51:12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(2)

32 A3 51 OF
51 32 A3 07 50
2A A3 02 52 01

51 50

50 01FF BF

51 50

52 FEOO SF

51

51

13

50 52 51 6142
F 1
50 01

7E 50

0146 0146 0146 0146 0146 0146 0146 0146 0146 014q 0146 0146 0146 0146 0146 0146 0146 0146
0146 0146 0146 0146 0146 0146 0146 0146 0146 0146 0146 0146 0146 0146 0146 0146 DO 0146 10 014A DO 014C E9 0150 AS 0153 DO 0157 05 015A 015B CO 015B AA 015E C2 0163 32 0166 F7 016B 1D 016E 0170 0170 C2 0176 3E 0179 14 017D
3C 017F 05 01S2
0183 7D 01S3

513

.SBTTL CHECK BUFFER ACCESSIBILITY FOR READ FUNCTION AND RETURN

514 ;+

515 ; EXE$READCHKR - CHECK BUFFER ACCESSIBILITY FOR READ FUNCTION AND RETURN

516

517 THIS ROUTINE IS CALLED TO CHECK BUFFER ACCESSIBILITY FOR A READ I/O

518 FUNCTION. STATUS IS RETURNED IN RO.

519

520 INPUTS:

521

522

RO ADDRESS OF BUFFER.

523

R1 SIZE OF TRANSFER IN BYTES.

524

R3 ADDRESS OF I/O REQUEST PACKET.

525

526 OUTPUTS:

527

528

IF THE BUFFER rs NOT WRITE ACCESSIBLE, THEN THE FOLLOWING

529

VALUE rs RETURNED:

530

531

RO = SS$ ACCVIO

532

533

IF BUFFER IS WRITE ACCESSIBLE, THEN THE FOLLOWING VALUES ARE RE-

534

TURNED:

535

536

RO SS$ NORMAL

537

Rl SIZE OF TRANSFER IN BYTES.

538

R2 READ FUNCTION INDICATOR (1).

539

R3 ADDRESS OF I/O REQUEST PACKET.

540

541

IRP$L BCNT(R3) SIZE OF TRANSFER IN BYTES.

542

IRP$W=FUNC(R3) READ.

543 ' 544

545

.ENABL LSB

546 EXE$READCHKR::

CHECK BUFFER FOR READ FUNCTION

547

MOVL

R1 ,IRP$L BCNT(R3)

SAVE R1

548

BSBB

10$

-

CHECK ACCESS

549

MOVL

IRP$L BCNT(R3),Rl

RESTORE R1

550

BLBC

R0,5$-

, IF LBC, NO ACCESS·

551

BISW

#IRP$M FUNC,IRP$W STS(R3) ; SET READ FUNCTION

552

MOVL

#1,R2 -

-

SET READ FUNCTION INDICATOR

553 5$:

RSB

554

555 10$:

ADDL

RO,R1

ENDING ADDRESS OF BUFFER

556

BICW

#VA$M BYTE,RO

557

SUBL

RO,R1-

TRUNCATE TO START OF· PAGE CALCULATE LENGTH OF BUFFER TO PROBE

558

CVTWL #-f\X200,R2

SET ADDRESS ADJUSTMENT CONSTANT

559 15$:

CVTLW R1 ,R1

GREATER THAN 32k?

560

BVS

30$

IF VS, YES; CHECK BY CHUNKS

561

562 20$:

IFNOWRT R1, (RO) ,ACCVIO

CAN ENDS OF USER'S BUFFER BE WRITTEN?

563

SUBL

R2,RO

564

MOVAW (Rl) [R2] ,Rl

CALCULATE VA OF NEXT PAGE CALCULATE NEW LENGTH

565

BGTR

20$

IF GTR THEN MORE TO TEST

566

MOVZWL #SS$_NORMAL,RO

INDICATE SUCCESS

567

RSB

AND RETURN

568

569 30$:

MOVQ

RO,-(SP)

SAVE CURRENT VALUES ON STACK

SYSQIOFDT V03-009

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-0l

Page 16

CHECK BUFFER ACCESSIBILITY FOR READ FUNC 24-APR-1982 15:51:12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(2)

51 7EOO BF
6E 51 04 AE 51
DC 05 50 50 SE
CF
SE 08
50 OC

3C 0186 018B
co 0188
C'2 018E 10 0192 E9 0194 70 0197 11 019A
019C 019C
co 019C
05 019F OlAO
3C OlAO 05 01A3
01A4

570

MOVZWL

571

572

ADDL

573

SUBL

574

BSBB

575

BLBC

576

MOVQ

577

BRB

578

579 ACCVI01:

580

ADDL

581

RSB

582 ACCV!O:

583

MOVZWL

584

RSB

585

#AX7EOO,R1
Rl,(SP) R1,4(SP) 20$ RO,ACCVI01 (SP)+,RO 15$
#8,SP
#SS$_ACCVIO,RO

; SIZE OF CHUNK USED STEPPING THRU BUF. ; (32K - 1 PAGE) ; ADVANCE ADDRESS BY THIS AMOUNT ; DECREASE COUNT ; PROBE CHUNK ; IF LBC, NO ACCESS ; POP PRE-ADJUSTED VALUES OFF STACK : SEE IF LENGTH NOW LT 32K

SYSQIOFDT V03-009

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-19B4 15:36:44 VAX-11 Macro V03-01

Page 17

CHECK BUFFER ACCESSIBILITY FOR WRITE FUN 24-APR-19B2 15:51:12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(2)

32 A3 51 OA
51 32 A3 02 50 52
51 50 50 OlFF BF
51 50 52 FEOO BF
51 51 13
50 52 51 6142
F 1
50 01
7E 50 51 7EOO BF

01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4
01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4
01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 DO 01A4 10 01AB DO 01AA E9 01AE D4 01B1 05 01B3 01B4
co 01B4
AA 01B7 C2 OlBC 32 01BF F7 01C4 1D 01C7
01C9
01C9 C2 01CF 3E 01D2
14 01D6 3C 01DB 05 OlDB
OlDC 7D OlDC 3C OlDF
01E4

5B7

.SBTTL CHECK BUFFER ACCESSIBILITY FOR WRITE FUNCTION AND RETURN

5B8 ;+

589 EXE$WRITECHKR - CHECK BUFFER ACCESSIBILITY FOR WRITE FUNCTION AND RETURN

590

591 THIS ROUTINE IS CALLED TO CHECK BUFFER ACCESSIBILITY FOR A WRITE I/O

592 FUNCTION. STATUS IS RETURNED IN RO

593

594 INPUTS:

595

596

RO ADDRESS OF BUFFER.

597

Rl SIZE OF TRANSFER IN BYTES.

598

R3 ADDRESS OF I/O REQUEST PACKET.

599

600 OUTPUTS:

601

602

IF BUFFER IS NOT READ ACCESSIBLE, THEN THE FOLLOWING VALUE IS

603

RETURNED:

604

605

RO = SS$_ACCVIO

606

607

IF BUFFER IS READ ACCESSIBLE, THEN THE FOLLOWING VALUES ARE RE-

60B

TURNED:

609

610

RO SS$ NORMAL

611

Rl SIZE OF TRANSFER IN BYTES.

612

R2 WRITE FUNCTION INDICATOR (0).

613

R3 ADDRESS OF I/O REQUEST PACKET.

614

615

IRP$L BCNT(R3) SIZE OF TRANSFER IN BYTES.

616

IRP$W=FUNC(R3) WRITE.

617 ' 618

619 EXE$WRITECHKR::

620

MOVL

R1,IRP$L BCNT(R3)

621

BSBB

40$

-

CHECK BUFFER FOR WRITE FUNCTION SAVE Rl CHECK ACCESS

622

MOVL

IRP$L BCNT(R3),R1

RESTORE Rl

623

BLBC

R0,35$

IF LBC, NO ACCESS

624

CLRL

R2

SET WRITE FUNCTION INDICATOR

625 35$:

RSB

626

627 40$:

ADDL

RO,Rl

ENDING ADDRESS OF BUFFER

628

BICW #VA$M BVTE,RO

629

SUBL

RO,R1-

TRUNCATE TO START OF PAGE CALCULATE LENGTH OF BUFFER TO PROBE

630

CVTWL #-AX200,R2

SET ADDRESS ADJUSTMENT CONSTANT

631 45$:

CVTLW R 1, R 1

GREATER THAN 32k?

632

BVS

60$

633

IF VS, YES; CHECK BY CHUNKS

634 50$: 635

IFNORD Rl, (RO) ,ACCVIO

SUBL

R2,RO

CAN ENDS OF USER'S BUFFER BE READ? CALCULATE VA OF NEXT PAGE

636

MOVAW (Rl)[R2],Rl

637

BGTR

50$

CALCULATE NEW LENGTH IF GTR THEN MORE TO TEST

638

MOVZWL #SS$_NORMAL,RO

INDICATE SUCCESS

639

RSB

AND RETURN

640

641 60$: 642 643

MOVQ

RO,-(SP)

MOVZWL #AX7EOO,R1

SAVE CURRENT VALUES ON STACK
SIZE OF CHUNK USED STEPPING THRU BUF. (32K - 1 PAGE)

SYSQIOFDT V03-009

6E 51 04 AE 51
DC AC 50 50 SE
CF

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-01

Page 18

CHECK BUFFER ACCESSIBILITY FOR WRITE FUN 24-APR-1982 15:51:12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(2)

co 01E4 644
C2 01E7 645 10 OlEB 646 E9 OlED 647
7D OlFO 648 1 1 01F3 649
01F5 650

ADDL
SUBL BSBB BLBC MOVQ BRB .DSABL

Rl,(SP) Rl ,4(SP) 50$ RO,ACCVIOl (SP)+,RO 45$ LSB

ADVANCE ADDRESS BY THIS AMOUNT DECREASE COUNT PROBE CHUNK IF LBC, NO ACCESS POP PRE-ADJUSTED VALUES OFF STACK SEE IF LENGTH NOW LT 32K

SYSQIOFDT V03-009
;ROW49577 ; ROW49577 ;ROW49577 ;ROW49577 ;ROW49577 ;ROW49577 ;PRD0030 ;PRD0030 ;PRDOl930 ;PRD0030 ; ROW49577 -6

- SYSTEM SERVICE QUEUE 1/0 FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-01

Page 19

SET DEVICE MODE AND CHARACTERISTICS FUNC 24-APR-1982 15:51:12 DISK$VMSMASTER:[SYS.SRC]SVSQIOFDT.(2)

1 E 57 23
04 40 A5 61 42 A5 02 A1 44 A5 04 A1
2A

01F5 01F5 01F5 01F5
01F5 01F5 01F5 01F5
01F5 OlF!:) 01F5 01F5 01F5
01F5 01F5 01F5 01F5 01F5 01F5 01F5 01F5 01F5 01F5 01F5 01F5 01F5 01F5 01F5 01F5 01F5 01F5 01F5
01F5
01F5 01F5 01F5 01F5 10 01F5 Dl 01F7 13 OlFA BO OlFC BO 0200 DO 0205 11 020A

652

.SBTTL SET DEVICE MODE AND CHARACTERISTICS FUNCTIONS (AT FDT LEVEL)

653 ·+

654 , EXE$SETCHAR - SET DEVICE MODE AND CHARACTERISTICS FUNCTIONS (AT FDT LEVEL)

655

656 THIS ROUTINE PLACES THE NEW CHARACTERISTICS SPECIFIED BY THE QUADWORD POINTED

657 TO BY P1 INTO THE SECOND AND THIRD LONGWORDS OF THE DEVICE UCB.

658

659 INPUTS:

660

661

RO = SCRATCH.

662

R1 = SCRATCH.

663

R2 = SCRATCH.

664

R3 =ADDRESS OF I/O REQUEST PACKET.

665

R4 = CURRENT PROCESS PCB ADDRESS.

666

R5 = ASSIGNED DEVICE UCB ADDRESS.

667

R6 = ADDRESS OF CCB.

668

R7 = I/O FUNCTION CODE BIT NUMBER.

669

RB = FUNCTION DECISION TABLE DISPATCH ADDRESS.

670

R9 = SCRATCH.

671

R10 = SCRATCH.

672

R11 =SCRATCH.

673

AP = ADDRESS OF FIRST FUNCTION DEPENDENT PARAMETER.

674

675 OUTPUTS:

676

677

THE CHARACTERISTICS SPECIFIED BY THE QUADWORD POINTER TO BY Pl ARE STORED

678

IN THE SECOND AND THIRD LONGWORDS OF THE DEVICE UCB.

.1

. 2 COMPLETION CODES:

.3

.4

SS$ NORMAL - SUCCESSFUL

. 5

SS$-ACCVIO - BUFFER ACCESS VIOLATION

.6

SS$=ILLIOFUNC - FUNCTION IS ILLEGAL ON DISK DEVICES

.7

.8

.9

.ENABL LSB

. 10 EXE$SETCHAR::

;SET DEVICE MODE AND CHARACTERISTICS

.11

BSBB

CHECK SET

;IS THIS SET FUNCTIQN VAILD?

685

CMPL

#10$ SETMODE,R7

;SET MODE FUNCTION?

686

BEQL

10$ -

;IF EQL YES

687

MOVW

(R1),UCB$B DEVCLASS(R5) ;SET DEVICE TYPE AND CLASS

688 10$:

MOVW

2(R1),UCB$W DEVBUFSIZ(R5) ;SET DEFAULT BUFFER SIZE

689

MOVL

4(R1),UCB$L-DEVDEPEND(R5) ;SET DEVICE CHARACTERISTICS

690

BRB

20$

-

SYSQIOFDT V03-009
;ROW49577 ;PRD0030 ;PRD0030 ;PRD0030 ;ROW49577 ;PRD0030 ;PRD0030 ;PRD0030 ;ROW49577 ;ROW49577 ;ROW49577 ;ROW49577 ;ROW49577 ;ROW49577 ;ROW49577 ;ROW49577 ;ROW49577 ;ROW49577 ;ROW49577

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-01

Page 20

SET DEVICE MODE AND CHARACTERISTICS FUNC 24-APR-1982 15:51:12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(2)

07 38 A3 61
FDEB'
40 A5 01 OA
51 6C
50 OOF4 BF 03
50 OC FDCE'

020C 020C 020C 020C
020C 020C 020C 020C
020C
020C 020C 020C 020C 020C
020C 020C 020C 020C 020C
020C 020C 020C 020C 020C 020C 020C 020C 020C 020C 020C 020C 020C 020C 020C 020C 10 020C 7D 020E 31 0212 0215 0215 91 0215 13 0219 DO 021B 021E 05 0224 0225
3C 0225 11 022A 3C 022C 31 022F

692

.SBTTL SET DEVICE MODE AND CHARACTERISTICS FUNCTIONS

693 ;+

694 EXE$SETMODE - SET DEVICE CHARACTERISTICS AND MODE

695

696 FUNCTIONAL DESCRIPTION:

697

698 THIS ROUTINE PLACES THE NEW CHARACTERISTICS SPECIFIED BY Pl INTO

699 THE I/O PACKET FOR INSERTION INTO THE UCB WHEN THE UNIT IS IDLE.

700 THE INPUT DATA IS IN THE FORM RETURNED BY $GTCHAN. THE SPECIFIED BUFFER

701 IS ASSUMED TO BE 12 BYTES IN LENGTH. THE P2 LENGTH SPECIFIER IS IGNORED.

702

703 THE NEW CHARACTERISTICS ARE PLACED IN IRP$L MEDIA/MEDIA+4 AND THE

704 PACKET IS QUEUED VIA EXE$QIODRVPKT.

-

705

706 INPUTS:

707

708 709

R3 = I/O PACKET ADDRESS
R4 = CURRENT PCB

710 711 712

= RS
R6

= =

ACB ADDRESS ASSIGNED CCB

ADDRESS

AP ADDRESS Of THE QIO ARGUMEMT Pl

713

714 OUTPUTS:

715

716

RO = STATUS OF THE OPERATION

717

R3+ ARE PRESERVED.

718

719 COMPLETION CODES:

720

721

SS$ NORMAL - SUCCESSFUL

722

SS$-ACCVIO - BUFFER ACCESS VIOLATION

.1

SS$=ILLIOFUNC - FUNCTION IS ILLEGAL ON DISK DEVICES

. 2 ;-

.3

.4 EXE$SETMODE::

SET DEVICE MODE AND CHARACTERISTICS

.5

BSBB

CHECK SET

IS THIS SET FUNCTION VAILD?

.6

MOVQ

(Rl),lRP$L MEDIA(R3)

INSERT CHARACTERISTICS IN I/O PACKET

.7

BRW

EXE$QIODRVPKT

QUEUE THE PACKET

.8

.9 CHECK SET:

. 10

- CMPB

#DC$ DISK, UCB$B DEVCLASS(R5) ; Is this a disk device?

.11

BEQL

91$ -

-

Branch if disk; they can't be set.

. 12

MOVL

Pl(AP), Rl

Get buffer address.

. 13

IFNORD #8, ( R1), 93$

Branch if no read access to buffer .

.14

RSB

Else, all is ok; return to caller.

. 15

.16 91$: . 17

MOVZWL #SS$ ILLIOFUNC, RO

BRB

99$ -

Setup illegal I/O function status. or

. 18 93$:

MOVZWL #SS$ ACCV IO, RO

Setup access violation status.

. 19 99$:

BRW

EXE$ABORTI 0

Then blow the I/O request away.

SYSQIOFDT V03-009

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-01

Page 21

SENSE DEVICE MODE AND CHARACTERISTICS FU 24-APR-1982 15:51:12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(2)

0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 0232 51 44 A5 DO 0232 50 01 3C 0236 FDC4' 31 0239 023C

735

.SBTTL SENSE DEVICE MODE AND CHARACTERISTICS FUNCTIONS

736 ;+

737 ; EXE$SENSEMODE - SENSE DEVICE MODE AND CHARACTERISTICS FUNCTIONS

738

739 THIS ROUTINE OBTAINS THE CURRENT DEVICE MODE/CHARACTERISTICS FROM THE DEVICE

740 DEPENDENT CHARACTERISTICS LONGWORD IN THE UCB AND IMMEDIATELY COMPLETES THE

741 I/O OPERATION WITH THE SECOND LONGWORD OF THE FINAL I/O STATUS EQUAL TO THE

742 DEVICE DEPENDENT CHARACTERSITICS.

743

744 INPUTS:

745

746

RO = SCRATCH.

747

R1 = SCRATCH.

748

R2 = SCRATCH.

749

R3 =ADDRESS OF I/O REQUEST PACKET.

750

R4 = CURRENT PROCESS PCB ADDRESS.

751

RS = ASSIGNED DEVICE UCB ADDRESS.

752

R6 = ADDRESS OF CCB.

753

R7 = I/O FUNCTION CODE BIT NUMBER.

754

RS = FUNCTION DECISION TABLE DISPATCH ADDRESS.

755 756

= R9 = SCRATCH.
R10 SCRATCH.

757

R11 =SCRATCH.

758

AP = ADDRESS OF FIRST FUNCTION DEPENDENT PARAMETER.

759

760 OUTPUTS:

761

762

THE DEVICE DEPENDENT CHARACTERISTICS ARE OBTAINED FROM THE UCB AND

763

THE I/O IS COMPLETED WITH THE SECOND I/O STATUS LONGWORD EQUAL TO THE

764

DEVICE CHARACTERISTICS.

765 ·

766

767 EXE$SENSEMODE::

SENSE DEVICE MODE/CHARACTERISTICS

768

MOVL

UCB$L DEVDEPEND(R5),R1 GET DEVICE DEPENDENT CHARACTERSITICS

769 20$:

MOVZWL #SS$ NORMAL,RO

SET NORMAL COMPLETION STATUS

770

BRW

EXE$FINISHIO

FINISH I/O OPERATION

771

.DSABL LSB

SYSQIOFDT V03-009

- SYSTEM SERVICE QUEUE IIO FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-01

Page 22

CARRIAGE CONTROL INTERPRETATION

24-APR-1982 15:51 :12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(2)

OD 01 00 01
20 OD 01 00 02
30 OD 01 QC 01
31 OD 01 00 00
2B 00 00 00 01
24

023C 023C 023C 023C 023C 023C 023C 023C
023C 023C
023C 023C 023C 023C 023C 023C 023C 023C 023C 023C 023C 023C 023C 023C 023C 023C 023C 023C 023C 023C
023C 023C 023C 023C 023C 023C 023C 023C 023C 023C 023C 023C 023C 023C
023C 023C 023C 023C 0240 0241 0245 0246 024A 0248 024F 0250 0254

773

.SBTTL CARRIAGE CONTROL INTERPRETATION

774 ;+

775 EXE$CARRIAGE - INTERPRET CARRIAGE CONTROL SPECIFIER

776

777 FUNCTIONAL DESCRIPTION:

778

779 THIS ROUTINE IS USED BY THE LINE PRINTER DRIVER AND THE TERMINAL

780 DRIVER TO INTERPRET THE tARRIAGE CONTROL SPECIFIER IN IRP$B CARCON

781 NOTE THAT IRP$B_CARCON IS USED AS A LONGWORD!

782

783 THE SPECIFIER IS AS FOLLOWS:

784

785

.BYTE 1 FORTRAN CARRIAGE CONTROL CHARACTER IF NOT 0

786

.BYTE 2 ***** IGNORED *****

787

.BYTE 3

PREFIX CARRIAGE CONTROL

788

.BYTE 4

SUFFIX CARRIAGE CONTROL

789

790 THE PREISUF FIELDS ARE AS FOLLOWS

791

792

IF BIT 7=0 THEN BITS 6-0 ARE THE NUMBER OF NEWLINES TO INSERT.

793

IF BIT 7=1 AND BIT 6=0 THEN BITS 4-0 ARE THE ASCII CHARACTER TO

794

OUTPUT. ASCII SET CO OR C1 IS SPECIFIED BY BIT 5.

795

IF BIT 7=1 AND BIT 6=1 THEN BITS 5-0 ARE THE PRINTER CHANNEL NUMBER

796

797 ASCII SET CO IS ASSUMED AND BIT 6 IS IGNORED IF BIT 7=0.

798

799 INPUTS:

800

801

R3 = ADDRESS OF THE IIO PACKET

802

RS = ADDRESS OF THE UCB

803

804 OUTPUTS:

805

806

IRP$B_CARCON IS SET UP TO REFLECT THE PREISUF CHARACTERS TO SEND.

807

808

BYTE 0 = NUMBER OF CHARACTERS TO SEND

809

BYTE 1 = CHARACTER, IF 0 THEN NEWLINE

810

811

IRP$B_CARCON+2 HAS THE SUFFIX CONTROL.

812

813

RO,R1 ARE USED.

814

815

816

817 ; LOCAL DATA TABLE

818 819

C' CTABLE:

CARRIAGE CONTROL TO FORTRAN MATCH TABLE

820

.BYTE 1,0'1'13

SPACE => 1 NL, 1 CR

821

.ASCII I I

822

.BYTE 2,0' 1' 13

"O" => 2 NL, 1 CR

823

.ASCII IOI

824

.BYTE 1'12: 1' 13

"1" => 1 FF, 1 CR

825

.ASCII I 1I

826

.BYTE 0 ,0' 1'13

"+" => NOTHING, 1 CR

827

.ASCII l+I

828

.BYTE 1,0,0 ,0

"$" => 1 NL, NOTHING

829

.ASCII 1$1

SYSQIOFDT V03-009

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-19B4 15:36:44 VAX-11 Macro V03-0l

Page 23

CARRIAGE CONTROL INTERPRETATION

24-APR-19B2 15: 51: 12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(2)

OD 01 00 01 00
51 3C A3 9A 12 13
50 D9 AF 9E 3C A3 BO DO
60 95 05 13 51 80 91 F3 12
05
51 3E A3 9A 02 13 19 10
3C A3 51 90 3D A3 50 90 51 3F A3 9A
02 13 09 10 3E A3 51 90 3F A3 50 90
05
50 D4 08 51 07 E 1 51 EO BF BB
50 51 01 9A
05

0255 0259 025A 025A 025A 025A 025A 025E 0260
0264. 0268 026A 026C 026F 0271 0272 0272 0272 0272 0276 0278 027A 027E 0282 0286 0288 028A 028E 0292 0293 0293 0293 0293 0295 0299 029D 029E 02Al 02A2 02A2

B30

.BYTE 1,0,1'13

; DEFAULT => 1 NL, 1 CR

B31

.BYTE 0

; TABLE END

B32

833

834 835

E' XE$CARRIAGE::

; INTERPRET CARRIAGE CONTROL

836

MOVZBL IRP$B_CARCON(R3),Rl

; GET FORTRAN SPECIFIER

837

BEQL

20$

; IF EQL THEN TRY PRE/SUF

838

MOVAB BACCTABLE,RO

; ADDRESS MATCH TABLE

B39 10$:

MOVL

(RO)+,IRP$B_CARCON(R3) ; ASSUME MATCH

840

TSTB

(RO)

; END OF TABLE?

841

BEQL

15$

; IF EQL THEN YES

842

CMPB

(RO)+,Rl

; MATCH?

843

BNEQ

10$

; NO THEN SEARCH

844 15$:

RSB

; ELSE RETURN

845 ;

846 ; PRE/SUF CARRIAGE CONTROL

B47 B48

2' 0$:

MOVZBL IRP$B_CARCON+2(R3),Rl ; GET PREFIX SPECIFIER

849

BEQL

30$

; IF EQL THEN NONE

850

BSBB

100$

; INTERPRET THE SPECIFIER

851 30$:

MOVB

Rl,IRP$B CARCON(R3)

; INSERT NUMBER

852

MOVB

RO,IRP$B-CARCON+l(R3) ; INSERT CHARACTER

853

MOVZBL IRP$B_CARCON+3(R3),R1 ; GET SUFFIX SPECIFIER

854

BEQL

40$

; IF EQL THEN NONE

855

BSBB

100$

; CONVERT THE SPECIFIER

856 40$:

MOVB

R1,IRP$B CARCON+2(R3) ; INSERT NUMBER

857

MOVB

RO,IRP$B_CARCON+3(R3) ; INSERT CHARACTER

B58

RSB

; RETURN

B59 ;

860 ; SUBROUTINE TO INTERPRET PRE/SUF SPECIFIER

861

862 100$: CLRL

RO

; ASSUME NEWLINE

B63

BBC

#7, R1, 110$

; IF BIT 7 CLEAR THEN DONE

864

BICB3 #AXOEO, R1 , RO

: REMOVE OTHER BITS

B65 B66 110$: 867 868

MOVZBL #1,R1 RSB
.END

; SET ONE CHARACTER ; RETURN

SYSQIOFDT
Symbo 1 tab 1e
AC8$V QUOTA ACCV IO ACCVI01 8ACKOUT QIO CC8$W IOC CCTA8LE CHECK SET DC$ DlSK "EXESA80RTI 0 EXE$CARRIAGE EXE$C CMSTKSZ EXESDEANONPAGED EXE$FINISHIO EXE$FINISHIOC EXE$ IOR SNWA IT EXE$LCLDSKVALI D EXE$MODIFY EXE$MODIFVLOCK EXE$MODIFYLOCKR EXESONEPARM EXESQIODRVPKT EXE$READ EXE$'READCHK EXE$READCHKR EXE$READLOCK EXE$READLOCKR EXE$SENSEMODE EXE$SETCHAR EXE$SETMODE EXE$WRITE EXE$WRITECHK EXE$WRITECHKR EXE$WRITELOCK EXE$WRITELOCKR EXE$ZEROPARM IO$ PACKACK 10$-PHYSICAL I0$-READL8LK IO$-READP8LK 10$-SETMODE IPL$ SCS IPL$-SYNCH IRP$B CARCON IRP$8-RMOD IRP$L-8CNT IRP$L-DIAG8UF IRP$L-MEDIA IRP$L-SVAPTE IRP$M-FUNC IRP$S-FCODE IRP$V-8UFIO IRP$V-DIAGBUF IRP$V-FCODE IRP$V-FUNC IRP$W-80FF IRP$W-FUNC
IRPsw:::sTS

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-01

Page 24

24-APR-1982 15:51:12 DISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(2)

00000006

000001AO R

01

0000019C R

01

OOOOOOFF R

01

OOOOOOOA

0000023C R

01

= 00000215 R 00000001

01

******** x 01

0000025A RG

01

******** x 01

******** ********

x x

01 01

******** x 01

00000000 RG

01

00000035 RG

01

00000069 RG

01

OOOOOOAl RG

01

OOOOOOA4 RG 01

00000029 RG

01

******** x 01

0000006F RG

01

00000132 RG

01

00000146 RG 01

00000098 RG

01

OOOOOOAE RG

01

00000232 RG 01

000001F5 RG

01

0000020C RG

01

00000078 RG

01

00000138 RG

01

000001A4 RG

01

0000009E RG

01

00000085 RG 01

0000002F RG 01

00000008

= OOOOOOlF 00000021 oooooooc

00000023

00000008

00000008

0000003C

00000008

00000032
= 0000004C = 00000038

0000002C

00000002

00000006

00000000

00000007

00000000

00000001
= 00000030 = 00000020

0000002A

MMG$IOLOCK Pl P2 P3
P4 P5 P6 PCB$L EFWM PC8$L-STS PCB$V-SSRWAIT PCB$W-ASTCNT PC8$W-BIOCNT PCB$W-DIOCNT
PMS$ABORT_RQ
PR$ IPL SCHSGL RESMASK SCH$GQ-MWAIT SCH$WAIT SF$L SAVE AP SS$ ACCVIO SSS-I LLIOFUNC SSS-NORMAL
UC8$8 DEVCLASS UCB$B-ONLCNT UCB$L-DEVDEPEND UCB$L-STS UCB$V-LCL VALID UCB$V-VALlD UCB$W-DEVBUFSIZ
VA$M_BYTE

= =

********
00000000 00000004

x

01

= =

00000008
oooooooc

= 00000010

= 00000014

= = = = =

0000004C 00000024 OOOOOOOA 00000038 0000003A

= 0000003E

******** x 01
= 00000012

******** x 01 ******** x 01

=

********
00000008

x

01

= oooooooc

= OOOOOOF4

= =

00000001 00000040

= OOOOOOAE

= =

00000044 00000064

= =

00000011 00000008

= =

00000042 OOOOOlFF

SYSQIOFDT Psect synopsis

- SYSTEM SERVICE QUEUE I/O FDT SUBROUTIN 3-JUN-1984 15:36:44 VAX-11 Macro V03-01

Page 25

24-APR-1982 15:51:12 OISK$VMSMASTER:[SYS.SRC]SYSQIOFDT.(2)

+----~--~--------+
! Psect synopsis !
+------~---------+

PSECT name

Allocation

PSECT No. Attributes

ABS BLANK $ABS$

00000000 000002A2 00000000

0.) 00 674.) 01
0.) 02

0.) NOP IC USR CON ABS LCL NOSHR NOEXE NORD NOWRT NOVEC BYTE

1.) NOP IC USR CON REL LCL NOSHR EXE RD

WRT NOVEC BYTE

2.) NOP IC USR CON ABS LCL NOSHR EXE RD

WRT NOVEC BYTE

+-----------------------~+
! Performance indicators ! +------------------------+

Phase

Page faults

CPU Time

Elapsed Time

Initialization Command processing Pass 1 Symbol table sort Pass 2 Symbol table output Psect synopsis output Cross-reference output Assembler run totals

15

00:00:00.07

00:00:02.88

91

00:00:00.73

00:00:09.00

454

00:00:18.08

00:01:39.32

0

00:00:02.73

00:00: 14. 75

168

00:00:04.66

00:00:30.16

10

00:00:00.11

00:00:00.36

2

00:00:00.03

00:00:00.04

0

00:00:00.00

00:00:00.00

743

00:00:26.42

00:02:36.51

The working set limit was 1650 pages. 98202 bytes (192 pages) of virtual memory were used to buffer the intermediate code. There were 100 pages of symbol table space allocated to hold 1840 non-local and 44 local 969 source lines were read in Pass 1, producing 15 object records in Pass 2. 23 pages of virtual memory were used to define 22 macros.

symbols.

! Macro library statistics ! +--------------------------+

Macro library name

Macros defined

$255$DUA28:[SYS.OBJ]LIB.MLB;1

10

-$255$DUA28: [SYSLIB]STARLET.MLB;2

9

fOTALS (all libraries)

19

1922 GETS were required to define 19 macros.

There were no errors, warnings or information messages.

MACRO/LIS=LIS$:SVSQIOFDT/OBJ=OBJ$:SVSQIOFDT MSRC$:SVSQIOFDT/UPDATE=(ENH$:SYSQIOFDT)+EXECML$/LIB

IOSUBNPAG

IOSUBNPAG Table of contents

(3)
(4)
(5) (6)
(7)
(8) (9) (10)
( 11)
( 12) ( 14) (15) (16)
( 17)
( 18) ( 19) ( 21 ) (23) (24) (25) (26) (27) (28) (29) (30) ( 31 ) (32) (33)
(34) (35) (36)

172 204.2 276 307 362 422 470 560 593 631 718 778 817.2 862 967 1074 1197 1397 1416 1450 1486 1521 1623 1734.2 1734.62 1734.133 1734. 198 1734.277 1734.458 1734.622 1734.672

- NONPAGED I/O RELATED SUBROUTINES

3-JUN-1984 11 :33:30 VAX-11 Macro V03-01

CANCEL I/0 ON CHANNEL Handle Last Channel Deassign FILL DIAGNOSTIC BUFFER RELEASE I/O CHANNEL REQUEST I/O CHANNEL I/O Request Completion Processing for Class Drivers
I/O REQUEST COMPLETION PROCESSING MOUNT VERIFICATION HELPER INITIATE I/O FUNCTION ON DEVICE Allocate Buffered Data Path Release Buffered Data Path REQUEST AND ALLOCATE UNIBUS MAP REGISTERS FOR CLASS DRIVER REQUEST UNIBUS MAP REGISTERS ALLOCATE UNIBUS MAP REGISTERS Allocate a specific set of UNIBUS Map Registers Permanently Allocate UNIBUS Map Registers Release UNIBUS Map Registers RETURN TO CALLER WAITFOR INTERRUPT OR TIMEOUT AND KEEP CHANNEL WAITFOR INTERRUPT OR TIMEOUT AND RELEASE CHANNEL
ALLOCATE SYSTEM PAGE TABLE CONVERT DEVICE NAME AND UNIT BROADCAST TO A TERMINAL SCAN THE I/O DATA BASE
SCAN THE I/0 DATA BASE BOTH PRIMARY & SECONDARY PATHS
IOC$CTRLINIT - Call driver controller init. routine IOC$UNITINIT - Cal 1 driver unit init. routine Parse Device Name String Search I/O Database for Device Continue I/O Database Search Check UCB Against Search Rules

Page 0

IOSUBNPAG V03-033
;WMC0002 ;WMC0002
-1
;ACG0399 ;ACG0399 ;WMC0002 ;WMC0002 ;WMC0002 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;TMK0001 ;TMK0001 ;TMK0001 ;RLRPDTADP ;RLRPDTADP ;RLRPDTADP ;RLRPDTADP ;RLRPDTADP ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0406 ;ACG0406 ;ACG0406

- NONPAGED I/O RELATED SUBROUTINES

3-JUN-1984 11;33;30 VAX-11 Macro V03-01

Page 1

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC)IOSUBNPAG.(1)

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

1

. TITLE IOSUBNPAG - NONPAGED I/O RELATED SUBROUTINES

.1

. I DENT 'V03-033'

. 2

3 ;****************************************************************************

4 ;*

5 ;*

6 7

' ·
;

*
*

8 ;*

COPYRIGHT (c) 1978, 1980, 1982 BY DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS. ALL RIGHTS RESERVED.

*
*
* * *

9
10
11
12 13 14 15 16 17 18 19 20
21 22 23 24

;*

;
;

* *

; *

; *

; *

; *

; *

; * ; * ; *

;*

; ;

* *

; *

;***

THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.

* * * * * *

THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.

*
* * *

DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT WHICH· IS NOT SUPPLIED BY DIGITAL.

*
*
*

*

**************************************************************************

25

26 D. N. CUTLER 13-JUN-76

27

28

29 NONPAGED I/O RELATED SUBROUTINES

30

.1 MODIFIED BY:

. 2

. 3

V03-033 WMC0002

Wayne Cardoza

03-May-1984

.4

Add support for MNTVERPND bit.

. 5

.6

V03-032 RAS0300

Ron Schaefer

2-May-1984

. 7

Change IOC$CVT DEVNAM to only prefix cluster node names if

.8

the DEV$V NNM device characteristic is set in UCB$L DEVCHAR2.

.9

Add additional itemcode (4) to IOC$CVT DEVNAM to provide

. 10

the device name string sans unit number.

.11

. 12

V03-031 TMKOOOl

Todd M. Katz

23-Apr-1984

. 13

Remove the $LOGDEF data definitions.

.14

. 15

V03-030 RLRPDTADP

Robert L. Rappaport

9-Apr-1984

. 16

Modify entrypoints used for allocating and deallocating

· 17

Buffered Data Paths and UNIBUS Map Registers for UQPORTS (UDA),

. 18

to pickup pointer for ADP from PDT$L_ADP(R4).

.19

.20

V03-029 ACG0414

Andrew C. Goldstein,

30-Mar-1984 15:49

. 21

Minor parse and searching fixes in IOC$SEARCH ...

.22

add IOC$V_ALLOC to force allocation

.23

.24

V03-028 ACG0406

Andrew C. Goldstein,

16-Mar-1984 15:42

.25

Fix bugs in searching for al location class

.26

IOSUBNPAG V03-033
;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;RLRMAPSP .;RLRMAPSP
;RLRMAPSP ;·RLRMAPSP
;RLRMAPSP ;ROW0292 ;ROW0292 ;ROW0292 ;ROW0292 ;KPLOOOl ;KPLOOOl ;KPL0001 ;ROW0244 ;ROW0244 ;ROW0244 ;ROW0244 ;ROW0244 ;ROW0244 ;ROW0239 ;ROW0239 ;ROW0239 ;ROW0239 ;ROW0239 ;ROW0234 ;ROW0234 ;ROW0234 ;ROW.0234 ;ROW0234 ;ROW0234 ;ROW0234 ;TCMOOOS ;TCMOOOS ;TCM0005 ;TCMOOOS ;TCM0005 ;KDM0084 ;KDM0084 ;KDM0084 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0203 ;ROW020-3 ;ROW0203 ;,ROW0203 ;ROW0203 ;ROW0203 ;TCM0004 ;TCM0004 ;TCM0004

- NONPAGED I/O RELATED SUBROUTINES

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 2

12-MAR-1982 17:12:23 DISK$VMSMASTER: [SYS.SRC)IOSUBNPAG.(1)

0000 .27
0000 .28 0000 .29 0000 .30
0000 . 31 0000 .32 0000 .33 0000 .34 0000 .35 0000 .36 0000 .37 0000 .38 0000 .39 0000 .40 0000 .41 0000 .42 0000 .43 0000 .44 0000 .45 0000 .46 0000 .47 0000 .48 0000 .49 0000 .50 0000 . 51 0000 .52 0000 .53 0000 .54 0000 .55 0000 .56 0000 .57 0000 .58 0000 .59 0000 .60 0000 .61 0000 .62
0000 .63 0000 .64 0000 .65 0000 .66 0000 .67 0000 .68 0000 .69 0000 .70 0000 . 71 0000 .72 0000 .73 0000 .74 0000 .75 0000 .76 0000 .77 0000 .78 0000 .79 0000 .80 0000 . 81 0000 .82 0000 .83

V03-027 ACG0399

Andrew C. Goldstein,

24-Feb-1984 22:28

Add IOC$LAST CHAN subroutine, and move in internal I/O

database parse and search routines, so they can be called

by IPC.

V03-026 RLRMAPSP

Robert L. Rappaport

15-Feb-1984

Correct bug in BEQL destination in IOC$ALOUBAMAPSP that is

only triggered if the range specified, coincides with the

exact end of an extent of map registers.

V03-025 ROW0292

Ralph 0. Weber

4-FEB-1984

Fix branch displacements broken by movement of EXE$MOUNTVER to

SYSLOAxxx.

V03-024 KPLOOOl

Peter Lieberwirth

7-Nov-1983

Add paths for new processors to CPUDlSP invocation.

V-03-023 ROW0244

Ralph 0. Weber

17-0CT-1983

Change the IOC$CVT DEVNAM name string formation rules ~o

eliminate $1$TTAO~ and other al location class based names

for devices which can never be dual pathed. See routine

comments for details of current operation mode.

V03-022 ROW0239

Ralph 0. Weber

11-0CT-1983

Fix IOC$CVT DEVNAM to not insert node name or trailing dol Jar

sign when n~de name is nul 1. Also correct comments describing

the R4 argument to IOC$CVT DEVNAM.

V03-021

ROW0234

Ralph 0. Weber

5-0CT-1983

Change IOC$CVT DEVNAM to produce $al location-class$device

strings completely in ASCII, when allocation class output

requested. In the process rip up the whole thing because

was the only way to get something that worked and didn't

occupy al 1 non-page memory

is that

V03-020 TCM0005

Trudy C. Matthews

5-0CT~1983

Add IOC$SCAN IODB 2P which is functionally the same as

IOC$SCAN IOCB except that both primary and secondary paths to

a device-are scanned.

V03-019 KDM0084

Kathleen D. Morse

26-Sep-1983

Added MicroVAX I support to CPUDISP macros.

V03-018 ROW0221

Ralph 0. Weber

8-SEP-1983

Change IOC$UNITINIT to look for a unit initialization routine

in the DDT before looking in the CRB. See the note in the

routine's header for details.

V03-017 ROW0203

Ralph 0. Weber

5-AUG-1983

Add two new routines IOC$CTRLINIT and IOC$UNITINIT. These are

the proscribed mechanism for cal ling device driver controller 0

and unit initialization routines. These routines correctly

setup for, locate, and cal 1 the appropriate driver routines.

V03-016 TCM0004

Trudy C. Matthews

26-Jul-1983

Change IOC$CVT <devnam> form

oDf EVdNeAvMiceto

return name if

the <allocation R4 > 0.

class>+

IOSUBNPAG V03-033
;TCM0004 ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;LMPBUILD ;LMPBUILD ;LMPBUILD ;TCM0003 ;TCM0003 ;TCM0003 ;TCMQ003 ;TCM0003 ;TCM0003 ;TCM0002 ;TCM0002 ;TCM0002 ;TCM0001 ;TCMOOOl ;TCMOOOl ;TCM0001 ;TCM0001 ;ROW0188 ;ROW0188 ;ROW0188 ;KTA3022 ;KTA3022 ;KTA3022 ;KTA3022 ·; ROWO 140 ;ROW0140 ;ROW0140 ;ROW0140 ;ROW0140 ;MLJ0101 ;MLJ0101 ;MLJ0101 ;KTA3018 ;KTA3018 ;KTA3018 ;ROW0130 ;ROW0l30 ;ROW0130 ;ROW0130 ;KDM0002 ;KDM0002 ;KDM0002 ;RLR0003 ;RLR0003 ;RLR0003 ;RLR0003

- NONPAGED I/O RELATED SUBROUTINES

3-JUN-1984 11 :33:30 VAX-11 Macro V03-01

Page 3

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG.(1)

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

.84 .85 .86 .87 .88 .89 .90 .91 .92 .93 .94 .95 .96 .97 .98 .99 . 100 . 101 . 102 . 103 . 104 . 105 . 106 . 107 . 108 . 109 . 110 . 111 . 112 . 113 . 114 . 115 . 116 . 117 . 118 . 119 . 120 . 121 . 122 . 123 . 124 . , 25 . , 26 . , 27
. 128 . 129 . 130 . 131 . 132
. 133 . 134 . 135 . 136 . 137 . 138 . 139 . 140

V03-015 RLRBYTEOFF

Robert L. Rappaport

27-Jun-1983

Correct error in IOC$REQDATAPUDA. Error is that this

routine has operated in a NOWAIT mode, that is, if no

Buffered Datapath was available, we just used the

Direct Datapath. Unfortunately, this doesn't work on

780's and 790's if the user buffer is located at an

odd byte address since Byte Offset doesn't work on the

Direct Datapath for the UNIBUS Adapters on these

processors.

V03-014 LMPBUILD

L. Mark Pilant,

26-Jun-1983 23:11

Change references from TTY$K_WB_HDRLEN to TTY$K_WB LENGTH.

V03-013 TCM0003

Trudy C. Matthews

17-Jun-1983

Change the way cluster-style device names are conditionally

returned, such that cluster-style names are returned for

local disk devices if the system is participating in a

cluster (routine IOC$CVT DEVNAM).

V03-012 TCM0002

Trudy C. Matthews

Fix bug in TCMOOOl.

09-Jun-1983

V03-011 TCM0001

Trudy C. Matthews

21-Apr-1983

Add new parameter to IOC$CVT DEVNAM that al lows caller

to specify whether he wants Ihe node name returned tor

local devices or not.

V03-010 ROW0188

Ralph 0. Weber

Fix broken branches to PMS$ routines.

30-APR-1983

V03-009 KTA3022

Kerbey T. Altmann

29-Dec-1982

Enhance KTA3018. Add new routine to scan the IO

data base and return the blocks.

V03-008 ROW0140

Ralph 0. Weber

18-NOV-1982

Cause IOC$DALOCUBAMAP to give non-fatal INCONSTATE,

"I neons is tant UBA data base'' bugcheck if nurnbe r of map

registers to deal locate is zero.

V03-007 MLJ0101 Add $SBDEF.

Martin L. Jack

11-Nov-1982

V03-006 KTA3018

Ker·bey T. Al trnarrn

0 1 -- Nov - 1 9 8 2

Modify CVT DEVNAME for new IO database.

V03-005 ROW0130

Ralph 0. Weber

5-0CT-1982

Remove IOC$DELMBX whose functionality is replaced by new

routines in module UCBCREDEL.

V03-004 KDM0002 Added $DCDEF.

Kathleen D. Morse

28-Jun-1982

V03-003 RLR0003

Robert L. Rappaport

1-June-1982

Correct errors in UNIBUS map register al location and

deallocation that occur when the number of active

descriptors is zero. Errors were in IOC$ALOUBAMAPSP

IOSUBNPAG V03-033
;RLR0003 ;RLR0003 ;RLR0003 ;RLR0003 ;RLR0002 ;RLR0002 ;RLR0002 ;RLROOOl ;RLROOOl ;RLROOOl ;RLROOOl ;RLROOOl ;RLROOOl

- NONPAGED I/O RELATED SUBROUTINES

3-JUN-1984 11:33:30 VAX-11 Macro V03-0l

Page 4

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG.(1)

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000. 0000 0000 0000

.141 . 142 . 143 .144 . 145 . 146 . 147
. 148
· 149
. 150 . 151 . 152 . 153

(allocation error), IOC$ALOUBAPRM (allocation error), and IOC$DALOCUBAMAP (deallocation error). The error in IOC$DALOCUBAMAP is corrected in a patch to V3.1.

V03-002 RLR0002

Robert L. Rappaport

22-May-1982

Remove IOC$REQMAPREGN and all comments that reference it.

V03-001

RLROOOl Robert L. Rappaport

22-May-1982

Correct error in UNIBUS map register allocation that

doubly allocated registers when the number of active

descriptors was zero.

This bug corrected in patch to V3.1.

IOSUBNPAG V03-033
-114
;_ACG0399 ;ACG0399 ;ACG0399 ;KDM0002 -2
;TMKOOOl ;TMKOOOl ;TMKOOOl ;TMKOOOl ;TMKOOOl ;TMK0001 ;TMK0001 ;TMKOOOl ;TMKOOOl ;TMKOOOl ;MLJ0101 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399

- NONPAGED I/O RELATED SUBROUTINES

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

145

146

147 ; MACRO LIBRARY CALLS

148

149

150

$ADPDEF

151

$CA DEF

.1

$CANDEF

. 2

$CDRPDEF

. 3

$CRBDEF

.4

$DC DEF

154

$DOB DEF

155

$DDTDEF

156

$DEVDEF

157

$DYNDEF

158

$EMBDEF

159

$IDBDEF

.1

$IOCDEF

. 2

$IPLDEF

.3

$IRPDEF

.4

$JIBDEF

.5

$LCKDEF

.6

$MSCPDEF

. 7

$PCBDEF

.8

$PDTDEF

.9

$PRDEF

. 10

$PRVDEF

. 11

$SBDEF

. 12

$SSDEF

. 13

$TTVDEF

. 14

$UBMDDEF

.15

$UCBDEF

. 16

$VECDEF

3-JUN-1984 11; 33; 30 VAX-11 Macro V03-01

Page 5

12-MAR-1982 17; 12; 23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG.(2)

;DEFINE ADP OFFSETS

;DEFINE CONDITIONAL ASSEMBLY PARAMETERS

;DEFINE CANCEL I/O REASON CODES

;DEFINE CLASS DRIVER I/O REQUEST PACKET

;DEFINE CRB OFFSETS

;DEFINE DEVICE CLASSES

;DEFINE DOB OFFSETS

;DEFINE DDT OFFSETS

;DEFINE DEVICE CHARACTERISTICS FLAGS

;DEFINE DYNAMIC POOL BLOCK TYPES

;DEFINE EMB OFFSETS

;DEFINE IDB OFFSETS

;DEFINE IOC$SEARCHxxx FLAGS

;DEFINE INTERRUPT PRIORITY LEVELS

:DEFINE !RP OFFSETS

:DEFINE JIB OFFSETS

;DEFINE LOCK MANAGER SYMBOLS

;DEFINE MSCP STRUCTURES

;DEFINE PCB OFFSETS

;Define PDT offsets

;DEFINE PROCESSOR REGISTERS

;DEFINE PRIVILEGE BITS

;' DEDFeIfNiEne

system SYSTEM

block STATUS

offsets CODES

;DEFINE TERMINAL WRIT~ PACKET OFFSETS

;Define UNIBUS Map Descriptor structure

;DEFINE UCB OFFSETS

;DEFINE CRB VE~TOR OFFSETS

IOSUBNPAG V03-033
-12

- NONPAGED I/O RELATED SUBROUTINES CANCEL I/O ON CHANNEL

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 6

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG.(3)

11 64 A5 08 60 A4 OC A3
OA 28 A3 52
04 64 A5 08

0000 0000 0000 0000 0000 0000 0000
0000 0000
0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00000000 0000 El 0000 D1 0005 12 OOOA
91 oooc
12 0010 AS 0012 05 0016

172

.SBTTL CANCEL I/O ON CHANNEL

173 ;+

174 IOC$CANCELIO - CANCEL I/O ON CHANNEL

175

176 THIS ROUTINE IS A DEVICE INDEPENDENT CANCEL I/O ROUTINE THAT CONDITIONALLY

177 MARKS THE UCB SUCH THAT THE CURRENT I/O REQUEST WILL BE CANCELED IF CONDITIONS

178 WARRANT SUCH A ACTION.

179

180 INPUTS:

181

182

R2 = NEGATIVE OF THE CHANNEL NUMBER.

183

R3 = CURRENT IO PACKET.

184

R4 = PCB ADDRESS.

185

R5 = UCB ADDRESS.

186

187 OUTPUTS:

188

189

IF THE DEVICE IS BUSY, THE REQUEST IS FOR THE CURRENT PROCESS, AND

190

THE I/O WAS ISSUED FROM THE DESIGNATED CHANNEL, THEN THE CANCEL I/O

191

BIT IS SET IN THE CORRESPONDING UCB.

192

193

R2, R3, R4, AND R5 ARE PRESERVED ACROSS CALL.

194 ' 195

196

.PSECT WIONONPAGED

197 I OC$CANCELI 0: :

;CANCEL I/O ON CHANNEL

198

BBC

#UC8$V BSY,UCB$W STS(R5),10$ ;IF CLR, DEVICE NOT BUSY

199

CMPL

IRP$L PID(R3),PCB$L PID(R4) ;PROCESS ID MATCH?

200

BNEQ

10$ -

-

;IF NEQ NO

201

CMPW

R2,IRP$W CHAN(R3)

;CHANNEL NUMBER MATCH

202

BNEQ

10$

-

;IF NEQ NO

203

BISW

#UCB$M_CANCEL,UCB$W_STS(R5) ;SET CANCEL PENDING

204 10$:

RSB

IOSUBNPAG V03-033
;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACGB399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399
;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ACG0399
ACG0399 ACG0399

- NONPAGED I/O RELATED SUBROUTINES Handle Last Channel Deassign

3-JUN-1984 11 :33:30 VAX-11 Macro V03-01

Page 7

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SVS.SRC]IOSUBNPAG.(4)

52 58 02
07
53 58 A5 58 01
50 0088 C5
DC BO
lA 38 A5 17
00100004 SF 38 A5
05 00 38 A5 07
10 06 64 A5
FFBO' FFAD'

0017 0017 0017 0017 0017 0017 0017
0017 0017 0017 0017 0017 0017 0017 0017 0017 0017 0017 0017
0017 0017 0017 0017 0017 0017 0017 0017 0017 0017 7C 0017 9A 0019 1 1 001C 001E 001E DO 001E 9A 0022 0025 DO 0025 002A 16 002E 0031 EO 0034 0039 D3 0039 003F 0041 13 0041 E4 0043 0048 El 0048 004A 30 004D 30 0050 05 0053 0054 0054

. 2

.SBTTL Handle Last Channel Deassign

.3

.4 ;+

.5 IOC$LAST CHAN - Last Channel Deassign Specific

.6 IOC$LAST-CHAN AMBX - Last Assoc. MBX Channel Deassign Specific

.7

.8 Functional Description:

.9

. 10

Common functions dorie on last channel deassignment are handled. The

.11

driver's cancel I/O routine is cal led with an appropriate reason code

. 12

(CAN$C DASSGN for regular deassign, or CAN$C AMBXDGN for associated

. 13

mailboxes). If after the cancel routine finished UCB$V DELETEUCB is

. 14

set, the UCB is credited and deleted .

. 15

.16 Inputs:

. 17

. 18

R5

UCB address

. 19

R2

Channel index (LAST CHAN only)

.20

. 21 Outputs:

.22

.23

RO thru R3 destroyed.

.24

If appropriate, UCB is deal located.

.25

.26

.27

.28

.ENABLE LSB

.29

.30 IOC$LAST CHAN AMBX::

. 31

CLRQ

R2

Clear unused cancel inputs.

.32

MOVZBL #CAN$C AMBXDGN, RB

Set cancel reason code.

.33

BRB

10$

.34

.35 IOC$LAST CHAN::

. 36

MOVL

UCB$L IRP(R5), R3

Get active packet address.

.37

MOVZBL #CAN$C DASSGN, R8

Set cancel reason code.

.38

.39 10$:

MOVL

UCB$L DDT(R5), RO

Get DDT address.

.40

SETI PL UCB$B-FIPL(R5)

Raise to fork IPL.

.41

JSB

@DDT$L CANCEL(RO)

Call driver's cancel I/O routine.

.42

SETI PL #IPL$ ASTDEL

Lower IPL.

.43

BBS

#DEV$V ALL, -

Branch if still allocated

.44

UCB$L DEVCHAR(R5),30$

.45

BITL

#DEV$M TRM!DEV$M_MBX, - Is this a terminal, remote terminal

.46 .47 .48 .49 .50 20$: .51 .52 .53 .54 30$: .55 .56

BEQL BBSC
BBC
BSBW BSBW RSB

UCB$L DEVCHAR(R5) 20$ -
#DEV$V OPR, UCB$L DEVCHAR(R5), 20$ #UCB$V DELETEUCB,UCB$L STS(R5), 30$ IOC$CREDIT UCB IOC$DELETE-UCB

.DISABLE LSB

or mailbox? Branch if not. Else, clear OPR bit. This is an implicit operator disable. Branch if UCB not to be deleted.
Else credit UCB quotas, and delete the UCB.

IOSUBNPAG V03-033
-71

53 58 A5 18 2A A3 07
50 4C 63 50 08
OOOOOOOO'EF
80 80 0080 C5 52 0088 C5
10 62

- NONPAGED I/O RELATED SUBROUTINES FILL DIAGNOSTIC BUFFER

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 8

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SVS.SRC]IOSUBNPAG.(5)

0054 0054 0054
0054 0054 0054
0054 0054 0054 0054
0054 0054 0054 0054 0054 0054 0054 0054 0054 0054 0054 DO 0054 E1 0058 DO 005D
co 0061
7D 0064 006A
3C 0066 DO 0070 16 0075 05 0078

276

.SBTTL FILL DIAGNOSTIC BUFFER

277 ;+

278 ; IOC$DIAGBUFILL - FILL DIAGNOSTIC BUFFER

279

280 THIS ROUTINE IS CALLED AT THE END OF AN I/O OPERATION, BUT BEFORE RELEASING

281 THE I/O CHANNEL, TO FILL THE FINAL DEVICE PARAMETERS INTO AN INTERNAL DIAG-

282 NOSTIC BUFFER IF ONE IS SPECIFIED.

283

284 INPUTS:

285

286

R4 ADDRESS OF DEVICE CSR REGISTER.

287

R5 DEVICE UNIT UCB ADDRESS.

288

289 OUTPUTS:

290

291

IF A DIAGNOSTIC BUFFER WAS SPECIFIED IN THE ORIGINAL REQUEST, THEN

292

THE COMPLETION TIME, FINAL ERROR COUNTERS, AND DEVICE REGISTERS ARE

293

FILLED INTO THE DIAGNOSTIC BUFFER.

294

295

296 IOC$DIAGBUFILL::

;FILL DIAGNOSTIC BUFFER

297

MOVL

UCB$L IRP(R5),R3

;GET ADDRESS OF I/O PACKET

298

BBC

#IRP$V DIAGBUF,IRP$W STS(R3),10$ ;IF CLR, NO DIAGNOSTIC BUFFER

299

MOVL

@IRP$L-DIAGBUF(R3),RO ;GET ADDRESS OF INTERNAL BUFFER DATA AREA

300

ADDL

#8,RO -

;POINT PAST START TIME

301

MOVQ

EXE$GQ_SVSTIME,(RO)+

;INSERT COMPLETION TIME

302 303 304 305 10$:

MOVZWL MOVL JSB RSB

UCB$B ERTCNT(R5),(RO)+ UCB$L-DDT(R5),R2
@DDT$L_REGDUMP(R2)

INSERT FINAL ERROR COUNTERS GET ADDRESS OF DDT CALL DEVICE SPECIFIC REGISTER DUMP ROUTINE

IOSUBNPAG V03-033
-1

- NONPAGED I/O RELATED SUBROUTINES RELEASE I/O CHANNEL

3-JUN-1984 11 :33:30 VAX-11 Macro V03-01

Page 9

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG.(6)

50 24 A5 50 20 AO
10
50 24 A5 50 20 AO
02 04 50 24 AS 25 OE AO 00 51 2C AO 04 A1 55 1B 52 00 BO 16 38 55 52 53 10 AS 54 61 04 Al SS OC BS 38
04 Al OE AO 01

0079 0079 0079 0079 0079 0079 0079 0079 0079 0079 0079 0079 0079 0079 0079 0079 0079 0079 0079 0079 0079 0079 0079 0079 0079 0079 0079 DO 0079 DO 007D 11 0081 0083 DO 0083 DO 0087 13 008B 10 008D DO 008F El 0093 DO 0098 01 009C 12 OOAO OF OOA2 10 OOA6 BB OOA8 DO OOAA DO OOAD DO 0081 DO 0084 16 DOBB BA DOBB 05 OOBD 04 008E SA OOCl OS DOCS OOC6

307

.S8TTL RELEASE I/O CHANNEL

308 +

309 IOC$RELCHAN - RELEASE ALL I/O CHANNELS

310 IOC$RELSCHAN - RELEASE SECONDARY I/O CHANNEL

311

312 THIS ROUTINE IS CALLED AT THE END OF AN I/0 OPERATION TO RELEASE ALL

313 CHANNELS THE I/0 WAS BEING PERFORMED ON.

314

315 INPUTS:

316

317

R5 UCB ADDRESS OF DEVICE UNIT.

318

319 OUTPUTS:

320

321

THE CHANNELS ARE RELEASED AND AN ATTEMPT IS MADE TO REMOVE THE NEXT

322

WAITING DRIVER PROCESS FROM EACH CHANNEL QUEUE. IF A DRIVER PROCESS

323

IS WAITING, THEN THE CHANNEL IS ASSIGNED TO THAT DRIVER PROCESS AND

324

IT IS CALLED VIA A JS8 TO ITS CHANNEL WAIT RETURN ADDRESS. WHEN THE

325

CALLED DRIVER PROCESS RETURNS, A RETURN IS MADE TO THE DRIVER PROCESS

326

THAT RELEASED THE CHANNEL. IF THERE IS NO DRIVER PROCESS WAITING FOR

327

THE CHANNEL, THEN THE CHANNEL STATUS IS SET TO IDLE.

328

329

R3 AND R4 ARE PRESERVED ACROSS CALL.

330 ' 331

332

.ENABL LSB

333 IOC$RELSCHAN::

RELEASE SECONDARY I/O CHANNEL

334

MOVL

UCB$L CRB(R5),RO

GET ADDRESS OF PRIMARY CRB

335

MOVL

CRB$L-LINK(RO),RO

GET ADDRESS OF SECONARY CRB

336

BRB

20$ -

337 I OC$RELCHAN: :

;RELEASE I/O CHANNEL

338

MOVL

UCB$L CRB(R5),RO

;GET ADDRESS OF PRIMARY CRB

339

MOVL

CRB$L-LINK(RO),RO

;GET ADDRESS OF SECONDARY CRB

340

BEQL

10$ -

;IF EQL NONE

341

BSBB

20$

;RELEASE SECONDARY ~HANNEL

342 10$: 343 20$:

MOVL BBC

UCB$L CRB(R5),RO

;GET ADDRESS OF PRIMARY CRB

~CR8$V 8SY,CRB$B MASK(R0),30$ ;IF CLR, THEN CHANNEL NOT BUSY

344

MOVL

CRB$L YNTD+VEC$L-IDB(RO),R1 ;GET ADDRESS OF IDB

345

CMPL

R5,IDB$L OWNER(Rl)

;DRIVER PROCESS OWN CHANNEL?

346

BNEQ

30$

-

;IF NEQ NO

347

REMQUE @CRB$L WQFL(RO),R2

;GET ADDRESS OF NEXT DRIVER FORK BLOCK

348

BVS

40$ -

;IF VS NO DRIVER PROCESS WAITING

349

PUSHR #AM<R3,R4,R5>

;SAVE CONTEXT OF CURRENT DRIVER PROCESS

350

MOVL

R2,R5

;COPY ADDRESS OF DRIVER PROCESS FORK BLOCK

351

MOVL

UC8$L FR3(R5),R3

;LOAD WAITING DRIVER PROCESS CONTEXT

352

MOVL

IDB$L-CSR(R1),R4

;SET ASSIGNED CHANNEL CSR ADDRESS

353

MOVL

R5,IDB$L OWNER(Rl)

;SET ADDRESS OF OWNER PROCESS UCB

3S4

JSB

@UCB$L FPC(R5)

;CALL DRIVER AT CHANNEL WAIT RETURN ADDRESS

355 356 30$:

POPR RSB

#AM<R3:R4,R5>

.;RESTORE PREVIOUS DRIVER PROCESS CONTEXT

357 40$:

CLRL

IDB$L OWNER(Rl)

;CLEAR OWNER UNIT UCB ADDRESS

358

8ICB

#CRB$M_BSY,CRB$B_MASK(RO) ;CLEAR CHANNEL BUSY

359

RSB

360

.DSA8L LSB

IOSUBNPAG V03-033
-1

- NONPAGED I/O RELATED SUBROUTINES REQUEST I/O CHANNEL

3-JUN-1984 11:33:30 VAX-11 Macro V03-0l

Page 10

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG.(7)

50 24 A5 DO 50 20 AO DO
OE 11
50 24 A5 DO 50 20 AO DO
OD 11
50 24 A5 DO 52 50 DO 08 11
50 24 A5 DO 52 04 AO DO 51 2C AO DO 08 OE AO 00 E2
54 61 DO 04 A1 55 DO
05 10 A5 53 DO
OC A5 8EDO 62 65 OE 04 A 1 55 01
03 12 FF73 31

OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOC6 OOCA OOCE GODO GODO OOD4 OOD8 OODA OODA OODE OOE1 OOE3 OOE3 OOE7 OOEB OOEF OOF4 OOF7 OOFB OOFC 0100 0104 0107 010B 010D 0110

362

.SBTTL REQUEST I/O CHANNEL

363 +

364 IOC$REQPCHANH - REQUEST PRIMARY I/O CHANNEL HIGH PRIORITY

365 IOC$REQSCHANH - REQUEST SECONDARY I/O CHANNEL HIGH PRIORITY

366 IOC$REQPCHANL - REQUEST PRIMARY I/O CHANNEL LOW PRIORITY

367 IOC$REQSCHANL - REQUEST SECONDARY I/O CHANNEL LOW PRIORITY

368

369 THESE ROUTINES ARE CALLED TO REQUEST AN I/0 CHANNEL TO PERFORM AN I/O

370 OPERATION ON.

371

372 INPUTS:

373

374

R5 = UCB ADDRESS OF DEVICE UNIT.

375

04(SP) =RETURN ADDRESS OF CALLER'S CALLER.

376

377 OUTPUTS:

378

379

IF THE SPECIFIED I/O CHANNEL IS IDLE, THEN IT IS IMMEDIATELY

380

ASSIGNED TO THE CURRENT DRIVER PROCESS. ELSE THE DRIVER PROCESS

381

CONTEXT IS SAVED IN ITS FORK BLOCK, THE FORK BLOCK IS INSERTED

382

IN THE CHANNEL WAIT QUEUE, AND A RETURN TO THE DRIVER PROCESS'

383

CALLER IS EXECUTED.

384

385

WHEN THE CHANNEL IS ASSIGNED, THE CSR ADDRESS OF THE ASSIGNED

386

CONTROLLER IS RETURNED TO THE CALLER IN REGISTER R4.

387

388

R3 IS PRESERVED ACROSS CALL.

389

390

391

.ENABL LSB

392 I OC$REQSCHANH: :

REQUEST SECONDARY I/0 CHANNEL HIGH PRIORITY

393

MOVL

UCB$L CRB(R5),RO

GET ADDRESS OF PRIMARY CRB

394

MOVL

CRB$L-LINK(RO),RO

GET ADDRESS OF SECONDARY CRB

395

BRB

10$

396 IOC$REQSCHANL::

REQUEST SECONDARY I/O CHANNEL LOW PRIORITY

397

MOVL

UCB$L CRB(R5),RO

GET ADDRESS OF PRIMARY CRB

398

MOVL

CRB$L-LINK(RO),RO

GET ADDRESS OF SECONDARY CRB

399

BRB

20$ -

400 IOC$REQPCHANH::

REQUEST PRIMARY I/O CHANNEL HIGH PRIORITY

401

MOVL

UCB$L CRB(R5),RO

GET ADDRESS OF PRIMARY CRB

402 10$:

MOVL

RO,R2-

SET ADDDRESS OF WAIT QUEUE LISTHEAD

403

BRB

30$

404 IOC$REQPCHANL::

REQUEST PRIMARY I/O CHANNEL LOW PRIORITY

405

MOVL

UCB$L CRB(R5),RO

GET ADDRESS OF PRIMARY CRB

406 20$:

MOVL

CRB$L-WQBL(RO),R2

GET ADDRESS OF LAST ENTRY IN QUEUE

407 30$:

MOVL

CRB$L-INTD+VEC$L IDB(RO),Rl ;GET ADDRESS OF IDB

408

BBSS

#CRB$V BSY,CRB$B-MASK(R0),40$ ;IF SET, THEN CHANNEL BUSY

409

MOVL

IDB$L CSR(R1),R4-

;SET ASSIGNED CHANNEL CSR ADDRESS

410

MOVL

R5,IDB$L_OWNER(Rl)

;SET OWNER UCB ADDRESS

411

RSB

;

412 40$:

MOVL

R3,UCB$L FR3(R5)

;SAVE R3 IN FORK BLOCK

413

POPL

UCB$L FPC(R5)

;SAVE CHANNEL WAIT RETURN ADDRESS

414

INSQUE UCB$L-FQFL(R5),CRB$L WQFL(R2) ;INSERT DRIVER PROCESS IN CHANNEL WAIT

415

CMPL

R5,IDB$L OWNER(Rl) -

CURRENT DRIVER PROCESS OWNER?

416

BNEQ

50$

-

IF NEQ, BRANCH TO RETURN

417

BRW

IOC$RELCHAN

IF EQL BRW TO RELEASE CHANNELS

418 50$:

IOSUBNPAG V03-033

- NONPAGED I/O RELATED SUBROUTINES REQUEST I/O CHANNEL

05 0110 0111

419 420

RSB .DSABL LSB

3-JUN-1984 11 :33:30 VAX-11 Macro V03-01

Page 11

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRCJIOSUBNPAG.(7)

IOSUBNPAG V03-033 -1
;ROW0188
-1
;ROW0292 ;ACG0399

- NONPAGED I/O RELATED SUBROUTINES

3-JuN~1984 11:33:30 VAX-11 Macro V03-01

Page 12

I/0 Request Completion Processing for Cl 12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG.(8)

53 AO A5
55 1C A3 70 A5 15 50
38 A3 50
OOOOOOOO'GF
63 OOOOOOOO'FF
OOOOOOOO'GF E3

0111 0111 0111 0111 0111 0111 0111 0 l 11 0111 0111 0111 0111 0111 0111 0111 0111 0111 0111 0111 0111 0111 0111 0111 0111 9E 0111 0115 0115 DO 0115 D6 0119 01 lC E9 01 lC 011 F 011 F 70 011 F 0123 0123 0123 16 0123 0129 0129 0129 OE 0129 012B 0130 05 0133 0134 16 0134 11 013A

422

.SBTTL I/O Request Completion Processing for Class Drivers

423

424 ;+

425 ; IOC$ALTREQCOM - I/O Request Complete Alternate Entry.

426

427 This routine is entered when an I/O operation is completed on one

428

one of the devices using the disk or tape class drivers.

429

The packet is inserted in the I/O finish queue for I/O post

430

processing.

431

432 INPUTS:

433

434

RO First longword of I/O status

435

Rl Second longword of I/O status

436

R5 CORP address

437

438 OUTPUTS:

439

440

The I/O packet is inserted in the I/O Post Processing Queue,

441

a Software interrupt is requested to initiate I/O Post

442

Processing.

443 ·

444

445 IOC$ALTREQCOM::

446

MOVAB CDRP$L IOQFL(R5),R3

R3 => IRP section of CORP. This is

447

for compatibility with rest of QIO

448

logic.

449

MOVL

IRP$L UCB ( R3) , R5

R5 => UCB.

450

INCL

UCB$L=OPCNT(R5)

Increment operations completed

451

452

BLBC

R0,20$

LBC implies I/O error, so goto call

453

MOUNT VERIFICATION just in case.

454 10$:

455

MOVQ

RO,IRP$L_MEDIA(R3)

Save final I/O status in IRP.

456

457

. IF OF CA$_MEASURE IOT

458

.1

JSB

G/\PMS$END IO

Insert end of I/O transaction message

460

461

.ENDC

462

463

INSQUE (R3),@L/\IQC$GL PSBL

Insert packet in POST process queue

464 465 466 20$:
· 1 . 2

SOFTINT #IPL$ IOPOST RSB

JSB

G/\EXE$MOUNTVER

BRB

10$

Initiate SOFTWARE INTERRUPT
If LBC, call MOUNT VERIFICATION . Go back to normal flow.

IOSUBNPAG V03-033
-3

- NONPAGED I/O RELATED SUBROUTINES I/O REQUEST COMPLETION PROCESSING

3-JUN-1984 11 :33:30 VAX-11 Macro V03-01

Page 13

12-MAR-1982 17:12:23 DISK$VMSMASTER: [SYS.SRC]IOSUBNPAG.(9)

lC 64 A5 02 E5
52 0094 cs DO
1A A2 64 A5 BO 0080 C5 BO 10 A2
12 A'J so 70
50 DD FEA6' 30
SO BEDO 53 58 AS DO
70 A5 06 2A 50 E9
38 A3 so 7D

013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 013C 0141 0146 014B 014F 01S1 01SS 01S7 01SA 01SD 0161 0164 0167 0167 0167 0167 0167 0167 016B 0168 016B

470

.SBTTL I/O REQUEST COMPLETION PROCESSING

471 ;+

472 IOC$REQCOM - I/O REQUEST COMPLETE

473

474 THIS ROUTINE IS ENTERED WHEN AN I/O OPERATION IS COMPLETED ON A

475 DEVICE UNIT. THE FINAL I/O STATUS IS STORED IN THE ASSOCIATED I/O

476 PACKET AND THE PACKET IS INSERTED IN THE I/O FINISH QUEUE FOR

477 I/O POST PROCESSING. DEVICE UNIT BUSY IS CLEARED AND AN ATTEMPT

478 IS MADE TO START ANOTHER I/O REQUEST ON THE DEVICE UNIT.

479

480 IF THE I/0 REQUEST COMPLETED WITH AN ERROR, AND THE DEVICE IS

481 A DISK, THEN BRANCH TO THE MOUNT VERIFICATION CODE, WHICH WILL

482 DETERMINE IF THE SITUATION REQUIRES MOUNT VERIFICATION.

483

484 IF MOUNT VERIFICATION IS IN PROGRESS, NO FURTHER I/O REQUESTS WILL

485 BE INITIATED. THIS HAS A SIDE EFFECT OF KEEPING THE 'BSY' BIT IN

486 WHATEVER STATE IT IS CURRENTLY IN. FOR CONVENTIONAL DISK DRIVERS,

487 THE BSY BIT WILL BE LEFT ON, WHICH WILL BLOCK $QIO FROM INITIATING

488 ANY NEW I/0 ON THE DEVICE. FOR THE DISK CLASS DRIVER, THE BUSY

489 BIT WILL BE OFF, WHICH WILL ALLOW $QIO TO INITIATE NEW I/O.

490

491 INPUTS:

492

493

RO FIRST LONGWORD OF I/O STATUS.

494

Rl SECOND LONGWORD OF I/O STATUS.

495

R5 UCB ADDRESS OF DEVICE UNIT.

496

497 OUTPUTS:

498

499

THE I/0 PACKET IS INSERTED IN THE I/O POST PROCESSING QUEUE

500

AND DEVICE UNIT BUSY rs CLEARED. A SOFTWARE INTERRUPT rs

501

REQUESTED TO INITIATE I/O POST PROCESSING.

502 ·

503

504

.ENABL LSB

505 IOC$REQCOM::

;I/O DONE PROCESSING

506

BBCC

#UCB$V ERLOGIP,UCB$W STS(R5),10$ ;IF CLR, ERROR LOG NOT IN PROGRESS

507

MOVL

UCB$L EMB(R5),R2

-

;GET ADDRESS Of ERROR MESSAGE BUFFER

508

MOVW

UCB$W-STS(R5),EMB$W DV STS(R2) ;INSERT FINAL DEVICE STATUS

509

MOVW

UCB$B=ERTCNT(R5),EMB$B=DV_ERTCNT(R2) ;INSERT FINAL ERROR COUNTERS

510

MOVQ

RO,EMB$Q DV IOSB(R2)

;INSERT FINAL I/O STATUS

511

PUSHL RO

--

;SAVE RO

512

BSBW

ERL$RELEASEMB

;RELEASE ERROR MESSAGE BUFFER

513

POPL

RO

;RESTORE RO

514 10$:

MOVL

UCB$L IRP(R5),R3

;GET ADDRESS OF I/O PACKET

515

INCL

UCB$L-OPCNT(R5)

;INCREMENT OPERATIONS COMPLETED

516

BLBC

RO,DISKCHK

;IF I/O ERROR, CHECK FOR DISK DEVICE

517

518 DO NOT SAVE THE I/O STATUS IN THE IRP UNTIL IT HAS BEEN DECIDED THAT
S19 MOUNT VERIFICATION IS NOT NECESSARY. THIS rs TO AVOID OVERWRITING THE

. S20 PHYSICAL DISK ADDRESS STORED IN THE !RP AT OFFSET IRP$L_MEDIA.
521

522 20$:

MOVQ

RO,IRP$L_MEDIA(R3)

;STORE FINAL I/O STATUS

523

524

.IF OF CA$_MEASURE_IOT

525

IOSUBNPAG V03-033
;WMC0002
-1
;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;RLRMAPSP ;RLRMAPSP ;RLRMAPSP ;RLRMAPSP ;ROW0188 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002 ;WMC0002

- NONPAGED I/O RELATED SUBROUTINES I/O REQUEST COMPLETION PROCESSING

3-JUN-1984 11 :33:30 VAX-11 Macro V03-01

Page 14

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG.(9)

OOOOOOOO'EF 36
63 OOOOOOOO'FF
OE 2F 64 A5 53 4C B5
4C 0100 SF
64 A5
FEF2
01 40 A5
DO 13 05 64 A5 OE 00 64 A5 OOOOOOOO'GF BE
OOOOOOOO'GF C2
13 D8 64 A5
01 40 A5
D2 OE 00 64 A5 53 OOOOOOOO'GF B7

D5 016B 12 0171
0173 0173 0173 OE 0173 0175 017A EO 017D 017F OF 0182 1C 0186 AA 0188 018C 018E 31 018E 0191 0191 0191 0191 0191 0191 91 0191 0193 12 0195 E5 0197 0199 E5 019C 019E 16 01A1 11 01A7 01A9 01A9 01A9 16 01A9 11 01AF 01B1 01B1 01Bl 01B1 01B1 01B1 01B1 01B1 E5 01B1 01B3 91 01B6 01B8 12 OlBA E5 01BC 01BE 04 OlCl 16 01C3 11 01C9 01CB 01CB

526

TSTL

527

BNEQ

528

529

:ENDC

530

531 PMSEND: INSQUE

LAPMS$GL IOPFMPDB DO PMS
(R3),@LAIOC$GL PSBL

;DATA COLLECTION ENABLED? ;BRANCH IF YES
;INSERT PACKET IN POST PROCESS QUEUE

532

SOFTINT #IPL$ IOPOST

;INITIATE SOFTWARE INTERRUPT

533

BBS

#UCB$V MNTVERIP,-

;BRANCH IF MOUNT VERIFICATION IN PROGRESS

.1

UCB$W STS(R5),MNTVERPNDCHK ;(NOTE THIS LEAVES 'BSY' AS IS)

535 NXTIRP: REMQUE @UCB$L IOQFL(R5),R3

;REMOVE I/O PACKET FROM DEVICE UNIT QUEUE

536

BVC

IOC$INITIATE

;IF VC INITIATE NEXT FUNCTION

537

BICW

#UCB$M_BSY,UCB$W_STS(R5) ;CLEAR UNIT BUSY

538 RELEASE:

;RELEASE ALL CHANNELS

539

BRW

IOC$RELCHAN

540

541 IF THIS IS A DISK DEVICE, CALL THE MOUNT VERIFICATION ROUTINE

542 TO DETERMINE IF MOUNT VERIFICATION IS NECESSARY. IF NOT, CONTROL

543 WILL RETURN, AND THE REQUEST WILL BE COMPLETED IN THE NORMAL MANNER.

544 545

D' ISKCHK:

546

CMPB

#DC$ DISK,-

;IS THIS DEVICE A DISK?

547 548

BNEQ

UCB$B DEVCLASS(R5) 20$

;'BRANCH IF NOT

· 1

BBCC

#UCB$V MNTVERPND,-

;CHECK FOR MOUNT VERIFICATION PENDING

. 2

UCB$L STS(R5),30$

;IF NOT, JUST ENTER MOUNT VERIFICATION

.3

BBCC

#UCB$V MNTVERIP,-

;CLEAR IN-PROGRESS BIT BEFORE CALL

.4

UCB$L STS(R5),30$

; SO IT WILL REALLY START

. 5 30$: , JSB

GAEXE$MOUNTVER

;START MOUNT VERIFICATION

.6

BRB

20$

;COMPLETE I/O REQUEST

. 7

.8

.IF OF CA$_MEASURE_IOT

.9 . 10 DO PMS: JSB

GAPMS$END IO

;INSERT END OF I/O TRANSACTION MESSAGE

.11

BRB

PMS END -

;REJOIN COMMON CODE

. 12

. 13

.ENDC

. 14

. 15 THE MOUNT-VERIFICATION-PENDING BIT IS USED TO INDICATE THAT A DISK SHOULD GO

. 16 INTO MOUNT VERIFICATION AS SOON AS THE CURRENT I/O IS DONE. THIS IS INTENDED

. . 17 FOR USE IN A CLUSTER TO STALL I/O WHEN QUORUM IS LOST.
. 18

. 19 MNTVERPNDCHK:

.20

BBCC

#UCB$V MNTVERPND,-

CHECK FOR MOUNT VERIFICATION PENDING

. 21

UCB$L STS(R5),RELEASE

IF NOT, JUST CLEAN UP

.22

CMPB

#DC$ DI SK, --

IS THIS DEVICE A DISK?

.23

UCB$B DEVCLASS(R5)

.24

BNEQ

RELEASE

BRANCH IF NOT

.25

BBCC

#UCB$V MNTVERIP,-

CLEAR IN-PROGRESS BIT BEFORE CALL

.26 .27 40$:

CLRL

UCB$L STS(R5),40$ R3 -

NO IRP PASSED TO MOUNT VERIFICATION

.28

JSB

GAEXE$MOUNTVER

TRY TO START MOUNT VERIFICATION

.29

BRB

NXTI RP

WASN'T NECESSARY

.30

.31

.DSABL LSB

IOSUBNPAG V03-033
-11

- NONPAGED I/O RELATED SUBROUTINES MOUNT VERIFICATION HELPER

3-JUN-1984 11 :33:30 VAX-11 Macro V03-01

Page 15

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(10)

53 B3 63 4C A5

OlCB OlCB 01CB OlCB OlCB 01CB 01CB 01CB OlCB 01CB OlCB 01CB OlCB OlCB OlCB OlCB OlCB OlCB OlCB OlCB OlCB OlCB OlCB OlCB OlCB 01CB OlCB D5 OlCB 13 OlCD OE OlCF OlDl 05 01D3

560 561 562 563 564 565 566 567
568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591

.SBTTL ;++
IOC$MNTVER

MOUNT VERIFICATION HELPER - Assist driver with mount verification.

This routine is cal led by EXE$MOUNTVER to perform some driver-specific actions necessary for mount verification. This routine is used by nonCLASS drivers, and is cal led by default if EXE$MOUNTVER finds the address of IOC$RETURN in DDT$L MNTVER.

Inputs:

R3

!RP address or 0

R5

UCB address

Outputs:

None.

Side effects:

If R3 contains an !RP address, the !RP will be queued to the head of the UCB's IRP work queue. If R3 contains is zero, then remove the IRP from the head of the UCB's work queue and attempt to initiate the I/O.

IOC$MNTVER:: TSTL BEQL INSQUE
RSB

R3 NXTIRP IRP$L IOQFL(R3),UCB$L--IOQFL ( R5)

;Driver-specific mount ;Check !RP address ;Branch if none ;Requeue the IRP

verification

;Return

code

IOSUBNPAG V03-033
-1
;ROW0188
-1

- NONPAGED I/O RELATED SUBROUTINES INITIATE I/O FUNCTION ON DEVICE

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 16

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC)IOSUBNPAG(11)

58 A5 53
OOOOOOOO'GF
78 A5 2C A3 0048 BF 64 A5
OB 2A A3 07 50 4C 83
OOOOOOOO'EF 60
50 0088 C5 00 BO

01D4 01D4 0104 0104 01D4 0104 0104 0104 0104 0104
01D4 01D4 0104 01D4 0104 0104 01D4 0104 0104 01D4 01D4 01D4 DO 0104 01D8 01D8 0108 16 01D8 OlDE OlDE OlDE 70 0 lDE AA 01E3 01E7 El 01E9 DO 01EE 7D 01F2 01F8 DO 01F9 17 OlFE

593

.SBTTL INITIATE I/0 FUNCTION ON DEVICE

594 ;+ 595 ; IOC$INITIATE - INITIATE NEXT FUNCTION ON DEVICE

'

596

597 THIS ROUTINE IS CALLED TO INITIATE THE NEXT FUNCTION ON A DEVICE BY CLEARING
598 STATUS BITS, SETTING THE OPERATION START TIME IF A DIAGNOSTIC BUFFER rs

599 SPECIFIED, AND CALLING THE DRIVER AT ITS START I/O ENTRY POINT.

600

601 INPUTS:

602

603

R3 ADDRESS OF I/O REQUEST PACKET.

604

R5 DEVICE UNIT UCB ADDRESS.

605

606 OUTPUTS:

607

608

CANCEL I/O, POWERFAIL, AND TIME OUT STATUS BITS ARE CLEARED, THS

609

CURRENT SYSTEM TIME IS FILLED INTO THE INTERNAL DIAGNOSTIC BUFFER

610

IF ONE IS SPECIFIED, AND THE DRIVER IS CALLED AT ITS START I/0 ENTRY

611

POINT.

612 ; -

613

614 IOC$INITIATE::

;INITIATE I/O FUNCTION

615

MOVL

R3,UCB$L_IRP(R5)

;SAVE I/0 PACKET ADDRESS

616

617

. IF OF CA$_MEASURE !OT

618

.1

JSB

GAPMS$START IO

;INSERT START OF I/O TRANSACTION MESSAGE

620

621

.ENDC

622

623

MOVQ

IRP$L SVAPTE(R3),UCB$L SVAPTE(R5) ;COPY TRANSFER PARAMETERS

624

BICW

#UCB$M_CANCEL!UCB$M TIMOUT,UCB$W_STS(R5) ;CLEAR CANCEL AND TIME OUT

625

BBC

#IRP$V DIAGBUF,IRP$W STS(R3),10$ ;IF CLR, NO DIAGNOSTIC BUFFER

626

MOVL

@IRP$L-DIAGBUF(R3),R5 ;GET ADDRESS OF DIAGNOSTIC BUFFER DATA AREA

627

MOVQ

EXE$GQ=SVSTIME,(RO)

;INSERT I/0 OPERATION START TIME

628 10$: 629

MOVL JMP

UCB$L DDT(R5),RO @DDT$L_START(RO)

;GET ADDRESS OF DRIVER DISPATCH TABLE ;START I/O OPERATION

IOSUBNPAG V03-033
-1
..
;RLRPOTADP
;RLRPDTAOP ;RLRPOTAOP ;RLRPOTAOP ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBVTEOFF ;RLRBVTEOFF ;RLRBVTEOFF ;RLRBVTEOFF ;RLRBYTEOFF ;KPLOOOl

- NONPAGED 1/0 RELATED SUBROUTINES Allocate Buffered Data Path

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 17

12-MAR-1982 17:12:23 DISK$VMSMASTER: [SVS.SRC]IOSUBNPAG(12)

10 10 QC 50 EB
10 A5 53 7D OC A5 8EDO 65 OE
18 Bl
05
50 24 A5 DO 51 38 AO DO 52 34 AO 9E
40 11
51 OOEO C4 DO 52 3C A5 9E
35 10 20 50 ES 29 00 A5 E9

0201 0201 0201 0201 0201 0201 0201 0201 0201 0201 0201 0201 0201 0201 0201 0201 0201 0201 0201 0201 0201 0201 0201 0201 0201 0201 0203 0206 0206 020A 020E 0210 0212 0213 0213 0213 0217 0216 021F 021F 0221 0221 0221 0226 022A 022A 022C 022F 0233 0233 0233 0233 0233 0233 0233 0233 0233

631

.SBTTL Allocate Buffered Data Path

632 ;+

633 ALLOCATE BUFFERED DATA PATH CODE -

634

635 IOC$REQDATAP - Entrypoint (called from traditional drivers) where caller

636

wishes to be queued (using UCB fork block) if no buffered data path

637

is available at the time of the call.

638 INPUT:

639

R5 => UCB.

640

641 IOC$REQDATAPNW - Entrypoint to call when caller does not want to wait for

642

unavailable data path.

643 INPUT:

644

R5 => UCB

645

646 IOC$REQDATAPUDA - Entrypoint (cal led from UDA port driver) where CORP

647

is used as the source of information about the request and where

648

the caller does not want to wait for unavailable datapath.

649

650 INPUT:

.1

R4 => PDT

651

R5 => CORP

652

653

654 IOC$REQDATAP::

655

BSBB

IOC$REQDATAPNW

Try to al lac. and get control after.

656

BLBS

RO, 10$

LBS implies al location success.

657

658

MOVQ

R3,UCB$L FR3(R5)

Save driver context in UCB fork block.

659

POPL

UCB$L FPC(R5)

Save caller's return point.

660

INSQUE UCB$L-FQFL(R5),-

Queue fork block to resource wait queue.

661

@ADP$L DPQBL(Rl)

Assumes IOC$ALODATAP saves R1=>ADP.

662 10$:

RSB

Return to caller or caller's caller.

663

664 IOC$REQDATAPNW::

665

MOVL

UCB$L CRB(R5),RO

RO=>CRB.

666

MOVL

CRB$L-INTD+VEC$L ADP(RO),Rl

Rl=>ADP (pass to IOC$ALODATAP)

667

MOVAB CRB$L-INTD+VEC$W=MAPREG(RO),R2

R2=>UBMD

668

669

BRB

IOC$ALODATAP

NOWAIT, RSB from IOC$ALODATAP

670

returns to our caller.

671 IOC$REQDATAPUDA::

.1

MOVL

PDT$L ADP(R4),R1

R1=>ADP (pass to IOC$ALODATAP)

. 2

MOVAB CDRP$L_UBARSRCE(R5),R2

R2=>UBMD

. 3

.4

BSBB

IOC$ALODATAP

Cal 1 to allocate a data path.

.5

BLBS

R0,20$

LBS means we got one.

.6

BLBC

CDRP$W_BOFF(R5),20$

LBC means, user buffer is on an

. 7

even byte address so we can use

.8

the Direct Data Path.

.9

.10 Here we have a transfer to a user buffer located at an odd byte address.

.11 On those processors which support Byte Offset on the Direct Datapath, we

. 12 can continue processing. On other processors, we must wait for a buffered

. 13 datapath.

.14

. 15

CPUDISP <<780,10$>,-

On 11-780 we wait.

IOSUBNPAG V03-033
;KPLOOOl ;KPLOOOl ;KPLOOOl ;KPLOOOl ;KPLOOOl ;KPLOOOl ;KPLOOOl ;KPL0001 ;RLRBVTEOFF ;RLR8VTEOFF ;RLR8VTEOFF ;RLR8VTEOFF ;RLR8VTEOFF ;RLR8VTEOFF ;RLRBVTEOFF ;KDM0084

- NONPAGED I/O RELATED SUBROUTINES Al locate Buffered Data Path

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 18

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SVS.SRC]IOSUBNPAG(12)

10 A5 53 70 OC A5 8EDO 28 85 86 65 OE 18 Bl
05

0233 0233 0233 0233 0233 0233 024D 024D 0251 0255 0258 025A 025C 025C 025D 025D

. 16 . 17 . 18 . 19 .20 . 21 .22 .23 10$: .24 .25 .26 .27 .28 20$: .29 .30 . 31 30$:

<750,20$>,<730,20$>,-
<790' 10$>, <8SS,10$>,<8NN,10$>,<UV1, 30$>>

; On 11-750 we continue. ; On 11-730 we continue. ; On 11-790 we wait. ; On SCORPIO we wait. ; On NAUTILUS we wait. ; On MicroVAX we bugcheck.

MOVQ POPL INCW INSQUE

R3,CDRP$L FR3(R5) CDRP$L FPC(R5) @CDRP$L RWCPTR(R5) CDRP$L FQFL(R5),@ADP$L-DPQBL(R1)

; Save driver context in CORP fork block. ; Save caller's return point. ; Increment RWAITCNT. ; Queue fork block to resource wait queue. ; Assumes IOC$ALODATAP saves Rl=>ADP.

RSB

; Return to caller or caller's caller.

BUG CHECK

IVBVTEALGN,FATAL

IOSUBNPAG V03-033
-9

- NONPAGED I/O RELATED SUBROUTINES Allocate Buffered Data Path

3-JUN-1984 1 1 : 33: 30 VAX-11 Macro V03-0l

Page 19

12-MAR-1982 17:12:23 DISK$VMSMASTER: [SYS.SRC)IOSUBNPAG(13)

07 17 03 A2
00 10 60 Al 50 , 2
50
05 00 03 A2
04 60 Al 50
50 01

0261 0261 0261 0261 0261 0261 0261 0261 0261 0261 0261 0261 0261 0261 0261 0261 ED 0261 0263 0266 0266 EA 0266 0268 0269 026B 13 026C 026E FO 026E 0270 0270 0272 0274 E4 0274 0279 027D DO 027D 05 0280

681 IOC$ALODATAP - Common subroutine cal led by above routines to al locate

682

a UNIBUS buffered datapath.

683

684 INPUTS:

685

Rl => ADP wherein the datapath al location bit map is stored.

686

R2 => UBA mapping descriptor in user's data structure.

687

688 OUTPUTS:

689

RO LBS - implies al location success

690

datapath field in R2 => UBA mapping descriptor is set to the

691

number of the datapath al located.

692

appropriate bit in datapath al location bit map is cleared.

693

RO LBC - implies al location failure.

694

695

696 IOC$ALODATAP:

697

BBS

#VEC$V PATHLOCK,-

If this user has a permanently allocated

698

UBMD$B-DATAPATH(R2), 10$

datapath, branch around to success.

699

700

ASSUME ADP$C NUMDATAP EQ 16

701

FFS

#0,- -

Find first available datapath,

702

#ADP$C NUMDATAP,-

according to bit map. Note failure

703

ADP$W DPBITMAP(Rl),-

leaves RO with the value "16", an

704

RO -

even number with the low bit clear.

705

BEQL

20$

EQL implies failure.

706

707

INSV

RO,-

Upon success, RO has number of the

708

#VEC$V OATAPATH,-

available datapath to al locate.

709

#VEC$S DATAPATH,-

So we update the user's datapath

710

UBMD$B-DATAPATH(R2)

descriptor pointed at by R2.

711

712

BBSC

RO,ADP$W DPBITMAP(Rl),10$; And we update the bit map.

713

BUG CHECK INCONSTATE

We shouldn't be here obviously.

714

715 10$:

MOVL

SA#SS$ NORMAL,RO

Indicate al location success.

716 20$:

RSB

And we return to our caller.

IOSUBNPAG V03-033
-1
;RLRPDTADP
;RLRPDTADP ;RLRPDTADP ;RLRPDTADP ;RLRPDTADP ;RLRPDTADP ;RLRPDTADP ;RLRPDTADP ;RLRPDTADP -9
;RLRBVTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBVTEOFF ;RLRBVTEOFF ;RLRBVTEOFF ;RLRBVTEOFF ;RLRBVTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBVTEOFF ;RLR6VTEOFF ;RLR6VTEOFF ;RLR6YTEOFF

- NONPAGED I/O RELATED SUBROUTINES Release Buffered Data Path

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 20

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SVS.SRC]IOSUBNPAG( 14)

51 OOEO C4 52 3C A5
oc
50 24 A5 52 34 AO 51 38 AO
50 03 A2 36
00 05 00
03 A2 00
52 50 05 50 14 Bl 26
7E 53 55
55 50 10
OA AS 22
51 24 A5
52

0281 0281 0281 0281 0281 0281 0281 0281 0281 0281 0281 0281 0281 0281 0281 0281 0281 0281 0281 0281 0281 0281 0281 0281 0281 DO 0281 9E 0286 11 028A 028C DO 028C 9E 0290 DO 0294 0298 98 0298 15 029C 029E 029E FO 029E 02AO 02A2 EF 02A4 02A6 OF 02A9 10 02AD 02AF 70 02AF DD 0262 DO 0264 91 0267 0289 12 0266 0280 0280 0280 DO 0260 02Cl FO 02C1

718

.SBTTL Release Buffered Data Path

719 ;+

720 : RELEASE BUFFERED DATA PATH CODE -

721

722 ; IOC$RELDATAPUDA - Entry point cal led from UDA port driver in response

723 ;

to an UNMAP cal 1. Here the data as to the buffered data path

724 :

is in the CORP.

725

726 ; INPUTS:

.1 ;

R4 => PDT

727 ;

R5 => CORP

728 ;

729 ; IOC$RELDATAP - Entry point cal led from traditional drivers to release

730 ;

the buffered datapath described in CRB$L INTD+VEC$B DATAPATH.

731 ;

732 ; INPUTS:

733 :

R5 => UCB

734

735 ; OUTPUTS:

736 ;

Datapath re-al located (if any waiters). RO, R 1, and R2 modified.

737 ; NOTE: Since cal Is to IOC$REQDATAPUDA are NOWAIT, fork blocks dequeued

738 ;

here from ADP$L_DPQFL are guaranteed to be UCB's.

739

740

741 IOC$RELDATAPUDA::

.1

MOVL

PDT$L ADP(R4),R1

; Rl => ADP.

. 2

MOVAB CDRP$L UBARSRCE(R5),R2 : R2 => UBMD.

.3

BRB

RELDATAP COMMON

.4 IOC$RELDATAP::

. 5

MOVL

UCB$L CRB(R5),RO

; RO => CRB.

.6

MOVAB CRB$L-INTD+VEC$W MAPREG(RO),R2 ; R2 => UBMD.

. 7

MOVL

CRB$L=INTD+VEC$L_ADP(RO),R1

: Rl => ADP.

.8 RELDATAP COMMON:

751

CVTBL UBMD$B_DATAPATH(R2),RO

; Get datapath designator.

752

BLEQ

10$

; If LSS permanent assignment.

753

; If EQL we had NO datapath to

754

; release.

755

INSV

#0,-

; Zero datapath number.

756

#VEC$V DATAPATH,#VEC$S DATAPATH,-

757

UBMD$B-DATAPATH(R2) -

.1

EXTZV #VEC$V-DATAPATH,-

; Extract datapath number.

. 2

#VEC$S-DATAPATH,RO,R2 ;

. 3

REMQUE @ADP$L=DPQFL(R1),RO

; RO => next driver fork block

.4

BVS

20$

; If VS no driver process waiting

.5

.6

MOVQ

R3,-(SP)

; Save R3, R4, R5

. 7

PUSHL RS

.8

MOVL

RO.RS

; R5 => driver fork block.

.9

CMPB

#DYN$C UCB,-

; Seii! if we dequeued a UCB or a CORP.

. 10

UCB$B_TVPE(RS)

. 11

BNEQ

30$

; NEQ implies a CORP .

. 12

. 13 ; Here we have R5 => UCB.

. 14

. 15

MOVL

UCB$L_CRB(RS),R1

: Rl => CRB.

. 16

. 17

INSV

R2,-

; Store assigned datapath #

IOSUBNPAG V03-033
;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBVTEOFF :-RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBVTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBYTEOFF ;RLRBVTEOFF ;RLRBYTEOFF ;RLRBYTEOFF
;RLRBYTEO~F
;RLRBYTEOFF ;RLRBYTEOFF

- NONPAGED I/O RELATED SUBROUTINES Release Buffered Data Path

3-JUN-1984 11: 33: 30 VAX-11 Macro V03-01

Page 21

12-MAR-1982 17: 12: 23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(14)

05 00 37 Al

53 10 AS 70 QC BS 16

53 FA 60 Al

55 BEDO SE 70
05 52 E3

05

S2 FO
05 00 3F AS
OOOOOOOO'EF 16
El 1 1

02C3 02C3 02C5 02C7 02C7 02CB 02CE 02CE 0201 0204 02DS 02DA 02DA 02DE 02DF 02DF 02DF 02DF 02DF 02E1 02E1 02E3 02E5 02E5 02EB 02EB 02ED

. 18

#VEC$V_DATAPATH,-

; in CRB .

.19

#VEC$S DATAPATH,-

.20

CRB$L_INTD+VEC$B_DATAPATH(R1)

. 21

.22

MOVQ

UCB$L FR3(R5),R3

; Restore driver context.

.23

JSB

@UCB$L_FPC(R5)

; Ca 11 back waiting driver.

.24 5$:

.25

POPL

RS

; Restore deal locator's R5,R4,R3

.26

MOVQ

(SP)+,R3

.27 10$:

RSB

; Return to deallocator.

.28 20$:

BBCS

R2,-

.29

ADP$W DPBITMAP(Rl) ,10$ ; Set datapath bit and exit

.30

BUG_CHECK INCONSTATE

: Inconsistent state.

.31

RSB

.32

.33 ; Here we have RS => CORP.

.34

.35 30$:

.36

INSV

R2,-

; Store assigned datapath #

.37

#VEC$V DATAPATH,-

; in CORP field.

.38

#VEC$S-DATAPATH,-

.39

CDRP$L=UBARSRCE+UBMD$B DATAPATH(RS)

.40

.41

JSB

SCS$RESUMEWA ITR

Resume waiting thread and any backed

.42

up IRP's .

. 43

BRB

5$

Branch back to resume deallocator's

.44

thread.

IOSUBNPAG V03-033
-20

- NONPAGED I/0 RELATED SUBROUTINES

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 22

REQUEST AND ALLOCATE UNIBUS MAP REGISTER 12-MAR-1982 17:12:23 DISK$VMSMASTER:(SYS.SRC]IOSUBNPAG(15)

25 10
OF 50 EB 10 A5 53 70
28 B5 B6 DC A5 8EDO
65 OE 34 B2
05

02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02ED 02EF 02Ef 02EF 02EF 02EF 02EF 02F2 02F6 02F9 02F9 02FD 02FF 0301

778

.SBTTL REQUEST AND ALLOCATE UNIBUS MAP REGISTERS FOR CLASS DRIVER

779 ;+

780 ; IOC$REQMAPUDA - REQUEST AND ALLOCATE UNIBUS MAP REGISTERS FOR CLASS DRIVER

781

782 THIS ROUTINE IS CALLED TO ALLOCATE UBA MAP REGISTERS AND TO MARK THE ALLOCATION

783 IN THE UBA MAP REGISTER ALLOCATION DATA STRUCTURES.

784

785 INPUTS:

786

787

R4 ADDRESS OF PORT DESCRIPTOR TABLE.

788

R5 ADDRESS OF CLASS DRIVER REQUEST PiCKET (CORP).

789

790 OUTPUTS:

791

792

IF MAP REGISTERS ARE ALLOCATED FOR THE CORP, THE APPROPRIATE FIELDS

793

IN THE CORP ARE MODIFIED TO INDICATE WHICH REGISTERS, AND THE NUMBER

794

OF REGISTERS THAT HAVE BEEN ALLOCATED. ALSO THE ALLOCATION DATA

795

STRUCTURE IN THE ADP IS MODIFIED.

796

797

IF MAP REGISTERS CANNOT BE ALLOCATED AT THIS TIME, THE CORP IS

798

QUEUED ONTO THE RESOURCE WAIT LIST AND THE UCB$W RWAITCNT IS

799

INCREMENTED.

-

800

801 ;-

802

803 IOC$REQMAPUDA::

Al locate UBA map registers for class drive

804

BSBB

IOC$ALOMAPUDA

Cal 1 to allocate map registers if avai labl

805

Returns R2 => ADP.

806

807 If here, low bit of RO tel ls us whether we were successful in the al location

808

attempt.

809

810

BLBS

RO, 10$

Branch around if successful.

811

MOVQ

R3,CDRP$L FR3(R5)

Save driver process context

812

INCW

@CDRP$L RWCPTR(R5)

One more CORP, on this UCB, awaiting

813

resources.

814

POPL

CDRP$L FPC(R5)

Save map register wait return address

815

INSQUE CDRP$L-FQFL(R5),-

816

@ADP$L=MRQBL(R2)

Insert process in map register wait queue

817 10$:

RSB

IOSUBNPAG V03-033
ACG0399 ACG0399 ACG0399 5
-1
KTA3018 KTA3018 KTA3018 KTA3018 KTA3018 KTA3018 KTA3018

- NONPAGED I/O RELATED SUBROUTINES REQUEST UNIBUS MAP REGISTERS

3-JUN-1984 11 :33:30 VAX-11 Macro V03-01

Page 23

12-MAR-1982 17: 12:23 DISK$VMSMASTER: [SYS.SRC]IOSUBNPAG(16)

3A 10
oc 50 EB
10 A5 53 7D OC A5 8EDO
34 82 65 OE
05

0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0302 0304 0307 030B 030F 0313

. 2 3 ·+

.SBTTL REQUEST UNIBUS MAP REGISTERS

.4 ; IOC$REQMAPREG - REQUEST UNIBUS MAP REGISTERS

823

824 THIS ROUTINE IS CALLED TO REQUEST UNIBUS MAP REGISTERS TO PERFORM AN

825 I/O TRANSFER.

826

827 INPUTS:

828

830

R5 =UCB ADDRESS OF DEVICE UNIT.

831

04(SP) = RETURN ADDRESS OF CALLER'S CALLER.

832

833

IT IS ASSUMED THAT THE CALLER OWNS THE I/O CHANNEL ON WHICH THE

834

TRANSFER IS TO OCCUR ON.

835

836 OUTPUTS:

837

838

IF MAP REGISTERS HAVE BEEN PERMANENTLY ASSIGNED TO THE ASSOCIATED

839

I/O CHANNEL, THEN CONTROL IS IMMEDIATELY RETURNED TO THE CALLER.

840

ELSE A~ ATTEMPT IS MADE TO ALLOCATE THE REQUESTED NUMBER OF MAP REG-

841

ISTERS. IF SUFFICIENT CONTIGUOUS MAP REGISTERS ARE FOUND, THEN THEY

842

ARE ASSIGNED TO THE ASSOCIATED I/O CHANNEL AND CONTROL IS RETURNED

843

TO THE CALLER. ELSE THE DRIVER PROCESS CONTEXT IS SAVED IN ITS FORK

844

BLOCK, THE FORK BLOCK IS INSERTED IN THE MAP REGISTER WAIT QUEUE,

845

AND A RETURN TO THE DRIVER PROCESS' CALLER IS EXECUTED.

846 ' 847

.1 IOC$REQMAPREG::

;REQUEST UNIBUS MAP REGISTERS

. 2

BSBB

IOC$ALOLJBAMAP

; ALLOCATE UBA MAP REGISTER

. 3

BLBS

R0,10$

;IF LBS SUCCESSFUL ALLOCATION

.4

MOVQ

R3,UCB$L FR3(R5)

;SAVE DRIVER PROCESS CONTEXT

.5

POPL

UCB$L FPC(R5)

;SAVE MAP REGISTER WAIT RETURN ADDRESS

.6

INSQUE UCB$L-FQFL(R5),~ADP$L MRQBL(R2) ;INSERT PROCESS IN MAP REGISTER WAIT

.7 10$:

RSB

IOSUBNPAG V03-033 -14
;RLRPDTADP
RLRPDTADP RLRPDTADP RLRPDTADP RLRPDTADP RLRPDTADP RLRPDTADP -8

- NONPAGED I/O RELATED SUBROUTINES ALLOCATE UNIBUS MAP REGISTERS

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 24

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SVS.SRC]IOSUBNPAG(17)

7E 53 55
52 OOEO C4
53 02 A5 54 DO A5 53 03FF C344 53 F7 BF
53
51 3C A5 2F
7E 53 55 18
7E 53

0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 0314 7D 0314 DD 0317 0319 DO 0319 031E DO 031E 3C 0322 9E 0326 78 032C 0330 0331 9E 0331 11 0335 0337 0337 7D 0337 DD 033A 11 033C 033E 033E 7D 033E

862

.SBTTL ALLOCATE UNIBUS MAP REGISTERS

863 ;+

864 IOC$ALOUBAMAP - ALLOCATE UBA MAP REGISTERS (CRB DATABASE SPECIFIED)

865 IOC$ALOUBAMAPN - ALLOCATE USA MAP REGISTERS (ARGUMENT SPECIFIED)

866 IOC$ALOMAPUDA - ALLOCATE UBA MAP REGISTERS (FOR CLASS DRIVER(S))

867

868 This routine is called to al locate uba map registers and to mark the allocation

869

in the map register allocation structure located in the ADP. The state

870

of the f1NIBUS map registers is maintained in a set of descriptors

871

that describe contiguous extents of allocatable (i.e. free) map

872

registers. A map register descriptor consists of the

873

corresponding elements of two distinct arrays (of one word items)

874

located in the ADP. These arrays, ADP$W MRNREGARV and ADP$W MRFREGARV,

875

contain the number of map registers and the first map register in each

876

contiguous extent of free map registers. These arrays are each

877

preceeded by a one word field containing al 1 l's (-1) so that compares

878

made against the "previous" descriptor fail when the current desciptor

879

is the one whose index is zero.

880

881

ADP$L MRACTMDRS maintains the number of active descriptors, i.e. the

882

number of elements of each array which contain valid data.

883

884 INPUTS: (FOR IOC$ALOUSAMAP AND ALOUSAMAPN)

885

R3 =NUMBER OF MAP REGISTERS TO ALLOCATE (IOC$ALOUBAMAPN only).

886

R5 = DEVICE UNIT UCB ADDRESS.

887

888 INPUT: (FOR IOC$ALOMAPUDA)

. 1

R4 => PDT

889

R5 => CORP

890

891 OUTPUTS:

892

RO = SUCCESS INDICATION.

893

R2 => ADP

894

895

.enabl lsb

896 IOC$ALOMAPUDA:

897

MOVQ

R3,-(SP)

Save R3,R4,R5

898

PUSHL R5

899

.1

MOVL

PDT$L ADP(R4),R2

R2 => ADP before we modify R4.

. 2

. 3

MOVL

CDRP$L SCNT(R5),R3

Get transfer byte count

.4

MOVZWL CDRP$W-BOFF(R5),R4

Get byte offset in page

. 5

MOVAS AX3FF(R3) [R4] ,R3

Calculate highest relative byte and round

. 6

ASHL

#-9,R3,R3

Calculate number of map registers required

908

909

MOVAB CDRP$L UBARSRCE(R5),Rl

910

BRS

COMMON-ALOUBAMAP

911

912 IOC$ALOUBAMAPN::

913

MOVQ

R3,-(SP)

914

PUSHL R5

915

BRB

5$

916

917 I OC$ALOUBAMAP: :

918

MOVQ

R3,-(SP)

Rl => UBMD. Branch to common code. ;ALLOCATE USA MAP REGISTERS ARGUMENT SPECIF! Save R3,R4,R5
;ALLOCATE UBA MAP REGISTERS CRB SPECIFIED ; Save R3,R4,R5

IOSUBNPAG V03-033
;RLROOOl ;RLR0001 ;RLROOOl

- NONPAGED I/O RELATED SUBROUTINES ALLOCATE UNIBUS MAP REGISTERS

3-JUN-1984 11 :33:30 VAX-11 Macro V03-01

Page 25

12-MAR-1982 17:12:23 DISK$VMSMASTER: [SVS.SRC]IOSUBNPAG(17)

55 DD
53 7E A5 3C 54 7C A5 3G 53 03FF C344 9E 53 F7 SF 78
53
51 24 AS DO 52 3S A1 DO 51 34 A1 9E
OF EO 3S 61
5C A2 D5 13 13 53 D6
53 01 SA 55 04
64 A245 53 81 09 15
F4 55 5C A2 F2
50 04 1 F 11
61 015E C245 BO
02 Al 53 90 64 A245 53 A2
05 12
0129 30 06 11
015E C245 53 AO
50 01 DO 55 8EOO
53 BE 70 05

0341 0343 0343 0347 0348 0351 0355 0356 0356 035A 035E 0362 0364 0366
0366 0366 0366 0366 0366 0366 0366 0366
0369 0368 0360 0370 0372 0372 0377 0379 0379 037E 037E
03SO 03S2 03S2 03SS 03S8 03SC 0391 0393 0393 0396 039S 0398 039E 039E 03A1 03A4 03A7 03AS

919

PUSHL RS

920

921

MOVZWL UCB$W BCNT(R5),R3

GET TRANSFER BYTE COUNT

922

MOVZWL UCB$W-BOFF(R5),R4

GET BYTE OFFSET IN PAGE

923

MOVAB AX3FF(R3)[R4],R3

CALCULATE HIGHEST RELATIVE BYTE AND ROUND

924

ASHL

#-9,R3,R3

CALCULATE NUMBER OF MAP REGISTERS REQUIRED

925 5$:

926

MOVL

UCB$L CRB(R5),R1

Rl => CRB.

927

MOVL

CRB$L-INTD+VEC$L ADP(R1),R2

R2 => ADP.

92S

MOVAB CRB$L-INTD+VEC$W-MAPREG(R1),R1

Rl => UBMD.

929

BBS

#VEC$V MAPLOCK,--

If SET, already permanently

930

UBMD$W=MAPREG(R1) ,40$

al located, so branch around.

931

932 Here:

933

Rl => UBMD - caller's structure where we record registers al located

934 935

= R2 => ADP

R3

number of map registers to al locate

936

937

938 COMMON ALOUBAMAP:

.1

- TSTL

ADP$L MRACTMDRS(R2)

Test for zero active descriptors.

· 2

BEQL

15$ -

EQL implies no registers available.

939

INCL

R3

Round up request to next multiple

940

BICB

#1 ,R3

of 2.

941

CLRL

R5

Establish loop variable.

942 10$:

943

CMPW

R3,ADP$W MRNREGARV(R2)lR5]

See if enough regs described here.

944

BLEQ

20$

-

LE Q i mp 1 i es VE S .

945

946 .1 15$:

AOBLSS ADP$L_MRACTMDRS(R2),R5,10$

Else branch back and continue

947

CLRL

RO

If here, al location failure.

94S

BRB

50$

Branch around to return.

949 20$:

950

MOVW

ADP$W MRFREGARV(R2)lR5] ,-

Allocate from low end of extent

951

UBMD$W MAPREG(Rl)

by copying 1st map reg. #.

952

MOVB

R3,UBMD$B NUMREG(Rl)

Set# of map regs allocated.

953

SUBW

R3,ADP$W MRNREGARY(R2)[R5]

Subtract out# regs allocated.

954

BNEQ

30$

-

NEQ implies extent not empty,

955

956

BSBW

DEALLOC DESCRIP

957

BRB

40$ -

branch around deallocate. Cal 1 to deallocate descriptor.
And branch back to return.

95S 30$:

959

AOOW

R3,ADP$W_MRFREGARV(R2)[R5]

Bump descriptor past

960

al located registers.

961 40$: 962 50$:

MOVL POPL

$A#SS$ NORMAL,RO

RS

-

Indicate success. Restore R5,R4,R3

963

MOVQ

(SP)+,R3

964

RSB

965

. dsab 1 1sb

IOSUBNPAG V03-033
-1
;RLR0003 ;RLR0003

- NONPAGED I/O RELATED SUBROUTINES

3-JUN-1984 11 :33:30 VAX-11 Macro V03-01

Page 26

Allocate a specific set of UNIBUS Map Re 12-MAR-1982 17:12:23 DISK$VMSMASTER:[SVS.SRC]IOSUBNPAG(18)

7E 53 55
50 24 A5 52 38 AO 51 34 AO
5C A2 2C
05 54 54 01
53
53 53 01
55
015E C245 54
15
46
015E C245 50 64 A245
50 54 09
E3 55 5C A2
50 52

03AS 967

.SBTTL Al locate a specific set of UNIBUS Map Registers

03A8 968 ;+

03AS 969 ; IOC$ALOUBAMAPSP

03AS 970

03AS 971 This routine is cal led to al locate a specific set of UNIBUS Map Registers.

03A8 972

03A8 973 INPUTS:

03A8 974

R3

#of map registers to allocate

03A8 975

R4

# of first map register to al locate

03A8 976

R5 => UCB

03A8 977

03A8 978 OUTPUTS:

03A8 979

RO

Success or failure indication

03A8 980

Note RO, Rl and R2 modified.

03A8 981 '

03A8 982

03A8 983 IOC$ALOU8AMAPSP::

7D 03A8 9S4

MOVQ

R3,-(SP)

Save R3,R4,R5

DD 03AB 985

PUSHL R5

03AD 986

DO 03AD 987

MOVL

UC8$L CR8(R5),RO

RO => CRB.

DO 0381 988

MOVL

CR8$L-INTD+VEC$L ADP(RO),R2

R2 => ADP.

9E 0385 989

MOVA8 CRB$L-INTD+VEC$W=MAPREG(RO),Rl

R 1 => UBA mapping d e s c r i p t o r .

0389 990

D5 0389

· 1

13 03BC

. 2

TSTL BEQL

ADP$L MRACTMDRS(R2) 30$ -

Test for zero active descriptors. EQL impli~s no registers available.

E9 03BE 991

BLBC

R4, 10$

Prepare to round DOWN to even boundary.

SA 03C1 992

BICB

#1, R4

Clear low bit if set and

D6 03C4 993

INCL

R3

then increment# of registers to allocate

03C6 994 10$:

06 03C6 995

INCL

R3

Prepare to round UP to even # of registers

SA 03C8 996

8IC8

#1, R3

03C8 997

D4 03CB 998

CLRL

R5

R5 will be index register.

03CD 999 20$:

Bl 03CD 1000

CMPW

R4,ADP$W MRFREGARV(R2)[R5]

Are registers we want in

03D3 1001

, current extent?

19 03D3 1002

8LSS

30$

LSS means current extent is beyond the

03D5 1003

desired registers. Therefore they are

03D5 1004

not availiable and we have failed.

13 03D5 1005

8EQL

50$

EQL means they are at the beginning

03D7 1006

of the current extent.

03D7 1007

03D7 100S Here the registers we want are either within the middle of the current

0307 1009

extent or else beyond the current extent.

03D7 1010 Al 03D7 1011

ADDW3 ADP$W_MRFREGARV(R2)[R5],-

RO = 1st register beyond

03DC

03EO 1012

ADP$W MRNREGARV(R2)[R5] ,RO

current extent.

Bl 03EO 1013

CMPW

R4,R0-

Are we in current extent?

19 03E3 1014

8LSS

40$

LSS means YES, in current.

F2 03E5 1015

AOBLSS ADP$L_MRACTMDRS(R2),R5,20$

Loop thru all extents.

03EA 1016 30$:

Failure if we fall thru.

D4 03EA 1017

CLRL

RO

Set failure code.

11 03EC 101S

BRB

80$

And branch to return.

03EE 1019 40$:

03EE 1020

IOSUBNPAG V03-033
;RLRMAPSP
-1

- NONPAGED I/O RELATED SUBROUTINES

3-JUN-1984 11 :33:30 VAX-11 Macro V03-01

Page 27

Al locate a specific set of UNIBUS Map Re 12-MAR-1982 17:12:23 DISK$VMSMASTER:[SVS.SRC]IOSUBNPAG(1S)

50 54 A2 53 50 B1
F4 19
61 54 BO 02 A1 53 90
64 A245 50 A2
50 53 A2 36 13
55 06 7E 50 BO
OOC9 30
53 54 Al 015E C245 64 A245 SE BO
20 11
64 A245 53 Bl C6 14
61 54 BO 02 A 1 53 BO
64 A245 53 A2 OS 13
015E C245 53 AO 03 11
OOS2 30 50 01 DO
55 SEDO 53 SE 7D
05

03EE 03EE 03EE 03EE 03EE 03EE 03EE 03EE 03F1 03F4 03F6 03F6 03F9 03FD 03FD 03FD 03FD 0402 0402 0405 0407 0407 0409 040C 040F 040F 0412 0416 041B 0410 0410 041D 041D 0410 0410 041D 041D 0422 0424 0424 0427 042B 042B 0430 0432 0432 0438 043A 043A 043D 0440 0443 0446

1021 1022 1023 1024
1025 1026 1027 102S 1029 1030 1031 1032 1033 1034 1035 1036 1037 103S 1039
.1 1041 1042 1043 1044 1045 1046

Here the first register we want is greater than the first register of current extent (defined by R5 = index) and is less than or equal to the last register of the extent. RO contains the# of the register just beyond the current extent. In other words,

AOP$W_MRFREGARV(R2)[R5] < R4 <RO

SUBW CMPW BLSS

R4,RO RO,R3 30$

RO = length of subextent based at R4. Compare to # of registers needed. LSS means failure.

MOVW MOVB

R4,UBMD$W MAPREG(Rl) R3,UBMD$B=NUMREG(Rl)

Success. Fill in user's descriptor with base register and # of registers.

SUBW3 SUBW

AOP$W MRFREGARY(R2)[R5] ,R4,ADP$W-MRNREGARV(R2)[R5] RO,ADP$W MRNREGARV(R2)[R5]

Distance from beginning of extent to R4 is new length.
Equivalent result.

SUBW BEQL
INCL MOVW BSBW

R3,RO 70$
R5 RO,-(SP) ALLOC OESCRIP

RO=# regs. left in sub-extent. EQL means we do not have to al locate
and fill a new extent descriptor. R5 = index of new extent descriptor. Save length of new extent. Call to allocate a new descriptor.

ADDW3 R4,R3,ADP$W_MRFREGARY(R2)[R5]

Fill in new descriptor with

1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072

50$: Here
60$: 70$: 80$:

MOVW BRB

(SP)+,ADP$W MRNREGARY(R2)[R5]

70$

-

1st register and # registers. Branch around to success.

the first register we want is equal to the first register of the current extent (defined by index register R5). In other words,

R4 = ADP$W MRFREGARY(R2)[R5]

CMPW BGTR

R3,AOP$W MRNREGARY(R2)[R5]

30$

-

See if we have enough registers. GTR implies failure.

MOVW MOVW

R4,UBMO$W MAPREG(Rl) R3,UBMD$B-NUMREG(R1)

Success. Fill in user's descr-iptorwith 1st register and# allocated.

SUBW BEQL
ADDW BRB

R3,ADP$W MRNREGARY(R2)[R5J

60$

-

R3,ADP$W MRFREGARY(R2)[R5] 70$

Update current descriptor. EQL means current extent now
empty. Go to deallocate. If not empty, update 1st register. Branch around deal locate.

BSBW MOVL POPL MOVQ RSB

DEALLOC DESCRIP

SA#SS$ NORMAL.RO

R5

-

(SP)+,R3

; Deal locate system descriptor. Set success indicator. Restore R5,R4,R3
And return to caller.

IOSUBNPAG V03-033
-1
;RLR0003 ;RLR0002 ;RLR0002 ;RLR0002 ;RLR0002 ;RLR0002 ;RLR0003 -5

- NONPAGED 1/0 RELATED SUBROUTINES

3-JUN-19B4 11:33:30 VAX-11 Macro V03-01

Page 28

Permanently Allocate UNIBUS Map Register 12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(19)

7E 53 55
lB
7E 53 55
53 7E A5 54 7C A5 53 03FF C344 53 F7 BF
53
51 24 A5 52 3B Al 51 34 Al
OF 3B 61
53 53 01 55 5C A2
OA
62 A245 53 07
F6 55
50 22
015C C245 50 62 A245
50 53

0447 1074

.SBTTL Permanently Allocate UNIBUS Map Registers

0447 1075 ; +

0447 1076 IOC$ALOUBAMAPRM - Permanently Allocate USA Map Registers (CRB Database Specified)

0447 1077 IOC$ALOUBAMAPRMN - Permanently Allocate UBA Map Registers (Argument Specified)

0447 107B

0447 1079 This routine is cal led to permanently allocate UNIBUS map registers.

0447 lOBO

Here we al locate the map registers from the highest numbered

0447 lOBl

available registers.

0447 10B2

0447 10B3 INPUTS:

0447 10B4

R3 = # Registers to al locate (IOC$ALOUBAMAPRMN only)

0447 10B5

R5 => UCB

0447 10B6

0447 1057 0447 10B8

OUTPUTS:
RO = Success indication

0447 1089

0447 1090

0447 1091

0447 1092

. enab l LSB

0447 1093 IOC$ALOUBMAPRMN::

;ALLOCATE UBA MAP REGISTERS ARGUMENT SPECIF!

7D 0447 1094

MOVQ

R3,-(SP)

Save R3,R4,R5

DD 044A 1095

PUSHL R5

044C 1096

11 044C 1097

BRB

5$

044E 109B IOC$ALOUBMAPRM: :

;ALLOCATE UBA MAP REGISTERS CRB SPECIFIED

7D 044E 1099

MOVQ

R3,-(SP)

; Save R3,R4,R5

DD 0451 1100

PUSHL R5

0453 1101

3C 0453 1102

MOVZWL UCB$W BCNT(R5),R3

GET TRANSFER BYTE COUNT

3C 0457 1103

MOVZWL UCB$W-BOFF(R5),R4

GET BYTE OFFSET IN PAGE

9E 045B 1104

MOVAB AX3FF(R3)[R4) ,R3

CALCULATE HIGHEST RELATIVE BYTE AND ROUND

78 0461 1105

ASHL

#-9,R3,R3

CALCULATE NUMBER OF MAP REGISTERS REQUIRED

0465

0466 1106 5$:

DO 0466 1107

MOVL

UCB$L CRB(R5),Rl

Rl => CRB

DO 046A 1108

MOVL

CRB$L-INTD+VEC$L ADP(Rl),R2

R2 => ADP

9E 046E 1109

MOVAB CRB$L-INTD+VEC$W-MAPREG(Rl),Rl

Rl => UBMD.

EO 0472 1110

BBS

#VEC$V MAPLOCK,-

If SET, already permanently

0474 1111

UBMD$W=MAPREG(Rl) ,30$

al located, so branch around.

0476 1112

D6 0476 1113

INCL

R3

Round up request to next multiple

BA 0478 1114 DO 047B 1115

BICB MOVL

#1 ,R3 ADP$L MRACTMDRS(R2),R5

of 2.
R5 = index beyond last MRD.

13 047F

.1

BEQL

15$ -

EQL implies no registers available.

0481

. 2 10$:

Bl 0481

.3

CMPW

R3,ADP$W MRNREGARV-2(R2)[R5]

See if enough regs described here.

15 0486

.4

BLEQ

20$

-

LEO implies YES.

04B8

.5

F5 0488

.6

SOBGTR R5,10$

Else branch back and continue

048B

. 7 15$:

D4 048B 1121

CLRL

RO

If here, al location failure.

11 048D 1122

BRB

40$

Branch around to return.

048F 1123 20$:

Al 048F 1124

ADDW3 ADP$W_MRFREGARV-2(R2)[R5] ,-

Calculate register # beyond

0494

0498 11 25

ADP$W MRNREGARY-2(R2)[R5],RO

last extent.

A2 0498 '1126

SUBW

R3,RO-

We al locate from high end .. RO

IOSUBNPAG V03-033

- NONPAGED I/O RELATED SUBROUTINES

3-JLJN-1984 11: 33: 30 VAX-11 Macro V03-01

Page 29

Permanently Al locate UNIBUS Map Register 12-MAR-1982 17: 12: 23 DISK$VMSMASTER:[SVS.SRC]IOSUBNPAG(19)

61 50 BO 61 SOOO SF AS
02 Al 53 90 62 A245 53 A2
OA 13
50 01 DO
55 SEDO 53 SE 70
05
55 07 0002 30
EF 11

049B 0498 049E 04A3 04A7 04AC 04AE 04AE 04AE 0481 0481 0484 0487 0488 0488 048A 0480 048F

1127 1128 1129 1130 1131 1132 1133 1134 30$: 1135 1136 40$: 1137 113S 1139 1140 50$: 1141 1142 1143 1144

MOVW 8ISW MOVB SUBW BEQL
MOVL
POPL MOVQ RS8
DECL BSBW 8RB .dsabl

;

RO,U8MD$W MAPREG(R1)

;

#VEC$M MAPLOCK,UBMD$W MAPREG(Rl);

R3,U8M5$8 NUMREG(R1) -

;

R3,ADP$W_MRNREGARV-2(R2)[R5]

;

50$

;

;

contains 1st reg. to alloc. Record 1st register allocated.
and mark it pe_rmanent. Set# of map regs allocated. Subtract out# regs allocated. EQL implies descriptor not
va 1 id; branch to deallocate.

$A#$S$_NORMAL,RO

: Indicate success.

R5 (SP)+,R3

; Restore R5,R4,R3

R5 DEALLOC DESCRIP 30$ lsb

RS = index of descriptor to deal loc.
Ca 11 to deal locate descriptor.
And branch back to return.

IOSUBNPAG V03-033
-1

5C A2 66 A245 64 A245 0160 C245 015E C245 EB 55 5C A2
50 5C A2 55 50 13 62 A240 64 A240
015C C240 015E C240
E8 50 5C A2

- NONPAGED I/O RELATED SUBROUTINES

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 30

Permanently Al locate UNIBUS Map Register 12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(20)

04BF 1146 +

04BF 1147 DEALLOC DESCRIP - Common internal subroutine called to deallocate

04BF 1148

a UBA Map Register descriptor.

04BF 1149

04BF 1150 INPUTS:

04BF 1151

R2 => ADP

04BF 1152

R5

index of descriptor to deallocate.

04BF 1153 OUTPUTS:

04BF 1154

The UBA Map Al location structures are updated by contracting

04BF 1155

descriptors over the deallocated one.

04BF 1156

Register R5 is modified.

04BF 1157 '

04BF 1158

04BF 1159 DEALLOC DESCRIP:

07 04BF 1160

-DECL

ADP$L_MRACTMDRS(R2)

; Decrement # active descriptors.

04C2 1161 10$:

BO 04C2 1162

MOVW

ADP$W_MRNREGARV+2{R2)[R5],-

Move data towards lower index

04C6

04C9 1163

ADP$W MRNREGARY(R2)[R5]

to fill up hole.

BO 04C9 1164

MOVW

ADP$W-MRFREGARV+2(R2)[R5],-

04CE

04D2 1165

ADP$W MRFREGARY(R2)lR5]

F2 0402 1166

AOBLSS ADP$L=MRACTMDRS(R2),R5,10$

Loop thru rest of active MORS.

05 0407 1167

RSB

0408 1168

0408 1169 +

0408 1170 ALLOC DESCRIP - Common internal subroutine to allocate a UBA map register

0408 1171

-descriptor in the middle of the range of descriptors.

0408 1172

0408 1173 INPUTS:

0408 1174

R2 => ADP

0408 1175

R5

index of where we must allocate descriptor

0408 1176 OUTPUTS:

0408 1177

Al location is accomplished by creating a hole in each of the arrays

0408 1178

by moving descriptor items to the next higher element.

04D8 1179

Note RO is modified.

0408 1180 '

0408 1181

0408 1182 ALLOC DESCRIP:

DO 0408 1183

MOVL

ADP$L MRACTMDRS(R2),RO

RO = # active descriptors.

04DC 1184 10$:

01 040C 1185

CMPL

RO,R5

Have we finished?

15 04DF 1186

BLEQ

20$

LEO implies YES.

BO 04E1 1187

MOVW

ADP$W_MRNREGARV-2(R2)[RO] ,-

Starting from ends of arrays,

04E5

04E8 1188

ADP$W_MRNREGARV(R2)[RO]

copy # register items.

04E8 1189

BO 04E8 1190

MOVW

ADP$W_MRFREGARY-2(R2)[RO] ,-

04ED

04F1 1191

ADP$W MRFREGARV(R2)[RO]

F5 04F1 1192

SOBGTR RO, 10$

And loop back until we reach

04F4 1193

the hole we have created.

06 04F4 1194 20$: 05 04F7 1195

INCL RSB

ADP$L MRACTMDRS(R2) -

Increment # active descriptors. Return to caller

IOSUBNPAG V03-033 -1
;RLRPDTADP
;RLRPDTADP ;RLRPDTADP -4

- NONPAGED I/O RELATED SUBROUTINES Release UNIBUS Map Registers

3-JUN-1984 11 :33:30 VAX-11 Macro V03-01

Page 31

12-MAR-1982 17: 12:23 DISK$VMSMASTER: [SVS.SRC]IOSUBNPAG(21)

7E 53 7E 55
52 OOEO C4 56 52
53 3C A5 54 63
53 02 A3 1 E
51 24 A5 OF
3D 34 Al

04F8 1197

.SBTTL Release UNIBUS Map Registers

04F8 1198 ;+

04F8 1199 IOC$RELMAPUDA - RELEASE UNIBUS MAP REGISTERS (CALLED FROM UDA PORT DRIVER)

04F8 1200 IOC$RELMAPREG - RELEASE UNIBUS MAP REGISTERS

04F8 1201

04F8 1202 This routine is cal led to release UNIBUS map registers that were previously

04F8 1203 assigned for an I/O transfer.

04F8 1204

04F8 1205 INPUTS:

04F8 1206

(For IOC$RELMAPUDA only)

04F8 1207

04F8

. 1

R4 :::> PDT

04F8 1208

R5 => CORP

04F8 1209

04F8 1210

(For IOC$RELMAPREG call only)

04F8 1211 04F8 121 2

= R5 UCB ADDRESS OF DEVICE UNIT.

04F8 121 3

04F8 1214

It is assumed that the caller stil 1 owns the I/O channel on which

04F8 1215

the transfer took place.

04F8 1216

04F8 1217 OUTPUTS:

04F8 1218

04F8 1219

If the mapping registers have been permanently assigned to the asso-

04F8 1220

ciated I/O channel (only possible for IOC$RELMAPREG), then control

04F8 1221

is immediately returned to the caller. Else the mapping registers are

04F8 1222

released (via a call to IOC$DALOCUBAMAP) and we then go into a loop

04F8 1223

removing waiting driver processes from the Map Register Wait Queue

04F8 1224

until either the Queue is completely drained or we run out of map

04F8 1225

registers to satisfy the needs of a given waiting driver process.

04F8 1226

Driver processes waiting here have their context stored in either

04F8 1227

a UCB fork block or a CORP fork block and the processing required to

04F8 1228

resume each of tt1ese types of driver process is slightly different.

04F8 1229

What is done for each is to al locate the required map registers

04F8 1230

(via a call to IOC$ALOUBAMPA for UCB threads and via a call to

04F8 1231

IOC$ALOUBAMAP for CDRP threads) and to resume the waiting driver

04F8 1232

process. Resuming a UCB thread is done by restoring register

04F8 1233

context and JSB'ing to the saved PC. Resuming a CORP thread is

04F8 1234

accomplished by cal ling SCS$RESUMEWAITR.

04F8 1235

04F8 1236

.enabl lsb

04F8 1237 IOC$RELMAPUDA::

7D 04F8 1238

MOVQ

R3,-(SP)

Save R3-R6

7D 04FB 1239

MOVQ

R5,-(SP)

04FE 1240

DO 04FE

.1

MOVL

PDT$L ADP(R4),R2

R2 => ADP.

DO 0503

. 2

MOVL

R2,R6-

R6 => ADP also.

0506 1245

9E 0506 1246

MOVAB CDRP$L UBARSRCE(R5),R3

R3 => UBMD.

3C 050A 1247

MOVZWL UBMD$W-MAPREG(R3),R4

R4 has 1st map reg #.

9A 0500 1248 11 0511 1249

MOVZBL UBMD$B-NUMREG(R3),R3

BRB

10$ -

R3 has # of mapregs. Branch to common code.

0513 1250

0513 1251 I OC$RELMAPREG: :

Release unibus map registers

DO 0513 1252 EO 0517 1253

MOVL BBS

UCB$L CRB(R5),R1 #VEC$~ MAPLOCK,-

; R1 => CRB. ; If SET, permanent al location so branch.

0519 1254

CRB$L INTD+VEC$W MAPREG(Rl),50$

IOSUBNPAG V03-033

- NONPAGED I/O RELATED SUBROUTINES Release UNIBUS Map Registers

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 32

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(21)

7E 53 7E 55
52 38 Al 56 52
54 34 Al 53 36 Al
0034
55 30 B6 19
10
OA A5 1A
FDFB 09 50 53 10 A5 OC B5
E5 30 A6 65
55 SE 53 SE
FDB7 EF 50
OOOOOOOO'EF
cc

70 051C 1255

MOVQ

R3,-(SP)

; Save R3-R6

70 051F 1256

MOVQ

R5,-(SP)

0522 1257

DO 0522 1258

MOVL

CRB$L INTD+VEC$L ADP(R1),R2 ;GET ADDRESS OF ADP

DO 0526 1259

MOVL

R2,R6-

-

;SAVE ADDRESS OF ADP

3C 0529 1260

MOVZWL CRB$L INTD+VEC$W MAPREG(R1),R4 ;GET STARTING MAP REGISTER NUMBER

9A 052D 1261

MOVZBL CRB$L=INTD+VEC$B-NUMREG(R1),R3 ;GET NUMBER OF REGISTERS TO DEALLOC

0531 1262 10$:

30 0531 1263

BSBW

IOC$DALOCUBAMAP

; Free up UBA map resources.

0534 1264 20$:

OF 0534 1265

REMQUE @ADP$L MRQFL(R6),R5

;GET ADDRESS OF NEXT DRIVER FORK BLOCK

lD 0538 1266

BVS

40$ -

;IF VS NO DRIVER PROCESS WAITING

053A 1267

91 053A 1268

CMPB

#DVN$C UCB,-

See if we dequeued a UCB or a CORP.

053C 1269

UCB$B TVPE(R5)

12 053E 1270

BNEQ

REALLOC CD MAPREGS

NEQ implies a CORP.

0540 1271

30 0540 1272

BSBW

IOC$ALOUBAMAP

SEARCH MAP REGISTER BITMAP AND ALLOCATE

E9 0543 1273

BLBC

R0,30$

IF LBC ALLOCATION FAILURE

7D 0546 1274

MOVQ

UCB$L FR3(R5),R3

RESTORE DRIVE PROCESS CONTEXT

16 054A 1275

JSB

@UCB$L FPC(R5)

CALL DRIVER AT MAP REGISTER WAIT RETURN ADD

11 0540 1276

BRB

20$ -

OE 054F 1277 30$: 7D 0553 1278 40$:

INSQUE UCB$L FQFL(R5),ADP$L MRQFL(R6) ;REINSERT DRIVER PROCESS AT FRONT OF

MOVQ

(SP)+~R5

- : Restore R3-R6

70 0556 1279

MOVQ

(SP)+,R3

05 0559 1280 50$:

RSB

055A 1281

055A 1282 REALLOC CD MAPREGS:

Real locate mapregs to a class driver

055A 1283

process.

30 055A 1284

BSBW

IOC$ALOMAPUDA

Al locate map registers if we can.

E9 0550 1285

BLBC

R0,30$

LBC implies allocation failure, branch

0560 1286

16 0560 1287

JSB

SCS$RESUMEWAITR

Resume waiting thread and any backed

0566 1288

up IRP's.

11 0566 1289

BRB

20$

Branch back to try and allocate more

0568 1290

UNIBUS map registers.

0568 1291

. dsab 1 l sb

IOSUBNPAG V03-033 -1
ROW0140 ROW0140 RLR0003 RLR0003

- NONPAGED I/O RELATED SUBROUTINES Release UNIBUS Map Registers

3-JUN-1984 11 :33:30 VAX-11 Macro V03-0l

Page 33

12-MAR-1982 17; 12;23 DISK$VMSMASTER;[SYS.SRC]IOSUBNPAG(22)

55 51 53 54
53 62 SC A2 4E
015E C245 51

F3 55

07
5C A2 28

29

62 A245 50 015C C245
54 50
oc
015E C245 54

0568 1293 +

0568 1294 IOC$DALOCUBAMAP - Common internal subroutine to update the UBA Map allocation

0568 1295

structures to include the map registers specified here among the

0568 1296

available map registers.

0568 1297

0568 1298 INPUTS:

0568 1299

R2 => ADP

0568 1300

R3

# map registers to free.

0568 1301

R4

first map register to free.

0568 1302

0568 1303 OUTPUTS:

0568 1304

The UBA Map Al location structures are updated.

0568 1305

0568 1306

Registers RO, Rl and RS are modified.

0568 1307

0568 1308 '

0568 1309

0568 1310 IOC$0ALOCUBAMAP:

04 0568 1311

CLRL

RS

Initialize loop variable.

Cl 056A 1312

AODL3 R4,R3,R1

Rl =map register beyond extent.

05 056E

.1

TSTL

R3

Is the# of regs. to deallocate zero?

13 0570

. 2

BEQL

90$

Branch to bugcheck if zero .

05 0572

.3

TSTL

ADP$L MRACTMORS(R2)

Test for zero active descriptors.

13 0575

. 4

BEQL

50$ -

EQL implies no registers available .

0577 1313 10$:

Bl 0577 1314

CMPW

R1,ADP$W_MRFREGARY(R2)[R5]

See if map registers to free

0570 1315

are before those described

0570 1316

by current descriptor.

15 0570 1317

BLEQ

20$

LEQ implies yes.

057F 1318

F2 057F 1319

AOBLSS AOP$L MRACTMDRS(R2),R5,10$

Else branch back and try next.

11 0584 1320

BRB

40$

If here, registers to free

0586 1321

beyond those described by

0586 1322

last descriptor. So branch

0586 1323

to try and absorb at end of

0586 1324

last descriptor.

0586 1325 20$:

12 0586 1326

BNEQ

40$

NEQ implies that althoug~ we al loca-

0588 1327

registers before the current des-

0588 1328

criptor, we are not contiguous with

0588 1329

it. So we branch to try and absorb

0588 1330

these registers in the previous one.

0588 1331

0588 1332 Here we can absorb the registers in the current descriptor.

0588 1333

Al 0588 1334

ADOW3 AOP$W_MRNREGARY-2(R2)[R5],-

Calculate end of previous

058C

0591 1335

AOP$W MRFREGARY-2(R2)[R5],RO

extent and move to RO.

Bl 0591 1336

CMPW

RO,R4-

Does it coincide with start

0594 1337

of this extent?

13 0594 1338

BEQL

30$

EQL implies yes.

0596 1339

0596 1340 Here we have the most likely case. The map registers that we are freeing can

0596 1341

be absorbed into the top of the current descriptor but not also in the

0596 1342

previous descriptor.

0596 1343

BO 0596 1344

MOVW

R4,AOP$W_MRFREGARY(R2)[R5J

First register freed becomes

IOSUBNPAG V03-033
ROW0140 ROW0140 ROW0140 ROW0140

- NONPAGED I/0 RELATED SUBROUTINES Release UNIBUS Map Registers

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 34

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(22)

64 A245 53

62 A245

53

64 A245 62 A245

FFOE

62 A245 50 015C C245
54 50 06
62 A245 53

FF10 64 A245 53 015E C245 54

059C 1345

first register of current

059C 1346

descriptor.

AO 059C 1347

AOOW

R3,ADP$W MRNREGARY(R2)[R5]

Number of registers is sum of

05A1 1348

registers freed and registers

05A1 1349

previously described here.

05 05A1 1350

RSB

05A2 1351

05A2 1352 Here we have the case where the map registers being freed fal 1 between two

05A2 1353

discohtiguous blocks and exactly span the difference. We then can

05A2 1354

describe the entire group with one descriptor, and so we also

05A2 1355

deal locate the current descriptor. Note new combined descriptor

05A2 1356

wil 1 still begin at same map register number so we do NOT alter

05A2 1357

this item.

05A2 1358

05A2 1359 30$:

AO 05A2 1360

ADDW

R3,ADP$W_MRNREGARV-2(R2)[R5]

Partial sum of registers

05A7 1361

being freed and previous ones.

AO 05A7 1362

AODW

ADP$W_MRNREGARV(R2)[R5],-

Now add in registers described

05AB

05AE 1363

ADP$W_MRNREGARY-2(R2)[R5]

in current descriptor.

05AE 1364

31 05AE 1365

BRW

DEALLOC_DESCRIP

BRW to subroutine and let it

0581 1366

return to our caller.

0581 1367

0581 1368 Here we cannot absorb the freed map registers in the current descriptor.

05B1 1369

We test to see if we can absorb them in the previous descriptor.

05B1 1370

0561 1371 40$:

Al 0581 1372

AOOW3 ADP$W_MRNREGARY-2(R2)[R5] ,-

Calculate end of previous

0565

058A 1373

ADP$W MRFREGARY-2(R2)[R5],RO

extent and move to RO.

81 058A 1374

CMPW

RO,R4-

See if contigous with previous.

12 05BO 1375

BNEQ

50$

NEQ implies NO.

05BF 1376

AO 058F 1377

AODW

R3,AOP$W_MRNREGARY-2(R2)[R5]

Sum# of registers in extent.

05 05C4 1378

RSB

05C5 1379

05C5 1380 Here we must allocate a new descriptor to describe the map registers we

05C5 1381

are freeing. Conditions at this time are as fol lows:

05C5 1382

05C5 1383

R2 => ADP

05C5 1384

R3

# registers to free

05C5 1385

R4

first register to free

05C5 1386

R5

index of where we must allocate descriptor

05C5 1387

05C5 1388

Al location is accomplished by calling subroutine ALLOC_OESCRIP

05C5 1389

05C5 1390

05.C5 1391 50$:

30 05C5 1392

BSBW

ALLOC DESCRIP

Allee R5 =index of descriptor.

BO 05C8 1393

MOVW

R3,ADP$W MRNREGARV(R2)[R5]

Fill in allocated descriptor.

BO 05CD 1394

MOVW

R4,ADP$W=MRFREGARV(R2)[R5]

05 0503 1395

RSB

0504

.1

0504

· 2 90$:

BUG CHECK INCONSTATE

Non-fatal bugcheck on zero map

0508

.3

registers deallocation attempts.

05 0508

.4

RSB

Then ignore deallocate request.

I

IOSUBNPAG V03-033
-1

- NONPAGED I/O RELATED SUBROUTINES RETURN TO CALLER

3-JUN-1984 11 :33:30 VAX-11 Macro V03-0l

Page 35

12-MAR-1982 17: 12:23 DISK$VMSMASTER: [SVS.SRC]IOSUBNPAG(23)

05D9 1397

.SBTTL RETURN TO CALLER

05D9 1398 +

05D9 1399 IOC$RETURN - RETURN TO CALLER

0509 1400

0509 1401 THIS ROUTINE IS CALLED AS A RESULT OF A DDT DISPATCH TO A NULL ENTRY. ITS

05D9 1402 FUNCTION IS MERELY TO RETURN TO ITS CALLER.

05D9 1403

05D9 1404 ; INPUTS:

0509 1405

0509 1406 ;

NONE.

0509 1407 ;

0509 1408 ; OUTPUTS:

0509 1409

. 0509 1410 ;
0509 1411

NONE.

0509 1412

0509 1413 IOC$RETURN::

;RETURN TO CALLER

05 0509 1414

RSB

IOSUBNPAG V03-033
-1

- NONPAGED I/0 RELATED SUBROUTINES

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 36

WAITFOR INTERRUPT OR TIMEOUT AND KEEP CH 12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(24)

6E 02 co
10 A5 53 7D
oc A5 8EDO
64 AS 03 AB
BE C1
OOOOOOOO'EF 6C A5
0040 BF AA 64 A5
05

05DA 05DA OSDA OSDA OSDA 05DA OSDA 05DA 05DA OSDA OSDA OSDA 05DA 05DA 05DA 05DA OSDA OSDA OSDA 05DA OSDA 05DA 05DA OSDA 05DA 05DA 05DD 05E1 05E5 05E9 OSEB OSFO 05F2 05F6 05F8 OSFB

1416

.SBTTL WAITFOR INTERRUPT OR TIMEOUT AND KEEP CHANNEL

14H ;+

1418 ; IOC$WFIKPCH - WAITFOR INTERRUPT OR TIMEOUT AND KEEP CHANNEL

1419

1420 THIS ROUTINE IS CALLED TO SOFTWARE ENABLE INTERRUPTS AND TIMEOUT ON

1421 A DEVICE UNIT AND TO KEEP THE CHANNEL. THIS ROUTINE CAN BE CALLED AT

1422 EITHER FORK OR DEVICE INTERRUPT LEVEL.

1423

1424 INPUTS:

1425

1426

OO(SP) RETURN ADDRESS OF CALLER.

1427

04(SP) TIMEOUT VALUE IN SECONDS.

1428

08(SP) IPL TO LOWER TO AFTER SETTING WAIT.

1429

12(SP) RETURN ADDRESS OF CALLER'S CALLER.

1430

1431

R5 = UCB ADDRESS OF DEVICE UNIT.

1432

1433 OUTPUTS:

1434

1435

THE TIMEOUT VALUE IS COMPUTED AND STORED IN DUE TIME, REGISTERS R3 AND

1436

R4 ALONG WITH THE RETURN PC ARE SAVED IN THE FORK BLOCK, INTERRUPTS AND

1437

TIMEOUT ARE ENABLED, AND A RETURN TO THE CALLER'S CALLER IS EXECUTED.

1438

1439

1440 I OC$WF I KPCH: :

;WAITFOR INTERRUPT/TIMEOUT AND KEEP CHANNEL

1441

ADDL

#2,(SP)

;CALCULATE OFFSET TO NORMAL RETURN

1442

MOVQ

R3,UCB$L FR3(R5)

;SAVE REGISTERS R3 AND R4

1443

POPL

UCB$L FPC(RS)

;SAVE INTERRUPT RETURN ADDRESS

1444

BISW

#UCB$M INT!UCB$M TIM,UCB$W STS(R5) ;ENABLE INTERRUPT AND TIMEOUT

1445

ADDL3 (SP)+,LAEXE$GL_ABSTIM,UCB$L_DUETIM(R5) ;SET TIMEOUT TIME

1446
1447 1448

BICW

#UCB$M_TIMOUT,UCB$W_STS(R5) ;CLEAR UNIT TIMED OUT

ENBINT RSB

;ENABLE INTERRUPTS

IOSUBNPAG V03-033
-1

- NONPAGED I/O RELATED SUBROUTINES

3-JUN-1984 11:33:30 VAX-11 Macro V03-0l

Page 37

WAITFOR INTERRUPT OR TIMEOUT AND RELEASE 12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(25)

6E 02 co
10 A!: 53 7D QC A5 8EDO
64 A5 03 AB SE Cl
OOOOOOOO'EF 6C A5
0040 SF AA 64 A5
FA63 31

05FC 05FC OSFC 05FC 05FC 05FC OSFC 05FC 05FC 05FC 05FC OSFC 05FC OSFC 05FC 05FC 05FC 05FC OSFC OSFC 05FC OSFC OSFC OSFC OSFC OSFC OSFF 0603 0607 0608 060D 0612 0614
0618 061A 061D 0620 0620

1450

.SBTTL WAITFOR INTERRUPT OR TIMEOUT AND RELEASE CHANNEL

1451 ;+

1452 ; IOC$WFIRLCH - WAITFOR INTERRUPT OR TIMEOUT AND RELEASE CHANNEL

1453

1454 THIS ROUTINE IS CALLED TO SOFTWARE ENABLE INTERRUPTS AND TIMEOUT ON A DEVICE

1455 UNIT AND TO RELEASE THE CHANNEL. THIS ROUTINE CAN ONLY BE CALLED AT FORK LEVEL.

1456

1457 INPUTS:

1458 1459

= OO(SP) RETURN ADDRESS OF CALLER.

1460

04(SP) TIMEOUT VALUE IN SECONDS.

1461

OS(SP) IPL TO LOWER TO AFTER SETTING WAIT.

1462

12(SP) RETURN ADDRESS OF CALLER'S CALLER.

1463 1464

= RS UCB ADDRESS OF DEVICE UNIT.

1465

1466 OUTPUTS:

1467

1468

THE TIMEOUT VALUE IS COMPUTED AND STORED IN DUE TIME, REGISTERS,R3 AND

1469

R4 ALONG WITH THE RETURN PC ARE SAVED IN THE FORK BLOCK, INTERRUPTS AND

1470

TIMEOUT ARE ENABLED, THE CHANNEL IS RELEASED, AND A RETURN TO THE CALLER'S

1471

CALLER IS EXECUTED.

1472 '

1473

1474 IOC$WFIRLCH::

;WAITFOR INTERRUPT/TIMEOUT AND RELEASE CHANN

1475

ADDL

#2,(SP)

;CALCULATE OFFSET TO NORMAL RETURN

1476

MOVQ

R3,UCB$L FR3(R5)

;SAVE REGISTERS R3 AND R4

1477

POPL

UCB$L FPC(R5)

;SAVE INTERRUPT RETURN ADDRESS

1478

BISW

#UCB$M INT!UCB$M TIM,UCB$W STS(RS) ;ENABLE INTERRUPT AND TIMEOUT

1479

ADDL3 (SP)+,LAEXE$GL_ABSTIM,UCB$L_DUETIM(RS) ;SET TI,MEOUT TIME

1480
1481 1482 1483 1484

BICW

#UCB$M_TIMOUT,UCB$W_STS(R5) ;CLEAR UNIT TIMED OUT

ENBINT

BRW

IOC$RELCHAN

;ENABLE INTERRUPTS ;RELEASE ALL CHANNELS AND RETURN TO CALLER

IOSUBNPAG V03-033
-1

50 OOOOOOOO'EF
52 53 52 51
53 OOOOOOOO'EF
10 53 OOOOOOOO'EF OOOOOOOO'EF
53 50

- NONPAGED I/O RELATED SUBROUTINES ALLOCATE SYSTEM PAGE TABLE

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 38

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(26)

0620 1486

.SBTTL ALLOCATE SYSTEM PAGE TABLE

0620 1487 ;+

0620 1488 ; IOC$ALLOSPT - ALLOCATE SYSTEM PAGE TABLE

0620 1489

0620 1490 THIS ROUTINE ALLOCATES SYSTEM PAGE TABLE (SPT) ENTRIES.

0620 1491

0620 1492 INPUTS:

0620 1493 0620 1494

= Rl NUMBER OF SPT ENTRIES TO BE ALLOCATED

0620 1495 0620 1496

BOO$GL SPTFREL = LOWEST FREE VPN

0620 1497

BOO$GL=SPTFREH = HIGHEST FREE VPN

0620 1498

0620 1499

IT IS ASSUMED THAT THE CALLER IS RUNNING AT IPL$_SYNCH.

0620 1500

0620 1501 OUTPUTS:

0620 1502

0620 1503

RO SUCCESS INDICATION.

0620 1504

R2 STARTING PAGE NUMBER ALLOCATED (SVPN).

0620 1505

R3 ADDRESS OF BASE OF SYSTEM PAGE TABLE (MMG$GL_SPTBASE).

0620 1506

0620 1507

Rl IS PRESERVED ACROSS CALL.

0620 1508 '

0620 1509 IOC$ALLOSPT::

ALLOCATE SYSTEM PAGE TABLE

04 0620 1510

CLRL

RO

ASSUME FAILURE

DO 0622 1511

MOVL

LAB00$GL_SPTFREL,R2

GET NEXT AVAILABLE SYSTEM VPN

0628

Cl 0629 1512

ADDL3 R1,R2,R3

;COMPUTE NEXT WITH THIS ALLOCATION

Dl 062D 1513

CMPL

R3,LAB00$GL_SPTFREH

;ARE THERE ENOUGH AVAILABLE?

062F

lE 0634 1514

BGEQU 10$

;BR IF NO

DO 0636 1515

MOVL

R3,LA800$GL SPTFREL

;MARK THE ENTRIES ALLOCATED

0638

DO 063D 1516

MOVL

LAMMG$GL_SPTBASE,R3

;GET ADDR OF BASE OF SPT

0643

D6 0644 1517

INCL

RO

;SET SUCCESS

0646 1518 10$:

05 0646 1519

RSB

IOSUBNPAG V03-033
-1
;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ; RA.50300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300
;ROW0234 ;ROW0234 ;ROW0234 ;ROW0234 ;ROW0234 ;ROW0234 ;KPL0001 ;KPL0001 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300

- NONPAGED I/O RELATED SUBROUTINES CONVERT DEVICE NAME AND UNIT

3-JUN-1984 11 :33:30 VAX-11 Macro V03-0l

Page 39

12-MAR-1982 17:12:23 DISK$VMSMASTER: [SVS.SRC]IOSUBNPAG(27)

0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647 0647

1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535
.1 . 2 . 3 .4 .5 .6 .7 .8 .9 . 10 .11 . 12 . 13 .14 . 15 .16 . 17
. 18
. 19 .20 1536 1537 1538 1539 1540 1541 1542 1543
.1 . 2 . 3 .4 .5 .6 . 7 .8 .9 . 10 .11 . 12 . 13 .14

.SBTTL CONVERT DEVICE NAME AND UNIT
;+
IOC$CVT_DEVNAM - Convert device name and unit

This routine is cal led to convert a device name and unit number to a physical device name string.

Inputs:

The caller is assumed to have PROBEd the output buffer for write access. The I/O data base is locked for read access. This means that the caller owns the I/O data base mutex and/or is at IPL SYNCH or higher.

RO = length of output buffer. Rl = address of output buffer. R4 =name string formation mode, one of:
-1 (DVI$ DEVNAM) -- a name suitable for displays for non-local devices, return node$ddcn for local devices: if in cluster and file oriented device, return node$ddcn otherwise, return ddcn
0 (DVI$ FULLDEVNAM) -- a name with appropriate node information if allocation class not zero and file oriented device, return $al loclass$ddcn otherwise, return node$ddcn
1 (DVI$ ALLDEVNAM) -- a name with al location class information if allocation class not zero, return $alloclass$ddcn otherwise, return node$ddcn
2 (no GETDVI item code) -- an old fashioned name return ddcn
3 (no GETDVI item code) -- a secondary path name for displays same as -1 except secondary path name returned
4 (no GETDVI item code) -- path controller name for displays
same as -1 except no unit number is appended Note: if the node name string is nul 1, node$ is not returned. R5 = address of device UCB.

Outputs:

The device name and unit number are converted and stored in the specified output buffer. The following register values are returned:

RO = Final conversion status.

SS$ NORMAL or

SS$-BUFFEROVF (an alternate success status which

-

indicates that the supplied buffer could not

hold the device name string)

Rl = Length of conversion string. Rl = 0 if the alternate

path name was requested but none exists.

Working storage (offsets from R7)

$OFFSET O,POSITIVE,< -

<BINNUM,8>, -

;Binary value to convert to ASCII

; add new working storage eel ls before this line

IOSUBNPAG V03-033
;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300
;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ; RAS03,QO ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;ROW0244 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;ROW0244 ;ROW0244 ;ROW0244

- NONPAGED I/O RELATED SUBROUTINES CONVERT DEVICE NAME AND UNIT

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 40

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(27)

OOFC BF
7E 01 7E
57 5E
53 5F BF OOB4
56 28 A5 52 34 A6
5D 09 58 3C A5
5B 33 38 A5 OE

0647
0647 0647
0647 0647
0647 0647 0000
0008
oooc.
0010 0010 0014 0018 0647 0647 0647
BB 0647 064B 0648 0648 0648 064B
064B 7D 064B 7C 064E
0650 DO 0650
0653 0653 0653 0653 9A 0653 30 0657 065A 065A 065A 065A DO 065A DO 065E 13 0662 El 0664 0666 0669 0669 0669 0669 0669 0669
0669 0669 0669 11 067B 067D 067D El 0670 0682

. 15

<RESRO>, -

;Result RO

. 16

<RESRl>, -

;Result Rl

. 17

<SCRLEN,O> -

;amount of working storage

. 18

<RESR2>, -

;saved R2

. 19

<RESR3>, -

;saved R3

.20

<RESR4>, -

;saved R4

. 21

>

BINNUM:

RESRO:

RESR 1:

SCRLEN:

RESR2:

RESR3:

RESR4:

.22

.23 IOC$CVT_DEVNAM::

;Convert device name and unit

.24

.25

PUSHR #AM<R2,R3,R4,R5,R6,R7> ;Save registers

.26

.27 Push a quadword onto the stack. The quadword will land

.28 on the stack so that when the POPR at the end of the routine

.29 is executed, RO will contain the routine value, and R1 will

.30 contain the length of the formatted device name.

. 31

.32

MOVQ

#SS$ NORMAL,-(SP)

;Put a 1 and a 0 on the stack

.33

CLRQ

-(SP)

;!nit binary number working area.

.34

ASSUME SCRLEN EQ 16

.35

MOVL

SP, R7

;Setup result RO and Rl pointer in R7.

.36

.37 Precede the device name with a " " (underscore character) to

.38 indicate that this is a physical-device name.

.39

.40

MOVZBL #AA/ /,R3

;Put underscore character in R3

.41

BSBW

PUT CHAR

;Put it in the output buffer

.42

.43 Check for a possible nodename. If it exists, determine which format

. 44 of name was requested by the caller .

.45

.46

MOVL

UCB$L DDB(R5),R6

Get DOB address

.47

MOVL

DDB$L-SB(R6),R2

Get System Block address

.48

BEQL

LOCAL-NAME

None, leave

.49

BBC

#DEV$V NNM,-

Branch if nodename not wanted

.50

UCB$L DEVCHAR2(R5),LOCAL NAME

. 51

CASE

R4, --

~Dispatch on type of output requested:

.52

limit=#-1, displist=< -

.53

DISPLAY NAME, -

-1 ==> node$dev: for disks, else dev:

.54

FULL NAME, -

0 ==> $allocls$dev: or node$dev:

.55

ALLOC NAME, -

1 ==> $allocls$dev: or node$dev:

.56

LOCAL-NAME, -

2 ==> just dev:

.57

SECONDARY NAME, -

3 ==> secondary path

.5B

DISPLAY NAME -

4 ==> same as -1 sans unit number

.59

>

.60

BRB

EXDVNM

Al I others are NOPs.

.61

.62 FULL NAME:

.63

BBC

#DEV$V FOO, -

;A file oriented device?

.64

UCB$L DEVCHAR(R5), -

IOSUBNPAG V03-033
;ROW0244 ;ROW0244 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 :RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300
;RAS0300 ;RAS0300 ;ROW0244 ;ROW0244 ;ROW0244 ;ROW0234 ;ROW0234 0 ROW0234 ;ROW0234
;ROW0234 ;ROW0234 ;ROW0234 ;ROW0234 ;ROW0239 ;ROW0239 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300

- NONPAGED I/0 RELATED SUBROUTINES CONVERT DEVICE NAME AND UNIT

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 41

12-MAR-1982 17:12:23 DISK$VMSMASTER: [SVS.SRC]IOSUBNPAG(27)

67 3C A6 20
0080 58 30
04 3C A5
4C 56 OOAO C5
45 52 34 AG
52 00000000'8F
OD OC 38 A5 OE
52 44 A2 62 04 3E 4A
52 14 A6 36
04 18 A7 OB
6"1 54 A5 12
53 3A

0682 .65

ADD NODE

;Branch if not file oriented device.

0682 .66

0682 .67 ALLOC_NAME:

0682 .68

9A 0682 .69

MOVZBL DDB$L ALLOCLS(R6), -

;Setup al location class value

0686 .70

BINNUM(R7)

; for conversion.

13 0686 . 71

BEQL ADD NODE

;If none return node+device name.

30 0688 .72

BSBW

PUTDOLLAR

;Prepend al location class with a '$'

10 0688 .73

BSBB

PUTNUM

;Convert al location class number to

068D .74

;ASCII and put it in the buffer

11 068D .75

BRB

ADD DOLLAR

;Append dollar sign to alloc. class

068F .76

; and add device name to buffer.

068F .77

068F .78 SECONDARY NAME:

El 068F .79

BBC

#DEV$V 2P,-

;Branch if device not dual-pathed.

0691 .80

UCB$L DEVCHAR2(R5),-

; (I.E. there is no secondary path to

0693 .81

NO SECONDARY

; return.)

DO 0694 .82

MOVL

UCB$L DP DDB(R5),R6

;Get secondary DOB.

13 0699 .83

BEQL NO SECONDARY

;Branch to no sec. path if none.

DO 0698 .84

MOVL

DDB$L SB(R6),R2

;Get alternate SB.

069F .85

069F .86 DISPLAY NAME:

Dl 069F .87

-CMPL

R2,#SCS$GA LOCALSB

;Is it the perm local system block?

06A1

12 06A6 .88

BNEQ ADD NODE

;Return node+devnam for non-local devs.

06A8 .89

IFNOCLSTR LOCAL NAME

;Return devnam if not part of a cluster.

El 0680 .90

BBC

#DEV$V FOO, -

;A file oriented device?

0685 .91

UCB$L DEVCHAR(R5), -

0685 .92

LOCAL=NAME

;Branch if not a file oriented device.

0685 .93

;Its a local disk in a cluster: return

0685 .94

;node+device name format.

0685 .95

0665 .96 Return node name plus device name. Copy node name to buffer and

0685 .97 suffix with a "$" before moving in rest of device name.

0685 .98 ;

0685 .99 ADD NODE:

9E 0685 . 100

-

MOVAB SB$T NODENAME(R2),R2

;Point to name field

95 0689 . 101

TSTB

(R2)-

;Is the node name null?

13 0688 . 102

BEQL

LOCAL NAME

;Skip inserting node name, if its null.

10 06BD . 103

BSBB

PUTASCIC

;Copy counted ASCII str. to output buf.

06BF . 104 ADD DOLLAR:

10 06BF . 105

-

BSBB

PUTDOLLAR

;Append dollar sign to node name

06C1 06C1

.106 . 107

; '

Copy

device

name

to

buffer.

06C1 06C1

. 108 . 109

L' OCAL

NAME:

9E 06C1 .110

- MOVAB DDB$T NAME(R6),R2

;Get address of ASCIC device name.

10 06C5 · 1 1 1

BSBB

PUTASCIC

;Copy counted ASCII str. to output buf.

81 06C7 · 112

CMPW

RESR4(R7),#4

;Do we want the unit number?

13 06C8 · 113

BEQL

EXDVNM

;Nope

3C 06CD . 114

MOVZWL UCB$W UNIT(R5), -

;Setup device unit number for

06D1 · 115

BINNUM(R7)

; converstion to ASCII.

10 0601 · 116

BSB8

PUTNUM

;Convert unit number to ASCII.

06D3 . 117

0603 · 118 Terminate the device name with a":" (colon).

0603 .119

9A 0603 .120

MOVZBL #AA/:/,R3

;,Put a ":" in R3

IOSUBNPAG V03-033
;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300
;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300

- NONPAGED I/0 RELATED SUBROUTINES CONVERT DEVICE NAME AND UNIT

3-JUN-19B4 11 :33:30 VAX-11 Macro V03-0l

Page 42

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(27)

36 10 0606 . 121

BSBB

PUTCHAR

;Put the ":" in output buffer

06D8 . 122

0608 . 123 Clean up the stack and exit. The stack has been set up so that

0608 . 124 the proper values will be stored in RO and R1 by the POPR.

0608 . 125 ;
5E OB co 06DB . 126 EXDVNM: ADDL

#RESRO,SP

;Remove everything upto result RO

06DB . 127

;from the stack

DOFF BF BA 06DB . 128

POPR

#AM<RO,Rl ,R2,R3,R4,R5,R6,R7> ;Restore registers

05 06DF . 129

RSB

;Return

06EO . 130

06EO . 131

. 06EO . 132
06EO . 133

Come here when the secondary device name was requested but none exists .

06EO . 134 NO SECONDARY:

OC A7 D4 06EO . 135 -

CLRL

RESR1(R7)

;Clear count of characters

F3 11 06E3 . 136

BRB

EXDVNM

;and return.

06E5 . 137

06E5 . 13B

06E5 · 139 ;++

06E5 . 140 The following code is a local subroutine to convert binary to ASCII and

06E5 .141 put the ASCII equivalent in the output name buffer.

06E5 . 142

06E5 . 143 Inputs:

06E5 .144

06E5 .145

BINNUM(R7)

binary number to be converted (a quadword with high

06E5 . 146

longword zeroed

06E5 . 147

06E5 . 14B Outputs:

06E5 . 149

The number at BINNUM(R7) is converted to ASCII and stored in the

06E5 . 150

device name buffer.

06E5 . 151

06E5 . 152 PUTNUM:

53 01 SE 06E5 . 153

MNEGB #1, R3

Get end-of-number marker.

7E 53 90 06E8 . 154 10$:

MOVB

R3, -(SP)

Move digit/marker to scratch.

67 67 OA 76 06EB . 155

EDIV

#10, BINNUM(R7), -

Divide number by 10, overwrite number

53

06EF

06FO . 156

BINNUM(R7), R3

;with quotient, put remainder in R3.

F6 12 06FO . 157

BNEQ

10$

;If quotient not zero, go save this

06F2 . 158

; digit and get the next one.

06F2 . 159

06F2 . 160 Get digits -- most significant first (then saved ones), convert them to

. 06F2 . 161 ASCII, and put them in the output buffer
06F2 . 162

53 30 80 06F2 .163 50$:

ADDB

#AA/0/, R3

;Convert binary ~igit to ASCII

17 10 06F5 · 164

BSBB

PUT CHAR

;Copy digit to output buffer

53 BE 90 06F7 . 165

MOVB

(SP)+, R3

;Get another digit

F6 18 06FA .166

BGEQ

50$

;Branch if the end

05 06FC . 167

RSB

06FD . 168

06FD . 169 ;++

06FD . 170 The following code is a local subroutine to copy a counted ASCII string

06FD . 171 to the output name buffer.

06FD . 172

06FD . 173 Inputs:

06FD . 174

06FD .175

R2

Beginning address of a counted ASCII string

06FD . 176

IOSUBNPAG V03-033
;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 ;RAS0300 -59
;KPL.0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPLOOOl ;KPLOOOl ;KPLOOOl ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPL0001 ;KPLOOOl

- NONPAGED I/O RELATED SUBROUTINES CONVERT DEVICE NAME AND UNIT

3-JUN-1984 11:33:30 VAX-11 Macro V03-0l

Page 43

12-MAR-1982 17: 12:23 DISK$VMSMASTER: [SVS.SRC]IOSU6NPAG(27)

54 82 08
53 82 07
F8 54
53 24 50 07
81 53 OC A7

06FD . 177 Outputs:

06FD . 178

The counted ASCII string pointed to by R2 is copied to the device

06FD .179

name buffer.

06FD . 180

06FD . 181 PUTASCIC:

9A 06FD . 182

MOVZ8L (R2)+, R4

;Get counted string length.

13 0700 . 183

8EQL

90$

;If no characters, leave.

90 0702 . 184 5$:

MOV8

(R2)+, R3

;Move one byte to output buffer.

10 0705 . 185

8$88

PUTCHAR

;Put the character in the output buffer.

F5 0707 . 186

S08GTR R4, 5$

;Branch if more to copy.

05 070A . 187 90$:

RS8

;Al 1 done, return.

0706 1603

0706 1604 ;++

0706 1605

070B 1606 The fol lowing code is a local subroutine to place a given

0706 1607 byte in the output buffer. A count is kept of al 1 characters

070B 1608 placed in the output buffer. If the output buffer is ful 1,

0706

.1 the byte is not copied, the count is not increased, and the

0706

. 2 return status for IOC$CVT DEVNAM is changed to SS$ 6UFFEROVF

0708

.3 (an alternate success status).

0706

.4

0706

.5 Inputs:

0706

.6

RO

Count of unstored character slots remaining in output buffer

0706

.7

R1

Address of next unused character slot in output buffer

070B

. 8

R3

Character to be placed in the buffer

0706

.9

0706 . 10 I mp 1 i c i t i n puts :

0706 .11

RESRO(R7)

longword holding final IOC$CVT DEVNAM status

0708 . 12

RESR1(R7)

longword holding final IOC$CVT-DEVNAM count of

0708 . 13

characters stored in the buffer (to be

0708 . 14

returned in Rl

0706 . 15

0708 . 16 Outputs:

0708 . 17

None.

0706 . 18

0706 . 19 Implicit outputs:

0706 .20 0708 . 21 0708 .22 0708 .23 0708 .24

If RO >= zero: RO
( R 1)
R1 RESRl (R7)

<== RO <== R3 <== R 1 + 1 <== RESR1(R7) + 1

0706 .25 0708 .26

otherwise: RESRO(R7)

<== SS$_BUFFEROVF

0708 .27 ;++

0708 .28 PUTDOLLAR is an internal routine which is the equivalent of:

0706 .29

0708 .30

MOV8

#AA/$/, R3

0708 . 31

8$88

PUT CHAR

0708 .32

0708 .33 PUTDOLLAR:

90 0708 .34

MOVB

#AA/$/, R3

;Setup to put "$" in output buffer.

070E .35 PUTCHAR:

07 070E .36

DECL

RO

;Decrease characters remaining count.

19 0710 .37

BLSS

90$

;Branch if no more characters remaining.

90 0712 .38

MOV8

R3, (Rl )+

;Copy character to output buffer

06 0715 .39

INCL

RESRl (R7)

;Count characters stored

05 0718 .40

RS8

;Return

IOSUBNPAG V03-033
;KPLOOOl ;KPLOOOl
;KPL0001 ;KPL0001

- NONPAGED I/O RELATED SUBROUTINES CONVERT DEVICE NAME ANO UNIT

3-JUN~1984 11:33:30 VAX-11 Macro V03-01

Page 44

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(27)

0601 BF 08 A7

0719 3C 0719
0710 071F 05 071F

.41 .42 90$:
.43 .44

MOVZWL #SS$_BUFFEROVF, -
RESRO(R7) RSB

;Set buffer overflow status

IOSUBNPAG V03-033 -14
;TCM0003
-1

- NONPAGED I/O RELATED SUBROUTINES BROADCAST TO A TERMINAL

3-JUN-1984 11 :33:30 VAX-11 Macro V03-0l

Page 45

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(28)

0720 1623

.SBTTL BROADCAST TO A TERMINAL

0720 1624 ;++

0720 1625 IOC$BROADCAST

0720 1626

0720 1627

This routine will allow driver fork processes to broadcast a

0720 1628

given message to given terminal. The broadcast request is

0720 1629

dispatched to the proper terminal and control returns immediately

0720 1630

to the caller. Some time later the broadcast will complete, and

0720 1631

at that time all the necessary post-processing will be done.

0720 1632

0720 1633

This routine does not implement all the features of the $BRDCST system

0720 1634

service, but only the bare minimum necessary to send a message to a

0720 1635

single terminal. For more information about the terminal broadcast

0720 1636

mechanism, see the module SVSBRDCST.

0720 1637

0720 1638 Input:

0720 1639

0720 1640

Rl = Message length

0720 1641

R2 = Message address

0720 1642

R5 = Address of target terminal's UCB

0720 1643

0720 1644 Implicit input:

0720 1645

0720 1646

IPL$_ASTDEL <= CURRENT IPL <= UCB$B FIPL(R5)

0720 1647

0720 1648 Output:

0720 1649

0720 1650

None. The contents of Rl .. R5 are preserved across the cal 1.

0720 1651

0720 1652 Routine value:

0720 1653

0720 1654

SS$ NORMAL

- The broadcast completed successfully.

0720 1655

SS$-INSFMEM

- Insufficient dynamic nonpaged pool for the request.

0720 1656

SS$-DEVOFFLINE - The target terminal has rejected the request.

0720 1657

ss() LLIOFUNC - The specified UCB does not belong to a terminal.

0720 1658

(Therefore a BROADCAST is an illegal I/O function.)

0720 1659 ;--

0720 1660

00000000 0720 1661 SAVED RO 0

00000004 0720 1662 SAVED-Rl 4

00000008 0720 1663 SAVED-R2 8
oooooooc 0720 1664 SAVED-R3 12

Symbolic offsets to saved registers

00000010 0720 1665 SAVED-R4 16

00000014 0720 1666 SAVED::)5 20

0720 1667

0720 1668 IOC$BROADCAST::

Broadcast to a terminal

50 OOF4 BF 3C 0720 1669

MOVZWL #SS$ ILLIOFUNC,RO

Assume device not a terminal

02 El 0725 1670

BBC

#DEV$V TRM,-

Branch if not a terminal

56 38 A5

0727 1671

UCB$L 5EVCHAR(R5),14$

3F BB 072A 1672

51 30 co 072C

.1

PUSHR #AM<RO,Rl,R2,R3,R4,R5> ; Save RO .. RS

ADDL2 #TTV$K WB LENGTH,Rl

; Calculate the total pool required

6E 0124 BF 3C 072F 1674

MOVZWL #SS$ INSFMEM,SAVED RO(SP); Assume allocation failure

F8C9' 30 0734 1675

BSBW

EXE$ALONONPAGED -

; Allocate the pool

44 50 E9 0737 1676

BLBC

R0,13$

; Exit if error

073A 1677

073A 1678

Fill in the Terminal Write Packet (TWP).

073A 1679

Note that EXE$ALONONPAGED the pool size

IOSUBNPAG V03-033

- NONPAGED I/O RELATED SUBROUTINES BROADCAST TO A TERMINAL

3-JUN-1984 11 :33:30 VAX-11 Macro V03-01

Page 46

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(28)

08 A2 51 BO 30 90
OA A2 06 90
OB A2 10 A2 01 DO
30 A2 9E 1C A2 04 AE Cl 1C A2 20 A2 8B'AF 9E 2C A2 24 A2 D4
52 DD 08 AE 28 OC BE 30 A2
53 6E DO 55 18 AE DO
F88F' 30 50 8EDO
6E 01 3C 20 AO D5 05 13 08 14 3F BA 05
0084 SF 3C 6E
F877' 30 F3 11
50 55 DO F86F' 31

073A 073A 073A 073E 0740 0742 0744 0746 074A 074D 074F 0752 0754 0756 0759 075B 075E 0760 0763 0765 0767 0767 0767 0767 0767 0767 0767 0767 0767 0767 0767 0767 0767 076A 076E 0771 0774 0777 077A 077C 077E 0780 0781 0785 0786 0789 078B 078B 018B 078B 078B 078B 0788 078B 078E

1680

in R1 and the pool address in R2.

1681

;

1682

MOVW

R1,TTY$W WB SIZE(R2)

Set TWP size

1683

MOVB

#DVN$C TWP,=

Set TWP structure type

1684

TTV$B WB TVPE(R2)

1685

MOVB

#IPL$-QUEUEAST,-

Set the TWP fork IPL (for later use)

1686

TTV$B-WB FIPL(R2)

1687

MOVL

#1,TTY$L-WB FR3(R2)

Request refresh of read prompt

1688

MOVAB TTV$L WB-DATA(R2),-

Set address of message start

1689

TTV$L-WB-NEXT(R2)

1690

ADDL3 SAVED-R1(SP),-

Set address of message end

1691 1692

TTV$L-WB NEXT(R2),TTV$L-WB-END(R2)

1693

MOVAB BAEND-BROADCAST,-

Set callback address

1694 1695 1696

CLRL PUSHL

TTY$L-WB RETADDR(R2) TTV$L-WB-IRP ( R2) R2 - -

Clear pointer to associated IRP Save TWP address

1697 1698

MOVC3

4+SAVED R1(SP),~4+SAVED R2(SP),-

Copy ~he message text to the TWP (note the stack depth changed)

1699

TTV$L_WB=DATA(R2)

1700

1701

Queue the broadcast request to the terminal.

1702

The disposition of the broadcast request will be determined

1703

by the contents of TTV$L WB END. Note that if the request is

1704

accepted by a remote terminal, or is rejected outright, the

1705

TWP is no longer needed, and may be deallocated. The TTV$L WB END

1706

field of the TWP will contain one of the following values: -

1707

1708

System address: request accepted by TTDRIVER

1709

1:

request accepted by RTTDRIVER

1710

2:

request rejected

1711

1712

MOVL

(SP) ,R3

Put TWP address in R3

1713

MOVL

4+SAVED R5(SP),R5

Restore UCB address

1714

BSBW

EXE$ALTQUEPKT

Queue the request to the terminal

1715

POPL

RO

Remove TWP address from the stack

1716

MOVZWL #SS$ NORMAL,SAVED RO(SP); Assume success

1717

TSTL

TTY$L WB END(RO)

Check for rejection

1718

BEQL

69$ -

Branch if request rejected

1719

BGTR

80$

Branch if remote terminal accepted

1720 13$:

POPR

#AM<RO,R1,R2,R3,R4,R5>

Restore the registers

1721 14$:

RSB

Return

1722 69$:

MOVZWL #SS$ DEVOFFLINE,-

Set broadcast rejection status

1723

SAVED RO(SP)

1724 80$:

BSBW

COM$DRVDEALMEM

Deallocate the TWP

1725

BRB

13$

Take common exit path

1726

1727

1728 The fol lowing code performs all of the necessary broadcast post-processing.

1729 This entry point is FORKed to at IPL IPL$ QUEUEAST from the terminal driver~

1730 The fork block is the TWP.

-

1731

1732 END BROADCAST:

Post-processor for broadcast requests

1733

MOVL

R5,RO

Copy TWP address

1734

BRW

EXE$DEANONPAGED

Deal locate the TWP and return

IOSUBNPAG V03-033
;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ; ACG0·399 ;ACG0399
ACG0399 ACG0399 ACG0399 ACG0399 ACG0399
;ACG0399

- NONPAGED I/0 RELATED SUBROUTINES SCAN THE I/0 DATA BASE

3-JUN-1984 11 :33:30 VAX-11 Macro V03-0l

Page 47

12-MAR-1982 17:12:23 DISK$VMSMASTER: [SVS.SRC]IOSUBNPAG(29)

50 01 5B 2C 5A 07
5A 30 AA 01
6B QA 5B 6B 5A 04 AB F3
5B 34 AB 5B 68 5B
00000000'8F QA 50
00000000'9F 58
54 AB

0791 0791 0791 0791
0791 0791 0791 0791 0791 0791 0791 0791 0791 0791 0791 0791 0791 0791 0791 0791 0791
0791 0791 0791 0791 0791 0791 0791 0791
0791 DO 0791 D5 0794 13 0796 05 0798 13 079A DO 079C 13 07AO 05 07A2
07A3 05 07A3 13 07A5 DO 07A7 DO 07AA 13 07AE 05 0780
07B1 DO 07B1 DO 07B5 Dl 0788
07BA 12 07BF 07 07C1 05 07C3
07C4 DO 07C4
07CA
05 07CB

. 2

.SBTTL SCAN THE I/O DATA BASE

. 3 ;+

.4 .5

; ;

IOC$SCAN- IODB

-

Scan

the

I/O

data

base

and

return

next

block.

. 6 ; This routine is cal led to scan the device lists in the IO data base and

.7 ; return a pointer to the next block in the list. Context is kept in R11

. 8 ; and by using back pointers .

.9 ;

. 10 ; Inputs:

.11 ;

. 12 ;

The I/O data base is locked for read access. This means that the caller

. 13 ;

owns the I/O data base mutex and/or is at IPL SYNCH or higher.

.14 ;

.15 ;

Rl 1 = 0 implies fir-st call

. 16 ;

Rl 1 <> 0 indicates that R11 is pointer to current DOB

. 17 ;

RlO = 0 implies end of UCB chain

. 18 ;

R10 <> 0 indicates that R10 is pointer to current UCB

. 19 ;

.20 ; Outputs:

. 21 ;

. 22 ;

RO = Success status .

.23 ;

R10 = Pointer to UCB

.24 ;

R11 = Pointer to DOB

.25 ;

.26 ;

A11 other registers preserved.

.27

.28

.29

.30 IOC$SCAN IODB::

.31

.32

MOVL

#1 ,RO

; Success

.33

TSTL

R 11

; Initial condition?

.34

BEQL

50$

; Yes

.35

TSTL

RlO

; End of chain?

.36

BEQL

10$

; Yes

.37

MOVL

UCB$L_LINK(R10),R10

; Get next UCB

.38

BEQL

10$

: None

.39

RSB

.40

.41 10$:

TSTL

DDB$L LINK(Rl 1)

; At end of DOB chain?

.42

BEQL

30$

; Yes

.43

MOVL

DDB$L LINK(R11),R11

; No, get next one

.44 20$:

MOVL

DDB$L-UCB(R11),R10

; Pick up first UCB

.45

BEQL

10$

; None, get next DOB

.46

RSB

.47

.48 30$:

MOVL

DDB$L SB(R11),Rll

; Get back to parent system block

.49 40$:

MOVL

SB$L FLINK(R11),R11

; Get next system block

.50

CMPL

R11 ,#SCS$GQ CONFIG

; End of chain?

.51 .52 .53 .54 .55 50$:

BNEQ DECL RSB
MOVL

60$ RO
@#SCS$GQ_CONFIG,R11

: No ; Pick up first system block

.56 60$:

TSTL

SB$L DDB(Rl 1)

; Is there a DOB chain?

IOSUBNPAG V03-033
ACG0399 ACG0399 ACG0399 ACG0399

- NONPAGED I/O RELATED SUBROUTINES SCAN THE I/O DATA BASE

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 48

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(29)

E5 13 07CE .57 5B 54 AB DO 0700 .58
04 11 0704 .59 0706 .60

BEQL MOVL BRB

40$
SB$L DDB(R11),R11 20$ -

; No, go try next SB ; Yes, get the first DOB

IOSUBNPAG V03-033
;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 1ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACC.0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399
ACG0399 ACG0,399
ACG0399

50 01 SB 41 SA lC
SB 28 AA 07
5A 30 AA 09
5A 00A4 CA 08
5A 40 AB 01
68 QA SB 68 SA 04 AB EC

- NONPAGED I/O RELATED SUBROUTINES

3-JUN-1984 11: 33: 30 VAX-11 Macro V03-0l

Page 49

SCAN THE I/O DATA BASE BOTH PRIMARY & SE 12-MAR-1982 17: 12: 23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(30)

0706 .62

.SBTTL SCAN THE I/O DATA BASE BOTH PRIMARY & SECONDARY PATHS

0706 .63 ;++

0706 .64 ; IOC$SCAN_IODB_2P

0706 .65 ;

0706 .66 ; This routine is called to scan the device lists in the IO data base and

0706 .67 ; return a pointer to the next block in the 1 is t. Context is kept in R10

0706 . 68 ; and Rl 1 and by using back pointers .

0706 .69 ;

0706 .70 ; SCAN IODB 2P differs from SCAN IODB in that it wi 11 scan both the primary

0706 .71 ; and secondary UCB chain for each DOB. This means that if a device is

0706 .72 ; dual-pathed, SCAN IODB 2P will return the address of its UCB twice, once in

0706 .73 ; the context of the primary controller and once in the context of the

0706 .74 ; secondary.

0706 0706 0706

.75 ;
. .76 ; Inputs and Outputs are identical to IOC$SCAN_IODB.
.77

0706 . 78

0706 .79 IOC$SCAN_IODB_2P::

0706 .80

DO 0706 .81

MOVL

#1 ,RO

; Success

DS 0709 .82

TSTL

R 11

; Initial condition?

13 07DB .83

BEQL

60$

; Yes

05 0700 .84

TSTL

RlO

; Caller signal led end of chain?

13 07DF .85

BEQL

30$

; Yes, done with this DOB

07E1 .86 ;

07E1 .87 ; At this point we must decide if we're fol lowing the primary or secondary

07El .88 : chain of UCBs on this DOB.

07E1 .89

01 07E1 .90

CMPL

UCB$L_DDB(R10),R11

; Are we traversing the primary chain?

12 07ES .91

BNEQ

10$

; Branch if we're following secondary

DO 07E7 .92

MOVL

UCB$L_LINK(R10),R10

; Get next UCB on primary chain

13 07EB .93

BEQL

20$

; Branch if none to try secondary chain

05 07EO .94

RSB

; Else return UCB address to caller

07EE .95 ;

07EE .96 ; Get next UCB on secondary chain.

07EE DO 07EE

.97 .98

1' 0$:

MOVL

UCB$L_DP_LINK(R10),R10 ; Get next UCB on secondary chain

13 07F3 .99

BEQL

30$

; Branch if none left

05 07F5 . 100

RSB

; Else return UCB address to caller

07F6 . 101 ;

07F6 . 102 ; No UCBs left on primary chain; traverse secondary chain if present.

07F6 . 103 ;

DO 07F6 . 104 20$:

MOVL

DDB$L_DP_UCB(R11),R10

Get first UCB on secondary chain

13 07FA . 105

BEQL

30$

Branch if none to try next DOB

05 07FC .106

RSB

Else return UCB address to caller

07FD . 107 ;

07FD . 108 ; Step to next DOB.

,,, 05
13

07FD 07FD 07FF

·.109
..110

3' 0$:

TSTL BEQL

DDB$L_LI NK ( R1 1) 40$

At end of DOB chain? Yes, try next system block

DO 0801 . , 12

MOVL

DDB$L LINK(R11),R11

No, get next one

DO 0804 .113 35$:

MOVL

DDB$L=UCB(R11),R10

Pick up first UCB on primary chain

13 0808 . 114

BEQL

20$

None, try for UCB on secondary chain

05 080A . 115

RSB

Else return UCB address to caller

0808 .116

0808 . 117

0808 . l 18 ; Step to next system block .

IOSUBNPAG V03-033
ACG0399 ACG0399 ACG0399 ACG0399
ACG0399 ACG0399 ACG0399 ACG0399 ACG0399
ACG0399 ACG0399 ACG0399 ACG0399

- NONPAGED I/0 RELATED SUBROUTINES

3-JUN-1984 11: 33: 30 VAX-11 Macro V03-0l

Page 50

SCAN THE I/O DATA BASE BOTH PRIMARY & SE 12-MAR-1982 17: 12: 23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(30)

5B 34 AB 5B 6B 5B
00000000'8F OA 50
00000000'9F 58
54 AB E5
58 54 AB 04

080B . 119 , DO 080B . 120 40$: DO 080F . 121 50$: 01 0812 . 122
0814 12 0819 . 123 07 0816 .124 05 0810 .125
081E . 126 DO 081E .127 60$:
0824 05 0825 . 128 70$: 13 0828 .129 DO 082A . 130 11 082E . 131

MOVL MOVL CMPL
BNEQ DECL RSB
MOVL
TSTL BEQL MOVL BRB

OOB$L SB ( R 1 1 ) , R 1 1 SB$L FLINK(R11),R11 R11,#SCS$GQ_CONFIG
70$ RO
@#SCS$GQ_CONFIG,R11
SB$L_OOB(R11) 50$ SB$L_OOB(R11),R11 35$

; Get back to parent system block ; Get next system block : End of chain?
; No ; Signal end of IO scan
; Pick up first system block
Is there a DOB chain? No, go try next SB Yes, get the first DOB Try for UCB on primary chain

IOSUBNPAG V03-033
;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACCi0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 . ; ACG0399
;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399

- NONPAGED I/O RELATED SUBROUTINES

3-JUN-1984 11 :33:30 VAX-11 Macro V03-0l

Page 51

IOC$CTRLINIT - Call driver controller in 12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(31)

55 2C AB 05
54 65 05
54 51 lB
56 14 A5 15
OE A6 01 OF
56 66 50 54 OOOOOOOO'GF
OE 50

0830 . 133

.SBTTL IOC$CTRLINIT - Cal 1 driver cont~oller init. routine

0830 . 134 ;++

0830 . 135

FUNCTIONAL DESCRIPTION:

0830 . 136

0830 . 137

For UNIBUS devices, the device CSR is tested for existance. If this

0830 . 138

test fails, a no routine call occurs and failure status is returned in

0830 . 139

RO. Input values for a device driver's controller initialization

0830 . 140

routine are loaded into the proper registers, the routine starting

0830 . 141

address is located, and if a routine exists, it is cal led .

0830 . 142

0830 . 143

INPUTS:

0830 . 144

Rl

CSR address to use if IDB contains zero

0830 . 145

RS

CRB address (primary)

0830 . 146

Rl 1

DOB address

0830 . 147

0830 . 148

OUTPUTS:

0830 . 149

RO

Status (success, or failure==> UNIBUS CSR non-existant)

0830 . 150

Rl-R6 Destroyed

0830 . 151

0830 . 152

0830 . 153 ;++

0830 . 154

Controller initialization routine parameters:

0830 . 155

0830 . 156

INPUTS:

0830 . 157

R4

CSR address (for UNIBUS and MASSBUS devices)

0830 . 158

SCSSYSTEMID address (for class drivers during SYSGEN driver

0830 . 159

loading)

0830 . 160

zero for al 1 others, including class drivers during power

0830 . 161

failure recovery

0830 . 162

R5

IDB address (or zero if none exists)

0830 . 163

R6

DDB address

0830 . 164

RB

CRB address

0830 . 165

0830 . 166

OUTPUTS:

0830 . 167

Must preserve all registers except RO through R4.

0830 . 168

0830 . 169

0830 . 170

0830 . 171

0830 . 172 IOC$CTRLINIT::

0830 . 173

DO 0830 . 174

MOVL

CRB$L_INTD+VEC$L_IDB(R8), RS

Get IDB address.

18 0834 . 175

BGEQ

10$

Branch if none.

DO 0836 . 176

MOVL

IDB$L CSR(R5), R4

Get CSR address.

19 0839 .177

BLSS

20$

Branch if really a CSR.

DO 083B . 178 10$:

MOVL

R1, R4

Else, use supplied value,

11 083E . 179

BRB

40$

and skip CSR testing.

0840 . 180

DO 0840 . 181 20$:

MOVL

IDB$L_ADP(R5), R6

Get ADP address.

18 0844 . 182

BGEQ

40$

If none, skip CSR test.

Bl 0846 . 183

CMPW

#AT$_UBA, ADP$W ADPTYPE(R6)

Is this a UBA?

12 084A . 184

BNEQ

40$

If not a UBA, skip CSR test.

DO 084C . 185

MOVL

ADP$L CSR(R6), R6

Get adapter config reg addr.

DO 084F . 186

MOVL

R4, RO

Setup CSR for test.

16 0852 . 187

JSB

GAEXE$TEST CSR

Test UNIBUS CSR.

E9 0858 . 188

BLBC

RO, 90$

Branch if no CSR present.

085B . 189

IOSUBNPAG V03-033
;ACG0399 ACG0399 ACG0399 ACG0399 ACG0399 ACG0399 ACG0399

- NONPAGED I/O RELATED SUBROUTINES

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 52

IOC$CTRLINIT - Call driver controller in 12-MAR-1982 17: 12: 23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(31)

50 30 AB 05
56 5B 60
50 01

DO 0858 . 190 40$: 18 085F . 191 DO 0861 . 192 16 0864 . 193
0866 . 194 DO 0866 . 195 80$: 05 0869 . 196 90$:

MOVL BGEQ MOVL JSB
MOVL RSB

CRB$L_INTD+VEC$L_INITIAL(R8), RO ; Get ctrl in it rout addr:.

80$

; Branch if none.

Rl 1, R6

; Get DOB address.

(RO)

: Ca 11 ctrl i nit routine.

#1, RO

; Set success status . : Return w/ status .

IOSUBNPAG V03-033
;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ACG0399 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0221 ;R-OW0221
;ROW0221 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0221 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0221

- NONPAGED I/O RELATED SUBROUTINES

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 53

IOC$UNITINIT - Call driver unit init. ro 12-MAR-1982 17:12:23 DISK$VMSMASTER:[SVS.SRC]IOSUBNPAG(32)

086A . 198

.SBTTL IOC$UNITINIT - Cal 1 driver unit init. routine

086A . 199 ;++

086A .200

FUNCTIONAL DESCRIPTION:

086A .201

086A .202

Input values for a device driver's unit initialization routine are

086A .203

loaded into the proper registers, the routine starting address is

086A .204

located, and if a routine exists, it is cal led.

086A .205

086A .206

INPUTS:

086A .207

R5

UCB address

086A .208

RB

CRB address (primary)

086A .209

086A .210

OUTPUTS:

086A . 211

RO-R4 Destroyed

086A . 212

086A .213

NOTES:

086A .214

086A .215

There are two unit initialization routine addresses in the I/O data

086A .216

base; CRB$L INTO VEC$L UNITINIT and DDT$L UNITINIT. Normally,.only

086A .217

one of these two-places should contain a unit initialization routine

086A .218

address. However, for the console block storage device, the both

086A .219

locations contain an address, and the DDT contains the address which

086A . 220

must be used.

086A . 221

086A .222

In this case, the CRB is shared by the console terminal and console

086A .223

block storage devices. The CRB contains the address of the unit

086A .224

initialization routine for the console terminal, and the console

086A .225

terminal DDT contains no unit initialization routine address. Thus

086A .226

the console terminal device "fits" the "normal" case. However, the

086A .227

console block storage device DDT contains a unit initialization

086A .228

routine which differs from the console terminal unit initialization

086A .229

routine and whose address is stored in the DDT.

086A .230

086A . 231

Since the CRB is shared and contains the wrong unit initialization

086A .232

routine address for the console block storage device, the DDT must be

086A .233

inspected first. Initialization for the console terminal wil 1 be

086A .234 ;

accomplished correctly regardless of which address is checked first.

086A .235

086A .236

086A .237

086A .238 ;++

086A .239

Unit initialization routine parameters:

086A .240

086A .241

INPUTS:

086A .242

R3

CSR address (primary)

086A .243

R4

CSR address (secondary, same as primary if no secondary exists)

086A .244

R_5

UCB address

086A -. 245

086A .246

OUTPUTS:

086A .247

Must preserve all registers except RO through R4.

086A .248

086A .249

086A .250

086A .251

086A .252 IOC$UNITINIT::

086A .253

50 0088 C5 DO 086A .254

MOVL

UC8$L_DDT(R5), RO

Get DDT address.

IOSUBNPAG V03-033
;ROW0221 ;ROW0221
;ROW0221 ;ROW0221 ;ROW0221 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0203 ;ROW0221 ;ROW0221 ;ROW0221

- NONPAGED I/0 RELATED SUBROUTINES

3-JUN-1984 11:33:30 VAX-11 Macro V03-0l

Page 54

IOC$UNITINIT - Cal 1 driver unit in it. ro 12-MAR-1982 17: 12: 23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(32)

50 18 AO 50
000005D9'8F 06
50 3C AS 1A
54 53 2C AS
10 53 63 54 53 51 20 AB
04
54 2C Bl
60

DO 086F .255 Dl 0873 .256
0875 12 087A .257
DO 087C .258 18 0880 .259
0882 .260 D4 0882 .261 10$: DO 0884 .262 18 0888 .263 DO OBBA . 264 DO 088D . 265 DO 0890 . 266 18 0894 .267
0896 .268 DO 0896 .269
089A .270 17 089A . 271 50$:
089C .272 089C .273 05 089C .274 90$: 089D .275

MOVL CMPL

DDT$L UNITINIT(RO), RO RO, #IOC$RETURN

; Get DDT unit init rout addr. : Null unit init routine?

BNEQ MOVL BGEQ

10$

; Branch if real unit in it rout.

CRB$L_INTD+VEC$L_UNITINIT(R8), RO ; Get CRB unit init rout addr.

90$

: Branch if no unit i nit rout.

CLRL MOVL BGEQ MOVL MOVL MOVL BGEQ ASSUME MOVL

R4 CRB$L_INTD+VEC$L_IDB(R8), R3 50$ IDB$L CSR ( R3), R3 R3, R4 CRB$L_LI NK ( R8) , Rl
50$ IDB$L CSR EQ 0 @CRB$L_INTD+VEC$L_IDB(R1), R4

; Assume no IDB exists. ; Get IDB address. ; Branch if none. ; Get primary CSR . ; Assume no sec. CRB exists . ; Get secondary CRB addr . : Branch if none.
; Get secondary CSR addr.

JMP

(RO)

; Ca 11 unit i nit routine, and ; return to caller.

RSB

; No unit in it routine to cal 1:

: return to caller.

IOSUBNPAG V03-033
;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG.0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414
ACG0414 ACG0414 ACG0414

- NONPAGED I/O RELATED SUBROUTINES Parse Device Name String

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 55

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(33)

0070 BF 58 28
54 58 56 59 01
69 58 24 03
56 51 52
50 65 11 50 06
50 20 5A SF 50
77 41 BF 50
37 6F

089D 0890 0890 0890 0890 0890 0890 089D 089D 089D 0890 089D 0890 0890
0890 089D 089D 089D 089D 0890 0890 0890 0890 0890 0890 0890 OB9D 0890 0890 0890 OB9D 0890 0890 0890 0890 BB 0890 05 08A1 13 08A3 7D 08A5 C3 08A8 08AC 08AC 3A 08AC 13 0880 DO 08B2 7C 08B5 9A 08B7 E 1 08BA BA OBBE 91 08C1 lA 08C5 91 08C7 1E 08CB 11 OSCO 08CF 08CF 08CF

. 277

.SBTTL Parse Device Name String

.278

.279 ;+

.280

.281 IOC$PARSDEVNAM - parse device name string

.282

.283 This routine parses a device name string, checking syntax and

.284 extracting node name, allocation class number, and unit number.

.285 If device type format is specified, it is converted into the internal

.286 compressed format.

.287

.288 INPUTS:

.289 .290 .291 .292

RB = size of name string R9 = address of name string RlO = flags

.293

.294 OUTPUTS:

.295

.296

RO= SS$ NORMAL - valid name string

.297 .298 .299

SS$-IVDEVNAM - invalid device name string
R2 = unit number R3 = length of SCS node name at head of name string

.300

or al location class number

.301 .302

or device type code
RB = size of name string

.303 .304

= R9 = address of name string
R10 flags

.305

R4 - R7, R11 preserved

.306

.307

.308

.309

.ENABLE LSB

. 310

. 311 I OC$PARSOEVNAM: :

. 312

PUSHR #AM<R4,R5,R6>

save working registers

. 313

TSTL

RB

check name string length

.314

BEQL

30$

branch if null - error

.315

MOVQ

R8,R4

copy name string descriptor

.316

SUBL3 #1,R9,R6

default is no node no allocation

. 317

class, set pointer before beginning

.318

of the string

.319

LOCC

#AA'$' ,R8, (R9)

scan name for a "$"

.320

BEQL

10$

failed to find one - no nodename

.321

MOVL

R1, R6

found it, save pointer

.322 10$:

CLRQ

R2

init unit number and node name

.323 20$:

MOVZBL (R5) ,RO

get next character

.324

BBC

#6,R0,40$

br if code O-AX3F - numeric or $

.325

BICB

#/\X20,RO

col lapse lower case to upper case

.326

CMPB

RO,#AA'Z'

possible alphabetic?

.327

BGTRU 150$

br if not

.32B

CMPB

RO,#AA'A'

possible alphabetic?

.329

BGEQU 70$

branch if OK - store it

.330 30$:

BRB

150$

no - error

.331

.332 Non alphabetic - may be numeric or "$"

.333

IOSUBNPAG V03-033
;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 _; ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414
;ACG0~14
;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414

- NONPAGED I/O RELATED SUBROUTINES Parse Device Name String

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 56

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(33)

56 55 OE 34
39 50 63
30 50 24 5C
53 55 59
1 c
55 54 6A 53 52 49 5A 04 50 24 43 58 54 54 B5 3A
85 50 AD 54
58 54 2F 56
55 56 09
25 5A 21 5A 06
OD
52 54 OB 5A 01 2E 54 54 OE 37 5A 01 50 01 0070 BF

D1 08CF .334 40$:

CMPL

R5,R6

hit the "$" yet?

13 0802 .335

BEQL

50$

yes, deal with it

1A 08D4 .336

BGTRU 80$

past it, digits are unit number

91 0806 .337

CMPB

R0,#AA'9

legal?

lA 08D9 .338

BGTRU 150$

no, error

91 08DB .339

CMPB

RQ,#AA'O'

legal?

1 E OBOE .340

BGEQU 70$

yes, accept. it as alpha

11 08EO .341

BRB

150$

no, error

08E2 .342

08E2 .343 $in device name - either node name or allocation class.

08E2 .344

C3 08E2 .345 50$:

SUBL3 R9,R5,R3

compute length of node name

12 08E6 .346

BNEQ

70$

branch if non-null - process the$

08E8 .347

08E8 .348 Process allocation class number.

08E8 .349 ;

06 08E8 .350 60$:

INCL

R5

move over"$" to allocation

07 OBEA .351

DECL

R4

class digits.

10 08EC .352

BSBB

GETNUMBER

convert allocation class.

DO 08EE . 353

MOVL

R2,R3

store requested allocation class .

15 08F1 .354

BLEQ

150$

leq zero is not legal.

88 08F3 .355

BISS

#IOC$M CLASS, R 10

set allocation class flag

91 08F6 .356

CMPB

#/\A'$'-:-Ro

was terminator a "$"?

12 08F9 .357

BNEQ

150$

if not, i nva 1 id device name.

70 08FB .358

MOVQ

R4,R8

reset device name - unit size.

05 08FE .359

TSTL

R4

check remaining string count

14 0900 .360

BGTR

20$

if characters remain, process them.

11 0902 .361

BRB

150$

else, invalid device name.

0904 .362

90 0904 .363 70$:

MOVB

RO,(R5)+

store potentially upcased character

F5 0907 .364

SOBGTR R4,20$

any more characters to scan?

090A .365

090A .366 End of alpha scan. Make sure we actually got a non-null device name.

090A .367 ;

C2 090A .368 80$:

SUBL

R4,R8

subtract unit number from string

13 0900 .369

BEQL

150$

if eql no device name specified

06 090F .370

INCL

R6

point past $ in node name

01 0911 .371

CMPL

R6,R5

see if we've processed any more chars

1F 0914 .372

BLSSU 90$

branch if yes

ES 0916 .373

BLBS

Rl0, 150$

branch if physical - not valid

El 0919 .374

BBC

#IOC$V ANV,Rl0,150$

or if not generic search for any

11 0910 .375

BRB

100$ -

node name only - verify end of string

091F .376

091F .377 Process unit number and make sure there's no trailing junk.

091F .378

04 091F .379 90$:

CLRL

R2

init unit number to 0

D5 0921 .380

TSTL

R4

see if there's anything left

15 0923 .381

BLEQ

110$

branch if not

88 0925 .382

BISB

#IOC$M PHY, R10

set physical flag

10 0928 .383

BSBB

GETNUMBER

convert unit number

06 092A .384

INCL

R4

return terminator to string count

05 092C .385 100$: TSTL

R4

reached end of string?

14 092E .386

BGTR

150$

branch if not - error

EO 0930 .387 110$: BBS

#IOC$V TYPE,R10, 190$

branch if name is a device type

DO 0934 .388 120$: MOVL

#SS$ NORMAL,RO

successful parse

BA 0937 .389 130$: POPR

#AM<R4,R5,R6>

restore registers

05 0936 .390

RSB

and return

IOSUBNPAG V03-033
;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG.0414
;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414
;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG04l-4

- NONPAGED I/O RELATED SUBROUTINES Parse Device Name String

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 57

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC)IOSUBNPAG(33)

BE 50 0144 BF
F2
50 85 50 30
10 09 50
OB 52 OA 52 50
EA 54 04
50 FF AS 52
OOOOBOOO SF 02
53 CF 50 55 59 50 58 02 50 C3 55 59 02 58 BB 85 40 8F 50

093C .391

093C .392 Invalid device name

D'S

093C 093C

.393 .394

1' 40$:

TSTL

(SP)+

pop GETNUMBER return address from stack

3C 093E .395 1SO$: MOVZWL #SS$ IVDEVNAM,RO

set invalid device name

11 0943 .396

BRB

130$-

0945 .397

0945 .398 ;+

0945 .399 Routine to convert ASCII to integer

0945 .400

0945 .401 Inputs:

0945 .402

0945 .403

R2

assumed zero

0945 .404

R4

size of string

0945 .405

RS

starting address of string

0945 .406

0945 .407 Outputs:

0945 .40B

0945 .409

RO

terminator character

0945 .410

R2

converted number

0945 .411

R4

size of string-with number and terminator character removed

0945 .412

RS

address of first character after number terminator character

0945 .413 '

0945 .414

9A 0945 .415 160$: MOVZBL (R5)+,RO

get next character.

82 0948 .416

SUBB

#/\A'O' ,RO

base it at decimal digits.

1F 0948 .417

BLSSU 170$

branch if not a decimal digit.

91 0940 .418

CMPB R0,#9

is it a digit?

1A 0950 .419

BGTRU 170$

branch if not a decimal digit.

C4 0952 .420
co 0955 .421

MULL ADDL

#10,R2 RO,R2

scale current unit number by 10 add new digit to accumulation.

0958 .422 GETNUMBER:

F4 0958 .423

SOBGEQ R4, 160$

count off a character

11 0958 .424

BRB

180$

branch if no more characters

0950 .425

9A 095D .426 170$: MOVZBL -1(R5),RO

restore terminator character.

D1 0961 .427 180$: CMPL

R2,#32768

check number value

0963

lE 096B .428

BGEQU 140$

branch if not valid

05 096A .429

RSB

return to caller.

0968 .430

0968 .431

0968 .432 Parse device type name. We do this last because all the regular device

0968 .433 name validation is necessary anyway. Now we just have to do the

0968 .434 additional checks and pack the characters.

0968 .43S ;

05 0968 .436 190$: TSTL

R3

check if we saw node or alloc class

12 0960 .437 C3 096F .438

BNEQ

1SO$

SUBL3 R9,R5,RO

branch if so - not valid compute total length of string

C2 0973 .439 01 0976 .440

SUBL CMPL

RB,RO R0,#2

compute length of unit number string must be two digits

12 0979 .441

BNEQ

150$

, branch if not - not valid

DO 0978 .442

MOVL

R9,R5

copy name address again

D1 097E .443

CMPL

R8,#2

check minimum name length

lF 0981 .444

BLSSU 1S0$

too short - out

83 0983 .445

SUBB3 #AA'A'-1,(RS)+,RO

get char and convert to compressed

0987

IOSUBNPAG V03-033
;ACG0414
;ACG0414
;ACG0414
;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414
;ACG0414
ACG0414 ACG0414 ACG0414

- NONPAGED I/O RELATED SUBROUTINES Parse Device Name String

3-JUN-19S4 11:33:30 VAX-11 Macro V03-01

Page 58

12-MAR-19S2 17: 12: 23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(33)

05 11 50 53
S5 40 SF 50
05 DC 50 53
03 58 A2 OA
85 40 SF 50
05 07 50
53 53 52 SA 01
FF83

FO 09SS .446 098C
S3 09SD .447 0991
FO 0992 .448 0996
01 0997 .449 lA 099A .450 lF 099C .451 83 099E .452
09A2 FO 09A3 .453
09A7
co 09A8 .454 200$:
SA 09AB .455 31 09AE .456

INSV
SUBB3
INSV
CMPL BGTRU BLSSU SUBB3
INSV
ADDL BICB BRW

R0,#17,#5,R3
#AA'A'-1,(R5)+,RO
R0,#12,#5,R3
R8,#3 150$ 200$ #AA'A'-1,(R5)+,RO
R0,#7,#5,R3
R2,R3 #IOC$M_PHY, R10 120$

; store compressed code
; get char and convert to compressed
; store compressed code
; check how many chars left ; string was longer than 5 - error ; short - don't take 3rd alpha ; get char and convert to compressed
; store compressed code
add in unit number clear physical flag done

IOSUBNPAG V03-033
;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414

- NONPAGED I/O RELATED SUBROUTINES Search I/O Database for Device

3-JUN-1984 11 :33:30 VAX-11 Macro V03-0l

Page 59

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SVS.SRC]IOSUBNPAG(34)

00000000 00000004
00000008
oooooooc
00000010

09B1 09B1 09B1 0981 0981 09B1 0981 09Bl 0981 09B1 0981 0981 09B1 0981 0981 09B1 09B1 0981 09B1 09B1 09B1 09Bl 0981 0981 0981 09B1 0981 0981 09B1 0981 0981 0981 0981 0981 0981 0981 0981 09B1 0981 09Bl 09Bl 0981 09B1 09B1 0981 0981 0981 09B1 0981 09B1 09Bl 09B1 09B1 0981 09B1 0981 0981

.458

.SBTTL Search I/0 Database for Device

.459

.460 ;+

.461

.462 IOC$SEARCHINT - internal I/O database search

.463

.464 This routine searches the I/O database for the specified devic~. using

.465 the specified search rules. Depending on the search, a lock may or may

.466 not be taken out on the device when it is found.

.467

.468 Note! While this routine is non-paged and therefore may be cal led at

.469 elevated IPL, the device locking code it calls is not. Therefore, only

.470 searches with IOC$V ANY may be cal led from elevated IPL.

.471

.472 INPUTS:

.473

.474

R2 unit number

.475

R3 length of SCS node name at head of name string

.476

or al location class number

.477

or device type code

.478 .479

RB = size of name string
R9 = address of name string

.480 .481

R10 = flags
= R11 address to store lock value block

.482

I/O database mutex held, IPL 2

.483

.484 OUTPUTS:

.485

.486

RO SS$ NORMAL - device found

.487

SS$-NOSUCHDEV - device not found

.488

SS$-NODEVAVL - device exists but not available according to rules

.489

SS$-DEVALLOC - device al located to other user

.490

SS$-NOPRIV - failed device protection

.491

SS$-TEMPLATEDEV - can't al locate template device

.492

SS$-DEVMOUNT - device already mounted

.493 .494 .495 .496

R5

=

SS$-DEVOFFLINE UCB-

-

device

marked

offline

R6 = DOB

R7 = system block

.497

RlO - R4, RB - R11 preserved

.498

.499

Note: If failure, R5 - R7 point to the last structures looked at.

.500

.501

.502

.503

.504 Stack use:

.505

.506 SAVR2

0

.507 SAVR3

4

.508 SAVR4

B

.509 SAVR8

12

.510 SAVR9

16

. 511

. 512

.513

.ENABLE LSB

.514

IOSUBNPAG V03-033
;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414
;ACG0414 ;ACG0414
;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414
ACG0414 ACG0414 ACG0414 ACG0414 ACG0414 ACG0414
;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414
;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414

- NONPAGED I/O RELATED SUBROUTINES Search I/O Database for Device

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 60

12-MAR-19B2 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(34)

031C BF
OOOOOOOO'EF 57
50 67 50
00000000'8F 7B
57 50 56 54 A7
55 56
5A 06 27
5B OC AE 53 04 AE
10 44 A7 53
05 45 A7 53
69 CE
50 01 04 AE 01
53 59 53 5B 53
52
50 66 5A
56 50 55 04 A6
5A 20 5E 5A 01 07 5A 02 3C A6 04 AE
E2 69 58
15 A6 DB
50 14 A6 50 5B 43 50 50 58 CB 39 5A

09B1 . 515 IOC$SEARCHINT::

BB 09B1 . 516

PUSHR #AM<R2,R3,R4,R8,R9>

save registers

09B5 .517

09B5 . 518 Search the system blocks for a suitable node. If we are doing a search

09B5 .519 by allocation class, generic device type, or no node name is given,

09B5 . 520 al 1 system blocks qualify .

09B5 .521

DE 09B5 .522

MOVAL SCS$GQ_CONFIG,R7

get head of SCS SB list

09BB

DO 09BC .523 10$: 01 09BF .524

MOVL CMPL

SB$L FLINK(R7),RO RO,#SCS$GQ_CONFIG

get next system block are we back at list head?

09C1

13 09C6 .525

BEQL

50$

branch if yes - all done

09C8 .526

DO 09C8 .527

MOVL

RO,R7

DE 09CB .528

MOVAL SB$L DDB-DDB$L LINK(R7),R6 ; pick up DOB listhead

DO 09CF .529

MOVL

R6,R5

; make sure UCB is non-zero

0902 .530

; if allocation class or generic dev,

93 0902 .531

BITB

#IOC$M CLASS!IOC$M TYPE,R10

12 0905 .532

BNEQ

30$ -

-

; check every system block

70 0907 .533

MOVQ

SAVRB(SP),R8

; get orig dev name descriptor

DO 09DB .534

MOVL

SAVR3(SP),R3

; get node name length

13 09DF .535

BEQL

30$

; branch if none - go ahead

91 09E 1 .536

CMPB

R3,SB$T NODENAME(R7)

; check node name length

12 09E5 .537

BNEQ

10$

-

; branch if not

29 09E7 .53B

CMPC3 R3,SB$T NODENAME+1(R7),(R9) ; node names match?

09EB

12 09EC .539

BNEQ

10$

; branch if not

09EE .540

09EE .541 ; Found a suitable system block. Search its DDB list.

09EE .542 ;

3C 09EE .543 20$:

MOVZWL #SS$ NORMAL,RO

Cl 09F 1 .544

ADDL3 #1,SAVR3(SP),R3

; include the"$"

09F5

CO 09F6 .545

ADDL

R3,R9

skip over the nodename

C2 09F9 .546

SUBL

R3,R8

adjust the length

15 09FC .547

BLEQ

60$

if no device name, just return SB

09FE .548

DO 09FE .549 30$: 13 OAOl .550

MOVL BEQL

DDB$L LINK(R6),RO 80$ -

get address of next DOB if eql end of list

DO OA03 .551

MOVL

RO,R6

DE 0A06 .552

MOVAL <DDB$L UCB-UCB$L LINK>(R6),R5 ; initialize primary UCB address

BA OAOA .553

BICB

#IOC$M-2P,R10 -

; new DOB - clear secondary flag

EO OAOD .554

BBS

#IOC$V-TYPE,Rl0,100$

; branch if generic type search

El OA 11 .555

BBC

#IOC$V-CLASS,Rl0,40$

; branch if no class to check

Dl 0A15 .556

CMPL

SAVR3(SP),DDB$L ALLOCLS(R6) ; else, is al lo. class right?

12 OAlA .557

BNEQ

30$

-

; branch if not, try next DOB

29 0A1C .558 40$:

CMPC3 RB,(R9),DDB$T NAME+1(R6) ; check device name

OA1F

12 0A21 .559

BNEQ

30$

if no match, try next DOB

9A OA23 .560

MOVZBL DDB$T NAME(R6),RO

get length of name in DOB

01 OA27 .561

CMPL

R8,RO

check name lengths

13 OA2A .562

BEQL

100$

if they match - OK

07 OA2C .563

DECL

RO

try subtracting out controller letter

Dl OA2E .564

CMPL

RB.RO

and see if this matches

12 0A31 .565

BNEQ

30$

if not, keep trying

E9 0A33 .566

BLBC

R10, 100$

branch if not physical search - OK

IOSUBNPAG V03-033
;ACG0414
;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ; ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414
;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG04l4 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414

- NONPAGED 1/0 RELATED SUBROUTINES Search I/0 Database for Device

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 61

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(34)

15 A640 41 BF 31 BE
50 0908 SF 4D SA 04
50 0980 SF 46
S6 66 5S 04 A6
3D
Al SA 01
SA 06 QA
SA 09 D9
04 AE D4
FF4D
52 6E OOOOOOOO'EF
54
07 SA 05 55 OOA4 C5
04 55 30 AS
11 28 07 50 E6 SA 04 E3 5A 031C BF
BA SA 05 5S 9C A6
D4

91 OA36 OA3A
13 OA3C 1-1 OA3E
OA40 OA40 OA40 3C OA40 El OA45 3C OA49 11 OA4E OA50
DASO 0A50
,,DO OA50
DO OA53 OA57 OA59 OA59 OA59
EO OA59 OA5D OASD OA5D
93 OA5D 12 OA60 93 OA62 12 OA65 05 OA67 12 OA6A 31 OA6C
OA6F
0A6F OA6F 7D OA6F DO OA72 0A78 OA79 El OA79 DO OA7D 11 OA82 DO OA84 13 OA88 10 OA8A EB OA8C El OA8F E9 OA93 BA OA96 05 OA9A OA9B E2 OA9B DE OA9F
0AA3 11 0AA3
OAAS OAAS

.567

CMPB

DDB$T_NAME+1(R6)[RO] ,#AA'A' ; is this controller A?

.568

BEQL

100$

; if so, search it

.569

BRB

30$

; if not, keep looking

.570

. .571 End of search - no suitable device has been found
.572

.573 50$:

MOVZWL #SS$ NOSUCHDEV,RO

no device found

.S74

BBC

#IOC$V EXISTS,Rl0,140$

branch if not seen

.575 .S76

MOVZWL #SS$ NODEVAVL,RO

BRB

140$-

otherwise status is not available

.577

.S78 To here if we're just returning a system block, with no device specified.

.579 ;

.S80 60$:

MOVL

(R6),R6

get first DOB

.S81

MOVL

DDB$L UCB(R6),R5

and first UCB

.S82

BRB

140$ -

and return

.583

.584 To here when all UCB's on a DOB have been searched.

.S8S .586

7' 0$:

BBS

#IOC$V_TVPE,R10,30$

: if generic type search, try next DOB

.587 ;

. .588 ; To here when all DDB's on a system block have been searched.
.589

.590 80$:

BITB

#IOC$M CLASS!IOC$M TYPE,RlO ; if generic type or alloc class

.591

BNEQ

90$ -

-

; keep searching system blocks

.592

BITB

#IOC$M PHY!IOC$M LOCAL,RlO ; if physical or local only

.593

BNEQ

50$ -

-

; we're done

.594

TSTL

SAVR3(SP)

; if there was an explicit node

.595

BNEQ

50$

; we're done

. .596 90$:
.597

BRW

10$

: else go try next system block

.598 ; Found a suitable DOB. Search both its UCB lists for the right UCB.

.S99 ;

.600 10-0$: MOVQ

SAVR2(SP),R2

get unit number and device type

.601

MOVL

SCH$GL CURPCB,R4

get PCB address

.602 NEXTUCB:

.603 110$: .604

BBC MOVL

#IOC$V 2P,R10,120$
UCB$L 2P LINK(R5),R5

.605

BRB

130$ - -

.606 120$: MOVL

UCB$l LINK(R5),R5

.607 130$: BEQL

150$ -

.608

BSBB

IOC$TESTUNIT

.609

BLBS

R0, 140$

.610

BBC

#IOC$V EXISTS,Rl0,110$

.61,

BLBC

Rl0, 110$

.612 140$: POPR

#AM<R2,R3,R4,R8,R9>

.613

RSB

.614

.615 150$: BBSS

#IOC$V 2P,R10,70$

.616

MOVAL <DDB$L-2P UCB -

.617

-UCB$L-2P-LINK>{R6),R5

.618

BRB

110$ - -

.619

.620

.DISABLE LSB

re-entry for next UCB branch if on primary path link to next secondary ~nit.
link to next primary unit. branch if no more units. is this unit ok? branch if successful keep going if we haven't seen it yet or if not physical search restore registers and return
branch if secondary path already searched initialize secondary UCB address.
go search secondary path

IOSUBNPAG V03-033
;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414

031C BF 05 5A 08 55 OOAB C5
C5

- NONPAGED I/O RELATED SUBROUTINES Continue I/O Database Search

3-JUN-1984 11:33:30 VAX-11 Macro V03-0l

Page 62

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC)IOSUBNPAG(35)

OAA5 .622

.SBTTL Continue I/O Database Search

OAA5 .623

OAA5 .624 ;+

OAA5 .625

OAA5 .626 IOC$SEARCHCONT - internal I/O database search

OAA5 .627

OAA5 .628 This routine continues a search started with a cal 1 to IOC$SEARCHINT.

OAA5 .629 It uses IOC$SEARCHINT's outputs as the starting point at which to

OAA5 .630 resume.

OAA5 .631

OAA5 .632 INPUTS:

OAA5 OAA5 OAA5

.633 .634 .635

R2 = unit number R3 = length of SCS node name at head of name string

0AA5 .636

or al location class number

OAA5 .637

or device type code

OAA5 .638

R5 = last UCB

OAA5 OAA5 OAA5 OAA5 OAA5

.639 .640 .641 .642 .643

= R6 = last DOB
R7 last system block
= RB = size of name string
R9 address of name string
RlO = flags

OAA5 .644

Rll =address to store lock value block

OAA5 .645

IIO database mutex held, IPL 2

OAA5 .646

OAA5 .647 OUTPUTS:

OAA5 .648 0AA5 .649

RO = SS$ NORMAL - device found

OAA5 .650

SS$-NOSUCHDEV - device not found

OAA5 .651

SS$-NODEVAVL - device exists but not available according to rules

OAA5 .652

SS$-DEVALLOC - device allocated to other user

OAA5 .653

SS$-NOPRIV - failed device protection

0AA5 .654

SS$-TEMPLATEDEV - can't allocate template device

OAA5 .655

SS$-DEVMOUNT - device already mounted

OAA5 .656

SS$-DEVOFFLINE - device marked offline

OAA5 .657 OAA5 .658

= R5 = UCB-
R6 DOB

OAA5 .659

R7 = system block

OAA5 .660,

RlO - R4, RB - Rll preserved

OAA5 .661

OAA5 .662

Note: If failure, R5 - R7 point to the last structures looked at.

OAA5 .663

OAA5 .664

0AA5 .665

OAA5 .666 IOC$SEARCHCONT: :

BB OAA5 .667

PUSHR #AM<R2,R3,R4,R8,R9>

save registers

E5 OAA9 .668 DO OAAD .669

BBCC MOVL

#IOC$V ALT,Rl0,10$ UCB$L DP ALTUCB(R5),R5

check if alternate UCB in use link back to·other to continue

11 OAB2 .670 10$:

BRB

NEXTUCB -

continue search

IOSUBNPAG V03-033
;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414

- NONPAGED 1/0 RELATED SUBROUTINES Check UCB Against Search Rules

3-JUN-1984 11 :33:30 VAX-11 Macro V03-01

Page 63

12-MAR-1982 17:12:23 DISK$VMSMASTER: [SYS.SRC]IOSUBNPAG(36)

50 090B BF 06 5A
54 A5 52 5B
09 5A 01 00 16
53 OOBC C5 4E
5A 10 DA 3C A5 03
55 OOA8 C5 5A 0100 BF
03 5A 06 OOB5
50 006C BF 7F 38 A5 13
50 0840 BF 75 64 A5 09
5C A5 1 E
OB 5A 07 OA 5A OA 11 38 A5 17
08

OAB4 .672

.SBTTL Check UCB Against Search Rules

OAB4 .673

OAB4 .674 ;+

OAB4 .675

OAB4 .676 IOC$TESTUNIT - Check UCB Against Search Rules

OAB4 .677

OAB4 .67B INPUTS:

OAB4 .679

OAB4 .6BO OAB4 .6B1

= R2 = unit number
R3 device type code

OAB4 .6B2

R4 = PCB address

OAB4 .6B3 OAB4 .6B4

= R5 = UCB address
R10 flags

OAB4 .6B5

R11= address of lock value block

OAB4 .6B6

OAB4 .6B7 OUTPUTS:

OAB4 .6BB

OAB4 .6B9

RO= SS$ NORMAL - eligible for use according to flags

OAB4 .690

SS$-NOSUCHDEV - wrong unit number

OAB4 .691

SS$-DEVALLOC - device al located to other user

OAB4 .692

SS$-NOPRIV - failed device protection

OAB4 .693

SS$-IEMPLATEDEV - can't al locate template device

OAB4 .694

SS$-DEVMOUNT - device already mounted

OAB4 .695

SS$-DEVOFFLINE - device marked offline

OAB4 .696

OAB4 .697 ; -

OAB4 .698

OAB4 .699 IOC$TESTUNIT::

3C OAB4 .700

MOVZWL #SS$ NOSUCHDEV,RO

assume wrong device

E9 OAB9 .701

BLBC

R10,l0$

branch if not physical search

Bl OABC .702

CMPW

R2,UCB$W UNIT(R5)

is the unit number exactly right?

12 OACO .703

BNEQ

80$

branch to error if not right.

OAC2 .704

E1 OAC2 .705 10$:

BBC

#IOC$V TVPE,R10,20$

branch if not searching for dev type

ED OAC6 .706

CMPZV #MSCP$V MTYP N,-

OACB .707

#MSCP$V-MTVP~Dl ,-

OAC9 .70B

UCB$L MEDIA ID(R5),R3 ; is this the requested type?

12 OACD .709

BNEQ

80$

-

; branch if not

BS OACF .710 20$:

BISB

#IOC$M EXISIS,RlO

; note eligible device seen

E1 OAD2 . 711

BBC

#DEV$V-CDP,UCB$L DEVCHAR2(R5),30$ ; is this served path to a local d

DO OAD7 . 712

MOVL

UCB$L DP ALTUCB(R5),R5

yes, get local path UCB address.

AB OADC .713

BISW

#IOC$M ALT,R10

note alternate UCB in use

E1 OAE1 . 714 30$:

BBC

#IOC$V-ANY,R10,40$

if SEARCHALL, finish with success.

31 OAE5 .715

BRW

120$

0AE8 .716

. OAEB . 717
OAE8 .718

Check the device reference count and al location status.

3C OAE8 .719 40$:

MOVZWL #SS$ DEVMOUNT,RO

; check if device is already mounted

EO OAED . 720

BBS

#DEviv MNT,UCB$L DEVCHAR(R5), 130$

3C OAF2 . 721

MOVZWL #SS$ DEVALLOC,RO

EO OAF7 . 722

BBS

#UCBiV MOUNTING,UCB$W STS(R5), 130$ ; branch if mount in progress

B5 OAFC .723

TSTW

UCB$W REFC(R5)

- ; is reference count zero?

13 OAFF . 724

BEQL

90$ -

; branch it reference count is zero.

E1 OBOl .725

BBC

#IOC$V MOUNT,Rl0,50$

; if mounting ...

EO OB05 .726

BBS

#IOC$V-ALLOC,R10,60$

; if shared mount

El OB09 .727

BBC

#OEV$V-ALL,UCB$L DEVCHAR(R5),90$ ; OK if not al located

11 OBOE .728

BRB

70$

-

; otherwise check al location

IOSUBNPAG V03-033
;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ; ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0414 ;ACG0-414 ;ACG0414 ;ACG0414 ;ACG0414
;AC~0414
;ACG0414 ;ACG0414 ;ACG0414

- NONPAGED I/O RELATED SUBROUTINES Check UCB Against Search Rules

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 64

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(36)

OB10 .729

5E 5A E9 OB10 .730 50$:

BLBC

Rl0,130$

; allocate: error ff not phy

59 38 A5 17 El OB13 . 731 60$:

BBC

#OEV$V ALL,UCB$L DEVCHAR(R5),130$ ; err if dev. not allocated.

60 A4 2C A5 01 OB18 .732 70$:

CMPL

UCB$L PID(R5),PCB$L PID(R4) ; does this process own the device?

52 12 OB1D .733 80$:

BNEQ

130$ -

-

; branch to error if not our device.

OB1F .734

OB1F .735 ; Check all the other miscellaneous junk that can make a device not

OB1F .736 ; available.

OB1F .737

50 24 3C OBlF .738 90$:

MOVZWL #SS$ NOPRIV,RO

; check if device is spooled

06 38 A5 06 El OB22 .739

BBC

#DEV$V SPL,UCB$L DEVCHAR(R5),100$ ; branch if not

OB27 .740

IFNPRIV ALLSPOOL,130$,R4-

; else, process must have ALLSPOOL priv.

50 0084 BF 3C 0820 .741 100$: MOVZWL #SS$ DEVOFFLINE,RO

; check if device is available

3A 38 A5 12 El OB32 .742

BBC

#OEV$V AVL,UCB$L DEVCHAR(R5),130$

35 64 A5 04 El OB37 .743

BBC

#UC8$V-ONLINE,UCB$W STS(R5),130$

50 21DC SF 3C OB3C .744

MOVZWL #SS$ TEMPLATEDEV,RO-

; check if device is a template

2B 64 A5 OD EO OB41 .745

BBS

#UCB$V TEMPLATE,UCB$W STS(R5),130$

F4B7' 30 OB46 .746

BSBW

EXE$CHKRDACCES

- ; check device protection

25 50 E9 OB49 .747

BLBC

R0,130$

; out if not accessible

OB4C .748

OB4C .749 We've passed al I the local tests. Now try to take out the appropriate

OB4C .750 lock on the device.

084C .751

lC 3C A5 00 El OB4C .752

BBC

#DEV$V CLU,UCB$L DEVCHAR2(R5),120$ ; br. if not cluster visible

17 38 A5 17 EO 0851 .753

BBS

#OEV$V-ALL,UCB$L-DEVCHAR(R5),120$ ; br. if allocated

51 5B DO 0856 .754

MOVL

R11, R1

value block address

50 05 DO OB59 .755

MOVL

#LCK$K EXMODE,RO

assume exclusive lock

07 5A OA EO OB5C .756

BBS

#IOC$V-ALLOC,R10, 110$

branch if allocation requested

03 5A 07 El OB60 .757

BBC

#IOC$V-MOUNT,R10, 110$

branch if not mount mode

50 04 DO OB64 .758

MOVL

#LCK$K-PWMODE,RO

which uses PW

F496' 30 OB67 .759 110$: BSBW

IOC$LOCK DEV

and try to take device lock

04 50 E9 OB6A .760

BLBC

RO, 130$

50 01 DO OB6D .761 120$: MOVL

#SS$ NORMAL,RO

indicate success

05 OB70 .762

RSB

OB71 .763

OB71 .764 To here on any error.

OB71 .765 ;

05 5A 08 E5 OB71 .766 130$: BBCC

#!OC$V ALT,Rl0,140$

check if alternate UCB in use

55 OOA8 C5 DO OB75 .767

MOVL

UCB$L DP ALTUCB(R5),R5

link back to other to continue

05 OB7A .768 140$: RSB

return

OB78 .769

OB78 .770

OB7B . 771

OB7B 1735

.END

IOSUBNPAG Symbol table
$$BASE $$DISPL $$GEN SW $$HIGH $$LIMIT $$LOW $$MNSW $$MXSW "ADD DOLLAR ADD-NODE
ADP$C NUMDATAP ADP$L-CSR ADP$L-DPQBL ADP$L-DPQFL ADP$L-MRACTMDRS ADP$L-MRQBL ADP$L-MRQFL ADP$W-ADPTVPE ADP$W-DPBITMAP ADP$W-MRFREGARV ADP$W-MRNREGARV ALLOC-DESCRIP ALLO'C-NAME AT$ UBA BINNUM BOO$GL SPTFREH BOO$GL-SPTFREL
BUG$ INCONSTATE BUG$-IVBVTEALGN BUG$-UNSUPRTCPU CAN$C AMBXDGN CAN$C-DASSGN CDRP$L BCNT CDRP$L-FPC CDRP$L-FQFL CDRP$L-FR3 CDRP$L-IOQFL CDRP$L-RWCPTR CDRP$L-UBARSRCE CDRP$W-BOFF CLU$GL-CLUB
COM$DRVDEALMEM COMMON ALOUBAMAP CRB$B MASK CRB$L-INTD CRB$L-LINK CRB$L-WQBL CRB$L-WQFL CRB$M-BSV CRB$V-esv
ocs·oYsK
DDB$L 2P'UCB DDB$L-ALLOCLS DDB$L-DP UCB DDB$L-LINK DDB$L-S8
DDB$L=UCB

- NONPAGED I/O RELATED SUBROUTINES

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 65

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(36)

= = = =

00000001 00000008 00000001 00000007

= 00000006

= 00000001

= 00000001

= 00000001

000006BF R

02

00000685 R

= 00000010

= 00000000

= 00000018

= 00000014

= 0000005C

= 00000034

= = = =

00000030 OOOOOOOE 00000060 0000015E

= 00000064

02

00000408 R

02

= 00000682 R 00000001

02

00000000

******** ********

x x

02 02

******** x 02

******** x 02

= =

********
00000002 00000001

x

02

= = = =

FFFFFFD2
oooooooc
00000000
00000010

= FFFFFFAO
= 00000028 = 0000003C = FFFFFFDO

******** x 02 ******** x 02

00000366 R

= OOOOOOOE

= =

00000024 00000020

== 00000004 00000000

= 00000001

= 00000000

= 00000001

= 00000040

= 0000003C

= 00000040

= 00000000

= 00000034

02

= 00000004

DDB$T NAME DDT$L-CANCEL DDT$L-REGDUMP DDT$L-START DDT$L-UNITINIT DEALLOC DESCRIP DEV$M MBX DEV$M-TRM DEV$V-2P DEV$V-ALL DEV$V-AVL
DEV$V-COP DEV$V-CLU DEV$V-FOD DEV$V-MNT DEV$V-NNM DEV$V-OPR DEV$V-SPL DEV$V-:-TRM DIR .. ~ DISKCHK DISPLAY_NAME DO PMS DVN$C TWP DVN$C-UCB EMB$B-DV ERTCNT EMB$Q-DV-IOSB EMB$W-DV-STS
END BROADCAST ERL$RELEASEMB EXDVNM EXE$ALONONPAGED EXE$ALTQUEPKT EXE$CHKRDACCES EXE$DEANONPAGED
EXE$GB CPUTVPE EXE$GL -ABSTIM EXE$GQ...,.SYSTIME
EXE$MOUNTVER EXE$TEST CSR FULL NAME
GETNUMBER IDB$L ADP IDB$L-CSR IDB$L-OWNER
IOC$ALLOSPT IOC$ALODATAP IOC$ALOMAPUDA IOC$ALOUBAMAP
IOC$ALOUBAMAPN
IOC$ALOUBAMAPSP IOC$ALOUBMAPRM IOC$ALOUBMAPRMN IOC$ALTREQCOM IOC$BROADCAST I OC$CANCELI 0
IOC$CREDIT _UCB

= =

00000014
oooooooc

= = =

00000010 00000000 00000018

000004BF R

02

= = =

00100000 00000004

= =

00000004 00000017 00000012

= 00000003

= =

00000000 OOOOOOOE

= = = = = =

00000013 00000009 00000007 00000006 00000002 00000001

00000191 R

02

0000069F R

02

000001A9 R

02

= 00000030

= =

00000010 00000010

= 00000012

= 0000001A

00000788 R

02

******** x 02

000006D8 R

02

******** x 02

******** x 02

******** x 02

******** x 02

******** x 02

******** x 02

******** x 02

******** x 02

******** x 02

0000067D R

02

=

00000958 00000014

R

02

= 00000000

= 00000004

00000620 RG

02

00000261 R

02

00000314 R

02

0000033E RG

02

00000337 RG

02

000003A8 RG

02

0000044E RG

02

00000447 RG

02

00000111 RG

02

00000720 RG

02

00000000 RG

02

******** x 02

IOSUBNPAG Symbol table
IOC$CTR LIN IT IOC$CVT DEVNAM IOC$DALOCUBAMAP IOC$DELETE UCB IOC$DIAGBUFILL IOC$GL PSBL IOC$INITIATE IOC$LAST CHAN IOC$LAST-CHAN AMBX IOC$LOCK-DEV
IOC$MNTVER IOC$M 2P IOC$M-ALT IOC$M-CLASS IOC$M-EXISTS IOC$M-LOCAL IOC$M-PHY IOC$M-TYPE
IOC$PARSDEVNAM IOC$RELCHAN IOC$RELDATAP IOC$RELDATAPUDA IOC$RELMAPREG IOC$RELMAPUDA IOC$RELSCHAN IOC$REQCOM IOC$REQDATAP IOC$REQOATAPNW IOC$REQDATAPUDA IOC$REQMAPREG IOC$REQMAPUDA IOC$REQPCHANH IOC$REQPCHANL IOC$REQSCHANH IOC$REQSCHANL IOC$RETURN IOC$SCAN IODB IOC$SCAN-IOOB 2P IOC$SEARCHCONT IOC$SEARCHINT IOC$TESTUN IT IOC$UNI TI NIT IOC$V 2P IOC$V-ALLOC IOC$V-ALT IOC$V-ANY IOC$V-CLASS IOC$V-EXISTS IOC$V-MOUNT IOC$V-TYPE
IOC$WFIKPCH IOC$WFIRLCH IPL$ ASTOEL I PL$-IOPOST IPL$-QUEUEAST
IRP$L OIAGBUF IRP$L=IOQFL

- NONPAGED I/O RELATED SUBROUTINES

3-JUN-1984 11:33:30 VAX-11 Macro V03-0l

Page 66

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(36)

00000830 RG

02

00000647 RG

02

00000568 R

02

******** x 02

00000054 RG

02

******** x 02

00000104 RG

02

OOOOOOlE RG

02

00000017 RG

02

******** x 02

OOOOOlCB RG

02

00000020

00000100

00000004

00000010

00000008

00000001

00000002

00000890 RG

02

00000083 RG

02

0000028C RG

02

00000281 RG

02

00000513 RG

02

000004F8 RG

02

00000079 RG

02

0000013C RG

02

00000201 RG

02

00000213 RG

02

00000221 RG

02

00000302 RG

02

000002ED RG

02

OOOOOOOA RG

02

OOOOOOE3 RG

02

OOOOOOC6 RG

02

00000000 RG

02

00000509 RG

02

00000791 RG

02

00000706 RG

02

OOOOOAA5 RG

02

000009Bl RG

02

OOOOOAB4 RG

02

0000086A RG

02

00000005

OOOOOOOA

00000008

00000006

00000002

00000004

00000007

00000001

0000050A RG

02

OOOOOSFC RG

02

00000002

00000004

00000006

0000004C

00000000

IRP$L MEDIA IRP$L-PID IRP$L-SVAPTE IRP$L-UCB
IRP$V-DIAGBUF IRP$W-CHAN IRP$W-STS LCK$K-EXMODE LCK$K-PWMODE LOCAL-NAME
MMG$GL SPTBASE MNTVERPNDCHK MSCP$V MTYP Dl MSCP$V-MTYP-N
NEXTUCB
NO SECONDARY NXTIRP PCB$L PIO PCB$Q-PRIV PDT$L-ADP
PMS$END IO PMS$GL IOPFMPDB PMS$START IO PM SEND PR$ IPL PR$-SID TYP730 PR$-SID-TYP750 PR$-SID-TYP780 PR$-SID-TYP790 PR$-SID-TYP8NN PR$-SID-TYP8SS
PR$-SID-TYPUV1 PR$-SIRR
PRV$V ALLSPOOL PUTASCIC PUT CHAR PUTDOLLAR PUTNUM REALLOC CD MAPREGS RELDATAP COMMON RELEASE -
RESRO RESR1 RESR2 RESR3 RESR4
SAVABS ... SAVED RO SAVED-R1
SAVED-R2 SAVED-R3 SAVED-R4
SAVED-RS SAVR2-
SAVR3 SAVR4 SAVR8

00000038
oooooooc

0000002C

OOOOOOlC

00000007

00000028

0000002A

00000005

00000004

000006Cl R

02

******** x 02

00000181 R

02

00000016

00000000

OOOOOA79 R

02

000006EO R

02

00000182 R

02

00000060

00000084

OOOOOOEO

******** x 02

******** x 02

******** x 02

00000173 R

02

00000012

00000003

00000002

00000001

00000004

00000006

00000005

00000007

00000014

00000004

000006FD R

02

0000070E R

02

00000708 R

02

000006E5 R

02

0000055A R

02

00000298 R

02

0000018E R

02

00000008
oooooooc

00000010

00000014

00000018

OOOOOOlC

00000000

00000004

00000008
oooooooc

00000010

00000014

00000000

00000004

00000008
oooooooc

IOSUBNPAG
Symbo 1 tab 1e
SAVR9 SB$L DOB SB$L-FLINK .SB$T-NODENAME
SCH$GL CURPCB SCRLEN SCS$GA LOCALSB SCS$GQ-CONFIG SCS$RESUMEWAITR SECONDARY NAME SS$ BUFFEROVF SS$-DEVALLOC SS$-DEVMOUNT SS$-DEVOFFLI NE SS$-I LLIOFUNC SS$-INSFMEM SS$-IVDEVNAM
SS$=NODEVAVL SS$ NOPRIV SS$-NORMAL SS$-NOSUCHDEV SS$-TEMPLATEDEV TTY$B WB FIPL TTY$B-WB-TYPE TTY$K-WB-LENGTH TTY$L-WB-DATA TTY$L-WB-END TTY$L-WB-FR3 TTY$L-WB-IRP TTV$L-WB-NEXT TTY$L-WB-RETADDR TTY$W-WB-SIZE
UBMD$B DATAPATH UBMD$B-NUMREG UBMD$W-MAPREG
UCB$B DEVCLASS UCB$B-ERTCNT UCB$B-FIPL UCB$B-TYPE UCB$L-2P LINK UCB$L-CRB UCB$L-DDB UCB$L-DDT UCB$L-DEVCHAR UCB$L-DEVCHAR2 UCB$L-DP ALTUCB UCB$L-DP-DDB UCB$L-DP-LINK
UCB$L -DUE TIM UCB$L-EMB UCB$L-FPC UCB$L-FQFL UCB$L-FR3 UCB$L -IOQFL UCB$L-IRP UCB$L ~LINK
UCB$L=MEDIA ID

- NONPAGED 1/0 RELATED SUBROUTINES

3-JUN-1984 11:33:30 VAX-11 Macro V03-01

Page 67

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SVS.SRC)IOSUBNPAG(36)

00000010

00000054

00000000

00000044
******** x 02

00000010
******** x 02 ******** x 02 ******** x 02

0000068F R

02

00000601

00000840

0000006C

00000084

OOOOOOF4

00000124

00000144

00000980

00000024

00000001

00000908

000021DC

OOOOOOOB

OOOOOOOA

00000030

00000030

00000020

00000010

00000024

0000001C

0000002C

00000008

00000003

00000002

00000000

00000040

= 00000080 00000008

OOOOOOOA

OOOOOOA4

00000024

00000028

00000088

00000038

0000003C

OOOOOOA8

OOOOOOAO

OOOOOOA4

0000006(

00000094
oooooooc

00000000

00000010

0000004(

00000058

00000030

0000008C

UCB$L OPCNT UCB$L-PIO
UCB$L-STS UCB$L-SVAPTE
UCB$M-BSY UCB$M-CANCEL UCB$M-INT UCB$M-TIM UCB$M-TIMOUT UCB$V-BSY UCB$V-DELETEUCB UCB$V-ERLOGIP UCB$V-MNTVERIP UCB$V-MNTVERPND UCB$V-MOUNTING UCB$V-ONLI NE UCB$V-TEMPLATE UCB$W-BCNT UCB$W-BOFF UCB$W-REFC
UCB$W-STS UCB$W-UNIT VEC$8-DATAPATH VEC$B-NUMREG VEC$L-ADP VEC$L-IDB
VEC$L-INITIAL VEC$L - U N I T I N I T VEC$M-MAPLOCK VEC$S-DATAPATH VEC$V-DATAPATH VEC$V-MAPLOCK VEC$V-PATHLOCK
VEC$W=MAPREG

00000070 0000002C 00000064 00000078
00000100 00000008 00000002 00000001 00000040 00000008 00000010 00000002 OOOOOOOE
00000013 00000009 00000004 OOOOOOOD 0000007E 0000007C 0000005(
00000064 00000054 00000013
00000012 00000014 00000008
oooooooc
00000018 00008000 00000005 00000000 OOOOOOOF 00000007 00000010

IOSUBNPAG Psect synopsis

- NONPAGED I/O RELATED SUBROUTINES

3-JUN-1984 11:33:30 VAX-11 Macro V03-0l

Page 68

12-MAR-1982 17:12:23 DISK$VMSMASTER:[SYS.SRC]IOSUBNPAG(36)

Psect synopsis

PSECT name
ABS $ABS$ WIONONPAGED

Allocation

PSECT No. Attributes

00000000
OOOOOOlC OOOOOB7B.

0.) 00 28.) 01 2939.) 02

0. ) NOPIC USR CON ABS LCL NOSHR NOEXE NORD NOWRT NOVEC BYTE

1 · ) NOP IC USR CON ABS LCL NOSHR EXE RD

WRT NOVEC BYTE

2.) NOPIC USR CON REL LCL NOSHR EXE RO

WRT NOVEC BYTE

Performance indicators

Phase

Page faults

CPU Time

Elapsed Time

Initialization Command processing Pass 1 Symbol table sort Pass 2 Symbol table output Psect synopsis output Cross-reference output Assembler run totals

9 73 676
0
408
0
1 0
1170

00:00:00.05 00:00:00.67
00:00:36.81 00:00:04.17 00:00:12.25 00:00:00.24 00:00:00.02 00:00:00.00 00:00:54.21

00:00:03.03 00:00:05.51 00:02:30.72 00:00:16.52 00:00:52.03 00:00:00.47 00:00:00.02 00:00:00.00 00:03:48.30

The working set limit was 2250 pages. 176206 bytes (345 pages) of virtual memory were used to buffer the intermediate There were 150 pages of symbol table space allocated to hold 2680 non-local and 2794 source lines were read in Pass 1, producing 24 object records in Pass 2. 59 pages of virtual memory were used to define 55 macros.

code. 162 local

symbols.

! Macro library statistics

Macro library name

Macros defined

$255$DUA28: [SYS.OBJ]LIB.MLB;l

35

-$255$DUA28: [SYSLIBJSTARLET.MLB;2

12

fOTALS (all libraries)

47

2923 GETS were required to define 47 macros.

There were no errors, warnings or information messages.

MACRO/LIS=LIS$:IOSUBNPAG/OBJ=OBJ$:IOSUBNPAG MSRC$:IOSUBNPAG/UPDATE=(ENH$:IO$UBNPAG)+EXECML$/LIB

FORKCNTRL

FORKCNTRL
Table of contents

( 1)

66.1

( 1)

67

(2)

90

(3)

117

(4)

165

- FORK PROCESS CONTROL
CREATE FORK-AND-WAIT PROCESS CREATE I/0 DRIVER FORK PROCESS CREATE FORK PROCESS SOFTWARE INTERRUPT ENTRY POINTS SOFTWARE INTERRUPT FORK DISPATCHER

3-JUN-1984 11 :20:55 VAX-11 Macro V03-01

Page 0

FORKCNTRL V03-002 ;DWT0158
-1
;ROW0176 ;ROW0176 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;ROW0176 ;ROW0176 ;ROW0176 ;ROW0176 -29

- FORK PROCESS CONTROL

3-JUN~1984 11:20:55 VAX-11 Macro V03-01

Page 1

12-MAR-1982 17:11:47 DISK$VMSMASTER: [SYS.SRC]FORKCNTRL.(1)

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

1

. TITLE FORKCNTRL - FORK PROCESS CONTROL

.1

. I DENT 'V03-002'

3

4 ·

5 ;****************************************************************************

* 6
7
8 9 10
11
1 2
13 14 15 16 17 18 19 20 21 22
23 24 25
26

;*

*

.
; ; ;
;
;
; ; ; ; ; ; ; ; ; ;
; ;
;
;

* COPYRIGHT (c) 1978, 1980, 1982 BY * DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS. * ALL RIGHTS RESERVED. * * THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED * ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
* INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER * COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY * OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY * TRANSFERRED. * * THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE * AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT * CORPORATION. *
* DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOi SUPPLIED BY DIGITAL.
*
*
**************************************************************************

* * * * * * * * * * * * * * * * * * ***

27

28 D. N. CUTLER 9-AUG-76

29

.1 MODIFIED BY:

. 2

.3

V03-002 DWT0158

David W. Thiel

27-DEC-1983

.4

Speed up fork processing a bit by doing fewer interrupts

.5

and REMQUE's.

.6

.7

V03-001 ROW0176

Ralph 0. Weber

4-APR-1983

. 8

Add EXE$FORK WAIT, the entry fork-and-wait routine which is

.9

the object o7 the FORK WAIT macro.

. 10

59

60 MACRO LIBRARY CALLS

61

62

63

$FKBDEF

DEFINE FKB OFFSETS

64

$PRDEF

DEFINE PROCESSOR REGISTERS

65

$UCBDEF

DEFINE UCB OFFSETS

FORKCNTRL V03-002
;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ; OW.TO 158 ;DWT0158 ;OWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ; DWTO 1~8 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158

- FORK PROCESS CONTROL CREATE FORK-AND-WAIT PROCESS

3-JUN-1984 11:20:55 VAX-11 Macro V03-01

Page 2

12-MAR-1982 17:11:47 DISK$VMSMASTER:[SYS.SRC]FORKCNTRL.(1)

10 A5 53 7D OC A5 8EDO
OOOO'DF 65 OE 05

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0004 0008 OOOD

.1

.SBTTL CREATE FORK-AND-WAIT PROCESS

. 2 ;+

. 3 EXE$FORK WAIT - CREATE FORK-AND-WAIT PROCESS

.4

.5 FUNCTIONAL DESCRIPTION:

.6

.7

This routine is cal led to fold a fork context into a fork block and

.8

place that block on the fork-and-wait work queue, EXE$GL FKWAITFL.

.9

From zero to one seconds later, EXE$TIMEOUT will remove all entries in

. 10

the fork-and-wait work queue and restart the fork thread saved here.

. 11

. 12 INPUTS:

. 13

. 14

OO(SP)

Return address of the caller

. 15

04(SP)

Return address of the caller's caller

. 16

. 17

R5

Address of a fork block

. 18

R3 & R4 Saved fork context registers

. 19

.20

IPL >= IPL$_SYNCH

. 21

.22

.23 OUTPUTS (to caller's caller):

.24

.25

All registers and IPL are returned as they were when this routine was

.26

cal led. Depending upon actions taken by the caller this may be

.27

equivalent to destroying RO through R5 and altering IPL.

.28

.29 OUTPUTS (to caller after fork-and-wait completed):

.30

. 31

R3 through R5 p~eserved.

.32

All other registers destroyed.

.33

IPL = FKB$B FIPL(R5)

.34

.35

.36 EXE$FORK WAIT::

.37

.38

ASSUME FKB$L FR4 EQ <FKB$L FR3 + 4>

.39

MOVQ

R3, FKB$L FR3(R5) -

Save fork context registers.

.40

POPL

FKB$L FPc(R5)

Save fork context PC.

.41

INSQUE (R5),-@WAEXE$GL FKWAITBL

Put fork block on work queue.

.42

RSB

Return to caller's caller.

FORKCNTRL V03-002

64 A5

- FORK PROCESS CONTROL CREATE I/O DRIVER FORK PROCESS

3-JUN-1984 11:20:55 VAX-11 Macro V03-01

Page 3

12-MAR-1982 17:11 :47 DISK$VMSMASTER: [SVS.SRC]FORKCNTRL.(1)

OOOE OOOE OOOE
OOOE OOOE OOOE OOOE
OOOE OOOE OOOE OOOE OOOE OOOE OOOE OOOE OOOE OOOE OOOE
00000000
0000 01 AA 0000
0004

67

.SBTTL CREATE I/O DRIVER FORK PROCESS

68 ;+

69 EXE$IOFORK - CREATE I/0 DRIVER FORK PROCESS

70

71 THIS ROUTINE IS CALLED BY AN I/O DRIVER TO CREATE A FORK PROCESS.

72

73 INPUTS:

74

75

OO(SP) RETURN ADDRESS OF CALLER.

76

04(SP) RETURN ADDRESS OF CALLER'S CALLER.

77 78

= R5 UCB ADDRESS OF DEVICE UNIT.

79

80 OUTPUTS:

81

82

***TBS***

83

84

85

.PSECT A$EXENONPAGED,LONG

86 EXE$IOFORK::

CREATE I/O DRIVER FORK PROCESS

87

BICW

#UCB$M TIM,UCB$W STS(R5);DISABLE TIMEOUT AND FALL THROUGH

88

-

TO EXE$FORK

FORKCNTRL V03-002
DWT0158 DWT0158 DWT0158

- FORK PROCESS CONTROL CREATE FORK PROCESS

3-JUN-1984 11:20:55 VAX-11 Macro V03-01

Page 4

12-MAR-1982 17:11:47 DISK$VMSMASTER:[SYS.SRC]FORKCNTRL.(2)

0004
0004 0004
0004 0004 0004 0004 0004
0004 0004 0004 0004 0004 0004 0004 0004 0004 0004 0004 10 A5 53 7D 0004 QC A5 8EDO 0008
54 OB A5 9A oooc
53 FFDO'CF44 7E 0010 04 B3 65 OE 0016 03 12 OOlA 001C
05 001F

90

.SBTTL CREATE FORK PROCESS

91 ;+

92 EXE$FORK - CREATE FORK PROCESS

93

94 THIS ROUTINE IS CALLED TO CREAIE A FORK PROCESS.

95

96 INPUTS:

97

98

OO(SP) = RETURN ADDRESS OF CALLER.

99

04(SP) =RETURN ADDRESS OF CALLER'S CALLER.

100

101

R5 = ADDRESS OF FORK BLOCK.

102

103 OUTPUTS:

104

105

***TBS***

106

107

108 EXE$FORK::

;CREATE FORK PROCESS

109

MOVQ

R3,FKB$L FR3(R5)

;SAVE REGISTERS R3 AND R4

110

POPL

FKB$L FP~(R5)

;SET FORK PROCESS PC

111

MOVZBL FKB$B-FIPL(R5),R4

;GET FORK IPL

112

MOVAQ WASWI$GL FQFL-<6*8>[R4] ,R3 ;GET ADDRESS OF FORK QUEUE LISTHEAD

113

INSQUE (R5),@4(R3)

INSERT FORK B~OCK IN FORK QUEUE

.1

BNEQ

10$

IF QUEUE ALREADY POPULATED AVOID EXTRA INTE

. 2

SOFTI NT R4

INITIATE SOFTWARE INTERRUPT

.3 10$:

RSB

AND RETURN

FORKCNTRL V03-002

- FORK PROCESS CONTROL SOFTWARE INTERRUPT ENTRY POINTS

3-JUN-1984 11:20:55 VAX-11 Macro V03-01

Page 5

12-MAR-1982 17:11:47 DISK$VMSMASTER:[SYS.SRC]FORKCNTRL.(3)

0020 117

.SBTTL SOFTWARE INTERRUPT ENTRY POINTS

0020 118 ;+

0020 119 THE APPROPRIATE ENTRY POINT IS AUTOMATICALLY VECTORED TO WHEN THE SOFTWARE

0020 120 INTERRUPT PRIORITY ARBITRATION LOGIC IN THE CENTRAL PROCESSOR DETECTS A

0020 121 PENDING INTERRUPT AT LEVEL 6, 8, 9, 10, OR 11 AND THE CURRENT PRIORITY LEVEL

0020 122 IS LOWER THAN THE PENDING LEVEL. THE STATE OF THE STACK ON ENTRY IS:

0020 123 0020 124 0020 125

OO(SP) = INTERRUPT PC. 04(SP) = INTERRUPT PSL.

0020 126

0020 127 THERE IS AN ENTRY POINT FOR EACH FORK LEVEL SO THAT THE HARDWARE IPL REGISTER

0020 128 WILL NOT HAVE TO BE READ TO DETERMINE THE CURRENT PROCESSOR IPL. READING THE

0020 129 IPL REGISTER IS SLOW ENOUGH TO WARRANT THE ADDITIONAL CODE.

0020 130

0020 131

0020 132

.ALIGN LONG

ENTRY POINT MUST BE LONGWORD ALIGNED

0020 133 EXE$FRKIPL6DSP::

FORK IPL 6 ENTRY POINT

56 DD 0020 134

PUSHL R6

SAVE R6.

56 OOOO'CF 7E 0022 135

MOVAQ WASWI$GL FQFL,R6

GET ADDRESS OF FORK QUEUE LISTHEAD

2F 11 0027 136

BRB

EXE$FORKDSPTH

BRANCH TO COMMON CODE

0029 137

0029
ooze

138

. ALIGN LONG

139 EXE$FRKIPL9DSP::

ENTRY POINT MUST BE LONGWORD ALIGNED FORK IPL 9 ENTRY POINT

56 DD 002C 140 56 0018'CF 7E 002E 141
23 11 0033 142

PUSHL MOVAQ BRB

R6 WASWI$GL FQFL+24,R6 EXE$FORKDSPTH

SAVE R6. GET ADDRESS OF' FORK QUEUE LI STHEAD BRANCH TO COMMON CODE

0035 143

0035 144

. ALIGN LONG

ENTRY POINT MUST BE LONGWORD ALIGNED

0038 145 EXE$FRKIPL10DSP::

FORK IPL 10 ENTRY POINT

56 DD 0038 146

PUSHL R6

SAVE R6.

56 0020'CF 7E 003A 147

MOVAQ WASWI$GL FQFL+32,R6

GET ADDRESS OF FORK QUEUE LISTHEAD

17 11 003F 148

BRB

EXE$FORKDSPTH

BRANCH TO COMMON CODE

0041 149

0041 0044

150

. ALIGN LONG

151 EXE$FRKIPL11DSP::

ENTRY POINT MUST BE LONGWORD ALIGNED FORK IPL 11 ENTRY POINT

56 DD 0044 152 56 0028'CF 7E 0046 153
OB 11 004B 154

PUSHL MOVAQ BRB

R6 WASWI$GL FQFL+40,R6 EXE$FORKDSPTH

SAVE R6.
GET ADDRESS OF FORK QUEUE LISTHEAD BRANCH TO COMMON CODE

004D 155

004D 156

.ALIGN LONG

ENTRY POINT MUST BE LONGWORD ALIGNED

0050 157 EXE$FRKIPL8DSP::

56 DD 0050 158

PUSHL R6

56 0010'CF 7E 0052 159

MOVAQ WASWI$GL FQFL+16,R6

01 0057 160

NOP

-

FORK IPL 8 ENTRY POINT SAVE R6. GET ADDRESS OF FORK QUEUE LISTHEAD PAD OUT TO LONGWORD BOUNDARY

0058 161

0058 162

DROP THROUGH TO COMMON CODE

0058 163

FORKCNTRL V03-002
DWT0158 DWTO 158 DWT0158 3
DWT0158 DWT0158 DWT0158 DWT0158 ;DWT0159 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 ;DWT0158 -3

- FORK PROCESS CONTROL SOFTWARE INTERRUPT FORK DISPATCHER

3-JUN-1984 11:20:55 VAX-11 Macro V03-01

Page 6

12-MAR-1982 17:11:47 DISK$VMSMASTER:[SYS.SRC]FORKCNTRL.(4)

55 54 53 52 51 50 07
53 10 A5
oc B5
55 00 B6 F3 07
53 10 A5
oc B5
007F BF

0058 0058 0058 0058 0058 0058 0058 0058 0058 0058 0058 0058 0058 0058 0058 0058 0058 0058 0058 0058 DD 0058 DD 005A DD 005C DD 005E DD 0060 DD 0062 11 0064 0066 0066 0066 0066 0066 0066 0066 0066 7D 0066 16 006A OF 006D 12 0071 1D 0073 0075 0075 0075 0075 0075 0075 0075 0075 0075 7D 0075 16 0079 BA 007C 02 0080 0081 0081

165

.SBTTL SOFTWARE INTERRUPT FORK DISPATCHER

166 ;+

167 ; EXE$FORKDSPTH - SOFTWARE INTERRUPT FORK DISPATCHER

168

169 FOR EACH OF THE LEVELS 6, 8, 9, 10, AND 11, THERE EXISTS A QUEUE OF FORK

170 BLOCKS WAITING TO BE PROCESSED. WHEN A FORK BLOCK IS ENTERED IN ITS

171 CORRESPONDING QUEUE AND IT IS THE FIRST TO BE ENTERED (I. E. THE QUEUE

172 WAS PREVIOUSLY EMPTY), A SOFTWARE INTERRUPT IS REQUESTED FOR THAT LEVEL.

173 THE FORK DISPATCHER GAINS CONTROL AND EMPTIES THE QUEUE ONE ENTRY AT A

174 TIME. AS EACH FORK IS DISPATCHED, REGISTERS R3 AND R4 ARE RESTORED FROM

175 THE FORK BLOCK AND THE FORK PROCESS IS CALLED VIA A JSB INSTRUCTION.

176 ON RETURN, THE FORK DISPATCHER RETRIEVES THE NEXT ENTRY FROM THE QUEUE

177 AND REPEATS THE DISPATCHING OPERATION. THIS PROCESS CONTINUES UNTIL

178 THERE ARE NO MORE FORKS TO DISPATCH AT WHICH TIME THE INTERRUPT IS

179 DISMISSED.

180

181

182

183

. ALIGN LONG

184 EXE$FORKDSPTH: :

;SOFTWARE INTERRUPT FORK DISPATCHER

185

PUSHL R5

;SAVE RS

186

PUSHL R4

;SAVE R4

187

PUSHL R3

;SAVE R3

PUSHLS ARE FASTEST!

188

PUSHL R2

;SAVE R2

189

PUSHL R1

;SAVE R1

190

PUSHL RO

;SAVE RO.

.1

BRB

20$

;BRANCH TO BODY OF DISPATCHER

. 2

. 3 DISPATCH FORK PROCESS WHEN QUEUE IS NOT VET EMPTY

194 DISPATCH FORK PROCESS WITH:

195 196

= RO THRU R2 SCRATCH REGISTERS.

197

R3 AND R4 = RESTORED FROM FORK BLOCK.

198

R5 = ADDRESS OF FORK BLOCK.

199

200 10$:

MOVQ

FKB$L FR3(R5) ,R3

RESTORE REGISTERS R3 AND R4

201

JSB

@FKB$L FPC(R5)

DISPATCH FORK

.1 20$:

REMQUE @(R6) ,R5

REMOVE NEXT ENTRY FROM FORK QUEUE

. 2

BNEQ

10$

BRANCH IF QUEUE NOT VET EMPTY

.3

BVS

30$

IF VS NO ENTRY REMOVED

.4

HERE WHEN LAST ENTRY DEQUEUED

.5

.6 DISPATCH LAST ENTRY IN THE QUEUE

. 7 DISPATCH FORK PROCESS WITH:

. 8

.9 . 10

RO THRU R2 = SCRATCH REGISTERS. = R3 AND R4 RESTORED FROM FORK BLOCK.

. 11

R5 = ADDRESS OF FORK BLOCK .

. 12

. 13

MOVQ

FKB$L FR3(R5),R3

;RESTORE REGISTERS R3 AND R4

. 14 . 15 30$:

JSB POPR

@FKB$L FPC(R5)

;DISPATCH FORK

#AM<RO~R1 ,R2,R3,R4,R5,R6> ;RESTORE FORK PROCESS REGISTER SET

205

REI

;DISMISS INTERRUPT

206

207

.END

FORKCNTRL Symbol table
EXE$FORK EXE$FORKDSPTH EXE$FORK WAIT EXE$FRKIPL10DSP EXE$FRKIPL11DSP EXE$FRKIPL6DSP EXE$FRKIPL8DSP EXE$FRKIPL9DSP E'XE$GL FKWAITBL EXE$IOFORK FKB$B FIPL FKB$L-FPC FKB$L-FR3 FKB$L-FR4 PR$ SIRR SWI$GL FQFL UCB$M TIM UCB$W=STS

- FORK PROCESS CONTROL

00000004 RG

03

00000058 RG

03

00000000 RG

01

00000038 RG

03

00000044 RG

03

00000020 RG

03

00000050 RG

03

0000002C RG

03

******** x 01

= 00000000 RG 00000008

03

oooooooc

00000010

00000014

00000014
******** x 03

00000001

00000064

3-JUN-1984 11 :20:55 VAX-11 Macro V03-0l

Page 7

12-MAR-1982 17:11 :47 DISK$VMSMASTER:[SYS.SRC]FORKCNTRL.(4)

! Psect synopsis
+----------------+

PSECT name
---------ABS BLANK . $ABS$ A$EXENONPAGED

Allocation
----------

-PS-E-C-T---N-o-. Attributes

00000000 (

0.) 00 ( 0.) NOP IC USR CON ABS LCL NOSHR NOEXE NORD NOWRT NOVEC BYTE

OOOOOOOE ( 14.) 01 ( 1.) NOP IC USR CON REL LCL NOSHR EXE RD

WRT NOVEC BYTE

00000000 (

0.) 02 ( 2.) NOPIC USR CON ABS LCL NOSHR EXE RD

WRT NOVEC BYTE

00000081 ( 129.) 03 ( 3.) NOP IC USR CON REL LCL NOSHR EXE RD

WRT NOVEC LONG

+------------------------+
+! -P-e-r-f-o-r-m-a-n-c-e---i-n-d-i-c-a-t-o-r-s-+!

Phase

Page faults

CPU Time

Elapsed Time

Initialization Command processing Pass 1 Symbol table sort Pass 2 Symbol table output Psect synopsis outpu~ Cross-reference output Assembler run totals

9

00:00:00.0.7

00:00:00.47

73

00:00:00.58

00:00:06.58

200

00:00:04.79

00:00:24.27

0

00:00:00.68

00:00:02.39

51

00:00:01.32

00:00:07.47

3

00:00:00.04

00:00:00.03

2

00:00:00.02

00:00:00.10

0

00:00:00.00

00:00:00.00

341

00:00:07.50

00:00:41.34

The working set limit was 900 pages. 22659 bytes (45 pages) of virtual memory were used to buffer the intermediate There were 30 pages of symbol table space allocated to hold 426 non-local and 244 source lines were read in Pass 1, producing 14 object records in Pass 2. 12 p~ges ~f virtual memory were used to define 11 macros.

code. 4 local

symbols.

FORKCNTRL VAX-11 Macro Run Statistics

- FORK PROCESS CONTROL

3-JUN-1984 11:20:55 VAX-11 Macro V03-0l

Page 8

12-MAR-1982 17:11:47 DISK$VMSMASTER:[SYS.SRC]FORKCNTRL.(4)

Macro library statistics

Macro library name

Macros defined

$255$DUA28: [SYS.OBJ)LIB.MLB;l

3

$255$DUA28: [SYSLIB]STARLET.MLB;2

5

TOTALS (all 1ibraries)

8

491 GETS were required to define 8 macros.

There were no errors, warnings or information messages.

MACRO/LIS=LIS$:FORKCNTRL/OBJ=OBJ$:FORKCNTRL MSRC$:FORKCNTRL/UPDATE=(ENH$:FORKCNTRL)+EXECML$/LIB

INITADP

INIADP780 Table of contents

(3)
(4)
(5)
(6)
( 7)
(8) (9)
( 10)
( 11) ( 13) ( 14) ( 14) (14) ( 14) ( 14) ( 14) ( 15) . ( 16)

168 220. 1 378 528 539 691 708 832 867 1016 1072 1503 1504 1505 1649.36 1650 1762 1905

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Macros to describe nexus configurations

Adapter-specific data structures

CPU-specific data structures

Message strings

INI$IOMAP, Initialize and map nexuses

INITADP 780, 750, 730, and UVl

CONFIG IOSPACE

CREATE-ARRAYS

MAP PAGES

INI$UBSPACE

INI$UBADP - BUILD ADP AND INITIALIZE UBA

INI$MBADP - BUILD ADP AND INITIALIZE MBA

INI$DRADP - BUILD ADP AND INITIALIZE DR32

INI$CIADP - BUILD ADP AND INITIALIZE CI

INI$KDZ11

INI$CONSOLE, init data structures for console

EXE$INI TIMWAIT - COMPUTE CORRECT TIMEWAIT LOOP VALUES

EXE$INIT_TODR

SET SYSTEM TIME TO CORRECT VALUE AT STARTUP

Page 0

INIADP780 V03-·021
; RLRSCORPIO ; RLRSCORPIO
-1
;KDM0100 ;KDM0100 ;KDM0100 ;KDM0100 ;KDM0099 ;KDM0099 ;KDM0099 ;KDM0099 ;KDM0099 ;KDM0099 ; RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 1

19-0CT-1983 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP.(1)

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 OQOO 0000 0000 0000 0000 0000 0000 0000 0000

1

. NLI ST CND

3

.TITLE INIADP780 - ADAPTER INITIALIZATION FOR VAX 11/780

5

9

13

17

21

.4

.5

. !DENT 'V03-021 '

23

24 ;****************************************************************************

25 ; *
26 ;* COPYRIGHT (c) 1978, 1980, 1982, 1983 BY

* *

27 ;* DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS.

*

28 ;* ALL RIGHTS RESERVED.

*

29 ;* 30 ;*
31 ;*

THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE

* * *

32 ;* INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER *

33 ;* COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY 34 ;* OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY

* *

35 ;* TRANSFERRED.

*

36 ; *

*

37 ; * 38 ; * 39 ; *

THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.

* * *

* 40 41 * DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS

* *

42 * SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.

*

43 44 45

;;;********************************************************************************

46

47 Facility: System bootstrapping and initialization

48

49 Abstract: This module contains initialization routines that are loaded

50

during system initialization (rather than linked into the system).

51
= 52 _; Environment~ Mode KERNEL, Executing on INTERRUPT stack, IPL=31

53

54 Author: Trudy C. Matthews

Creation date: 22-Jan-1981

55

56 Modification history:

57

. 1

V03-021 KDMOlOO

Kathleen D. Morse

01-May-1984

. 2

Correct address of memory CSRs to be past the 8 missing

. 3

Qbus adapter pages that do not exist.

.4

.5

V03-020 KDM0099

Kathleen D. Morse

27-Apr-1984

.6

On a MicroVAX I, if the sysgen parameter TIMEDWAIT is set

. 7

to request no time-prompting, then use the last recorded

. 8

system time instead. This is found in EXE$GQ TODCBASE

.9

which can be updated with a SET TIME command.-

. 10

.11

V03-019 RLRSCORPIO

Robert L. Rappaport

16-Mar-1984

. 12

Begin additions (to INI$IOMAP) for Scorpio support.

. 13

Also move ADAPDESC to SYSMAR.MAR, changing it to remove

INIADP780 V03-021
; RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ·; RLRSCORPIO ;KPLOlOO ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPLOlOO ;KPLOlOO ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPLOOOl ;KPLOOOl ;KPLOOOl ;KPLOOOl ;TCM0009 ;TCM0009 ;TCM0009 ;TCM0009 ;TCM0009 ;TCM0009

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-0l

Page 2

19-0CT-1983 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP.(1)

0000 .14

0000 . 15

0000 . 16

0000 . 17

0000 . 18

0000 . 19

0000 .20

0000 . 21

0000 .22

0000 .23

0000 .24

0000 .25

0000 .26

0000 .27

0000 .28

0000 .29

0000 .30

0000 . 31

0000 .32

0000 .33

0000 .34

0000 .35

0000 .36

0000 .37

0000 .38

0000 .39

0000 .40

0000 .41

0000 .42

0000 .43

0000 .44

0000 . 45

0000 .46

0000

58

0000

59

0000

60

0000

61

0000

62

0000

63

0000

64

0000

65

0000

66

0000

67

0000

68

0000

69

0000

70

0000

71

0000

72

0000

73

0000

74

0000

75

0000

76

0000

77

0000

78

0000

79

0000

80

0000

81

the ADAP_GENERAL array.

V03-018 RLRINIADP

Robert Rappaport

28-Feb-1984

Add refinements to previous update that introduces

lonqword array CONFREG. Mainly add logic to allow for

independently assembled invocations of ADAPDESC macro

to be linked into this code. This provides possible

support of BI as a public bus, with user defined nodes.

V03-017 KPLOlOO

Peter Lieberwirth

30-Jan-1984

Implement first step towards a longword-array CONFREG to

replace current byte array CONFREG. INIADP wil 1 construct

two confregs, CONFREG and CONFREGL. CONFREGL wil 1 be

a longword array. The high byte wil I be a VMS-bus

designation, and the low word will contain the 16-bit

device type. The BI introduces 16 bit device types.

When all references to CONFREG have been modified to touch CONFREGL, INIADP will be modified again to stop creating the byte array.

While here, map 9 pages of CI register space, up from 8.

V03-016 KPLOOOl

Peter Lieberwirth

17-Jan-1984

Fix bug in V03-015 that caused a failure to boot on 750s.

Specifically, add NDT$_MEM1664NI to ADAPDESC macro.

V03-015 TCM0009

Trudy C. Matthews

12-Dec-1983

Add support for booting from VENUS console device to

INI$CONSOLE. When mapping I/O space on VENUS, use the

PAMM to determine if any adaptors are present on the

ABUS .

V03-014 KDM0081

Kathleen D. Morse

Create version for Micro-VAX I.

13-Sep-1983

V03-013 DWT0126

David W. Thiel

30-Aug-1983

Modify EXE$INIT TOOR to set internal time without

modifying the contents of the system disk.

V03-012 KDM0062

Kathleen D. Morse

18-Jul-1983

Add loadable, cpu-dependent routine for initializing

the time-wait loop data cells, EXE$INI TIMWAIT.

V03-011 KDM0057

Kathleen D. Morse

15-Jul-1983

Added loadable, cpu-dependent routine for initializing

the system time, EXE$INIT_TODR~

V03-010 KTA3071

Ker~ey T. Altmann

12-Jul-1983

Include CPU-specific console init code.

V03-009 TCM0008

Trudy C. Matthews

10-Jan-1983

Change PSECT of 11/790 data that must stick around after

INIADP is deleted. Build arrays ABUS VA, ABUS TYPE, and

ABUS_INDEX that describe the 11/790 ABUS configuration.

V03-008 MSH0002

Maryann Hinden

08-Dec-1982

INIADP780 V03-021

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-0l

Page 3

19-0CT-1983 11 :50:19 DISK$VMSMASTER:[SVSLOA.SRC]INIADP.(1)

0000

82

0000

83

0000

84

0000

85

0000

86

0000

87

0000

88

0000

89

0000

90

0000

91

0000

92

0000

93

0000

94

0000

95

0000

96

0000

97

0000

98

0000

99

0000 100

0000 101

0000 102

0000 103

0000 104

0000 105

0000 106

0000 107

0000 108

Add powerfail support for DW750.

V03-007 ROW0142

Ralph 0. Weber

24-NOV-1982

Change UBA interrupt services routines prototype so that

UBAERRADR is correctly computed as an offset from UBAINTBASE.

V03-006 TCM0007

Trudy C. Matthews

10-Nov-1982

Add 11/790-specific initialization of SCB.

V03-005 TCM0006

Trudy C. Matthews

8-Nov-1982

Initialize field ADP$L AVECTOR with the address of

each adapter's first SCB vector.

V03-004 KTA3018

Kerbey T. Altmann

30-0ct-1982

Move from INILOA facility, rename from INITADP,

put in condi~ional assembly, rewrite some routines.

V03-003 MSHOOOl

Maryann Hinden

24-Sep-1982

Change EXE$DW780 INT to EXE$UBAERR INT.

V03-002 TCM0005

Trudy C. Matthews

Added support for 11/790 processor.

10-Aug-1982

V03-001 KDM0002 Added $DCDEF.

Kathleen D. Morse

28-Jun-1982

INIADP780 V03-021
RLRSCORPIO RLRSCORPIO RLRSCORPIO
1
;RLRSCORPIO

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 4

19-0CT-1983 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP.(2)

0000 110

0000 111 MACRO LIBRARY CALLS

0000 112

0000 113

$ADPDEF

0000

.1

$BIICDEF

0000

· 2

$BTDDEF

0000

. 3

$BUA DEF

0000 115

$CRBDEF

0000 116

$DCDEF

0000. 117

$00BDEF

0000 118

$0YNDEF

0000 119

$IDBOEF

0000 125

$I0780DEF

0000 137

$MCHKDEF

0000 138

$NDTDEF

0000 139

$PRDEF

0000 140

0000 142

$PR780DEF

0000 144

0000 148

0000 152

0000 156

0000 160

0000

.4

0000 161

$PTEDEF

0000 162

$RPBDEF

0000 163

$UBADEF

0000 164

$UCBDEF

0000 165

$VADEF

0000 166

$VECDEF

Define ADP offsets. Define BIIC offsets. Define boot devices Define BUA Register offsets. Define CRB offsets. Define adapter types Define DOB offsets Define data structure type codes. Define interrupt dispatcher offsets. Define 11/780 I/O space. Define machine check masks. Define nexus device types. Define IPR numbers.
Define 11/780 specific IPR numbers.
Define Page Table Entry bits. Define Restart Parameter Block fields. Define UBA register offsets. Define UCB offsets. Define virtual address fields. Define vec offsets.

INIADP780 V03-021
;KPL0100 ;KPL0100 ·; KPLO 100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPLOlOO ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPLOlOO ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 -5
;KPLOlQO -1

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 5

Macros to describe nexus configurations 19-0CT-1983 11 :50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP.(3)

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000
0000 0000 0000
0000 0000
0000
0000 0000 0000 0000 0000 0000 0000

168

.SBTTL Macros to describe nexus configurations

169

170

The macros FLOAT NEXUS and FIXED NEXUS add one or more entries to a

171

nexus descriptor-table. Each entry is of the form:

172

+-------------------------------+

173

PFN of nexus I/O space

.1

. 2

bus

0

type

.3

+-------+-------+---------------+

.4

type 0 -> floating nexus

.5 .6

= type
= bus

non-zero -> fixed nexus; type fixed adapter type 0, if SB!; %x80 if BI (this is a VMS-only designation)

.7

.8

.9

device_type:

SB! adapters have 8-bit device type codes. These

. 10

device types are simple integers.

.11

. 12

BI adapters have 16-bit device type codes, that are

. 13

subject to the following interpretation:

.14

. 15

- the MSB of the device-type field wil 1 be 0 for DEC

. 16

devices and 1 for non-DEC devices,

. 17

. 18

- DEC memory devices wil 1 have Os in the high-order

. 19

byte of the device type,

.20

. 21

- non-DEC supplied memory devices will have a 1 in the

.22

MSB of the high-order byte, and the rest of the high

.23

order byte will contain Os.

.24

.25 · .26 .27

- The "al 1 Os" and "all ls" device-type codes are reserved for DEC.

.28 ; If SB! type codes were simply expanded to a word for purposes of the routines

.29 ; in this module, there would be possible conflicts between SB! devices and

.30 ; BI memory adapters supplied by DEC. Voila: the bus type.

179 ;_

180 ; Macro FLOAT NEXUS.

181 ; INPUTS:

-

182 ;

PHYSADR -- physical address of 1 or more contiguous floating nexus

183 ; 184

NUMNEX

slots
= number of contiguous floating nexuses, default

185

PERNEX

amount of address space per nexus (does not have to be

186

specified if NUMNEX = 1)

187

188

.MACRO FLOAT NEXUS

PHYSADR,NUMNEX=l ,PERNEX=O

189

PA = PHYSADR -

190

.REPEAT NUMNEX

For each nexus ...

191

.LONG <PA/AX200>

S~ore PFN.

.1 193

= .LONG 0
PA PA + PERNEX

194

.ENDR

Store floating nexus type. Increment to physical address of next nexus.

195

.ENDM FLOAT_NEXUS

196

197

198 Macro FIXED_NEXUS.

199

IN I ADP780 V03-021
;RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-0l

Page 6

Macros to describe nexus configurations 19-0CT-1983 11:50: 19 DISK$VMSMASTER:[SVSLOA.SRC)INIADP.(3)

00000000 00000001 00000001 00000002 00000000 80000000
FFFFFFFB

0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

200 INPUTS:

201

PHYSADR - physical address of 1 or more contiguous fixed nexus slots

202

PERNEX - amount of address space per nexus

203

NEXUSTYPES - a list of fixed nexus types, enclosed in<>

204

205

.MACRO FIXED NEXUS

PHYSADR,PERNEX=O,NEXUSTYPES

206

PA = PHYSADR

207

.IRP

TVPECODE,NEXUSTYPES

; For each fixed nexus type ...

208

.LONG <PA/AX200>

Store PFN.

.1

.LONG TYPECODE

Store fixed nexus type.

. 2

PA = PA + PERNEX

Increment to address of next nexus.

.3

.ENDR

.4

.ENDM FIXED NEXUS

.5

. 6

.7 Macro NEXUSDESC TABLE - declare the beginning of a NEXUS descriptor table

.8

.9

1st byte in table (at offset -5 from label) contains length of

. 10

adapter type code field in CSR's on this bus. [Note for SBI like

.11

busses, this is 1.] The next longword (at offset -4) in the

. 12

table contains the Software defined bus type byte defined in the

. 13

high order byte of the longword. [Note for SBI like busses, this

. 14

value is 0, for the BI it is Ax80.]

. 15

. 16

. 17 Define parameters that may be specified or used in macro invocation.

. 18

. 19 BI LI KE

0

BI like bus.

.20 SBI LI KE

SBI like bus.

. 21

.22 SBI CSR LEN

Length of type code field in adapter CSR's

.23

on SBI, CMI, etc.

.24 BI CSR LEN = 2

Length of type code field in adapter CSR's

.25

on BI.

.26
.27 SBI BUS CODE = 0

Software defined bus code for SBI like busses.

.28 BI BUS CODE = Ax80000000

Software defined bus code for the BI.

.29

.30

.MACRO NEXUSDESC TABLE LABEL,BUS TVPE=SBI LIKE

. 31

.IF

EQ,BUS TYPE-SB! LIKE

-

-

.32

-

-.BYTE SBI CSR LEN

.33

.LONG SBI=BUS-CODE

.34

. I FF

.35

.IF

EQ,BUS TYPE-BI LIKE

.36

- .BYTE - BI CSR LEN

.37

.LONG BI=BUS=CODE

.38

.IFF

.39

.ERROR ; UNRECOGNIZED BUS TYPE, NEXUSDESC_TABLE;

.40

.ENDC

.41

.ENDC

.42

.43 LABEL:

.44

.ENDM NEXUSDESC TABLE

.45

.46 CSR LEN OFFSET = -5

Offset before nexus descriptor of

.47

byte containing length of adapter

.48

type field in adapter CSR.

INIADP780 V03-021
RLRSCORPIO RLRSCORPIO RLRSCORPIO RLRSCORPIO 5

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-0l

Page 7

Macros to describe nexus configurations 19-0CT-1983 11:50:19 DISK$VMSMASTER:[SVSLOA.SRC]INIADP.(3)

FFFFFFFC

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

.49 BUS CODE OFFSET = -4

.50

.51

.52

214

215 Macro END_NEXUSDESC.

216

217

.MACRO END NEXUSDESC

218

.LONG 0 -

219

.ENDM END NEXUSDESC

Offset before nexus descriptor table of longword containing software defined bus type to be or'ed with adapter type to produce NOT$ value.
PFN=O -> end of nexus descriptors.

INIADP780 V03-021
; RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO , ; RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO -65
;RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO : RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-0l

Page 8

Adapter-specific data structures

19-0CT-1983 11:50:19 DISK$VMSMASTER:[SYSLOA.SRCJINIADP.(4)

0000 0000 0000 0000 0000 00000000 0000 0000 00000000 0000 0000 0000 0000 OOQOOOOO - 0000
00000000 0000 0000 0000
00000000 0000
00000000 0000 0000 0000 0000 0000 0000
00000000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0088 0000 0070 0002
0004 0004 00 0004 0005 0005 0005 0005 0005 0005 0005
00000000 0005 0009 0009 0009 0009

.1

.SBTTL Adapter-specific data structures

. 2

.3 Put a symbol for arrays built by macros in the correct psects.

.4 .5

';*****************

ADAPTERS

array

*************

.6

.PSECT $$$INIT$DATAO

. 7 ADAPTERS:

: Build adapter type code arrays here.

.8

.9

.PSECT $$$INIT$DATA1

; User contributions in this .PSECT.

. 10

; End of ADAPTERS array.

.11 :***************** End of ADAPTERS array *************

. 12

. 13 ;***************** NUM PAGES array *************

. 14

.PSECT $$$INIT$DATA2

. 15 NUM PAGES:

; Build "number of pages to map" array .

. 16

-

.PSECT $$$INIT$DATA3

; User contributions in this .PSECT.

. 17 ;***************** End of NUM_PAGESarray *************

. 18

. 19 ;***************** !NIT ROUTINES array *************

.20

.PSECT $$$INIT$DATA4

. 21 !NIT ROUTINES:

; Build "address of init routine" array .

.22

- .PSECT $$$INIT$DATA5

; User contributions in this .PSECT.

.23 ;***************** End of INIT ROUTINES array *************

286

287

288 To add a new adapter type:

289

1) Add a new ADAPDESC macro invocation to the end of this list.

290

291

.PSECT $$$INIT$DATA,LONG

292

293

294 Default interupt vectors for UNIBUS system devices

295 (This array is indexed by the RPB field RPB$B DEVTYP, if the RPB field

296 RPB$W ROUBVEC is zero. If RPB$W ROUBVEC is not zero, then RPB$W ROUBVEC

297 is used and this array is not referenced at al 1. RPB$W ROUBVEC Ts set up

298 by PQDRIVER. RPB$L BOOTRO is set by VMB to contain the-device name in

299 ASCII, not the vector number and device type, as it does on full

300 architecture VAX machines.

301

302 BOOTVECTOR:

303

.WORD AX88

RK06/7 Interrupt vector

304

.WORD AX70

RLOl/2 Interrupt vector

305

. 1 BUS CSR LEN:

. 2

-

BYTE 0

Static byte containing the length (in bytes) of the adapter type field in the CSR's of

. 3

the bus currently being configured. The

.4

proper value for the bus of interest is

.5

copied here, from the current nexus

.6

descriptor table, when we enter subroutine

. 7

CONFIG_IOSPACE.

.8

.9 SW BUS CODE: . 10 - - LONG 0

Static longword containing the software defined bus type, of the bus currently being

.11

configured, in the high order byte. The

. 12

proper value for the bus of current interest

. 13

is copied here, from the nexus descriptor

. 14

table, when we enter subroutine

INIADP780 V03-021 ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ·; RLRSCORPI 0 ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO -8
_,;RLRSCORPIO
;KPL0100 ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JuN-1984 14:53:36 VAX-11 Macro V03-0l

Page 9

Adapter-specific data structures

19-0CT-1983 11 :50:19 DISK$VMSMASTER: [SYSLOA.SRC]INIADP.(4)

00000000
00000001 00000080

0009 0009 0009 0009 0009 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 OOOD 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

. 15

CONFIG IOSPACE .

. 16

. 17 DIRECT_VEC_NOOE_CNT:

Static longword that counts the number of

. 18

direct vectoring adpater nodes that we have

. 19

.LONG 0

run across so far.

.20

. 21 $$$VMSDEFINED

Define symbol that means VMS system software.

.22 NUMUBAVEC = 128

ALLOW FOR 128 UNIBUS VECTORS

.23

.24

ADAPDESC -

; Memory. ** MUST BE 1ST IN DESCRIPTOR LIST **

.25

AOPTYPES=<NDT$ MEM1664NI,NDT$ MEM4NI,NOT$ MEM4I,NDT$ MEM16NI, -

.26

NOT$ MEM16I,NDT$ MEM64NIL,NDT$ MEM64EIL,NDT$-MEM64NIU, -

.27

NDT$-MEM64EIU, NOT$ MEM64I, NOT$ SCORMEM> - -

314

NUMPAGES=1

-

315

316

ADAPDESC -

; MASSbus.

317

ADPTYPES=NDT$ MB, -

318

NUMPAGES=8, --

319

INITRTN=INI$MBADP

320

321

ADAPDESC -

; UNibus.

.1

ADPTYPES=<NDT$ UBO,NDT$ UB1 ,NOT$ UB2,NDT$ UB3,NDT$ BUA>, -

323

NUMPAGES=8, - -

-

-

324

INITRTN=INI$UBSPACE

325

326

ADAPDESC -

; Multi-port memory.

327

ADPTYPES=<NDT$ MPMO,NDT$ MPM1,NDT$ MPM2,NDT$ MPM3>, -

328

NUMPAGES=1, - -

-

-

-

329

INITRTN=INI$MPMADP

330

331

ADAPDESC -

; DR32.

332

ADPTYPES=NDT$ DR32, -

333

NUMPAGES=4, --

334

INITRTN=INI$DRADP

335

336

AOAPDESC -

; CI780

337

ADPTVPES=NDT$ CI, -

.1

NUMPAGES=9, --

. 2

INITRTN=INI$CIADP

.3

.4

ADAPDESC -

; KDZ11 Processor

.5

ADPTVPES=NDT$ KDZ11, -

.6

NUMPAGES=1, --

. 7

INITRTN=INI$KDZ11

.8

INIADP780 V03-021

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-0l

Page 10

Adapter-specific data structures

19-0CT-1983 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC)INIAOP.(4)

00000001 00000003 00000004
08 0030
00
01 0030
02
01 0030
04

OOOD OOOD
OOOD OOOD OOOD OOOD 0000 0000 0001
0003 0004 0004 0000 OOOD 0000 0000 OOOD OOOD OOOD OOOE 0010 0011 0011 0011 0012 0014
0015 0015 0015 0016 0018 0019

343

344 TABLES OF ADAPTER-DEPENDENT INFORMATION

345

346 THE TABLE OFFSETS ARE:

347

348

$DEFINI ADPTAB

349

350 ADPTAB IDBUNITS:.BLKB

# UNITS TO SET IN IDB

351 ADPTAB-ADPLEN: .BLKW

LENGTH OF ADP

352 ADPTAB-ATYPE: .BLKB

ADP TYPE

353

354

$DEFEND ADPTAB

355

356

357 TABLES THEMSELVES:

358

359

360 MBA TAB:

TABLE OF MBA CONSTANTS

361

.BYTE 8

# UNITS IN MBA IDB

362

.WORD ADP$C MBAADPLEN

# BYTES IN MBA ADP

363

.BYTE AT$ MBA

MBA ADAPTER TYPE

364

365 DRTAB:

TABLE OF OR32 CONSTANTS

366

.BYTE 1

# UNITS IN DR IDB

367

.WORD ADP$C DRADPLEN

# BYTES IN DR ADP

368

.BYTE AT$_DR

DR A.DAPTER TYPE

369

370 CITAB:

TABLE OF CI CONSTANTS

371

.BYTE 1

# UNITS IN CI IDB

372

.WORD ADP$C CIADPLEN

# BYTES IN CI ADP

373

.BYTE AT$ CI

CI ADAPTER TYPE

374

INIADP780 V03-021
;KPL0100 ;KPL0100 ;KPL0100 ;KPL0100 ;KPLOlOO ; RLRSCORPIO ; RL~SCORPIO ; RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO -7
;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ;KPL0100 ;KPLOlOO ;KPLOlOO ;KPLOlOO ;KPLOlOO ; KPL0.100 ;KPL0100

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 11

CPU-specific data structures

19-0CT-1983 11:50:19 DISK$VMSMASTER: [SYSLOA.SRC]INIADP.(5)

04EC'
00000001 00000000
00000040 OOOOOOE4 000001E4 000002E4

0019 0019 0019 0019 0019 0019 0019 0019 0019 0019 0018 0018 0018 0018 0018 0018 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 OOAO OOA4 OOA4 OOA4 OOA4 OOA4 OOA4 OOA4 OOA4 OOA4 OOA4 00A4 OOA4 OOA4 OOA4 OOA4 OOA4 OOA4 OOA4 OOE4 OOE4 01E4 01E4

378

.SBTTL CPU-specific data structures

379

380 To add a new CPU type:

381

1) Create a new nexus descriptor table, using FLOAT NEXUS and

382

FIXED_NEXUS macros. Put an END NEXUSDESC macro at the end.

383

384

386

387 CPU ADPSIZE:

388

-

. WORD ADP$C U8AADPLEN+UBINTSZ+<NUMUBAVEC*4>

389

.1

. 2

. 3 Declare the beginning of a nexus-descriptor table.

.4

.5

NEXUSDESC TABLE LABEL=NEXUSDESC

.6

. 7

.8 Describe al 1 possible nexuses on an 11/780.

.9

. 10

S8I CPU = 1

.11

= BI CPU

0

397

FLOAT NEXUS -

398

- PHYSADR=I0780$AL IOBASE, -

3·99

NUMNEX=I0780$AL NNEX, -

400

PERNEX=I0780$AL-PERNEX

401

END NEXUSDESC

403

436

458

495

496

513

.24

.25

.26 Nexus "descriptor" arrays -- U1ese ar·r·ays hold the nexus-device type and

.27 virtual address of every adapter on the system. The arrays, CONFREGL and

.28 S8ICONF, are al located enough space to hold the maximum number of adapters

.29 that can be attached to any CPU. When the code discovers how many adapters

.30 actually exist on the system, it will al locate space from non-paged pool

. 31 and move a permanent copy of these arrays into that space.

.32

.33 MAXNEXUS = 64

.34 CONFREG:

.35

.8LK8

MAXNEXUS

Byte array of nexus-device type codes ..

.36 SBICONF:

.37

.BLKL

.38 CON FR EGL:

MAXNEXUS

Longword array of VAs of adapter space.

.39

.BLKL MAXNEXUS

Longword array of nexus-device type codes

INIADP780 V03-021

- ADAPTER INITIALIZATION FOR VAX 11 /780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 12

Message strings

19-0CT-1983 11: 50: 19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP.(6)

00000000 OOOOOOOA
45 58 45 25 OA OD 20 54 49 4E 49 43 75 73 6E 49 20 46 65 69 63 69 66 66 54 50 53 20 74 6E 69 72 74 6E 65 20
00 OA OD 73 65
45 58 45 25 OA OD 2D 54 49 4E 49 43 42 49 4E 55 2D 46 60 65 60 20 53 55 6F 64 20 79 72 6F 74 6F 6E 20 73 65 74 72 61 74 73 20 OD 30 20 74 61 20
00 OA

02E4 02E4 02E4 02E4 02E4 02E4 02EA 02FO 02F6 02FC 0302 0308 030D 030D 0313 0319 031F 0325 032B 0331 0337 0330

528

.SBTTL

529
530 CR = 13 531 LF = 10

532 NOSPT:

533

.ASCIZ

Message strings <CR><LF>/%EXECINIT-F-Insufficient SPT entries/<CR><LF>

535 BADUMR:

536

.ASCIZ <CR><LF>/%EXECINIT-f-UNIBUS memory does not start at O/<CR><LF>

INIADP780 V03-021
;RLR'SCORPIO ; RLRSCORPIO ; RLRSCORP0IO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO -4

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-0l

Page 13

INI$IOMAP, Initialize and map nexuses

19-0CT-1983 11:50:19 DISK$VMSMASTER:[SVSLOA.SRC]INIADP.(7)

OFFF BF
OOOOOOOO'GF 52
OOOOOOOO'GF 53
53 6342 52 52 09
80000000 BF 52 54
OOOOOOOO'GF 59
SC A9 F7 SF

033F 033F 033F
033F 033F
033F 033F 033F 033F 033F 033F 033F 033F 033F
033F 033F 033F 033F 033F 033F 033F 033F 033F 033F 033F
033F 033F 033F 033F 033F 033F 033F 033F 033F 033F 033F 033F 033F 00000000 0000 0000
BB 0000
0004 0004 0004 DO 0004 OOOA DO OOOB 0011 DE 0012 78 0016
ca OOlA
0020
04 0021 DO 0023
0029 78 002A

539

.SBTTL INI$IOMAP, Initialize and map nexuses

540 ;++

541 FUNCTIONAL DESCRIPTION:

542

This routine is executed only once, during system initialization.

543

It loops through al 1 nexuses on the system, testing for

544

adapters. When it finds an adapter, it maps its I/O space and

545

initializes it.

546

547 INPUTS:

548

800$GL SPTFREL - next free VPN

549

MMG$GL-SPTVASE - base of system page table

550

EXE$GL-RPB

- address of reboot parameter block

552

RPB$L_ADPPHV(RPB) -· PFN of boot adapter space

554

555 OUTPUTS:

556

RO - SS$_NORMAL

557

558

For each adapter found, its accessible I/O space is mapped to virtual

559

addresses. An ADP (Adapter Control Block) is built, and the hardware

560

adapter is initialized.

561

562

The arrays CONFREG (a byte array of nexus-device type codes, defined

.1

by NOT$ symbols) and SBICONF (a longword array of

. 2

virtual-addresses that map adapter space) are initialized. Pointers

.3

to these arrays are stored in EXE$GL CONFREG and

.4

MMG$GL SBICONF. The number of entries in these two parallel arrays is

.5

stored-in EXE$GL NUMNEXUS.

. 6

. 7

Since BI devices have a 16-bit device type code, a new CONFREG array is

.8

constructed. This is a longword array called CONFREGL.

567

568

Several locations in the RPB that describe the boot device are init'ed:

569

RPB$L BOOTRl

- holds index into CONFREG and SBICONF for the boot

570

adapter

571

RPB$L ADPVIR

- holds VA of boot device adapter's register space

572

RPB$L=CSRVIR

- holds VA of boot device's register space

573

574

575

.PSECT $$$INIT$CODE,QUAD

576 INI$IOMAP::

577

578

PUSHR #AM<RO,Rl ,R2,R3,R4,R5,R6,R7,R8,R9,Rl0,Rll>

579

580 Set up common inputs to CONFIG_IOSPACE subroutine for the CPU-specific code.

581

582

MOVL

GA800$GL_SPTFREL,R2

Get next available VPN.

583

MOVL

GAMMG$GL SPTBASE,R3

Get base of System Page Table.

584

MOVAL (R3)[R2],R3

585

ASHL

#9,R2,R2

586

BISL

#VA$M SVSTEM,R2

Compute SVASPT. Convert VPN to VA. Set system bit.

587

CLRL

R4

588

MOVL

GAEXE$GL_RPB,R9

Clear index into CONFREG and SBICONF. Get address of RPB.

590

ASHL

#-9,RPB$L_ADPPHV(R9),Rl0; Get PFN of boot adapter space~

INIADP780 V03-021
;KPL0100

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 14

INI$IOMAP, Initialize and map nexuses

19-0CT-1983 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC)INIADP.(7)

5A

002F

OOE4'CF DE 0030 592

OOOOOOOO'GF

0034

OOA4'CF DE 0039 593

OOOOOOOO'GF

003D

01E4'CF DE 0042

.1

OOOOOOOO'GF

0046

MOVAL MOVAL MOVAL

WASBICONF,GAMMG$GL_SBICONF ; Set pointers to local copies WACONFREG,GAEXE$GL_CONFREG ; of these arrays for in it routines.
WACONFREGL,GAEXE$GL_CONFREGL ; ...

INIADP780 V03-021

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-0l

Page 15

INITADP_780, 750, 730, and UVl

19-0CT-1983 11:50:19 DISK$VMSMASTER: [SVSLOA.SRC]INIADP.(8)

004B 691

.SBTTL INITADP 780, 750, 730, and UVl

004B 692

004B 693 I/O address space for the 11/780, 11/750, 11/730, and Micro-VAX I cpus

0048 694 is statically defined in their respective nexus descriptor tables.

0048 695

56 0020'CF DE 0048 696

MOVAL W1'NEXUSDESC,R6

Get address of nexus table.

5B 04 0050 697

CLRL

R 11

Signal use 1st page of SCB.

OB 10 0052 698

BSBB

CONFIG IOSPACE

Configure processor I/O space.

0054 699

0054 701

OOC3 30 0054 702 OFFF 8F BA 0057 703

8SBW POPR

CREATE ARRAYS

; Create CONFREG and S8ICONF arrays.

#1'M<RO~R1 ,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>

50 01 DO 0058 704

MOVL

#1 ,RO

; Set success status

05 005E 705

RSB

; Return.

INIADP7BO V03-021
RLRSCORPIO RLRSCORPIO RLRSCORPIO RLRSCORPIO RLRSCORPIO RLRSCORPIO
KPLOlOO KPL0100 KPLOlOO

- ADAPTER INITIALIZATION FOR VAX ll/7BO 3-JUN-19B4 14:53:36 VAX-11 Macro V03-0l

Page 16

CONF I G IOSPACE

19-0CT-19B3 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP.(9)

F8 A6 0004'CF
FC A6 0005'CF
5B B6 01
90000000 BF 63 5B
51 62
11 50
OOA4'CF44 01E4'CF44
55

005F
005F 005F
005F 005F 005F 005F 005F 005F 005F. 005F 005F 005F 005F 005F 005F 005F 005F 005F 005F 005F 005F 005F 005F 005F
005F 005F 005F 005F 90 005F 0062 DO 0065 0068 0068 006B DO 0068 12 006E 05 0070 0071 0071 0071 0071 0071 C9 0071 0077 0079 0079 DO OOB5 OOB8 0089 EB 008C OOBF 008F OOBF 94 008F 04 0094 04 0099

70B

.SBTTL CONFIG_IOSPACE

709

710 CONF I G !OS PACE

711

Given a nexus descriptor table, which describes what "nexuses" or

712

"slots" are available on a system to hold I/O adapters, find and

713

initialize all adapters on the system.

714

715 Inputs:

716

R2 - next available virtual address, to be used for mapping I/O space

717

R3 - address of PTE associated with VA in R2

71B

R4 - Current index into CONFREG and SBICONF arrays (should be 0 the

719

first time CONFIG IOSPACE is cal led)

720

R6 - address of nexus descriptor table

721

R9 - address of Restart Parameter Block (RPS)

722

R10 - PFN of boot adapter space

723

R11- page offset from beginning of SC8; tel ls which page of the SCB

724

to use for this set of nexuses (passed to routines that init ADP)

725

726 Outputs:

727

R2,R3,R4 - updated

72B

R9,Rl0,Rll - preserved; all other registers potentially modified

729

CONFREG - initialized with adapter NOT$ code for each nexus

730

SBICONF - initialized with adapter space VA for each nexus

731

732 CONFIG IOSPACE:

734

735 Main loop. Map and initialize all adapters on system.

736

.1

. 2

MOVB

CSR LEN OFFSET(R6),-

Move length of adapter type field

. 3

WABUS CSR LEN

in CSR's to static location.

.4

MOVL

BUS CODE OFFSET(R6),-

Move software defined bus type code

.5

W/\$W BUS-CODE

to static longword.

.6

742 NXT NEXUS:

For each nexus ...

743

MOVL

(R6)+,R8

Get PFN of nexus.

745

8NEQ

TEST NEXUS

If PFN non-zero, go test the slot.

·746

RSB

747

If 0, we've found all nexuses.

74B Read configuration register to determine if anything is present at this

749 nexus.

750

751 TEST NEXUS:

752

BISL3 #PTE$M VALID!PTE$C KW,- ; Temporarily associate VA in R2 with

753

R8,(R3)

-

; PFN in RB via SPTE in R3.

754

$PRTCTINI BA10$, -

; Protect fol lowing code from non-

755

#<MCHK$M NEXM!MCHK$M LOG>; existent memory machine checks.

756

MOVL

(R2),R1 -

- ; Read adapter configuration register.

757

$PRTCTEND 10$

End of protected code.

758

INVALID R2

759

BLBS

RO,GET TYPE

Clear TB of temporary mapping. Branch if no machine check occurred.

760

761 No adapter present at this nexus.

762

.1

CLRB

W/\CONFREG[R4J

Store "unknown" type in CONFREG

.2

CLRL

W/\CONFREGL[R4J

.3

CLRL

R5

and in CONFREGL also. Use general memory type to map

INIADP780 V03-021
;KPL0100 ;KPL0100 -4
;RLRSCORPIO "; RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ; RLR'SCORPIO ; RLRSCORPIO ; RLRSCORP'IO ;RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO -16

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 17

CONFIG_IOSPACE

19-0CT-1983 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP.(9)

56 04 59
57 86 14
0004'CF 01 05
57 51 03
57 51 57 0005'CF
OOA4'CF44 57 01E4'CF44 57
55 50 OOOO'CF45
OOOO'CF BE 50
3F 60 57
04 55 EB
5A 58 15
60 A9 52 20 AS 54
OD 00 51 54 A9
1000 C241 58 A9

0096
co 0096
11 DOSE OOAO OOAO OOAO OOAO
DO OOAO 12 OOA3
OOA5 OOA5 OOA5 OOA5
OOA5 91 OOA5
OOAA 13 OOAA 3C OOAC 11 OOAF SA 0081
0084
ca 0084
0089 0069 0089 0089 008S
so 0089
DO OOBF D4 OOC5
OOC7 DE OOC7 9F OOCO 01 0001 lE 0004 01 0006 13 OOD9 06 OOD6 1 1 ODDO
OODF OODF OODF OODF OODF Dl OODF 12 OOE2 DO OOE4 DO OOEB EF OOEC
OOEF OOF2 9E OOF2 OOF7 OOF9
OOF9 OOF9
OOF9

.4

one page of I/O space.

.5

ADDL2 #4,R6

Step past type code in nexus table.

767

8R8

MAP NEXUS

Go map I/O space for this nexus.

769

770 Execution continues here if adapter was present.

771

772 GET TYPE:

.1

-

MOVL

(R6)+,R7

; Get nexus-device type from nexus table.

. 3

BNEQ

GET GEN TYPE

; Branch if fixed slot.

.4

. 5 Floating-type slot. Use type from configuration register .

.6 Determine if type in configuration register is 8-bits or 16-bits.

. 7

· 8

.9

CMPB

#1,W/\BUS_CSR LEN

Determine length of adapter type

. 10

field in CSR contained in R7.

. 11

BEQL

10$

EQL implies 1 byte (8-bit) field.

. 12

MOVZWL R1 ,R7

BI LIKE, so use word instruction.

. 13

8RB

20$

Skip byte instruction.

. 14 10$:

MOVZBL R1, R7

Use byte instruction to get type.

. 15 20$:

.16

BISL

WASW_BUS CODE,R7

Or in software bus code.

. 18

. lS Here R7 has hardware adapter code or'ed with software bus code.

.20 Translate specific nexus device type code into general adapter type code.

. 21 .22

G' ET

GEN

TYPE:

.23

- -MOVB

R7,WACONFREG[R4]

Save nexus-device type in CONFREG.

.24

MOVL

R7,WACQNFREGL[R4]

CONFREGL also filled in.

.25

CLRL

R5

Clear loop index.

.26 30$:

.27

MOVAL WAADAPTERS[R5],RO

Get address of adapter type code.

.28

PUSHAB WANUM PAGES

Push addr of end of ADAPTERS array.

.29

CMPL

RO, (SP)+

See if we went beyond array.

.30

BGEQU END NEXUS

unrecognized adapter, do not map.

.31

CMPL

R7,(RO)

Adapter type match~

.32

8EQL

40$

.33

INCL

R5

.34

8R8

30$

If EQL yes, adapter type match. Increment loop index. Look at next adapter.

.35 40$:

789

790

791 Store boot parameters.

792

794

CMPL

R8,R10

795

BNEQ

MAP NEXUS

Does PFN match boot adapter's PFN? No; continue.

797

MOVL

R2,RP8$L ADPVIR(R9)

Store VA of boot adapter space.

798 7S9

MOVL EXTZV

= R4,RPB$L-600TR1(R9)
#0,#13,

Store boot adapter nexus number. Get offset into UNI8US/Q6US I/O page.

800

RPB$L CSRPHY(R9),R1

801

MOVA8 <8*512>(R2)[R1], -

Set VA of UNI8US/Q6US registers.

802

RPB$L_CSRVIR(R9)

803

804

605

INIADP780 V03-021

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 18

CONFIG IOSPACE

19-0CT-1983 11:50:19 DISK$VMSMASTER:[SVSLOA.SRC]INIADP.(9)

OOE4'CF44 52 51 OOOO'CF45
6C 51 OOOO'CF45
61 04 00 6141
54 FF51

OOF9
OOF9 OOF9 OOF9 OOF9 OOF9 DO OOF9 3C DOFF 10 0105 DE 0107 05 010D 13 010F 16 0111 0115 06 0115 31 0117 01 lA

806 ; R5/ general adapter type; index into "general" adapter arrays.

807 ; For each adapter -

808 ;

Map the # of pages specified in ADAPDESC macro

809 ;

JSB to in it i a 1 i za ti on routine specified in ADAPDESC macro

810 ;

811 MAP_NEXUS:

816

MOVL

R2,WAS8ICONF[R4]

; Save VA of adapter space in SBICONF.

817

MOVZWL WANUM PAGES[R5] ,Rl

; Get number of pages to map.

818

BSBB

MAP PAGES

; Map the I/0 pages.

819

MOVAL WA!NIT_ROUTINES[R5] ,Rl ; Get address of initialization routine.

820

TSTL

( R1)

; In it i a 1i za ti on routine specified?

821

BEQL

END NEXUS

; Branch if none.

822

JSB

@(Rl)[Rl]

: Ca 11 in it i a 1 i za ti on routine.

823 END_NEXUS:

824

INCL

R4

; Increment CONFREG and SBICONF index.

826

BRW

NXT NEXUS

; Go do next nexus.

830

INIADP7BO V03-021
KPL0100 KPL0100 KPL0100 KPL0100 KPL0100 KPL0100 ;KPL0100 ;KPLOlOO ;KPL0100 ;KPL0100 ;KPL0100 KPL0100 KPLOlOO KPL0100 KPLOlOO ;KPL0100 ;KPL0100 ;KPLOlOO ;KPL0100 -11

- ADAPTER INITIALIZATION FOR VAX 11/7BO 3-JUN-1984 14:53:36 VAX-11 Macro V03-0l

Page 19

CREATE_ARRAYS

19-0CT-1983 11:50:19 DISK$VMSMASTER: [SYSLOA.SRC]INIADP(10)

54 OOOOOOOO'GF 51 QC A444
51 6144 02A7 82
B2 51 B2 0763 BF
62 OOOOOOOO'GF
51 6244 51
OOOOOOOO'GF 6144
OOOOOOOO'GF 14
OOA4'CF 54 62 14
51 54 04 7E 51
OOE4'CF 51 6244
51 BE 01E4'CF 51
63

011 A 011A 011A 011A 01 lA 01 lA 011A 01 lA 01 lA 01 lA 011A 011A 011A 01 lA 01 lA 01 lA 01 lA 011A DO 01 lA
011 c
DE 0121 0126
DE 0126 30 012A 7C 012D BO 012F BO 0132 9E 0137
0139 9E 013E DO 0142
0144 DE 0149
014C BB 0151 2B 0153
015B BA 0159 C5 0158 DO 015F 2B 0162
0167
DO 0169
2B 016C 0171 0172 0172 0172
05 0172

B32

.SBTTL CREATE ARRAYS

833

834 CREATE ARRAYS

B35

836

Move the local CONFREG and SBICONF arrays into non-paged pool.

837

838 Inputs:

839

R4 - Number of nexuses on the system.

840

CONFREG and SBICONF have been initialized.

841

842 Outputs:

843

RO - R5 destroyed

844

EXE$GL CONFREG points to a copy of the CONFREG ar·ray in non-paged pool

845

MMG$GL-SBICONF points to a copy of the SBICONF array in non-paged pool

846

EXE$GL=NUMNEXUS contains the number of nexuses on the system

847

848

849 CREATE ARRAYS:

850

- MOVL

R4,GAEXE$GL NUMNEXUS

Store number of nexuses on system.

851

MOVAL 12(R4) [R4] ,Rl

Al locate n bytes for CONFREG plus

852

4n bytes for SBICONF + header

.1

MOVAL ( R 1 ) [ R4 J , R 1

Another 4n bytes for CONFREGL.

.2

BSBW

ALON PA GD

Get pool for CONFREG and SBICONF.

. 3

CLRQ

(R2)+

Clear out unused

.4

MOVW

Rl, (R2)+

Set in size

. 5

MOVW

#<DYN$C CONF@B>!DYN$C INIT,(R2)+ ; Set type and subtype

.6

MOVAB (R2),GAEXE$GL CONFREG

Store address of system CONFREG.

.7

MOVAB (R2) [R4J ,Rl

Two steps to CONFREGL, 1st, SBICONF,

.8

MOVL

Rl,GAMMG$GL SBICONF

Store address of system SBICONF.

.9

MOVAL (R1)[R4] ,GAEXE$GL CONFREGL ; And address of system CONFREGL.

. ,0

PUSHR #AM<R2,R4>

Save pool address and nexus count.

.11

MOVC3 R4,WACONFREG,(R2)

Copy CONFREG to pool.

. 12

POPR

#AM<R2,R4>

Retrieve pool address and nexus count.

. 13

MULL3 #4,R4,R1

Number of bytes in SBICONF.

. 14

MOVL

Rl ,-(SP)

Save, SBICONF size = CONFREGL size

. 15

MOVC3 Rl,WASBICONF,(R2)[R4J

Copy SBICONF to pool.

. 16

MOVL

(SP)+,Rl

Restore size of SBICONF and CONFREGL.

. ,7

MOVC3 Rl,WACONFREGL,(R3)

Copy CONFREGL to pool. R3 is output

. 18

. 19

864

865

RSB

from SBICONF MOVC3, so SBICONF and CONFREGL must be adjacent.

INIADP7BO V03-021

- ADAPTER INITIALIZATION FOR VAX 11/7BO 3-JUN-19B4 14:53:36 VAX-11 Macro V03-0l

Page 20 -

MAP_PAGES

19-0CT-1983 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP(11)

90000000 BF 83 5B
58 52 0200 C2
OOOOOOOO'GF OOOOOOOO'GF OOOOOOOO'GF
04 DB 51
51 02E4'CF
5B OOOOOOOO'GF

0173 0173 0173 0173 0173 0173 0173 0173 0173
017~
0173 0173 0173
0173 0173 C9 0173 0179 017B D6 017B 9E 0170 06 0182 01 0188 OlBE 0193 15 0193 F5 0195 05 0198 0199 0199 9E 0199 019E 04 019E 16 01AO 00 01A6

867

.SBTTL MAP PAGES

868 ;++

869 INPUTS:

870

Rl/ Number of pages to map.

871

R2/ VA of page to map.

872

R3/ VA of system page table entry to be used.

873

RB/ PFN of page(s) to map.

B74

875 OUTPUTS:

876

R2,R3 updated; Rl ,RS destroyed; all other registers preserved

877

878

879

880 MAP PAGES:

8Bl

882

BISL3 #<PTE$M_VALIO!PTE$C KW>,R8,(R3)+

883

Map a page.

884

INCL

RS

Next PFN.

885

MOVAB 512(R2) ,R2

Next VA.

886

INCL

GAB00$GL SPTFREL

Next free entry.

887

CMPL

GAB00$GL=SPTFREH, -

Check for no more system page

888

889

BLEQ

890

SOBGTR

891

RSB

892

893 ERROR HALT:

894

- MOVAB

895 ERROR HALT 1:

896

- CLRL

897

JSB

898

HALT

GAB00$GL SPTFREL ERROR HALT Rl,MAP PAGES
WANOSPT,Rl Rl 1 GAEXE$0UTZSTRING

table entries. Branch if out of SPTEs. Map another page. Al 1 done.
Set error message.
Indicate console terminal. Output error message.
***** FATAL ERROR *******

INIADP780 V03-021
;KPL0100 -1
;RLRSCORPIO ;RLRSCORPIO ; RLR.SCORPIO ;RLRSCORPIO -2

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-0l

Page 21

INI$UBSPACE

19-0CT-1983 11:50:19 DISK$VMSMASTER: [SYSLOA.SRC]INIADP(13)

58 01E4'CF44 69 02 00 58 58 58 09
001009FO BF 58
51 10 FFBO

01A7 1016

.SBTTL INI$UBSPACE

01A7 1017 ;++

01A7 1019

Map UNIBUS space; ihitialize UNIBUS ADP.

01A7 1019

01A7 10.20 INPUTS:

01A7 1021

R2 - VA of next free system page

01A7 1022

R3 - VA of system page table entry to be used to map VA in R2

01A7 1023

R4 - nexus identification number of this adapter

01A7

.1

-8(R6) - PFN of this UNIBUS adapter's register space

01A7 1025

01A7 1026 OUTPUTS:

01A7 1027

UNIBUS space is mapped.

01A7 1028

INI$UBADP is called to build an ADP block and initialize UNIBUS

01A7 1029

adapter hardware.

01A7 1030

01A7 1031

01A7 1032

01A7 1033 INI$UBSPACE:

01A7 1034

DE 01A7

.3

MOVAL WACONFREGL[R4] ,RB

RB => CONFREGL slot.

EF OlAD

.4

EXTZV #0,#2,(R8),R8

Get UBA number.

01B1

18 01a2

. 5

ASHL

#9,R8,R8

Position UB number.

01B6

.8

01B6 1037
co 01B6 1039

ADDL

#<I07B0$AL_UBOSP+A0760000/AX200>,R8

OlBC

OlBO 1040

; Get PFN of Ub I/0 page.

01BO 1042

01BO 1047

0180 1052

0180 1058

0180 1063

DO OlBD 1064 30 OlCO 1065

MOVL BSBW

#16,Rl MAP PAGES

Number of pages to map (UB/Qbus space). Map I/O pages.

01C3 1066

01C3 1067 Call adapter initialization routine.

01C3 1068

01C3 1069

BSBW

INI$UBADP

!nit ADP block.

01C3 1070

RSB

INIADP780 V03-021

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-0l

Page 22

INI$UBADP - BUILD ADP AND INITIALIZE UBA 19-0CT-1983 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC)INIADP(14)

01C3 1072

.SBTTL INI$UBADP - BUILD ADP AND INITIALIZE UBA

01C3 1073 ;+

01C3 1074 INI$UBADP ALLOCATES AND FILLS IN AN ADAPTER CONTROL BLOCK, INTERRUPT

01C3 1075 DISPATCHER AND CONNECTS THEM TO THE PROPER SCB VECTORS. A CALL IS

01C3 1076 THEN MADE TO UBA$INITIAL TO INITIALIZE THE ADAPTER HARDWARE.

01C3 1077

01C3 1078 INPUT:

01C3 1079

R4 - nexus identification number of this adapter

01C3 1080

Rll- offset from beginning of SCB to correct SCB page for this adapter

01C3 1081

01C3 1082

01C3 1083 INI$UBADP:

01C3 1084

OlFF BF BB 01C3 1085

PUSHR #AM<RO,R1,R2,R3,R4,R5,R6,R7,R8> ; SAVE RO-RB

01C7 1086

01C7 1087 Al locate and initialize Adapter Control Block (ADP).

01C7 1088

51 0019'CF 3C 01C7 1089

MOVZWL WACPU ADPSIZE,Rl

PICK UP LENGTH OF ADP

0205 30 OlCC 1090

BSBW

ALONPAGD

ALLOCATE SPACE FOR ADP

08 A2 51 BO OlCF 1091

MOVW

Rl ,ADP$W SIZE(R2)

SET SIZE INTO ADP BLOCK

OA A2 01 90 0103 1092

MOVB

#DYN$C ADP, -

AND SET TYPE OF BLOCK

0107 1093

ADP$B TYPE(R2)

OE A2 01 BO 0107 1094

MOVW

#AT$ USA, -

SET TYPE OF ADAPTER

OlDB 1095

ADP$W ADPTYPE(R2)

62 OOE4'CF44 DO OlDB ·1096

MOVL

WASBICONF[R4]. -

SET VA OF CONFIGURATION REG

OlEl 1097

ADP$L CSR(R2)

OC A2 54 BO OlEl 1098

MOVW

R4,ADP$W_TR(R2)

SET TR NUMBER FOR ADAPTER

01E5 1099

50 14 A2 DE 01E5 1100

MOVAL ADP$L DPQFL(R2),RO

ADDRESS OF DATA PATH WAIT QUEUE

60 50 DO 01E9 1101

MOVL

RO,(RO)

!NIT QUEUE HEADER

04 AO 50 DO OlEC 1102

MOVL

R0,4(RO)

OlFO 1103

50 30 A2 DE OlFO 1104

MOVAL ADP$L MRQFL(R2),RO

ADDRESS OF MAP WAIT QUEUE

60 50 DO 01F4 1105

MOVL

RO. (RO)

!NIT QUEUE HEADER

04 AO 50 DO 01F7 1106

MOVL

R0,4(RO)

04 A2 D4 OlFB 1107

CLRL

ADP$L LINK ( R2)

ZAP ADAPTER CHAIN LINK

FDFF' 30 01FE 1108

BSBW

ADPLINK

LINK ADP TO END OF LIST

0201 1109

0201 1110 Initialize adapter interrupt vectors in System Control Block.

0201 11 1 1

OOOOOOOO'GF DO 0201 1112

MOVL

GAEXE$GL_SCB,R8

GET SCB ADDRESS

58

0207

0208 1113

0208 1120

0208 1122

0208 1123

0208 1124 Following ASSUME breaks if the ADP length is not a multiple of 4, thereby

0208 1125

causing the vectors to NOT be long word aligned.

0208 1126

0208 1127

ASSUME ADP$C_UBAADPLEN/4*4

EQ

ADP$C_UBAADPL:.EN

0208 1128

53 02EC'C2 9E 0208 1129

MOVAB ADP$C UBAADPLEN+UBINTSZ(R2)hRS ; LOCATE VECTORS

10 A2 53 DO 020D 1130

.MOVL

R3, ADP$L VECTOR ( R2)

; AND 'RECORD IN ADP

FFFE BF BO 0211 1131

MOVW

#AXFFFE,ADP$W_DPBITMAP(R2) ; MARK DATAPATHS 1-15 AVAILABLE

60 A2

0215

53 FF6C'C3 9E 0217 1132

MOVAB -UBINTSZ(R3),R3

BASE OF INTERRUPT CODE

3F BB 021C 1133

PUS HR #AM<RO,Rl,R2,R3,R4,R5>

SAVE MOVC REGISTERS

INIADP780 V03-021

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 23

INI$UBADP - BUILD ADP AND INITIALIZE UBA 19-0CT-1983 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP(14)

0094·' 8F 63 0340'CF
3F 54 04 00
54 50 0100 C844
1C A2 50 60 01'A3 40 AO 21'A3
41 'A3
0080 co
61 'A3
ooco co
50 62 OA'A3 50 2A'A3 50 4A'A3 50 6A'A3 50 0089'C3 52
OOOO'CF 0090'C3
01 'A3 44 A2 21 'A3 48 A2 41 I A3 4C A2 61 'A3 50 A2 54 52 52 62 7COOOOOO BF 04 A2 OOOOOOOO'GF 54 A4 63 58 A4 20 A3
52 54 OOOOOOOO'GF
53 54 OOOO'CP:
50 10 A2 80 54
51 7F BF 80 53 FA 51

28 021E 1134

MOVC3 #UBINTSZ,WAUBAINTBASE,(R3)

COPY INTERRUPT CODE

0222

BA 0226 1135

POPR

#AM<RO,Rl ,R2,R3,R4,R5>

RESTORE MOVC REGISTERS

EF 0228 1136

EXTZV #0,#4,R4,R4

Use low 4 bits of nexus number.

022C

DE 022D 1137

MOVAL AXlOO(RB) [R4J ,RO

COMPUTE lST VECTOR ADDRESS

DO 0233 1138

MOVL

RO,AOP$L AVECTOR(R2)

SAVE ADDR OF ADAPTER SCB VECTORS

9E 0237 1139

MOVAB BAUBAINT4+1(R3),(RO)

STORE VECTOR FOR BR4

9E 0238 1140

MOVAB BAUBAINT5+1(R3),64(RO)

STORE VECTOR FOR BR5

9E 0240 1141

MOVAB BAUBAINT6+1(R3),128(RO) STORE VECTOR FOR BR6

0243

9E 0246 1142

MOVAB BAUBAINT7+1(R3),192(RO) STORE VECTOR FOR BR7

0249

DO 024C 1143
co 024F 1144 co 0253 1145 co 0257 1146 co 0258 1147

MOVL ADDL ADDL ADDL ADDL

ADP$L CSR(R2),RO R0,BALJBAINT4REL(R3) R0,BAUBAINT5REL(R3) R0,BAUBAINT6REL(R3) R0,BAUBAINT7REL(R3)

GET UBACSR ADDRESS ADD CSR VA TO EACH OF THE BICL INSTRUCTIONS IN THE INTERRUPT DISPATCHERS

DO 025F 1148

MOVL

R2,UBAINTADP(R3)

SET ADDRESS OF ADAPTOR CONTROL BLOCK

9E 0264 1149

MOVAB WAEXE$UBAERR INT,-

0268 1150

UBAERRADR(R3)

: SET ADDRESS OF ERROR HANDLER

9E 026B 1151

MOVAB BAUBAINT4+1(R3),-

026E 1152

ADP$L UBASCB(R2)

; SAVE 4 SCB VECTOR CONTENTS

9E 0270 1153

MOVAB BAUBAINl5+1(R3),-

0273 1154

ADP$L UBASCB+4(R2)

: DITTO

9E 0275 1155

MOVAB BAUBAINT6+1(R3),-

0278 1156

ADP$L UBASCB+B(R2)

: DITTO

9E 027A 1157

MOVAB BAUBAINT7+1(R3),-

027D 1158

ADP$L UBASCB+12(R2)

DITTO

DO 027F 1159

MOVL

R2,R4 -

COPY ADP ADDRESS

DO 0282 1160

MOVL

ADP$L CSR(R2),R2

VIRTUAL ADDRESS OF ADAPTER

DO 0285 1161 0288

MOVL

#AX7C500000,UBA$L CR(R2) DISABLE ALL UMR'S

16 028D 1162 DO 0293 1163 DO 0297 1164
029C 1165

JSB MOVL' MOVL

GAMMG$SVAPTECHK (R3),ADP$L UBASPTE(R4) <8*4>(R3),--
ADP$L UBASPTE+4(R4)

ADDRESS OF SPTE THAT MAPS ADAPTER SAVE CONTENTS OF SPTE MAPPING ADAPTER CONTENTS OF SPTE MAPPING I/O SPACE

DO 029C 1166 DE 029F 1167
02A5

MOVL MOVAL

R4,R2GAUBA$UNEXINT ,R3

COPY ADP ADDRESS BACK TO R2 GET ADDR OF UNEXP INT SERVICE(IN EXEC)

DE 02A6 1168 02AB 1169

MOVAL WAUBA$INTO,R4

GET ADDR OF SPECIAL VECTOR 0 ROUTINE

02AB 1170

02AB 1171 INIT UB VECTORS TO UNEXPECTED INTERRUPT SERVICE

02AB 1172

DO 02AB 1173 DO 02AF 1174 9A 0262 1175 DO 0286 1176 10$: F5 0289 1177
02BC , , 78

MOVL MOVL MOVZBL MOVL SOBGTR

ADP$L VECTOR(R2),RO R4, (R5)+ #<NUMUBAVEC-1>,Rl R3,(R0)+ Rl, 10$

GET ADDRESS OF VECTORS SPECIAL CASE FOR VECTOR 0 REST OF VECTORS FILL VECTOR WITH UNEXP INT FILL ALL VECTORS

02BC , 180

02BC 1240

02BC 1241

02BC 1269

02BC 1270

02BC 1291

INIADP780 V03-021
RLRSCORPIO RLRSCORPIO RLRSCORPIO

- ADAPTER INITIALIZATION FOR VAX 11/7BO 3-JUN-19B4 14:53:36 VAX-11 Macro V03-0l

Page 24

INI$UBADP - BUILD ADP AND INITIALIZE UBA 19-0CT-1983 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP(t4)

56 62 DO 51 D4
00000200 BF C3 57 08 AE OC AE 04 C3 58
00000200 SF C3 54 20 AE 6B DD 53 54 DO 55 lF DO
90000000 BF C9 68 54 50 57 DO FDOF 30 OD 50 E9 54 53 Dl 04 13 51 D5 3A 13
51 10 A1 9E 54 10 A4 9E
08 55 F5 6B BEDO
0256 C2 51 BO
5C A2 01 DO OlFO BF 51 A3
64 A2 015E C2 51 BO
62 A2 01 AE 015C C2 01 AE

02BC 02BC 02BC 02BC 02BC 02BC 02BC 02BC 02BC
02BC. 02BC 02BC 02BC 02BF 02C1 02C7 02CA 02CE 02CF 02D5 02DB 020A 0200 02EO 02E3 02E9 02EB 02EE 02F1 02F4 02F7 02F9 02FB 02FD 0301 0305 030B 030B 030E 0313 0313 0313 0313 0313 0313 0313 0313 0313 0313 0317 031C 031E 0323 0327 032C 032C 032C

.1 .43 .44 1340 1341 1342 1343 1344 1345 1346 1347 1348 1350 1351 1353
1354
1355
1356 1357 135B 1359 1360 1361 1362 1363 1364 1365 1366 1367 136B 1369 1370 1371 1372 1373 1375 1377 1378 1379 1380 1381 1382 13B3 13B4 13B5 13B6 13B7
1399 1400 1401 1402 1403 ·1404

Now check for any UNIBUS memory that may be on the adapter. First we must disable all the UNIBUS Map Registers so that there is no conflict in which memory will respond. Then we ch~ck all 248Kb of potential memory in 8Kb chunks, since each disable bit on the 780 UBA represents 16 UMR's or
8Kb of memory. The number of registers is stored in the ADP and the corresponding number withdrawn from the UMR map in the ADP.

MOVL CLRL SUBL3

ADP$L CSR(R2),R6 Rl #512,8(SP),R7

Pick up adapter pointer Zero out number of UMR to disable
R7 = VA of last page of UNIBUS

SUBL3 #4, 12(SP) ,RB

RS VA of SPTE mapping (R7)

SUBL3 #512,32(SP),R4

R4 PFN of first page of UNIBUS

50$:
60$: 70$:

PUSHL (RB)

Save contents of SPTE

MOVL

R4,R3

Copy starting PFN

MOVL

#31 ,R5

31 8Kb chunks to test

INVALID R7

Invalidate TB

BISL3 #<PTE$M VALID!PTE$C KW>,-

R4, (RB)

Map each page of UNIBUS

MOVL

R7,RO

Address to check

BSBW

EXE$TEST CSR

Validate it

BLBC

R0,70$

Not there

CMPL

R3,R4

First time in?

BEQL

60$

Yes, skip next test

TSTL

R 1

Any registers already?

BEQL

80$

No, memory not start at 0

MOVAB 16(Rl) ,Rl

Yes, up the count

MOVAB 16(R4),R4

Map Next BKb (16*512)

SOBGTR R5,50$

Loop until done

POPL

(RB)

Restore old contents of SPTE

INVALID R7

Invalidate TB

MOVW

R1,ADP$W_UMR DIS(R2)

Record number disabled

Initialize fields for new UBA map register allocation~ Make it appear that we have one contiguous array of 496 available map registers. To do this we set ADP$L MRACTMORS to one (the number of active map register descriptors for distinct contiguous areas), ADP$W MRNREGARV(O) to 496 (i .e the number of registers in this contiguous range) and ADP$FREGARV(O) to 0 (i.e. the first register in the range is register 0).

MOVL SUBW3

#l,ADP$L MRACTMDRS(R2) ; 1 active map descriptor Rl,#496,ADP$W_MRNREGARY(R2); for a range of 496 registers

MOVW MNEGW MNEGW

Rl,AOP$W MRFREGARV(R2) #1,AOP$W-MRNFENCE(R2) #l,ADP$W=MRFFENCE(R2)

starting at register zero. Also init "fences" which preceed
the two descriptor arrays.

Initialize adapter hardware.

INIADP780 V03-021

- ADAPTER I~ITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-0l

Page 25

INI$UBADP - BUILD'ADP AND INITIALIZE UBA 19-0CT-1983 11:50:19 DISK$VMSMASTER: [SVSLOA.SRC]INIADP(14)

54 62 DO 032C 1405

MOVL

ADP$L CSR(R2),R4

; Get CSR address to init

FCCE I 30 032F 1406

BSBW

UBA$INITIAL

; And initialize adapter

OlFF SF BA 0332 1407

POPR

#AM<RO,R1,R2,R3,R4,R5,R6,R7,R8> ; Restore registers

05 0336 1408

RSB

; Return

0337 1409

0337 1411

0337 1412 ; Error if UNIBUS memory not start at location 0

51

030D'CF

9E

0337 0337

1413 1414

8' 0$:

MOVAB WABADUMR,Rl

Set error message

FE5F 31 033C 1415

BRW

ERROR HALT 1

Put it out

033F 1417

INIADP780 V03-021
RLRSCORPIO RLRSCORPIO RLRSCORPIO 2

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-0l

Page 26

INI$UBADP - BUILD ADP AND INITIALIZE UBA 19-0CT-1983 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP(14)

00000000 7E 54 7D 7FFFFE03 BF CB 00000030 9F
54 OOOOOOOA 7E 52 7D 55 D4'AF44 9E
65 18 7E 50 70
95 17
00000020 7E 54 7D 7FFFFE03 BF CB 00000034 9F
54 0000002A 7E 52 7D · 55 D4'AF44 9E
45 lB 7E 50 7D
95 17
00000040 7E 54 70 7FFFFE03 SF CB OQ00003B 9F
54 0000004A 7E 52 7D 55 D4'Af44 9E
25 18 7E 50 7D
95 17
00000060 7E 54 7D 7FFFFE03 BF CB 0000003C 9F

033F 033F 033F 033F 033F 033F 033F 033F 033F 033F 033F 033F 033F 033F 033F 033F 0340 0340 0340 0343 0349 034E 034F 034.F
0352 0357 0359 035C 035E 0360 0360 0363 0369 036E 036F 036F 0372 0377 0379 037C 037E 0380 03BO 0383 0389 038E 038F 038F 0392 0397 0399 039C 039E 03AO 03AO 03A3 03A9

1420

1421 UBA INTERRUPT SERVICE ROUTINES. ONE COPY OF THESE ROUTINES IS

1422 MOVED INTO NONPAGED POOL AND RELOCATED FOR EACH UBA.

1423
1424 **** NOTE **** THE CODING SEQUENCE FOR DISPATCHING ON UBA INTTERUPTS

1425 IS ASSUMED IN THE MODULE MCHECK780.MAR. THE ASSUMPTIONS ARE MADE SO

1426 THE MACHINE CHECK HANDLER CAN IDENTIFY A CPU TIMEOUT WHEN THE

1427 BICL3 INSTRUCTION IS READING THE UBA'S BRRVR REGISTER.

142B THE ASSUMPTIONS MADE ARE THAT THE VALUE Of THE VIRTUAL ADDRESS OF THE BRRVR

.1 REGISTER IS AT AN OFFSET OF 10. BYTES PAST THE INTERRUPT VECTOR ENTRY POINT,

. 2 THAT THE PC OF THE INSTRUCTION ACCESSING BRRVR IS 3 BYTES PAST THE INTERRUPT

. 3 VECTOR ENTRY, AND THAT R4 AND R5 ARE SAVED ON THE STACK AT THAT POINT .

1431

1432

1433

.ENABL LSB

1434

.ALIGN QUAD

1435 UBAINTBASE:

; BASE OF UBA INTERRUPT DISPATCHERS

1436 UBAINT4=.-UBAINTBASE

; UBA 0 INTERRUPT DISPATCH LEVEL 4

1437

MOVQ

R4,-(SP)

; SAVE REGISTERS

1438

BICL3 #AX7FFFFE03,@#UBA$L_BRRVR,R4 ; READ VECTOR REGISTER AND CLEAR BITS

1439 UBAINT4REL=.-UBAINTBASE-5

OFFSET TO ADD UBACSR VALUE

1440

MOVQ

R2,-(SP)

SAVE REGISTERS

1441

MOVAB BAVECTAB[R4],R5

GET ADDRESS OF INTERRUPT VECTOR

1442

B~EQ

10$

IF GEQ UBA INTERRUPTS

1443

MOVQ

RO,-(SP)

SAVE REGISTERS

1444

JMP

@(R5)+

DISPATCH INTERRUPT

1445

.ALIGN QUAD

1446 UBAINT5=.-UBAINTBASE

; UBA 0 INTERRUPT DISPATCH LEVEL 5

1447

MOVQ

R4,-(SP)

; SAVE REGISTERS

144B

BICL3 #AX7FFFFE03,@#UBA$L_BRRVR+4,R4 ; READ VECTOR REGISTER AND CLEAR BITS

1449 UBAINT5REL=.-UBAINTBASE-5

OFFSET TO ADD UBACSR VALUE

1450

MOVQ

R2,-(SP)

SAVE REGISTERS

1451

MOVAB 8AVECTAB[R4] ,R5

GET ADDRESS OF INTERRUPT VECTOR

1452

BGEQ

10$

IF GEO UBA INTERRUPTS

1453

MOVQ

RO,-(SP)

SAVE REGISTERS

1454

JMP

@(R5)+

DISPATCH INTERRUPT

1455

.ALIGN QUAD

1456 UBAINT6=.-UBAINTBASE

; UBA 0 INTERRUPT DISPATCH LEVEL 6

1457

MOVQ

R4,-(SP)

; SAVE REGISTERS

1458

BICL3 #AX7FFFFE03,@#UBA$L_BRRVR+8,R4 ; READ VECTOR REGISTER AND CLEAR BITS

1459 UBAINT6REL=.~ueAINTBASE-5

OFFSET TO ADD UBACSR VALUE

1460

MOVQ

R2,-(SP)

SAVE REGISTERS

1461

MOVAB BAVECTAB[R4J ,RS

GET ADDRESS Of INTERRUPT VECTOR

1462

BGEQ

10$

IF GEQ UBA INTERRUPTS

1463

MOVQ

RO,-(SP)

SAVE REGISTERS

1464

JMP

@(R5)+

DISPATCH INTERRUPT

1465

.ALIGN QUAD

1466 UBAINT7=.-UBAINTBASE

UBA 0 INTERRUPT DISPATCH LEVEL 7

1467

MOVQ

R4,-(SP)

; SAVE REG1 STERS

1468

8ICL3 #AX7FFFFE03,@#UBA$L BRRVR+12,R4 ; READ VECTOR AND CLEAR BITS

INIADP780 V03-021

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-0l

Page 27

INI$UBADP - BUILD ADP AND INITIALIZE UBA 19-0CT-1983 11 :50:19 DISK$VMSMASTER: [SYSLOA.SRC]INIADP(14)

54 0000006A 7E 52 7D 55 D4'AF44 9E
05 18 7E 50 7D
95 17 00 54 1F E5 55 D4'AF44 9E 00000000'8F DO
54 00000089 00000000 9F 17 00000090
00000094

03AE 03AF 03AF 0382 0387 0369 03BC 03BE 03C2 03C7 03CD 03CE 03CE
03D4
0304 03D4 0304 03D4 03D4 03D4

1469 UBAINT7REL=.-UBAINTBASE-5

1470

MOVQ

R2,-(SP)

1471

MOVAB BAVECTAB[R4],R5

1472

BGEQ

10$

1473

MOVQ

RO,-(SP)

1474

JMP

@(R5)+

1475 10$:

BBCC

#31 , R4, 20$

1476 20$:

MOVAB 8AVECTAB[R4],R5

1477

MOVL

IA#0,R4

1478 UBAINTADP=.-UBAINTBASE-5

1479

JMP

@#0

1480 UBAERRADR=.-UBAINTBASE-4

1481

.DSABL LSB

1482

1483

. ALIGN LONG

1484 VECTAB:

1485 UBINTSZ=.-UBAINTBASE

1486

OFFSET TO ADD UBACSR VALUE SAVE REGISTERS GET ADDRESS OF INTERRUPT VECTOR IF GEQ UBA INTERRUPTS SAVE REGISTERS DISPATCH INTERRUPT CLEAR ADAPTER ERROR INTERRUPT FLAG (MSB) GET ADDRESS OF INTERRUPT VECTOR GET ADDRESS OF ADAPTOR CONTROL BLOCK
;OFFSET TO START OF LOADED CODE ;ERROR ROUTINE IN ADPERR780
LONGWORD ALIGN VECTORS END OF INTERRUPT CODE, START OF VECTORS SIZE OF UBA INTERRUPT CODE

INIADP780 V03-021

- ADAPTER INITIALIZATION FOR VAX 11/7SO 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 28

INI$MBADP - BUILD ADP AND INITIALIZE MBA 19-0CT-1983 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP(14)

OOOOOOOO'GF
07FF BF 5S 0011 'CF 59 OOOO'CF 5A OOOO'CF
28
07FF SF 5S 0015'CF 59 OOOO'CF 5A OOOO'CF
13
07FF BF 58 OOOD'CF 59 OOOO'CF SA OOOO'CF
51 004S SF B6

03D4 1503

.SBTTL INI$MBADP - BUILD ADP AND INITIALIZE MBA

03D4 1504

.SBTTL INI$DRADP - BUILD ADP AND INITIALIZE DR32

03D4 1505

.SBTTL INI$CIADP - BUILD ADP AND INITIALIZE CI

03D4 1506 +

03D4 1507 INI$MBADP IS CALLED AFTER MAPPING THE REGISTERS FOR A MASSBUS ADAPTER.

03D4 1508 AN ADAPTER CONTROL BLOCK IS ALLOCATED AND FILLED. A CRB AND IDB ARE

03D4 1509 ALSO ALLOCATED AND INITIALIZED. THE ADAPTER HARDWARE IS THEN INITIALIZED

03D4 1510 BY CALLING MBA$INITIAL.

03D4 1511

03D4 1512 INI$DRADP IS CALLED AFTER MAPPING THE REGISTERS FOR THE DR32

03D4 1513 ADAPTER. THE ADAPTER CONTROL BLOCK, CRB, AND IDB ARE ALLOCATED

03D4 1514 AND INITIALIZED. THE ADAPTER HARDWARE IS THEN INITIALIZED BY

03D4 1515 CALLING DR$INITIAL.

03D4 1516

03D4 1517 INI$MBADP AND INI$DRADP SHARE COMMON CODE AFTER THE TABLE OF ADAPTER

03D4 151 S SPECIFIC CONSTANTS IS SELECTED AND STORED IN RB.

03D4 1519

03D4 1520 INPUT:

03D4 1521

R4 - nexus identification number of this adapter

03D4 1522

Rll- offset from beginning of SCB to correct SCB page for this adapter

03D4 1523

03D4 1524 OUTPUTS:

03D4 1525

ALL REGISTERS PRESERVED

03D4 1526

03D4 1527

17 03D4 1528 ALONPAGD:JMP

GAINI$ALONONPAGED

03DA 1529

03DA 1530

.ENABL LSB

03DA 1531

03DA 1532 INI$DRADP:

; INITIALIZE DR32 DATA STRUCTURES

03DA 1533

BB 03DA 1536

PUSHR #AM<RO,Rl ,R2,R3,R4,R5,R6 R7,R8,R9,R10> ; SAVE REGISTERS

DE 03DE 1537

MOVAL WADRTAB,RS

GET DR32 TAB~E OF CONSTANTS

9E 03E3 153S

MOVAB WADR$INT,R9

ADDRESS OF INITERRUPT SERVICE ROUTINE

9E 03E8 1539

MOVAB WADR$INITIAL,R10

ADDRESS OF DEVICE INITIALIZATION

11 03ED 1540

BRB

10$

JOIN COMMON CODE

03EF 1543

03EF 1544 INI$CIADP:

INITIALIZE CI DATA STRUCTURES

03EF 1545

BB 03EF 154S

PUSHR #AM<RO,R1 ,R2,R3,R4,R5,R6 R7,RS,R9,R10> ; SAVE REGISTERS

DE 03F3 1549

MO VAL WACITAB,R8

GET CI TABLE OF CONSTANTS

9E 03FS 1550

MOVAB WACI$INT,R9

ADDRESS OF INITERRUPT SERVICE ROUTINE

9E 03FD 1551

MOVAB WACI$INITIAL,R10

ADDRESS OF DEVICE INITIALIZATION

11 0402 1552

BRB

10$

JOIN COMMON CODE

0404 1555

0404 1556 INI$MBADP:

!NIT MBA DATA STRUCTURES

0404 1557

BB 0404 1560

PUSHR #AM<RO,R1,R2,R3,R4,R5,R6 R7,R8,R9,R10> ;

DE 040S 1561

MOVAL WAMBATAB,R8

GET MBA TABLE OF CONSTANTS

9E 040D 1562

MOVAB WAMBA$INT,R9

ADDRESS OF INITERRUPT ~ERVICE ROUTINE

9E 0412 1563

MOVAB WAMBA$INITIAL,R10

ADDRESS OF DEVICE INITIALIZATION

0417 1564 10$:

0417 1565

0417 1566 Al locate and initialize Channel Request Block.

0417 1567

3C 0417 156S

MOVZWL #CRB$C LENGTH,Rl

SET SIZE OF CRB

10 041C 1569

BSBB

ALONPAGD

ALLOCATE SPACE FOR CRB

INIADP780 V03-021

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 29

INI$CIADP - BUILD ADP AND INITIALIZE CI 19-0CT-1983 11 :50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP(14)

OB A2 51 OA A2 05
62 62 04 A2 62 50 24 A2 9F163CBB BF
BO 80 59
BO 60 5A 5A 52
51 68 00000038 9F41
51 B4 OB A2 51 OA A2 09
6B QC A2 62 OOE4'CF44
2C AA 52
59 52
51 01 AB FF64
OB A2 51 QA A2 01
62 69 DC A2 54
03 AB OE A2 10 A2 5A
OOOOOOOO'GF 50
55 SB 09 50 55
54 04 00 54
50 0100 C044 lC A2 50 60 25 AA
40 AO 25 AA 25 AA
0080 co

BO 041E 1570 90 0422 1571 DE 0426 1572 DE 0429 1573 9E 0420 1574 DO 0431 1575
0437 DO 0438 1576 04 043B 1577 DO 0430 1578 DO 0440 1579
0443 1580 0443 1581 0443 1582 9A 0443 1583 DE 0446 1584 044D 10 044E 1585 BO 0450 15B6
90 0454 1587 0458 15BB
9B 0458 15B9 045A 1590
DO 045C 1591 0462 1592
DO 0462 1593 0466 1594
DO 0466 1595 0469 1596 0469 1597 0469 1598
3C 0469 1599 30 046D 1600 BO 0470 1601 90 0474 1602 DO 0478 1603 BO 0478 1604 9B 047F 1605
0482 1606 DO 0484 1607
0488 1608 0488 1609 0488 1610 04B8 1611 048B 1612 DO 0488 1613 04BE
7B 04BF 1614
co 0493 1615
EF 0496 1616 049A
DE 0498 1617 DO 04A1 1618 DE 04A5 1619 DE 04A9 1620 DE 04AE 1621
0481

MOVW MOVB MOVAL MOVAL MOVAB MOVL

R1,CRB$W SIZE(R2)

; SET CORRECT SIZE

#DYN$C CRB,CRB$B TYPE(R2) ; SET CORRECT TYPE

CRB$L WQFL(R2),CRB$L WQFL(R2) ; INITIALIZE WAIT QUEUE HEADER

CRB$L-WQFL(R2),CRB$L-WQBL(R2) ; FLINK AND BLINK

CRB$L-INTD(R2),RO - ; SET ADDRESS OF INTO AREAD

#AX9Fl63CBB,(RO)+

; "PUSHR AM<R2,R3,R4,R5>,JSB @#"

MOVL CLRL MOVL MOVL

R9, (RO)+ (RO)+ RlO,(RO) R2,R10

ADDR OF XXX$INT ROUTINE CLEAR OUT UNNEEDED AREA ADDR OF XXX$INITIAL ROUTINE SAVE CRB ADDRESS

Allocate and initialize Interrupt Dispatch Block.

MOVZBL ADPTAB IDBUNITS(R8),R1 MOVAL @#IDB$C LENGTH[Rl] ,Rl

GET # OF IDB UNITS GET TOTAL SIZE OF IDB

BSBB MOVW MOVB
MOVZBW
MOVL
MOVL
MOVL

ALON PAGO

ALLOCATE SPACE FOR CRB

R1,IDB$W SIZE(R2)

SET STRUCTURE SIZE

#DYN$C IDB' -

AND TYPE CODE

IDB$B TYPE(R2)

ADPTAB IDBUNITS(R8),-

SET COUNT OF UNITS

IDB$W UNITS(R2)

WASBICONF[R4]' -

SET CSR ADDRESS TO

IDB$L CSR(R2)

START OF ADAPTER REG SPACE

R2, --

; SET ADDRESS OF IDB INTO CRB

CRB$L INTD+VEC$L IDB(R10)

R2,R9-

-

SAVE ADDRESS OF IDB

Al locate and initialize Adapter Control Block (ADP).

MOVZWL BSBW MOVW MOV8 MOVL MOVW MOVZBW
MOVL CMPW BEQL

ADPTAB ADPLEN(R8),R1

; GET SIZE OF ADAPTER

ALONPAGD

; ALLOCATE SPACE FOR CRB

R1,ADP$W SIZE(R2)

; SET SIZE OF STRUCTURE

#DYN$C ADP,ADP$B TYPE(R2); AND TYPE CODE

IDB$L CSR(R9),ADP$L CSR(R2); SET ADDRESS OF CONFIGURATION REGISTER

R4,ADP$W TR(R2)

; SET TR/SLOT-16 NUMBER OF ADAPTER

ADPTAB ATYPE(RB),-

: SET THE ADAPTER TYPE

ADP$W ADPTYPE(R2)

R10,ADP$L CRB(R2)

; POINT ADP TO CRB

ADP$W ADPTYPE(R2),#AT$ CI ; CI?

20$ -

- ; YES, DO NOT CONNECT UP VECTORS

Initialize adapter interrupt vectors in System Control Block.

MOVL

GAEXE$GL_SCB,RO

GET ADDRESS OF SCB

ASHL ADDL EXTZV

#9,R11,R5 R5,RO #0,#4,R4,R4

Turn SCB page offset into byte offset. set to beginning of correct SCB page. Use low 4 bits of nexus number.

MOVAL MOVL MOVAL MOVAL MO VAL

AX100(RO)[R4],RO

; COMPUTE ADDR OF 1ST VECTOR

RO,ADP$L AVECTOR(R2)

; SAVE ADDR OF ADAPTER'S SCB VECTORS

CRB$L INTD+1(R10),(RO) ; CONNECT VECTOR TO CRB CODE

CRB$L-INTD+1(R10) ,64(RO); SAME FOR

CRB$L=INTD+1(R10),128(RO); ALL FOUR

INIADP780 V03-021

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-0l

Page 30

INI$CIADP - BUILD ADP AND INITIALIZE CI 19-0CT-1983 11 :50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP(14)

25 AA
ooco ccr
14 A2 25 AA
OC 55 52 52 62 OOOOOOOO'GF 18 A5 63
OC 38 AA 52 14 A9 52
FB22'
55 59 54 65
30 BA 07FF BF

DE 0484 0487 04BA 04BA 04BA
DE 04BA 04BF
BB 04BF DO 04Cl DO 04C4 16 04C7 DO 04CD BA 04Dl DO 04D3
DO 04D7 30 04DB
04DE 04DE 04DE DO 04DE DO 04El 16 04E4 BA 04E7 05 04EB 04EC 04EC

1622

MOVAL CRB$L_INTD+1(R10),192(RO); VECTORS

1623

1624 Continue with ADP initialization.

1625 1626

2' 0$:

MOVAL CRB$L INTD+l(RlO), -

: SAVE SCB VECTOR CONTENTS IN ADP

1627

ADP$L-MBASCB(R2)

1628

PUSHR #AM<R2,R3>

; SAVE SOME REGISTERS

1629

MOVL

R2,R5

; COPY ADP ADDRESS

1630

MOVL

ADP$L CSR(R2),R2

; VIRTUAL ADDRESS OF ADAPTER

1631

JSB

GAMMG$SVAPTECHK

; ADDRESS OF SPTE THAT MAPS ADAPTER

1632

MOVL

(R3),ADP$L MBASPTE(R5) ; SAVE CONTENTS OF SPTE

1633

POPR

#AM<R2,R3>-

; RESTORE REGISTERS

1634

MOVL

R2,CRB$L INTD+VEC$L ADP(R10)

; SET CRB POINTER TO ADP

1635

MOVL

R2,IDB$L-ADP(R9) -

; AND INTO IDB

1636

BSBW

ADPLINK -

; LINK ADP TO END OF CHAIN

1637

1638 Initialize adapter hardware.

1639

1640

MOVL

R9,R5

; ADDRESS OF IDB

1641

MOVL

IDB$L CSR(R5),R4

; ADDRESS OF CONFIGURATION REGISTER 0

1642 1643

JSB POPR

@CRB$L INTD+VEC$L INITIAL(R10) ; !NIT ADAPTER #AM<RO~Rl ,R2,R3,R4,R5,R6,R7,R8,R9,R10>; RESTORE ALL REGISTERS

1644

RSB

; RETURN

1645

1646

.DSABL LSB

INIADP780 V03-021
; RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO ;RLRSCORPIO ; RLRSCORPIO

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 31

INI$KDZ11

19-0CT-1983 11 :50:19 DISK$VMSMASTER: [SYSLOA.SRC]INIADP(14)

04EC 04EC 04EC 04EC 04EC 04EC 04EC 04EC 04EC 04EC 04EC 04EC 04EC 04EC 05 04EC

.36

.SBTTL INI$KDZ11

.37 ;++

.38

.39 INPUTS:

.40

R2 - VA of next free system page

.41

R3 VA of system page table entry to be used to map VA in R2

.42

R4 - nexus identification number of this adapter

.43

.44 OUTPUTS:

.45

.46 ;--

.47

.48 INI$KDZ11:

.49

.68

RSB

Re-turn to call er.

INIADP7BO V03-021
;RLRSCORPIO ;RLRSCORPIO ;RLRSCORPIO -12
;TCM0009

- ADAPTER INITIALIZATION FOR VAX 11/7BO 3-JUN-19B4 14:53:36 VAX-11 Macro V03-01

Page 32

INI$CONSOLE, init data structures for co 19-0CT-19B3 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP(14)

66 A6 40 BF
12 41534303 BF
14 A3
00000000'9F 58
006B
5B 10 A7 OE A7 01
03 0058
00000000'9F 9F163FBB BF
24 A2
3B A2 57 5B 52
51 0058 8F 00000000'9F OB A2 51 OA A2 09 2C AB 52

04ED 04ED 04ED 04ED 04ED 04ED 04ED
-04ED 04ED 04ED 04ED 04ED 04ED 04ED 04ED 04ED 04ED 04ED 04ED 04ED 04ED 04ED 04ED 04ED 91 04ED 04FO 12 04F2 DO 04F4 04FA 04FC DE 04FC 0502 31 0503 0506 0506 0506 0506 0506 0506 DO 0506 B1 050A 13 050E 31 0510 0513
0513 16 0513 DO 0519
051F 0521
DO 0521 DO 0525 3C 0528 16 052D BO 0533 90 0537 DO 0538
053F

1650

.SBTTL INI$CONSOLE, init data structures for console

1651 ;++

1652 FUNCTIONAL DESCRIPTION:

1653

1654

This routine is executed only once, during system initialization.

1655

It initializes the CRB and IDB for boot/console device.

1656

1657

This routine is cal led from !NIT.

165B

1659 INPUTS:

1660

1661

R3 --> DISK [CLASS] DRIVER DDS

1662

R4 --> DISK [CLASS] DRIVER DPT

1663

R5 --> DISK [CLAS SJ DRIVER UCB

1664

R6 --> RPB

1665

R7 --> ADP FOR EITHER A REAL DISK OR A PORT

1666

R9 --> PORT DRIVER DPT (IF PRESENT)

1667

R10--> PORT DIRVER UCB (IF PRESENT)

1668

1669

1670

1671 INI$CONSOLE::

1672

.ENABL LSB

1673

1675

CMPB

RPB$8 DEVTYP(R6),-

BOOTING FROM CONSOLE BLOCK

1676

#BTD$K CONSOLE

STORAGE DEVICE?

1677

BNEQ

BLD CRB

NO

1678

MOVL

#AAJCSA/@8+3,-

YES, SET DEVICE NAME

1679

DDB$T NAME(R3)

COUNTED STRING

1681

. 2

MOVAL @#OPA$CRB,R8

SET ADDRESS OF CRB

. 3

BRW

100$

.5

1694

1695

1696 NOW BUILD THE AUXILIARY DATA BLOCKS (CRB,IDB)

1697

1698 BLD_CRB:

1699

MOVL

ADP$L CRB(R7),R8

; GET ADDRESS OF CRB IF IT EXISTS

1700

CMPW

#AT$ UBA,ADP$W ADPTYPE(R7); IS THIS A UNIBUS ADAPTER?

1701

BEQL

FILL-CRB

-

; YES, ALLOCATE CRB

1702

BRW

100$-

: NO, CRB/IDB ALREADY ALLOCATED

1703

1704 FILL CRB:

1705 1706

JSB MOVL

@#INI$ALLOC CRB

; GO ALLOCATE AND SETUP CRB

#AX9F163FBB~CRB$L INTD(R2) ; SET PUSHR #AM<RO, ... R5>

1707 170B 17D9 1710 1711 1712 1713 1714
.1

MOVL MOVL MOVZWL JSB MOVW MOVB MOVL

; JSB @#0 INTO INTERRUPT DISPATCH

R7,CRB$L INTD+VEC$L ADP(R2)

; SET POINTER TO ADP

R2,RB -

-

; SAVE CRB POINTER

#<IDB$C LENGTH+<B*4>>,R1; SIZE TO ALLOCATE FOR IDB

@#INI$ALONONPAGED

; ALLOCATE IDB

R1,IDB$W SIZE(R2)

; SET SIZE OF IDB

#DYN$C IDB,IDB$B TYPE(R2); AND STRUCTURE TYPE CODE

R2,CRBiL_1NTD+VEf$L_IDB(R8) ; SET IDB INTO CRB

INIADP780 V03-021
-1

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 33

INI$CONSOLE, init data structures for co 19-0CT-1983 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP(14)

G2 58 AG
11 66 AG
08
58 AG 00000000'9F
14 A2 57 50 lE AG
OA 50 66 A6 50 FFFE'CF40 50 10 8740 60 26 AS

053F 173G
DO 053F 1737 10$:
0543 1738
9-1 0543 1739 0545 1740
12 0547 1741 0549 1742
DO 0549 1743
054C 0551 1744 0551 1745 20$:
DO 0551 1746 3C 0555 1747
12 0559 1748
SA 0558 1749 3C 055F 1750
9E 05G5 1751 30$: 9E 056A 1752
056E 1753
056E 1757 05GE 1758 100$: 05 056E 1759 056F 1760

MOVL CMPB BNEQ MOVL

RPB$L CSRVIR(R6), -
IDB$L-CSR(R2) #BTD$K_UDA,RPB$B_DEVTYP(R6) 20$
RPB$L_CSRVIR(RG), -

; SAVE BOOT DEVICE CSR ADDRESS ; IN INTERRUPT DISPATCH BLOCK ; LOW ORDER BYTE OF ORIGINAL RO TELLS ; BOOT DEVICE TYPE. ; IF NOT BOOTING FROM A UDA BRANCH ; AROUND. : COPY VIRTUAL ADDRESS OF UDA PORT CSR

@#BOO$GB_SYSTEMID

: TO LOW ORDER LONGWORD OF SYSTEMID

MOVL MOVZWL BNEQ MOVZBL MOVZWL MOVAB MOVAB

R7,IDB$L ADP(R2)

;

RPB$W_ROUBVEC(R6),RO

;

30$

;

RPB$B DEVTYP(R6),RO

;

WABOOTVECTOR-2[RO],RO ;

@ADP$L VECTOR(R7)[RO),RO;

CRB$L_INTD+2(R8), (RO) :

POINT IDB TO ADP GET USER SPECIFIED VECTOR BRANCH IF VECTOR .SPECIFIED
ELSE GET DEVICE TYPE CODE GET DEFAULT INTERRUPT VECTOR COMPUTE ADDRESS OF VECTOR SET ADDR OF INTERRUPT VECTOR

RSB .DISABLE LSB

: RETURN

INIADP780 V03-021

19 00
00004E20 SF 7E
18 11
FD 6E

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 34

EXE$INI_TIMWAIT - COMPUTE CORRECT TIMEWA 19-0CT-1983 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP(15)

056F 1762

.SBTTL EXE$INI TIMWAIT - COMPUTE CORRECT TIMEWAIT LOOP VALUES

056F 1763 ;++

056F 1764 FUNCTIONAL DESCRIPTION:

056F 1765

056F 1766 EXE$INI TIMWAIT initializes EXE$GL TENUSEC and EXE$GL UBDELAY, cells used

056F 1767 in the time-wait macros. The first data cell, EXE$GL-TENUSEC, is the number

056F 1768 of times the following loop will be executed in ten u=seconds. This is

056F 1769 done once here to calibrate the loop instead of reading the processor clock.

056F 1770 The resulting number is used in the system macros TIMEWAIT and TIMEDWAIT.

056F 1771

056F 1772 The first step is to initialize EXE$GL UBDELAY. If the bit test instruction

056F 1773 in the TIMEWAIT macro is executed too rapidly in a loop, it can saturate the

056F 1774 Unibus. EXE$GL UBDELAY is used to introduce a 3 microsecond delay loop into

056F 1775 the TIMEWAIT bit test loop.

056F 1776

056F 1777 This routine is called only once, from !NIT.

056F 1778

056F 1779 INPUT PARAMETERS:

056F 1780

056F 1781

NONE

056F 1782

056F 1783 IMPLICIT INPUTS:

056F 1784

056F 1785

Time-of-day processor clock.

056F 1786

Interval timers.

056F 1787

056F 1788 OUTPUT PARAMETERS:

056F 1789

056F 1790

RO - Destroyed.

056F 1791

056F 1792 IMPLICIT OUTPUTS:

056F 1793

056F 1794

EXE$GL TENUSEC - set to appropriate value to make TIMEWAIT and TIMEDWAIT

056F 1795

-

macros loop for 10 micro-seconds.

056F 1796

056F 1797

EXE$GL UBDELAY - set to appropriate value to make TIMEWAIT and TIMEDWAIT

056F 1798

-

macros loop for 3 micro-seconds in the unibus delay

056F 1799

loop.

056F 1800

056F 1801

056F 1802

056F 1803 EXE$INI TIMWAIT::

Initialize time-wait data cells

056F 1805

-.ENABLE LSB

056F 1806

DA 056F 1808

MTPR

#O,#PR780$_NICR

Initialize next interval count register.

0572 1810

0572 1814

0572 1818

0572 1822

DO 0572 1823

MOVL

#20000,-(SP)

# of times to execute timed loop.

0578

DA 0579 1824

MTPR

#AX 11, #PR$_! CCS

Start clock, no interrupts.

057C 1825
057C 1826 ; * * * start of loop to time * * *

F5 057C 1827 10$:

SOBGTR (SP),10$

057F 1828 * * * end of loop to time * * *

Delay loop.

057F 1829

INIADP7BO V03-021

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-0l

Page 35

EXE$INI_TIMWAIT - COMPUTE CORRECT TIMEWA 19-0CT-1983 11 :50:19 DISK$VMSMASTER:[SVSLOA.SRC]INIADP(15)

50 lA
18 00 50
OOOOEA60 BF OOOOOOOO'GF OOOOOOOO'GF
19 00
00004E20 8F 50
OOOOOOOO'GF 6E
18 11
8000 BF 00000589'EF
03 FD 6E EF 50
50 lA
18 00 BE 50
00030D40 BF OOOOOOOO'GF OOOOOOOO'GF

DB 057F 1831

MFPR

#PR780$_ICR,RO

; Read total time to execute loop.

05B2 1833

0582 1837

0582 1B41

0582 1845

DA 0582 1B46

MTPR

#O,#PR$ ICCS

; Shut off clock.

C7 0585 1847

DIVL3 R0,#60000,GAEXE$GL U8DELAV; Calculate number of times through

05B7

058C

D6 0591 1B48

INCL

GAEXE$GL U8DELAV

loop to delay 3 microseconds.

0597 1B49

DA 0597 1B51

MTPR

#O,#PR780$ NICR

Initialize next interval count register.

059A 1B53

059A 1857

059A 1B61

059A 1B65

DO 059A 1866

MOVL

#20000,RO

Number of times to execute test loop

05AO

DO 05A1 1867

MOVL

GAEXE$GL UBDELAV,(SP)

Get delay lo~p iteration count.

05A7 DA 05A8 1868

MTPR

#AXll ,#PR$ recs

Start clock, no interrupts

05AB 1B69

05AB 1B70 ; **** Start of loop to time

83 05AB 1B71 20$:

BITW

#AXB000,40$

Random BITx instruction to time

05AF

12 0584 1872

8NEQ

40$

Random conditional branch instruction

F5 0586 1873 30$:

SOBGTR (SP),30$

Delay 3 microseconds.

F5 05B9 1B74 40$:

SOBGTR R0,20$

05BC 1875 . **** End of loop to time

Loop

05BC 1876

DB 05BC 1B7B

MFPR

#PR7BO$ ICR,RO

Read total time to execute loop.

05BF lBBO

05BF 18B4

05BF 18BB

DA 058F 1892

MTPR

#O,#PR$ ICCS

; Shut clock off

D5 05C2 1B93

TSTL

(SP)+ -

; Pop delay loop index off stack.

C7 05C4 1B94

DIVL3 R0,#200000,GAEXE$GL TENUSEC ; Calculate number of times to

05C6

05CB

D6 05DO 1B95

INCL

GAEXE$GL TENUSEC

execute the loop to kill 10 u-secs.

05 05D6 1B96

RSB

Return

05D7 1897

.DISABLE LSB

INIADP780 V03-021

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 36

EXE$INIT TOOR - SET SYSTEM TIME TO COR 19-0CT-1983 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP(l6)

00000000 00000004
oooooooc
00000014 OOOOOOlC 00000014
30 41 50 4F 00000004
6C 61 76 6E 69 00 74 61 64 20 64 69

0507 0507 0507 0507 0507 0507 0507 0507 0507 0507 0507 05D7 0507 0507 0507 0507 0507 0507 0507 0507 0507 0507 0507 0507 0507 05D7 0507 0507 0507 0507 0507 0507 0507 0507 0507 0507 0507 0507 0507 0507 0507 0507 0507 0507 0507 0507 0507
0507 0507 0507 0507 0507 0507 0507 0508 0508 05E1

1905

.S8TTL EXE$INIT TOOR

SET SYSTEM TIME TO CORRECT VALUE AT STARTUP

1906 ;++

1907 FUNCTIONAL DESCRIPTION:

1908

1909

EXE$INIT TOOR SOLICITS THE CORRECT TIME FROM THE OPERATOR IF NECESSARY,

1910

CONVERTS-THE ASCII RESPONSE TO BINARY FORMAT AND CALLS AN INTERNAL

1911

ENTRY POINT OF THE $SETIME SYSTEM SERVICE TO SET THE NEW SYSTEM TIME

1912

IN MEMORY WITHOUT MODIFYING THE CONTENTS OF THE SYSTEM DISK.

1913

1914

IF THE TIME WOULD NORMALLY BE SOLICITED FROM AN OPERATOR, BECAUSE

1915

THE HARDWARE TIME OF YEAR CLOCK IS ZERO, THEN THE SYSGEN PARAMETER

1916

"TPWAIT" IS CHECKED. IF IT IS ZERO, THEN IT IS ASSUMED THAT NO

1917

OPERATOR IS PRESENT AND THE SYSTEM IS BOOTED USING THE LAST TIME

1918

RECORDED IN THE SYSTEM IMAGE. IF THE PARAMETER IS NON ZERO THEN

1919

THAT TIME IS USED AS THE MAXIMUM TIME TO WAIT BEFOR ASSUMING THAT

1920

THERE IS NO OPERATOR AND BOOTING ANY WAY. IF THE PARAMETER IS

1921

NEGATIVE, THE SYSTEM WILL WAIT FOREVER.

1922

1923

THIS ROUTINE IS CALLED ONLY ONCE, FROM SYSINIT OR STASYSGEN.

1924

1925 INPUT PARAMETERS:

1926

1927

NONE

1928

1929 IMPLICIT INPUTS:

1930

1931

TIME-OF-DAV PROCESSOR CLOCK.

1932

1933 OUTPUT PARAMETERS:

1934

1935

RO,Rl - DESTROYED

1936

1937 IMPLICIT OUTPUTS:

1938

1939

EXE$GQ SYSTIME - SET TO CURRENT TIME IN 100 NANOSECOND UNITS SINCE

1940

-

17-NOV-1858 00:00:00.

1941

1942

1943

1944

1945 Stack storage offsets:

1946
= 1947 TTCHAN = 1948 TTNAME

AXOO AX04

CHANNEL FOR TERMINAL (LONGWORD) STRING DESCRIPTOR FOR OPERATOR'S TERM

1949 TMPDESC = AXOC
1950 INTIME = AX14 1951 LINBUF = AXlC 1952 LINBUFSIZ = AX14

TEMPORY STRING DESCRIPTOR (QUADWORD) INPUT TIME VALUE (QUADWORD) INPUT LINE BUFFER (5 LONGWORDS)
(LENGTH OF LINE BUFFER IN BYTES)

1953

1954

1955 PURE DATA

1956

1957 TERM NAMADR:

1958

.ASCII \OPAO\

1959 TERM NAMSIZ = . - TERM NAMADR

DEVICE NAME FOR OPERATOR'S TERMINAL

1960 TIME~R: .ASCIC \invalid date/time\

INIADP780 V03-021

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 37

EXE$INIT_TODR - SET SYSTEM TIME TO COR 19-0CT-1983 11:50: 19 DISK$VMSMASTER:[SYSLOA.SRC)INIADP(16)

65 60 69 74 2F 65 1 l
3.3'
41 45 4C 50 OA OD 54 4E 45 20 45 53 54 41 44 20 52 45 20 44 4E 41 20 45 28 20 45 40 49 54 40 40 40 20 44 44 20 59 59 59 59 20 4D 40 3A 48 48 20
20 20 29 00000033
077C SF BB 5E 30 C2 56 5E DO 04 A6 04 9A FFA4 CF 9E
08 A6 00' ED
1C OOOOOOOO'GF
50 lB DB
50 C3 OOOOOOOO'GF
59 09 1B 59 D1 0083D600 BF 06 1E 14 A6 7C OOC7 31
59 D4 OOOOOOOO'GF 32
58 14 14 OD 19
01 Cl OOOOOOOO'GF
50
18 50 DA

05E7 05DB 05ED 05ED 05EE 05F4 05FA 0600 0606 060C 0612 0618 061E 0621
0621 0621 0621 0621 0621 0625 0628
062B
062F 0633 0635 0637 0630 0630 0630 0640 0640 0640 0640 0640 0642 0647 0648 064A 064C
0651 0653 0656 0659 0659 0659 065B 0661 0662 0664 0666
0666 0668
0660 066E 066E
0671 0671

1961 TI MEPROMPT:

1962

.BYTE NPROMPT

1963

.ASCII <13><10>/PLEASE ENTER DATE AND TIME (DD-MMM-YYYY HH:MM) I

1964 NPROMPT=.-TIMEPROMPT-1

1965

1966

1967 EXE$INIT TOOR::

; SET CORRECT TIME

1968

-:-ENABLE LSB

1969

PUSHR #AM<R2,R3,R4,R5,R6,R8,R9,R10> ; SAVE REGISTERS

1970

SUBL

#4*12,SP

; SCRATCH STORAGE

1971

MOVL

SP,R6

; SAVE ADDRESS OF SCRATCH STORAGE

1972

MOVZBL #TERM NAMSIZ,TTNAME(R6) ; SET SIZE OF OPERATOR'S TERM NAME AND

1973

MOVAB WATERM_NAMADR,TTNAME+4(R6) ; PIC ADDRESS INTO TERM NAME DESC

1974

BBS

SA#EXE$V SETTIME,GAEXE$GL_FLAGS,READTIME ; BR TO SOLICIT TIME

1975 1976 1978 1980 1984 1988 1992 1994

MFPR #PR780$ TODR,RO SUBL3 R0,GAEXE$GL_TODR,R9

GET TIME OF DAY CLOCK VALUE GET TOD DELTA TIME (10 MS UNITS)

1995 1996

BLEQU CMPL

1997

BGEQU

2002 5$:

CLRQ

2003

BRW

2004

2005 READTIME:

2006

CLRL

2007

CVTWL

2008 2009 2010 6$: 2012

BGTR BLSS
ADDL3

5$ R9,#24*60*60*100
READTIME INTIME(R6) 200$
R9 GASGN$GW_TPWAIT,R8
8$ 7$
#1,GAEXE$GL TODR,RO

BRANCH IF TIME IS LATER CHECK FOR SETBACK OF ONE DAY
MORE, MUST SOLICIT TIME NULL ARGUMENT FOR EXE$SETIME INT RETURN TO CALLER
SOLICIT TIME CLEAR A FLAG PICK UP TIMEOUT WAIT INTERVAL
POSITIVE, WAIT THAT PERIOD ONCE NEGATIVE IS WAIT FOREVER
ZERO, SET TIME-OF-DAY CLOCK TO

2014 2016 2018 2022

MTPR

RO,#PR780$_TODR

KNOWN VALUE + 10 MSEC AND FINISH UP

INIADP780 V03-021
;KDM0099 ;KDM0099
-1

- ADAPTER INITIALIZATION FOR VAX ll/7BO 3-JUN-19B4 14:53:36 VAX-11 Macro V03-01

Page 38

EXE$INIT TOOR - SET SYSTEM TIME TO COR 19-0CT-19B3 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP(16)

EO
58 14 59
DD 50 52 FF60 CF
53 82
AD 50 54 OC A6
OD 54 A3 59 58 01 A848 5B 5B
BC
OC A6 OE A6 10 A6 lC A6
05 50 lB A6
2A
52 FEEB CF 53 82
FF73
14 A6 01
OOOOOOOO'GF OOOOOOOO'GF OOOOOOOO'GF
5E 30 077C SF

0671 2026

0671 2030

11 0671

. 2

BRB

5$

0673

.4

0673 2032

DO 0673 2033 7$:

MOVL

#20,RB

; STARTING WAIT

06 0676 2034 067B 2035 B$:

INCL

R9

$ASSIGNS

; NEGATIVE - WAIT FOREVER TTNAME(R6),TTCHAN(R6) ; AND ASSIGN TO INPUT DEVICE

E9 06B6 2036

BLBC -R0,6$

; ERROR - FALL BACK TO STORED TIME

9E 06B9 2037 10$:

MOVAB WATIMEPROMPT,R2

; GET ADDRESS OF PROMPT STRING

9A 06BE 203B

MOVZBL (R2)+,R3

; AND LENGTH

0691 2039

$QIOW S #0,WATTCHAN(R6),-

; PROMPT AND READ TIME

0691 2040

- #<10$ READPROMPT!IO$M PURGE!I0$M TIMED!I0$M CVTLOW>,-

0691 2041

TMPDESC(R6), ,,-

- ; I/0 STATUS BLOCK-, NO AST OR PARAM

0691 2042

LINBUF(R6),#LINBUFSIZ,- ; BUFFER ADDRESS AND SIZE

0691 2043

RB,#0,-

; TIME OUT

0691 2044

R2,R3

; PROMPT ADDRESS AND SIZE

E9 06B6 2045

BLBC

R0,6$

; ERROR - FALL BACK TO STORED TIME

70 06B9 2046

MOVQ

TMPDESC(R6),R4

; GET COMPLETION STATUS

EB 06BD 2047

BLBS

R4,20$

; CONTINUE IF SUCCESSFUL READ

E9 06CO 204B

BLBC

R9,6$

; FAILED ON ONE-TIME READ, RETURN

9E 06C3 2049

MOVAB 1 (RB) [RBJ ,RB

; (2 * TIMEOUT) + 1

3C 06CB 2050

MOVZWL RB,RB

; BOUND TIMEOUT

11 06CB 2051

BRB

10$

; TRY AGAIN FOR TIME

06CD 2052 20$:

; SOMETHING WAS INPUT

3C 06CD 2053

MOVZWL TMPDESC+2(R6),TMPDESC(R6) ; FORM DESCRIPTOR FOR BUFFER

9E 06D2 2054

MOVAB LINBUF(R6),TMPDESC+4(R6) ; SET DESCRIPTOR ADDRESS

0607 2055

$BINTIM S TMPDESC(R6),INTIME(R6) ; CONVERT TO BINARY TIME

E9 06E4 2056

BLBC -RO,B9$

INVALID TIME

D5 06E7 2057

TSTL

INTIME+4(R6)

CHECK FOR DELTA TIME

14 06EA 205B

BGTR

100$

BRANCH IF NOT - OK

06EC 2059 89$:

INVALID TIME VALUE INPUT

9E 06EC 2060

MOVAB WATIMERR,R2

ADDRESS OF ERROR MESSAGE

9A 06F1 2061

MOVZBL (R2)+,R3

GET STRING LENGTH

06F4 2062

$QIOW S #O,TTCHAN(R6),-

GIVE ERROR MESSAGE

06F4 2063

- #I0$_WRITEVBLK,-

06F4 2064

NO I/O STATUS,AST OR AST PARAM

06F4 2065

(R2),R3

BUFFER ADDRESS, LENGTH

06F4 2066

#0,#32

SET CARRIAGE CONTROL TO CR/LF

31 0713 2067

BRW

10$

AND TRY AGAIN

0716 2068 100$:

EXIT

0716 2069

$DASSGN S TTCHAN(R6)

DE-ASSIGN TERMINAL CHANNEL

7F 0720 2070 200$: PUSHAQ -INTIME(R6)

SET NEW SYSTEM TIME

FB 0723 2071

CALLS #l,GAEXE$SETIME INT

USE TOOR CLOCK TO SET SYSTEM TIME

0725

7D 072A 2072

MOVQ

GAEXE$GQ_TODCBASE,GAEXE$GQ_BOOTTIME ; SAVE BOOT TIME

0730
co 0735 2073

ADDL

#12*4,SP

; CLEAN OFF SCRATCH STORAGE

BA 013B 2074

POPR

#AM<R2,R3,R4,R5,R6,RB,R9,R10> ; RESTORE REGISTERS

073C 2075

073C 2076

073C 2077 Fall through into the deallocate logic.

073C 207B

073C 2079

RSB

*** This goes in if another piece of

073C 20BO

*** init~alization code is added that

073C 20B1

*** is executed after EXE$INI_TIMWAIT.

073C 20B2

.DISABLE LSB

INIADP780 V03-021

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-0l

Page 39

EXE$INIT_TODR - SET SYSTEM TIME TO COR 19-0CT-1983 11:50:19 DISK$VMSMASTER: [SVSLOA.SRC]INIADP(16)

073C 2083

INIADP780 V03-021

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 40

EXE$INIT TOOR - SET SYSTEM TIME TO COR 19-0CT-1983 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP(17)

073C

073C

073C

073C

073C

073C

073C

073C

073C

073C.

073C

073C

7E 52 70 073C

073F

073F

073F

073F

073F

50 OOOO'CF 9E 073F

00000000'8F Cl 0744

51 50

074A

OOOOOOOO'GF 9E 074C

52

0752

OOOOOOOO'GF 9E 0753

53

0759

9F17 SF 62 Bl 075A

1B 13 075F

BO BF 03 A2 91 0761

16 12 0766

50 62 Dl 0768

DC 1 F 076B

51 62 01 0760

07 1A 0770

OOOOOOOO'GF 9E 0772

62

0778

52 02 co 0779

52 06 077C

52 D6 077E

53 52 Dl 0780

05 1F 0783

0785

0785

0785

50 OOOO'CF 9E 0785

51 OOOO'BF 3C 078A

F87A 31 078F

0792

00000000

0000

0000

00000000 00000000 0000

0000 0008

62 OOOA

00000000'9F

00 OOOB
oooc 16 oooc

52 BE 70 0012

2085 DEAL !NIT CODE:

; DEALLOCATE THE INITIALIZATION CODE

2086 2087

It is the duty of the last-executed, loadable initialization

2088 2089

routine to make itself and all other such routines disappear, i.e., release the space they occupy to non-paged pool. Each routine's vector

2090 must be disconnected, e.g., be made to point to the symbol, EXE$LOAD_ERROR.

2091

2092 NOTE: This means that new initialization routines should be added

2093

to this module in a particular order, not necessarily at the

2094

end of the module!

2095

2096

.ENABLE LSB

2097

MOVQ

R2,-(SP)

Save some registers

2098

2099

2100 First find the vectors that point to these initialization routines

2101 and reset them to point to EXE$LOAD_ERROR.

2102

2103

MOVAB WASYSL$BEGIN,RO

; Compute bounds of releasable piece:

2104

ADDL3 #<STAY_HEADER-SYSL$BEGIN>,RO,Rl ; starting and ending addresses.

2105

MOVAB GAEXE$AL LOAVEC,R2

Get starting address of vectors.

2106

MOVAB GAEXE$LOAO ERROR,R3

Get end of vectors.

2107 10$: 210B 2109 2110 2111 211 2 2113 2114 2115

CMPW BEQL CMPB BNEQ CMPL BLSSU CMPL BGTRU MOVAB

(R2),#AX9Fl7
30$ 3(R2),#AXB0
40$ (R2),RO 20$ (R2),R1 20$ GAEXE$LOAO ERROR,(R2)

Is this JMP @# ? Br if yes, skip past it. Is this a system space address Br if no, assume it's a HALT instr. Is address before the releasable
piece of memory? Br on yes. Is address after the releasable
piece of memory? Br on yes. Reset this vector.

2116 20$:

AOOL

#2,R2

Point past this vector.

2117 30$:

INCL

R2

Come here to point past JMP @#.

2118 40$:

INCL

R2

Come here to point past HALT.

2119

CMPL

R2,R3

Past the end of the vectors?

2120

BLSSU 10$

Keep searching vectors.

2121

2122 Now release the memory to non-paged pool.

2123

2124

MOVAB WASYSL$BEGIN,RO

; Point to start of module

2125

MOVZWL #<STAY HEAOER-SYSL$BEGIN>,R1 ; Length to vaporize

2126

BRW

50$ -

: Br to code that is not released.

2127

212B

PSECT $$$INIT END,PAGE

'PAGE' SINCE 16-BYTE ALIGN IS NOT

2129

2130 STAY HEADER:

2131

- .LONG 0,0

2132

.WORD <SYSL$ENO-STAY HEADER>

2133

.BYTE DYN$C LOADCODE

2134

.BYTE 0

2135

2136 50$:

JSB

@#EXE$DEANONPGDSIZ

Just the smile on the Chesire cat

·2137

MOVQ

(SP)+,R2

Restore

INIADP780 V03-021

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 41

EXE$INIT~TODR

SET SYSTEM TIME TO COR 19-0CT-1983 11:50:19 DISK$VMSMASTER: [SVSLOA.SRC]INIADP(17)

05 0015 2138 0016 2139 0016 2140 0016 2141

RSB
.DISABLE LSB .END

; Return.

INIADP780 Symbol table

$$$VMSDEFINED

$$Tl

ADAPTERS

ADP$B TYPE

ADP$C-CIADPLEN

ADP$C-DRADPLEN

ADP$C-MBAADPLEN

ADP$C-UBAADPLEN

ADP$L-AVECTOR

ADP$L-CRB

ADP$L-CSR

ADP$L-DPQFL

ADP$L-LINK

ADP$L-MBASCB

ADP$L-MBASPTE

ADP$L-MRACTMDRS

ADP$L-MRQFL

ADP$L-UBASCB

ADP$L-UBASPTE

ADP$L-VECTOR

ADP$W-ADPTVPE

ADP$W-DPBITMAP

ADP$W-MRFFENCE

ADP$W-MRFREGARY

ADP$W-MRNFENCE

ADP$W-MRNREGARY

ADP$W-SIZE

ADP$W-TR

ADP$W-UMR DIS

ADPLINK -

ADPTAB ADPLEN

ADPTAB-ATYPE

ADPTAB-IDBUNITS

ALONPAGD

AT$ CI

AT$-DR

AT$-MBA

AT$-UBA

BADUMR

BI BI BI BI

-
-

BUS CODE CPU CSR LEN LIKE

BLD CRB

BOO$GB SYSTEMID

B00$GL-SPTFREH

B00$GL-SPTFREL

BOO TV ECTOR

BTD$K CONSOLE

BTD$K-UDA

BUS CODE OFFSET

BUS-CSR LEN

CI$INITIAL

CI$INT

CIT AB

CONF I G IOSPACE

CONFREG

- ADAPTER INITIALIZATION FOR VAX 11 /780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 42

19-0CT-1983 11: 50: 19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP(17)

= =

00000001 00000001

00000000 R

= OOOOOOOA

= =

00000030 00000030

02

= =

00000030 00000258

= 0000001C

= 00000010

= 00000000

= 00000014

= =

00000004 00000014

= 00000018

= 0000005C

= 00000030

= 00000044

= 00000054

= = =

00000010 OOOOOOOE 00000060

= 0000015C

= 0000015E

= 00000062

= 00000064 = 00000008

·

= oooooooc

= 00000256

******** x 09

00000001

00000003

00000000

00000304 R

09

= 00000004

= 00000002

= 00000000

= 00000001

00000300 R

08

= 80000000

= 00000000

= 00000002

= 00000000

00000506 R

09

******** x 09

******** x 09

******** x 09

= 00000000 R 00000040

08

= 00000011

= FFFFFFFC

00000004 R

08

******** x 09 ******** x 09

00000015 R

08

0000005F R

09

OOOOOOA4 R

08

CONFREGL CPU ADPSIZE CPU-TYPE
CR CRB$8 TYPE CRB$C-LENGTH CRB$L-INTD CRB$L-WQBL CRB$L-WQFL CRB$W-SIZE
CREATE ARRAYS CSR LEN OFFSET DDB$T NAME
DEAL INIT CODE DIRECT VEC NODE CNT DR$INITIAL- -
DR$INT
DRTAB DYN$C ADP DYN$C-CONF DYN$C-CRB
DYN$c::::ros DYN$C !NIT DYN$C-LOADCODE
END NEXUS ERROR HALT ERROR-HALT 1
EXE$AL LOAVEC EXE$DEANONPGDSIZ
EXE$GL CONFREG EXE$GL-CONFREGL EXE$GL-FLAGS EXE$GL-NUMNEXUS EXE$GL-RPB EXE$GL-SCB EXE$GL-TENUSEC EXE$GL-TODR EXE$GL-UBDELAY EXE$GQ-BOOTTIME EXE$GQ-TODCBASE
EXE$INIT TOOR EXE$INI TIMWAIT EXE$LOAD ERROR EXE$MCHK-PRTCT
EXE$0UTZSTRING EXE$SETIME INT EXE$TEST CSR EXE$UBAERR INT EXE$V SETTIME
FILL CRB GET GEN TYPE GET-TYPE
108$8 TYPE IDB$C-LENGTH IDB$L -ADP IDB$L-CSR IDB$W-SIZE

000001E4 R

08

00000019 R

08

= 00000001

= =

OOOOOOOD OOOOOOOA

= 00000048

= 00000024

= 00000004

= 00000000

= 00000008

OOOOOllA R

09

= FFFFFFFB

= 00000014

0000073C R

09

00000009 R

08

******** x 09 ******** x 09

00000011 R

08

= 00000001

= =

00000007 00000005

= =

00000009 00000063

= 00000062

00000115 R

09

00000199 R

09

0000019E R

09

******** x 09 ******** x OA
******** x 09
******** x 09 ******** x 09 ******** x 09

******** x 09 ******** x 09 ******** x 09 ******** x 09 ******** x 09 ******** x 09 ******** x 09

00000621 RG

09

0000056F RG

09

******** x 09

******** ******** ******** ******** ******** ********

x 09 x 09 x 09
x 09 x 09 x 09

00000513 R

09

00000089 R

09

OOOOOOAO R

09

= OOOOOOOA

= 00000038

= 00000014

= 00000000

= 00000008

INIADP780
Symbol table
IDB$W UNITS INI$ALLOC CRB IN I $ALONONPAGED INI$CIADP INI$CONSOLE INI$DRADP I NI $IOMAP INI$KDZ11 INI$MBADP INI$MPMADP INI$UBADP INI$UBSPACE !NIT ROUTINES INTI ME IO$M CVTLOW I0$M-PURGE I0$M-TIMED
IO$ READPROMPT !0$-WRITEVBLK I07B0$AL IOBASE I0780$AL-NNEX I0780$AL -PERNEX
I0780$AL=UBOSP LF LINBUF LINBUFSIZ MAP NEXUS MAP-PAGES MAXNEXUS MBA$INITIAL MBA$INT MBA TAB MCHK$M LOG MCHK$M-NEXM MMG$GL-SBICONF MMG$GL-SPTBASE
MMG$SVAPTECHK NOT$ BUA NDT$-CI NDT$-DR32 NDT$-KDZ 11 NDT$-MB NDT$-MEM1664NI NDT$-MEM16I NDT$-MEM16NI NDT$-MEM4I NDT$-MEM4NI NDT$-MEM64EIL NDT$-MEM64EIU NDT$-MEM64I NDT$-MEM64NIL NDT$-MEM64NIU NDT$-MPMO NDT$-MPM1 NDT$-MPM2 NDT$-MPM3
NDT$=SCORMEM

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 43

19-0CT-1983 11: 50: 19 DISK$VMSMASTER: [SYSLOA.SRC]INIADP(l7)

= oooooooc

******** x 09 ******** x 09

000003EF R

09

000004ED RG

09

000003DA R

09

00000000 RG

09

000004EC R

09

00000404 R

09

******** x 06

000001C3 R

09

000001A7 R

09

= 00000000 R 00000014

06

******** x 09

******** x 09

******** x 09

******** x 09

=

********
20000000

x

09

= 00000010

= 00002000

= 20100000

= OOOOOOOA

= OOOOOOlC

= 00000014

OOOOOOF9 R

09

00000173 R

09

= 00000040

******** x 09 ******** x 09

00000000 R
= 00000001

08

= 00000004

******** x 09

******** x 09

=

********
80000102

x

09

= 00000038

= = =

00000030 80000105 00000020

= 00000012

= 00000011

= 00000010

= 00000009

= = = =

00000008 00000069 0000006B 0000006C

= 00000068

= 0000006A

= 00000040

= 00000041

= 00000042

= 00000043

= 80000001

NOT$ USO

NDT$-UB1

NDT$-UB2

NDT$-UB3

NEXUSDESC

NOS PT

NPROMPT

NUMUBAVEC

NUM PAGES

NXT-NEXUS

OPA$CRB

PA

PR$ ICCS

PR$-SID TYP730

PR$-SID-TYP750

PR$-SID-TYP780

PR$-SID-TYP790

PR$-SID-TYP8NN

PR$-SID-TYP8SS

PR$-SID-TYPUV1

PR$-TBIS

PR7BO$ I CR

PR780$-NICR

PR780$-TODR

PTE$C KW

PTE$M-VALI D

READTIME

RPB$B DEVTYP

RPB$L-ADPPHY

RPB$L-ADPVIR

RPB$L-BOOTR1

RPB$L-CSRPHY

RPB$L-CSRVIR

RPB$W-ROUBVEC

SBICONF

SBI S8I SB! SBI

-
-
-

BUS CODE CPU CSR LEN LIKE

SGN$GW TPWA IT

STAY HEADER

SW BUS CODE

SYS$ASSIGN

SYS$BINTIM

SYS$DASSGN

SYS$QIOW

SYSL$BEGIN

SYSL$END

TERM NAMADR

TERM-NAMSIZ

TEST-NEXUS

TIME PROMPT

TIMERR

TMPDESC

TT CHAN

TTNAME

UBA$INITIAL

= 00000028 = 00000029 = 0000002A = 00000028

00000020 R

08

000002E4 R

08

= 00000033

= 00000080

00000000 R

04

00000068 R

09

=

********
20020000

x

09

= =

00000018 00000003

= 00000002

= 00000001

= 00000004

= 00000006

= 00000005

= 00000007

= 0000003A

= 0000001A

= 00000019

= 00000018

= =

10000000 80000000

00000659 R

09

= 00000066

= 0000005C

= = =

00000060 00000020 00000054

= 00000058

= 0000001E

OOOOOOE4 R

08

= 00000000

= 00000001

= 00000001

= 00000001

******** x 09

00000000 R

OA

00000005 R

08

******** GX 09

******** GX 09

******** GX 09

******** GX 09 ******** x 09 ******** x OA

00000507 R
= 00000004

09

00000071 R

09

000005ED R

09

00000508 R
= oooooooc

09

= 00000000

= 00000004

******** x 09

INIADP780 Symbol table
UBA$INTO UBA$L BRRVR UBA$L-CR UBA$UNEXINT UBAERRADR UBAINT4 UBAINT4REL UBAINT5 UBAINT5REL UBAINT6 UBAINT6REL UBAINT7 UBAINT7REL UBAINTADP UBAINTBASE UBINTSZ VA$M SYSTEM VEC$L ADP VEC$L-IDB VEC$L-INITIAL VECTAB

- ADAPTER INITIALIZATION FOR VAX 11/780

******** x 09

00000030

00000004

******** x 09

00000090

00000000

OOOOOOOA

00000020

0000002A

00000040

0000004A

00000060

0000006A

00000089

00000340 R

09

00000094

80000000

00000014

00000008
oooooooc

000003D4 R

09

3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 44

19-0CT-1~83 11:50:19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP(17)

PSECT name
ABS $ABS$ $$$INIT$DATAO $$$INIT$DATA 1 $$$INIT$DATA2 $$$INIT$DATA3 $$$IN IT$DATA4 $$$IN I'r$DATA5 $$$INIT$DATA $$$IN IT$CODE $$$INIT END

Psect synopsis ------------+

Al location
----------

PSECT No. Attributes

00000000 (

0.) 00 ( 0.) NOPIC USR CON ABS LCL NOSHR NOEXE NORD NOWRT NOVEC BYTE

00000004 (

4.) 01 ( 1.) NOPIC USR CON ABS LCL NOSHR EXE RD

WRT NOVEC BYTE

00000060 ( 96.) 02 ( 2.) NOP IC USR CON REL LCL NOSHR EXE RD

WRT NOVEC BYTE

00000000 (

0. ) 03 ( 3. ) NOP IC USR CON REL LCL NOSHR EXE RD

WRT NOVEC BYTE

00000030 ( 48.) 04 ( 4.) NOPIC USR CON REL LCL NOSHR EXE RD

WRT NOVEC BYTE

00000000 (

0. ) 05 ( 5.) NOP IC USR CON REL LCL NOSHR EXE RD

WRT NOVEC BYTE

00000060 ( 96.) 06 ( 6.) NOP IC USR CON REL LCL NOSHR EXE RD

WRT NOVEC BYTE

00000000 (

0. ) 07 ( 7.) NOP IC USR CON REL LCL NOSHR EXE RD

WRT NOVEC BYTE

0000033F ( 831 . ) 08 ( 8.) NOP IC USR CON REL LCL NOSHR EXE RD

WRT NOVEC LONG

00000792 ( 1938.) 09 ( 9. ) NOP IC USR CON REL LCL NOSHR EXE RD

WRT NOVEC QUAD

00000016 ( 2 2. ) OA ( 10.) NOPIC USR CON REL LCL NOSHR EXE RD

WRT NOVEC PAGE

--+
Performance indicators !

Phase

Page faults

Initialization Command processing Pass 1 Symbol table sort Pass 2 Symbol table output Psect synopsis output Cross-reference output
Assembler run totals

31 124 530
0
313 32
7
0
1040

The working set limit was 1950 pages.

CPU Time
00~00:00.07
00:00:00.50 00:00:16.59 00:00:01.67 00:00:06.56 00:00:00. 16 00:00:00.06 00:00:00.00 00:00:25.63

Elapsed Time
00:00:00.34 00:00:01 .88 00:01:02.39 00:00:04.91 00:00:33.79 00:00:00.66 00:00:00.21 00:00:00.00 00:01 :44.18

INIADP780 VAX-11 Macro Run Statistics

- ADAPTER INITIALIZATION FOR VAX 11/780 3-JUN-1984 14:53:36 VAX-11 Macro V03-01

Page 45

19-0CT-1983 11:50: 19 DISK$VMSMASTER:[SYSLOA.SRC]INIADP(17)

134197 bytes (263 pages) of virtual memory were used to buffer the intermediate code. There were 90 pages of symbol table space allocated to hold 1618 non-local and 36 local symbols. 2489 source lines were read in Pass 1, producing 39 object records in Pass 2. 46 pages of virtual memory were used to define 44 macros.

+--------------------------+ ! Macro library statistics !

Macro library name

Macros defined

$255$DUA28:[SYS.OBJ]LIB.MLB;1

21

-$255$DUA28:[SYSLIB]STARLET.ML8;2

15

fOTALS (all librarie~)

36

1755 GETS were required to define 36 macros.

There were no errors, warnings or information messages.

MACRO/LIS=LIS$:INIADP780/0BJ=OBJ$:INIADP780 MSRC$:CPUSW780/UPDATE=(ENH$:CPUSW780)+MSRC$:INIADP/UPDATE=(ENH$:INIADP)+EXECML$/LIB

LIOSUB780

LIOSUB780 Table of contents

(3)

137

- LOADABLE I/0 SUBROUTINES PURGE DATAPATH

3-JUN-1984 14:57:17 VAX-11 Macro V03-01

Page 0

LIOSUB780 V03-012

- LOADABLE I/O SUBROUTINES

3-JUN-1984 14:57: 17 VAX-11 Macro V03-01

Page 1

6-APR-1984 16:16:35 DISK$VMSMASTER:[SYSLOA.SRC]LIOSUB.(1)

0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000
0000 0000 0000 0000 0000 0000

1

.NOSHOW CONDITIONALS

3

.TITLE LIOSUB780 - LOADABLE I/O SUBROUTINES

5

9

13

17

21

22

. I DENT 'V03-0l2'

23

24

25 ;****************************************************************************

26 27 28 29 30
31 32 33 34
35 36
37 38 39 40
41 42 43 44 45
46

; ;

* *

COPYRIGHT (c) 1978, 1980, 1982, 1983, 1984 BY

; * DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS.

;* ALL RIGHTS RESERVED.

* * * *

;*
; * THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ; * ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
;* INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
;* COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
;* OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
;* TRANSFERRED.
; *
;* THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ;* AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT ;* CORPORATION.
; * ; * DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
;* SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.

* * * * * * * * * *
*
* * *

;* ;*
;****

**

***

**

***

**

***

**

***

**

***

**

***

**

***

*****

*****

*****

*****

*****

*****

*****

* ***

47

48 ;++

49

50 FACILITY:

51

52

EXECUTIVE, I/O CONTROL ROUTINES

53

54 ABSTRACT:

55

56 I/O SUBROUTINES WHICH CONTAIN PROCESSOR DEPENDENCIES.

57

58 AUTHOR:

59

60

N. KRONENBERG, JANUARY 12, 1979.

61

62 MODIFIED BY:

63

64

V03-012 KDM0096

Kathleen D. Morse

27-Mar-1984

65

Add memory CSR scanning to IOC$PURGDATAP for MicroVAX I.

66

(All OMA MicroVAX I drive~s should cal 1 this routine, just

67

before calling IOC$REQCOM.)

68

69

V03-011 KDM0081

Kathleen D. Morse

13-Sep-1983

70

Create a version for Micro-VAX I.

71

LIOSUB780 V03-012

- LOADABLE I/O SUBROUTINES

3~JuN-1984 14:57:17 VAX-11 Macro V03-0l

Page 2

6-APR-1984 16:16:35 DISK$VMSMASTER:[SYSLOA.SRC]LIOSUB.(1)

0000 0000 0000
0000 0000 0000 0000 0000 0000 0000. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000

72 73 74
75 76 77 78 79
80 81 82 83 84
85 86 87 88 89 90 91 92 93 94 95 ;--

V03-010 TCM0004

Trudy C. Matthews

4-Jan-1982

Added 11/790-specific path to IOC$PURGDATAP.

V09

TCM0003

Trudy C. Matthews

9-Nov-1982

Added a .TITLE statement for LIOSUB790.

VOS

TCM0002

Trudy C. Mathews

Changed all "7ZZ"s to "730"s.

29-Jul-1981

V07

TCMOOOl

Trudy C Matthews

28-Feb-1980

Changed IOC$PURGDATAP for NEBULA so that it logs

the Unibus Error Summary register itself when there

are Unibus errors reported.

V06

NPK0002

N. KRONENBERG

REPLACED IOC$PURGDATAP FOR NEBULA

4-DEC-1979

V05

NPKOOOl

N. KRONENBERG

23-AUG-1979

CORRECTED 11/750 CHECK FOR PURGE DONE.

V04

TCMOOOl

Trudy C. Matthews

Modified IOC$PURGDATAP for NEBULA.

3-Jul-1979

LIOSUB780 V03-012

- LOADABLE I/O SUBROUTINES

00000001 00000000

0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000
0000

97

98 ; MACRO LIBRARY CALLS:

99 ;

100

$ADPDEF

101

$CRBDEF

102

$EMBETDEF

103

$EMBUEDEF

104

$IDBDEF

105

$PRDEF

106

$UBADEF

107

$UBIDEF

108

$UCBDEF

109

$VECDEF

110

112

C780 LIKE = 1

113

C750=LI KE = 0

115

120

125

130

135

3-JUN-1984 14:57:17 VAX-11 Macro V03-0l

Page 3

6-APR-1984 16:16:35 DISK$VMSMASTER:[SVSLOA.SRC]LIOSUB.(2)

Define ADP offsets
Define CRB offsets Define error types. Define Unibus Error buffer. Define IDB offsets Define IPR'S Define UBA offsets Define UBI offsets Define UCB offsets Define CRB/VEC offsets

LIOSUB780 V03-012

- LOADABLE I/O SUBROUTINES PURGE DATAPATH

3-JUN-1984 14:57: 17 VAX-11 Macro V03-01

Page 4

6-APR-1984 16:16:35 DISK$VMSMASTER:[SVSLOA.SRC]LIOSUB.(3)

10 53 24 A5 52 38 B3
00 05 51 37 A3 54 40 A241 64 01 1F 51 64 08 51 1E 64 01 1E 50 03 50 01 52 0800 C2
10

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00000000 0000 0000 0000 0000 BB 0000 DO 0002 DO 0006 OOOA EF OOOA
oooc
OOOD DE 0010 78 0015 DO 0019 E1 001C 78 0020 D4 0024 11 0026 9A 0028 DE 002B
0030 BA 0030 05 0032
0033 0033 0033 0033 0033
0033 0033 0033

137

.SBTTL PURGE DATAPATH

138 ;+

139 IOC$PURGDATAP - PURGE DATAPATH

140

141 This routine purges the caller's buffered datapath, and clears any

142 datapath errors. if there was a datapath error, this fact is

143 returned to the caller.

144

145 INPUTS:

146

147

RS = UCB address

148

149 OUTPUTS:

150

151

RO-R3 altered

152153

= Other registers preserved
RO low bit clear/set if transmission error/success

154

R1 = DPR contents after purge (for register dump by caller)

155

R2 =address of start of adapter map registers (tor reg dump by caller)

156

R3 = CRB address

157

158

159

.PSECT WIONONPAGED

160

161

.ENABL LSB

162

163 IOC$PURGDATAP::

165

PUSHR #AM<R4>

; Save register

166

MOVL

UCB$L CRB(R5),R3

; Get CRB address

167

MOVL

@CRB$L INTD+VEC$L ADP(R3),R2 ; Get start of adapter register space

168

169

EXTZV #VEC$V DATAPATH,-

; Extract datapath #

170

#VEC$S-DATAPATH,-

; from CRB

171

CRB$L lNTD+VEC$8 DATAPATH(R3),R1

172

MOVAL UBA$L-DPR(R2)[RlJ,R4

; Get address of DPR

173

ASHL

#UBA$V DPR BNE,#1,(R4) ; Purge datapath

174

MOVL

(R4),RT -

; Get DPR contents

175

BBC

#UBA$V DPR XMTER,R1 ,20$ ; Branch if no error

176

ASHL

#UBA$V-DPR-XMTER,#1,(R4) ; Clear error in DPR

177

CLRL

RO

--

; Set to return transfer error

178

BRB

30$

; Join common code

179 20$:

MOVZBL #1,RO

; Set to return transfer success

180 30$:

MOVAL UBA$L MAP(R2),R2

; Return addr of 1st map register

181

182

POPR

#AM<R4>

Restore register

183

RSB

Return

185

186

214

263

297

298

.DSABL LSB

299

300

.END

LIOSUB780 Symbol table
C750 LI KE C780-LI KE CPU TYPE CRB$L INTO IOC$PURGDATAP PR$ SID TYP730 PR$-SID-TYP750 PR$-SID-TYP780 PR$-SID-TYP790 PR$-SID-TYPUV1 UBA$L DPR UBA$L-MAP UBA$V-DPR BNE UBA$V-DPR-XMTER UCB$L-CRBVEC$B-DATAPATH VEC$L-ADP VEC$S-DATAPATH VEC$V=DATAPATH

- LOADABLE I/O SUBROUTINES

00000000

00000001

00000001

00000024

00000000 RG

02

00000003

00000002

00000001

00000004

0000000~

00000040

00000800

0000001F

0000001E

00000024

00000013

00000014

00000005

00000000

3-JUN-1984 14:57:17 VAX-11 Macro V03-01

Page 5

6-APR-1984 16:16:35 DISK$VMSMASTER:[SYSLOA.SRC]LIOSUB.(3)

Psect synopsis

PSECT name

Allocation

PSECT No. Attributes

ABS
$ABS$
WIONONPAGED

00000000 00000000 00000033

0. ) 00 0. ) 01 5 1 . ) 02

0. ) NOP IC USR CON ABS LCL NOSHR NOEXE NORD 1 . ) NOP IC USR CON ABS LCL NOSHR EXE RD 2. ) NOPIC USR CON REL LCL NOSHR EXE RD

+--
! Performance indicators !
---+

Phase

Page faults

CPU Time

Elapsed Time

Initialization
Command processing Pass 1 Symbol table sort Pass 2 Symbol table output Psect synopsis output Cross-reference output Assembler run totals

25

00:00:00.04

00:00:00.24

121

00:00:00.49

00:00:02.65

273

00:00:04.90

00:00: 10.47

0

00:00:00.77

00:00:01.25

31

00:00:00.97

00:00:02.58

3

00:00:00.03

00:00:00.03

3

00:00:00.01

00:00:00.01

0

00:00:00.00

00:00:00.00

459

00:00:07.21

00: 00: 17. 23

The working set limit was 1350 pages.
43453 bytes (85 pages) of virtual memory were used to buffer the intermediate code. There were 40 pages of symbol table space allocated to hold 754 non-local and 2 local 304 source lines were read in Pass 1, producing 13 object records in Pass 2. 17 pages of virtual memory were used to define 16 macros.

symbols.

NOWRT NOVEC BYTE WRT NOVEC BYTE WRT NOVEC BYTE

LIOSUB780 VAX-11 Macro Run Statistics

- LOADABLE I/O SUBROUTINES

3-JUN-1984 14:57:17 VAX-11 Macro V03-0l

Page 6

6-APR-1984 16:16:35 DISK$VMSMASTER:[SYSLOA.SRC)LIOSUB.(3)

---+
Macro library statistics !

Macro library name

Macros defined

$255$DUA28:[SYS.OBJ)LIB.MLB;l

9

$255$DUA28:[SYSLIB)STARLET.MLB;2

4

TOTALS (all libraries)

13

845 GETS were required to define 13 macros.

There were no errors, warnings or information messages.

MACRO/LIS=LIS$:LIOSUB780/0BJ=OBJ$:LIOSUB780 MSRC$:CPUSW780/UPDATE=(ENH$:CPUSW780)+MSRC$:LIOSUB/UPDATE=(ENH$:LIOSUB)+EXECML$/LIB

LOADMREG

LOADMREG Table of contents

( 1)

74

( 1)

120

( 1)

197

( 1)

230

( 1)

276

- LOAD MBA AND UBA MAP REGISTERS
LOAD MASSBUS ADAPTER MAP REGISTERS LOAD UNIBUS ADAPTER MAP REGISTERS GET PFN FROM INVALID PTE Load UBA map registers LOAD UNIBUS ADAPTER MAP REGISTERS FOR UDA PORT

3-JUN-1984 11 :45:48 VAX-11 Macro V03-01

Page 0

LOADMREG V03-002 ;RLRPDTADP
-1
;RLRPDTADP ;RLRPDTADP ;RLRPDtADP ;RLRPDTADP ;KDM0002 ;KDM0002 -24

- LOAD MBA AND UBA MAP REGISTERS

3-JUN-1984 11 :45:48 VAX-11 Macro V03-01

Page 1

12-MAR-1982 17:12:47 DISK$VMSMASTER: [SYS.SRC]LOADMREG.M(1)

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000

1

.TITLE LOADMREG - LOAD MBA AND UBA MAP REGISTERS

1

.IDENT 'V03-002'

3

4

5 ;****************************************************************************

6 ;*

*

7 8

; ;

"' *

9 ; *.

10 ; *

11 ;*

COPYRIGHT (c) 1978, 1980, 1982 BY DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS. ALL RIGHTS RESERVED.
THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED

* * * * *

12 ;*

13 ;*

14 ;*

15 16

;;**

ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.

* * * * *

17 ;* 18 ;* THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE

* *

19 ;* AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT *

20 * CORPORATION.

*

21 22 23

* *
*

DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.

* * *

24 25 26

;;;********************************************************************************

27

28 D. N. CUTLER 1-NOV-77

29

30 LOAD MBA MAP REGISTERS

31

32 MODIFIED BY:

33

.1

V03-002 RLRPDTADP

Robert L. Rappaport

9-Apr-1984

.2

Modify IOC$LUBAUDAMAP so as to pickup the pointer to the

.3

ADP from PDT$L ADP(R4).

.4

. 5

V03-001 KDM0002

Kathleen D. Morse

28-Jun-1982

.6

Add $VADEF.

58

LOADMREG V03-002
;.RLRPDTADP ;RLRPDTADP ;RLRPDTADP ;RLRPDTADP ;RLRPDTADP ;KDM0002 -4

- LOAD MBA AND UBA MAP REGISTERS

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

60

61 ; MACRO LIBRARY CALLS

62

63

64

$ADPDEF

65

$CDRPDEF

66

$CRBDEF

67

$MBA DEF

.1

$PDTDEF

. 2

$PTEDEF

. 3

$UBADEF

.4

$UBMDDEF

.5

$UCBDEF

. 6

$VADEF

72

$VECDEF

3-JUN-1984 11 :45 :48 VAX-11 Macro V03-01

Page 2

12-MAR-1982 17: 12 :47 DISK$VMSMASTER:[SYS.SRC]LOADMREG.M(1)

;DEFINE ADP OFFSETS ;DEFINE CORP OFFSETS ;DEFINE CRB OFFSETS ;DEFINE MBA REGISTER OFFSET DEFINITIONS ;DEFINE PDT OFFSETS ;DEFINE PAGE TABLE ENTRY FIELDS ;DEFINE UCB OFFSETS ;DEFINE UBMD OFFSETS ;DEFINE UCB OFFSETS ;DEFINE VIRTUAL ADDRESS FIELDS ;DEFINE CRB TRANSFER VECTOR OFFSETS

LOADMREG V03-002

- LOAD MBA AND USA MAP REGISTERS LOAD MASSBUS ADAPTER MAP REGISTERS

3-JUN-1984 11 :45:48 VAX-11 Macro V03-01

Page 3

12-MAR-19B2 17:12:47 DISK$VMSMASTER:(SYS.SRC]LOADMREG.M(1)

53 52 7E A5 10 A4 52 51 7C A5 OC A4 51 OC A4 51 52 OlFF C241 52 F7 BF
52 51 OBOO C4
50 7B A5 81 80 09 FB 52 61 53 BE
53 FC AO 0095
BOOOOOOO BF FC A1 53 E5

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00000000 0000 DD 0000 3C 0002 CE 0006 3C OOOA DO OOOE DO 0012 9E 0016 7B 001C 0020 DE 0021 DO 0026 DO 002A 18 002D F5 002F D4 0032 DO 0034 05 0037 ob 0039 30 003C C9 003F
0045 11 0048

74

.SBTTL LOAD MASSBUS ADAPTER MAP REGISTERS

75 ;+

76 IOC$LOADMBAMAP - LOAD MASSBUS ADAPTER MAP REGISTERS

77

78 THIS ROUTINE IS CALLED TO LOAD THE MASSBUS ADAPTER MAP REGISTERS, THE

79 BYTE COUNT REGISTER, AND THE VIRTUAL ADDRESS REGISTER.

80

81 INPUTS:

82

83 84

== R4 ADDRESS OF MBA CONFIGURATION STATUS REGISTER.
R5 UCB ADDRESS OF UNIT TRANSFER IS TO OCCUR ON.

85

86 OUTPUTS:

87

88

THE TRANSFER BYTE COUNT, STARTING PAGE OFFSET, AND ADDRESS OF THE

89

PAGE TABLE ENTIRES THAT DESCRIBE THE TRANSFER ARE RETRIEVED FROM

90

THE SPECIFED UCB AND USED TO LOAD THE MBA BYTE COUNT, VIRTUAL ADDRESS,

91

AND MAP REGISTERS. ONE ADDITIONAL MAP REGISTER IS LOADED AS INVALID

92

TO STOP THE TRANSFER IF A HARDWARE FAILURE SHOULD OCCUR.

93

94

R3 IS PRESERVED ACROSS CALL.

95

96

97

.PSECT WIONONPAGED

98 IOC$LOADMBAMAP::

;LOAD MASSBUS ADAPTER MAP REGISTERS

99

PUSHL R3

;SAVE REGISTERS

100

MOVZWL UCB$W BCNT(R5) ,R2

;GET TRANSFER BYTE COUNT

101

MNEGL R2,MBA$L BCR(R4)

;LOAD BYTE COUNT REGISTER

102

MOVZWL UCB$W BOFF(R5),R1

;GET BYTE OFFSET IN PAGE

103

MOVL

R1,MBA$L VAR(R4)

;LOAD STARTING VIRTUAL ADDRESS

104

MOVL

R1,MBA$L-VAR(R4)

;*****TEMP UNTIL MBA ECO ******

105

MOVAB AX1FF(R2)[R1],R2

;CALCULATE HIGHEST RELATIVE BYTE AND ROUND

106

ASHL

#-9,R2,R2

;CALCULATE NUMBER OF MAP REGISTERS TO LOAD

107 10B 109 10$: 110 111 20$: 112 113 114 115 30$: 116 117

MOVAL MOVL MOVL BGEQ SO BG TR CLRL MOVL RSB MOVL BSBW BISL3

MBA$L MAP(R4),R1 UCB$L-SVAPTE(R5),RO (RO)+-;- ( R1 ) + 30$ R2, 10$ ( R1) (SP)+,R3
-4(RO),R3 IOC$PTETOPFN #AX80000000,R3,-4(R1)

;GET ADDRESS OF MBA MAP REGISTERS ;GET ADDRESS OF PAGE TABLE ;LOAD MAP REGISTER ;IF GEQ PTE INVALID ;ANY MORE TO LOAD? ;LOAD INVALID MAP ENTRY ;RESTORE REGISTER
;GET THE PTE (NOT FROM MAP REGISTER!) ;GET PFN FROM INVALID PTE ;AND LOAD THE MAP REGISTER

118

BRB

20$

LOADMREG V03-002

- LOAD MBA AND UBA MAP REGISTERS LOAD UNIBUS ADAPTER MAP REGISTERS

3-JUN-1984 11:45:48 VAX-11 Macro V03-01

Page 4

12-MAR-1982 17:12:47 DISK$VMSMASTER: [SYS.SRC]LOADMREG.M(l)

7E 53 51 7C A5 52 7E A5 53 24 A5
00 05 54 37 A3 lB
7E 53 51 7C A5 52 7E A5 53 24 A5
00 05 54 37 A3 03 51 54 10 54 0400 BF 05 03 37 A3 54 20 52 OlFF C241 52 F7 8F

004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 004A 7D 004A 3C 004D 3C 0051 DO 0055 EF 0059 0058 005C 11 005F 0061 7D 0061 3C 0064 3C 0068 DO 006C EF 0070 0072 0073 E9 0076 88 0079 AS 007C E 1 0081 0083 88 0086 9E 0089 78 008F

120

.SBTTL LOAD UNIBUS ADAPTER MAP REGISTERS

121 ;+

122 IOC$LOADUBAMAP - LOAD UNIBUS ADAPTER MAP REGISTERS

123 IOC$LOADUBAMAPA - LOAD UNIBUS ADAPTER MAP REGISTERS ALTERNATE ENTRY FOR

124

BYTE ALIGNED UNIBUS DMA DEVICES WHICH NEVER WISH TO SET THE BYTE

125

OFFSET BIT IN MAP REGISTERS. IN ALL OTHER RESPECTS THESE TWO

126

ENTRYPOINTS PRODUCE IDENTICAL RESULTS.

127

128 THIS ROUTINE IS CALLED TO LOAD THE UNIBUS ADAPTER MAP REGISTERS.

129

130 INPUTS:

131

132

= R5 UCB ADDRESS OF UNIT TRANSFER IS TO OCCUR ON.

133

134

IT IS ASSUMED THAT THE DATAPATH AND MAP REGISTERS HAVE BEEN PREVIOUSLY

135

ASSIGNED.

136

137 OUTPUTS:

138

139

EACH MAP REGISTER IS LOADED WITH THE APPROPRIATE PAGE FRAME NUMBER

140

MERGED WITH THE DATAPATH DESIGNATOR AND BYTE OFFSET BIT. ONE ADDITIONAL

141

MAP REGISTER IS LOADED AS INVALID TO STOP THE TRANSFER IF A HARDWARE

142

FAILURE SHOULD OCCUR.

143

144

R3 IS PRESERVED ACROSS CALL.

145 ; -

146

147

.ENABL LSB

148 IOC$LOADUBAMAPA::

;LOAD UNIBUS ADAPTER MAP REGISTERS - ALTERNATE

149

HERE WE DUPLICATE THE CODE IN THE OTHER ENTRY

150

EXCEPT THAT WE DO NOT CHECK WHETHER THE BYTE

151

OFFSET IS ODD. INSTEAD WE BRANCH DIRECTLY

152

PAST THE SETTING OF THE BYTE OFFSET BIT.

153

MOVQ

R3,-(SP)

;SAVE REGISTERS

154

MOVZWL UCB$W BOFF(R5),R1

;GET BYTE OFFSET IN PAGE

155

MOVZWL UCB$W-BCNT(R5),R2

;GET TRANSFER BYTE COUNT

156

MOVL

UCB$L-CRB(R5),R3

;GET ADDRESS OF CRB

157

EXTZV #VEC$V DATAPATH,-

;GET DATAPATH

158

#VEC$S DATAPATH,-

; NUMBER

159

CRB$L INTD+VEC$B DATAPATH(R3),R4

160

BRB

10$

-

; BRANCH AROUND TO JOIN COMMON CODE

161 IOC$LOAOUBAMAP::

;LOAD UNIBUS ADAPTER MAP REGISTERS

162

MOVQ

R3,-(SP)

;SAVE REGISTERS

163

MOVZWL UCB$W BOFF(R5),R1

;GET BYTE OFFSET IN PAGE

164

MOVZWL UCB$W-BCNT(R5) ,R2

;GET TRANSFER BYTE COUNT

165

MOVL

UCB$L-CRB(R5),R3

;GET ADDRESS OF CRB

166

EXTZV #VEC$V DATAPATH,-

;GET DATAPATH

167

#VEC$S-DATAPATH,-

; NUMBER

168

CRB$L INTD+VEC$B DATAPATH(R3),R4

169

BLBC

R1,10i

;IF LBC WORD ALIGNED TRANSFER

170

BISS

#AX10,R4

;SET BYTE OFFSET BIT

171 10$:

BISW

#AX400,R4

;MERGE VALID WITH BYTE OFFSET AND DATAPATH

172

BBC

#VEC$V LWAE,-

;BRANCH IF LONGWORD ACCESS NOT ENABLED

173

CRB$L INTD+VEC$B DATAPAfH(R3), 15$

174

BISB

#AX20~R4

-

ELSE SET LWAE FOR MAP REG

175 15$:

MOVAB AX1FF(R2)[Rl j ,R2

CALCULATE HIG~EST RELATIVE BYTE AND ROUND

176

ASHL

#-9,R2,R2

CALCULATE NUMBER OF MAP REGISTERS TO LOAD

LOADMREG V03-002

- LOAD MBA AND UBA MAP REGISTERS LOAD UNIBUS ADAPTER MAP REGISTERS

3-JUN-1984 11:45:48 VAX-11 Macro V03-01

Page 5

12-MAR-1982 17:12:47 DISK$VMSMASTER:[SYS.SRC]LOADMREG.M(1)

52 36 A3 52
2C 51 38 B3
00 OF 50 34 A3 51 0800 C140 50 78 A5 53 80 02 1 F OB 15 54 53 81 53 EE 52 61 53 BE

0093 91 0094 1E 0098 DO 009A EF 009E
OOAO OOA1 DE OOA4 DO OOAA DO OOAE 19 OOB1 10 OOB3 FO 0085 0089 DO OOBA F5 OOBD
04 ooco
7D OOC2 05 OOC5
OOC6 OOCA

177 178 179 180 181 182 183 184 185 20$: 186 187 188 30$:
189 190 191 192 193 194 40$: 195

CMPB BGEQU MOVL EXTZV
MOVAL MOVL MOVL BLSS BSBB INSV

R2,CRB$L_INTD+VEC$B_NUMREG(R3) ;ENOUGH MAP REGISTERS ASSIGNED?

40$

;IF GEQU NO

@CRB$L INTD+VEC$L ADP(R3),R1 ;GET ADDRESS OF CONFIGURATION REGISTER

#VEC$V-MAPREG,- -

;GET STARTING REGISTER

#VEC$S-MAPREG,-

CRB$L INTD+VEC$W MAPREG(R3),RO

UBA$L-MAP(R1)[ROJ,R1

;GET ADDRESS OF FIRST MAP REGISTER TO LOAD

UCB$L-SVAPTE(R5),RO

;GET ADDRESS OF PAGE TABLE

(RO)+-:-R3

;GET NEXT PAGE TABLE ENTRY

30$

;IF LSS VALID PAGE TABLE ENTRY

IOC$PTETOPFN

;GET PFN FROM INVALID PTE

R4,#21,#11 ,R3

;INSERT VALID, BYTE OFFSET, AND DATAPATH

MOVL

R3,(R1)+

SO BG TR R2,20$

CLRL

( R1)

MOVQ

(SP)+,R3

RSB

BUG CHECK UBMAPEXCED,FATAL

.DSABL LSB

;LOAD UBA MAP REGISTER ;ANY MORE TO LOAD? ;LOAD INVALID MAP ENTRY :RESTORE REGISTERS
;UNIBUS MAP REGISTER ALLOCATION EXCEEDED

LOADMREG V03-002

- LOAD MBA AND UBA MAP REGISTERS GET PFN FROM INVALID PTE

3-JUN-1984 11:45:48 VAX-11 Macro V03-0l

Page 6

12-MAR-1982 17:12:47 DISK$VMSMASTER:[SYS.SRC]LOADMREG.M(l)

OOOOOOQO'FF43 53 OF
FB800000 SF 53
05 53 1A E7 53 16

OOCA OOCA OOCA OOCA OOCA OOCA OOCA OOCA OOCA OOCA OOCA OOCA OOCA OOCA OOCA OOCA OOCA OOCA OOCA OOCA OOCA DO OOCA OOD1 19 OOD2 OOD4 CA 0004 OODA OODB EO OODB E4 OODF 05 OOE3 OOE4 OOE8 OOE8

197

.SBTTL GET PFN FROM INVALID PTE

198 +

199 IOC$PTETOPFN - GET PFN FROM INVALID PTE

200

201 THIS ROUTINE IS CALLED TO RETURN THE PAGE FRAME NUMBER FROM A

202 PAGE TABLE ENTRY WHICH HAS ALREADY BEEN DETERMINED TO BE NOT VALID.

203

204 ; INPUTS:

205 206 ;

R3 = PAGE TABLE ENTRY

207 ;

208 ; OUTPUTS:

209 ; 210 ;

= R3 PAGE FRAME NUMBER AND MAY INCLUDE THE FOLLOWING FIELDS

211 ;

VALID BIT, MODIFY BIT, PROTECTION FIELD, OWNER FIELD

212 ;

213 ;

ALL OTHER REGISTERS PRESERVED

214 ;-

215

216

.ENABL LSB

217 GLOBAL:

218

MOVL

@MMG$GL GPTBASE[R3] ,R3 ;GLOBAL PAGE TABLE ENTRY

219

BLSS

220 IOC$PTETOPFN::

221

BICL

10$

;BRANCH IF VALID

#AC<PTE$M TYPl ! PTE$M TYPO !- ;PTE TYPE BITS

222
223 224 225 i 0$: 226 20$: 227 228

PTE$M GPTX>,R3

BBS

#PTE$V TYPl ,R3,20$

BBSC

#PTE$V=TYPO,R3,GLOBAL

RSB

BUG CHECK INVPTEFMT,FATAL

.DSABL LSB

AND GPTX/PFN BRANCH IF BAD PTE FOR I/O BRANCH IF GLOBAL PAGE
;INVALID PAGE TABLE ENTRY FORMAT

LOADMREG V03-002

- LOAD MBA AND UBA MAP REGISTERS Load UBA map registers

3-JUN-19S4 11 :45:4S VAX-11 Macro V03-01

Page 7

12-MAR-19S2 17:12:47 DISK$VMSMASTER: [SYS.SRC]LOADMREG.M(l)

54 51 15 09
51 OOOOOOOO'GF
54 50 6441 54 24 A5 54 3S B4 51 OSOO C443 00000400 BF
54 BE 52
53 so
02 BB 15 54 53 OB S 1 53 EE 52 61

ODES DOES DOES DOES OOES OOES ODES DOES DOES DOES ODES ODES ODES ODES ODES ODES ODES DOES DOES GOES ODES DOES ODES ODES DOES ODES DD DOES EF OOEA OOEE DO OOEF OOF5 DE OOF6 DO OOFA DO OOFE DE 0102 C9 0108 OlOE D7 0110 DO 0112 19 0115 10 0117 FD 0119
011 c
DO 011 E F5 0121 D4 0124 05 0126

230

.SBTTL Load UBA map registers

231 ;++

232 IOC$LOADUBAMAPN - Load UBA map registers

233

234

Functional description:

235

236

This routine is cal led to load the UNIBUS adapter map registers.

237

It differs from IOC$LOADUBAMAPN in that it does not o~,ain its

23S

variant inputs from the UCB and CRB (which are normally synchronized

239

at fork IPL). Also, the byte offset and longword aligned

240

capabilities are not supported.

241

242 Inputs:

243

244

Rl = buffer address

245

R2 = number of map registers al located

246

(last one should be extra one for wild transfer stopper)

247

R3 = starting map register al located

24S 249

= R4 datapath number
= R5 UCB address

250

251 Outputs:

252

253

RO-R4 destroyed. R5 preserved.

254

255 IOC$LOADUBAMAPN::

256

PUSHL R4

; Save datapath number

257

EXTZV SA#VA$V VPN,$A#VA$S VPN,R1 ,Rl ; Get buffer virtual page number

258

MOVL

GAMMG$GL_SPTBASE,R4

Get system page table addres

259 260 261 262 263 264 265 266 20$: 267 26S 269 30$: 270 271 272 273 274

MOVAL MOVL MOVL MOVAL BISL3
DECL MOVL BLSS BSBB INSV
MOVL SOBGTR CLRL RSB

(R4)[Rl],RO

; Get first PTE address

UCB$L CRB(R5),R4

; Get CRB address

@CRB$L INTD+VEC$L ADP(R4),R4 ; Get first UBA register address

UBA$L MAP(R4)[R3]~Rl

; Get address of first map register

#1@<UBA$V MAP VALID-UBA$V MAP DPD>,- ; Get datapath number

(SP)+,R4

;-and-set map register valid bit

R2

; Subtract last register from count

(RO)+,R3

; Get next page table entry

30$

; Br if valid page

IOC$PTETOPFN

; Get PFN from invalid (global) page

R4,#UBA$V MAP DPD,-

; Insert datapath and valid bit,

#32-UBA$V-MAP-DPD,R3

; clearing other PTE flags

R3,(R1)+ - -

; Load the map register

R2,20$

; Loop through all registers

(Rl)

; Invalidate last one to stop wild xfer

LOADMREG V03-002
;RLRPDTADP
RLRPDTADP RLRPDTADP RLRPDTADP RLRPDTADP
RLRPDTADP RLRPDTADP RLRPDTADP RLRPDTADP RLRPDTADP 9

- LOAD MBA AND UBA MAP REGISTERS

3-JUN-19B4 11:45:4B VAX-11 Macro V03-01

Page B

LOAD UNIBUS ADAPTER MAP REGISTERS FOR UD 12-MAR-19B2 17:12:47 DISK$VMSMASTER: [SYS.SRC]LOADMREG.M(1)

7E 53 7D

OOEO D4 DD

51 DO A5 3C 52 D2 A5 3C 50 3C A5 9E
00 EF 05 54 03 AO

03 51 E9 54 10 BB 54 0400 BF AB 52 01FF C241 9E 52 F7 BF 7B
52

02 AO

51 8EDO 52 91 2B 1E

00 EF OF 50 60

51 0800 C140 DE 50 CC A5 DO 53 80 DO 03 19 FF5E 30
OB 15 54 FO

0127 0127 0127 0127 0127 0127 0127 0127 0127 0127 0127 0127 0127 0127 0127 0127 0127 0127 0127 0127 0127 0127 0127 0127 0127 012A 012A 012A 012E 012E 0132 0136 013A 013C 013D 0140 0140 0143 0146 0148 0151 0155 0156 0156 0159 0150 015F 015F 0161 0162 0164 0164 016A 016E 0171 0173 0176

276

.SBTTL LOAD UNIBUS ADAPTER MAP REGISTERS FOR UDA PORT

277 ;+

278 ; IOC$LUBAUDAMAP - LOAD UNIBUS ADAPTER MAP REGISTERS FOR UDA PORT

279

2BO INPUTS:

2B1

· 1

R4 => PDT .

2B2

R5 => CORP OF I/0 REQUEST.

283

284

IT IS ASSUMED THAT THE DATAPATH AND MAP REGISTERS HAVE BEEN PREVIOUSLY

285

ASSIGNED.

2B6

2B7 OUTPUTS:

2B8

289

EACH MAP REGISTER IS LOADED WITH THE APPROPRIATE PAGE FRAME NUMBER

290

MERGED WITH THE DATAPATH DESIGNATOR AND BYTE OFFSET BIT. ONE ADDITIONAL

291

MAP REGISTER IS LOADED AS INVALID TO STOP THE TRANSFER IF A HARDWARE

292

FAILURE SHOULD OCCUR.

293

294

R3 IS PRESERVED ACROSS CALL.

295 ' 296

297 IOC$LUBAUDAMAP::

;LOAD UNIBUS ADAPTER MAP REGISTERS

298

299

MOVQ

R3,-(SP)

;SAVE REGISTERS

.1

; 2

ASSUME ADP$L CSR

EQ

0

.3

PUSHL @PDT$L_ADP(R4)

Push UBA CSR address on stack.

.4

300

MOVZWL CDRP$W BOFF(R5),Rl

Rl=BYTE OFFSET IN PAGE

301

MOVZWL CDRP$W-BCNT(R5),R2

R2=TRANSFER BYTE COUNT

302

MOVAB CDRP$L-UBARSRCE(R5),RO

RO => MAPPING RESOURCE DESCRIPTOR

303

EXTZV #VEC$V-DATAPATH,-

GET DATAPATH

304

#VEC$S-DATAPATH,-

NUMBER

305

UBMD$B-DATAPATH(RO),R4

306

307

BLBC

Rl, 10$

308

BISS

#AX10,R4

IF LBC WORD ALIGNED TRANSFER SET BYTE OFFSET BIT

309 10$: 310 311

BISW MOVAB ASHL

#AX400,R4 AX1FF(R2) fR1 J ,R2 #-9,R2,R2

MERGE VALID WITH BYTE OFFSET AND DATAPATH CALCULATE HIGHEST RELATIVE BYTE AND ROUND CALCULATE NUMBER OF MAP REGISTERS TO LOAD

312
· 1
. 2
.3 .4 .5 322 323 324 325 326 327 20$: 328 329 330 30$:

POPL CMPB BGEQU
EXTZV
MOVAL MOVL MOVL BLSS BSBW INSV

Rl R2,UBMD$B NUMREG(RO) 40$
#VEC$V MAPREG,#VEC$S-MAPREG,UBMD$W=MAPREG(RO),RO
UBA$L MAP(Rl) [RO] ,R1 CDRP$L SVAPTE(R5),RO (RO)+,R3 30$ IOC$PTETOPFN R4,#21,#11 ,R3

Rl => UBA CSR. ENOUGH MAP REGISTERS ASSIGNED? IF GEQU NO
; GET STARTING REGISTER
GET ADDRESS OF FIRST MAP REGISTER TO LOAD GET ADDRESS OF PAGE TABLE GET NEXT PAGE TABLE ENTRY IF LSS VALID PAGE TABLE ENTRY GET PFN FROM INVALID PTE INSERT VALID, BYTE OFFSET, AND DATAPATH

LOADMREG V03-002

- LOAD MBA AND UBA MAP REGISTERS

3-JUN-1984 11:45:48 VAX-11 Macro V03-01

Page 9

LOAD UNIBUS ADAPTER MAP REGISTERS FOR UD 12-MAR-1982 17:12:47 DISK$VMSMASTER:{SYS.SRC]LOADMREG.M(1)

53 81 53
ED 52 61
53 BE

017A DO 017B F5 017E D4 0181 7D 0183 05 0186
0187 0188

331 332 333 334 335 336 40$: 337

MOVL

R3, (Rl )+

SOBGTR R2,20$

CLRL

( R1)

MOVQ

(SP)+,R3

RSB

BUG CHECK UBMAPEXCED,FATAL

.END

LOAD UBA MAP REGISTER ANY MORE TO LOAD? LOAD INVALID MAP ENTRY RESTORE REGISTERS
UNIBUS MAP REGISTER ALLOCATION EXCEEDED

LOADMREG Symbol table
ADP$L CSR BUG$ INVPTEFMT BUG$-UBMAPEXCED CDRPSL SVAPTE CDRP$L-UBARSRCE CDRP$W-BCNT CDRP$W-BOFF CRB$L INTO G0 LOBAL IOC$LOADMBAMAP IOC$LOADUBAMAP IOC$LOADUBAMAPA IOC$LOADUBAMAPN IOC$LUBAUDAMAP IOC$PTETOPFN MBA$L BCR MBA$L-MAP MBA$L-VAR MMG$GL GPTBASE MMG$GL-SPTBASE PDT$L ADP PTE$M-GPTX PTE$M-TYPO PTE$M=TYP 1. PTE$V TYPO PTE$V-TYP1 UBA$L-MAP UBA$V-MAP DPD UBA.$V-MAP-VALI D UBMD$B DATAPATH UBMD$B-NUMREG UBMD$W-MAPREG UCB$L CRB UCB$L-SVAPTE UCB$W-BCNT UCB$W-BOFF VA$S VPN VA$V-VPN VEC$B DATAPATH VEC$B-NUMREG VEC$L-ADP VEC$S-DATAPATH VEC$S-MAPREG VEC$V-DATAPATH VEC$V-t,_WAE VEC$V-MAPREG VEC$W=MAPREG
PSECT name
ABS $ABS$ WIONONPAGED

- LOAD MBA AND UBA MAP REGISTERS

3-JUN-1984 11 :45:48 VAX-11 Macro V03-01

Page 10

12-MAR-1982 17:12:47 DISK$VMSMASTER:[SYS.SRC]LOADMREG.M(1)

00000000

******** x ******** x

FPFFFFCC

0000003C

FFFFFFD2

FFFFFFDO

00000024

OOOOOOCA R

00000000 RG

00000061 RG

0000004A RG

OOOOOOE8 RG

00000127 RG

00000004 RG

00000010

= o0o0o0o0o0o8o0c0
********

x

O*O*O**O*O*O*EO* x

003FFFFF

00400000

04000000

00000016

OOOOOOlA

00000800

00000015

0000001F

00000003

00000002

00000000

00000024

00000078

0000007E
= 0000007C

00000015

00000009

00000013

00000012

00000014

00000005

OOOOOOOF

00000000

00000005
= 00000000 = 00000010

02 02
02 02 02 02 02 02 02 02 02
+----------------+
! Psect synopsis !
+----------------+

Allocation

PSECT No. Attributes

00000000 00000000 00000188

0.) 00 0.) 01
395.) 02

0.) NOPIC USR CON ABS LCL NOSHR NOEXE NORD NOWRT NOVEC BYTE

1 . ) NOPIC USR CON ABS LCL NOSHR EXE RD

WRT NOVEC BYTE

2. ) NOPIC USR CON REL LCL NOSHR EXE RD

WRT NOVEC BYTE

LOADMREG VAX-11 Macro Run Statistics

- LOAD MBA AND UBA ~AP REGISTERS

3-JUN-1984 11:45:48 VAX-11 Macro V03-0l

Page 11

12-MAR-1982 17:12:47 DISK$VMSMASTER:[SVS.SRC]LOADMREG.M(l)

Performance indicators

Phase

Page faults

CPU Time

Elapsed Time

Initialization Command processing Pass 1 Symbol table sort Pass 2 Symbol table output Psect synopsis output Cross-reference output Assembler run totals

9

00:00:00.08

00:00:00.77

75

00:00:00.61

00:00:06.93

285

00:00:09.21

00:00:38.62

0

00:00:01 .35

00:00:06.01

67

00:00:01.95

00:00:07.61

5

00:00:00.06

00:00:00.06

2

00:00:00.02

00:00:00.02

0

00:00:00.00

00:00:00.00

446

oo : oo': 13 · 2 s

00:01:00.03

The working set limit was 1050 pages. 48842 bytes (96 pages) of virtual memory were used to buffer the intermediate There were 50 pages of symbol table space al located to hold 892 non-local and 322 source lines were read in Pass 1, producing 14 object records in Pass 2. 20 pages of virtual memory were used to define 19 macros.

code. 16 local

symbols.

Macro library statistics

Macro library name

Macros defined

$255$DUA28:[SVS.OBJ]LIB.MLB;l

1 2

$255$DUA28:[SYSLIB]STARLET.MLB;2

4

TOTALS (all 1 ibraries)

16

991 GETS were required to define 16 macros.

There were no errors, warnings or information messages.

MACRO/LIS=LIS$:LOADMREG/OBJ=OBJ$:LOADMREG MSRC$:LOADMREG/UPDATE=(ENH$:LOADMREG)+EXECML$/LIB

IOCIOPOST

IOCLOPOST Table of contents

( 1) ( 2) ( 3) (4)
(5) (6)
(7) (8) (9) ( 10) ( 11)

43 79 115 315 644.2 734 856 948 1036. 1 1037 1054

- I/O COMPLETION POSTING

HISTORY

; DETAILED

DECLARATIONS

I/O COMPLETION POSTING

PAGIO - PAGE I/O COMPLETION

VIRTUAL (OR LOGICAL) I/O COMPLETION

QUEUE NEXT SEGMENT

BUFFERED READ COMPLETION AST ROUTINE

DIRECT I/O COMPLETION AST ROUTINE

ERASE I/O HELPER ROUTINES

MOVE DATA TO USER BUFFER

UNLOCK AREAS IN IRPE'S

3-JUN-1984 11:26:47 VAX-11 Macro V03-01

Page 0

IOCIOPOST V03-024 ;ACG0422
-1
;ACG0422 ;ACG0422 ;ACG0422 ;ACG0421 ;ACG0421 ;ACG0421 ;EMD0076 ;EMD0076 ;EMD0076

- IIO COMPLETION POSTING

3-JUN-1984 11 :26:47 VAX-11 Macro V03-01

Page 1

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST.(1)

0000 0000 0000 0000 0000 0000 0000 0000 0000
oooq
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

1

.TITLE IOCIOPOST - I/O COMPLETION POSTING

.1

.IDENT 'V03-024'

3

4 5

;' ****************************************************************************

6 7

; **

8 *

9 *

10 11

; **

COPYRIGHT (c) 1978, 1980, 1982 BY DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS. ALL RIGHTS RESERVED.
THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED

* * * * * *

12 13 14 15 16

* * * *
*

ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER / COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.

* * * * *

17 18

; **

THE INFORMATION IN THIS SOFTWARE IS

SUBJECT TO CHANGE WITHOUT NOTICE

* *

19 * AND SROULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT *

20 * CORPORATION.

*

21 ; *
22 ;* DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS 23 ;* SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.

* * *

24 25 26

;;;********************************************************************************

27

28 ;++

29 FACILITY: EXECUTIVE, I/O SYSTEM

30

31 ABSTRACT:

32

IOCIOPOST IMPLEMENTS THE DEVICE INDEPENDENT COMPLETION PROCESSING FOR

33

I/0 PACKETS. IT IS INVOKED BY QUEUEING THE PACKET ON THE I/O POST QUEUE

34

AND TRIGGERING THE IPL$ IOPOST SOFTWARE INTERRUPT. SOME OF THE IOPOST

35

OPERATIONS SUCH AS SETTING EVENT FLAGS, UNLOCKING BUFFER PAGES,

36

RELEASING BUFFERS AND PAGING I/0 COMPLETION ARE PERFORMED IN THE IOPOST

37

INTERRUPT SERVICE ROUTINE, WHILE OTHER OPERATIONS THAT REQUIRE ACCESS

38

TO PROCESS ADDRESS SPACE ARE PERFORMED BY SENDING A SPECIAL KERNEL AST.

39
40 ENVIRONMENT: MODE = KERNEL, RESIDENT

41

42

43

.SBTTL HISTORY

; DETAILED

44

45 AUTHOR: R. HUSTVEDT, CREATION DATE: 26-AUG-76

46

47 MODIFIED BY:

48

. 1

V03-024 ACG0422

Andrew C. Goldstein,

1-May-1984 19:35

.2

Fix use of RO in ACG0421

.3

.4

V03-023 ACG0421

Andrew C. Goldstein,

20-Apr-1984 14:19

.5

Fix segment byte count limiting in erase QIO's

.6

.7

V03-022 EM00076

Ellen M. Dusseault

05-Apr-1984

.8

Modify IOPOST to check for a valid status bit for

.9

encryption. If valid, deal locate nonpaged pool buffer

IOCIOPOST V03-024
;EMD0076 ;EMD0076 ;SSA0021 ;SSA0021 ;SSA0021 ;WMC0020 ;WMC0020 ;WMC0020 ;WMC0020 ;WMC0019 ;WMC0019 ;WMC0019 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;ROW49597C ;ROW49597C ;ROW49597C ;ROW49597C ;ROW49597C ;ROW49597C ;ROW0218 ;ROW0218 ;ROW0218 ;ROW0218 ;ADE9005 ;ADE9005 ;ADE9005 ;STJ3100 ;STJ3100 ;STJ3100 ;STJ3100 ;STJ3100 ;STJ3085 ;STJ3085 ;STJ3085 ;STJ3085 ;STJ3085 ;STJ3085 ;ROW49597B ;ROW49597B ;ROW49597B ;ROW49597B ;ROW49597B ;RLRMXBCNTC ;RLRMXBCNTC ;RLRMXBCNTC ;RLRMXBCNTC ;RLRMXBCNTC ;RLRMXBCNTC RLRMXBCNTC RLRMXBCNTA RLRMXBCNTA

- I/0 COMPLETION POSTING HISTORY : DETAILED

3-JUN-1984 11:26:47 VAX-11 Macro V03-0l

Page 2

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST.(1)

0000 . 10
0000 . 11 0000 . 12 0000 . 13 0000 . 14 0000 . 15 0000 . 16 0000 . 17 0000 . 18 0000 . 19 0000 .20 0000 . 21 0000 .22
0000 .23 0000 .24 0000 .25 0000 .26 0000 . 27 0000 .28 0000 .29 0000 .30 0000 . 31 0000 .32 0000 .33 0000 .34 0000 .35 0000 .36 0000 .37 0000 .38 0000 .39 0000 .40 0000 .41 0000 .42 0000 .43 0000 .44 0000 .45 0000 .46 0000 .47 0000 .48 0000 .49
booo .50
0000 . 51 0000 .52 0000 .53 0000 .54 0000 .55 0000 .56 0000 .57 0000 .58 0000 .59 0000 .60 0000 .61 0000 .62 0000 .63 0000 .64 0000 .65 0000 .66

which contains the encryption key.

V03-021 SSA0021

Stan Amway

Decrement device queue length in UCB.

22-Mar-1984

V03-020 WMC0020

Wayne Cardoza

07-Mar-1984

Move POSTEF to fork context to regain optimization which

avoids reexecution of WAITFR .

V03-019 WMC0019

Wayne Cardoza

28-Dec-1983

Erase QIOs can be physical, logical, or virtual.

V03-018 CDS0003

Christian D. Saether

14-Dec-1983

Add IOC$BUFPOST entry point. This is used to perform

the iopost level part of i/o posting to be executed as

a subroutine cal 1 directly and avoid the iopost software

interrupt entirely. The FllBXQP is the initial user

of this feature .

V03-017 ROW49597C

Ralph 0. Weber

21-SEP-1983

Change PAGEIO OR SWAPIO patch (from ROW49597B and ROW49597) to zero bytes transfered count in the IOSB when status~is not

successful and bytes transfered is greater than or equal to

bytes requested.

V03-016 ROW0218

Ralph 0. Weber

7-SEP-1983

Change maximum byte count, UCB$L MAXBCNT, tests to be

unsigned.

-

V03-015 ADE9005

Alan D. Eldridge

30-May-1983

Changed BSBW to JSB for cal ls to IOC$MAPVBLK and IOC$CVTLOGPHY.

V03-014 STJ3100

Steven T. Jeffreys,

03-May-1983

-Added local subroutine CHECK ERASE.

-Do not update IRP$L SVAPTE for ALL erase I/O's. This

is an extention of STJ3085.

V03-013 STJ3085

Steven T. Jeffreys,

13-Apr-1983

-Do not update IRP$L SVAPTE for erase I/O segmented

requests if using the specail erase PPT.

-After segmentation complete, resore original SVAPTE

address to IRP$L SVAPTE.

V03-012 ROW49597B

Ralph 0. Weber

9-APR-1983

Change PAGEIO OR SWAPIO from ROW49597 to zero bytes

transfered count-when status is not successful and bytes

transfered is greater than or equal to bytes requested.

V03-011 RLRMXBCNTc

Robert L. Rappaport

28-Mar-1983

Verify IRP$L DIAGBUF is non-zero before assuming that it

contains the original value of IRP$L SVAPTE in VIRTUAL LOGIO.

V03-010 RLRMXBCNTb

Robert L. Rappaport

22-Mar-1983

Check for file oriented device before going to VIRTUAL LOGIO.

V03-009 RLRMXBCNTa

Robert L. Rappaport

22-Mar-1983

CLRL the byte count ln the I/O status before queueing

IOCIOPOST V03-024
;RLRMXBCNTA ;RLRMXBCNTA ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;ROW49597 ;ROW49597 ;ROW49597 ;ROW49597 ;ROW49597 ;ROW49597 ;ROW49597 ;ROW49597 ;ROW49597 ;ROW49597 ;ROW49597 ;STJ3049 ;STJ.3049 ;STJ3049 ;CDS0002 ;CDS0002 ;CDS0002 ;CDS0002 ;CDS0001 ;CDS0001 ;CDSOOOl ;KDM0002 ;KDM0002 ;KDM0002 ; LJK45299 ;LJK45299 ; LJK45299 -27

- I/0 COMPLETION POSTING HISTORY : DETAILED

3-JUN-1984 11 :26:47 VAX-11 Macro V03-01

Page 3

24-APR-1982 15:46:59 DISK$VMSMASTER: [SYS.SRC]IOCIOPOST.(1)

0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

.67
.68 .69 .70 . 71 .72 .73 .74 .75 .76 .77 .78 .79
.80 .81 . 82 .83 .84 -.85 .86 .87 .88 .89 .90 .91 .92 .93 .94 .95 .96 .97 .98
. .99 76 77 ;**

an !RP back to the ACP in VIRTUAL LOGIO.

V03-008 RLRMXBCNT

Robert L. Rappaport

11-Mar-1983

Allow for segmentation of Logical I/O (and Virtual)

based on the UCB$L_MAXBCNT field.

V03-007 ROW49597

Ralph 0. Weber

26-JAN-1983

Change both VIRTUAL and PAGEIO OR SWAPIO to guarantee an error

status in IRP$L IOSTl whenever-the bytes transfered is less

than the bytes requested. For V3.x, the error wil 1 be

SS$ CTRLERR. After that, it wil 1 be SS$ INCSEGTRA. The check

and-error status are required to detect and gracefully

revcover from the instance where a driver returns success

status but bytes transfered is less than bytes requested.

The segmented transfer logic goes berserk when this happens

and eventually crashes the system.

V03-006 STJ3049

Steven T. Jeffreys

Add support for the erase qio.

06-Jan-1983

V03-005 CDS0002

C Saether

12-0ct-1982

Fix bug where R5 was not preserved when queuing

packet to xqp.

V03-004 CDS0001

C Saether

Changes to accomodate XQP mechanism.

18-Jul-1982

V03-003 KDM0002

Kathleen D. Morse

Added $DEVDEF and $SSDEF.

28-Jun-1982

V03-002 LJK45299

Lawrence J. Kenah

2-Jun-1982

Fix deaccess-pending-on-spooled-device logic.

IOCIOPOST V03-024
;STJ3049 ;KDM0002 ;STJ3049
;KDM0002

- I/O COMPLETION POSTING DECLARATIONS

3-JUN-1984 11: 26:47 VAX-11 Macro V03-01

Page 4

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST.(2)

0000
0000 0000 0000 0000 0000 0000 0000 0000
0000. 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
00000000 0000
01 0000 03 0001 01 0002 04 0003

79

.SBTTL DECLARATIONS

80

81 INCLUDE FILES:

82

83

$ACBDEF

84

$A QB DEF

85

$CA DEF

86

$CCBDEF

87

$CXBDEF

.1

$DC DEF

.2

$DEVDEF

.3

$IODEF

88

$IPLDEF

89

$IRPDEF

90

$IRPEDEF

91

$JIBDEF

92

$PCBDEF

93

$PFNDEF

94

$PHDDEF

95

$PR DEF

96

$PRIDEF

97

$PTEDEF

98

$RSNDEF

.1

$SSDEF

99

$UCBDEF

100

$VADEF

101

$VCBDEF

102

$WCBDEF

103

$WQHDEF

104

105

106 ; OWN STORAGE:

107 ;

108

.PSECT $AEXENONPAGED,LONG

109 PRITBL:

110

.BYTE PRI$ IOCOM

111

.BYTE PRI$-TOCOM

112

.BYTE PRI$-IOCOM

113

.BYTE PRI$=TICOM

; AST CONTROL BLOCK DEFINITIONS ; DEFINE AQB OFFSETS ; CONDITIONAL ASSEMBLY PARAMETERS ; CCB DEFINITIONS ; DEFINE CXB OFFSETS ; DEVICE TYPE CODES ; DEVICE TYPE DEFINITIONS ; I/O REQUEST CODES ; I PL DEFINITIONS ; IRP DEFINITIONS ; IRPE DEFINITIONS ; JIB DEFINITIONS ; PCB DEFINITIONS ; PFN DATA BASE DEFINITIONS ; PROCESS HEADER DEFINITIONS ; PROCESSOR REGISTER DEFINITIONS ; PRIORITY INCREMENT DEFS ; PAGE TABLE ENTRY DEFINITIONS ; DEFINE RESOURCE WAIT NUMBERS ; DEFINE SYSTEM STATUS CODES ; DEFINE UCB OFFSETS ; DEFINE VIRTUAL ADDRESS FIELDS ; DEFINE VCB OFFSETS ; DEFINE WCB OFFSETS ; WAIT QUEUE HEADER DEFINITIONS
TABLE OF PRIORITY INCR CLASSES 0 => DIRECT WRITE 1 => BUFFERED WRITE 2 => DIRECT READ 3 => BUFFERED READ

IOCIOPOST V03-024
;RLRMXBCNT ;SSA0021 ;SSA0021 ;SSA0021 ;SSA0021 ;SSA0021 ;SSA0021 -4
EMD0076 EMD007'6 EMD0076

- I/O COMPLETION POSTING I/0 COMPLETION POSTING

3-JUN-1984 11 :26:47 VAX-11 Macro V03-01

Page 5

24-APR-1982 15:46:59 DISK$VMSMASTER:[SVS.SRC]IOCIOPOST.(3)

7E 54 7E 52 7E 50 55 OOOO'DF
16 50 BE 52 BE 54 BE
0386
61 EB
6A AO lB
51 QC AS Fl
51 51 54 OOOO'DF41
50 lC A5 6A AO E3

0004 0004 0004 0004
0004 0004 0004 0004 0004 0004 0004 0004 0004 0004 0004 0004 0004
0004 0004 0004 0004 0004 0004 0004 0004 0004 0004 0004 0004 0004 0004 70 0004 70 0007 70 OOOA
OF OOOD lC 0012 7D 0014 7D 0017 7D 001A 02 0010
001E 31 001E
0021 16 0021 11 0023
0025 B4 0025 11 002B
002A DO 002A 19 002E
0030 3C 0030 DO 0033 DO 0039 B7 003D 19 0040

115

.SBTTL I/O COMPLETION POSTING

116 ;++

117 FUNCTIONAL DESCRIPTION:

118

119

IOC$IOPOST IS INITIATED BY TRIGGERING AN IPL$ IOPOST SOFTWARE

120

INTERRUPT AFTER PLACING A COMPLETED I/O PACKET IN THE IOPOST

121

QUEUE. IOC$IOPOST PERFORMS ALL APPROPRIATE COMPLETION ACTIVITY

122

REQUIRED FOR THE PACKET EITHER DIRECTLY OR BY QUEUEING KERNEL

123

ASTS TO CONCLUDE PROCESSING IN THE CONTEXT OF THE PROCESS

124

WHEN REQUIRED.

125

126 CALLING SEQUENCE:

127

128

SOFTINT #IPL$ IOPOST

129

130 INPUT PARAMETERS:

131

132

NONE

133

134 IMPLICIT INPUTS:

135

136

IOC$GL_PSFL - IOPOSTING QUEUE

137

138 OUTPUT PARAMETERS:

139

140

NONE

141

142

143

144

.ENABL LSB

145 IOC$IOPOST::

I/O POSTING INTERRUPT

146

MOVQ

R4,-(SP)

SAVE

147

MOVQ

R2,-(SP)

NORMAL

148

MOVQ

RO,-(SP)

REGISTERS

149 IOPOST: REMQUE @WAIOC$GL PSFL,R5

150

BVC

10$

-

GET HEAD Of POST QUEUE QUEUE NOT VET EMPTY

151

MOVQ

(SP)+,RO

RESTORE

152

MOVQ

(SP)+,R2

REGISTERS

153

MOVQ

(SP)+,R4

AND EXIT

154

REI

IF QUEUE EMPTY

155

.1 5$:

BRW

VIRTUAL LOGIO

PROCESS VIRTUAL (OR LOGICAL) I/O COMPLETIO

. 2

.3 7$:

JSB

( R1)

CALL END ACTION ROUTINE

.4

BRB

IOPOST

.5

.6 8$:

CLRW

UCB$W_QLEN(RO)

Device queue length went negative

.7

BRB

11$

Reset queue length and continue

160

161 10$:

MOVL

IRP$L_PID(R5) ,Rl

GET PIO/END ACTION ADDRESS

162

BLSS

7$

BR IF END ACTION ADDRESS

163

(SYSTEM SPACE ADDRESSES ARE NEGATIVE)

164

MOVZWL R1,R1

GET PROCESS INDEX

165

MOVL

@WA$CH$GL PCBVEC[R1] ,R4 AND TRANSLATE TO PCB ADDRESS

.1

MOVL

IRP$L UCB(R5),RO

RO => UCB. (Presets UCB for DIO path)

.2

DECW

UCB$W=QLEN(RO)

Decrement device queue length

.3

BLSS

B$

Length went negative, so go adjust

IOCIOPOST V03-024 ;EMD0076 ;EMD0076 ;EMD0076 ;EMD0076 ;EMD0076 ;EMD0076 -3
SSA0021 SSA0021 SSA0021 SSA0021 SSA0021
2
STJ3100 STJ3100 STJ3100 STJ3100 STJ3100 1

- I/O COMPLETION POSTING I/O COMPLETION POSTING

3-JUN-1984 11:26:47 VAX-11 Macro V03-01

Page 6

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST.(3)

07 2A A5 OF 50 5C A5 FFB2
03 2A A5 00 OOC6
3E A4 53 2C A5

2A A5

44 BF 50

53 42 51 32 A5 52 30 A5 08 1 C ·2A A5 OE 17 38 AO AO 38 A5 46 A5 07 3A A5 44 A5
05
3A A5 44 A5
BO 51 OlFF C142
51 F7 BF 51 OA
06 20 A5 066C
OB 50 FF56 OB
03 2A A5 06B3
FF4B'

El 0042 DO 0047 30 004B El 004E 31 0053 B6 0056 DO 0059
005D
0050
005P 93 0050 12 0062
0064 0064 0064 0064 0064 05 0064 13 0066 DO 006B 3C 006C EO 0070 0072 El 0075 0077 E9 007A 85 007E 13 0081 Dl 0083
0086 0088 11 0088 OOBA Bl 008A 008D 008F OOBF 12 OOBF 9E 0091 78 0097 009B El 009C 009E 30 OOAl EB OOA4 30 OOA7 El OOAA OOAC 30 OOAF OOB2 0082 OOB2 0082
30 OOB2 0085 0085 0065

.4 11 $:

BBC

#IRP$V KEY,IRP$W STS(R5),12$ ; set, buffer al loc for encryption

.5

MOVL

IRP$L KEYDESC(R5T, RO ; rO contains address of alloc buffer

.6

BSBW

EXE$DEANONPAGED

; deal locate this buffer

. 7 12$:

BBC

#IRP$V BUFIO,IRP$W STS(R5),13$ ; IF CLEAR, DIRECT I/0

.B

BRW

BUFIO

-

BUFFERED I/O

.9 13$:

INCW

PCB$W DIOCNT(R4)

UPDATE DIRECT I/O COUNT

169

MOVL

IRP$L=SVAPTE(R5),R3

GET ADDRESS OF FIRST PTE

170

171

ASSUME I RP$V PAGIO LE 7

172

ASSUME IRP$V-SWAPIO LE 7

173

BITB

#<IRP$M PAGIO ! IRP$M SWAPIO>,IRP$W STS(R5) PAGIO OR SWAPIO?

174

BNEQ

PAGIO OR SWAPIO

-

-

175

176

177 DIRECT I/O COMPLETION

178

179

180 DIRIO: TSTL

R3

PTE ADDRESS VALID?

lBl

BEQL

18$

IF EQL NO PAGES TO UNLOCK

1B2

MOVL

IRP$L BCNT(R5),R1

GET REQUESTED TRANSFER BYTE COUNT

1B3

MOVZWL IRP$W BOFF(R5),R2

GET BYTE OFFSET IN PAGE

.1

BBS

#IRP$V PHYSIO,-

. 2

IRP$W STS(R5),UNLOCK

BRANCH IF PHYSICAL I/O

. 3

BBC

#OEV$V FOO,-

; If NOT file oriented, go to UNLOCK.

.4

UCB$L DEVCHAR(RO),UNLOCK; (RO preloaded in common DIO/BIO path)

.5

BLBC

IRP$L-IOSTl(R5),5$

BRANCH IF ERROR IN VIRT. OR LOG. REQUEST

186

TSTW

IRP$L-OBCNT+2(R5)

WAS ORIGINAL COUNT > 64K?

187

BEQL

14$

EQL IMPLIES NO

188

CMPL

IRP$L IOST1+2(R5),-

LONGWORD COMPARE FOR > 64K OBCNT

1B9

IRP$L-OBCNT ( R5)

IF COMPLETED ORIGINAL BYTE COUNT

190

THEN NO SPECIAL VIRTUAL PROCESSING

191

BRB

16$

BRANCH AROUND TO COMMON 'BNEQ'

192 14$:

193

CMPW

IRP$L IOST1+2(R5),-

*NOTE 'CMPW' DUE TO CODE PATH FOR <64K BCN

194

IRP$L=OBCNT ( R5)

IF COMPLETED ORIGINAL BYTE COUNT

195

THEN NO SPECIAL VIRTUAL PROCESSING

196 16$;

197

BNEQ

5$

OTHERWISE DO THE SEGMENTED COMPLETION

198 UNLOCK: MOVAB 511 (Rl) [R2] ,Rl

COMBINE OFFSET AND COUNT AND ROUND

199

ASHL

#-VA$S BYTE,Rl,Rl

CONVERT TO NUMBER OF PAGES

.1
· 2
. 3 .4 . 5 17$: 201 18$: 202 203 204 19$: 205 206 207 208 209 210 211

BBC
BSBW BLBS BSBW BBC
BSBW

#I0$V ERASE,IRP$W-FUNC(R5), 17$ CHECK-ERASE
RO, 19$ MMG$UNLOCK #IRP$V EXTEND,IRP$W STS(R5),19$ UNLOCK MORE

. IF OF CA$_MEASURE IOT

BSBW

PMS$END_RQ

ENDC

BRANCH IF DEFINITELY NOT AN ERASE
IS THIS AN ERASE FUNCTION? BRANCH IF IT IS AN ERASE UNLOCK PAGES
BRANCH IF NO IRPE'S ATTACHED UNLOCK AREAS DESCRIBED IN IRPE'S REFERENCE LABEL
INSERT END OF I/O REQUEST MESSAGE

IOCIOPOST V03-024
;CDS0003
;CDS0003 ;CDS0003 ;WMC0020 ;WMC0020 ;WMC0020 -2
;ROW49597 ;ROW49597B ;ROW49597B ;ROW495978 ;ROW49597B ;ROW49597B ;ROW49597B
ROW49597B ROW49597B ROW49597B ROW49597B ROW49597B ROW49597C ROW49597 ROW49597
;ROW49597 -18

- I/O COMPLETION POSTING I/O COMPLETION POSTING

3-JUN-1984 11 :26:47 VAX-11 Macro V03-0l

Page 7

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST.(3)

0648'CF 18 A5 009A
034A
51 3A A5 12 38 A5
44 A5 51 3E
32 A5 51 11
2234 BF 38 A5
32 A5 51 05 51
3A A5 40 A5 51 51 17 09
51 48 A5 51
09 38 A5 40 A5 44 A5 32 A5 BE
40 A5 3A A5 53 4C A5 2C A5 53
FEFO'

9E OOB5 OOB9
31 DOBB OOBE OOBE
31 OOBE OOC1 OOC1 OOC1 OOCl OOC1 OOC1 OOC1 OOC1 OOC1 OOCl OOC1 OOC1 OOC1 OOC1 OOCl
DO OOCl E9 OOC5 D 1 OOC9 13 OOCD D1 OOCF 13 0003 BO 0005
0009 OODB OODB Dl OODB lF OODF 04 OOEl D4 OOE3 CO OOE6 EF ODEA ODEE OOEF CO OOEF E9 OOF3 C3 OOF7 OOFA OOFC 12 OOFE 0100 0100 0100 0100 DO 0100 0103 DO 0105 DO 0109 0100 OlOD OlOD 30 OlOD

.1

MOVAB WADIRPOST,ACB$L KAST(R5) ; SET SPECIAL KERNEL AST ADDRESS

. 2

BRW

40$

.3

.4 BRW QNXTSEG:

. 5

-

BRW

QNXTSEG

. 6

214

215

PAGE I/O OR SWAP I/O COMPLETION

216

217

218 PAGIO OR SWAPIO:

219

220

221

222

223

224

225

226

227

. 1

MOVL

IRP$L IOST1+2(R5), Rl

.2

BLBC

IRP$L-IOST 1 ( R5) , 21 $

. 3

CMPL

Rl, IRP$L OBCNT(R5)

.4

BEQL

26$

.5

CMPL

Rl, IRP$L BCNT(R5)

.6

BEQL

23$

. 7

MOVW

#SS$ INCSEGTRA, -

GO DO THE NEXT VIRTUAL SEGMENT
HERE WE ASSUME DISK I/0 FOR PAGING AND SWAPPING AND WE FURTHER RELY ON THE FACT THAT ALL DISK DRIVERS TRADITIONALLY RETURN ZERO IN THE 2ND LONGWORD OF THE I/O STATUS BLOCK FOR DATA TRANSFER OPERATIONS. THEREFORE THIS IS COMPATIBLE WITH DISK CLASS DRIVER WHICH GROWS THE # OF BYTES TRANSFERRED FIELD IN THE IOSB TO A FULL LONGWORD.
Get bytes transfered . Branch if transfer not successful. If completed whole transfer, skip al 1 this segmenting junk.
Bytes transfered = bytes requested?
Branch if equal. Else, change success status

.8 .9 .10 21$: .11 . 12 . 13 . 14 23$: . 15

CMPL BLSSU CLRL CLRL ADDL EXTZV

IRP$L IOST 1 ( R5)

R1, IRP$L BCNT(R5)

23$

-

R 1
IRP$L IOST1+2(R5) R1, IRP$L ABCNT ( R5) #VA$V_VPN-:- -

to error status. For the error cases: Bytes transfered < bytes requested? Branch if less than. Else, assume no bytes transfered. Clear bytes transfered in IRP too. Update accumulated byte count. Convert bytes transfered to

.16

#<32-VA$V VPN>, Rl, Rl

246

ADDL

Rl,IRP$L SEGVBN(R5)

247

BLBC

IRP$L IOST1(R5),24$

248

SUBL3 IRP$L-ABCNT(R5),-

249

IRP$L-OBCNT(R5) ,-

250

IRP$L-BCNT(R5)

251

BNEQ

BRW_QNXTSEG

252

253 LAST SEGMENT COMPLETED OR ERROR

254 ;

255 24$:

256

MOVL

IRP$L ABCNT(R5),-

257

IRP$L-IOST1+2(R5)

258

MOVL

IRP$L-DIAGBUF(R5) ,R3

259

MOVL

R3,IRP$L SVAPTE(R5)

260 26$:

261

IF OF CA$_MEASURE_IOT

262

263

BSBW

PMS$END RQ

pages transfered. NEXT STARTING VBN (OR ERROR VBN) BRANCH IF ERROR CALCULATE REMAINING BYTE COUNT TO BE TRANSFERRED BRANCH IF ANOTHER SEGMENT TO DO
SET BYTES TRANSFERRED GET SAVED SVAPTE AND PUT IT BACK
INSERT END OF I/O REQUEST MESSAGE

IOCIOPOST V03-024
;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ; CDS0(}03 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 -1

- I/O COMPLETION POSTING I/O COMPLETION POSTING

3-JUN-1984 11:26:47 VAX-11 Macro V03-01

Page 8

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST.(3)

76 2A A5 02

18 A5

14 A5 3C

00000158'EF

3A A4 03 2A A5 OC
3E A4
FEDD'
50 0080 C4

0110 0110 0110
EO 0110 0115 0115 0115 0115 0115
DO 0115. 11 011A
011 c 011 c 011 c 011 c 011 c 9F 011 c
0122 0122 0122 0122 0122 0122 0122 0122 0122 0122 0122 0122 0122
0122 0122 0122 0122 0122 0122 0122 0122 0122 0122 0122 0122 0122 0122 0122 B6 0122 E1 0125 B6 012A 012D
012D 0120 0120 30 0120 0130 0130 0130 DO 0130

264

265

.ENDC

266

267

BBS

#IRP$V PAGIO,IRP$W STS(R5),PAGIO BRANCH IF PAGE 1/0

268

269

270

SWAP I/0 COMPLETION

271

272

273

MOVL

IRP$L ASTPRM(R5),ACB$L KAST(R5) ; SET KERNEL AST ADDRESS

274

BRB

40$ -

- ; AND ENQUEUE AST

275

276

277 BUFFERED I/O COMPLETION

278

279

. 1 BUFIO: PUSHAB 40$

; 'INLINE' SUBROUTINE CALL.

. 2

.3

.4 THE FOLLOWING PIECE OF CODE MAY BE CALLED AS A SUBROUTINE DIRECTLY

.5 TO DO THE PART OF BUFFERED 1/0 COMPLETION THAT NORMALLY EXECUTES

. 6 AS A RESULT OF AN IOPOST SOFTWARE INTERRUPT .

. 7

. 8 THE F11BXQP, FOR EXAMPLE, EXECUTES VIRTUAL FILE SYSTEM FUNCTIONS

.9 IN PROCESS CONTEXT. THERE IS NO NEED FOR THE IOPOST INTERRUPT

. 10 AND SPECIAL KERNEL AST TO POST I/O COMPLETION. AFTER RETURNING

. 11 FROM THIS SUBROUTINE, THE F11BXQP WILL DO A

. 12

. 13

JSB

@ACB$L KAST (R5)

. 14

. 15 TO COMPLETE POSTING THE I/O COMPLETION .

. 16 BOTH THE IOPOST SOFTWARE INTERRUPT AND THE SPECIAL KERNEL COMPLETION

. 17 AST ARE AVOIDED .

. 18

. 19 THE CALLER SHOULD TEST IRP$L PIO AND POST A NORMAL IOPOST INTERRUPT

.20 IF IT IS NEGATIVE, AS THAT CASE IS NOT HANDLED HERE.

. 21

.22 THE F11BXQP CODE THAT USES THIS ROUTINE IS IN [F11X.SRC]IODONE.MAR.

.23

.24 IPL= IPL$ ASTDEL TO BLOCK PROCESS DELETION (PREVENT LOSS OF IRP).

.25 R4 = PCB ADDRESS

.26 R5 = IRP ADDRESS

.27

.28

.29 IOC$BUFPOST::

.30

INCW

PCB$W BIOCNT(R4)

; UPDATE BUFFERED I/0 COUNT

281

BBC

#IRP$V FILACP,IRP$W STS(R5),NOTACP ; BR IF NOT ACP I/O

282

INCW

PCB$W_DIOCNT(R4)

; RESTORE DIRECT I/O COUNT

283 NOTACP:

284

285

.IF OF CA$_MEASURE IOT

286

287

BSBW

PMS$END RQ

INSERT END OF I/O REQUEST MESSAGE

288

289

.ENDC

290

291

MOVL

PCB$L JIB(R4),RO

GET JIB ADDRESS

IOCIOPOST V03-024
;CDS0003 ·; CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 ;CDS0003 -3
;WMC0020 ;WMC0020 ;WMC0020 ;WMC0020 ;WMC0020 ;WMC0020 ;WMC0020 ;WMC0020

- I/0 COMPLETION POSTING I/O COMPLETION POSiING

3-JUN-1984 11: 26:47 VAX-11 Macro V03-0l

Page 9

24-APR-1982 15:46:59 DISK$VMSMASTER: [SVS.SRC]IOCIOPOST.(3)

51 30 A5 20 AO S1
so 2C AS

3C 0135
co 0139
DO 013D

OE 13 0141

0566'CF 9E 0143

18 AS

0147

09 2A AS 01 EO 0149

FEAF' 30 014E

0648'CF 9E 0151

18 AS

01S5

05 01S7

0158

0158

02 00 EF 01S8

so 2A AS

0156

03 2A AS 09 EO 015E

50 01 AA 0163

0166

51 OC AS DO 0166

52 FE91 CF40 9A 016A

53 22 A5 9A 0170

0174

FE83' 30 017A

OB AS 80 SF 88 017D

FE7B' 30 0182

0185

FE92 31 0188

0186

292 293 294 295 296
.1 . 2 .3 30$:
.4 35$: . 5 .6 300 40$:
301 302 303 50$: 304 305
.1 . 2 . 3 .4 .5 .6 .7 .8

MOVZWL ADDL MOVL BEQL MOVAB

IRP$W BOFF(R5),R1

; Convert I/O byte count to a

R1 ,JIB$L BVTCNT(RO)

; Update Byte Count Quota.

IRP$L_SVAPTE(R5),RO

; ANY BUFFER SPECIFIED?

30$

; IF EQL NO

WABUFPOST,ACB$L_KAST(R5) ; ASSUME READ FUNCTION

longword.

BBS BSBW MOVAB

#IRP$V_FUNC,IRP$W~STS(R5),35$

IF SET, READ FUNCTION

EXE$DEANONPAGED

; DEALLOCATE WRITE BUFFER

WAD!RPOST,ACB$L_KAST(R5) ; SET SPECIAL KERNEL AST ADDRESS

RSB EXTZV

; RETURN TO PROCESS CONTEXT IOPOSTING ; PROCESS, OR CONTINUE INLINE IF THIS ; IS NORMAL IOPOST SOFTWARE INTERRUPT. #IRP$V_BUFI0,#2,IRP$W_STS(R5),RO ; GET PACKET TYPE

BBS BICW
MOVL MOVZBL MOVZBL DSBINT BSBW BISB BSBW ENBINT BRW .DSABL

#IRP$V_TERMIO,IRP$W_STS(R5),50$ ; BR IF TERMINAL I/O

#1 ,RO

; ELSE TREAT AS NORMAL I/O COMPLETION

; FOR PRIORITY INCREMENT SELECTION

IRP$L_PID ( R5), R1

; PROCESS IDENTIFICATION

PRITBL[RO] ,R2

; SET PRIORITY INCREMENT CLASS

IRP$B EFN(R5) ,R3

; GET EVENT FLAG NUMBER

#IPL$-SYNCH

; PREVENT INTERRUPT FROM MP SECONDARY

SCH$POSTEF

; AND POST IT

#AX80,ACB$B_RMOD(R5)

; SET INTERNAL AST FLAG

SCH$QAST

; NOW QUEUE THE KERNEL AST

IOPOST LSB

; GET NEXT PACKET TO POST

IOCIOPOST V03-024

- I/O COMPLETION POSTING PAGIO - PAGE I/O COMPLETION

3-JUN-1984 11 :26:47 VAX-11 Macro V03-01

Page 10

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST.(4)

7E 56 56 55
55 6C A4 09 17
57 3A A6 33 2A A6 01
1 F 63 15 00
50 50 OOOOOOOO'EF 11 53 01C3
03 FE43'

018B 018B 018B 018B 018B 018B 018B 018B 018B 0188 0-188 0188 0188 0188 018B 0188 0186 018B 0188 0188 0188 0188 0188
0188 0188 0188
0186 0188 0188 0188 0188 7D 0188 DO 018E 0191 0191 DO 0194 EF 0198 019A 0198 EO 019E 01A3
01A3 01A3 01A3
13 01A3 EF 01A5
01A9 Dl 01AA
01AC 1A 0181 DD 0183 30 0185
01B8 01B8 01B8 14 01B8 30 OlBA

315

SBTTL PAGIO - PAGE I/O COMPLETION

316

317 PAGING I/O COMPLETION

318

319 INPUTS:

320

321

R3 = SYSTEM VIRTUAL ADDRESS OF PAGE TABLE ENTRY

322 323

= R4 = PROCESS CONTROL BLOCK ADDRESS
R5 I/0 REQUEST PACKET ADDRESS

324

325

FOR PAGE READ COMPLETION, THE FOLLOWING LOCATIONS IN THE

326

I/O REQUEST PACKET HAVE SPECIAL SIGNIFICANCE.

327

328

IRP$L_ASTPRM

ORIGINAL PROCESS PAGE TABLE ENTRY BACKING STORE

329

ADDRESS IF PAGE WAS A COPY ON REFERENCE PAGE.

330

PFN$V GBLBAK SET IF IT WAS GLOBAL CRF

331

0 IF NOT A COPY ON REFERENCE PAGE

332

IRP$L AST

MASTER PTE CONTENTS IF GLOBAL CRF (>O)

333

SLAVE PTE ADDRESS IF GLOBAL NOT CRF (<O)

334

0 IF NOT GLOBAL

335

336

FOR PAGE WRITE COMPLETION, THE FOLLOWING LOCATIONS IN

337

THE I/O REQUEST PACKET HAVE SIGNIFICANCE.

338

339

IRP$B RMOD

REQUEST MODE ! ACB$V QUOTA. IF ACB$V QUOTA IS SET,

340

PROCESS REQUESTED AN-AST ON PAGE WRITE COMPLETION

341

IRP$L AST

AST ADDRESS IF REQUESTED

342

IRP$L -ASTPRM

AST PARAMETER IF SPECIFIED

343

IRP$L-IOSB

ADDRESS OF I/O STATUS BLOCK IF SPECIFIED. IF

344

NON-ZERO, THEN PROCESS EXPECTS I/O STATUS RETURNED.

345 ;

346 PAGIO: MOVQ

R6,-(SP)

SAVE SOME MORE REGISTERS

347

MOVL

R5,R6

USE R6 FOR !RP ADDRESS

348

349

SETI PL #IPL$ SYNCH

; SYNCHRONIZE ACCESS TO SYSTEM DATA BASE

350

MOVL

PCB$L-PHD(R4),R5

; USE R5 FOR PROCESS HEADER ADR

351

EXTZV #VA$V-VPN,-

352

#<32-VA$V VPN>,-

; FORM PAGE COUNT

353

IRP$L IOST1+2(R6),R7

; OF THE DATA TRANSFERRED

354

BBS

#IRP$V_FUNC,IRP$W_STS(R6),PAGRD_DONE ; BRANCH IF PAGE READ

355 356

= PAGE WRITE COMPLETE - R7 NUMBER OF PAGES

357

CONDITION CODES SET FROM LOAD OF R7

358

359

BEQL

60$

; BRANCH IF NO PAGES SUCCESSFULLY TRANSFERRE

360

EXTZV #PTE$V_PFN,#PTE$S PFN,(R3),RO ;GET PFN FROM PTE

361

CMPL

RO,MMG$GL_MAXPFN

;IS THIS PAGE IN SHARED MEMORY?

362

BGTRU 60$

363 20$:

PUSHL R3

364

BSBW

PFN IO DONE

365

366 CONDITION CODES SET FROM DECREF

367

368

BGTR

40$

369

BSBW

MMG$RELPFN

;BR IF PAGE IN SH MEM, NO PFN DATABASE SAVE SVAPTE
; SET PFN DATA BASE
BRANCH IF REFCNT NOT 0 RELEASE THE PAGE

IOCIOPOST V03-024

- I/O COMPLETION POSTING PAGIO - PAGE I/O COMPLETION

3-JUN-1984 11:26:47 VAX-11 Macro V03-01

Page 11

24-APR-1982 15:46:59 DISK$VMSMASTER: [SYS.SRC]IOCIOPOST.(4)

53 BE 04 C1 OlBD

EF 57 F5 01Cl

OOC4 SF A3 01C4

57 OS A6

01CS

01CB

OlCB

04 3S A6 E9 OlCB

01CF

01CF

01CF

OlCF

6S 13 01CF

60 11 010·1

0103

0150 31 0103

0106

0106

0106

0106

0106

3C 13 0106

OlAO 30 0108

0108

OlDB

OlDB

11 14 OlDB

0100

0100

0100

04 A3 OF 0100

FElD' 30 01EO

OS BA 01E3

10 A6 04 Cl 01E5

51

01E9

25 1S 01EA

1F 11 OlEC

OOOO'Df40 07 SB 01EE

00 50 1F E2 01F4
83 50 ca 01FS

01FB

51 10 A6 DO 01FB

10 18 01FF

0201

0201

0201

S67FFFFF SF CB 0201

52 61

0207

s 1 52 50 C9 0209

10 A6 51 DO 0200

C4 57 F5 0211

7F 3S A6 E9 0214

021S

021S

0218

0218

021S

51 14 A6 DO 021S

370 40$: 371 372 60$:

ADDL3 #4,(SP)+,R3

; GET NEXT PTE ADDRESS

SOBGTR R7,20$

; DO THE NEXT PAGE IF ANV

SUBW3 #IRP$C LENGTH,IRP$W_SIZE(R6),R7 ; IF EXTENDED I/0 PACKET

373

; THEN COMPLETION IS DONE BV

374

; SPECIAL UPDATE SECTION KERNEL AST

375

BLBC

IRP$L IOST1(R6),PAGWRT ERR ; BRANCH IF PAGE WRITE ERROR

376

377 CONDITION CODES SET FROM LOAD OF R7

378

379 PAGWRT ERR DONE:

3SO

BEQL

PAGIO DONEl

BRANCH IF NOT, COMPLETE THE I/O HERE

381

BRB

PAGIO-DONE2

COMPLETE I/O IN PROCESS CONTEXT

382 PAGWRT ERR:

-

3S3

BRW

PAGWRT ERRl

3S4 ;
385 ; PAGE READ COMPLETE - R7 = NUMBER OF PAGES

386

CONDITION CODES SET FROM LOAD OF R7

387

388 PAGRD DONE:

3S9

- BEQL

100$

BRANCH IF NO PAGES SUCCESSFULLY TRANSFERRE

390 20$:

BSBW

PFN IO DONE

RECORD PAGE READ DONE

391

392 CONDITION CODES SET FROM DECREF

393

394

BGTR

30$

BRANCH IF REFCNT NOT ZERO

395

396 NO MORE REFERENCES FOR THIS PAGE, DON'T MAKE IT VALID, RELEASE IT

397

398

PUSHAL 4(R3)

SAVE PTE ADR FOR NEXT PTE

399

BSBW

MMG$RELPFN

RELEASE THE PFN

400

POPR

#AM<R3>

RECOVER PTE FOR NEXT PAGE IN CLUSTER

401

ADDL3 #4,IRP$L_AST(R6),Rl

GLOBAL PAGE?

402 403 404 30$:

BGEQ BRB BISB

SO$

BRANCH IF IT ISN'T

60$

VES, SET CONTEXT FOR NEXT PAGE IN CLUSTER

#PFN$C ACTIVE,@WAPfN$AB STATE[RO] ; PAGE IS NOW ACTIVE

405

BBSS

#PTE$V-VALID,R0,40$

TURN VALID ON WITH PFN

406 40$:

BISL

RO,(R3)+

SET VALID IN PTE

407

NEXT PTE ADDRESS IN R3

408

MOVL

IRP$L AST(R6) ,Rl

409

BGEQ

80$ -

410

GLOBAL PAGE? BRANCH IF NOT

411 PAGE IS A GLOBAL PAGE, Rl = PROCESS PTE, MUST MAKE IT VALID TOO

412

413

BICL3 #AC<PTE$M_PROT ! PTE$M_OWN>,(Rl),R2 ; PROTECTION AND OWNER FIELDS

414

BISL3 RO,R2,(Rl)+

; MAKE PROCESS PTE VALID

415 60$:

MOVL

R1,IRP$L AST(R6)

; SET UP FOR NEXT PAGE IN CLUSTER

416 80$:

SOBGTR R7,20$ -

; DO THE NEXT PAGE IF ANV

. 417 100$:
418

BLBC

IRP$L IOST1(R6),PAGRD ERR ; BRANCH IF PAGE READ ERROR

419 ; LAST PAGE IN CLUSTER HAS BEEN PROCESSED, COMPLETE THE PROCESSING

. 420 ; ASSOCIATED WITH THE TRANSFER AS A WHOLE.
421

422 PAGIO DONE:

423

- MOVL

IRP$L ASTPRM(R6),Rl

; COPY ON REFERENCE SECTION?

IOCIOPOST V03-024

- I/0 COMPLETION POSTING PAGIO - PAGE I/O COMPLETION

3-JUN-1984 11:26:47 VAX-11 Macro V03-01

Page 12

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST.(4)

lB OB 51 17 OOOOOOOO'FF
55 51 10 A6
51 51 09 17
50 3A A6 FDC7'
52 00
30 A6 15 54
0008'CF OB
54 OOOO'CF EF 10 57 16
7E 38 A6 50 56 56 BE
FD92' 50 01
FD8C'

13 021C El 021E DE 0222
0228 DO 0229 32 022D EF 0230
0232 0233 30 0236 0239
0239 0239 0239 0239
0239 0239 0239 0239 0239 0239 0239 0239 0239 0239 9A 0239 023C 0240 0240 0240 0240 0240
0240 0240 0240 B5 0240 13 0243 DD 0245 B5 0247 15 024B DO 024D 0252 11 0256 BA 0258 025A D5 025D 12 025F
E9 0261 DO 0265 7D 0268
0268 0268 026B
026B 30 026B
3C 026E 30 0271

424

8EQL

20$

BRANCH IF NOT

425

BBC

#PFN$V GBLBAK,Rl,10$

BRANCH IF NOT GBL CRF

426

MOVAL @MMG$GL SYSPHD,R5

SYSTEM HDR FOR GBL CRF PAGE

427

MOVL

IRP$L AST(R6),R1

CONTENTS OF GBL PTE FOR GBL CRF

428 10$:

CVTWL Rl ,R1-

SECT! ON INDEX

429

EXTZV #VA$V VPN,-

430

#<32-VA$V VPN>,-

PAGE COUNT FROM

431

IRP$L IOST1+2(R6),RO

BYTE COUNT TRANSFERRED

432

BSBW

MMG$SUBSECREF

SUBTRACT RO FROM SECTION REFERENC COUNT

433

434 REPORT THAT PAGE I/O HAS COMPLETED.

435

436 NORMALLY IT IS ONLY NECESSARY TO REPORT "PAGE FAULT COMPLETE"

437 TO THE PROCESS THAT INITIATED THE I/O, BUT FOR SYSTEM PAGES

438 AND FOR GLOBAL PAGES, MULTIPLE FAULTS CAN OCCUR FOR THE SAME

439 PAGE WHILE IT IS ON ITS WAY INTO MEMORY. ALL PROCESSES WHICH

440 FAULT THE PAGE WHILE ITS STATE IS "READ IN PROGRESS" GET QUEUED

441 ON IHE COLLISION PAGE QUEUE, AND THE COLLISION BIT IS SET IN THE

442 TYPE BYTE OF THE PFN DATA BASE. THIS ROUTINE ALSO REPORTS THE

443 COLLISION PAGE AVAILABLE EVENT TO ALL PROCESSES ON THE COLLISION

444 QUEUE, IF THE COLLISION BIT IS SET.

445

446 20$:

447 PAGIO DONE1:

448

- MOVZBL #PRI$ NULL,R2

; SET FOR NULL PRIORITY INCREMENT

449

RPTEVT PF COM-

; REPORT PAGE FAULT COMPLETE

450

451 IRP$W BOFF WAS INCREMENTED IF ANY OF THE PAGES HAD THE COLLISION BIT SET

452

453

R7 = NON ZERO IF SUPPOSED TO ISSUE KERNEL AST

454

USED ONLY FOR PAGE WRITE COMPLETION

455

BUT MUST BE ZERO FOR PAGE READ COMPLETION

456

457 PAGIO DONE2:

458

TSTW

IRP$W BOFF(R6)

; ANY PAGES WITH COLLISION BIT SET?

459

BEQL

60$ -

; BRANCH If NOT

460 461 40$;

PUSHL R4

; SAVE PCB ADDRESS

TSTW

WASCH$GQ COLPGWQ+WQH$W WQCNT ; ANYONE WAITING?

462

BLEQ

50$

-

- ; BRANCH IF NOT .

463

MOVL

WASCH$GQ COLPGWQ,R4

; GET NEXT PCB

464

RPTEVT COLPGA -

; REPORT "COLLISION PAGE AVAILABLE"

465

BRB

40$

; REPEAT UNTIL QUEUE IS EMPTY

466 50$:

POPR

#AM<R4>

; RESTORE SAVED PCB ADDRESS

467 60$:

SETI PL #IPL$ IOPOST

; LOWER TO I/O POST LEVEL

468

TSTL

R7

469

BNEQ

PAGIO KAST

; EXHAUSTED PAGE COUNT NON-ZERO? ; BRANCH IF YES, COMPLETE 1/0 IN PROCESS

470

BLBC

IRP$L-IOST1(R6),PAGIO ERR ; BRANCH IF MORE ERROR PROCESSING TO DO

471

MOVL

R6,RO-

- ; GET PACKET ADDRESS FOR RELEASE

472

MOVQ

(SP)+,R6

: RESTORE SAVED REGISTERS

473
= 474 RO 1/0 REQUEST PACKET ADDRESS

475 ;

476 PAG!O ERR DONE:

477

- BSBW

EXE$DEANONPAGED

AND RELEASE IT

478

MOVZWL #RSN$ ASTWAIT,RO

479

BSBW

SCH$RAVAIL

SET AST WAIT RESOURCE WAIT NUMBER SET RESOURCE AVAILABLE

IOCIOPOST V03-024
WMC0020 WMC0020 WMC0020
1

- I/O COMPLETION POSTING PAGIO - PAGE I/O COMPLETION

3-JUN-1984 11 :26:47 VAX-11 Macro V03-01

Page 13

24-APR-1982 15:46:59 DISK$VMSMASTER: [SYS.SRC]IOCIOPOST.(4)

FD96 31 0274

0277

0277

0277

0277

55 56 DO 0277

56 BE 7D 027A

51 DC A5 DO 0270

OOOOOOOO'EF 9E 0281

18 A5

0287

52 01 9A 0289

OB A5 BO BF 88 028C

FD6C' 30 0291

FD76 31 0294

0297

0297

0297

0297

0297

0297

0297

0297

0297

0297

0297

0297

OOEl 30 0297

14 90 029A

OOOO'DF40

029C

51 14 A6 DO 02AO

lB 13 02A4

OE 51 17 El 02A6

09 EF 02AA

17

02AC

52 3A A6

02AD

51 52 co 0280

51 01 Cl 0283

14 A6

0286

OOOO'DF40 51 DO 0288

10 A6 D5 028E

04 18 02C1
10 AG 04 co 02C3

OOOO'DF40 85 02C7

12 14 02CC

OOOO'DF40 85 02CE

OB 13 0203

52 02 9A 0205

FD25' 30 0208

03 11 02DB

FD20' 30 02DD

FF35 31 02EO

02E3

02E3

02E3

02E3

02E3

02E3

480

BRW

IO POST

; CONTINUE TO PROCESS POST QUEUE

481

482 COMPLETE THE PAGE WRITE IN THE PROCESS CONTEXT

483 484

P' AGIO

KAST:

485

- MOVL

R6,R5

; I/O PACKET ADDRESS BACK TO NORMAL REG

486

MOVQ

(SP)+,R6

; RESTORE SAVED REGISTERS

487

MOVL

IRP$L PID(R5),R1

; PROCESS ID FOR ISSUING KERNEL AST

488

MOVA8 MMG$UPDSECAST,ACB$L_KAST(R5) ; ADDRESS TO START KERNEL AST

489

MOVZ8L #PR I$ IO COM, R2

PRIORITY INCREMENT

· 1

BISB

#AX80:ACB$B RMOD(R5)

SET INTERNAL AST FLAG

· 2

8S8W

SCH$QAST -

NOW QUEUE THE XERNEL AST

.3

8RW

IO POST

GET NEXT PACKET TO POST

491

492 PAGE READ ERROR - CLEAN UP LOGIC

493

494

R3 = PTE ADDRESS OF BAD PAGE

495

R4 = PCB ADDRESS

496

R5 = PROCESS HEADER ADDRESS

497 498

= R6 = I/0 REQUEST PACKET ADDRESS
R7 0 AND MUST BE PRESERVED

499
. 500
501

IRP$L AST(R6) = PROCESS PTE ADR OF BAD PAGE IF GLOBAL PAGE
= IRP$L=ASTPRM(R6) GPTX FOR START OF TRANSFER IF GLOBAL CRF

502 PAGRD ERR:

503

BSBW

PFN IO DONE

; COMPLETE THE I/O FOR ERR PAGE

504

MOVB

#<PFN$M DELCON ! PFN$C RDERR>,- ; SET PAGE TO

505

@WAPFN$AB STATE[RO)

READ ERROR STATE

506

MOVL

IRP$L ASTPRM(R6),R1

GET BACKING STORE ADR IF CRF

507

BEQL

120$ -

BRANCH IF NOT COPY ON REFERENCE

508

BBC

#PFN$V GBLBAK,Rl,100$

BRANCH IF NOT GLOBAL CRF

509

EXTZV #VA$V VPN,-

510

#<32-VA$V VPN>,-

ADJUST GPTX BY

511

IRP$L IOST1+2(R6),R2

TRANSFERRED PAGE COUNT

512

ADDL

R2,R1-

TO GET CORRECT GPTX FOR BAD PAGE

513

ADDL3 #1,R1, IRP$L_ASTPRM(R6)

SET GPTX FOR START OF NEXT TRANSFER

514 100$: MOVL

R1,@WAPFN$AL BAK[RO]

FIX BACKING STORE ADDRESS

515 120$: TSTL

IRP$L AST(R6)

IF GLOBAL PAGE (NOT CRF)

516

8GEQ

140$ -

517

ADDL

#4,IRP$L AST(R6)

THEN SKIP OVER PROCESS PTE ADR

518 140$: TSTW

@WAPFN$AW REFCNT[RO)

IS THIS THE LAST REFERENCE?

519

BGTR

160$

-

BRANCH IF NOT

520

TSTW

@WAPFN$AW SWPVBN[RO]

IF THIS PROCESS HAS BEEN SWAPPED OUT

521

8EQL

150$

-

522

MOVZBL #PFN$C BADPAGLST,R2

THEN PUT THIS PAGE IN LIMBO

523

BSBW

MMG$INSPFNT

ON THE BAD PAGE LIST

524

BRB

160$

525 150$: BSBW MMG$RELPFN

OTHERWISE RELEASE THE PAGE

526 160$: 8RW

PAGIO_DONE

COMPLETE THIS PORTION OF THE PAGE READ

527

528 DO THE REMAINING SEGMENT OF THE I/O FOR A PAGE READ OR WRITE ERROR

529 SKIP OVER THE PORTION THAT WAS TRANSFERRED SUCCESSFULLY AND SKIP OVER

530 THE PAGE IN ERROR WHICH WAS DEALT WITH BV EITHER PAGRD ERR OR

531 PAGWRT ERR AND SET UP TO TRANSFER THE REMAINING PAGES IF ANY.

532 NOTE THAT FOR PAGE WRITE ERRORS THE REST OF THE TRANSFER IS NOT DONE

IOCIOPOST V03-024

- I/0 COMPLETION POSTING PAGIO - PAGE I/0 COMPLETION

3-JUN-1984 11:26:47 VAX-11 Macro VQ3-01

Page 14

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST.(4)

55 56 DO 56 SE 7D
09 EF 17 51 3A A5 51 D6 50 51 09 9C 44 A5 50 C2 25 13 40 A5 D4
30 A5 B4 44 A5 DO 32 A5 48 A5 D6 53 4C A5 DO 4C A5 6341 DE
53 DD 53 55 DO
FCE6' 30 53 8EDO
OOEB 31 50 55 DO
FF45 31
57 DD 09 EF 17 50 3A A6 09 EF 17 57 44 A6 57 50 C2
6E 05
03 12 57 01 DO
7E D4 63 15 00 EF

02E3 02E3 02E3 02E3 02E6 02E9 02-EB 02EC 02EF
02F1 02F5 02F9 02FB 02FE 02FE 0301 0304 0306 0309 030D 0312 0312 0312 0314 0317 031A 031D 031D 031D
0320 0323 0326
0326 0326 0326 0326 0326 0326
0326 0326 0326 0326 0326 0326 0328 032A 0328 032E
0~30
0331 0334 0337
0339 0338 033E 033E 0340

533 ; IF I/0 COMPLETION STATUS IS RETURNED TO THE PROCESS.

534

535 PAGIO ERR:

536

- MOVL

R6,R5

IRP ADDRESS

537

MOVQ

{SP)+,R6

RESTORE ADDITIONAL SAVED REGISTERS

538

EXTZV #VA$V VPN,-

539

#<32-VA$V VPN>,-

GET PAGE COUNT TRANSFERRED

540

IRP$L IOST1+2(R5),R1

541

INCL

Rl -

COUNT THE ERROR PAGE AS DONE

542

ROTL

#9,Rl ,RO

BYTE COUNT COMPLETED

543

SUBL

RO,IRP$L OBCNT(R5)

BYTE COUNT REMAINING

544

BEQL

40$

-

BRANCH IF NOTHING LEFT TO DO

545

CLRL

IRP$L ABCNT(R5)

ZERO ACCUMULATED BYTE COUNT

546

547

CLRW

IRP$W BOFF(R5)

ZERO BOFF AND

548

MOVL

IRP$L-OBCNT(R5)

549

IRP$L-BCNT(R5)

; SET NEW BYTE COUNT

550

INCL

IRP$L-SEGVBN(R5)

; SEGMENT VBN WAS POINTING AT ERROR VBN

551

MOVL

IRP$L-DIAGBUF(R5) ,R3

; STARTING SVAPTE OF ENTIRE TRANSFER

552

MO VAL (R3) [Rl], IRP$L DIAGBUF(R5) ; STARTING 'PTE ADDRESS OF THIS SEGMENT

553

554

. IF

DF,CA$ MEASURE IOT

555

PUSHL R3

-

-

REMEMBER SVAPTE

556

MOVL

R5,R3

SET ADR OF IRP

557

BSBW

PMS$START RQ

558

POPL

R3

-

INSERT START OF I/O REQUEST MESSAGE RESTORE SVAPTE

559

.ENDC

560

561

BRW

QNXTSEG

QUEUE THIS SEGMENT AND RETURN TO IOPOST

562 40$:

MOVL

R5,RO

I/O PACKET ADDRESS

563

BRW

PAGIO ERR_DONE

564

565 PAGE WRITE ERROR - CLEAN UP LOGIC

566

567

R3 PTE ADDRESS FOR ERROR PAGE

568

R4 PCB ADDRESS

569

R5 PROCESS HEADER ADDRESS

570

R6 I/O REQUEST PACKET ADDRESS

571 ; 572 '

R7 0 IF ALL COMPLETION LOGIC IS DONE IN IOPOST NON-ZERO IF COMPLETION (AND ERROR REPORT) ARE TO BE

. 573
574

RETURNED TO THE PROCESS.

575 PAGWRT ERR 1 :

576

PUSHL R7

SAVE KERNEL AST FLAG

577

EXTZV #VA$V VPN,-

578

#<32-VA$V VPN>,-

PAGE COUNT TRANSFERRED

579

IRP$L IOST1+2(R6),RO

580

EXTZV #VA$V-VPN,-

581

#<32~VA$V VPN>,-

ORIGINAL PAGE COUNT

582

IRP$L OBCNT(R6),R7

583

SUBL

RO,R7-

COUNT OF REMAINING PAGES

584

TSTL

(SP)

IF NOT REPORTING ERROR TO PROCESS

585

_BNEQ

20$

586

MOVL

#1 ,R7

ONLY CLEAN UP THE ERROR PAGE HERE

587

REST OF TRANSFER WILL BE DONE BY PAGIO ERR

588 20$:

CLRL

-(SP)

; !NIT "ERROR PAGE" FLAG

-

589

EXTZV #PTE$V_PFN,#PTE$S_PFN,(R3),RO ;GET PFN FROM PTE

IOCIOPOST V03-024

- I/O COMPLETION POSTING PAGIO - PAGE I/O COMPLETION

3-JUN-1984 11:26:47 VAX-11 Macro V03-01

Page 15

24-APR-1982 15:46:59 DISK$VMSMASTER,[SYS.SRC]IOCIOPOST.(4)

50 50 OOOOOOOO'EF 25 53 0028 OOOO'DF40 07
10 08 04 AE 00
52 02 FC99' 03 FC94'
53 BE 04 DB 57 03
57 51 FE54
63 15 00 50
EB BF 51 OOOO'DF40
09 51 04 OOOO'DF40 10
30 A6 04 51
07 51 42 A5
FC5F'

0344 D1 0345
0347 lA 034C DD 034E 30 0350 E2 0353 00 0359
035A 035A 035A 035A 14 035A E2 035C 0361 0361 0361 DO 0361 30 0364 11 0367 30 0369 C1 036C F5 0370 BA 0373 0375 DO 0375
31 0378 0378 037B 037B 037B 0378 037B 0378 037B 0378 037B 0378 037B 037B 0378 0378 0378 0378 0378
EF 0378 037F
BB 03BO
0383
E5 03BB SA 038C B6 0392
91 0395 12 0398 3C 039A 30 039E
03A1

590

CMPL

RO,MMG$GL_MAXPFN

;IS THIS PAGE IN SHARED MEMORY?

591 592 70$:
593 594

BGTRU PUSHL BS8W BBSS

130$

;BR IF PAGE IN SH MEM, NO PFN DATABASE

R3

; SAVE SVAPTE

PFN IO DONE

; COMPLETE I/0 FOR THIS PAGE

#PFN$V=MODIFY,@WAPFN$AB STATE[R0],80$ ; FORCE MODIFY BIT

595 80$:

596

597 CONDITION CODES STILL SET FROM DECREF AT END OF PFN IO DONE

598

599

BGTR

120$

; BRANCH IF NOT THE LAST REFERENCE

600

B8SS

#0,4(SP), 100$

; BRANCH IF NOT ERROR PAGE

601

602 THIS IS THE PAGE THAT HAD THE WRITE ERROR

603

604

MOVL

#PFN$C BADPAGLST,R2

PUT IT ON THE BAD PAGE LIST

605

BSBW

MMG$INSPFNT

WITH "MODIFY" SET AND "BAD" CLEAR

606

BRB

120$

607 100$: BSBW

MMG$RELPFN

NO MORE REFERENCES, RELEASE THE PAGE

608 120$: ADDL3 #4,(SP)+,R3

NEXT PTE ADDRESS

609

SOBGTR R7,70$

610 130$: 611

POPR

#AM<RO,Rl>

CLEAN OFF BAD PAGE FLAG
Rl = SAVED KERNEL AST INDICATOR

612

MOVL

R1, R7

PUT IT IN R7, SET CONDITION CODES

613

BRW

PAGWRT ERR DONE

614

615 PFN IO DONE

616

617 INPUTS:

618 619

= R3 SVAPTE

620 621 622

R4 = PROCESS CONTROL BLOCK ADDRESS OF PROCESS THAT REQUESTED THE I/O
= R5 PROCESS HEADER OF THE PROCESS THAT REQUESTED THIS I/O = R6 I/0 REQUEST PACKET ADDRESS

623

624 OUTPUTS:

625

626

RO = PFN

627

R3 PRESERVED

628

IRP$W BOFF(R6) INCREMENTED IF THIS WAS A COLLISION PAGE

629

CONDITION CODES SET FROM DECW @WAPfN$AW_REFCNT[RO]

630

631 PFN IO DONE:

632

- EXTZV #PTE$V PFN,#PTE$S PFN,(R3),RO ; GET PAGE FRAME NUMBER

633 634
635 636 637 638 20$: 639 640 641 642 40$:

BICB3
BBCC BICB INCW CMPB BNEQ MOVZWL 8SBW DECREF

#AC<PFN$M COLLISION ! PFN$M PAGTYP>,- ; FETCH THESE

@WAPFN$AB-TYPE[RO] ,Rl ; BITS FROM PFN TYPE BYTE

#PFN$V COLLISION,Rl ,20$ ; CLEAR COLLISION BIT, BRANCH IF WAS CLEAR

#PFN$M-COLLISION,@WAPfN$AB TVPE[ROJ ; CLEAR IT IN PFN DATA

IRP$W BOFF(R6)

; MUST EMPTY THE COLLISION QUEUE

Rl,#PFN$C PPGTBL

40$

-

; IF PROCESS PAGE TABLE PAGE

PHD$W PHVINDEX(R5),Rl MMG$DECPHDREF1

MUST COUNT ONE LESS PROCESS HEADER REFERENCE

ONE LESS REFERENCE FOR THE PAGE

IOCIOPOST V03-024

- I/O COMPLETION POSTING PAGIO - PAGE I/O COMPLETION

05 03AB 643

RSB

03AC 644

3-JUN-1984 11:26:47 VAX-11 Macro V03-01

Page 16

24-APR-1982 15:46:59 DISK$VMSMASTER:[SVS.SRC)IOCIOPOST.(4)

; RETURN WITH CONDITION CODES SET ; TO NEW STATE OF THE REFCNT

IOCIOPOST V03-024
RLRMXBCNT RLRMXBCNT RLRMXBCNT 6
;ROW49597 ;RLRMXBCNT
;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT
;RLRM~BCNT
;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT ;RLRMXBCNT
;RLRMXBCNT ;RLRMXBCNT
;RLRMXBCNT -20

- I/O COMPLETION POSTING VIRTUAL (OR LOGICAL) I/0 COMPLETION

3-JUN-1984 11;26:47 VAX-11 Macro V03-01

Page 17

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST.(5)

46 A5 OF
50 3A A5 40 A5 50 3A A5 40 A5
OD
50 3A A5 40 A5 50 3A A5 40 A5
50 51 50
13 50 1C A5
05 OA 38 AO 06 38 A5
2234 BF 38 A5
BE F7 8F 50
48 A5 50 4C 38 A5
50 1c A5
2E 38 AO 05

03AC 03AC 03AC 03AC 03AC 03AC 03AC 03AC 03AC 03AC. 03AC 03AC 03AC 03AC 03AC 03AC 03AC 03AC 03AC
03AC 03AC 03AC 03AC 03AC 03AC 03AC 85 03AC 13 03AF 03Bl DO 03B1
co 03B5
DO 03B9 03BE
11 03BE 03CO
3C 03CO CO 03C4 BO 03C8
03CD 03CD 03CD DD 03CD D1 03CF 13 03D2 DO 03D4 EO 03D8 03DA E9 0300 BO 03E1 03E5 03E7 78 03E7 03EB CO 03EC E9 03FO DO 03F4 EO 03F8

. 2

.SBTTL VIRTUAL (OR LOGICAL) I/O COMPLETION

.3

.4 VIRTUAL (OR LOGICAL) I/O COMPLETION

651

652 CALLING SEQUENCE:

653

654

BRW

VIRTUAL

655

656 INPUTS:

657 658

= Rl REQUESTED BYTE COUNT, POSSIBLY DIFFERENT FROM TRANSFERRED

659

BYTE COUNT FOR MAGTAPE

660

R2 = IRP$W BOFF CONTENTS

661

R3 = SVAPTE OF START OF TRANSFER

· 1

R4 = PCB ADDRESS ASSOCIATED WITH THE PID IN THE PACKET

. 2

R5 = !RP ADDRESS

662

663 OUTPUTS:

664

665

BRANCHES TO UNLOCK, PRESERVING Rl ,R2,R3

666

OR BRANCHES TO IOPOST

667

668

669

.ENABL LSB

670

. 1 VIRTUAL LOGIO:

VIRTUAL (OR LOGICAL) I/0 FUNCTION

.2

-TSTW

IRP$L OBCNT+2(R5)

.3

BEQL

1$ -

SEE IF BYTE COUNT > 64K EQL IMPLIES NO, BRANCH TO OLD CODE

.4

.5

MOVL

IRP$L IOST1+2(R5), RO

Else pickup new, 1anger count.

.6

ADDL

RO, IRP$L ABCNT(R5)

Accumulate total bytes transfered.

.7

MOVL

IRP$L ABCNT(R5), -

Set accumulated bytes transfered.

.8

IRP$L-IOST1+2(R5)

.9

BRB

3$ -

Rejoin common code.

. 10

. 11 1$:

MOVZWL IRP$L I0ST1+2(R5), RO

Get old bytes transfered count.

. 12

ADDL

RO, IRP$L ABCNT(R5)

Accumulate total bytes transfered.

. 13

MOVW

IRP$L ABCNT(R5), -

Set accumulated bytes transfered.

. 14

IRP$L-IOST1+2(R5)

(Note movw due to code path that

. 15

insures< 64K byt~ transfer.)

. 16

. 17 3$:

PUSHL RO

Save # bytes ,transferred.

. 18

CMPL

RO, R 1

. 19

BEQL

9$

.20

MOVL

IRP$L UCB(R5),RO

Do bytes xfered and requested match? Branch if they match. RO => UCB.

. 21

BBS

SA#DEV$V SQD,-

.22

UCB$L DEVCHAR(R0),9$

If SET, sequential device

.23

BLBC

IRP$L-IOST1(R5), 9$

If xfer count wrong, guarantee

.24

MOVW

#SS$ INCSEGTRA, -

that final status is an error

.25 .26 9$:

ASHL

IRP$L IOST 1 ( R5) #-VA$S BVTE,(SP)+, RO

(either the driver's or ours). Calculate number of blocks transfered.

.27

ADDL

RO, IRP$L SEGVBN(R5)

; Calculate next disk segment address.

691

BLBC

IRP$L IOST1(R5),20$

; IF LBC I/O ERROR

692

MOVL

IRP$L-UCB(R5),RO

; GET ADDRESS OF DEVICE UCB

693

BBS

SA#DEV$V SQD,UCB$L_DEVCHAR(R0),10$ ; IF SET, SEQUENTIAL DEVICE

IOCIOPOST V03-024
;STJ3100 ; ST J3100 ;STJ3100 ;STJ3100 ;STJ3100 ;STJ3100 ;STJ3100 ;STJ3100 ;STJ3100 ;STJ3100 ;STJ3100 ;STJ3100 ;STJ3100 -4
;STJ3085 ;STJ3085 ;STJ3085 ;STJ3085 ;STJ3085 ;STJ3085 ;STJ3085 ;STJ3085 ;STJ3085 -4
;RLRMXBCNTA ;RLRMXBCNTA ;RLRMXBCNTA ;RLRMXBCNTA ;RLRMXBCNTA ;RLRMXBCNTA ;RLRMXBCNTA ;RLRMXBCNTA ;RLRMXBCNTA ;RLRMXBCNTA ;ACG0421 ; ACG0421

- I/0 COMPLETION POSTING VIRTUAL (OR LOGICAL) I/O COMPLETION

3-JUN-1984 11 :26:47 VAX-11 Macro V03-01

Page 18

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST.(5)

40 A5 44 A5 32 A5
25 51 F7 BF
51
OOOO'CF QA
06 20 A5 02F9
05 so
2C A5 6341 53 55
55 1C A3 47
FBE2
51 44 A5 53 4C A5
04 53 2C A5 2C AS 53
FC51
04 E6 2A A5
46 A5 05
3A A5 03
3A AS 53 55
3E A4 2A A3 10

C3 03FD 0400 0402
13 0404 78 0406
040A 040B 040B 040B 040B 040B 040B D6 040B E1 040F 0411 30 0414 EB 0417 DE 041A DO 041F DO 0422 10 0426 31 0428 042B 042B 0428 0428 DO 042B DO 042F 12 0433
DO 0435 DO 0439 31 043D
0440 0440 0440
0440 0440 0440 0440 0440 0440 0440
0440 0440 0440 El 0440 0442 85 0445 13 0448
D4 044A 11 044D
044F B4 044F
0452 DO 0452 B7 0455 AA 0458

694

SUBL3 IRP$L ABCNT(R5),-

695

IRP$L-OBCNT(R5),-

CALCULATE BYTES REMAINING

696

IRP$L-BCNT(R5)

697

BEQL

10$

IF EQL NONE

698

ASHL

#-VA$S BYTE,R1 ,R1

C~LCULATE NUMBER OF PAGES REQUESTED

699 QNXTSEG:

.1
· 2 ADVANCE THE SVAPTE TO POINT TO THE PORTION OF THE PAGE TABLES THAT MAP THE .3 BUFFER FOR THIS SEGMENT. IF THIS IS AN ERASE I/O, DO NOT ADVANCE THE .4 SVAPTE, AS THE ENTIRE TRANSFER IS MAPPED BY A SINGLE PAGE TABLE PAGE.

.5 .6
.7
. 8
.9 . 10 .11 13$: . 12 69$:

INCL BBC
BSBW BLBS MOVAL MOVL

WAPMS$GL SPLIT #I0$V ERASE,IRP$W-FUNC(R5), 13$ CHECK-ERASE
R0,69$ (R3) [R1], IRP$L SVAPTE(R5) R5,R3

COUNT A SPLIT TRANSFER BRANCH IF NOT ERASE - UPDATE SVAPTE
IS THIS AN ERASE J/0 REQUEST BRANCH IF YES - DO NOT ADVANCE SVAPTE ; SET ADDRESS OF NEXT PTE ENTRY COPY I/0 REQUEST PACKET ADDRESS

. 13

MOVL

IRP$L UCB(R3),R5

704

BSBB

IOC$QNXTSEG

COPY UCB ADDRESS QUEUE THE NEXT VIRTUAL SEGMNET

705 5$:

BRW

IO POST

706

7.07 ; ALL SEGMENTS OF THIS TRANSFER ARE COMPLETE 708

709 10$: 710 711
· 1
. 2 .3 15$:

MOVL MOVL BNEQ MOVL MOVL

IRP$L OBCNT(R5),R1 IRP$L-DIAGBUF(R5),R3 15$ -
IRP$L SVAPTE(R5),R3 R3,IRP$L SVAPTE(R5)

GET ORIGINAL BYTE COUNT GET ORIGINAL PAGE TABLE ADDRESS NEQ implies IRP$L DIAGBUF was valid. If not valid, then IRP$L SVAPTE is. SVAPTE MUST BE CORRECT -

.4

BRW

UNLOCK

. 5

· 6
.7 I/0 OPERATION ENDED WITH AN UNSUCCESSFUL STATUS

.8

.9

IF THE REQUEST IS LOGICAL I/O, BRANCH BACK TO UNLOCK. (10$)

716

717 '; 718
719

IF THE DEVICE IS A SEQUENTIAL DEVICE, THEN THE I/O PACKET IS MERELY SENT TO THE ACP FOR NOTIFICATIO~, OF THE ERROR.

720

IF THE DEVICE IS A RANDOM DEVICE, THEN THE VIRTUAL BLOCK NUMBER

721

STORED IN IRP$L_SEGVBN IS THE BLOCK THAT HAS AN ERROR.

722

723

.1 20$:

BBC

#IRP$V VIRTUAL,-

. 2

IRP$W STS(R5),10$

Branch IF Logical I/O

.3

TSTW

IRP$L-OBCNT+2(R5)

SEE IF BYTE COUNT > 64K

. 4

BEQL

30$ -

EQL implies< 64K .

.5 .6 .7 30$:

CLRL BRB

IRP$L IOST1+2(R5) 40$ -

Zero byte count before recycleing IRP Branch around

.8

CLRW

IRP$L IOST1+2(R5)

Zero byte count before recycleing IRP

.9 40$:

. 10

MOVL

R5,R3

; COPY IRP ADDRESS

. 11

DECW

PCB$W DIOCNT(R4)

; ADJUST DIRECT I/O COUNT

. 12

BICW

#IRP$M_VIRTUAL,IRP$W_STS(R3) ; CLEAR VIRTUAL I/O FLAG

IOCIOPOST V03-024
ACG0421 ACG0421 ACG0421 6

2C A3 52

- I/O COMPLETION POSTING VIRTUAL (OR LOGICAL) I/O COMPLETION

3-JUN-1984 11:26:47 VAX-11 Macro V03-01

Page 19

24-APR-1982 t5:46:59 DISK$VMSMASTER: [SYS.SRC]IOCIOPOST.(5)

4C A3 DO 045C . 13 44 A3 DO 0461 . 14
009F 30 0465 . 15 BE 11 0468 730 046A 731 046A 732

MOVL MOVL BSBW BRB

IRP$L DIAGBUF(R3),IRP$L SVAPTE(R3) RESET PAGE TABLE ADDRESS

IRP$L-OBCNT(R3),R2

- ; GET ORIGINAL BYTE COUNT

IOC$QTOACP

; QUEUE PACKET TO ACP

5$

.DSABL LSB

IOCIOPOST V03-024
;ACG0421 ;ACG0421 ;ACG0421 ;ACG0421 ;ACG0421 ;ACG0421 ;ACG0421 ;ACG0421
;ADE9005 ;ADE9005 ;ADE9005 ;ACG0422 ;ACG0422 ;ACG0422 ;ACG0422 ;ACG0422 ;ACG0422 ;ACG0422

- I/O COMPLETION POSTING QUEUE NEXT SEGMENT

3~JLJN-1984 11:26:47 VAX-11 Macro V03-01

Page 20

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST.(6)

51 50 24
52 18 A3 51 32 A3 50 48 A3
3E A4 04
E7 2A A3 OOOOOOOO'GF
lC A3 55 32 A3 52
74 52 0084 C5
05 52 FEOO BF
OA

046A 046A 046A 046A 046A 046A 046A 046A 046A
046~
046A 046A 046A 046A 046A 046A 046A 046A 046A 046A 046A 046A 046A 046A 046A 046A
046A DO 046A 11 046D
046F 046F DO 046F DO 0473 DO 0477 047B 047B 0478 047B 0478 047B 047B 0478 047B 047B 0478 0478 87 0478 El 047E 0480
16 0483 DO 0489 C2 048D 13 0491 DO 0493 12 0498
3C 049A El 049F

734

.SBTTL QUEUE NEXT SEGMENT

735

736 FUNCTIONAL DESCRIPTION:

737

738

IOC$QNXTSEG PERFORMS THE FUNCTION OF QUEUEING THE NEXT

739

SEGMENT OF A VIRTUAL I/O REQUEST THAT DID NOT MAP TO A

740

SINGLE CONTIGUOUS I/O REQUEST.

741

742 CALLING SEQUENCE:

743

744

BSBW

IOC$QNXTSEG

745

746 INPUTS:

747

748 749

= R3 = I/O REQUEST PACKET ADDRESS
R4 PCB ADDRESS ASSOCIATED WITH THE PIO IN THE PACKET

750

R5 = UCB ADDRESS OF THE ASSOCIATED DEVICE

751

752 OUTPUTS:

753

754

R4 NOT PRESERVED

755

. 1

. 2

.ENABLE LSB

. 3

Out of line code for Logical I/O.

.4

This code mimics results of

.5 .6 5$:

MOVL

RO,R1

IOC$MAPVBLK for Logical I/O.
Namely Rl = LBN.

. 7

BRB

10$

Branch back to common code.

.8

756 IOC$QNXTSEG::

757

MOVL

IRP$L WIND(R3),R2

GET ADDRESS OF MAPPING WINDOW

758

MOVL

IRP$L-BCNT(R3),R1

GET SIZE OF NEXT SEGMENT

759

MOVL

IRP$L-SEGVBN(R3),RO

GET STARTING VIRTUAL BLOCK NUMBER

760

761 ALTERNATE ENTRY TO IOC$QNXTSEG:

762

763

BS8W

IOC$QNXTSEG1

764

765 ADDITIONAL INPUTS:

766 767

= RO VIRTUAL BLOCK NUMBER OF START OF NEXT SEGMENT

768

Rl = DESIRED BYTE COUNT OF NEXT SEGMENT

769

R2 = WINDOW ADDRESS

770

771 I OC$QNXTSEG 1 : :

772

DECW

PCB$W DIOCNT(R4)

ADJUST THE DIRECT I/0 COUNT

. 1

BBC

#IRP$V VIRTUAL,-

Branch to out of line code if this

. 2

!RP$W STS(R3) '5$

is Logical I/O.

. 3

JSB

GAIOC$MAPVBLK

MAP VIRTUAL TO LOGICAL BLOCK

.4

MOVL

R5, IRP$L UCB ( R3)

STORE POSSIBLY MODIFIED UCB ADDRESS

.5

SUBL

R2,IRP$L-BCNT(R3)

CALCULATE SIZE OF NEXT SEGMENT

.6 . 7 10$: . 8

BEQL MOVL BNl::Q

30$ UCB$L MAXBCNT(R5),R2 15$ -

IF EQL TOTAL MAP FAILURE
R2 = 0 or Max. permissible BCNT.
NEQ implies Max. permissible BCNT in RO.

.9

MOVZWL #512*127,R2

If 0, use default Max. permissible.

. 10 15$:

BBC

#I0$V ERASE,-

BRANCH IF DEFINITELY NOT AN ERASE

IOCIOPOST V03-024 ;ACG0422 ;ACG0422 ;ACG0422 ;ACG0422 ;ACG0422 ;ACG0422 ;ACG0422 ;ACG0422 "; ACG0422 ;ACG0422 ;ACG0422 ;ACG0422 ;ACG0422 ;ACG0422 ;ROW0218 ;RLRMXBCNT ;RLRMXBCNT -5
;ACG0421 ;AOE9005 -1
;ACG0421

- I/O COMPLETION POSTING QUEUE NEXT SEGMENT

3-JUN-1984 11:26:47 VAX-11 Macro V03-01

Page 21

24-APR-1982 15:46:S9 DISK$VMSMASTER:[SYS.SRC)IOCIOPOST.(6)

20 20 A3 SS DD
SS S3 DO 0264 30 SS BEDO
12 50 E9 2C A3 D5
OD 13 SO FEOO SF 3C
50 52 Dl 03 lB
52 50 DO
32 A3 S2 Dl 04 1E
32 A3 S2 DO
52 32 A3 DO 52 D7
52 F7 SF 78 52
S2 51 co
13 1F OOBO CS 52 01
oc 1E
50 51 DO OOOOOOOO'GF 16
F~OF' 31
OODC BF 3C 38 A3 3C A3 04 63 OE;
OOOOOOOO'FF 03 12
OS

04A1 04A4 04A6 04A9 04AC 04AF 0482 04B5 04B7 04BC 04BF 04C1 04C4 04C4 04C8 04CA
04CE 04CE 04D2 04D4 0408 04D9
04DC 04DE 04E3 04E5 04E8 04EE 04F1 04F1 04F1 04F1 04F1 04F1 04F1 04F5
04F7 04FA 04FC OS01
OS03 OS06 OS07 0507 0507 0507 0507 0507
0507
0507 OS07
0507 0507 0507 0507 OS07 OS07

. 11 . 12 . 13 . 14 . 1S . 16 . 17 . 18 . 19 .20 . 21 .22 .23 .24 17$: .2S .26 .27 20$: 778 779 780

PUSHL MOVL BSBW POPL BLBC TSTL BEQL MOVZWL CMPL BLEQU MOVL

IRP$W FUNC(R3),17$ RS -
R3,R5 CHECK ERASE R5 -
RO, 17$ IRP$L SVAPTE ( R3) 17$ -
#512*127,RO R2,RO 17$ RO,R2

CMPL BGEQU MOVL

R2,IRP$L BCNT(R3)

20$

-

R2,IRP$L_BCNT(R3)

MOVL DECL ASHL

IRP$L BCNT(R3),R2 R2 #-VA$S BYTE,R2,R2

SAVE UCB ADDRESS COPY IRP ADDRESS IS THIS AN ERASE FUNCTION? RESTORE UCB ADDRESS BRANCH IF IT IS NOT AN ERASE ARE WE USING A DUMMY PAGE TABLE? BRANCH IF NOT GET MAX BYTE COUNT FOR PPT CHECK LIMIT AGAINST MAX BRANCH IF OK LIMIT TRANSFER TO PPT SIZE
See if BCNT too large. GEQU implies we are OK. Eise scale down to maximum allowed.
GET TRANSFER BYTE COUNT ROUND DOWN AND ... SHIFT DOWN FOR BLOCK COUNT -

781

ADDL

R1, R2

COMPUTE ENDING BLOCK NUMBER

782

BCS

25$

BRANCH ON OVERFLOW

783

CMPL

R2,UCB$L MAXBLOCK(R5)

AND CHECK AGAINST DEVICE SIZE

784

BGEQU 25$

BRANCH IF NOT LEGAL

.1

MOVL

R 1, RO

COPY STARTING LOGICAL BLOCK NUMBER

. 2

JSB

GAIOC$CVTLOGPHV

CONVERT LOGICAL TO PHYSICAL BLOCK

786

BRW

EXE$INSIOQ

INSERT I/O PACKET IN DEVICE QUEUE

787

AND RETURN

788

789 TO HERE IF THE VIRTUAL BLOCKS MAP OFF THE END OF THE VOLUME. COMPLETE THE

790 I/0 WITH AN ERROR. WE QUEUE THE PACKET FOR PROCESSING, RATHER THAN WANDERING

791 OFF INTO THE COMPLETION CODE BECAUSE THIS IS A GENERALLY CALLABLE ROUTINE.

792 793

2' 5$:

MOVZWL #SS$_ILLBLKNUM,IRP$L IOST1(R3) SET ILLEGAL BLOCK NUMBER STATUS

794

CLRL

IRP$L IOST2(R3)

ZERO 2ND I/O STATUS LONGWORD

795

INSQUE (R3),@IOC$GL PSBL

INSERT AT TAIL OF I/O POST QUEUE

796

BNEQ

26$

BRANCH IF NOT EMPTY

797 798 26$:

SOFTINT #IPL$ IOPOST

RSB

-

WAKE UP 1/0 COMPLETION

799

800 30$:

.1

.DISABLE LSB

801

802 ALTERNATE ENTRY TO IOC$WAKACP:

803

804

BSBW

IOC$QTOACP

80S

806 INPUTS:

807 808 809

= R2 DESIRED BYTE COUNT = R3 !RP ADDRESS

. 810
811

PCB$W_DIOCNT(R4) ALREADY DECREMENTED

812 IOC$QTOACP:

IOCIOPOST V03-024
;CDSOOOl ;CDSOOOl ;CDSOOOl ;CDSOOOl ;CDS0001 ;CDSOOOl ;CDS0001 -4
;CDS0002 ;CDS0002 ;CDS0002 ;CDS0002 ;CDS0002 ;CDS0002 ; CDS0002 ;CDS0002 ;CDS0002 ;CDS0002 ;CDS0002 CDS0002 CDS0002 CDS0002 CDS0002 CDS0002

- I/0 COMPLETION POSTING QUEUE NEXT SEGMENT

3-JUN-1984 11:26:47 VAX-11 Macro V03-0l

Page 22

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST.(6}

32 A3 52 DO 52 1S A3 DO OB A2 02 EO
4E 52 1C A3 DO
52 34 A2 DO 52 10 A2 DO
OC A2 05 17 13
FAD2' 30 OE 12
51 OC A2 DO FAC9' 30
04 50 ES
05
55 DD 55 60 A3 9E OB A5 SO SF 90 OC A5 OC A3 DO
OOOO'CF 9E 18 A5 52 D4 FAA3' 30 55 8EDO DC 11

0507 050B 050F
0513 0514 051S 0518 051S 0518 0518 0518 0518 0518 0518 0518 0518 0518 0518 0518 0518 0518 0518 0518 0518 0518 0518
0518 051E 0522 0526 0529 052B
052E
0530 0534 0537 053A 053E 0541 0542 0542 0542 0542 0542 0542 0542
0542 0544
054S 0540 0552 0556
0558 055A
055D 0560 0562

813

MOVL

R2,IRP$L BCNT(R3)

; SET REMAINING BYTES TO TRANSFER

S14

MOVL

IRP$L WIND(R3),R2

; GET WINDOW ADDRESS

815

BBS

#WCB$V NOTFCP,WC8$B ACCESS(R2),- ; IF SET THEN

816

NOTFCPWCB

-

; NOT FCP WINDOW

817

MOVL

IRP$L UCB(R3),R2

; GET ADDRESS OF DEVICE UCB

818

819 FUNCTIONAL DESCRIPTION:

820

821

SUBROUTINE TO QUEUE AN I/O PACKET FOR AN ACP PROCESS AND WAKE

822

THE PROCESS IF ITS QUEUE WAS PREVIOUSLY EMPTY.

823

824 CALLING SEQUENCE:

825

826

BSBW

IOC$WAKACP

827

828 INPUTS:

829

830

R2 DEVICE UCB ADDRESS

831

R3 I/O REQUEST PACKET ADDRESS

832

833 OUTPUTS:

834

835

R4 ALTERED

836 ..

.1

.ENABL LSB

· 2 IOC$WAKACP::

QUEUE I/O PACKET AND WAKE ACP PROCESS

.3

DSBINT #IPL$ SYNCH

SYNCHRONIZE ACCESS TO SYSTEM DATA BASE

.4

MOVL

UCB$L-VCB(R2),R2

GET ASSOCIATED VCB ADDRESS

.5

MOVL

VCB$L-AQB(R2),R2

GET ACP QUEUE BLOCK ADDRESS

.6

TSTL

AQB$L-ACPPID(R2)

PROCEDURE BASED? NO PID IF SO

. 7

BEQL

XQP -

EQL THEN IS NOT AN ACP

841

BSBW

EXE$INSERTIRP

INSERT I/O PACKET IN ACP QUEUE

842

BNEQ

10$

IF NEQ NOT FIRST IN QUEUE

843

MOVL

AQB$L ACPPID(R2),Rl

GET ACP PROCESS ID

844

BSBW

SCH$WAKE

WAKE ACP PROCESS

845

BLBS

R0,10$

IF LBS ACP STILL PRESENT

846

BUG CHECK NONEXSTACP

NONEXISTENT ACP PROCESS

847 10$:

ENBINT

RESTORE SAVED IPL

848

RSB

849

.1 THIS VOLUME IS BEING HANDLED BY AN XQP INSTEAD OF AN ACP. CALL THE

. 2 XQP QUEUEING ROUTINE AS A SPECIAL KERNEL AST TO GET IN THE CONTEXT

. 3 OF THE PROCESS THAT INITIATED THIS REQUEST TO HANDLE IT .

.4

.5

.6 XQP:

.7

PUSHL R5

; PRESERVE R5.

. s

MOVAB IRP$L FQFL(R3), R5

; GET TEMP ACB ADDR INTO R5 .

.9

MOVB

#ACB$M KAST, ACB$8 RMOD(R5) ; NOTE AS SPECIAL KERNEL AST

. 10

MOVL

IRP$L PID(R3), ACB$L PID(R5) ; COPY PIO OF PROCESS.

.11

MOVAB WAEXE$QXQPFKT, ACB$L=KAST(R5) ; ADDR OF QUEUEING ROUTINE.

. 12

.CLRL

R2

. 13

BSBW

SCH$QAST

. 14

POPL

R5

. 15

BRB

10$

. 16

NO PRIORITY INCREMENT. QUEUE THE AST . RESTORE R5. BRANCH TO EXIT .

IOCIOPOST V03-024
;CDS0002 ;CDS0002

- I/O COMPLETION POSTING QUEUE NEXT SEGMENT

3-JUN-1984 11:26:47 VAX-11 Macro V03-0l

Page 23

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST.(6)

0562 0562 0562 0562 0562 0562
0562

.17

.DSABL LSB

. 18 ;

850 ; WINDOW IS NOT AN FCP WINDOW, ONLY USED FOR BOOT TIME INTIALIZED WINDOWS

851 ; FOR CONTIGUOUS FILES. IT IS NOT POSSIBLE TO NEED TO TURN SUCH A WINDOW.

852 ;

853 NOTFCPWCB:

854

BUG_CHECK NOTFCPWCB,FATAL

IOCIOPOST V03-024

- 1/0 COMPLETION POSTING BUFFERED READ COMPLETION AST ROUTINE

3-JUN-1984 11:26:47 VAX-11 Macro V03-01

Page 24

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST.(7)

OOEO SF 56 2C A5 57 32 A5 4B 2A A5 03 59 2A A5 05
56 66 50 02 A6
32 51 04 A6
50 51 51 OlFF BF
50 51 54 66 53 FEOO BF
51 53 50 6043
FO 02 A6 01 A644 04 B6 55 6E 56 08 C2 57
007D 78
017E 55 6E 70 2A A5 OA 50 02
FA2D 6B

0566
0566 0566 0566 0566 0566 0566 0566 0566 0566
0566 0566 0566 0566 0566 0566 0566 0566 0566 0566 0566 0566 0566 BB 0566 DO 056A DO 056E E 1 0572 EO 0577 DO 057C 3C 057F 13 0583 DO 0585
co 0589
AA 05BC C2 0591 3C 0594 32 0597
059C C2 05A3 3E 05A6 14 05AA 28 05AC
05AF 05B2 DO 05B4
co 05B7
F5 05BA 31 05BD 11 05CO 30 05C2 DO 05C5 El 05C8 9A 05CD 30 05DO 11 05D3
05D5 05D5

B56

.SBTTL BUFFERED READ COMPLETION AST ROUTINE

857 ;++

858 FUNCTIONAL DESCRIPTION:

B59

860

BUFPOST PERFORMS ALL NECESSARY COMPLETION OPERATIONS REQUIRED

861

FOR A BUFFERED READ OPERATION IN THE CONTEXT OF THE PROCESS

B62

ISSUING THE I/O REQUEST.

863

864 CALLING SEQUENCE:

865

866

JSB

BUFPOST

867

868 INPUT PARAMETERS:

B69

B70 B71

R4 = CURRENT PROCESS PCB ADDRESS.
R5 = !RP/AST CONTROL BLOCK.

872

B73 IMPLICIT INPUTS:

874

875

SCH$GL CURPCB - POINTER TO PCB OF CURRENT PROCESS

876

877

878 BUFPOST:

BUFFERED READ COMPLETION

879

PUSHR #AM<R5,R6,R7>

; SAVE REGISTERS

BBO

MOVL

IRP$L SVAPTE(R5),R6

; GET ADDRESS OF I/0 BUFFER

BBl

MOVL

IRP$L-BCNT(R5),R7

; GET COUNT OF BYTES OR DESCRIPTORS

882

BBC

#IRP$V COMPLX,IRP$W STS(R5),40$ ;IF CLR, NOT COMPLEX BUFFER FORMAT

BB3

BBS

#IRP$V-CHAINED,IRP$W STS(R5),50$ ;IF SET ,CHAINED BUFFERS

884

MOVL

(R6),R6

- ; GET ADDRESS OF FIRST BUFFER DESCRIPTOR

885 10$:

MOVZWL 2(R6),RO

; GET COUNT OF BYTES TO TRANSFER

8B6

BEQL

30$

; IF EQL NONE THIS DESCRIPTOR

887

MOVL

4(R6),R1

; GET ADDRESS OF USER BUFFER

888

ADDL

Rl,RO

; CALCULATE ENDING ADDRESS OF BUFFER

B89

BICW

#VA$M BYTE,Rl

; TRUNCATE ADDRESS TO PAGE BOUNDARY

890

SUBL

Rl,RO-

; COMPUTE NUMBER OF BYTES TO PROBE

891

MOVZWL (R6),R4

; GET OFFSET TO DATA AREA

B92

CVTWL #-AX200,R3

; SET ADDITION CONSTANT

B93 20$:

I FNOWRT RO,(Rl) ,35$, (R6)[R4]

; CAN BUFFER BE WRJTTEN?

894

SUBL

R3,R1

;/UPDATE ADDRESS OF BUFFER

895

MOVAW (RO)[R3] ,RO

; UPDATE REMAINING LENGTH

896

BGTR

20$

; IF GEQ MORE TO CHECK

897

MOVC

2(R6),1(R6)[R4],@4(R6) : MOVE DATA TO USER BUFFER

89B B99 30$: 900 901 902 35$: 903 40$: 904 905 906 907 90B 909 910

MOVL ADDL SOBGTR BRW BRB BSBW MOVL BBC MOVZBL BSBW BRB

(SP) ,R5

RESTORE ADDRESS OF I/O PACKET

#B,R6

ADVANCE TO NEXT BUFFER DESCRIPTOR

R7, 10$

ANY MORE DESCRIPTORS TO PROCESS?

130$

120$

CONTINUE

MOVBUF

MOVE BUFFER TO USER

(SP) ,R5

RETRIEVE ADDRESS OF I/O PACKET

#IRP$V MBXIO,IRP$W STS(R5),130$; BR IF NOT MAILBOX READ

#RSN$ MAILBOX,RO

SET UP RESOURCE RELEASE

SCH$RAVAIL

DECLARE MAILBOX RESOURCE AVAILABLE

130$

IOCIOPOST V03-024

- I/O COMPLETION POSTING BUFFERED READ COMPLETION AST ROUTINE

3-JUN-1984 11:26:47 VAX-11 Macro V03-01

Page 25

24-APR-1982 15:46:59 DISK$VMSMASTER: [SYS.SRC]IOCIOPOST.(7)

50 57 51 04 A6
50 51 51 01ff Sf
50 51 02 00 52 OB A5 53 FEOO Bf
51 53 50 6043
F 1 53 04 A6 OC A6 57
04 OC A6 57 96 OC A6
63 55 6E 57 08 A6
OB 56 OC A6
E2 03 013S 50 2C A5 56 10 AO OF F9CB' 50 56 F2 0123 50 2C A5 f9BC' OOEO Sf

05D5
05D5 05D5 DO 05D5 DO 05D8
co 05DC
AA 05DF C2 05E4 EF 05E7
05EA 32 05ED
05F2 C2 05F8 3E 05f B 14 05FF DO 0601 Bl 0605 1E 0609 BO 060B
28 060F 0613
DO 0614 A2 0617 13 061B DO 061D 12 0621 11 0623 30 0625 DO 0628 DO 062C 13 0630 30 0632 DO 0635 11 0638 30 063A DO 0630 30 0641 BA 0644

911 ; NB: THE FOLLOWING SECTION OF CODE USES A WORD-SIZE BUFFER LENGTH

912

(ALTHOUGH IRP$L BCNT WAS EXPANDED TO BE A LONGWORD).

913

914 50$:

MOVL

R7,RO

SET LENGTH OF USER BUFFER

915

MOVL

4(R6) ,Rl

SET ADDRESS OF USER BUFFER

916

ADDL

Rl, RO

CALCULATE END OF USER BUFFER

917

BICW

#VA$M BYTE,Rl

TRUNCATE TO PAGE BOUNDARY

91S

SUBL

Rl, R0-

COMPUTE NUMBER OF BYTES TO PROBE

919

EXTZV #0 ,#2, IRP$B RMOD(R5),R2 GET REQUEST ACCESS MODE

920 921 60$: 922 923 924 925 926 70$: 927 928 929 80$:

CVTWL #-AX200,R3

; SET ADDITION CONSTANT

IFNOWRT RO,(R1),90$,R2

; CAN BUFFER BE WRITTEN?

SUBL

R3,R1

; UPDATE ADDRESS OF BUFFER

MOVAW (RO)[R3] ,RO

; CALCULATE NEW LENGTH

BGTR

60$

; IF GEO MORE TO PROBE

MOVL

4(R6),R3

; GET STARTING ADDRESS OF USER BUFFER

CMPW

R7,CXB$W LENGTH(R6)

; REMAINING LENGTH LARGER THAN DATA AREA?

BGEQU 80$

; IF GEQU YES

MOVW

R7,CXB$W LENGTH(R6)

; TRUNCATE LENGTH OF DATA AREA

MOVC

CXB$W_LENGTH(R6),@(R6)+,(R3) ; MOVE DATA TO USER BUFFER

930 931 932 933 934 935 936 90$: 937 100$: 938 110$:
939 940 941 942 943 120$: 944 130$: 945 140$: 946

MOVL SUBW BEQL MOVL BNEQ BRB BSBW MOVL MOVL BEQL BSBW MOVL BRB BSBW MOVL BSBW POPR

(SP),R5 CXB$W LENGTH-4(R6),R7 100$ -
CXB$L LINK-4(R6),R6 70$ -
100$ ACCVIO IRP$L SVAPTE(R5),RO CXB$L-LINK(RO),R6 140$ EXE$DEANONPAGED R6,RO 110$ AC CV IO IRP$L SVAPTE(R5) ,RO EXE$DEANONPAGED #AM<R5,R6,R7>

RETRIEVE ADDRESS OF I/O PACKET REDUCE REMAINING BYTES TO TRANSFER IF EQL DONE GET ADDRESS OF NEXT BUFFER IN CHAIN IF NEQ MORE TO GO
SET ACCESS VIOLATION GET ADDRESS OF FIRST BUFFER GET ADDRESS OF NEXT BUFFER If EQL NONE DEALLOCATE BUFFER SET ADDRESS OF NEXT BUFFER
SET ACCESS VIOLATION STATUS GET ADDRESS OF BUFFER TO RELEASE DEALLOCATE BUFFER RESTORE REGISTERS

IOCIOPOST V03-024
;LJK45299 -1

- I/O COMPLETION POSTING DIRECT I/O COMPLETION AST ROUTINE

3-JUN-19S4 11:26:47 VAX-11 Macro V03-0l

Page 26

24-APR-19S2 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST.(8)

01 00 EF 50 2A A5 00000000'9F DO
51 54 Al40 06
00000002 OOOOOOOO'Ef40 D6
lD 2A A5 07 E1 OOEO SF BB
56 4C A5 DO 57 08 A6 3C
57 oc C2 oocc 30
OOEO SF BA 50 4C A5 DO
F97E' 30 50 28 A5 32 OOOOOOOO'FF40 9E
51 OA Al B7
13 12 53 OC Al DO
OD 13 OC Al D4 OA Al B6 52 lC A3 DO
FE72 30

064S 064S 064S 064S 0648 0648 0648 0648 064S 064S 0648 0648 064S 0648 0648 0648 0648 0648 0648 0648 0648 0648
0648 0648 0648 0648 064B 064E 0654
0655 0659 0659
0659 0660 0660 0660 0665 0669 066D 0671 0674 0677
067B 067F
0682 0686 068D 068E 0691 0693 0697 0699 069C
069F 06A3 06A6 06A6

948

.SBTTL DIRECT I/O COMPLETION AST ROUTINE

949 ;++

950 FUNCTIONAL DESCRIPTION:

951

952

DIRPOST PERFORMS ALL GENERAL I/O COMPLETION ACTIVITIES WHICH

953

MUST BE DONE IN THE CONTEXT OF THE PROCESS. THESE INCLUDE

954

I/O STATUS POSTING IF AN IOSB WAS SPECIFIED, CHANNEL CONTROL

955

BLOCK ACTIVITY COUNT DECREMENTING, QUEUEING OF ANY REQUESTED

956

AST OR RELEASE OF THE I/0 REQUEST PACKET.

957

958 CALLING SEQUENCE:

959

960

JSB

DIRPOST

961

962 INPUT PARAMETERS:

963 964 965

R4 = CURRENT PROCESS PCB ADDRESS. R5 = IRP/AST CONTROL BLOCK ADDRESS.

966

967 IMPLICIT INPUTS:

968

969

SCH$GL CURPCB - POINTER TO CURRENT PCB

970

971

972 DIRPOST:

; DIRECT I/O POSTING AST

973

EXTZV #IRP$V_BUFI0,#1 ,IRP$W STS(R5),RO ; GET INDEX TO ACCOUNTING ENTRY

974

MOVL

@#CTL$GL PHD,R1

GET PROCESS HEADER ADDRESS

975 976
977 978 979 9SO 9S1 982 983
984 985 986 987 988 989 990 10$: 991

INCL

PHD$L DIOCNT(Rl)[ROJ

ACCOUNT FOR BUFFERED OR DIRECT I/O

.IF NE CA$ MEASURE

INCL

PMS$GL DIRIO[RO]

.ENDC

-

CHECK FOR MEASUREMENT ENABLED UPDATE MEASUREMENT I/O COUNTER

BBC PUS HR MOVL MOVZWL SUBL BSBW POPR MOVL BSBW CVTWL MOVAB

#IRP$V DIAGBUF,IRP$W STS(R5),10$ ; IF CLR, NO DIAGNOSTIC BUFFER

#AM<R5~R6,R7>

- ; SAVE REGISTERS

IRP$L DIAGBUF(R5),R6

; GET ADDRESS OF DIAGNOSTIC BUFFER

IRP$W-SIZE(R6),R7

; GET SIZE OF DIAGNOSTIC BUFFER

#12,R1

; REDUCE BY SIZE OF BUFFER HEADER

MOVBUF

; MOVE DIAGNOSTIC INFORMATION TO USER

#AM<R5,R6,R7>

; RESTORE REGISTERS

IRP$L DIAGBUF(R5),RO

; RETRIEVE ADDRESS OF DIAGNOSTIC BUFFER

EXE$DEANONPAGED

; DEALLOCATE DIAGNOSTIC BUFFER

IRP$W CHAN(R5),RO

; GET CHANNEL NUMBER (NEGATED)

@CTL$GL CCBBASE[RO],Rl : SET CCB BASE ADDRESS

992 993 994 995 996 997
· 1 999 1000 1001 30$:

DEC\\' BNEQ MOVL BEQL CLRL .INCW MOVL BSBW

CCB$W roe (R1)
30$ -
CCB$L DIRP(R1),R3 30$ -
CCB$L DIRP(Rl) CCB$W-IOC ( R1) IRP$L-UCB(R3) ,R2 IOC$WAKACP

DECREMENT I/O COUNT FOR CHANNEL NOT IDLE YET GET ADDRESS OF DEACCESS PACKET IF EQL NONE CLEAR ADDRESS OF DEACCESS PACKET ACCOUNT FOR DEACCESS GET ASSIGNED DEVICE UCB ADDRESS QUEUE I/O PACKET AND WAKE ACP R4 ALTERERED

IOCIOPOST V03-024
;WMC0020 ;WMC0020 ;WMC0020 ;WMC0020 ;STJ3049 ;STJ3049 ;STJ3049 ;STJ3049 ;STJ3049 ;STJ3049
-11

- I/O COMPLETION POSTING DIRECT I/O COMPLETION AST ROUTINE

3-JUN-1984 11:26:47 VAX-11 Macro V03-01

Page 27

24-APR-1982 15:46:59 DISK$VMSMASTER: [SVS.SRC]IOCIOPOST.(8)

50 24 A5 10
02 00 51 OB A5
60 38 A5
51 oc A5
17 2A A5 OB 05 OB A5 06
52 F931'
OA 02 20 A5
1 F
50 55 F924'
50 54 A5
54 04 2A AO OB
54 54 AO F912'
50 54
ED
DO

06A6 06A6 06A6 06A6
DO 06A6 13 06AA EF 06AC
06AF 06B2 7D 06B8 DO 06BC EO 06CO El 06C5 D4 06CA 31 06CC E1 06CF 06Dl 10 06D4 DO 06D6 31 06D9 06DC 06DC 06DC 06DC 06DC DO 06DC 06EO D4 06EO
E1 06E2 DO 06E7 30 06EB DO 06EE 12 06Fl
11 06F3

1002

1003 ; R4 DOES NOT NECESSARILY HAVE CURRENT PCB ADDRESS IN IT AT THIS POINT

1004 ;

1005 IOC$DIRPOST1::

1006 1007

MOVL BEQL

IRP$L IOSB(R5),RO 35$ -

GET IOSB ADDRESS IF EQL NONE SPECIFIED

1008

EXTZV #0,#2,IRP$B RMOD(R5),Rl GET REQUEST ACCESS MODE

1009 1010 1011 35$:
· 1
.2 37$:
. 3
.4 .5 40$: .6
. 7
.8 42$:
.9 . 10 1023 1024 1025 1026 1027 50$: 1028 1029 60$: 1030 1031 1032 70$: 1033 1034 1035

IFNOWRT #8,(R0),35$,Rl

; CAN I/O STATUS BE WRITTEN?

MOVQ

IRP$L IOST1(R5) ,(RO)

; MOVE STATUS INTO IOSB

MOVL

IRP$L-PID(R5),R1

; PROCESS IDENTIFICATION

BBS

#IRP$V EXTEND,IRP$W STS(R5),50$ ; BRANCH TO DEALLOCATE IRPE'S

BBC

#ACB$V-QUOTA,IRP$B RMOD(R5),40$ ; IF CLR, NO AST SPECIFIED

CLRL

R2

-

-

SET NULL PRIORITY INCREMENT

BRW

SCH$QAST

QUEUE AST FOR REQUESTOR

BBC

#I0$V ERASE,-

BRANCH IF NOT AN ERASE REQUEST

IRP$W-FUNC(R5),42$

BSBB MOVL

CLEANUP ERASE R5,RO -

CLEAN UP AFTER AN ERASE REQUEST SETUP ADDRESS FOR DEALLOCATE

BRW

EXE$DEANONPAGED

AND RELEASE I/O PACKET

DEALLOCATE IRPE'S

MOVL
CLRL BBC MOVL BSBW MOVL BNEQ BRB

IRP$L_EXTEND(R5) ,RO

; GET ADDRESS OF FIRST IRPE

R4

WILL HOLD ADDRESS OF NEXT IRPE

#IRPE$V EXTEND,IRPE$W STS(R0),70$ ; BR. IF NO MORE IRPE'S

IRPE$L EXTEND(RO) ,R4

SAVE ADDRESS OF NEXT IRPE

EXE$DEANONPAGED

DEALLOCATE IRPE POINTED TO BY RO

R4,RO

PUT ADDRESS OF NEXT IRPE IN RO

60$

BR. IF THERE IS ANOTHER IRPE

37$

DONE DEALLOCATING IRPE'S

IOCIOPOST V03-024
;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019
;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019
;WMC0~19
;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019 ;WMC0019

- I/0 COMPLETION POSTING ERASE I/0 HELPER ROUTINES

3-JUN-1984 11:26:47 VAX-11 Macro V03-0l

Page 28

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST.(9)

19 15 50 50 2C A5
OF OOOOOOOO'GF
50 06
50 oc
F8F 1'
50 1C A5 OA
29 20 A5 00 06
15 20 A5 lE 01
40 AO 18 00 06
20 A5 OB 10 00 06
20 A5

06F5
06F5
06F5 06F5 06F5 06F5 06F5 06F5 06F5 06F5 06F5 06F5 06F5 06F5 10 06F5 E9 06F7 DO 06f A 13 06FE Dl 0700 0706 13 0707 C2 0709 30 070C 05 070F 0710 0710 0710
0710 0710 0710
0710 0710 0710
0710 0710 0710 0710 0710 0710 DO 0710 El 0714 0716
ED 0719 0718 071C
13 071F 91 0721
0723 12 0725
ED 0727
0729 072A 072C 13 072D ED 072f 0731 0732

.1

.SBTTL ERASE I/0 HELPER ROUTINES

. 2

;++

.3

CLEANUP ERASE

.4

.5

LOCAL SUBROUTINE TO FINISH PROCESSING AN ERASE REQUEST

· 6

THE CLEANUP WILL VARY WITH THE TYPE Of ERASE REQUEST.

. 7

SEE THE ROUT! NE HEADER OF THE SUBROUTINE "SETUP ERASE"

.8

IN SYSACPFDT FOR DETAILS.

.9
. 10

INPUT:

= R5 IRP ADDRESS

. 11

OUTPUT:

NONE.

. 12

. 13

. 14 CLEANUP ERASE:

. 15

-BSBB

CHECK ERASE

FINISH UP AFTER AN ERASE REQUEST IS THIS AN ERASE I/O?

. 16

BLBC

R0,69$

BRANCH If NOT

. 17

MOVL

IRP$L SVAPTE(R5),RO

GET ADDRESS Of PPT

. 18

BEQL

69$ -

BRANCH IF NONE

. 19

CMPL

G~EXE$GL ERASEPPT,RO

IS THIS THE SYSTEM PPT?

.20

BEQL

69$

BRANCH IF YES'

. 21

SUBL2 #12,RO

CALC ADDRESS OF HEADER

.22

BSBW

EXE$DEANONPAGED

RETURN THE POOL TO THE SYSTEM

.23 69$:

RSB

RETURN

.24

.25

.26 ;++

.27 CHECK ERASE

.28

.29 LOCAL SUBROUTINE TO DETERMINE IF THIS IRP IS FOR AN ERASE I/O REQUEST.

.30 THIS LEVEL OF PARANOIA IS NECESSARY TO PREVENT THE TOTAL CHAOS THAT

. 31 WOULD ARISE SHOULD AN IRP THAT 'LOOKS' LIKE AN ERASE IRP BE TREATED

. 32 INCORRECTLY .

.33

.34 INPUT:

R5 IRP ADDRESS

.35 OUTPUT:

RO STATUS; LOW BIT SET IMPLIES THIS IS AN ERASE IRP

.36

.37

.38 CHECK ERASE:

CHECK FOR ERASE I/O REQUEST

.39

- MOVL

IRP$L UCB(R5) ,RO

GET UCB ADDRESS. NOTE: LOW BIT CLEAR

.40

BBC

#I0$V-ERASE,-

BRANCH IF ERASE MODIFIER NOT SET

. 41

IRP$W-FUNC(R5), 13$

.42

CMPZV # IRP$V fCODE, -

CHECK FUNCTION CODE

.43

#IRP$S-fCODE,-

ONLY DISKS AND TAPES SUPPORT DSE

.44

IRP$W FUNC(R5) ,#IO$ DSE

.45

BEQL

11$ -

BRANCH IF SO

.46

CMPB

#DC$ DISK,-

IS THIS A DISK DEVICE?

.47

UCB$B DEVCLASS(RO)

.48

BNEQ

13$ -

NO - THEREFORE NOT AN ERASE

.49

CMPZV #IRP$V FCODE,-

CHECK FUNCTION CODE

.50

#IRP$S-fCODE,-

ONLY DISKS SUPPORT THE, MODIFIED~

.51

IRP$W FuNC ( R5), -

WRITE TYPE OF ERASE REbUEST

.52

#I 0$ WR ITEPBLK

.53

BEQL

11 $

.54

CMPZV #IRP$V fCODE, -

.55

#IRP$S-FCODE, -

.56

IRP$W_FUNC(R5),-

IOCIOPOST V03-024
WMC0019 WMC0019 WMC0019 WMC0019 WMC0019 WMC0019 WMC0019 WMC0019 WMC0019

- I/0 COMPLETION POSTING ERASE I/O HELPER ROUTINES

20 08 00 06 20 A5 30 03 50 01

0734 13 0735 ED 0737
0739 073A 073C 12 0730 88 073F 05 0742

.57 .58 .59 .60 .61 .62 .63 .64 11$: .65 13$:

BEQL CMPZV
BNEQ BISB2 RSB

3-JUN-1984 11: 26:47 VAX-11 Macro V03-01

Page 29

24-APR-1982 15:46:59 DISK$VMSMASTER:[SVS.SRC]IOCIOPOST.(9)

#I0$_WRITELBLK 11$ # IRP$V FCODE, #IRP$S-FCODE, -
IRP$W FUNC ( R5) ' #I0$_WRITEVBLK 13$ #1, RO

NOT A WRITE - THEREFORE NOT AN ERASE SET LOW BIT IN RO TO INDICATE ERASE RETURN STATUS VALUE

IOCIOPOST V03-024

- I/O COMPLETION POSTING MOVE DATA TO USER BUFFER

3-JUN-1984 11:26:47 VAX-11 Macro V03-01

Page 30

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST(10)

51 57 17
50 04 A6 02 00
53 OB A5 OOOOOOOO'EF
05 50 96 96 57
38 A5 DC

0743 1037

.SBTTL MOVE DATA TO USER BUFFER

0743 1038

0743 1039 SUBROUTINE TO MOVE DATA FROM A SIMPLE BUFFERED I/O BUFFER TO A USER BUFFER

0743 1040

0743 1041

0743 1042 MOVBUF:

MOVE BUFFER

DO 0743 1043

MOVL

R7,R1

SET LENGTH OF USER BUFFER

13 0746 1044

BEQL

5$

BR IF NULL STRING

DO 0748 1045

MOVL

4(R6) ,RO

GET ADDRESS OF USER BUFFER

EF 074C 1046

EXTZV #0,#2,IRP$B RMOD(R5),R3 GET REQUEST ACCESS MODE

074F

16 0752 1047

JSB

EXE$PROBEW

CHECK ACCESS

E9 0758 1048

BLBC

RO, ACCV IO

IF LBC, NO ACCESS

28 075B 1049

MOVC

R7,@(R6)+,@(R6)+

MOVE DATA TO USER BUFFER

05 075F 1050 5$:

RSB

; RETURN

BO 0760 1051 ACCVIO: MOVW

#SS$_ACCVIO,IRP$L IOST1(R5) ; SET FINAL TRANSFER STATUS

05 0764 1052

RSB

IOCIOPOST V03-024

- I/O COMPLETION POSTING UNLOCK AREAS IN IRPE'S

3-JUN-1984 11:26:47 VAX-11 Macro V03-0l

Page 31

24-APR-1982 15:46:59 DISK$VMSMASTER: [SYS.SRC)IOCIOPOST(ll)

55 DD

55 54 A5 DO 53 2C A5 DO
OA 13 52 30 A5 3C 51 34 A5 DO
19 10

53 38 A5 DO OA 13
52 3C A5 3C 51 40 A5 DO
09 10

D7 2A A5

OB ED 55 BEDO
05

51 01FF C142 9E 51 F7 BF 78 51 F85E 30 05

0765 0765 0765 0765 0765 0765 0765 0765 0765 0765 0765 0765 0765 0765 0765 0765 0765 0765 0765 0765 0765 0765 0765 0765 0767 0767 0767 0767 076B 076F 0771 0775 0779 077B 077B 077F
0781 0785 0789 078B 078B 0790 0793 0794 0794 0794 0794 0794 0794 0794 0794 0794 0794 079A 079E 079F 07A2

1054

SBTTL UNLOCK AREAS IN IRPE'S

1055 ;++

1056 FUNCTIONAL DESCRIPTION:

1057

1058

THIS ROUTINE UNLOCKS THE AREAS DESCRIBED BY FIELDS IN THE IRPE'S. EACh

1059

IRPE HAS SPACE TO HOLD TWO AREA DESCRIPTIONS.

1060

1061 CALLING SEQUENCE:

1062

1063

BSBW

UNLOCK MORE

1064

1065 INPUT PARAMETERS:

1066

1067

R5 = I/O REQUEST PACKET ADDRESS

1068

1069 SIDE EFFECTS:

1070

1071

RO - R3 ARE NOT PRESERVED

1072 ;--

1073

1074

ASSUME IRP$L EXTEND EQ IRPE$L EXTEND

1075

1076 UNLOCK MORE:

1077

PUSHL R5

; SAVE IRP ADDRESS

1078

1079 10$:

; UNLOCK AREAS SPECIFIED IN NEXT IRPE

1080

1081

MOVL

IRPE$L EXTEND(R5) ,R5

GET ADDRESS OF NEXT IRPE

1082

MOVL

IRPE$L-SVAPTEl(R5),R3

GET SVAPTE OF FIRST AREA

1083

BEQL

20$ -

BR. IF NOTHING TO UNLOCK

1084

MOVZWL IRPE$W BOFFl(R5),R2

GET BYTE OFFSET IN PAGE

1085

MOVL

IRPE$L-BCNT1(R5),R1

GET SIZE OF AREA

1086

BSBB

UNLK -

UNLOCK FIRST AREA

1087

1088 20$:

MOVL

IRPE$L SVAPTE2(R5) ,R3 . ; GET SVAPTE OF SECOND AREA

1089

BEQL

30$ -

BR. IF NOTHING TO UNLOCK

1090

MOVZWL IRPE$W BOFF2(R5),R2

GET BYTE OFFSET IN PAGE

1091

MOVL

IRPE$L-BCNT2(R5),R1

GET SIZE OF AREA

1092

BSBB

UNLK -

UNLOCK SECOND AREA

1093

1094 30$:

BBS

#IRPE$V EXTEND,IRPE$W STS(R5) ,10$ ; BR. IF THERE'S ANOTHER IRPE

1095

POPL

R5

- ; RESTORE R5

1096

RSB

1097

1098

1099

LOCAL SUBROUTINE TO UNLOCK PAGES

1100

1101

Rl = BYTE COUNT (OR SIZE OF AREA)

1102 1103

= R2 = BYTE OFFSET IN PAGE
R3 SVAPTE OF START OF AREA

1104

1105

1106 UNLK: MOVAB 511 (Rl) lR2J ,Rl

COMBINE OFFSET AND SIZE AND ROUND

1107

ASHL

#-VA$S BYTE,Rl ,Rl

CONVERT TO NUMBER OF PAGES TO UNLOCK

1108 1109

BSBW RSB

MMG$UNLOCK

UNLOCK PAGES

IOCIOPOST V03-024

- I/O COMPLETION POSTING UNLOCK AREAS IN IRPE'S

07A3 07A3 07A3

1110 1111 1112

.END

3-JUN-1984 11:26:47 VAX-11 Macro V03-01

Page 32

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST(11)

IOCIOPOST Symbol table
ACB$B RMOD ACB$L-KAST ACB$L-PID AC8$M-KAST AC8$V-QUOTA ACCV IO AQB$L ACPPID BRW QNXTSEG BUFIO BUFPOST BUG$ NONEXSTACP 8UG$-NOTFCPWC8 CA$ MEASURE CCB$L DIRP CCB$W-IOC CHECK-ERASE CLEANUP ERASE CTL$GL CC8BASE CTL$GL-PHD
CXB$L LINK CXB$W-LENGTH DC$ DISK DEV$V FOO
oEv$v:=soo DIR IO DIRPOST EVT$ COLPGA EVT$-PFCOM
EXE$DEANONPAGED EXE$GL ERASEPPT EXE$! NS ER TI RP EXE$INSIOQ EXE$PROBEW EXE$QXQPPKT I0$V ERASE IO$ DSE 10$-WRITELBLK I0$-WRITEP8LK I 0$-WR ITEVBLK
IOC$8UFPOST IOC$CVTLOGPHY I OC$DI RPOSTl IOC$GL PSBL IOC$GL-PSFL
IOC$IOPOST IOC$MAPVBLK IOC$QNXTSEG IOC$QNXTSEG1 IOC$QTOACP IOC$WAKACP IOPOST I PL$ IOPOST IPL$-SYNCH
IRP$B EFN IRP$8-RMOD IRP$C-LENGTH IRP$L-ABCNT

- I/O COMPLETION POSTING

= OOOOOOOB

= =

00000018
oooooooc

= =

00000080 00000006

00000760 R

02

= oooooooc

OOOOOOBE R

02

0000011( R

02

00000566 R

02

******** x 02

=

********
00000002

x

02

= oooooooc

= OOOOOOOA

00000710 R

02

000006F5 R

02

******** x 02

=

********
00000010

x

02

= oooooooc

= 00000001
= OOOOOOOE = 00000005

00000064 R

02

00000648 R

02

******** x 02

******** x 02

******** x 02

******** x 02

******** x 02

******** x 02

******** x 02

=

********
OOOOOOOA

x

02

= 00000015

= 00000020

= 00000008

= 00000030

00000122 RG

02

******** x 02

000006A6 RG

02

******** x 02 ******** x 02

00000004 RG

02

******** x 02

0000046F RG

02

00000478 RG

02

00000507 .R

02

00000518 RG

02

00000000 R

02

= 00000004

= 00000008

= 00000022

= 00000008

= OOOOOOC4

= 00000040

3-JUN-1984 11: 26:47 VAX-11 Macro V03-01

Page 33

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST(11)

IRP$L AST IRP$L-ASTPRM IRP$L-8CNT IRP$L-DIAG8UF IRP$L-EXTEND IRP$L-FQFL IRP$L-I OSB IRP$L-IOST1 IRP$L -IOST2 IRP$L-KEVDESC IRP$L-OBCNT IRP$L-PID IRP$L-SEGVBN IRP$L -SVAPTE IRP$L-UCB IRP$L-WIND IRP$M-PAGIO IRP$M-SWAPIO IRP$M-VIRTUAL IRP$S-FCODE IRP$V-BUFIO IRP$V-CHAINED IRP$V-COMPLX IRP$V-DIAGBUF IRP$V-EXTEND IRP$V-FCODE IRP$V-FILACP IRP$V-FUNC IRP$V-KEV IRP$V-MBXIO IRP$V-PAGIO IRP$V-PHVSIO IRP$V-SWAPIO I RP$V-TERMIO IRP$V-VIRTUAL IRP$W-BOFF IRP$W-CHAN IRP$W-FUNC IRP$W-SIZE IRP$W-STS
IRPE$L BCNTl IRPE$L-BCNT2 I R P E $ L -EXTEND IRPE$L-SVAPTE1 IRPE$L-SVAPTE2 IRPE$V-EXTEND IRPE$W-BOFF 1 IRPE$W-80FF2 IRPE$W-STS
JIB$L BYTCNT MMG$DECPHDREF1 MMG$GL MAXPFN MMG$GL-SYSPHD
MMG$INSPFNT MMG$REFCNTNEG MMG$RELPFN MMG$SUBSECREF

= 00000010 = 00000014 = 00000032 = 0000004C = 00000054 = 00000060 = 00000024 = 00000038 = 0000003C = 0000005C = 00000044 = oooooooc = 00000048 = 0000002C = OOOOOOlC = 00000018 = 00000004 = 00000040 = 00000010 = 00000006 = 00000000 = 00000005 = 00000003 = 00000007 = OOOOOOOB = 00000000 = oooooooc = 00000001 = OOOOOOOF = 000000.0A = 00000002 = 00000008 = 00000006 = 00000009 = 00000004 = 00000030 = 00000028 = 00000020 = 00000008 = 0000002A = 00000034 = 00000040 = 00000054 = 0000002C = 00000038 = 00000008 = 00000030 = 0000003C = 0000002A = 00000020
******** x 02 ******** x 02 ******** x 02 ******** x 02
******** x 02 ******** x 02
******** x 02

IOCIOPOST Symbol table
MMG$UNLOCK MMG$UPDSECAST MOVBUF NOTACP NOTFCPWCB PAGIO PAGIO DONE PAGIO-DONE 1 PAGIO-DONE2 PAGIO-ERR PAGIO-ERR DONE PAGIO-KAST PAGIO-OR SWAPIO PAGRO-DONE PAGRD-ERR PAGWRT ERR PAGWRT-ERR1 PAGWRT-ERR DONE. PCB$L JIB PCB$L-PHD PCB$W-BIOCNT PCB$W-DIOCNT
PFN$AB STATE PFN$AB-TVPE PFN$AL-BAK PFN$AW-REFCNT PFN$AW-SWPVBN PFN$C ACTIVE PFN$C-BADPAGLST PFN$C-PPGTBL PFN$C-RDERR PFN$M-COLLI SION PFN$M-DELCON PFN$M-PAGTVP PFN$V-COLLI S ION PFN$V-GBLBAK PFN$V-MODIFV
PFN IO DONE PHD$L DIOCNT PHD$W-PHVINDEX PMS$END RQ PMS$GL DIRIO PMS$GL -SPLIT PMS$START_RQ PR$ IPL PR$-SIRR
PRI$ IOCOM PRI$-NULL PRI$-TICOM PRI$-TOCOM PRITBL PTE$M OWN PTE$M-PROT PTE$S-PFN PTE$V-PFN PTE$V-VALID QNXTSEG

- I/O COMPLETION POSTING

******** x 02 ******** x 02

00000743 R

02

00000120 R

02

00000562 R

02

00000188 R

02

00000218 R

02

00000239 R

02

00000240 R

02

000002E3 R

02

00000268 R

02

00000277 R

02

OOOOOOCl R

02

00000106 R

02

00000297 R

02

00000103 R

02

00000326 R

02

000001CF R

02

= 00000080

= = =

0000006C 0000003A 0000003E

******** x 02 ******** x 02 ******** x 02 ******** x 02

= = = =

********
00000007 00000002
00000004
00000004

x

02

= 00000010

= = = = =

00000010 00000007 00000004 00000017 00000007

00000378 R

02

= 00000054

= 00000042

******** x 02 ******** x 02 ******** x 02

=

********
00000012

x

02

= =

00000014 00000001

= =

000000.00 00000004

= 00000003

= =

00000000 01800000 78000000

R

02

= = =

00000015 00000000 OOOOOOlF

00000408 R

02

3-JUN-1984 11:26:47 VAX-11 Macro V03-0l

Page 34

24-APR-1982 15:46:59 DISK$VMSMASTER:[SVS.SRC]IOCIOPOST(ll)

RSN$ ASTWAIT RSN$-MAILBOX
SCH$GL PCBVEC SCH$GQ-COLPGWQ
SCH$POSTEF
SCH$QAST SCH$RAVAIL SCH$RSE SCH$WAKE SS$ ACCVIO SS$-ILLBLKNUM SS$-INCSEGTRA TMP~ .. UCB$B DEVCLASS UCB$L-DEVCHAR UCB$L-MAXBCNT UCB$L-MAXBLOCK UCB$L-VCB
UCB$W=QLEN UNLK UNLOCK UNLOCK MORE VA$M BYTE VA$S-BYTE VA$V-VPN
VCB$L AQB VIRTUAL LOGIO WCB$B ACCESS WCB$V-NOTFCP
WQH$W=WQCNT XQP

= =

00000001 00000002

******** x 02

********

********

********

********

********

=

********
oooooooc

= = = = = = =

OOOOOODC 00002234 00000000 00000040 00000038 00000084 00000060

= =

00000034 0000006A

x 02
x 02 x 02 x 02
x 02
x· 02

00000794 R

02

00000091 R

02

== 00000765 R 000001FF
= 00000009 00000009

02

= 00000010

= = =

000003AC 00000008 00000002 00000008

R

02

00000542 R

02

IOCIOPOST Psect synopsis

- I/O COMPLETION POSTING

3-JUN-1984 11 :26:47 VAX-11 Macro V03-0l

Page 35

24-APR-1982 15:46:59 DISK$VMSMASTER:[SYS.SRC]IOCIOPOST(ll)

Psect synopsis

PSECT name
·ABS $ABS$ $AEXENONPAGED

Allocation

PSECT No. Attributes

00000000 00000000 000007A3

0. ) 00 0. ) 01 1955.) 02

0. ) NOP IC USR CON ABS LCL NOSHR NOEXE NORD NOWRT NOVEC BYTE

1. ) NOP IC USR CON ABS LCL NOSHR EXE RD

WRT NOVEC BYTE

2. ) NOPIC USR CON REL LCL NOSHR EXE RD

WRT NOVEC LONG

Performance indicators
+

Phase
Ini~ialization
Command processing Pass 1 Symbol table sort Pass 2 Symbol table output Psect synopsis output Cross-reference output Assembler run totals

Page faults
9 74 568
0 250
23 3 0
930

CPU Time
-----
00:00:00.09 00:00:00.57 00:00:27.01 00:00:03.89 00:00:07.44 00:00:00.20 00:00:00.03 00:00:00.00 00:00:39.24

Elapsed Time
-----------
00:00:02.62
00:00:04.90 00:01:48.68 00:00:13.26 00:00:51 .36 00:00:00.73 00:00:00.20 00:00:00.00 00:03:01 .76

The working set limit was 1950 pages. 141145 bytes (276 pages) of virtual memory were used to buffer the intermediate There were 130 pages of symbol table space allocated to hold 2474 non-local and 1388 source lines were read in Pass 1, producing 20 object records in Pass 2. 41 pages of virtual memory were used to define 40 macros.

code. 100 local

symbols.

Macro library statistics

Macro library name

Macros defined

$255$DUA28:[SYS.OBJJLIB.MLB;1

28

$255$DUA28:[SYSLIB]STARLET.MLB;2

9

TOTALS (all libraries)

37

2625 GETS were required to define 37 macros.

There were no errors, warnings or information messages.

MACRO/LIS=LIS$:IOCIOPOST/OBJ=OBJ$:IOCIOPQST MSRC$:IOCIOPOST/UPDATE=(ENH$:IOCIOPOST)+EXECML$/LIB

COMDRVSUB

COMDRVSUB Table of contents

(2)
(3)
(4)
(5)
(6)
(7)
(8) (9)
( 10) ( 11 )

93 131 174 204
249
332.6 413 465 602 691

- COMMUNUCATION DRIVERS SUBROUTINES

3-JUN-1984 10:56:56 VAX-11 Macro V03-0l

COM$DELATTNAST - DELIVER ATTENTION ASTS
COM$FLUSHATTNS - FLUSH ATTENTION AST LIST COM$POST - POST I.O COMPLETION INDEPENDENT OF UNIT STATUS COM$DRVDEA~MEM - DEALLOCATE DRIVER MEMORY COM$SETATTNAST - SET UP ATTENTION AST COM$DELCTRLAST - DELIVER CONTROL ASTS COM$FLUSHCTRLS - FLUSH CONTROL AST LIST COM$SETCTRLAST - SET UP CONTROL AST COM$BLDCTRLAST - BUILD CONTROL AST COM$FILLCTRLAST - FILLIN A CONTROL AST CONTROL BLOCK

Page 0

COMDRVSUB V03-007 ;MHB0137 -1
;MHB0137 ;MHB0137 ;MHB0137 ;MHB0137 RKS006 RKS006 RKS006 ;DWT0157 ;DWT0157 ;DWT0157 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272

- COMMUNUCATION DRIVERS SUBROUTINES

3-JUN-1984 10:56:56 VAX-11 Macro V03-0l

Page 1

24-APR-1982 15:46:24 DISK$VMSMASTER:[SYS.SRC]COMDRVSUB.(1)

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ODDO 0000 0000
0000 0000 0000 0000 0000 0000

.TITLE COMDRVSUB - COMMUNUCATION DRIVERS SUBROUTINES

1

.IDENT 'V03-007'

3

4 ;****************************************************************************

5 ;*

*

6 ;* 7 ;* 8 ;*

COPYRIGHT (c) 1978, 1980, 1982 BY DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS. ALL RIGHTS RESERVED.

*
* *

9 ;*
10 ;* THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED

* *

11 ;* ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE *

12 ;* INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER *

13 ;* COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY *

14 ;* OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY *

15 ;* TRANSFERRED.

*

16 ; *
17 ;* THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
18 ;* AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT

* * *

19 ;* CORPORATION.

*

20 ;* 21 ;* DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS

* *

22 ;* SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.

*

23 ; *

*

24 ; *

*

25 ;****************************************************************************

26

27 ;++

28 FACILITY:

29

30

VAX/VMS I/O DRIVERS

31

32 ABSTRACT:

33

34

THIS MODULE CONTAINS SUBROUTINES FOR THE TERMINAL,MAILBOX AND DMC11 DRIVERS.

35

36 AUTHOR:

37

38

R.HEINEN 8-SEPT~1977

39

40 REVISION HISTORY:

41

. 1

V03-007 MHB0137

Mark Bramhal 1

12-Apr-1984

. 2

Define minimum deal locatable block size as FKB$C LENGTH .

. 3

Restore stacked register after BADDALRQSZ bug check.

.4

.5

V03-006 RKS006

RICK SPITZ

2-MAR-1984

.6

Make sure that TAST is removed from UCB queue when

.7

TAST replaced and currently busy.

. 8

.9

V03-005 DWT0157

David W. Thiel

30-DEC-1983

. 10

Modify COM$DRVDEALMEM to avoid unnecessary forks .

. 11

. 12

V03-004 JLV0272

Jake VanNoy

14-JUN-1983

. 13

Add abort 1/0 flag to out of band logic. Also

. 14

add new entry points for checking PIDs to qualify

. 15

AST delivery .

. 16

COMDRVSUB V03-007 ;RKS0003 ;RKS0003 ;RKS0003 ;RKS0003 ;RKS0003 ;KDM0002 ;KDM0002 -20
;MHB0137 ;KDMD002
;KDM0002

- COMMUNUCATION DRIVERS SUBROUTINES

3-JUN-1984 10:56:56 VAX-11 Macro V03-0l

Page 2

24-APR-1982 15:46:24 DISK$VMSMASTER: [SYS.SRC]COMDRVSUB.(1)

0000 0000 0000 0000
0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 00000000 0000 00000004 0000 00000008 0000
oooooooc 0000
00000010 0000 00000014 0000
0000 00000000

. 17

V03-003 RKS0003

RICK SPITZ

23-SEP-1982

. 18

INSURE THAT TAST IS NOT BUSY WHEN A REPLACE CURRENT

. 19

BLOCK OPERATION OCCURS. IF SO, FLAG THE CURRENT BLOCK

.20

FOR DELETE AND BUILD A NEW BLOCK.

. 21

.22

V03-002 KDM0002

Kathleen D. Morse

28-Jun-1982

.23

Added $IODEF and $SSDEF.

62

63

64

65

66 EXTERNAL SYMBOLS

67

68

$ACBDEF

69

$CCBDEF

70

$DYNDEF

.1

$FKBDEF

. 2

$IODEF

71

$IPLDEF

72

$IRPDEF

73

$PCBDEF

74

$PRDEF

75

$PRIDEF

76

$PRVDEF

77

$PSLDEF

78

$RSNDEF

.1

$SSDEF

79

$TASTDEF

80

$UCBDEF

81

82 LOCAL DEFINITIONS

DEFINE AST CONTROL BLOCK DEFINE CCB DEFINE DYNAMIC MEMORY BLOCKS DEFINE FORK BLOCK DEFINE 1/0 FUNCTION CODES DEFINE IPL LEVELS DEFINE I/O PACKET
DEFINE PCB
DEFINE PROCESSOR REGISTERS DEFINE NEW PRIORITIES
DEFINE PRIVELEGE BITS DEFINE PSL DEFINE RESOURCES DEFINE SYSTEM STATUS CODES DEFINE TERMINAL AST BLOCK DEFINE UCB

83 ' 84 Pl= 0 85 P2= 4 86 P3= 8 87 P4= 12 88 P5= 16 89 P6= 20 90 91

.PSECT

WIONONPAGED

COMDRVSUB V03-007
;JLV0272 ;JLV0272 -1
;JLV0272
;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV02"!2 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 -4

- COMMUNUCATION DRIVERS SUBROUTINES

3-JUN-1984 10:56:56 VAX-11 Macro V03-0l

Page 3

COM$DELATTNAST - DELIVER ATTENTION ASTS 24-APR-1982 15:46:24 DISK$VMSMASTER:[SYS.SRC]COMDRVSUB.(2)

OOF8 BF 56 04
OOFB BF
57 54
55 67 36 56 OB
56 24 A5 05
57 55 EC
67 65 E6 AF
10 A5 18 A5 OB A5 20 A5 QC A5 24 A5
18 AS 52 01 OOOOOOOO'GF

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 BB 0000 04 0004 11 0006 0008 0008 BB 0008
oooc DO oooc
OOOF DO OOOF 13 0012 D5 0014 13 0016 D1 0018 13 001C
OOlE 001E OOlE DO 001E 11 0021 0023 0023 0023 DO 0023 9F 0026 0029 002F 002F 002F 70 002F 90 0034 DO 0039 D4 003E 9A 0041 17 0044

93

.SBTTL COM$DELATTNAST - DELIVER ATTENTION ASTS

94 ;++

. 1 COM$DELATTNAST - DELIVER ATTENION ASTS

. 2 COM$DELATTNASTP - DELIVER ATTENION ASTS BY PIO

96

97 FUNCTIONAL DESCRIPTION:

98

99 THIS ROUTINE IS USED BY THE TERMINAL AND MAILBOX DRIVERS TO DELIVER

100 ALL OF THE ASTS AWAITING ATTENTION. THE CONTROL BLOCKS ARE USED AS FORK BLOCKS

101 TO IPL$_QUEUEAST.

102

103 INPUTS:

104 105

= R4 ADDRESS OF LIST HEAD OF AST CONTROL BLOCKS

106
.1

= R5 = UCB OF UNIT
R6 ACTIVE PIO (AT ENTRY POINT COM$DELATTNASTP)

107

108 OUTPUTS:

109

110

R2,R3,R4,R5 ARE PRESERVED.

111

112 COM$DELATTNAST::

DELIVER ATTENTION ASTS

.1

PUSHR #AM<R3,R4,R5,R6,R7>

SAVE

. 2

CLRL

R6

CLEAR SO ALL ASTs WILL BE DELIVERED

.3

BRB

ATTN2

continue

.4

.5 COM$DELATTNASTP::

DELIVER ATTENTION ASTS BY PIO

.6

PUSHR #AM<R3,R4,R5,R6,R7>

SAVE

.7 ATTN2:

· 8

MOVL

R4,R7

R7 WILL TRACK LIST

.9

. 10 10$:

MOVL

(R7) ,R5

GET NEXT ENTRY

.11

BEQL

50$

IF EQL THEN NONE

. 12

TSTL

R6

CHECKING PIDS?

. 13

BEQL

30$

NOT IF ZERO

.14

CMPL

ACB$L KAST+12(R5),R6

COMPARE PIDS

. 15

BEQL

30$

EQUAL, DELIVER AST

. 16

. 17

; PIDS NOT EQUAL, SKIP THIS ENTRY AND LEAVE IT IN QUEUE

. 18

;

. 19

MOVL

R5,R7

NEXT

.20

BRB

10$

LOOP

. 21

.22

; DELIVER AST AND CLOSE UP LIST

.23

.24 30$:

MOVL

(R5),(R7)

CLOSE LI ST

117

PUSHAB BA10$

SET UP RETURN ADDRESS

118

FORK

CREATE FORK PROCESS

119

120 AST QUEUE FORK PROCESS

121

122

MOVQ

ACB$L KAST(R5),ACB$L AST(R5); REARRANGE ENTRIES

123

MOVB

ACB$L-KAST+8(R5),ACB$B RMOD(R5);

124

MOVL

ACB$L-KAST+l2(R5) ,ACB$L PID(R5);

125

CLRL

ACB$L-KAST(R5)

-

126

MOVZBL #PRI$-IOCOM,R2

SET UP PRIORITY INCREMENT

127

JMP

GASCH$QA$T

QUEUE THE AST

COMDRVSUB V03-007
;JLV0272 -1

- COMMUNUCATION DRIVERS SUBROUTINES

3-JUN-1984 10:56:56 VAX-11 Macro V03-01

Page 4

COM$DELATTNAST - DELIVER ATTENTION ASTS 24-APR-1982 15:46:24 DISK$VMSMASTER:[SYS.SRC]COMDRVSUB.(2)

OOF8 SF

BA 004A 05 004E

.1 50$: 129

POPR
RSB

#AM<R3,R4,R5,R6,R7>

COMDRVSUB V03-007

COMMUNUCATION DRIVERS SUBROUTINES

3-JUN-1984 10:56:56 VAX-11 Macro V03-0l

Page 5

COM$FLUSHATTNS - FLUSH ATTENTION AST LIS 24-APR-1982 15:46:24 DISK$VMSMASTER:[SYS.SRC]COMDRVSUB.(3)

50 67 1 F
24 AO 60 A4 13
22 AO 56 OD
67 60
38 A4
1 c
DA 57 50
DC
50 01

004F 004F 004F 004F 004F 004F 004F 004F 004F 004F 004F 004F 004F 004F 004f 004F 004F 004F 004F 004F 004F 004F 004F 004F 004F 004F DO 0056 13 0059 01 0058 12 0060 Bl 0062 12 0066 DO 0068 0068 86 006E 10 0071 11 0073 DO 0075 11 0078 007A 9A 0070 05 0080

131

.SBTTL COM$FLUSHATTNS - FLUSH ATTENTION AST LIST

132 ;++

133 j COM$FLUSHATTNS - FLUNS ATTENTION AST LIST

134 ;

135 j THIS ROUTINE IS USED BY THE TERMINAL AND MAILBOX DRIVERS TO FLUSH

136 ; AN ATTENTION AST LIST. THIS IS DONE AT CANCEL I/O TIME AND WHEN A

137 ; QIO SPECIFIES A 0 AST ADDRESS ON A SET ATTENTION AST FUNCTION.

138 ; IF THE AST CONTROL BLOCK OWNER IS NO LONGER IN THE SYSTEM THE AST IS ALSO

139 j FLUSHED.

140

141

142 ; INPUTS:

143 144 ; 145 ; 146 ; 147 j

= R4 PCB ADDRESS = R5 UCB ADDRESS OF RELATED UNIT = R6 CHANNEL NUMBER = R7 LI ST HEAD

148 ;

149 j OUTPUTS:

150 j 151 ;

= RO SS$ NORMAL

152 ;

Rl ,R2,R7-ARE DISTROVED.

153

154

155 COM$FLUSHATTNS::

; FLUSH ATTENTION AST LIST

156

DSBINT UCB$B DIPL(R5)

; DISABLE INTERRUPTS

157 10$:

MOVL

(R7) ,RO

; GET LI ST ENTRY

158

BEQL

50$

IF EQL THEN DONE

159

CMPL

PCB$L PID(R4),ACB$L_KAST+12(RO); PIO MATCH?

160

BNEQ

40$

; IF NEQ THEN NO

161

CMPW

R6,ACB$L_KAST+lO(RO)

; CHANNEL MATCH?

162

BNEQ

40$

; IF NEQ THEN NO

163

MOVL

(RO),(R7)

j CLOSE UP LIST TO REMOVE ENTRY

164

ENBINT

; REENABLE INTERRUPTS

165

INCW

PCB$W ASTCNT(R4)

; RESTORE AST QUOTA

166

BSBB

COM$DRVDEALMEM

; DEALLOCATE THE BLOCK

167

BRB

COM$FLUSHATTNS

; CONTINUE

168 40$:

MOVL

RO,R7

; LOOK TO NEXT ENTRY

169

BRB

10$

; CONTINUE

170 50$:

ENBINT

; REENABLE INTERRUPTS

171

MOVZBL #SS$_NORMAL,RO

: SET NORMAL RETURN

172

RSB

COMDRVSUB V03-007

- COMMUNUCATION DRIVERS SUBROUTINES

3-JUN-1984 10:56:56 VAX-11 Macro V03-01

Page 6

COM$POST - POST I.O COMPLETION INDEPENDE 24-APR-1982 15:46:24 DISK$VMSMASTER: [SVS.SRC]COMDRVSUB.(4)

70 A5 63
OOOOOOOO'FF

0081 0081 0081 0081 0081 0081 0081 0081 0081 0081 0081 0081 0081 0081 0081 0081 0081 0081 0081 0081 0081 0081 0081 0081 0081 D6 0081 OE 0084 0086 DOBB 05 DOSE

174

.SBTTL COM$POST - POST I.O COMPLETION INDEPENDENT OF UNIT STATUS

175 ;++

176 COM$POST - POST I/0 COMPLETION INDEPENDENT OF UNIT STATUS

177

178 FUNCTIONAL DESCRIPTION:

179 180 THIS ROUTINE IS USED BV THE TERMINAL, MAILBOX AND D~C DRIVER TO COMPLETE

181 I/O OPERATIONS INDEPENDENT OF THE STATUS OF THE UNIT. NO ATTEMPT IS MADE

182 TO DE-QUEUE ANOTHER PACKET OR CHANGE THE BUSY STATUS OF THE UNIT.

183

184 INPUTS:

185

186

R3 = I/O PACKET ADDRESS

187

R5 = UCB ADDRESS

188

189 IMPLICIT INPUTS:

190

191

CALLER AT DRIVER FORK IPL OR GREATER.

192

IRP$L_MEDIA AND IRP$L_MEDIA+4 ARE THE IOSB QUAD WORD.

193

194 OUTPUTS:

195

196

RO,Rl ARE DISTROYED.

197

198 COM$POST::

COMPLETE I/O

199

INCL

UCB$L OPCNT ( R5)

INCREMENT OPERATION COUNT

200

INSQUE (R3),@IOC$GL_PSBL

INSERT PACKET ON QUEUE

201

SOFTINT #IPL$ IOPOST

202

RSB

REQUEST FORK RETURN

COMDRVSUB V03-007
MHB0137 MHB0137 MHB0137
;MHB0137 ;MHB0137 ;MHB0137 ;MHB0137 ;MHB0137 ;MHB0137 ;MHB0137 ;MHB0137 ; MHBO 1~7 ;MHB0137 ;MHB0137 ;MHB0137 ;MHB0137 ;MHB0137 ;MHB0137 ;MHB0137 -4
MHB0137 MHB0137 MHB0137 MHB0137 MHB0137

- COMMUNUCATION DRIVERS SUBROUTINES

3-JUN-1984 10:56:56 VAX-11 Macro V03-01

Page 7

COM$DRVDEALMEM - DEALLOCATE DRIVER MEMOR 24-APR-1982 15:46:24 DISK$VMSMASTER:[SYS.SRC]COMDRVSUB.(5)

53 DD
08 53 D1 OB 14 07 BB
OOOOOOOO'GF 16 OF BA 05
08 AO 18 B1 25 1A
7E 54 7D BO
0608 BF OA AO
55 50 DO C8'AF 9F
OOOOOOOO'GF 16
50 55 DO OOOOOOOO'GF 17
54 SE 7D 53 BEDO 05

OOBF OOBF 008F OOSF OOSF 008F OOSF 008F OOSF OOSF OOBF 008F OOBF OOBF OOBF OOSF OOSF 008F 008F OOBF 008F OOSF OOSF OOBF OOBF OOBF OOBF OOBF 0091 0094 0097 0099 009B OOA1 OOA3 OOA4 OOA4 OOAB OOAA OOAD OOAE OOAE 0081 OOB3 OOB3 OOB6 OOB9 OOBF OOBF OOBF OOBF OOC2 OOC8 OOCB OOCE OOCF OOCF

204

.SBTTL COM$DRVDEALMEM - DEALLOCATE DRIVER MEMORY

205 ;++

206 COM$DRVDEALMEM - DEALLOCATE DRIVER MEMORY

207

208 FUNCTIONAL DESCRIPTION:

209

210 THIS ROUTINE IS USED BY DRIVERS TO DEALLOCATE SYSTEM DYNAMIC MEMORY.

211

212 IT CAN BE CALLED AT ANY IPL.

213

214 INPUTS:

215

216

RO = ADDRESS OF THE BLOCK TO DEALLOCATE

217 218

;' ******************************************************

219

.1 THE BUFFER MUST BE AT LEAST "FKB$C LENGTH" BYTES LONG

. 2 IF A FORK IS REQUIRED. THIS IS BECAUSE WE TURN THE

.3 BUFFER INTO A FORK BLOCK FOR THE DELAYED DEALLOCATION.

221 ;

222 ;******************************************************

223

224 OUTPUTS:

225

226

RO-R5 ARE PRESERVED.

227

228 COM$DRVDEALMEM: :

DEALLOCATE DRIVER MEMORY

· 1

PUSHL R3

SAVE A REGISTER

.2

SAVIPL R3

FETCH CURRENT IPL LEVEL

. 3

CMPL

R3,#IPL$ SYNCH

COMPARE CURRENT IPL TO SYNCH

.4

BGTR

10$

BRANCH IF IPL LEVEL > SYNCH

. 5

PUSHR #AM<RO,Rl ,R2>

SAVE MORE REGISTERS

.6

JSB

GAEXE$DEANONPAGED

DEALLOCATE MEMORY

. 7

POPR

#AM<RO,Rl ,R2,R3>

RESTORE REGISTERS

. 8

RSB

RETURN, ALL REGISTERS PRESERVED

.9

. 10 10$:

CMPW

#FKB$C LENGTH,FKB$W SIZE(RO) ; BIG ENOUGH FOR A FORK BLOCK?

. 11

BGTRU 30$ -

-

; IF GTRU THEN NO - ERROR

. 12

MOVQ

R4,-(SP)

; SAVE FORKING REGS

. 13

MOVW

#<DYN$C FRK!-

; INSERT STRUCTURE TYPE

. 14

<IPL$ QUEUEAST@8>>,-

; AND PROPER IPL

. 15

FKB$B-TYPE(RO)

; FOR THIS TO BE A FORK BLOCK

. 16

ASSUME FKB$B FIPL EQ FKB$B TYPE+l

233

MOVL

RO,R5-

-

COPY ADDRESS

234

PUSHAB BA20$

SET UP RETURN ADDRESS

235

JSB

GAEXE$FORK

CREATE FORK

236

237 IPL$ QUEUEAST FORK ROUTINE

238

239

MOVL

R5,RO

DEALLOCATE THE BLOCK

240

JMP

GAEXE$DEANONPAGED

.1 20$:

MOVQ

(SP)+,R4

RESTORE REGISTERS

. 2 25$:

POPL

R3

RESTORE R3

. 3

RSB

.4

. 5 BUGCHECK ON TOO SMALL A BUFFER

COMDRVSUB V03-007
MHB0137 MHB0137 MHB0137

- COMMUNUCATION DRIVERS SUBROUTINES

3-JUN-1984 10:56:56 VAX-11 Macro V03-01

Page 8

COM$DRVDEALMEM - DEALLOCATE DRIVER MEMOR 24-APR-1982 15:46:24 DISK$VMSMASTER:[SVS.SRC]COMDRVSUB.(5)

OOCF OOCF F6 11 OOD3

.6 ' .7 30$: .8

BUG CHECK BADDALRQSZ

BRB-

25$

BUGCHECK CONTINUE

COMDRVSUB V03-007
;OWT0157 -1

- COMMUNUCATION DRIVERS SUBROUTINES COM$SETATTNAST - SEi UP ATTENTION AST

3-JUN-1984 10:56:56 VAX-11 Macro V03-01

Page 9

24-APR-1982 15:46:24 DISK$VMSMASTER:[SYS.SRC]COMDRVSUB.(6)

56 28 A3 58 6C 5B

OOD5 OOD5 OOD5 OOD5 0005 OOD5 OOD5 0005 0005 OOD5 OOD5 0005 0005 OOD5 0005 0005 0005 0005 OOD5 0005 OOD5 0005 OOD5 OOD5 0005 0005 0005 OOD5 OOD5 OOD5 OOD5 OOD5 OOD5 OOD5 0005 OOD5 0005 OOD5 OOD5 OOD5 OOD5 OOD5 OOD5 OOD5 OOD5 OOD5 OOD5
0005 OOD5 3C 0005. DO OOD9 13 OODC DODE OODE DODE OODE OODE

249

.SBTTL COM$SETATTNAST - SET UP ATTENTION AST

250 ;++

251 COM$SETATTNAST - SET UP ATTENTION AST

252

253 FUNCTIONAL DESCRIPTION:

254

255 THIS ROUTINE IS A SUBROUTINE USED BY THE TERMINAL AND MAILBOX DRIVERS

256 257

= TO PROCESS REQUESTS FOR ENABLE OR DISABLE OF ATTENTION ASTS.
Pl IS THE ADDRESS OF THE AST SERVICE FOR ENABLES. Pl 0 FOR DISABLE.

258 FOR DISABLES, THE SPECIFIED LIST IS SEARCHED AND THE ENTRY EXTRACTED AND

259 DEALLOCATED.

260 FOR ENABLES, A CONTROL BLOCK IS SET UP THAT WILL DOUBLE AS THE AST CONTROL

261 BLOCK WHEN THE AST IS DELIVERED. THE BLOCK IS FORMATTED AS FOLLOWS:

262 263

= ACB$B RMOD IPR$ QUEUEAST

264

ACB$L-KAST = AST PC

265

ACB$L-KAST+4 = AST PARAMETER (P2)

266

ACB$L-KAST+8 = ACCESS MODE OF REQUEST

267

ACB$L-KAST+10 = CHANNEL NUMBER

268

ACB$L-KAST+12 = PID OF REQUEST

269

270 THE NEW BLOCK IS PLACED AT THE HEAD OF THE CURRENT LIST.

271

272 IN BOTH CASES THE I/O IS COMPLETED.

273

274 INPUTS:

275

276 277

= R3 = I/O PACKET ADDRESS
R4 CURRENT PCB

278 279

= R5 = UCB ADDRESS
R6 ASSIGNED CCB

280

R7 = ADDRESS OF THE CONTROL AST LIST HEAD TO CHANGE

281

AP = ADDRESS OF THE QIO ARGLIST

282

283 OUTPUTS:

284

285

RO = STATUS OF THE I/O

286 287

R3 R5

= =

PACKET ADDRESS UCB ADDRESS

288

289

NO OTHER REGISTERS ARE PRESERVED.

290

291 COMPLETION CODES:

292

293

SS$ NORMAL

294

SS$-EXQUOTA

BUFFERED I/O OR AST QUOTA FAILURE

295

SS$=INSUFMEM

DYNAMIC MEMORY FAILURE

296

297 COM$SETATTNAST::

SET UP ATTENTION AST

298

MOVZWL IRP$W CHAN(R3),R6'

GET PACKET CHANNEL NUMBER

299

MOVL

P1(AP),R8

GET USER AST ADDRESS

.1

BEQL

10$

IF EQL THEN DISABLE FUNCTION

301

302 REQUEST TO ENABLE AST

303

304 SET UP AST BLOCK

305

COMDRVSUB V03-007
DWT0157 DWT0157 DWTOl 57 DWT0157

- COMMUNUCATION DRIVERS SUBROUTINES COM$SETATTNAST - SET UP ATTENTION AST

3-JUN-1984 10:56:56 VAX-11 Macro V03-0l

Page 10

24-APR-1982 15:46:24 DISK$VMSMASTER:[SVS.SRC]COMDRVSUB.(6)

50 lC 3C 38 A4 85 56 15 38 A4 87
51 28 9A 53 DD
OOOOOOOO'GF 16 53 8EDO
42 50 E9 OB A2 06 90 18 A2 58 DO lC A2 04 AC DO
02 00 EF 50 08 AC OOOOOOOO'GF 16 20 A2 50 9A 20 A2 40 SF 88 22 A2 56 BO 24 A2 60 A4 DO
62 67 DO 67 52 DO
50 01 9A 05
FF13 31
OOOOOOOO'GF 17

OODE OOEl OOE4 OOE6 OOE9 OOEC ODEE OOF4 OOF7 OOFA OOFE 0102 0107 OlOA 010D 0113 0117 OllC 0120 0125 0125 0125 0125 012C 012F 0132 0135 0138 0139 0139 013C 013C

306

MOVZWL #SS$ EXQUOTA,RO

; ASSUME AST QUOTA EXCEEDED

307

TSTW

PCB$W_ASTCNT(R4)

; AST QUOTA ALLOW CONTINUE?

308

BLEQ

20$

IF LEQ THEN NO

309

DECW

PCB$W ASTCNT(R4)

; ADJUST QUOTA

310

MOVZBL #ACB$L_KAST+16,Rl

; SET SIZE OF NEEDED BLOCK

311

PUSHL R3

; SAVE PACKET ADDRESS

312

JSB

G.AEXE$ALLOCBUF

ALLOCATE THE BUFFERED BLOCK

313

POPL

R3

; RESTORE PACKET ADDRESS

314

BLBC

R0,20$

; IF LOW SET THEN ALLOCATED

315

MOVB

#IPL$ QUEUEAST,ACB$B RMOD(R2); INSERT FORK IPL

316

MOVL

R8,ACB$L KAST(R2) -

; INSERT AST ROUTINE ADDRESS

317 318

MOVL EXTZV

P2(AP),ACB$L KAST+4(R2) #0,#2,P3(AP)-:-Ro

; '

INSERT PARAMETER FOR AST GET REQUEST ACCESS MODE

319

JSB

GAEXE$MAXACMODE

; MAXIMIZE ACCESS MODE

320

MOVZBL RO,ACB$L KAST+8(R2)

; INSERT IN CONTROL BLOCK

321

BISB

#ACB$M QUOTA,ACB$L KAST+B(R2); INSERT TARGET ACCESS MODE

322

MOVW

R6,ACBiL KAST+lO(R~)

; SAVE CHANNEL

323

MOVL

PCB$L~PID(R4),ACB$L_KAST+12(R2); INSERT PIO ADDRESS OF REQUESTOR

324

325 LOCK OUT INTERRUPTS TO ENTER BLOCK ON UCB

326

327

DSBINT UCB$B DIPL(R5)

; LOCK OUT INTERRUPTS

328

MOVL

(R7) ,(R2)

; MERGE WITH CURRENT ENTRY

329

MOVL

R2,(R7)

; INSERT NEW ENTRY VALUE

330

ENBINT

; LOWER IPL

331

MOVZBL #SS$_NORMAL,RO

; SET NORMAL RETURN

332

RSB

; RETURN VIA CALLER

.1

.2 10$:

BRW

COM$FLUSHATTNS

; DI SABLE FUN CTI ON

. 3

.4 20$:

JMP

GAEXE$ABORTIO

: ABORT THE I/O

COMDRVSUB V03-007
DWT0157 DWT0157 JLV0272 JLV0272 5
;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272
~J·JLLVV00227722
;JLV0272 ;JLV0272
~L
;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272

- COMMUNUCATION DRIVERS SUBROUTINES COM$DELCTRLAST - DELIVER CONTROL ASTS

3-JUN-1984 10:56:56 VAX-11 Macro V03-01

Page 11

24-APR-1982 15:46:24 DISK$VMSMASTER: [SYS.SRC]COMDRVSUB.(7)

006C SF 56 04
006C SF
52 51 54
51 61 69
55 51 lC 30 A5 04 AE
56 06 56 28 A5 E7
05 OB 2D A5 52 04 AE

0142 0142 0142 0142 0142 0142
0142 0142 0142 0142 0142 0142 0142 0142 0142 0142 0142 0142 0142 0142 0142 0142 0142 0142 0142 0142 0142 0142 BB 0142 04 0146 11 0148 014A 014A BB 014A 014E 04 014E DO 0150 0153 DO 0153 13 0156 C3 0158 E1 015C F 1 0161 0162 0162 0162 D5 0162 13 0164 01 0166 12 016A 016C 016C 016C 016C E1 016C 016E 9A 0171

.6

.SBTTL COM$DELCTRLAST - DELIVER CONTROL ASTS

. 7 ;++

. 8 ;COM$DELCTRLAST - DELIVER CONTROL ASTS

.9 ;COM$DELCTRLASTP - DELIVER CONTROL ASTS AND CHECK PIDS

338

339 FUNCTIONAL DESCRIPTION:

340

341 THIS ROUTINE IS USED BV THE TERMINAL SERVICES TO DELIVER

342 ALL OF THE ASTS AWAITING ATTENTION WHICH MATCH THE CONDITION.

343 THE AST BLOCK IS NOT DELETED AND IS REUSED.

344

345 INPUTS.:

346

347

R3 = MATCH CHARACTER

348 349

= R4 = ADDRESS OF LIST HEAD OF AST CONTROL BLOCKS
RS UCB OF UNIT

· 1

R6 = ACTIVE PID (AT ENTRY POINT COM$DELCTRLASTP)

. 2

. 3 OUTPUTS:

.4

.5

R3 = (low byte) CHARACTER TO INCLUDE IN DATA STREAM OR NULL

.6

TAST$V ABO - set to signal driver to abort I/O in progress

.7

TAST$V-INC - set to include this character in datastream

. 8

.9

Rl ,R4 DESTROYED

. 10

. 11

. 12 COM$DELCTRLAST::

DELIVER CONTROL ASTS

. 13

PUSHR #AM<R2,R3,R5,R6>

SAVE Rl:.GISTERS

. 14

CLRL

R6

CLEAR SO ALL ASTs WILL BE DELIVERED

. 15

BRB

CTRL2

continue

. 16

. 17 COM$DELCTRLASTP::

DELIVER CONTROL ASTS BV PIO

. 18

PUSHR #AM<R2,R3,R5,R6>

. 19 CTRL2:

361

CLRL

R2

!NIT RETURN CHARACTER

362

MOVL

R4,R1

LIST HEAD ADDRESS

363 10$:

364

MOVL

(R1),R1

; ADDRESS FIRST BLOCK

365

BEQL

50$

; NO MORE

366

SUBL3 #TAST$L FLINK,Rl ,R5

; ADDRESS START OF BLOCK

367

BBC

4(SP) ,TAST$L~MASK(R5),10$

; SKIP IF CHARACTER NOT IN MASK

· 1
. 2 . 3 .4
.5 . 6 .7 .8 11 $: .9
. 10 .11 . 12 . 13 . 14

Check PIO

TSTL BEQL CMPL BNEQ

R6
11$ TAST$L PID(R5),R6 10$ -

checking pids? Branch it not compare skip it not equal

This one matches, check include and abort

B' BC MOVZBL

#TAST$V ABORT,TAST$B CTRL(R5),12$ 4(SP),R2

BRANCH IF NOT ABORT FETCH CHARACTER

COMDRVSUB V03-007
;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 -5
;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 -11

- COMMUNUCATION DRIVERS SUBROUTINES COM$DELCTRLAST - DELIVER CONTROL ASTS

3-JUN-1984 10:56:56 VAX-11 Macro V03-01

Page 12

24-APR-19B2 15:46:24 DISK$VMSMASTER:[SYS.SRC]COMDRVSUB.(7)

52 4000 SF OD
01 08 2D A5 52 04 AE 00 52 OF
03 C5 20 A5 24 A5 04 AE
OB A5 06
B9 AF
10 A5 20 A5 30
2C A5 OB A5 2C A5 QC A5 28 A5 1B A5 CA'AF
52 01 OOOOOOOO'GF
04 AE 52 006C BF
2D A5 OB 15 2D A5 04
50 2B A5 OOOOOOOO'FF40
50 3B AO 50 55
FElB'

AB 0175
11 017A 017C
E1 017C 017E
9A 01B1 E2 01B5
01B9 E2 01B9
01BB 9A 018E
0193 90 0193
0197 9F 0197
019A
OlAO
01AO 01AO 01AO 01AO 7D 01AO BB 01A5 01A7 90 01A9 DO 01AE DE 01B3 9A 01BB 17 01BB 01C1 DO 01C1 BA 01C5 05 01C9 01CA 01CA 01CA 01CA OlCA 01CA 01CA BA 01CA El OlCE 01D3 3C 0103 DO 0107 01DE 86 0 lDF DO 01E2 30 01E5 05 01EB

. 15

BISW

#TAST$M ABO,R2

SET ABORT

. 16

BRB

15$

-

. 17 12$:

· 1B

BBC

#TAST$V INCLUDE,-

. 19

TAST$B CTRL(R5),15$

SKIP IF STRIP CHARACTER

.20

MOVZBL 4(SP) ,R2

CHARACTER NOT STRIPPED

. 21

BBSS

#TAST$V_INC,R2,15$

MARK CHARACTER PRESENT

.22 15$:

.23

BBSS

#TAST$V BUSY,-

.24

TAST$B CTRL(R5),10$

SKIP IF IN USE/ MARK IN USE

373

MOVZBL 4(SP),TAST$L_ASTPRM(R5)

RETURN CHARACTER TO USER

374 20$:

375

MOVB

#IPL$_QUEUEAST,ACB$B RMOD(R5)

INSERT FORK IPL, TO ALLOW USE AS

376

FORK BLOCK

377

PUSHAB BJ\10$

SET UP RETURN ADDRESS

378

FORK

CREATE FORK PROCESS

379

3BO AST QUEUE FORK PROCESS

381

3B2

ASSUME TAST$L ASTPRM EQ <TAST$L AST + 4>

3B3

ASSUME ACB$L ASTPRM EQ <ACB$L AST + 4>

. 1 22$:

MOVQ

TAST$I AST(R5),ACB$L AST(R5)

REARRANGE ENTRIES

. 2

BISB

#<ACB$M NODELETE!ACB$M PKAST>,-

. 3

TAST$B RMOD(R5)

-

PK AST, NODELETE

.4

MOVB

TAST$B-RMOD(R5),ACB$B RMOD(R5)

MODE

.5

MOVL

TAST$L-PID(R5),ACB$L PID(R5)

PIO

.6

MOVAL BAASTACNTNG,ACB$L KAST(R5)

ADDRESS OF PIGGY-BACK KERNEL ROUT!

. 7

MOVZBL #PR!$ IOCOM,R2 -

SET UP PRIORITY INCREMENT

.B

JMP

GASCH$QAST

QUEUE THE AST

.9 50$:

. 10

MOVL

R2,4(SP)

RETURN ANY CHARACTER

.11

POPR

#AM<R2,R3,R5,R6>

RESTORE REGISTERS

395

RSB

396

397 PIGGY-BACK KERNEL MODE ROUTINE TO:

398

1. MARK TAST AVAILABLE FOR USE

399

2. DEALLOCATE "LOST" BLOCK(S) AND RETURN THEIR QUOTA

400

401

402 ASTACNTNG:

403

BICB

#TAST$M BUSY, TAST$B CTRL(R5) ; Mark block available.

404

BBC

#TAST$V-LOST, -

-

Branch if still using this block.

405

TAST$B CTRL(R5), 150$

Otherwise,

406

MOVZWL TAST$L-PID(R5), RO

use PIO index to locate PCB for

407

MOVL

@LASCH$GL_PCBVEC[RO], RO ; this process.

40B 409 410 411 150$:

INCW MOVL BSBW RSB

PCB$W ASTCNT(RO) R5,RO-
EXE$DEANONPAGED

Then return AST quota for and deal locate this block.
That completes piggy-back accounting.

COMDRVSUB V03-007

- COMMUNUCATION DRIVERS SUBROUTINES

3-JUN-1984 10:56:56 VAX-11 Macro V03-01

Page 13

COM$FLUSHCTRLS - FLUSH CONTROL AST LIST 24-APR-1982 15:46:24 DISK$VMSMASTER: [SYS.SRC]COMDRVSUB.(8)

51 50 67
34
50 1c
28 AO 60 A4 20
2E AO 56 1A
67 1C AO
06 2D AO 03 20 AO 10 DC
0000008F'GF 38 A4 01
51 30 AO 57 1C AO
C7
62 51
50 01

01E9 01E9 01E9 01E9 01E9 01E9 01E9
01E9 01E9 01E9 01E9 01E9 01E9 01E9 01E9 01E9
01E9 01E9 01E9 01E9 01E9 01E9 01E9 01E9 01E9 D4 01FO DO 01F2 13 01F5 C2 01F7 01 OlFA 12 01FF 81 0201 12 0205 DO 0207 020B El 020B 88 0210 11 0214 0216 16 0216 86 021C 11 021F 0221
ca 0221
DE 0225 11 0229
0228 DO 0228
02·2E 9A 0231 05 0234

413

.SBTTL COM$FLUSHCTRLS - FLUSH CONTROL AST LIST

414 ;++

415 COM$FLUSHCTRLS - FLUSH CONTROL AST LIST

416

417 THIS ROUTINE IS USED BY .THE TERMINAL SERVICES TO FLUSH

418 THE CONTROL AST LIST. THIS IS DONE AT CANCEL 1/0 TIME AND WHEN A

419 QIO SPECIFIES A 0 AST ADDRESS ON A SET AST FUNCTION.

420 THE SUMMARY MASK POINTED TO BY R2 IS UPDATED.

421

422 INPUTS:

423

424

R2 = ADDRESS OF SUMMARY MASK

425

R4 = PCB ADDRESS

426 427

= R5 = UCB ADDRESS OF RELATED UNIT
R6 CHANNEL NUMBER

428

R7 = LI ST HEAD

429

430 OUTPUTS:

431

432

RO = SS$ NORMAL

433

Rl AND RI ARE DESTROYED.

434

435

436 COM$FLUSHCTRLS::

FLUSH CONTROL AST LIST

437

DSBINT UCB$B DIPL(R5)

DISABLE INTERRUPTS

438

CLRL

R1 -

!NIT RETURN MASK

439 5$:

MOVL

(R7),RO

GET LIST ENTRY

440

BEQL

50$

IF EQL THEN DONE

441

SUBL

#TAST$L FLINK,RO

, COMPUTE START OF BLOCK

442

CMPL

PCB$L PID(R4),TAST$L PID(RO); PIO MATCH?

443

BNEQ

40$ -

IF NEQ THEN NO

444

CMPW

R6,TAST$W CHAN(RO)

CHANNEL MATCH?

445

BNEQ

40$

-

IF NEQ THEN NO

446

MOVL

TAST$L FLINK(RO),(R7)

CLOSE UP LIST TO REMOVE ENTRY

447

448

BBC

#TAST$V BUSY,TAST$B CTRL(R0),20$; BLOCK CAN BE DELETED NOW?

449

BISB

#TAST$M-LOST,TAST$B-CTRL(RO) ; NO, FLAG IT FOR LATER DELETION

450

BRB

5$

-

-

; THAT'S ALL WE CAN DO RIGHT NOW

451

452 20$:

JSB

GACOM$DRVDEALMEM

DEALLOCATE THE BLOCK

453

INCW

PCB$W ASTCNT(R4)

454

BRB

5$ -

RESTORE AST QUOTA CONTINUE

455

456 40$:

BISL

TAST$L MASK(RO),Rl

OR IN ACTIVE CONTROL CHARACTERS

457

MOVAL TAST$L-FLINK(RO),R7

LOOK TO NEXT ENTRY

458

BRB

5$

-

CONTINUE

459

460 50$:

MOVL

R1,(R2)

UPDATE SUMMARY MASK

461

ENBINT

REENABLE INTERRUPTS

462

MOVZBL #SS$_NORMAL,RO

SET NORMAL RETURN

463

RSB

COMDRVSUB V03-007
;JLV0272

- COMMUNUCATION DRIVERS SUBROUTINES COM$SETCTRLAST - SET UP CONTROL AST

3-JUN-1984 10:56:56 VAX-11 Macro V03-01

Page 14

24-APR-1982 15:46:24 DISK$VMSMASTER:[SYS.SRC]COMDRVSUB.(9)

0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235 0235

465

.SBTTL COM$SETCTRLAST - SET UP CONTROL AST

466 ;++

467 COM$SETCTRLAST - SET CONTROL AST

468

469 FUNCTIONAL DESCRIPTION:

470

471 This routine is used by the terminal services FDT routines during the

472 processing of requests to enable out-of-band ASTs. The current list is

473 scanned for a block with a requester matching that of the request being

474 processed. If a match is found, the specified mask and AST routine address

475 in the matching block are replaced. If no match is found, COM$BLDCTRLAST is

476 called to create a new block. The summary mask pointed to by R2 is updated

477 to be the inclusive or of all masks in the control AST list pointed to by R7.

478

479 If either the AST routine address or the out-of-band enable mask --

480 @<P2(AP)+4> -- is zero, all out-of-band AST requests entered by this

481 requester are flushed from queue pointed to by R7.

482

483 INPUTS:

484

485

R2 = CURRENT SUMMARY MASK ADDRESS

486

R3 = I/O PACKET ADDRESS

487

R4 = CURRENT PCB

488

R5 = UCB ADDRESS

489

R7 = ADDRESS OF THE CONTROL AST LIST HEAD TO CHANGE

490

AP = ADDRESS OF THE QIO ARGLIST

491

492

Pl(AP) ADDRESS OF AST ROUTINE TO CALL WHEN OUT-OF-BAND CHARATER IS

493

TYPED (0 ==> FLUSH QUEUE)

494

P2(AP) ADDRESS OF SHORT FORM TERMINATOR MASK GIVING WHICH OUT-OF-

495

BAND CHARACTERS WILL PRECIPATATE DELIVERY OF AN AST

496

(0 MASK VALUE==> FLUSH QUEUE: This address will be passed

497

as th~ AST parameter when the AST is delivered)

498

P3(AP) ACCESS MODE IN WHICH THE AST IS TO BE DELIVERED

499

(This is maximized against the caller's access mode)

500

501

IPL at entry is assumed to be IPL$ ASTDEL.

502

503 OUIPUTS:

504

505

RO = STATUS OF THE I/O

506

(SS$ NORMAL only; all others return via EXE$ABORTIO)

.1

R2 = ADDRESS OF TAST BLOCK

507

R3 = I/0 PACKET ADDRESS

508

R4 = CURRENT PCB ADDRESS

509

R5 = UCB ADDRESS

510

NO OTHER REGISTERS ARE PRESERVED.

511

512

IPL at exit is the same as IPL at entry.

513

514

The summary mask pointed to by R2 is updated to be the inclusive or of

515

all masks in the control AST list pointed to by R7.

516

517

The control AST list pointed to by R7 is flushed, extended, or an

518

entry in the list is updated.

519

520 COMPLETION CODES:

COMDRVSUB V03-007
RKS006 RKS006 RKS006 RKS006 RKS006 RKS006 RKS006 RKS006 RKS006 -10

COMMUNUCATION DRIVERS SUBROUTINES COM$SETCTRLAST - SET UP CONTROL AST

3-JUN-1984 10:56:56 VAX-11 Macro V03-0l

Page 15

24-APR-1982 15:46:24 DISK$VMSMASTER:[SYS.SRC]COMDRVSUB.(9)

56 28 A3 58 6C AB
59 04 AC
50 oc
50 14 69 08
04 A9 09
FF8F OOOOOOOO'GF
5E FO AE 5B 5E 6B 58
08 AB 04 A9 OC AB 52 58

0235 0235 0235 0235 0235 0235 0235 0235 0235 0235
0235 0235 0235
0235 0235 0235 0235 0235 0235 0235 0235 0000 0004 0008
oooc
0010 0235 0235 0235 0235 3C 0235 DO 0239 13 023C DO 023E 3C 0242 0245 3C 024B D5 024E 12 0250 05 0252 12 0255 31 0257 17 025A 0260 0260 0260 0260 0260 0260 0260 9E 0260 DO 0264 70 0267 DE 026A DO 026F 7C 0273 0275

521

522

SS$_NORMAL

523

524

The fol lowing return codes are reported by a JMP to EXE$ABORTIO:

525

SS$ ACCVIO -- spBcified mask not accessable

526

SS$-EXQUOTA -- buffered I/O or AST quota failure

527

SS$=INSUFMEM -- dynamic memory failure

528

529

530 COM$SETCTRLAST, COM$BLDCTRLAST, and COM$FILLCTRLAST build and use the

531 following information block. COM$SETCTRLAST builds the block on the stack

532 and points R11 to it. COM$BLDCTRLAST and COM$FILLCTRLAST use infomation

533 stored to build or update a TAST control block.

534

535

$OFFSET 0,POSITIVE,<-

536

ASTROUT ,-

User's AST routine address

537

ASTPARM,-

AST routine parameter

538

USRMSKADR,-

Pointer to user's OOB mask

539

CURMSKADR,-

Pointer to current summary mask

540

<TINFOSIZE,O>-

Size of the block

541

>

ASTROUT:

ASTPARM:

USRMSKADR:

CURMSKADR:

TINFOSIZE:

542

543

544 COM$SETCTRLAST::

SET UP CONTROL AST

545

546

MOVZWL IRP$W CHAN(R3), R6

Get packet channel number.

547

MOVL

Pl (AP), RB

Get user AST address.

548

BEQL

COM$FLUSHCTRLS

If its ~ero, flush OOB requests.

549

MOVL

P2(AP), R9

Get address of user OOB mask.

.1

MOVZWL #SS$ ACCV IO, RO

Assume no access

. 2

IFNORD #8, (R9), 5$

Probe for read access.

. 3

MOVZWL #SS$ BADPARAM, RO

Assume invalid mask format

.4

TSTL

(R9)-

Verify short form terminator

.5

BNEQ

5$

mask format.

.6

TSTL

4(R9)

Any OOB characters specified?

. 7

BNEQ

7$

If there are some, proceed.

.8

BRW

COM$FLUSHCTRLS

Otherwise, flush OOB requests.

.9 5$:

JMP

GAEXE$ABORTIO

I/O failed, abort request

560 7$:

561

562

563 We are now holding a valid request of enable an out-of-band character AST

564

565

566

ASSUME ASTPARM EQ <ASTROUT + 4>

567

MOVAB -TINFOSIZE(SP), SP

Al locate info. block on the stack.

568

MOVL

SP, R 11

Save info. block address.

569

MOVQ

RB, ASTROUT(Rll)

Save AST routine and parameter info.

570

MOVAL 4(R9), USRMSKADR(R11)

Save address of user 008 mask.

571

MOVL

R2, CURMSKADR(Rl1)

Save current summary mask address.

572

CLRQ

R8

Clear accumulation summary mask and

573

a local flags longword.

COMORVSUB V03-007 ;JLV0272
RKS006 RKS006 RKS006 RKS006 RKS006 RKS006 RKS006 RKS006
RKS006 RKS006 RKS006 RKS006 RKS006 RKS006 RKS006 RKS006 RKS006

- COMMUNUCATION DRIVERS SUBROUTINES COM$SETCTRLAST - SET UP CONTROL AST

3-JUN-1984 10:56:56 VAX-11 Macro V03-01

Page 16

24-APR-1982 15:46:24 DISK$VMSMASTER:[SVS.SRC]COMDRVSUB.(9)

5A
52 67 36
52 E4 A2 2a A2 60 A4
21 2E A2 56
18
OD 2D A2 03 20 A2 10 67 1C A2 59 02 13
5A 52 0060
59 01
5a 30 A2 57 1C A2
C5
QC BB 58
50 01 52 5A
02 59 OE
5E 10 AE 01 50
OOOOOOOO'GF

04 0275 0277 027E
DG 027E 13 02a1 9E 02a3 Dl 02a1 12 02aC
Bl 02aE 12 0292
0294
El 0294 aa 0299 DO 0290 ca 02A1 11 02A4
02A6 02A6 DO 02A6 30 02A9 ca 02AC 02AF ca 02AF DE 0283 11 02B7 02B9 DO 0289 0280 0280 3C 02CO DO 02C3 ES 02C6 10 02C9 9E 02CB E9 02CF 05 0202 0203 17 0203 0209

.1 574 575 576 10$: 577 57a 579 5aO 5a1 582 583
.1
· 2
. 3 .4 .5 . 6 · 7 .8 12$: 584 585 5a6 587 15$: 5a8 589 590 591 20$: 592 593 594
.1
. 2
. 3 .4 30$:
. 5 .6 .7 50$: .8 .9

CLRL

R10

DSBINT UCB$B DIPL(R5)

TAST address Interlock queue access.

MOVL BEQL MOVAB CMPL BNEQ
CMPW BNEQ

(R7), R2

Get list entry.

20$

Branch if no more entries in list.

-TAST$L FLINK(R2), RZ , Compute start of block.

PtB$L PfD(R4), TAST$L PID(R2) ; Do the PIDs match?

15$ -

Branch if PIDs don't match.

R6, TAST$W CHAN(R2)

Is the channel right?

15$

-

Branch if not the right channel.

BBC BISB MOVL BISL BRB
MOVL BSBW BISL

#TAST$V BUSV,TAST$B CTRL(R2),12$; Block can be reused now

#TAST$M-LOST,TAST$B-CTRL(R2) j No, flag it for later deletion

TAST$L FLINK(R2),(R7)

Remove the entry from the queue

#2, R9-

Indicate that a match was found

20$

And build a new one, since the old

one is busy and will be deleted when

the AST is delivered.

R2,R10

Save TAST address

COM$FILLCTRLAST

Update matching TAST control block.

#1, R9

Indicate that an update was done.

BISL MOVAL BRB

TAST$L MASK(R2), RS
TAST$L-FLINK(R2), R7 10$ -

Accumulate OOB mask data for queue. Advance to next queue entry. Loop until entire queue processed.

MOVL

RB, @CURMSKADR(Rll)

ENBINT MOVZWL MOVL BLBS BSBB MOVAB BLBC RSB

#SS$ NORMAL, RO R10,R2 R9, 30$ COM$BLDCTRLAST TINFOSIZE(SP), SP RO, 50$

Make accumulated 008 mask for queue the current 008 mask for the queue. Return to caller's IPL. Assume work completed successfully. Valid only if R9 LBS If no blocks in the queue were updated, build a new block. Restore stack. Was COM$BLDCTRLAST successful? if so, return to caller.

JMP

GAEXE$ABORTIO

If it failed, abort 1/0 request.

COMDRVSUB V03-007

- COMMUNUCATION DRIVERS SUBROUTINES COM$BLDCTRLAST - BUILD CONTROL AST

3-JUN-1984 10:56:56 VAX-11 Macro V03-01

Page 17

24-APR-1982 15:46:24 DISK$VMSMASTER: [SYS.SRC)COMDRVSUB(10)

02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9
02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 0209 02D9 02D9 0209 02D9 0209 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 0209 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9 02D9

602

.SBTTL COM$BLDCTRLAST - BUILD CONTROL AST

603 ;++

604 COM$BLDCTRLAST - BUILD NEW CONTROL AST PACKET

605

606 FUNCTIONAL DESCRIPTION:

607

608 This routine builds a new terminal AST control block and inserts it after

609 the TAST entry pointed to by R7. The control block will double as an AST

610 control block when a AST fs delivered. The block will be reused until the

611 out-of-band AST request is canceled. The summary mask pointed to by

612 CURMSKADR(Rll) is inclusively or'ed with the user out-of-band mask pointed

613 to by USRMSKADR(Rll).

614

615 INPUTS:

616

617

R~ = I/O pACKET ADDRESS

618

R4 = CURRENT PCB

619

R5 = UCB ADDRESS

620 621

= R6 = CHANNEL ON WHICH OOB REQUEST IS BEING MADE
R7 ADDRESS OF THE CONTROL AST LIST ENTRY PRECEDING THE POINT WHERE

622

THE NEW ENTRY IS TO BE ADDED.

623

Rll= THE ADDRESS OF A TAST INFORMATION LIST (SEE COM$SETCTRLAST)

624

AP = ADDRESS OF THE QIO ARGLIST

625

626

P3(AP) = ACCESS MODE IN WHICH THE AST IS TO BE DELIVERED

627

(This is maximized against the caller's access mode)

628

629

ASTROUT(Rll) =ADDRESS OF AST ROUTINE TO CALL WHEN OUT-OF-BAND

630

CHARACTER IS TYPED

631

ASTPARM(Rll) =AST PARAMETER VALUE TO BE PASSED TO AST ROUTINE WHEN

632

OUT-OF-BAND AST IS DELIVERED

633

CURMSKADR(Rll)= ADDRESS OF THE CURRENT OUT-OF-BAND SUMMARY MASK

634

USRMSKADR(Rll)= ADDRESS OF OUT-OF-BAND MASK SPECIFIED BY USER FOR

635

THIS AST ENABLE

636

637

IPL at entry is assumed to be IPL$_ASTDEL.

638

639 OUTPUTS:

640

641

RO = STATUS OF THE I/O

642

Rl & R2 DESTROYED

643

ALL OTHER REGISTERS PRESERVED

644

645

IPL at entry is assumed to be IPL$_ASTDEL.

646

647

A TAST control block is allocated, filled in, and linked after the

648

entry pointed to by R7

649

650 COMPLETION CODES:

651

652

SS$ NORMAL

653

SS$-EXQUOTA

BUFFERED I/0 OR AST QUOTA FAILURE

654

SS$=INSUFMEM

DYNAMIC MEMORY FAILURE

655

656

657 COM$BLDCTRLAST:

658

COMDRVSUB V03-007

- COMMUNUCATION DRIVERS SUBROUTINES COM$BLDCTRLAST - BUILD CONTROL AST

3-JUN-1984 10:56:56 VAX-11 Macro V03-01

Page 18

24-APR-1982 15:46:24 DISK$VMSMASTER:[SYS.SRC]COMDRVSUB(10)

38 A4 B5 31 15
38 A4 B7 53 DD
51 34 9A OOOOOOOO'GF 16
53 8EDO 21 50 E9
25 10
1C A2 67 DO 67 1C A2 DE OC BB 30 A2 CB
50 01 3C 05
50 lC 3C 05
50 0124 BF 3C 05

0209 02DC 02DE 02El 02E3 02E6 02EC 02EF 02F2 02F4 02F4 02F4 02F4 02F4 02F4 02FB 02FF 0303 0308 030B 030E 030F 030F 030F 030F 030F 030F 0312 0313 0313 0318

659

TSTW

PCB$W ASTCNT(R4)

660

BLEQ

91$ -

Is there enough AST quota? Branch if insufficient AST quota.

661

DECW

PCB$W ASTCNT(R4)

662

PUSHL R3 -

Deduct from AST quota. Save reg. destroyed by EXE$ALLOCBUF.

663

MOVZBL #TAST$C LENGTH, Rl

Set size of TAST block.

664

JSB

GAEXE$ALLOCBUF

Al locate for the TAST control block.

665

POPL

R3

Restore saved register.

666

BLBC

RO, 93$

Branch if al location failed.

667

BSBB

COM$FILLCTRLAST

Fil 1 in newly al located block.

668

669

670 INSERT NEWLY BUILD TAST CONTROL BLOCK

671

672

673

DSBINT UCB$B DIPL(R5)

; Interlock access to queue links.

674

MOVL

(R7),-TAST$L FLINK(R2) ; Move list for. pointer to new entry.

675

MOVAL TAST$L FLINKTR2), (R7) ; Link new entry to current list.

676

BISL

TAST$L-MASK(R2), @CURMSKADR(Rll) ; Update summary mask.

677

ENBINT

Restore previous IPL.

678

MOVZWL #SS$ NORMAL, RO

; Indicate that build succeeded.

679

RSB

Return to caller.

680

681

682 ERROR RETURNS:

683

684

685 91$: 686

MOVZWL #SS$ EXQUOTA, RO

RSB

-

AST quota exceeded.

687

688 93$: 689

MOVZWL #SS$ INSFMEM, RO

RSB

-

Insufficient dynamic memory.

COMDRVSUB V03-007
JLV0272 JLV0272 JLV0272

- COMMUNUCATION DRIVERS SUBROUTINES

3-JUN-1984 10:56:56 VAX-11 Macro V03-01

Page 19

COM$FILLCTRLAST - FILLIN A CONTROL AST C 24-APR-1992 15:46:24 DISK$VMSMASTER:[SVS.SRC]COMDRVSUB(11)

20 A2 6B 30 A2 08 BB
50

0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319
0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 0319 7D 0319 031D DO 031D 0322 04 0322

691

.SBTTL COM$FILLCTRLAST - FILLIN A CONTROL AST CONTROL BLOCK

692 ;++

693 COM$FILLCTRLAST - FILLIN A CONTROL AST CONTROL BLOCK

694

695 FUNCTIONAL DESCRIPTION:

696

697 This routine fills in the terminal AST control block pointed to by R2. The

698 block may be either a previously al located block which is already linked to

699 a control AST queue, or a newly allocated block which is being filled in for

700 the first time.

701

702 INPUTS:

703

704

R2 ADDRESS OF TAST CONTROL BLOCK TO BE FILLED IN

705

R3 I/O PACKET ADDRESS

706

R4 CURRENT PCB

707

R6 CHANNEL ON WHICH OOB AST REQUEST IS BEING MADE

708

R 11 = THE ADDRESS OF A TAST INFORMATION LIST (SEE COM$SETCTRLAST)

709

AP = ADDRESS OF THE QIO ARGLIST

710 711

= P3(AP) ACCESS MODE IN WHICH THE AST IS TO BE DELIVERED

712

(This is maximized against the caller's access mode)

713

714

ASTROUT(Rll) =ADDRESS OF AST ROUTINE TO CALL WHEN OUT-OF-BAND

715

CHARACTER IS TYPED

716

ASTPARM(Rll) =AST PARAMETER VALUE TO BE PASSED TO AST ROUTINE WHEN

717

OUT-OF-BAND AST IS DELIVERED

718

USRMSKADR(Rl1)= ADDRESS OF OUT-OF-BAND MASK SPECIFIED BY USER FOR

719

THIS AST ENABLE

720

721

If this routine is called to operate on a TAST block which is already

722

linked to a control queue, it should be cal led at device IPL.

723

Otherwise, it can be cal led at IPL$_ASTDEL.

724

725 OUTPUTS:

726

727

RO & Rl ARE DESTROYED.

728

ALL OTHER REGISTERS ARE PRESERVED.

729

730

IPL at exit is the same as IPL at entry.

731

732

The TAST control block pointed to by R2 is filled in.

733

734 COMPLETION CODES:

735

736

There is no completion status. This routine is always successful.

737

738

739 COM$FILLCTRLAST:

740

741

ASSUME TAST$L ASTPRM EQ <TAST$L AST + 4>

742

ASSUME ASTPARM EQ <ASTROUT + 4>-

743

MOVQ

ASTROUT(Rll), -

; Plant AST routine and

744

TAST$L AST(R2)

; parameter addresses.

.1

MOVL

@USRMSKADR(R11), -

. 2

TAST$L_MASK(R2)

; Plant OOB mask.

. 3

CLRL

RO

: Assume no flags

COMDRVSUB V03-007
;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;-JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272 ;JLV0272
-5

- COMMUNUCATION DRIVERS SUBROUTINES

3-JUN-1984 10:56:56 VAX-~ 1 Macro V03-0l

Page 20

COM$FILLCTRLAST - FILLIN A CONTROL AST C 24-APR-1982 15:46:24 DISK$VMSMASTER:[SYS.SRC]COMDRVSUB(11)

05 20 A3 DC
50 20 08
03 20 A3 OB
50 02
20 A2 50 02 00
50 08 AC 51
51 02 16 51
51 50 03
50 51 2C A2 50 2E A2 56 28 A2 60 A4

0324 0324
0324
El 0324 0329
88 0329 11 032C
032E
032E 032E El 032E 0333 88 0333 0336
90 0336 EF 033A
0330 DC 0340 EF 0342
0346 91 0347 18 034A
90 034C 90 034F BO 0353 DO 0357 05 035C
0350
035D

.4 .5 .6 . 7 .8 .9 . 10 . 11 . 12 . 13 .14 5$: . 15 . 16 . 17 . 18 10$:
· 19
750 751
752 753 754 755 20$: 756 757 758 759 760

; Check for ABORT

;

BBC

#IO$V TT ABORT, -

IRP$W-FUNC(R3),5$

BISS

#TAST$M_ABORT,RO

BRB

10$

;

; Check for INCLUDE

B' BC BISS

#l0$V INCLUDE, I RP$W-FUNC ( R3) , 10$ #TAST$M_INCLUDE,RO

; Branch if not abort ; Else set abort flag. ; Ignore INCLUDE
; BR if striping OOB chars . ; Else set no-strip flag.

MOVB EXTZV
MOVPSL EXTZV

RO,TAST$B CTRL(R2) #0, #2, P3°(AP), RO
\

; Set TAST control field. ; Get requested delivery access mode.

Rl

Get access mode of requestor.

#PSL$V_PRVMOD, #PSL$S_PRVMOD, Rl, Rl ; If requestor's access

CMPB BGEQ MOVB MOVB MOVW MOVL RSB

RO, Rl

; mode is bigger than delivery access

20$

; mode, then delivery AST in

Rl, RO

; requester's access mode.

RO, TAST$B RMOD(R2)

; Plant delivery access mode.

RPC6,B$TLA_SPTI$DW(R-C4H),ANT(AR2S)T$L_PID'

(

Plan R2)

t ;

requester's channel. Plant requester's PIO.

; Return to caller.

.END

COMDRVSUB
Symbo 1 tab 1e
ACB$B RMOD ACB$L-AST ACB$L-ASTPRM ACB$L-KAST ACB$L -PIO ACB$M-NODELETE ACB$M-PKAST ACB$M-QUOTA ASTACNTNG ASTPARM ASTROUT ATTN2 BUG$ BADDALRQSZ COM$BLDCTRLAST COM$DELATTNAST COM$DELATTNASTP COM$DELCTRLAST COM$DELCTRLASTP COM$DRVDEALMEM COM$FILLCTRLAST COM$FLUSHATTNS COM$FLUSHCTRLS COM$POST COM$SETATTNAST COM$SETCTRLAST CTRL2 CURMSKADR DIR ... DYN$C FRK EXE$ABORTIO EXE$ALLOCBUF EXE$DEANONPAGED EXE$FORK EXE$MAXACMODE FKB$B FIPL FKB$B-TYPE FKB$C-LENGTH FKB$W-SIZE IO$V INCLUDE IO$V-TT ABORT IOC$GL PSBL IPL$ IOPOST IPL$-QUEUEAST IPL$-SVNCH IRP$W CHAN IRP$W-FUNC
Pl -
P2 P3 P4 P5 P6
PCB$L PID PCB$W-ASTCNT PR$ IPL PR$-SIRR
PRI$_IOCOM

- COMMUNUCATION DRIVERS SUBROUTINES

3-JUN-1984 10:56:56 VAX-11 Macro V03-01

Page 21

24-APR-1982 15:46:24 DISK$VMSMASTER:[SVS.SRC]COMDRVSUB(11)

00000008

00000010

00000014

00000018
oooooooc

00000020

00000010

00000040

OOOOOlCA R

02

00000004

00000000

OOOOOOOC R

02

******** x 02

00000209 R

02

00000000 RG

02

00000008 RG 02

00000142 RG 02

0000014A RG 02

0000008F RG 02

00000319 R

02

0000004F RG

02

000001E9 RG

02

00000081 RG

02

00000005 RG 02

00000235 RG 02

0000014E R

02

oooooooc

00000001

00000008
******** x 02 ******** x 02 ******** x 02 ******** x 02 ******** x 02

00000008

OOOOOOOA

00000018

00000008

00000008
oooooooc

******** x 02

00000004

00000006

00000008

00000028

00000020

00000000

00000004

000000.08
oooooooc

00000010

00000014

00000060

00000038

00000012

00000014

00000001

PSL$S PRVMOD PSL$V-PRVMOD
SAVABS ... SCH$GL PCBVEC SCH$QAST SS$ ACCVIO SS$-BADPARAM SS$-EXQUOTA SS$-INSFMEM SS$-NORMAL
TAST$B CTRL TAST$B-RMOD TAST$C-LENGTH TAST$L-AST
TAST$L-ASTPRM TAST$L -FLINK TAST$L-MASK TAST$L -PIO TAST$M-ABO TAST$M-ABORT TAST$M-BUSY TAST$M-INCLUDE TAST$M-LOST
TAST$V-ABORT TAST$V-BUSY TAST$V-INC TAST$V-INCLUDE TAST$V-LOST TAST$W-CHAN
TINFOSIZ.E UCB$B DIPL UCB$L-OPCNT USRMSKADR

00000002
00000016 00000010
******** x 02 ******** x 02
oooooooc
00000014 OOOOOOlC 00000124 00000001 0000002D 0000002C 00000034 00000020
00000024 0000001C 00000030 00000028 00004000 00000020 00000008 00000002 ::: 00000010
00000005 00000003 OOOOOOOF 00000001 00000004 0000002E 00000010 0000005E 00000070 00000008

COMDRVSUB Psect synopsis

- COMMUNUCATION DRIVERS SUBROUTINES

3-JUN-1984 10:56:56 VAX-11 Macro V03-0l

Page 22

24-APR-1982 15:46:24 DISK$VMSMASTER:[SYS.SRC]COMDRVSUB(11)

+----------------+ Psect synopsis !

PSECT name
ABS $ABS$ WIONONPAGED

Al location

PSECT No. Attributes

00000000 00000010 00000350

0.) 00 16.) 01 861.) 02

0.) NOP IC USR CON ABS LCL NOSHR NOEXE NORD NOWRT NOVEC BYTE

1 . ) NOPIC USR CON ABS LCL NOSHR EXE RD

WRT NOVEC BYTE

2. ) NOP IC USR CON REL LCL NOSHR EXE RD

WRT NOVEC BYTE

Performance indicators

Phase

Page faults

CPU Time

Elapsed Time

Initjal ization Command processing Pass 1 Symbol table sort Pass 2 Symbol table output Psect synopsis output Cross-reference output Assembler run totals

28

00:00:00.07

00:00:01.22

99

00:00:00.52

00:00:06.81

457

00:00:19.68

00:01:34.99

0

00:00:02.98

00:00:10.33

150

00:00:05.11

00:00:26.99

11

00:00:00.10

00:00:00.10

2

00:00:00.03

00:00:00.73

0

00:00:00.00

00:00:00.00

750

00:00:28.49

00:02:21.17

The working set limit was 1650 pages. 102023 bytes (200 pages) of virtual memory were used to buffer the intermediate code. There were 100 pages of symbol table space al located to hold 1859 non-local and 37 local 860 source lines were read in Pass 1, producing 15 object records in Pass 2. 34 pages of virtual memory were used to define 32 macros.

symbols.

! Macro library statistics

Macro library name

Macros defined

$255$DUA28:[SYS.OBJ]LIB.MLB;l

18

$255$DUA28:[SYSLIB]STARLET.MLB;2

11

fOTALS (all libraries)

29

2032 GETS were required to define 29 macros.

There were no errors, warnings or information messages.

MACRO/LIS=LIS$:COMDRVSUB/OBJ=OBJ$:COMDRVSUB MSRC$:COMDRVSUB/UPDATE=(ENH$:COMDRVSUB)+EXECML$/LIB

PCDRIVER. LIS PCDRIVER.COM PCDRIVER.OPT LOADER.COM READY.FOR RANDWV.FOR MODE.FOR

PCDRIVER Table of contents

( 1)

85

( 1)

202

( 1)

312

{ 1 )

341

( 1)

389

( 1)

471

( 1)

527

( 1)

543

( 1)

603

( 1)

647

( 1)

905

( 1)

1012

( 1) ( 1)

1l01 6se8

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-01

External and local symbol definitions
Standard tables PT CONTROL INIT, Controller initialization PT-UNIT IN1T, Unit initialization routine PT-FDT ROUTINE, Punch FDT routine ACP FDT ACP $QIO FDT Routine NULL BYTES FDT Routines for header/trailer PR FDT ROUTINE Reader FDT Routine PT-START, Start I/O routine
PT-PUNCH, Start a punch operation PR-START, Start I/O routine (Reader)
PT-INTERRUPT, Interrupt service routine PT-CANCEL, Cancel I/O routine
PT=REG_DUMP, Device register dump routine

routine

Page 0

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-0l

Page 1

22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(l)

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000
0000 0000 0000 0000 0000 0000 0000 0000

1

. TITLE PCDRIVER - VAX/VMS PAPER TAPE READER/PUNCH DRIVER

2

. !DENT /V06/

3

4

5 COPYRIGHT (C) 1979 6 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.

7

8 THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT 9 NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL 10 EQUIPMENT CORPORATION.

11

12 DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS

13 SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DEC. 14 15 ;++

16

17 FACILITY:

18

19

VAX/VMS Paper Tape Reader/Punch Driver

20

21 ; ABSTRACT:

22

23 ;

This driver controls the PC11 paper tape reader/punch. READ and

24 ;

WRITE $QIOs are accepted (VBLK, LBLK, AND PBLK), as are MOUNT,

25 ;

ACPCONTROL, and WRITEOF $QIOs (which call on the ACP -- PCACP).

26 ;

MODIFY, DELETE, and DEACCESS $QIOs are valid for the punch,

27 ; 28 ;

as are CREATE and READPROMPT $QIOs (valid for both reader/punch).

29 ; 30 ; 31 ;

READVBLK and READLBLK cause characters to be read from the reader with leading nu! l bytes ignored (for the first read request); READPBLK is the same, except that leading null bytes

32 ;

are treated as data characters. An EOF byte is recognized if

33 ; 34 ;

the user requested looking for EOF (default if not physical).

35 ;

WRITEVBLK and WRITELBLK cause characters to be,punched (a

36 ; 37 ;

header and trailer of nul 1 bytes is punched--default is to punch NULL BYTES null bytes in the header and trailer tape).

38 ;

WRITEPBLK Ts the same, except that no header/trailer is punched.

39 ; 40 ;

If first $QIO wasn't physical, an EOF is punched before trailer.

41 ;

The MOUNT $QIO is used to synchronize with the ACPMNT program

42 ;

which loads the paper tape punch ACP (PCACP). The ACPCONTROL

43 ; 44 ; 45 ;

$QIO is a no-op function which serves to awaken the ACP if it is hibernating. The WRITEOF $QIO is turned into an equivalent WRITEVBLK $QIO by the ACP.

46 ;

47 ; 48 ;

The MODIFY $QIO changes the default (NULL BYTES) number of null bytes to punch in the header/trailer tape~ P2 specifies the

49 ;

new number of null bytes to be punched.

50 ;

51 ;

The DELETE $QIO restores the default (NULL BYTES) number of null

52 ;

bytes to punch in the header/trailer tape.

53 ;

54 ;

The DEACCESS $QIO returns the current number of null bytes which

55 ;

are to be punched for the header/trailer tape in the high order

56 ; 57

longword of the IOSB specified in the $QIO call.

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-01

Page 2

22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(1)

0000
0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

58

The CREATE $QIO is used to enable searching for an EOF byte (for

59

the reader), or to enable the punching of an EOF byte (for the

60

punch).

61

62

The READPROMPT $QIO is used to disable searching for an EOF byte

63

(for the reader), or to disable the punching of an EOF byte (for

64

the punch).

65

66

When used, Pl is the starting address of the buffer, and P2 is

67

the buffer length. The driver performs buffered I/O.

68

69

An EOF character is equal to a decimal 26 (control-Z).

70

71

Note that the ACP (PCACP) is not required for the driver to

72

work. PCDRIVER may be loaded and used independent of the ACP.

73

The ACP's main function is to serve as an instructional tool

74

showing how ACPs are written; the ACP does not provide any

75

added functionality for either the reader or punch.

76

77 AUTHOR:

78

79

Vik Muiznieks

July 1979

80

81

HISTORY

82

Fred Marsh

83

Added $DYNDEF $PRVDEF and $PCBDEF to external symbol definitions

84

85

.SBTTL External and local symbol definitions

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-0l

Page 3

External and local symbol definitions

22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(1)

00000000 00000004 00000008
oooooooc
00000010 00000014
OOOOOOOF 00000002
oooooooc
OOOOOOOA 00000002 00000064 00000064
oooooooc
00000000 0000001A 00000032 00000001
00000004 00000010 00000008 00000020 00000007 00000006 00000001

0000 0000 0000 0000 0000 0000 0000 0000 0000 OOOQ 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000
0000
0000 0000
0000
0000 0000 0000 0000
0000 0000
0000 0000 0000·
0000 0000 0000
0000 0000 0000 0000 0000

87

88 External symbols

89

90

$CRBDEF

Channel request block

91

$VCBDEF

Volume control block

92

$DCDEF

Device classes and types

93

$DDBDEF

Device data block

94

$DEVDEF

Device characteristics

95

$EMBDEF

Error logging fields(not in template)

96

$IDBDEF

Interrupt data block

97

$IODEF

I/O function codes

98

$IPLDEF

Hardware IPL definitions

99

$IRPDEF

I/O request packet

100

$JIBDEF

Job Information Block

101

$SSDEF

System status codes

102

$UCBDEF

Unit control block

103

$VECDEF

Interrupt vector block

104

$DVNDEF

105

$PCBDEF

106

$PRVDEF

107

108

109

110 Argument list (AP) offsets for device-dependent $QIO parameters

111

(Only Pl and P2 are used in this driver)

112

113

114 Pl

0

First $QIO parameter

115 P2

4

Second $QIO parameter

116 P3

8

Third $QIO parameter

11'7 P4

12

Fourth $QIO Rprameter

118 P5

16

Fifth $QIO parameter

119 P6

20

120 ;

Sixth $QIO parameter

121 ; Other constants

122

123

124 LOOP CNT=15

before issuing off-line msg.

125 SHORT WAIT=2

#sec for device to go online

126 BUF OVR HD=12

system buff er overhead

127 PT TIMEOUT SEC=lO

10 second device timeout

128 PT-NUM REGS=2 129 MV-CLASS=lOO 130 MV-TYPE=lOO

Each device has 2 registers My own device class number My own device type number

131 ERBFSIZE=12 132 NULL=O

Size of err. log buf. in bytes null byte

133 EOF=26

EOF byte = control-Z

134 NULL BVTES=50

for header/trailer

135 PUNCH HOR=l

bit pos. flagging

136

header/trailer punched

137 START=4

mask for punch. hdr.

138 END=16

mask for punch. trail.

139 PNCH=8

f 1ag-->punch op. pe rf. (mask)

140 RD HDR=32

flag-->read hdr. tape (mask)

141 STARTING=7

bit pas.--> 1st operation

142 FRST QI0=6 143 BIT0;-1

flag-->read 1st header (pos.) mask-->EOF byte handling

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-01

Page 4

External and local symbol definitions

22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(1)

00000100 0000 00000200 0000

144 BIT8=256 145 BIT9=512

; mask-->EOF byte handling ; mask-->EOF byte handling

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-0l

Page 5

External and local symbol definitions

22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(l)

OOOOOOAO
00000002
00000004 00000006 00000008

0000 0000 0000 0000 0000 0000 OOAO OOAO OOA4 OOA4 OOA6 OOA6 OOA7 OOA7 OOA8 OOA8 OOAA OOAA OOAA OOAA 0000 0000 0000 0000 0000 0000 0000 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0004 0004 0006 0006 0006
0006 0006 0006 0006 0006 0006 0008 0000 0000

147

148 Definitions that fol low the standard UCB fields

149

150

$DEFINI UCB

Start of UCB definitions

151

152

.=UCB$L DPC+4

Position at end of error log

153

extension to UCB

154 $DEF

UCB$L_SAV R4

.BLKL

copy of R4 for CANCEL routine

155

156 $DEF

UCB$W_PT PPS

.BLKW

copy of status reg. (err. log)

157

158 $DEF

UCB$B PT OFLCNT .BLKB

Off-line counter

159

160 $DEF

UCB$B PT_PPB

.BLKB

Copy of data reg. for err. log

161

162 $DEF

UCB$W_MY_REFCNT .BLKW

Counter for channels assigned

163

164 $DEF

UCB$K_PT UCBLEN

Length of extended UCB

165

166

$DEFEND UCB

End of UCB definitions

167

168 Device register offsets from CSR address

169

170

$DEFINI PT

Start of status definitions

171

172 $DEF

PT PRS

reader Control/status register

173

.BLKW

174

175 Bit positions for device control/status registers

176

177

VIELD PT CSR,O,<-

Control/status register

178

<RDENA, , M>, -

Reader enable bit

179

<,5>,-

Skip five bits

180

< IE, , M>, -

Reader interrupt enable bit

181

<DONE, ,M>,-

Reader done bit

182

<,3>,-

Skip three bits

183

<BUSY, , M>, -

Reader busy bit

184

<,3>,-

Skip three bits

185

<ERROR, ,M>,-

Reader error bit

186

>

187 $DEF

PT PRB

reader data register

188

.BLKW

189 $DEF

PT PPS

Punch Control/status register

190

.BLKW

191

VI ELD PT STS,0,<-

192

< ,6> ,-

Control/status register disregard bits

193

<IE,, M>, -

interrupt enable

194

<READY, , M>, -

device ready bit

195

<,7>,-

disregard bits

196

<ERROR, , M>, -

device error bit

197

>

198 $DEF

PT PPB

Punch data register

199

.BLKW

200

$DEFEND PT

End of device register

201

definitions.

202

.SBTTL Standard tables

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-01

Page 6

Standard tables

22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(1)

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0038 0038 0038 003C 0040 0040 0040 0040 0040 0040 0047 0046 004F 0054 0059 0059 0059 0059 005E 005E 0063 0063 0068 0068 0068 006D 006D 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000
0000 0038 0038 0038 0038 0038 0038

204

205

206 Driver prologue table

207

208

209

DPT AB

DPT-creation macro

210

END=PT END,-

End of driver label

211

ADAPTER=UBA, -

Adapter type

212

UCBSIZE=<UCB$K PT UCBLEN>,-

Length of UCB

213

NAME=PCDRIVER -

Driver name

214

DPT STORE !NIT

Start of load

215

initialization table

216

DPT STORE UCB,UCB$B FIPL,B,8

; Device fork IPL

217

DPT-STORE UCB,UCB$B-DIPL,B,20

; Device int. IPL (BR4)

218

DPT-STORE UCB,UCB$L-DEVCHAR,L,<-

; Device characteristics

219

-

DEV$M AVL!--

; e.g., dev. available

220

DEV$M-ELG!-

; error logging enabled

221

DEV$M-REC!-

; record oriented

222

DEV$M-IDV!-

; input device-reader

223

DEV$M-ODV>

; output device-punch

224

DPT STORE UCB~UCB$B DEVCLASS,B,MV CLASS ; store my device class

225

DPT-STORE UCB,UCB$8-DEVTVPE,B,MV TYPE ; Store my device type

226

DPT-STORE UCB,UCB$W-DEVSTS,W,O

; Clear all flags

227

DPT=STORE UCB,UCB$W=DEVBUFSIZ,W,NULL_BVTES ; init. #null bytes

228

229

DPT STORE REINIT

Start of reload

230

initialization table

231

DPT STORE DDB,DDB$L DDT,D,PC$DDT

Address of DDT

232

DPT-STORE CRB,CRB$L-INTD+4,D,-

Address of reader int.

233

PR INTERRUPT

service routine

234

DPT STORE CRB,CRB$L INTD2+4,D,-

Address of punch int.

235

PT INTERRUPT

service routine

236

DPT STORE CRB,-

Address of controller

237

CRB$L INTD+VEC$L INITIAL,-

initialization routine

238

D,PT CONTROL !NIT

239

240

DPT STORE END

241

End of initialization tables

242

243

244 Driver dispatch table

245

246

247

DDT AB

DDT-creation macro

248

DEVNAM=PC,-

Name of device

249

START=PT START,-

Start I/O routine

250

FUNCTB=PT FUNCTABLE,-

FDT address

251

CANCEL=PT-CANCEL,-

Cancel I /0 routine

252

REGDMP=PT-REG DUMP,-

Register dump routine

253

UNITINIT=PT UNIT INIT,-

Unit init. routine

254

ERLGBF=ERBFSIZE+EMB$L DV REGSAV Size of err. log. buf.

255

(plus system overhead)

256

257 Function dispatch table

258 259

P' T

FUNCTABLE:

260 -

FUNCTAB

FDT for driver Valid I/O functions

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-01

Page 7

Standard tables

22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(1)

0038 261 0038 262 0038 263 0038 264
0038 265 0038 266 0038 267 0038 268 0038 269 003& 270 0038 271 0038 272 0038 273 0038 274 0040 275 0040 276 0040 277 0040 278 0040 279
0040 280 0040 281 0040 282 0040 283 0040 284 0040 285 0040 286 0040 287 0040 288 0040 289 0048 290 0048 291 0048 292 0048 293 0054 294 0054 295 0054 296 0054 297 0060 298 006C 299 006C 300 006C 301 0078 302 0078 303 0078 304 0078 305 0084 306 0090 307
0090 308 0090" 309 0090 310 0090 311 009C 312

FUN CT AB
FUNCTAB FUNCTAB FUNCTAB FUNCTAB FUNCTAB FUNCTAB FUNCTAB .SBTTL

<READVBLK,READLBLK,READPBLK,MOUNT,CREATE,READPROMPT,ACPCONTROL,MODIFY,DELETE,DEACCESS,WRITEOF,WRITEVBLK,WRITELBLK, WRITEPBLK>
-
<READVBLK,READLBLK,READPBLK,MOUNT,CREATE,READPROMPT,ACPCONTROL,MODIFY,DELETE,DEACCESS,WRITEOF,WR ITEVBLK, WRITELBLK,WRITEPBLK> PT FDT ROUTINE,<WRITEVBLK,WRITELBLK, WRITEPBLK> PR FDT ROUTINE,<READVBLK,READLBLK,READPBLK> ACP FDT,<MOUNT> Q TO ACP,<ACPCONTROL,WRITEOF> FOR PNCH,<MODIFY,DELETE,DEACCESS> SET FOT,<MODIFY> +EXE$QIODRVPKT,<DELETE,-
CREATE,READPROMPT,DEACCESS> PT CONTROL INIT,

Controller

; READ virtual

; READ logical

; READ physical

; MOUNT ACP function

; CREATE function

; READPROMPT function

; ACPCONTROL function

; set # null bytes

; reset # nu 11 bytes

; read # nul 1 bytes

; write EOF function

; Write virtual

; Write logical

; Write physical

; Buffered functions

; READ virtual

; READ logical

; READ physical

; MOUNT ACP function

; CREATE function

; READPROMPT function

; ACPCONTROL function

; set~, null bytes

; reset # null bytes

; read # nu 11 bytes

; write EOF function

; Write virtual

; Write logical

; Write physical

; FDT write routine for

; write virtual,

; '

write 1ogi ·and write

cal, physical.

; FDT READ routine for

; READ virtual,

; READ 1og i ca 1 ,

; and READ physical.

; FDT ACP routines

; Check for ACP FDTs

; ACPCONTROL routine

; WRITE EOF routine

; Make sure for punch

; set # nu 1 1 bytes

; reset # null bytes

; read # nu 11 bytes

; set # nu l 1 bytes

; no more checking

; for nu l 1 byte reset or

; CREATE function or

; READPROMPT function or

i

n

it

i' a

reading# lization

null routi

bytes ne

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-01

Page 8

PT_CONTROL_INIT, Controller initializati 22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(1)

009C
009C 009C 009C
009C 009C 009C 009C 009C 009C 009C 009C 009C 009C 009C 009C 009C 009C 009C 009C 009C
009C 009C 009C 009C 009C 05 009C 0090

314

315 ;++

316 317

; ;

PT_CONTROL- INIT,

Readies

controller

for

I/O

operations

318 ; Functional description:

319 ;

320 ;

·The operating system calls this routine in 3 places:

321 ;

322 ;

at system startup

323 ;

during driver loading and reloading

324 ;

during recovery from a power failure

325 ;

326 ; Inputs:

327 ;

328 ; 329 ;

R4

- address of the CSR (controller status register)

RS

- address of the IDB (interrupt data block)

330 ;

R6

- address of the DDB (device data block)

331 ;

RB

- address of the CRB (channel request block)

332 ;

333 ; Outputs:

334 ;

335 : 336

The routine must preserve all registers except RO-R3.

337

338

339 PT CONTROL INIT:

; Initialize controller

340 341

RSB .SBTTL

PT

UNIT- INIT,

Unit

i

n

i

t

i a'

l

Return ization

routine

PCDRIVER V06

38 A5 38 A5

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP~1984 17:59:27 VAX-11 Macro V03-01

Page 9

PT_UNIT_INIT, Unit initialization routin 22-AUG-1984 20:06:00 WORK2: [COURSE.DRIVER]PCDRIVER.MAR;(l)

64 A5 10 50 54 A5
50 OA 04000000 SF 08 08000000 8F

0090 0090 0090 0090 0090 0090 0090 0090 0090 0090 0090 0090 0090 0090 0090 0090 0090 0090 0090 0090 009D 0090 0090 0090 0090 0090 0090 0090 0090 009D 0090 0090 0090 0090 0090 0090 0090 0090 A8 0090 BO OOA1 85 OOA5 13 OOA7 CA OOA9 11 0081 CA 0083 05 OOBB OOBC

343

344 ·++

345 ' PT UNIT_INIT, Readies unit for I/O operations

346

347 Functional description:

348

349

The operating system calls this routine after cal ling the

350

controller initialization routine:

351

352

at system startup

353

during driver loading

354

during recovery from a power failure

355

356

When using the SYSGEN CONNECT command, the reader is

357

connected first (as PCO:), and the punch is connected

358

second (as PC1 :). The initialization routine sets both

359

units on-line, and clears the appropriate device

360

characteristics bit (i.e., punch does only output oper-

361

ations, reader does only input operations). T~p UCBs

362

are used so that operations can be overlapped on the

363

reader and punch. No controller channel is ever requested

364

(with REQPCHAN) since the PC11 reader/punch is essentially

365

two independent devices in one box, and no controller is

366

really present. (Therefore operations may occur on both

367

the reader and the punch at the same time.)

368

369 Inputs:

370

371

R4

- address of the CSR (controller status register)

372

R5

- address of the UCB (unit control block)

373

374 Outputs:

375 376

The routine1 must preserve al 1 registers except RO-R3.

377

378

379

380 PT UNIT !NIT:

; Initialize unit

381

-BISW

#UCB$M ONLINE,UCB$W STS(R5)

; Set unit online

382

MOVW

UCB$W UNIT(R5),RO -

; Get unit#

383

TSTW

RO -

; Is unit # O?

384

BEQL

10$

; If so, reader

385

BICL

#OEV$M !OV,UCB$L OEVCHAR(R5)

; No input if punch

386

BRB

20$ -

-

387 10$:

BICL

#OEV$M OOV,UCB$L OEVCHAR(R5)

No output if reader

388 20$:

RSB

-

-

; Return

389

.SBTTL PT_FOT_ROUTINE, Punch FOT routine

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-0l

Page 10

PT_FDT_ROUTINE, Punch FDT routine

22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(1)

50 OOOOOOF4 BF DO 06 38 A5 1B EO OOOOOOOO'GF 17 50 6C DO 51 04 AC 3C 5F 13 OOOOOOOO'GF 16
32 A3 51 BO 09 BB
51 oc co
OOOOOOOO'GF 16 50 50 E9
OOOOOOOO'GF 16 47 50 E9 09 BA
2C A3 52 DO 30 A3 51 BO
50 DD 50 0080 C4 DO
20 AO 51 C2 50 BEDO

OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOBC OOC3 OOC8 OOCE OODl OOD5 OOD7 OODD OODD OODD OOEl OOE3 OOE6 OOEC OOEF OOF5 OOF8 OOFA OOFE 0102 0104 0109 0100

391

392 ;++

393 PT FDT_ROUTINE, Punch FDT routine

394

395 Functional description:

396

397

This FDT routine makes all the standard accessibility checks

398

for buffered I/O operations, allocates a buffer from system

399

pool, and copies the user data to be punched to the system

400

buffer. The standard !RP and PCB fields are updated. In the

401

case of a WRITEOF function code, the !RP is queued to the ACP.

402

The routine makes sure that the punch UCB is being

403

referenced by the user.

404

405 Inputs:

406

407

RO-R2 - scratch registers

"

408

R3

- address of the !RP (I/O request packet)

409

R4

- address of the PCB (process control block)

410

R5

- address of the UCB (unit control block)

411

R6

- address of the CCB (channel control block)

412

R7

- bit number of the I/O function code

413

RB

- address of the FDT table entry for this routine

414

R9-R 11 - scratch registers

415

AP

- address of the 1st function dependent $QIO parameter

416

417 Outputs:

418

419

The routine must preserve al 1 registers except RO-R2, and

420

R9-Rll.

421

422

423

424 PT FDT ROUT! NE:

; Punch FDT routine ala CRDRIVER

425

MOVL

#SS$ ILLIOFUNC,RO

Assume wrong UCB

426

BBS

#DEV$V ODV,UCB$L DEVCHAR(R5),5$ Check for purrch UCB

427

JMP

GAEXE$ABORTIO -

Error if not

428 5$:

MOVL

Pl(AP),RO

Get add. of buffer

429

MOVZWL P2(AP) ,Rl

Get length of buffer

430

BEQL

10$

Zero length transfer?

431

JSB

GAEXE$WRITECHK

Check access of user

432

buffer -- no return if

433

no accessibility

434

MOVW

Rl ,IRP$W BCNT(R3)

435

PUSHR #AM<RO,R3>

Save user buffer len. Save registers

436

ADDL2 #BUF OVR HD,R1

Account for overhead

437

JSB

GAEXE$BUFFRQUOTA

Check buffer quota

438

BLBC

R0,20$

Abort if insufficient

439

JSB

GAEXE$ALLOCBUF

Al locate system buffer

440

BLBC

R0,20$

Abort on failure

441

POPR

#AM<RO,R3>

Restore registers

442

MOVL

R2,IRP$L SVAPTE(R3)

443

MOVW

R1,IRP$W-BOFF(R3)

444

PUSHL RO

-

Store returned buf add And byte quota charged Save reg.

445

MOVL

PCB$L JIB(R4),RO

Get JIB address

446

SUBL

Rl,JIB$L BVTCNT(RO)

447

POPL

RO

-

Charge process for buf Restore reg.

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Mac~o V03-0l

Page 11

PT_FDT ROUTINE, Punch FDT routine

22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(1)

38 BB 0110 448
53 52 oc Cl 0112 449

82 53 DO 0116 450

62 50 DO 0119 451
51 oc C2 011 C 452

63 60 51 28 011 F 453

0123 454

38 BA 0123 455

59 20 A3 BO 0125 456

28 59 06 00 ED 012~ 457

012E 458

43 13 012E 459

OOOOOOOO'GF 17 0130 460

0136 461

0136 462

0136 463

0136 464

0136 465

50 01 3C 0136 466 10$:

OOOOOOOO'GF
oc

17 0139 BA 013F

467 468 20$:

OOOOOOOO'GF 17 0141 469

0147 470

0147 471

PUSHR ADDL3 MOVL MOVL SUBL2 MOVC3
POPR MOVW CMPZV
BEQL JMP

#AM<R3,R4,R5> #BUF OVR HD,R2,R3 R3, (R2)+-
RO, (R2) #BUF OVR HD,Rl Rl, (RO) ,(R3)

#/\M<R3,R4,R5>

IRP$W FUNC(R3),R9

,

SA#IO$V FCODE,SA#l0$S FCODE,R9,-;

SA#I0$ WRITEOF

-

TO ACP-

GAEXE$QIODRVPKT

Save reg. 's for MOVC3 Find system data area Save its address Save user buffer add. Set transfer length Copy user buffer to system data buffer Restore reg. 's Get function code See if WRITEOF $QIO If so, Queue IRP to ACP Queue driver packet FDT routine done

Entered on zero-length transfer or al location failure

MOVZWL JMP POPR JMP

#SS$ NORMAL,RO GAEXE$FINISHIOC #AM<R2,R3> GAEXE$ABORTIO

.SBTTL ACP FDT ACP $QIO FDT Routine

Normal completion Goto finish I/O Clean up stack Quota or buffer allocation failure

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-0l

Page 12

ACP_FDT ACP $QIO FDT Routine

22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(l)

50 24
02 64 A5 09 OB
50 007C BF OOOOOOOO'GF
50 34 A5 EF
06 00 28 20 A3
07 FF49 50 34 A5
OC AO OOOOOOOO'GF

0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 3C 0147 014A E5 0150 11 0155 3C 0157 17 015C 0162 DO 0162 13 0166 ED 0168 0168 12 Ol6E 31 0170 DO 0173 0177 B6 017A 17 0170 0183

473 ;++

474 ACP FDT, ACP $QIO FDT routine

475

476 Functional description:

477

478

This FDT routine increments the transaction count in the VCB,

479

and queues the IRP to the paper tape ACP (PCACP). It is

480

used for the MOUNT $QIO. MOUNT privilege is required to

481

successfully issue the MOUNT $QIO request.

482

483

Entry point Q TO ACP is used to service both the WRITEOF and

484

ACPCONTROL $QI0s~ Control is re-transferred to TO ACP from

485

routine PT_FDT_ROUTINE in the case of a WRITEO~, $QIO.

486

487

No check is made on the punch or reader UCB, since

488

requests for ACP operation will find the errors.

489

490 Inputs:

491

492

RO-R2 - scratch registers

493

R3

- address of the IRP (I/O request packet)

494

R4

- address of the PCB (process control block)

495

R5

- address of the UCB (unit control block)

496

R6

- address of the CCB (channel control block)

497

R7

- bit number of the I/O function code

498

R8

- address of the FDT table entry for this routine

499

R9-R 11 - scratch registers

500

AP

- address of the 1st function dependent $QIO parameter

501

502 Outputs:

503

504

The routine must preserve all registers except RO-R2, and

505

R9-R 11.

586

507

508

509 ACP FDT:

MOUNT $QIO issued

510

-

MOVZWL #SS$ NOPRIV,RO

; Assume insuf. priv.

511

IFNPRIV MOUNT,NO PRIV

; Have MOUNT privilege?

512

BBCC

#UCB$V MOUNTING,UCB$W STS(R5),NT MNT ; If clr, not sync.

513

BRB

Q TO ACP

-

; Yes, continue

514 NT MNT: MOVZWL #SS$-DEVNOTMOUNT,RO

; Not mounting status

515 NO-PRIV:JMP

GAEXE$ABORTIO

; Signal error

516 Q TO ACP: 517 - - MOVL

UCB$L VCB(R5),RO

IRP request okay Get VCB address

518

BEQL

NT MNT

Is ACP mounted?

519

CMPZV SA#IO$V FCODE,SA#IO$S FCODE,-

Check for WRITEOF

520

IRP$W FUNC(R3),SA#I0$-WRITEOF

Function code

521

BNEQ

NT WRT

-

If neq, Q to ACP

522

BRW

PT-FDT ROUT! NE

If eq l , WR ITEOF

523 TO ACP: MOVL

UCB$L VCB(R5),RO

Restore VCB address

524 NT-WRT: SETI PL #IPL$-SYNCH

Synch. access to VCB

525

INCW

VCB$W-TRANS(RO)

Increment trans. count

526

JMP

GAEXE$QIOACPPKT

, Queue IRP to ACP

527

.SBTTL NULL BYTES FDT Routines for header/trailer

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-01

Page 13

NULL_BYTES FDT Routines for header/trail 22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(1)

50 OOOOOOF4 SF 06 38 A5 1B OOOOOOOO'GF 50 01
38 A3 04 AC OOOOOOOO'GF

0183
0183 0183 0183 0183 DO 0183 EO 018A 17 018F DO 0195 05 0198 0199 3C 0199 17 019E 01A4
01A4

529

530 ;

FDT routines for processing MODIFY, DELETE, and DEACCESS

531 ;

$QIOS. Very similar, and very simple.

532 533

F' OR_PNCH:

; Have punch UCB?

534

MOVL

#SS$ ILLIOFUNC,RO

; Assume not

535

BBS

#DEV$V ODV,UCB$L DEVCHAR(R5),5$ ; Check for punch

536

JMP

GAEXE$ABORTIO -

; Not punch UCB

537 5$:

MOVL

#SS$_NORMAL,RO

; Have punch

538

RSB

; Return to FDT table

539 SET_FDT:

; Get ~, nul 1 bytes

540

MOVZWL P2(AP),IRP$L MEDIA(R3)

; Store # .of nu 11 bytes

541

JMP

GAEXE$QIODRVPKT

; Synchronize with other

542

; I/O requests for unit

543

. SBTTL PR_FDT ROUTINE Reader FDT Routine

PCDRIVER V06

~VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-0l

Page 14

PR_FDT_ROUTINE Reader FDT Routine

22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(1)

50 OOOOOOF4 SF DO 06 36 A5 1A EO OOOOOOOO'GF 17 50 6C DO 51 04 AC 3C 46 13 OOOOOOOO'GF 16
32 A3 51 BO 09 BB
51 OC co
OOOOOOOO'GF 16 37 50 E9
OOOOOOOO'GF 16 2E 50 E9 09 BA
2C A3 52 DO 30 A3 51 BO
50 DD 50 0080 C4 DO
20 AO 51 C2 50 BEDO
82 QC A2 9E 62 50 DO
OOOOOOOO'GF 17
50 01 3C OOOOOOOO'GF 17
QC BA OOOOOOOO'GF 17

01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4_ 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 01A4 OlAB 01BO 01B6 01B9 01BD 01BF 01C5
01C5 01C5 01C9 01CB 01CE 0104 0107 0100 01EO 01E2 01E6 01EA 01EC 01F1 01F5 01F8 OlFC 01FF 0205 0205 0208 020E 0210

545 ;++

546 PR FDT_ROUTINE, READER FDT routine

547

548 Functional description:

549

550

This FDT routine makes all the standard accessibility checks

551

for buffered I/0 operations, and allocates a buffer from system

552

pool (into which the data will be read).

553

The standard IRP and PCB fields are updated.

554

A check is made to determine if the reader UCB is being

555

referenced.

556 Inputs:

557

RO-R2 - scratch registers

558

R3

- address of the IRP (I/O request packet)

559

R4

- address of the PCB (process control block)

560

RS

- address of the UCB (unit control block)

561

R6

- address of the CCB (channel control block)

562

R7

- bit number of the I/O function code

563

RB

- address of the FDT table entry for this routine

564

R9-R 11 - scratch registers

565

AP

- address of the 1st function dependent $010 parameter

566 Outputs:

567

The routine must preserve all registers except RO-R2, and

568

R9-R 11.

569

570 PR FDT ROUTINE:

; reader FDTroutine ala CRDRIVER

571

MOVL

#SS$ ILLIOFUNC,RO

Assume wrong UCB

572

BBS

#DEv$v IDV,UCB$L DEVCHAR(R5),5$ Test for reader UCB

573

JMP

GAEXE$ABORTIO -

Error if not

574 5$:

MOVL

Pl(AP),RO

Get add. of buffer

575

MOVZWL P2(AP) ,Rl

Get length of buffer

576

BEQL

10$

Zero length transfer?

577

JSB

GAEXE$READCHK

Check access of user

578

buffer -- no return if

579

no accessibility

580

MOVW

R1,IRP$W BCNT(R3)

Save user buffer len.

581

PUSHR #AM<RO,R3>

Save registers

582

ADDL2 #BUF OVR HD,Rl

Account for overhead

583

JSB

GAEXE$BUFFRQUOTA

Check buffer quota

584

BLBC

R0,20$

Abort if insufficient

585

JSB

GAEXE$ALLOCBUF

Allocate system buffer

586

BLBC

R0,20$

Abort on failure

587

POPR

#AM<RO,R3>

Restore registers

588

MOVL

R2,IRP$L SVAPTE(R3)

Store returned buf add

589

MOVW

R1,IRP$W-BOFF(R3)

590

PUSHL RO

-

And byte quota charged Save reg.

591

MOVL

PCB$L JIB(R4),RO

592

SUBL

R1,JI~$L BVTCNT(RO)

593

POPL

RO

-

Get JIB address Charge process for buf Restore reg.

594

MOVAB BUF OVR HD(R2),(R2)+

Save data area add.

595

MOVL

RO,(R2)-

Save user buffer add.

596

JMP

GAEXE$QIODRVPKT

Queue driver packet

597

Entered on zero-length transfer or al location failure

598 10$:

MOVZWL #SS$ NORMAL,RO

Normal completion

599

JMP

GAEXE$FINISHIOC

Goto finish I/O

600 20$:

POPR

#AM<R2,R3>

Clean up stack

601

JMP

GAEXE$ABORTI 0

Quota or buffer

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-01

Page 15

PR_FDT_ROUTINE Reader FQT Routine

22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(1)

0216 602 0216 603

.SBTTL PT START, Start I/O routine

; al location failure

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-19S4 17:59:27 VAX-11 Macro V03-0l

Page 16

PT_START, Start 1/0 routine

22-AUG-19S4 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(1)

00 64 A5 05 009A C5 20 A3
06 00 36 20 A3
4D 06 00 34 20 A3
4C 06 00 35 20 A3
2E 06 00 33 20 A3
19 06 00 37 20 A3
3A 11 3S A5 lA
6S A5 01 6S A5 0100 SF
11 EF 38 A5 lA 68 A5 0201 8F
04 42 A5 32
51 50 01
42 A5 3S A3 EE
51 42 A5 EA
03 2A A3 01 024C

0216 0216 0216 0216 0216 0216 0216 E4 0216 BO 0218
0221. ED 0221
0224 13 0227 ED 0229
022C 13 022F ED 0231
0234 13 0237 ED 0239
023C 13 023F ED 0241
0244 12 0247 EO 0249 AA 024E AS 0252 11 0258 EO 025A A8 025F 11 0265 BO 0267 04 0268 DO 026D
0270 BO 0276 11 027B 3C 027D 11 0281 El 0283 31 02SS
02SB

605

606

607

Enter here at the start of an I/O operation. The first step

608

is to determine what I/O function code was specified in the

609

$QIO being serviced.

610

611 PT START:

Det. func. req.

612

BBSC

#UCB$V POWER,UCB$W STS(R5),1$

Make sure bit clear

613 1$:

MOVW

IRP$W_FUNC(R3),UCB$W_FUNC(R5)

Allow inhibit of error

614

logging via modifiers

615

CMPZV #IRP$V FCODE,#IRP$S FCODE,-

Look for MODIFY $QIO

616

IRP$W FUNC(R3),#IO$-MODIFY

617

BEQL

10$ -

-

Found if eql

618

CMPZV #IRP$V FCODE,#IRP$S FCODE,-

Look for DEACCESS $QIO

619

IRP$W FUNC(R3),#IO$~DEACCESS

620

BEQL

20$ -

-

Found if eql

621

CMPZV #IRP$V FCODE,#IRP$S FCODE,-

Look for DELETE $010

622

IRP$W FUNC(R3),#IO$-DELETE

623

BEQL

3$ -

-

Found if eql

624

CMPZV #IRP$V FCODE,#IRP$S FCODE,-

Look for CREATE $QIO

625

IRP$W FUNC(R3),#IO$-CREATE

626

BEQL

30$ -

Found if eql

627

CMPZV #IRP$V FCODE,#IRP$S FCODE,-

Look for READPROMPT

628

IRP$W FUNC(R3),#IO$-READPROMPT

$QIO

629

BNEQ

100$ -

-

Read/write if neq

630

BBS

#DEV$V IDV,UCB$L DEVCHAR(R5),2$ Reader? dsable--> set

631 25$:

BICW

#BITO,UCB$W DEVSTS(R5)

Enable function

632

BISW

#BITS,UCB$W-DEVSTS(R5)

Mark enable for read phys.

633

BRB

5$

-

' A11 done

634 30$:

BBS

#DEV$V IDV,UCB$L DEVCHAR(R5),25$; Reader? enable-->clr

635 2$: 636

BISW BRB

#BITO!BIT9,UCB$W-DEVSTS(R5)

5$

-

Disable function All done

637 3$: 638 5$:

MOVW CLRL

#NULL BYTES,UCB$W DEVBUFSIZ(R5) Rl -

Reset# of null bytes No dev. dep. info.

639 7$:

MOVL

#SS$_NORMAL,RO

Successful completion

640

REQCOM

, All done

641 10$:

MOVW

IRP$L MEDIA(R3),UCB$W D~VBUFSIZ(R5) ; Set# null bytes

642

BRB

5$ -

-

; And finish up

643 20$:

MOVZWL UCB$W DEVBUFSIZ(R5),Rl

; Read# null bytes

644

BRB

7$ -

; And finish up

645 100$: BBC

#IRP$V FUNC,IRP$W STS(R3),PT PUNCH ; Write if clear

646

BRW

PR START

-

- ; Otherwise, read func

647

.SBTTL PT=PUNCH, Start a punch operation

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-01

Page 17

PT_PUNCH, Start a punch operation

22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(1)

68 A5 10 78 A5 ~2c A3
78 A5 oc
50 24 A5 54 2C BO 04 A4 0040 SF 08 68 A5 01 OOA8 C5 5C A5
03 0084 68 A5 10
2A 50 20 A3 OB 50 06 00

0288 028B 0288
0288 02S8 028B 028B 0288 02SB 0288 0288
028B 028B 0288 028B 0288 028B 0288 0288
0288 028B 028B
0288 02S8 02S8
0288 0288 0288 0288 0288 028B 028B 0288 02SB 0288
0288 0288 0288 0288 AA 0288 70 028F 0294
co 0294
0298 0298 DO 0298 DO 029C
AS 02.AO E2 02A6 BO 02A6 11 0281 31 0283 83 0286 12 028A BO 028C ED 02CO
02C5

649 ;++

650 PT PUNCH - Start a punch operation

651

652 Functional description:

653

654

The punch interrupt enable bit is set. One character at a

655

time (from the system buffer pointed to by UC8$L SVAPTE) is

656

moved to the punch's data buffer, and an interrupt is awaited.

657

If powerfail occurs, the entire operation is retried (if it is

658

the first $QIO for the user); otherwise, the operation is aborted

659

(unless the powerfail occurs while punching the trailer, in

660

which case the entire trailer may not be punched). In the case

661

of an aborted punch, the high-order word of the first longword

662

in the IOS8 will contain the number of bytes punched before the

663

powerfail occurred (error code= SS$ TAPEPOSLOST).

664

665

A counter is kept on the number of bytes left to be punched

666

(UCB$W BCNT). When this counter goes to zero, the request

667

is complete.

668

669

In the case of a virtual or logical I/O operation

670

a header of UC8$W DEVBUFSIZ nul 1 bytes is punched

671

before the actual-data is punched; similarly a trailer

672

tape (of UCB$W DEV8UFSIZ null bytes) is punched when the

673

channel to the-punch is deassigned/deallocated by the

674

user (in the cancel I/O routine (PT CANCEL)). The user can

675

suppress the defaults and/or punchi;g an EOF byte (cntrl-Z).

676

677 Inputs:

678

R3

- address of the IRP (I/O request packet)

679

R5

- address of the UCB (unit control block)

680 Outputs:

681

RO

- 1st longword of I/0 status: contains status code and

6S2

number of bytes transferred

683

R1

- 2nd longword of I/0 status: device-dependent

684

685

The routine must preserve all registers except RO-R2 and R4.

686

6S7 PT PUNCH:

688 . -

BICW

#END,UCB$W DEVSTS(R5)

; Process an I/O packet ; Not punching trailer

689

MOVQ

IRP$L SVAPfE(R3),UC8$L SVAPTE(R5); Note quad transfer

690

-

-

; for powerfail recovery

691

ADDL2 #BUF OVR HD,UCB$L SVAPTE(R5)

; Skip sys buf header

692 PNCH HOR:

--

-

Trailer punch entry pt

693

- .ENABL LSB

694

MOVL

UCB$L CRB(R5),RO

; Get CRB

695

MOVL

@CR8$L INTD+VEC$L IDB(RO),R4

; Get CSR address

696

8ISW

#PT ST~ M IE,PT P~S(R4)

; Set int. enable bit

697

8BSS

#PUNCH HDR,UCB$W DEVSTS(R5),5$ ; Hdr already pnchd?

698

MOVW

UCB$W REFC(R5),U~~$W MY REFCNT(R5) ; Save reference count

699

BR8

10$ -

--

; No - punch header

700 5$:

BRW

MAINLP

; Punch data

701 10$:

BITW

#ENO,UCB$W DEVSTS(R5)

; Punching trailer?

702

BNEQ

12$

-

; Yes, if neq

703

MOVW

IRP$W FUNC(R3),RO

; Get function code

704

CMPZV $A#IO$v FCODE,SA#IO$S FCODE,RO,-; No header punched for

705

SA#l0$_WRITEPBLK

-

; Physical I/O func.

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-01

Page 18

PT_PUNCH, Start a punch operation

22-AUG-1984 20:06:00 WORK2: [COURSE.DRIVER]PCDRIVER.MAR;(1)

OF 6B A5 0200 BF
04 6B A5 01
0094 68 A5 OD 68 A5 0100 BF
04 68 A5 01 44 A5 42 A5 68 A5 10
1F 68 A5 01
19 44 A5 OOA 7 C5 1 A
39 64 A5 05 06 A4 1A 14
OOA7 C5 00
23 64 A5 05 06 A4 00
0065 44 A5
DF 68 A5 04 68 A5 10
2A 0318
00 68 A5 01 68 A5 10 07 53 58 A5 FF40 008D
68 A5 10 01
00 68 A5 01 OOF5
03 64 A5 03 0152
OOA7 C5 78 85
5E 64 A5 05

12 02C5
83 02C7 13 02CD
AB 02CF 31 02D3 AB 02D6 83 02DA 13 02EO AA 02E2 3C 02E6 83 02EB 13 02EF 83 02F1 13 02F5 D6 02F7 90 02FA
02FF E4 0305 90 030A 11 030E 90 0310
0315 E4 031B 90 0320
0324 032E 032E 032E 31 032E
D7 0331 12 0334 AA 0336 B3 033A 13 033E 31 0340
0343 0343 E4 0346 B3 034B 13 034F DO 0351 31 0355 31 0358 035B B3 0358 13 035F 05 0361 E4 0362 31 0367
036A El 036A 31 036F
0372 90 0379
037F 037F E4 0382

706

BNEQ

11 $

; Not phys. if neq

707

BITW

#BIT9,UCB$W DEVSTS(R5)

70B

BEQL

B$

-

; Want trailer byte? ; No, if eql

709

BISW

#BITO,UCB$W DEVSTS(R5)

; Mark want trailer

710 8$:

BRW

MAINLP

-

; Skip header punching

711 11$:

BISW

#PNCH!BITO!START,UCB$W DEVSTS(R5) ; Set flag bits

712

BITW

#BIT8,UCB$W DEVSTS(R5)-

; No EOF byte?

713

BEQL

12$

-

; No, if eql

714

BICW

#BITO,UCB$W DEVSTS(R5)

; No EOF byte, if neq

715 12$:

MOVZWL UCB$W DEVBUFSIZ(R5),UCB$L DEVDEPEND(R5); Set# nullbytes

716

BITW

#END,TICB$W DEVSTS(R5)

-

; Punching trailer?

717

BEQL

NUL

-

; No, if eql

718

BITW

#BITO,UCB$W DEVSTS(R5)

; Punch EOF byte?

719

BEQL

NUL

-

; No if eql

720

INCL

UCB$L DEVDEPEND(R5)

; One extra byte pnchd.

721 PUNEOF: MOV8

#EOF,TICB$B PT PP8(R5)

722

DSBINT

-

; Save for error log. Raise to powerfail

723

B8SC

#UCB$V POWER,UCB$W STS(R5),20$

Check for powerfail

724

MOV8

#EOF,PT PPB(R4) -

Punch EOF byte

725

BRB

WAIT -

Wait for interrupt

726 NUL:

MOVB

#NULL,UCB$B PT PPB(R5)

Save for err. log.

727 NULLP: DSBINT

No interrupts

72B

BBSC

#UCB$V POWER,tlCB$W STS(R5),20$

Check for powerfail

729

MOVB

#NULL,PT PPB(R4) -

Punch nul 1 byte

730 WAIT: WFIKPCH 25$,#PT TIMEOUT SEC

Wait for I/O comp.

731

732

Enter here after interrupt service routine

733

734

BRW

AFT INT

Check for errors

735 BACK: DECL

UCB$L DEVDEPEND(R5)

Dec null byte count

736

BNEQ

NULLP-

Loop if more to punch

737

BICW

#START, UCB$W DEVSTS(R5)

Clear hdr. punch flag

738

BITW

#END,UCB$W DEVSTS(R5)

Punching header?

739

BEQL

MAIN LP

Yes if eql

740

BRW

INCAN

Returri for trailer

741 20$:

Powerfai l recovery

742

ENBINT

Allow interrupts

743

BBSC

#PUNCH HDR,UCB$W DEVSTS(R5),22$ Clear hdr. pnchd flag

744 22$:

BITW

#END,UCB$W DEVSTS(R5)

Header or trailer?

745

BEQL

23$

-

Header if eql

746

MOVL

UCB$L IRP(R5),R3

Retrieve iRP address

747

BRW

PNCH HOR

Retry punching trailer

748 23$:

BRW

POW_FAIL

Retry punching header

749

after powerfai 1 recov.

750 25$: 751

BITW BEQL

#END,UCB$W DEVSTS(R5)

30$

-

Header or trailer? Header if equal

752

RSB

Return if trailer

753 30$:

BBSC

#PUNCH HDR,UCB$W DEVSTS(R5),35$ Report timeout

754 35$:

BRW

PT TIMEOUT

-

Make sure flag clear

755

.DSABL LSB

756 MAINLP: BBC

#UCB$V CANCEL,UCB$W STS(R5),1$

Check for $CANCEL

757

8RW

CANCEL-

-

$CANCEL if set

758 1$:

DSBINT UCB$B DIPL(R5)

No device interrupts

759

MOVB

@UCB$L SVAPTE(R5),UCB$B PT PPB(R5) ; Save data for err.

760

; log buf. dump routine

761

SETI PL #IPL$ POWER

; Raise to powerfail

762

BBSC

#UCB$V_POWER,UCB$W_STS(R5),PT_RESTART ; Powerfail?

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-01

Page 19

PT_PUNCH, Start a punch operation

22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(l)

06 A4 78 95
OOA4 C5 04 A4
OOA4 C5 0080 SF 66
OOA4 C5 8000 BF 5D
68 A5 04 03
FF74 78 A5 7E A5
AS 04 A4 0040 SF
00 68 A5 07
10 32 A3 50 10 50 01
68 A5 20 51
OF 68 A5 07 53 58 A5
00 68 A5 01 FE92
0287

90 0387 038C 0396 0396 0396
BO 0396 039C 039C
B3 03A2 13 03A~ 83 03AB 12 03B2 83 03B4 13 03B8 31 03BA D6 03BD
03CO B7 03CO 12 03C3 AA 03C5 E3 03CB
03DO 03DO FO 0300 0304 BO 03D6 0309 0309 03D9 03D9 AA 0309 D4 03DO 03DF 03E5 03E5 03E5 03E5 03E5 03E5 03E8 ED 03E8 03EO DO 03ED E4 03Fl 31 03F6 03F9 03F9 03F9 03F9 03F9 03F9 03FC 30 03FC 03FF 03FF 03FF 03FF

763

MOVB

@UCB$L SVAPTE(R5),PT PPB(R4)

Load punch data buffer

764

WFIKPCH PT_TIMEOUT,#PT_TIMEOUT_SEC

10 sec. timeout

765

766

Enter here from interrupt service routine (PT_INTERRUPT)

767

768 AFTINT: MOVW

PT PPS(R4),UCB$W_PT_PPS(R5)

Read CSR (save for

769

error logging later)

770 771

IO FORK BITW

#PT

STS

M READY,UCB$W

PT

PPS(R5);'

Return to fork level Punch ready again?

772

BEQL

PT ERROR -

--

; If so, error

773

BITW

#PT STS M ERROR,UCB$W PT PPS(R5); Error during punch?

774

BNEQ

PT ERROR -

--

Yes, report it

775

BITW

#START,UCB$W DEVSTS(R5)

776

BEQL

10$

-

Punching user data? Yes, if eql

777

BRW

BACK

Punching header/tralr

778 10$:

INCL

UCB$L SVAPTE(R5)

Point to next byte to

779

be punched

780

OECW

UCB$W BCNT(R5)

Decrement byte count

781

BNEQ

MAINLP

Al 1 done?

782

BICW

#PT STS M IE,PT PPS(R4)

, Clear int. enable bit

783

BBCS

#STARTING~UCB$W-DEVSTS(R5),FINISH ; Punched >= 1 aper.

784 ; After a transfer completes successfully, return the number of bytes

785 ; transferred and a success status code.

786 FINISH: INSV

IRP$W BCNT(R3),#16,-

Load number of bytes trans-

787

#16,RO

ferred into high word of RO.

788

MOVW

#SS$_NORMAL,RO

Load a success code into RO.

789

790 Call I/0 postprocessing.

791

792 COMPLETE IO:

, Driver processing is finished.

793

BICW

#RD HDR,UCB$W DEVSTS(R5); Make sure reader flag clear

794

CLRL

Rl

-

: No device dependent information

795

REQCOM

Complete 1/0.

796

797

Recover from powerfail by retrying entire operation (for punch).

798

If powerfai 1 occurred on first $QIO request from user.

799

800 PT RESTART:

; Powerfail entry point

801

ENBINT

; Allow interrupts (POP IPL)

802 POW FAIL:

803

-

BBS

; Enter after timeout #STARTING,UCB$W DEVSTS(R5),POWER FAIL ; No recovery if

804

-

; not punching 1st rec.

805

MOVL

UCB$L IRP(R5),R3

; Retrieve IRP address

806

BBSC

#PUNCH HDR,UCB$W DEVSTS(R5),1$ ; Clear header punched bit

807 1$:

BRW

PT PUNCH

-

; And retry operation

808

No recovery,possible from reader powerfail; tell user how many

809

bytes read before powerfail occurred. Also, no recovery from

810

punch if not punching 1st $QIO request for this user. Tell user

811

how many bytes were punched before powerfail occurred.

812 PR POWFAIL:

; Powerfail entry point

813

ENBINT

; Al low interrupts (POP IPL)

814 POWER FAIL:

; Enter after timeout

815

BSBW

SETOFF

; Clear int. enable bit

816

Note that a BSB-RSB sequence can be used since

817

the subroutine wil 1 not cal 1 any system macros

818

or routines (which would cause unpredictable

819

results when control would be returned to the

PCDRIVER V06
32 A3 7E A5 50 10 10 32 A3
50 0224 SF CB
0272 OOOOOOOO'GF 50 OOBC SF 32 A3 7E A5 50 10· 10 32 A3
AD
0257 32 A3 7E A5 50 10 10 32 A3
50 OB70 BF 00 6B A5 01
FF92 50 OOOOOB70 BF
FF88
A2 64 A5 05 11
FFB9
3S 3S A5 1A EF 64 A5 05 52 64 A5 03 29 38 A5 16 BO 68 A5 07 0099 OOA6 C5 01 OF
OOA6 C5 1S
54 00'8F 53 OOOOOOOO'GF
OOOOOOOO'GF

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-19B4 17:59:27 VAX-11 Macro V03-0l

Page 20

PT_PUNCH, Start a punch operation

22-AUG-1984 20:-06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(1)

03FF
A2 03FF FO 0404 BO D40A 11 040F
0411
0411 0411
0411 0411 30 04.11 16 0414 3C 041A A2 D41F FO D424 11 042A 042C 042C 042C 042C 042C 042C 042C
042C 042C 30 042C A2 042F
FD 0434 BO 043A E3 043F
0444 0444 31 0444 DO 0447 31 044E 0451 0451 0451 0451 0451 D451 E4 0455 11 045A 31 045C 045F 045F ED 0463 E4 D46B EO 0460 EO 0472 EO 0477
9D 047C 94 0484 BB 0488 9A 048A 9E 048E 16 0495

82D

caller's caller)

821

SUBW2 UCB$W BCNT(R5),IRP$W BCNT(R3)

Record bytes read/pun.

822

INSV

IRP$W-BCNT(R3),#16,#l6,RO

For status return

823

MOVW

#SS$ TAPEPOSLOST,RD

B24

BRB

COMPLETE IO

Return status Complete I/O

825

826

Device error has occurred

signal via SS$_DRVERR

827

error code

828 829

P' T

ERROR:

Error handling

830

BSBW

SETOFF

; Clear interrupt enable bit

831

JSB

GAERL$DEVICERR

; Report device error

832

MOVZWL #SS$ DRVERR,RD

; Return error status

B33

SUBW2 UCB$W BCNT(R5),IRP$W BCNT(R3) ; Record bytes read/pun.

834

INSV

IRP$W-BCNT(R3),#16,#l6,RD

; For status return

835

BRB

COMPLETE IO

; Cal 1 I/O postprocessing

836

837

Assume that "no more tape in reader" is error generated, and

838

tell user how many bytes were read before error was encountered

839

in case P2 parameter specified more bytes than were read.

840

841 PR SPERR:

Entered if no tape in reader,

842

reader off-line after at least

843

one previous character read,

844

or no power to reader

845

BSBW

SETOFF

Clear int. enable bit

846

SUBW2 UCB$W BCNT(R5),IRP$W BCNT(R3)

Store num bytes read

847

INSV

IRP$W-BCNT(R3),#16,#l6,RO

In return status

84B

MOVW

#SS$ ENDOFFILE,RD

Set return status code

849

BBCS

#PUNCH_HDR,UCB$W_DEVSTS(R5),DON Special case for $COPY

85D

so that reading will end on end

B51

of file (COPY issues 2nd read)

B52 DON:

BRW

COMPLETE IO

Complete I/O

B53 COPY: MOVL

#SS$ ENDOFFILE,RD

Fudge return to COPY

B54

BRW

COMPLETE IO

Finish operation

855

856 Device timeout handling. Return an error status code for punch.

B57 Send message to operator, and loop until reader is set Online.

858 B59

P' R

TIMEOUT:

B6D -

SETI PL UCB$B FIPL(R5)

; Timeout handling ; Lower to fork first

B61

BBSC

#UCB$V POWER,UCB$W STS(R5),POWER FAiL ; Powerfail?

B62

BRB

COMMON-

-

; Enter common timeout code

B63 SKIP2: BRW

POW FAIL

; Handle powerfail

864 PT TIMEOUT:

; Timeout handling

865

SETI PL UCB$B FIPL(R5)

; Lower to fork first

866

BBS

#DEV$V IDV,UCB$L DEVCHAR(R5),PUN OT ; Reader timeout?

867

BBSC

#UCB$V-POWER,UCB$W STS(R5),SKIP2; Powerfail?

868 COMMON: BBS

#UC8$V-CANCEL,UC8$W STS(R5),CANCEL ; Cancel I/O?

B69

BBS

#DEV$V-ODV,UCB$L DEVCHAR(R5),PUN OT ; Punch timeout?

870

BBS

#STARTING,UCB$W DEVSTS(R5),PR SPERR ; Reader EOF err?

871

ACBB

#LOOP CNT,#1,UCB$B PT OFLCNT(R5),MAIN ; Rdr-wait 30 sec.

872

CLRB

UCB$B-PT OFLCNT(R5) -

873

PUSHR #AM<R~.R~>

; Clear off-line counter ; Save registers

874

MOVZBL #MSG$ DEVOFFLIN,R4

; Set message type

·975

MOVAB GASYS$GL OPRMBX,R3

; Get opr. mbx. address

876

JSB

GAEXE$SNDEVMSG

; Send rnsg. to opr.

PCORIVER V06
so so

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-01

Page 21

PT PUNCH, Start a punch operation

22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(1)

18 0070
03 64 AS OS FFS4 0108
OOOOOOOO'GF SO 022C SF 32 A3 7E AS 10 10 32 A3
FFlS 32 A3 7E AS 10 10 32 A3
so 0830 SF
FF02

BA 0498 31 0490
04AO
04AO 04AO 04AO 04AO 04AO 04AO 04AO 04AO 04AO 04AO 04AO 04AO
E5 04AO 31 04A5 30 04AS 16 04A8 3C 0481 A2 0486 FO 0488 31 04Cl
04C4 A2 04C4 FO 04C9 BO 04CF 31 0404
0407

877

POPR

#AM<R3,R4>

Restore registers

87S

BRW

MAIN

Try again

879

880

Note that the punch is always assumed to be on-line, and

881

an error is recorded if it is not. Also, the I/O request

882

is terminated with an error code. (There is no on/off switch

8S3

for the punch unit on the PC11). The reader does have an

884

on/off switch, and the I/0 operation is retried until the

8S5

reader unit is set on-line, with a message being sent to

8S6

the operator's mailbox (console) every 30 seconds informing

887

the operator that the paper-tape reader (PCO:) is off-line.

888

If an error occurs after some data has been read, it is

889

assumed that the error is "no more tape in reader" rather

890

than "reader is off-1 ine".

891 892

P' UN

OT:

BBCC

#UCB$V POWER,UCB$W STS(R5),1$ ; Reader powerfail?

893

BRW

POWER FAIL

-

; Yes, go report powerfail

894 1$:

BSBW

SETOFF

; Clear interrupt enable bit

89S

JSB

GAERL$DEVICTMO

; Report timeout error

896

MOVZWL #SS$ TIMEOUT,RO

; Return error status.

897

SUBW2 UCB$W BCNT(R5),IRP$W BCNT(R3) ; Record bytes read/pun.

898

INSV

IRP$W-BCNT(R3),#16,#l6,RO

; For status return

899

BRW

COMPLETE IO

; Call I/O postprocessing.

900 CANCEL:

-

; Handle cancel I/0

901

SUBW2 UCB$W BCNT(R5),IRP$W BCNT(R3) ; Num bytes read/punch

902

INSV

IRP$W-BCNT(R3),#16,#l6,RO

; In return status

903

MOVW

#SS$ CANCEL,RO

Return cancel error status

904

BRW

COMP[ETE IO

Call I/O postprocessing

905

.SBTTL PR START~ Start I/O rout ne (Reader)

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-0l

Page 22

PR START, Start 1/0 routine (Reader)

22-AUG-1984 20:06:00 WORK2: [COURSE.DRIVER)PCDRIVER.MAR;(l)

03 6S A5 01 FF6S
78 A5 2C B3 7E A5 32 A3
OOA6 C5 50 20 A3 27 6S A5 06 OOAS C5 5C A5
06 00
oc 50
OE 6S A5 20 6S A5 0200 BF
OE OS 6S A5 0100 SF 04 68 A5 01
50 24 A5 54 2C BO 64 8000 BF
12
D8

04D7 04D7 04D7
04D7 04D7 04D7 04D7 04D7 04D7 04D7 0407
0407 04D7 04D7
04D7 0407 04D7 04D7 04D7 04D7 0407 04D7 04D7 04D7 0407
04D7
04D7 04D7
0407 0407 04D7 E5 04D7 31 04DC DO 04DF DO 04E4 94 04E9 BO 04ED E2 04Fl BO 04F6 ED 04FC 04FF 13 0501 AB 0503 93 0507 13 050D 11 050F 93 0511 12 0517 AS 0519 0510 DO 0524 DO 0528 B3 052C 13 0531
0533 053D 11 0543

907 ;++

90S PR START - Start a reader operation

909

910 Functional description:

911

912

One character at a time (from the system buffer pointed to

913

by UCB$L SVAPTE) is moved to the reader's data buffer. The

914

interrupt enable bit is then set, after which powerfail is

915

tested for, and an interrupt is awaited. (If powerfail

916

occurs, the entire operation is aborted.)

917

918

A counter is kept on the number of bytes left to be read

919

(UCB$W BCNT). When this counter goes to zero, the request

920

is complete. The request is also considered complete when an

921

EOF byte is read, if looking for EOF bytes is enabled.

922

923

Before the first character is read (in a virtual or

924

logical I/O operation), the tape is first scanned for

925

the first non-null character (i.e. the header part of

926

the tape is skipped). In the case of a physical I/O

927

function, the header nul 1 bytes are considered data.

928 Inputs:

929

R3

- address of the IRP (I/O request packet)

930

R5

- address of the UCB (unit control block)

931 Outputs:

932

RO

- 1st longword of I/0 status: contains status code and

933

number of bytes transferred

934

Rl

- 2nd longword of I/O status: device-dependent

935

The routine must preserve al 1 registers except RO-R2 and R4.

936

937 PR START:

; Process ~n I/O packet

93S 939

BBCC BRW

#PUNCH HDR,UCB$W DEVSTS(R5),1$ ; Special case for $COPY?

COPY -

~

; Yes, if bit set

940 1$:

MOVL

@IRP$L SVAPTE(R3),UCB$L SVAPTE(R5); Get buffer address

941

MOVL

IRP$W BCNT(R3),UCB$W BCNT(R5) ; Byte count, and offset

942

CLRB

UCB$B-PT OFLCNT(R5) -

; Clear off-line counter

943

MOVW

IRP$W-FUNC(R3),RO

; Get function code

944

BBSS

#FRST-QIO,UCB$W DEVSTS(R5),MAIN ; First $010?

945

MOVW

UCB$W-REFC(R5),UCB$W MY REFCNT(R5) ; Save reference count

946

CMPZV SA#IO$v FCODE,SA#IO$S FCODE,- ; No header read if

947

R0,SA#IO$ READPBLK

; Phys. I/O operation

948

BEQL

FIX

-

; Continue processing

949

BISW

#RD HDR,UCB$W DEVSTS(R5)

; Update default flags

950

BITW

#BIT9,UC8$W DEVSTS(R5)

; Disable EOF search?

951

BEQL

MAIN

; No, if eql

952

BRB

DSABL

; Yes, if neq

953 FIX: 954

BITW BNEQ

#BITS,UCB$W DEVSTS(R5)

MAIN

~

; Look for EOF bytes? ; Look for EOF bytes if eql

955 DSABL: BISW

#BITO,UCB$W DEVST$(R5)

; Update default

956 MAIN: DSBINT UCB$B DIPL(R5)

; No device interrupts

957

MOVL

UCB$L-CRB(R5),RO

; Get CRB

958

MOVL

@CRB$L INTD+VEC$L IDB(RO),R4

; Get CSR address

959

BITW

#PT CSR M ERROR,PT PRS(R4)

; Reader on-line?

960

BEQL

READ - -

-

; If eql, yes

961

WFIKPCH PR TIMEOUT,#SHORT WAIT

; No, see if now on

962

IO FORK

; Lower to fork IPL

963

BRB

MAIN

: Check if on-1 ine

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-01

Page 23

PR START, Start I/O routine (Reader)

22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(1)

02 64 A5 05 03
FEA7 41 SF
64
OOA4 C5 64
OOA7 C5 02 A4
OOA4 C5 8000 8F 6S
OOA4 C5 OSOO SF 5C
OOA4 C5 OOSO SF 53
00 68 A5 07 6S A5 20 OB
OOA7 C5 00 2A
6S A5 20 6S A5 01
OA OOA7 C5 1A
03 FE7A 78 B5 OOA7 C5 7S A5
7E A5 12
03 64 A5 03 FEFC
FF73 64 0040 8F 00 6S A5 07
FDF1 FE2F 03 68 A5 07
FE42
FEBO

0545 E4 0548 11 0540 31 054F 9B 0552
0555 0556 0560 BO 0560
056~
90 0565 0568 056B
B3 0571 12 0578 83 057A 12 0581 83 0583 13 058A E3 058C 83 0591 13 0595 91 0597 13 059C AA 059E 63 05A2 12 05A6 91 05A8 12 05AO 31 05AF 90 05B2 06 05BS
05BB 87 05BB 13 05BE E 1 05CO 31 05C5
05C8 31 05CF AA 0502 E4 0507 31 05DC 31 050F E1 05E2
05E7 31 05E7
05EA 31 05EA
05ED

964 READ: 965 966 967 30$: 968 GO: 969 970 971 972 973 974 975 976 977 978 979 9SO 9S1 9S2 9S3 9S4 5$: 985 986 987 988 989 10$: 990 991 992 993 994 13$: 995 996 997 99S 999 1000 1001 15$: 1002 1003 25$: 1004 1005 30$: 1006 SKIP: 1007 SKI Pl: 100S 1009 1010 1011 40$: 1012

SETI PL #IPL$ POWER

Raise to powerfail

BBSC BRB

#UCB$V POWER,UCB$W STS(R5),30$

GO

-

-

Powerfa i 1? No, try operation

BRW

PR POWFAIL

Ves--abort operation

MOVZBW #PT CSR M IE!PT CSR M RDENA,-

Start reader and

PT PRS(R4)

--

Enable reader int.

WFIKPCH PT-TIMEOUT,#PT TIMEOUT SEC

; 10 sec. timeout

Enter here-from interrupt service routine (PR INTERRUPT)

MOVW

PT PRS(R4),UCB$W PT_PPS(R5)

Read CSR (and store

for error logging)

MOVB

PT PRB(R4),UCB$B PT PPB(R5)

Get data read (also

keep for err. log.)

IO FORK

Lower IPL

BITW BNEQ

#PT CSR M ERROR,UCB$W PT PPS(R5); Error during read?

SKIP1 - -

--

Yes, special case

BITW BNEQ

#PT CSR M BUSV,UCB$W PT PPS(R5)

SKIP - -

--

Busy bit set? If so, error

BITW BEQL

#PT CSR M DONE,UCB$W PT PPS(R5)

SKIP - -

--

Done bit set? If not, error

BBCS

#STARTING,UCB$W DEVSTS(R5),5$

Read >= 1 char.

BITW BEQL

#RD HDR,UCB$W DEVSTS(RS)

10$-

-

Reading tape header? No, if eql

CMPB

#NULL,UCB$B PT PPB(RS)

See if null byte

BEQL

15$

If eq l , null

BICW

#RD HDR,UCB$W OEVSTS(R5)

Not reading header now

BITW

#BITO,UCB$W OEVSTS(R5)

Looking for EOF byte?

BNEQ

13$

-

No, if neq

CMPB

#EOF,UCB$B PT PPB(R5)

EOF byte found?

BNEQ

13$

No, if neq

BRW

PR SPERR

Report EOF condition

MOVB INCL

UCB$B PT PPB(R5);@UCB$L SVAPTE(R5) ; Record data read

UC~$L=SVAPTE(R5)

Point to where next

byte is to be read

OECW BEQL

UCB$W BCNT(R5) 25$ -

Decrement byte count All done?

BBC

#UCB$V CANCEL,UCB$W STS(R5),15$ Check for $CANCEL

BRW

CANCEL-

-

$CANCEL if set

DSBINT UCB$B DIPL(R5)

BRW

READ -

Put IPL on stack Read next character

BICW BBSC

#PT CSR M IE,PT PRS(R4)
#STARTING~UCB$W-DEVSTS(R5),30$

Clear int. enable bit Clear bit for next $QIO

BRW

FINI SH

-

And finish up

BRW

PT ERROR

Need word offsets

BBC

#STARTING,UCB$W_DEVSTS(R5),40$

Retry if assume

reader off-1 ine

BRW

PR SPERR

Otherwise, assume

no more tape in reader

BRW

COMMON

, Need word offset

.SBTTL PT INTERRUPT, Interrupt service routine

PCDRIVER V06

53 9E
55 lC A3 07
53 9E 55 lB A3
54 63 01
64 A5 07
53 10 A5 QC B5
50 BE 52 BE 54 8E

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-0l

Page 24

PT_INTERRUPT, Interrupt service routine 22-AUG-19B4 20:06:00 WORK2:[COURSE.DRIVER)PCDRIVER.MAR;(l)

05ED 1014 ;++

05ED 1015 PT_INTERRUPT, Analyzes interrupts, processes solicited interrupts

05ED 1016

05ED 1017 Functional description:

05ED 101B

05ED 1019

This driver is for a multiple-unit controller, and the

05ED 1020

two interrupt service routines (PR INTERRUPT and PT INTERRUPT)

05ED 1021

are used to distinguish which unit-caused the interrupt.

05ED 1022

Common checking for solicited interrupts occurs after

05ED 1023

entry point INTCOM, where control is returned back to the

05ED 1024

driver after the appropriate WFIKPCH macro.

05ED 1025

05ED 1026 Inputs:

05ED 1027

05ED 1028

O(SP) - pointer to the address of the IDB

05ED 1029

4(SP) - saved RO

05ED 1030

8(SP) - saved R1

05ED 1031

12(SP) - saved R2

05ED 1032

16(SP) - saved R3

05ED 1033

20(SP) - saved R4

05ED 1034

24(SP) - saved R5

05ED 1035

28(SP) - saved PSL (program status longword)

05ED 1036

32(SP) - saved PC

05ED 1037

05ED 103B

The IDB contains the CSR address and the UCB address.

05ED 1039

05ED 1040 Outputs:

05ED 1041

05ED 1042

The routine must preserve al 1 registers except RO-R5.

05ED 1043

05ED 1044

05ED 1045 PT INTERRUPT:

DO 05ED 1046 ~

MOVL

@(SP)+,R3

Service punch interrupt Get address of IDB and remove

05FO 1047

pointer from stack.

DO 05FO 104B

MOVL

IDB$L UCBLST+4(R3),R5

Punch is unit# 1 (PC1:)

11 05F4 1049

BRB

INT COM

Go to common code

05F6 1050 PR INTERRUPT:

Service reader interrupt

DO 05F6 1051

MOVL

@(SP)+,R3

Get IDB address

DO 05F9 1052

MOVL

IDB$L UCBLST(R3),R5

Reader is unit# 0 (PCO:)

DO 05FD 1053 INTCOM: MOVL

IDB$L-CSR(R3) ,R4

Get CSR address

E5 0600 1054

BBCC

#UCB$V INT,-

If device does not expect

0602 1055

UCB$W STS(R5),-

interrupt, dismiss it.

0604 1056

UNSOL=INTERRUPT

0605 1057 ; This is a solicited interrupt. Restore control to the main driver.

0605 1058 RESTORE DRIVER:

Jump to main driver code.

DO 0605 1059

MOVL

UCB$L FR3(R5),R3

Restore driver's R3

16 0609 1060

JSB

@UCB$L FPC(R5)

Cal 1 driver at interrupt

060C 1061

wait address.

060C 1062 , Dismiss the interrupt.

060C 1063 UNSOL INTERRUPT:

Dismiss unsolicited interrupt.

70 060C 1064

MOVQ

(SP)+ , R0

Restore RO-R5

7D 060F 1065

MOVQ

(SP)+,R2

This is faster than a

7D 0612 1066

MOVQ

(SP)+,R4

POPR #AM<RO,Rl ,R2,R3,R4,R5>

02 0615 1067

REI

, Return from interrupt.

0616 106B

.SBTTL PT CANCEL, Cancel I/O routine

PCDRIVER V06

OOA8 C5

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-01

Page 25

PT_CANCEL, Cancel I/O routine

22-AUG-1984 20:06:00 WORK2:[GOURSE.DRIVER]PCDRIVER.MAR;(1)

5C A5 50

0616 1070

0616 1071 ;++

0616 1072 PT CANCEL, Cancels an I/O operation in progress

0616 1073

0616 1074 Functional description:

0616 1075

0616 1076

This routine tests to see if the punch is being deallocated

0616 1077

or deassigned by checking the reference count field in the

0616 1078

UCB. It checks to see if a trailer needs to be punched,

0616 1079

and if so, then a trailer is punched (possibly with an

0616 1080

EOF byte). Also, regardless of whether a

0616 1081

header has been punched, the default number of null bytes to

0616 1082

punch in a header/trailer is restored to NULL BYTES. The

0616 1083

flag indicating that a header has not been punched is cleared

0616 1084

for the next I/O operation, as is the bit indicating that

0616 1085

the current $010 is the first $010 for the user (since the

0616 1086

channel was assigned to the device). Other flags are

0616 1087

reset to their initial state for the next user.

0616 1088

0616 1089

This routine calls IOC$CANCELIO to set the cancel bit in the

0616 1090

UCB status word if:

0616 1091

0616 1092

the device is busy,

0616 1093

the IRP's process ID matches the cancel process ID,

0616 1094

the !RP channel matches the cancel channel.

0616 1095

0616 1096

The routine then does device-dependent cancel I/O fixups by

0616 1097

ciearing the interrupt enable bit for either the reader or

0616 1098

the punch, as appropriate.

0616 1099

0616 1100 Inputs:

0616 1101

0616 1102

R2

- negated value of the channel index number

0616 1103

R3

- address of the current !RP (I/O request packet)

0616 1104

R4

- address of the PCB (process control block) for the

0616 1105

process canceling I/O

0616 1106

R5

- address of the UCB (unit control block)

0616 1107

0616 1108 Outputs:

0616 1109

0616 1110

The routine must preserve all registers except RO-R3.

0616 1111

0616 1112

The routine sets the UCB$M_CANCEL bit in UCB$W STS.

0616 1113

0616 1114

The routine restores UCB fields to their original state.

0616 1115

0616 1116

0616 1117

0616 1118 PT CANCEL:

; Cancel an I/O operation

0616 1119

.ENABL LSB

81 0616 1120

CMPW

UCB$W REFC(R5),UCB$W MY REFCNT(R5) ; Deal or deassgn?

13 061C 1121

BEQL

10$ -

- -; No, if eql

061E 1122

Note that the count is not decremented ..

061E 1123

Therefore the user will not get two

061E 1124

trailers if he allocates the device and

061E 1125

assigns a channel; the deal locate will not

061E 1126

match the count field (like a $CANCEL).

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-0l

Page 26

PT_CANCEL, Cancel I/O routine

22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(l)

OOAO C5 54 00 6B A5 06
6B A5 OB 24
34 38 A5 lA 68 A5 01 2E 44 A5 01 68 A5 14 50 24 A5 54 2C BO
04 A4 0040 8F FCA8
68 A5 14 00 68 A5 01
FC3A 68 A5 08 54 OOAO C5 00 68 A5 01 68 A5 0311 BF 42 A5 32 00 6B A5 07 OOOOOOOO'GF 1A 64 A5 03
51 24 A5 51 2C Bl 08 38 A5 1A 04 A1 0040 BF
05 61 0040 BF

DO 061E 1127

MOVL

R4,UCB$L SAV R4(R5)

; Save R4 since not CSR

E4 0623 112B

BBSC

#FRST QIO,UCB$W DEVSTS(R5),3$ ; Clear read header bit

B3 0628 1129 3$:

BITW

#PNCH:ucB$W DEVSTS(R5) ; Trailer needed?

12 062C 1130

BNEQ

4$

-

; Yes, if neq

EO 062E 1131

BBS

#DEV$V IDV,UCB$L DEVCHAR(R5),8$ ; Reader?, go away

B3 0633 1132

BITW

#BITO,UCB$W DEVSTS(R5) ; User want EOF byte?

13 0637 1133

BEQL

8$

-

; No, if eql

9A 0639 1134

MOVZBL #l,UCB$L DEVDEPEND(R5) ; Punching only EOF byte

A8 063D 1135

BISW

#END!START,UCB$W DEVSTS(R5) ; Flag punching trailer tape

DO 0641 1136

MOVL

UCB$L CRB(R5),RO-

; Get CRB

DO 0645 1137

MOVL

@CRB$L INTD+VEC$L IDB(RO),R4

; Get CSR address

AB 0649 1138

BISW

#PT STS M IE,PT PPS(R4)

; Set int. enable bit

31 064F 1139

BRW

PUNEOF - -

-

; Punch EOF byte

AB 0652 1140 4$:

BISW

#END!START,UCB$W DEVSTS(R5)

; Flag punching trailer tape

E4 0656 1141

BBSC

#PUNCH HDR,UCB$W-DEVSTS(R5),5$ ; Enable trailer punching

31 065B 1142 5$:

BRW

PNCH HOR

-

; Punch trailer tape

AA 065E 1143 INCAN: BICW

#PNCH,UCB$W DEVSTS(R5) ; Clear flag for next operation

DO 0662 1144

MOVL

UCB$L SAV R4(R5),R4

; Restore R4 if changed

E4 0667 1145 8$:

BBSC

#PUNCH HDR,UCB$W DEVSTS(R5),9$ ; Clear for next op.

AA 066C 1146 9$:

BICW

#BITO!BIT8!BIT9!END,UCB$W DEVSTS(R5) ; Clear for next user

BO 0672 1147

MOVW

#NULL BYTES,UCB$W DEVBUFSIZ(R5) ; Restore def nul lbytes

E4 0676 114B

BBSC

#STARTING,UCB$W DEVSTS(R5),10$ ; Clear for next oper.

16 067B 1149 10$:

JSB

GAIOC$CANCELIO -

; Set cancel bit if appropriate.

El 0681 1150 0686 1151

BBC

#UCB$V CANCEL,UCB$W STS(R5),0KAY ; If clear, return

.DSABL LSB -

-

0686 1152

0686 1153

0686 1154 Device-dependent cancel operations go next. The appropriate int. ena.

0686 1155 bit is cleared. This subroutine is cal led from several timeout and

06B6 1156 po\'.-'erfai l recovery routines; it must be very careful NOT to issue

0686 1157 a macro (or call on a system routine) that returns control to the

0686 115B caller's caller (since the stack contains "local" return info).

0686 1159

DO 0686 1160 SETOFF: MOVL

UCB$L CRB(R5),R1

; Get address of CRB

DO 068A 1161

MOVL

@CRB$L INTO+VEC$L IDB(Rl),R1

; Get address of CSR

EO 068E 1162

BBS

#OEV$V-IDV,UCB$L DEVCHAR(R5),5$ ; Test for reader

AA 0693 1163

BICW

#PT STS M IE,PT PPS(Rl) Turn off punch int. ena. bit

11 0699 1164

BRB

OKAY - -

-

And finish up

AA 069B 1165 5$:

BICW

#PT_CSR M IE,PT PRS(Rl) Turn off reader int. ena. bit

06AO 1166 OKAY:

05 06AO 1167

RSB

; Return

06Al 1168

.SBTTL PT REG DUMP, Device regis~er dump routine

PCDRIVER V06

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-01

Page 27

PT REG_DUMP, Device register dump routin 22-AUG-1984 20:06:00 WORK2: [COURSE.DRIVER]PCDRIVER.MAR;(l)

06A1 1170

06A1 1171 ;++

06A1 1172 PT REG_DUMP, Dumps the contents of device registers to a buffer

06A1 1173

06A1 1174 Functional description:

06A1 1175

06A1 1176

Writes the number of device registers, and their current

06A1 1177

contents into a diagnostic or error buffer. Reader and

06A1 1178

punch both have two registers (a status register, and a

06A1 1179

data register).

06A1 1180

06A1 1181 Inputs:

06A1 1182

06A1 1183

RO

- address of the output buffer

06A1 1184

R4

- address of the CSR (controller status register)

06A1 1185

R5

- address of the UCB (unit control block)

06A1 1186

06A1 1187 Outputs:

06A1 1188

06A1 1189

The routine must preserve all registers except Rl-R3.

06A1 1190

06Al 1191

The output buffer contains the current contents of the device

06A1 1192

registers. RO contains the address of the next empty longword in

06A1 1193

the output buffer.

06A1 1194

06A1 1195

06A1 1196

06A1 1197 PT REG DUMP: 80 02 9A 06A1 1198 - - MOVZBL #PT NUM REGS,(RO)+

Dump device registers Store device register count

80 OOA4 C5 3C 06A4 1199 80 OOA7 C5 9A 06A9 1200

MOVZWL UCB$W PT PPS(R5),(RO)+ MOVZBL UCB$B-PT-PPB(R5),(RO)+

Store status register Store data register

05 06AE 1201

RSB

Return

06AF 1202

06AF 1203 ;++

06AF 1204 ; Label that marks the end of the driver

06AF 1205

06AF 1206

06AF 1207 PT END:

Last location in driver

06AF 1208

.END

PCDRIVER Symbol table
$$$ $$OP ACP FDT AFTINT AT$ UBA BACK BITO BITS BIT9 BUF OVR HD CANCEL -
COMMON COMPLETE IO COPY CRB$L INTO CRB$L-INTD2 DDB$L-DDT DEV$M-AVL DEV$M-ELG DEV$M-IDV DEV$M-ODV DEV$M-REC DEV$V-IDV DEV$V-ODV DON DPT$C LENGTH DPT$C-VERS ION DPT$INITAB DPT$REINITAB DPT$TAB DSABL OVN$C CRB DVN$C-DDB DVN$C-DPT DVN$C-UCB
EMB$L:=ov_REGSAV END EOF ERBFSIZE ERL$DEVICERR ERL$DEVICTMO EXE$ABORTI 0 EXE$ALLOCBUF EXE$BUFFRQUOTA EXE$FINISHIOC EXE$IOFORK EXE$QIOACPPKT EXE$QIODRVPKT EXE$READCHK EXE$SNDEVMSG EXE$WRITECHK FIN I SH FIX FOR PNCH FRST QIO FUNCTAB LEN GO

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-01

Page 28

22-AUG-1984 20:06:00 WORK2:[COURSE.DRIVER]PCDRIVER.MAR;(1)

= =

00000020 00000002

R

02

00000147 R

03

= 00000396 R 00000001

03

00000331 R

03

= 00000001

= 00000100

= 00000200

= 0000000~

000004C4 R

03

0000046D R

03

000003D9 R

03

00000447 R

03

= 00000024

== 00000048 oooooooc
= 00040000

= 00400000
= 04000000 = 08000000 = 00000001 = OOOOOOlA

= 00000018

00000444 R

03

= 00000038
= 00000004

00000038 R

02

00000059 R

02

00000000 R

02

= =

00000519 00000005 00000006

R

03

== 0000001E 00000010
= 0000004E = 00000010 = 0000001A = oooooooc
******** x 03 ******** x 03 ******** x 03 ******** x 03 ******** x 03 ******** x 03

******** x 03

******** x 03

******** x 03

******** x 03

******** ********

x x

03 03

000003DO R

03

00000511 R

03

00000183 R

03

= 00000006

= 00000064

00000552 R

03

IDB$L CSR IDB$L=UCBLST INCAN INTCOM IO$S FCODE IO$V-FCODE
IO$ ACPCONTROL IO$-CREATE 10$-DEACCESS IO$-DELETE 10$-MODlFY IO$-MOUNT IO$-READLBLK !0$-READPBLK I0$-READPROMPT I0$-READVBLK IO$-VIRTUAL !0$-WR ITELBLK 10$-WRITEOF 10$-WRITEPBLK 10$-WRITEVBLK
I oc$CANCELI 0 IOC$MNTVER IOC$REQCOM IOC$RETURN IOC$WFIKPCH IPL$ POWER IPL$-SYNCH
IRP$L MEDIA IRP$L-SVAPTE IRP$S-FCODE IRP$V-FCODE IRP$V-FUNC IRP$W-BCNT IRP$W-BOFF IRP$W-FUNC IRP$W-STS JIB$L-BVTCNT
LOOP CNT MAIN MAIN LP MASKH MAS KL MSG$ DEVOFFLIN MY CLASS MY-TYPE NO-PR IV NT-MNT NT-WRT
NUL NULL NULLP NULL BYTES OKAY p 1
P2
P3

= =

00000000 00000018

0000065E R

03

000005FD R
= 00000006 = 00000000

03

= 00000038

= 00000033

= =

.00000034 00000035

= 00000036

= 00000039

= 00000021

= =

oooooooc 00000037

== 00000031 0000003F
= 00000020 = 00000028

= =

OOOOOOOB 00000030

******** x 03

******** x 03

******** x 03

******** x 03

=

********
0000001F

x

03

= 00000008

= 00000038

= 0000002C

= =

00000006 00000000

= 00000001

= 00000032

= = = = =

00000030 00000020 0000002A 00000020 OOOOOOOF

00000510 R

03

0000036A R

03

= OOBBOOOO

= 00000000

=

********
00000064

x

03

= 00000064

0000015C R

03

00000157 R

03

00000177 R

03

00000310 R

03

= 00000000

00000315 R

03

= 00000032

= 000006AO R 00000000

03

= 00000004

= 00000008

PCDRIVER Symbol table
P4 P5 P6 PC$DDT PCB$L JIB PCB$Q=PRIV PNCH PNCH HOR POWER FAIL POW FAIL PR$-IPL
PRV$V MOUNT PR FDT ROUT! NE PR-INTERRUPT PR-POWFAIL PR-SPERR PR-START PR-TIMEOUT
PT=CANCEL PT CONTROL INIT PT-CSR M BUSY PT-CSR-M-DONE PT-CSR-M-ERROR PT-CSR-M-IE PT-CSR-M-RDENA PT-END- -
PT-ERROR PT-FDT ROUTINE PT-FUNCTABLE PT-INTERRUPT PT-NUM REGS PT-PPB-
PT-PPS PT-PRB PT-PRS PT-PUNCH PT-REG DUMP PT-RESTART PT-:- START PT-STS M ERROR PT-STS-M-IE PT-STS-M-READY
PT-TIMEOUT PT-TIMEOUT SEC PT-UNIT !NIT
PUNCH HOR PUNEOF
PUN OT Q TO ACP
RD HOR
READ RESTORE DRIVER SETOFF SET FDT SHORT WAIT SIZ .. ~ SKIP

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-01

Page 29

22-AUG-1984 20:06:00 WORK2: [COURSE.DRIVER]PCDRIVER.MAR;(l)

= oooooooc = 00000010 = 00000014

00000000 RG

03

= 00000080

= =

00000084 00000008

00000298 R

03

000003FC R

03

000003E8 R

03

=

********
00000011

x

03

000001A4 R

03

000005F6 R

03

000003F9 R

03

0000042C R

03

00000407 R

03

00000451 R

03

00000616 R

03

0000009C R

03

= 00000800

= 00000080

= 00008000

= =

00000040 00000001

000006AF R

03

00000411 R

03

OOOOOOBC R

03

00000038 R

03

000005ED R

03

= 00000002

00000006

00000004

00000002

00000000

00000286 R

03

000006Al R

03

000003E5 R

03

00000216 R

03

= = =

00008000 00000040 00000080

=

0000045F OOOOOOOA

R

03

=

00000090 00000001

R

03

000002FA R

03

000004AO R

03

=

00000-162 00000020

R

03

00000545 R

03

00000605 R

03

00000686 R

03

00000199 R

03

= 00000002

= 00000001

000005DF R

03

SKI Pl SKIP2 SS$ CANCEL SS$-DEVNOTMOUNT SS$-DRVERR SS$-ENDOFFILE SS$-! LLIOFUNC SS$-NOPRIV SS$-NORMAL SS$-TAPEPOSLOST SS$-TIMEOUT
START STARTING SYS$GL_OPRMBX TO ACP UCB$B DEVCLASS UCB$B-DEVTYPE UCB$B-DIPL
UCB$B-FIPL
UCB$B-PT OFLCNT UCB$B-PT-PPB
UCB$K-PT-UCBLEN UCB$L-CRB UCB$L-DEVCHAR UCB$L-DEVDEPEND UCB$L-DPC UCB$L-FPC UCB$L-FR3 UCB$L-IRP UCB$L-SAV R4 UCB$L-SVAPTE UCB$L-VCB UCB$M-ONLINE
UCB$V-CANCEL UCB$V-INT
UCB$V-MOUNTI NG UCB$V-POWER UCB$W-BCNT UCB$W-DEVBUFSIZ UCB$W-DEVSTS UCB$W-FUNC UCB$W-MY REFCNT UCB$W-PT-PPS
UCB$W-REFC UCB$W-STS UCB$W-UNIT
UN SOL-INTERRUPT
VCB$W-TRANS VEC$L - I D B
VEC$L=INI TIAL WAIT

000005E2 R

03

0000045C R

03

= 00000830

= =

0000007C 0000008C

= =

00000870 OOOOOOF4

= 00000024

= =

00000001 00000224

= 0000022C

= =

00000004 00000007

******** x 03

= =

00000173 00000040 00000041

R

03

= OOOOOOSE

= 00000008

OOOOOOA6

OOOOOOA7

OOOOOOAA

= = =

00000024 00000038 00000044

= 0000009C

= oooooooc

= 00000010

= 00000058

OOOOOOAO

= 00000078

= =

00000034 00000010

= =

00000003 00000001

= 00000009

= 00000005

= 0000007E

= 00000042

= =

00000068 0000009A

OOOOOOA8

= = =

OOOOOOA4 0000005( 00000064 00000054

0000060C R

03

= oooooooc

= =

00000008
oooooooc

00000324 R

03

PCDRIVER Psect synopsis

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 17:59:27 VAX-11 Macro V03-01

Page 30

22-AUG-1984 20:06:00 WORK2: [~OURSE.DRIVER]PCDRIVER.MAR;(l)

PSECT name
ABS $ABS$ $$$105 PROLOGUE $$$1 15=DR I VER

Psect synopsis +----------------+

Al location

PSECT No. Attributes
--------- ---------

00000000 (

0.) 00 ( 0. ) NOPIC USR CON ABS LCL NOSHR NOEXE NORD NOWRT NOVEC BYTE

OOOOOOAA ( 170.) 01 ( 1 . ) NOPIC USR CON ABS LCL NOSHR EXE RD

WRT NOVEC BYTE

0000006E ( 110.) 02 ( 2.) NOP IC USR CON REL LCL NOSHR EXE RO

WRT NOVEC BYTE

000006AF ( 1711.) 03 ( 3. ) NOP IC USR CON REL LCL NOSHR EXE RD

WRT NOVEC LONG

Performance indicators

Phase

Page faults

CPU Time

Elapsed Time

Initialization Command processing Pass 1 Symbol table sort Pass 2 Symbol table output Psect synopsis output Cross-reference output Assembler run totals

122 137 1976
82 819
31 7
0 3180

00:00:00.33 00:00:00.46 00:00:31 .64 00:00:03.71 00:00:05.70 00:00:00.24 00:00:00.03 00:00:00.00 00:00:42. 11

00:00:01.51 00:00:01 .04 00:00:38.03 00:00:03.81 00:00:06.79 00:00:00.37 00:00:00.03 00:00:00.00 00:00:51.58

The working set limit was 500 pages. 146981 bytes (288 pages) of virtual memory were used to buffer the intermediate code. There were 130 pages of symbol table space al located to hold 2469 non-local and 50 local 1208 source lines were read in Pass 1, producing 20 object records in Pass 2. 45 pages of virtual memory were used to define 42 macros.

symbols.

! Macro library statistics

Macro library name

Macros defined

SYS$SYSROOT:[SYSLIB]LIB.MLB;1

29

SVS$SVSROOT:[SVSLIB]STARLET.MLB;1

10

TOTALS (all 1 ibraries)

39

2705 GETS were required to define 39 macros.

There were no errors, warnings or information messages.

MAC/LIS PCDRIVER+SVS$LIBRARY:LIB/LIB

100 $!

PCDRIVER.COM

200 $!

300 $SET VERIFY

400 $MAC/LIS PCDRIVER+SYS$LIBRARY:LIB/LIB

500 $LINK/NOTRACE/MAP PCDRIVER/OPT,PCDRIVER,SYS$SYSTEM:SYS.STB/SEL

600 $SET NOVERIFY

100 200 BASE=O

PCDRIVER.OPT

100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400

$ ! $ ! $MCR SYSGEN LOAD SYS$SYSDISK:[COURSE.DRIVER]PCDRIVER CONNECT PCA0/ADAPTER=3/NUMVEC=2/VECTOR=%070/CSR=%0777550/DRIVER=PCDRIVER CONNECT PCA1/ADAPTER=3/VECTOR=%074/DRIVER=PCDRIVER SHO /DEV=PC EXIT

LOADER.COM

100 c
200 c
300 400 500 600 700 800 10 900 20 1000 25 1100 30 1200 40 1300 50 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400 2500 2600 2700 2800 100 2900 3000 200 3100 3200 3300 3400 300 3500

READY.FOR

EXTERNAL

IO$ READVBLK

CHARACTER*36 ALPHA

INTEGER*4 SYS$ASSIGN,SYS$QIOW,IOSB(2)

INTEGER*2 IOSBW(4)

EQUIVALENCE (IOSB(l),IOSBW(l))

FORMAT (' COMPLETED QIOW ' 'I 2,' -- I 'I 4, I BYTES READ I )

FORMAT(' ERROR ID= I ,I4, I FOR SS$ VALUE= I ,I4)

FORMAT(' IOSBW(2) VALUE= ',I2) -

FORMAT(' BEFORE ASSIGNMENT MADE')

FORMAT(' ASSIGNMENT SUCCESSFUL')

FORMAT(' DATA READ= ',A)

WRITE (6,30)

J=O

II=SYS$ASSIGN('PCAO:' ,IC,,)

IF(.NOT.II)GOTO 200

WRITE (6,40)

DO 100 I=l,4

J=l

II=SYS$QIOW(,%VAL(IC),I0$ READVBLK,IOSB,,,%REF(ALPHA),

1 %VAL ( 3 6 ) , , , , .)

IF(.NOT.II)GOTO 200

J=2

IF(IOSBW(l).NE.l)GOTO 200

WRITE (6,10)I,IOSBW(2)

WRITE (6,50)ALPHA

CONTINUE

GOTO 300

WRITE (6,20)J,II

WRITE (6,25)IOSBW(2)

IF(.NOT.II)CALL SYS$EXIT(%VAL(II))

CALL SYS$EXIT(%VAL(IOSBW(l)))

STOP

END

100 c
200 c
300 400 500 600 700 800 10 900 15 1000 20 1100 25 1200 30 1300 40 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400 2500
2600 c
2700 2800 2900 95 3000 3100 3200 3300 3400 3500 98 3600 3700 3800 3900 99 4000 4100 4200 4300 4400 4500 4600 100 4700 4800 4900 5000 150 5100 5200 5300 200 5400 5500 5600 5700 300 5800 5900

RANDWV.FOR

EXTERNAL

IO$ WRITEVBLK,IO$ READVBLK

CHARACTER*36 ALPHA,BETA,GAMMA(l8)

INTEGER*4 SYS$ASSIGN,SYS$QIOW,IOSB(2),SYS$QIO,IOSB1(2)

INTEGER*2 IOSBW(4),IOSBW1(4) EQUIVALENCE (IOSB(l),IOSBW(l)),(IOSBl(l),IOSBWl(l))

FORMAT(' IOSBW(2) AND IOSBW1(2) = ',I2,' ',!2)

FORMAT(' COMPLETED READ ',I2)

FORMAT(' ERROR ID= ',!4)

FORMAT(' DATA READ= I ,A) FORMAT(' BEFORE ASSIGNMENTS MADE')

FORMAT(' ASSIGNMENTS SUCCESSFUL')

ALPHA='ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'

WRITE (6,30) J=O,

II=SYS$ASSIGN('PCAO:' ,IC,,)

IF(.NOT.II)GOTO 200

J=5 II=SYS$ASSIGN('PCA1: I ,IC2,,) IF(.NOT.II)GOTO 200

WRITE (6,40)

J=l

IP=3

IR=l8

IF CHANGE IR, CHANGE GAMMA( IR) TOO IN CHAR STATEMENT

IRINIT=IR

K=O

II=SYS$QIO(%VAL(l),%VAL(IC2),IO$ WRITEVBLK,IOSB,,,%REF(ALPHA),

1%VAL(36),,,,)

-

IF(.NOT.II)GOTO 200

J=2

IF (K .NE. 0) GOTO 99

K=l

II=SYS$QIO(,%VAL(IC),IO$_READVBLK,IOSB1,,,%REF(BETA),

1 %VAL ( 3 6 ) ' I ' ' ) IF(.NOT.II) GOTO 200

J=4

IF (IOSBWl(l).NE.l)GOTO 100

INDX=IRINIT+l-IR

GAMMA(INDX)=BETA

IR=IR-1

IF(IR .GT. 0) GOTO 98

IOSBWl(l)=O

GOTO

150

IF (IOSBW(l) .NE. 1) GOTO 99

IP=IP-1

IF (IP .GT. 0) GOTO 95 IOSBW(l)=O

I F ( ( I P · EQ · 0 ) . AND · ( I R . EQ · 0 ) ) GOTO 3 0 0

IF ( ( IP . LT. 0) . OR. ( IR . LT. 0 ) ) GOTO 4 0 0

GOTO 99

WRITE (6,20)J

WRITE (6,10)IOSBW(2),IOSBW1(2)

IF(.NOT.II)CALL SYS$EXIT(%VAL(II))

CALL SYS$EXIT(%VAL(IOSBW(l)))

DO 350 I=l,IRINIT-1

WR I TE ( 6 I 15 ) I WRITE (6,25) GAMMA(!)

6000 350 6100 6200 400 6300 6400

CONTINUE STOP WRITE (6,20) IP WR I TE ( 6 , 2 0 ) IR END

100 c
200 c
300 400 500 600 700 800 10 900 20 1000 25 1100 30 1200 40 1300 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000 3100 3200 3300 3400 3500 3600 3700 3800 100 3900 4000 4100 4200 4300 4400 4500 4600 4700 200 4800 4900 5000 300 5100

MODE.FOR

EXTERNAL IO$ WRITEVBLK,IO$ MODIFY,IO$_DELETE,IO$ DEACCESS

CHARACTER*36-ALPHA

-

INTEGER*4 SYS$ASSIGN,SYS$QIOW,IOSB(2)

INTEGER*2 IOSBW(4)

EQUIVALENCE (IOSB(l),IOSBW(l))

FORMAT(' COMPLETED QIOW ',I2,' -- ',I4,' BYTES PUNCHED')

FORMAT(' ERROR ID= ',I4)

FORMAT(' NEW MODE VALUE= ',I4)

FORMAT(' BEFORE ASSIGNMENT MADE')

FORMAT(' ASSIGNMENT SUCCESSFUL')

ALPHA='ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'

WRITE (6,30)

J=O

II=SYS$ASSIGN('PCA1:' ,IC,,)

IF(.NOT.II)GOTO 200

WRITE (6,40)

J=3

II=SYS$QIOW(,%VAL(IC),IO$_DEACCESS,IOSB,,,,,,,,)

IF (.NOT. II) GOTO 200

WRITE (6,25) IOSB(2)

J=4

II=SYS$QIOW(,%VAL(IC),IO$_MODIFY,,,,,%VAL(70),,,,)

IF (.NOT. II) GOTO 200

J=5

II=SYS$QIOW(,%VAL(IC),IO$ DEACCESS,IOSB,,,,,,,,)

IF (.NOT. II) GOTO 200 -

WRITE (6,25) IOSB(2)

DO 100 I=l,4

J=l

II=SYS$QIOW(,%VAL(IC),IO$_WRITEVBLK,IOSB,,,%REF(ALPHA),

1 %VAL ( 3 6 ) I , , , )

IF(.NOT.II)GOTO 200

J=2

IF(IOSBW(l).NE.l)GOTO 200

WRITE (6,10)I,IOSBW(2)

CONTINUE

J=5

II=SYS$QIOW(,%VAL(IC),IO$_DELETE,,,,,,,,,)

IF (.NOT. II) GOTO 200

J=6

II=SYS$QIOW( ,%VAL( IC) I IO$ DEACCESS, IOSB, I I I,,, I)

IF (.NOT. II) GOTO 200 -

WRITE (6,25) IOSB(2)

GOTO 300

WRITE (6,20)J

IF(.NOT.II)CALL SYS$EXIT(%VAL(II))

CALL SYS$EXIT(%VAL(IOSBW(l)))

STOP

END

PCDRIVER.LIS PCDRIVER.COM PCDRIVER.OPT PCLOAD.COM ATTN.FOR

PCDRIVER Table of contents

( 1)

40

( 1)

96

( 1)

165

( 1)

194

( 1)

231

( 1)

268

( 1)

312

( 1)

356

( 1)

366

( 1)

419

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 18:01:38 VAX-11 Macro V03-0l
External and local symbol definitions Standard tables PC CONTROL INIT, Controller initialization routine PC-UNIT !NIT, Unit initialization routine CSR FDT-ROUTINE, Return CSR Address SET-AST-FDT, Reader Attn. AST PUNC AST FDT, Punch Attn. AST PC START~ Start 1/0 Routine ASTINT, Interrupt service routines PC_END. End of driver

Page 0

PCDRIVER V02

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 18:01:38 VAX-11 Macro V03-0l

Page 1

22-AUG-1984 21:15:21 WORK2:[COURSE.DRIVER.RT)PCDRIVER.M(1)

0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

1

.TITLE PCDRIVER - VAX/VMS PAPER TAPE READER/PUNCH DRIVER

2

. IDENT /V02/

3

4 ;++

5

6 FACILITY:

7

8

VAX/VMS Paper Tape Reader/Punch driver

9

10 ABSTRACT:

11

12

This driver al lows the user to control the paper tape reader/

13

punch by using the set attention AST scheme. The fol lowing

14

function codes are accepted:

15

16

IO$ SENSECHAR--takes no arguments, and returns the address

17

of the CSR in the high-order longword of the IOSB.

18

19

I0$_SETMODE----takes up to three parameters:

20

21

= Pl address of AST routine to be entered when the paper

22 23

= tape reader interrupts (Pl is required).
P2 parameter to be passed to the AST routine

24

specified in Pl (P2 is optional).

25

P3 = access mode in which the AST routine specified in

26

Pl is to run (P3 is optional).

27

28

10$ SETCHAR----identical to 10$ SETMODE except that the AST

29

- routine specified in Pl will be entered if the punch

30

generates an interrupt (instead of the reader).

31

32 AUTHOR:

33

34

Vik Muiznieks

July--1979

35

36

History

37

Fred Marsh

August 1894

38

Added $DVNDEF to the symbol definitions

39

40

.SBTTL External and local symbol definitions

PCDRIVER V02

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 18:01:38 VAX-11 Macro V03-01

Page 2

External and local symbol definitions

22-AUG-1984 21:15:21 WORK2:[COURSE.DRIVER.RT]PCDRIVER.M(1)

00000000 00000004 00000008
oooooooc
00000010 00000014
OOOOOOFC
00000090

0000
0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0090 0090 0094 0094 0098 0098 0098 0098 0000

42

43

44 External symbols

45

46

47

$CRBDEF

Channel request block

48

$DCDEF

Device classes and types

49

$DDBDEF

Device data block

50

$DEVDEF

Device characteristics

51

$IDBDEF

Interrupt data block

52

$IODEF

I/O function codes

53

$IPLDEF

Hardware IPL definitions

54

$IRPDEF

I/O request packet

55

$SSDEF

System status codes

56

$UCBDEF

Unit control block

57

$VECDEF

Interrupt vector block

58

$DYNDEF

59

60 Local symbols

61

62

63

64 Argument list (AP) offsets for device-dependent $010 parameters

65

(Only Pl. P2, and P3 have meaning for this driver.)

66

67

68 Pl

0

First $QIO parameter

69 P2

4

Second $QIO parameter

70 P3

8

Third $QIO parameter

71 P4

12

Fourth $QIO parameter

72 P5

16

Fifth $QIO parameter

73 P6

20

Sixth $QIO parameter

74

75

76 Other constants

77

78

79 MY CLASS=252

; My own device class number

80

81

82 Definitions that fol low the standard UCB fields

83

84

85

$DEF I NI UCB

: Start of UCB definitions

86

87

.=UCB$K_LENGTH

: Position to end of UCB

88

89 $DEF

UCB$L_ASTHEAD .BLKL 1

: Listhead for reader attn. AST

90

91 $DEF

UCB$L PUNCHD

.BLKL 1

; Listhead for punch attn. AST

92

93 $DEF 94

UCB$K- PC UCBLEN

; Length of extended UCB

95

$DEFEND UCB

: End of UCB definitions

96

.SBTTL Standard tables

PCDRIVER V02

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 18:01 :38 VAX-11 Macro V03-0l

Page 3

Standard tables

22-AUG-1984 21:15:21 WORK2:[COURSE.DRIVER.RT]PCDRIVER.M(1)

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0038 0038 0038 003C 0040 0040 0040 0040 0040 0047 0048 0048 0048 004B 0050 0050 0055 0055 005A 005A 005A 005F
005F
005F 0064 0064 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0038 0038 0038 0038 0038 0038 0038 0038 0038 0038

98

99

100 Driver prologue table

101

102

103

DPT AB

104

END=PC END,-

105

ADAPTER=UBA,-

106

UCBSIZE=<UCB$K PC UCBLEN>,-

107

NAME=PCDRIVER -

108

DPT STORE !NIT

109

110

DPT STORE UCB,UCB$B FIPL,B,8

111

DPT-STORE UCB,UCB$B-DIPL,B,20

112

DPT-STORE UCB,UCB$L-DEVCHAR,L,<-

113

-

DEV$M AVL!--

114

DEV$M-REC!-

115

DEV$M-IDV'-

116

DEV$M-ODV>

117

DPT STORE UCB~UCB$B DEVCLASS,B,MY CLASS

118

119

DPT STORE REINIT

120

121

DPT STORE DDB,DDB$L DDT,D,PC$DDT

122

DPT STORE CRB,CRB$L-INTD+4,D,-

123

ASTINT

124

DPT STORE CRB,CRB$L INTD2+4,D,-

125

PUNC I NT

126

DPT STORE CRB, -

127

~

CRB$L INTD+VEC$L INITIAL,-

128

D,PC CONTROL INif

129

DPT STORE CRB,-

130

CRB$L INTD+VEC$L UNITINIT,-

131

D,PC UNIT INIT

132

133

DPT STORE END

134

135

136

137 Driver dispatch table

138

139

140

DDT AB

141

DEVNAM=PC,-

142

START=PC START,-

143

FUNCTB=PC FUNCTABLE,-

144

CANCEL=+IOC$CANCELIO

145

146

147 Function dispatch table

148

149

150 PC FUNCTABLE:

151

FUNCTAB

152

<SENSECHAR,-

153

SETCHAR,-

154

SETMODE>

DPT-creation macro End of driver label Adapter type Length of UCB Driver name Start of load initialization table Device fork IPL Device int. IPL (BR4)
Device characteristics
e.g., dev. available record oriented input device output device store my device class
Start of reload initialization table Address of DDT Address of reader int. service routine Address of punch int. ser·vice routine Addr·ess of controller initialization routine
Address of device unit initialization routine
End of initial i za ti on tables
DDT-creation macro Name of device Start I/O routine FDT address Cancel I /0 routine
FDT for driver Valid I/0 functions Get CSR address func. Punch attn. AST func. Reader attn. AST func

PCDRIVER V02

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 18:01:38 VAX-11 Macro V03-0l

Page 4

Standard tables

22-AUG-1984 21:15:21 WORK2:[COURSE.DRIVER.RT]PCDRIVER.M(1)

0040 155 0040 156 0040 157 0040 158 0048 159 0048 160 0054 161 0054 162 0060 163 0060 164 006C 165

FUNCTAB
FUNCTAB FUNCTAB FUNCTAB .SBTTL

<SENSECHAR,SETCHAR,SETMODE> CSR FDT ROUTINE,<SENSECHAR> PUNC AST FDT,<SETCHAR> SET AST FDT,<SETMODE> PC CONTROL INIT, Controller

Buffered functions Get CSR address Punch attn. AST Reader attn. AST FDT get CSR routine
FDT punch attn. AST routine FDT reader attn. ; AST rout1i ne initialization routine

PCDRIVER V02

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 18:01:38 VAX-11 Macro V03-0l

Page 5

PC_CONTROL_INIT, Controller initializati 22-AUG-1984 21:15:21 WORK2:[COURSE.DRIVER.RT]PCDRIVER.M(l)

006C 006C 006C 006C 006C 006C 006C 006C 006C 006C 006C 006C 006C 006C 006C 006C 006C 006C 006C 006C 006C 006C 006C 006C 006C 006C 05 006C 0060

167

168 ;++

- 169 ; PC CONTROL !NIT, Readies controller for I/O operations
170 ;

171 ; Functional description:

172 ;

173 ;

The operating system cal ls this routine in 3 places:

174 ;

175 ;

at system startup

176 ;

during driver loading and reloading

177 ;

during recovery from a power failure

178 ;

179 ; Inputs:

180 ;

181 ;

R4

- address of the CSR (controller status register)

182 ;

R5

- address of the IDB (interrupt data block)

183 ;

R6

- address of the DOB (device data block)

184 ;

RB

- address of the CRB (channel request block)

185 ;

186 ; Outputs:

187 ;

188 ;

The routine must preserve all registers except RO-R3.

189

190 191

'

192 PC CONTROL INIT:

; I n i t i a 1 i z e con t r· o l 1e r

193

RSB

; Return

194

.SBTTL PC UNIT INIT, Unit in i t i a 1 i za t i on routine

PCDRIVER V02

~VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP~l984 18:01:38 VAX-11 Macro V03-0l

Page 6

PC UNIT INIT, Unit initialization routin 22-AUG-1984 21:15:21 WORK2: [COURSE.DRIVER.RT)PCDRIVER.M(1)

64 A5 10 50 24 A5 50 2C AO 04 AO 55

006D 006D 006D 006D 006D 006D 006D 006D
006D 006D 006D 0060 0060 0060 0060 0060 006D 006D 006D 006D 006D 006D 0060 006D 006D 006D
006D 006D AS 0060 DO 0071 DO 0075 DO 0079 0070 007D 05 0070 007E

196

197 ;++

198 PC UNIT_INIT, Readies unit for I/O operations

199

200 Functional description:

201

202

The operating system cal ls this routine after cal ling the

203

controller initialization routine:

204

205

at system startup

206

during driver loading

207

during recovery from a power failure

208

209

This routine sets the on-line bit in· the UCB, and

210

loads the owner field of the IDB with the UCB address.

211

212 Inputs:

213

214

R4

- address of the CSR (controller status register)

215

R5

- address of the UCB (unit control block)

216

217 Outputs:

218

219

The routine must preserve all registers except RO-R3.

220

221 ;--

222

223 PC UNIT !NIT:

lnitialize unit

224

-BISW

#UCB$M ONLINE,UCB$W ST$(R5)

Set unit online

225

MOVL

UCB$L CRB(R5),RO -

Get address of CRB

226

MOVL

CRB$L-INTD+VEC$L IDB(RO),RO

Get address of IDB

227

MOVL

R5,IDB$L_OWNER(RO)

Set address of dev UCB

228

as OWNER--wil l not

229

change

230

RSB

; Return

231

.SBTTL CSR FDT ROUTINE, Return CSR Address

PCDRIVER V02

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 18:01 :38 VAX-11 Macro V03-01

Page 7

CSR_FDT_ROUTINE, Return CSR Address

22-AUG-1984 21 :15:21 WORK2: [COURSE.DRIVER.RT]PCDRIVER.M(l)

50 24 A5 51 2C BO
50 01 OOOOOOOO'GF

007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E 007E DO 007E DO 0082 3C 0086 17 0089 008F

233

234 ;++

235 CSR FDT ROUT! NE

236

237 Functional description:

238

239

This FDT routine returns the address of the device's CSR in

240

the high-order longword of the IOSB. The CSR is found in the

241

first longword of the IDB. R1 is placed into the high-order

242

longword of the IOSB by IOPOST.

243

244 Inputs:

245

246

RO-R2 - scratch registers

247

R3

- address of the !RP (I/O request packet)

248

R4

- address of the PCB (process control block)

249

R5

- address of the UCB (unit control block)

250

R6

- address of the CCB (channel control block)

251

R7

- bit number of the I/O function code

252

RS

- address of the FDT table entry for this routine

253

R9-R 11 - scratch registers

254

AP

- address of the 1st function dependent $QIO parameter

255

256 Outputs:

257

258

The routine must preserve al 1 registers except RO-R2, and

259

R9-R11.

260

261

262

263 CSR FDT ROUTINE:

264

MOVL

UCB$L CRB(R5),RO

Get CRB address

265

MOVL

@CRB$L INTD+VEC$L IDB(RO),R1

Store CSR in IOSB(2)

266

MOVZWL #SS$_NORMAL,RO

Return normal success

267

JMP

GAEXE$FINISHIO

All done

268

.SBTTL SET_AST_FDT, Reader Attn. AST

PCDRIVER V02

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 18:01:38 VAX-11 Macro V03-0l

Page 8

SET_AST FDT, Reader Attn. AST

22-AUG-1984 21:15:21 WORK2:[COURSE.DRIVER.RT]PCDRIVER.M(l)

50 6C 09
51 04 OOOOOOOO'GF
50 04 AC 06
OOOOOOOO'GF
57 0090 C5 OOOOOOOO'GF OOOOOOOO'GF

008F 008F 008F OOBF OOBF OOBF 008F OOBF 008F
008f 008F OOBF 008F 008F 008F 008F 008F 008F 008F 008F 008F 008F 008F 008F 008F 008F 008F 008F 008F 008F DO 008F 13 0092 9A 0094 16 0097 009D DO 009D 13 OOAl 16 OOA3 OOA9 DE OOA9 16 OOAE 17 0084 OOBA

270

271 ;++

272 SET AST FDT

273

274 Functional description:

275

276

This FDT routine queues an attention AST for the process

277

issuing the SETMODE $QIO. Pl and P2 are checked for

278

accessibility.

279

280 Inputs:

281

282

RO-R2 - scratch registers

283

R3

- address of the IRP (I/O request packet)

284

R4

- address of the PCB (process control block)

285

R5

- address of the UCB (unit control block)

286

R6

- address of the CCB (channel control block)

287

R7

- bit number of the I/0 function code

288

RB

- address of the fDT table entry for this routine

289

R9-R 11 - scratch registers

290

AP

- address of the 1st function dependent $QIO parameter

291

292 Outputs:

293

294

The rou~ine must preserve al 1 registers except RO-R2, and

295

R9-Rll.

296

297

298

299 SET AST FDT:

300

-MOVL

Pl(AP),RO

Get ast address

301

BEQL

NOP1

0 means disable ast

302

MOVZBL #4,Rl

It's a longword

303

JSB

GAEXE$WRITECHK

Can user read it

304

No return on no access

305 NOPl: MOVL

P2(AP),RO

Get ast par. if there

306

BEQL

NOP2

No P2 parameter if eql

307

JSB

GAEXE$WRITECHK

Can user read it?

308

No return on no access

309 NOP2: MOVAL UCB$L ASTHEAD(R5),R7

Get listhead

310

JSB

GACOM$SETATTNAST

Set up ast request

311

JMP

GAEXE$FINISHIOC

Complete SETMODE $QIO

312

.SBTTL PUNC AST FDT, Punch Attn. AST

PCORIVER V02

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 18:01:38 VAX-11 Macro V03-01

Page 9

PUNC_AST_FOT, Punch Attn. AST

22-AUG-1984 21 :15:21 WORK2: [COURSE.DRIVER.RT]PCDRIVER.M(1)

50 6C 09
51 04 OOOOOOOO'Gf
50 04 AC 06
OOOOOOOO'Gf
57 0094 C5 OOOOOOOO'GF OOOOOOOO'GF

OOBA OOBA
OOBA OOBA OOBA OOBA OOBA OOBA OOBA OOBA OOBA
OOBA OOBA OOBA OOBA OOBA OOBA OOBA
OOBA OOBA OOBA OOBA OOBA OOBA OOBA OOBA OOBA OOBA
OOBA OOBA DO OOBA 13 OOBO 9A OOBF 16 OOC2 OOC8 DO OOCB
13 oocc
16 OOCE 0004
DE 0004 16 0009 17 OOOF
ODES

314

315 ;++

316 PUNC_AST_FDT

317

318 functional description:

319

320

This FDT routine queues an attention AST for the process

321

issuing the SETCHAR $QIO. Pl and P2 are checked for

322

accessibility.

323

324 Inputs:

325

326

RO-R2 - scratch registers

327

R3

- address of the IRP (I /0 request packet)

328

R4

- address of the PCB (process control block)

329

R5

- address of the UCB (unit control block)

330

R6

- address of the CCB (channel control block)

331

R7

- bit number of the I/O function code

332

RB

- address of the FDT table entry for this routine

333

R9-R 11 - scratch registers

334

AP

- address of the 1st function dependent $QIO parame~er

335

336 Outputs:

337

338

The routine must preserve all registers except RO-R2, and

339

R9-R11.

340

341

342

343 PUNC AST FDT:

344

- MOVL

345

BEQL

346

MOVZBL

347

JSB

Pl(AP),RO NO Pl #4-:-Rl Gl\EXE$WRITECHK

Get ast address 0 means disable ast It's a longword Can user read it

348 349 NO Pl: 350 351 352
353 NO_P2: 354 355

MOVL BEQL JSB
MOVAL JSB JMP

P2(AP),RO NO P2 Gl\EXE$WRITECHK
UCB$L PUNCHD(R5),R7 Gl\CQM$SETATTNAST GAEXE$FINISHIOC

No return on no access Get ast par. if there No P2 parameter if eql Can user read it? No return on no access Get l isthead Set up ast request Complete SETMODE $QIO

356

.SBTTL PC START, Start I/O Routine

PCDRIVER V02

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 18:01 :38 VAX-11 Macro V03-01

Page 10

PC START, Start I/O Routine

22-AUG-1984 21:15:21 WORK2: [COURSE.DRIVER.RT]PCDRIVER.M(l)

OOE5 OOE5 OOE5 OOE5 OOE5 OOE5 OOE5 05 OOE5 OOE6

358 ; PC START 359 ; -

360 ;

The driver really has no start I/O entry point.

361 ;

This is a dummy routine which should never be

362 ;

called by this driver.

363 ;

364 PC START:

365 -

RSB

366

.SBTTL ASTINT, Interrupt service routines

PCDRIVER V02

53 9E 55 04 A3 54 0090 C5 OOOOOOOO'GF
50 BE 52 SE 54 BE
53 9E 55 04 A3 54 0094 C5
E2

- VAX/VMS PAPER TAPe READER/PUNCH DRIVER 12-SEP-1984 18:01:38 VAx~11 Macro V03-01

Page 11

ASTINT, Interrupt service routines

22-AUG~1984 21:15:21 WORK2: [COURSE.DRIVER.RT]PCDRIVER.M(l)

OOE6 OOE6 OOE6 OOE6 OOE6 OOE6
OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6 OOE6
OOE6 OOE6 OOE6 OOE6 DO OOE6 DO OOE9 DE OOED 16 OOf 2 7D OOF8 70 OOFB 7D OOFE 02 0101 0102 DO 0102
DO 0105 DE 0109 11 010E
0110

368 ;++

369 ASTINT

370

371 Functional description:

372

373

The driver is for a single-unit controller, and

374

the unit initialization code has stored the

375

address of the UCB in the owner field of the IDB.

376

377

These routines simply restore the address of the UCB

378

in RS, place the appropriate AST listhead in R4, and

379

cal 1 a system routine to queue pending AST's. Note

380

that no check is made to see if the UCB$V INT bit is

381

set (in UCB$W STS), since the routines th~t set up the

382

attention AST7 s do not set the bit.

383

384 Inputs:

385

386

O(SP) - pointer to the address of the IDB (interrupt data

387

block)

388

4(SP) - saved RO

389

8(SP) - saved Rl

390

12(SP) - saved R2

391

16(SP) - saved R3

392

20(SP) - saved R4

393

24(SP) - saved R5

394

28(SP) - saved PSL (program status longword)

395

32(SP) - saved PC

396

397

The IDB contains the CSR address and the UCB address.

398

399 Outputs:

400

401

The routine must preserve all registers except RO-R5.

402

403

404

405 ASTI NT:

406

MOVL

407

MOVL

408

MOVAL

409 DELIV: JSB

410

MOVQ

411

MOVQ

412

MOVQ

413

REI

@(SP)+,R3 IDB$L OWNER(R3),R5 UCB$L-ASTHEAD(R5),R4 GACOM$DELATTNAST (SP)+,RO (SP)+,R2 (SP)+,R4

Reader interrupted Get I DB Get OWNER UCB Get reader listhead Deliver attn. ast's Dismiss interrupt After restoring Registers

414 PUNC INT:

415

MOVL

@(SP)+,R3

Punch interrupted Get I DB

416

MOVL

IDB$L OWNER(R3),R5

Get OWNER UCB

417

MOVAL UCB$L-PUNCHD(R5),R4

418

BRB

DELIV-

Get punch listhead Deliver attn. ast's

419

.SBTTL PC END, End of driver

PCDRIVER V02

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 18:01:38 VAX-11 Macro V03-01

Page 12

PC_END, End of driver

22-AUG-1984 21:15:21 WORK2: [COURSE.DRIVER.RT]PCDRIVER.M(1)

0110
0110 0110 0110 0110 0110 0110

421

422 ++

423 Label that marks the end of the driver

424 --

425

426 PC END:

; Last location in driver

427 -

. END

PCDRIVER Symbol table
$$$ $$OP ASTINT AT$ UBA COM$DELATTNAST COM$SETATTNAST CRB$L INTO CRB$L-INTD2
CSR FDT ROUTINE DDB$L DDT DELIV-
DEV$M AVL DEV$M-IDV DEV$M-ODV DEV$M-REC DPT$C-LENGTH DPT$C-VERSION DPT$INITAB DPT$REINITA8 DPT$TAB DVN$C CRB DVN$C-DDB DVN$C-DPT DVN$C-UCB
EXE$FIN I SH IO EXE$FINISHIOC EXE$WRITECHK FUNCTAB LEN IDB$L OWNER 10$ SENSECHAR 10$-SETCHAR 10$-SETMODE 10$-VIRTUAL I OC$CANCELI 0 IOC$MNTVER IOC$RETURN MASKH MAS KL MY_CLASS NOPl NOP2 NO Pl NO-P2 P1-
P2 P3 P4 P5 P6 PC$DDT PC CONTROL !NIT PC-END PC-FUNCTABLE PC-START
PC-UNIT INIT
PUNC AST FDT PUNC:~) NT

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 18:01:38 VAX-11 Macro V03-01

Page 13

22-AUG-1984 21:15:21 WORK2:[COURSE.DRIVER.RT]PCDRIVER.M(1)

00000020 R

02

00000002

OOOOOOE6 R

03

00000001

******** x 03 ******** x 03

00000024

00000048

0000007E R

03

0000000~

OOOOOOF2 R

03

00040000

04000000

08000000

00000001

00000038

00000004

00000038 R

02

00000048 R

02

00000000 R

02

00000005

00000006

OOOOOOlE

00000010

******** x 03 ******** x 03

******** x 03

00000034

00000004

00000018

OOOOOOlA

00000023

0000003F

******** x 03 ******** x 03 ******** x 03

00000008

00000000

OOOOOOFC

00000090 R

03

OOOOOOA9 R

03

OOOOOOC8 R

03

00000004 R

03

00000000

00000004

00000008
oooooooc

00000010

00000014

00000000' RG

03

0000006C R

03

00000110 R

03

00000038 R

03

OOOOOOE5 R

03

00000060 R

03

OOOOOOBA R

03

00000102 'R

03

SET AST FDT SS$-NORMAL
UCB$B DEVCLASS UCB$B-DlPL UCB$B-FlPL UCB$K-LENGTH UCB$K-PC UCBLEN UCB$L-ASTHEAD UCB$L-CRB
UCB$L-DEVCHAR UCB$L-PUNCHO UCB$M-ONLI NE UCB$W-STS VEC$L-l08
VEC$L-INITIAL VEC$L-UNITINIT

0000008F R
= 00000001 = 00000040

03

= 0000005E

= =

OOOOOOOB 00000090

00000098

00000090

= =

00000024 00000038

00000094
= 00000010 = 00000064 = 00000008 = oooooooc = 00000018

PCDRIVER Psect synopsis

- VAX/VMS PAPER TAPE READER/PUNCH DRIVER 12-SEP-1984 18:01:38 VAX-11 Macro V03-01

Page 14

22-AUG-1984 21:15:21 WORK2:[COURSE.DRIVER.RT]PCDRIVER.M(1)

PSECT name
ABS $ABS$ $$$105 PROLOGUE $$$115-DRIVER

! Psect synopsis +----------------+

Allocation
----------

PSECT No. Attributes
---------

00000000 (

0.) 00 ( 0.) NOPIC USR CON ABS LCL NOSHR NOEXE NORD NOWRT NOVEC BYTE

00000098 ( 152.) 01 ( 1.) NOPIC USR CON ABS LCL NOSHR EXE RD

WRT NOVEC BYTE

00000065 ( 101 . ) 02 ( 2.) NOP IC USR CON REL LCL NOSHR EXE RD

WRT NOVEC BYTE

00000110 ( 272.) 03 ( 3.) NOP IC USR CON REL LCL NOSHR EXE RD

WRT NOVEC LONG

Performance indicators

Phase

Page faults

CPU Time

Elapsed Time

In it i a 1 i za ti on Command processing Pass 1 Symbol table sort Pass 2 Symbol table output Psect synopsis output
Cross-reference output Assembler run totals

100 129 1101
29 418
12
7
0
1802

00:00:00.33 00:00:00.46 00:00:21 .36 00:00:02.85 00:00:03.19 00:00:00.11 00:00:00.05 00:00:00.00 00:00:28.37

00:00:01 .16 00:00:01.12 00:00:36.45 00:00:05.31 00:00:03.99 00:00:00.14 00: 00: 00. 19
00:00:00.00 00:00:48.37

The working set limit was 500 pages. 96378 bytes (189 pages) of virtual memory were used to buffer the intermediate code. There were 100 pages of symbol table space llocated to hold 1819 non-local and O local 427 source lines were read in Pass 1, produ ing 16 object records in Pass 2. 27 pages of virtual memory were used to def ne 24 macros.

symbols.

Macro library statistics

Macro library name

Macros defined

SVS$SVSROOT:[SYSLIB]LIB.MLB;1

14

SYS$SYSROOT:[SYSLIB]STARLET.MLB;l

8

TOTALS (all 1 ibraries)

22

2058 GETS were required to define 22 macros.

There were no errors, warnings or information messages.

MAC/LIS PCDRIVER+SVS$Ll8RARV:LIB/LIB

100 $!

PCDRIVER.COM

200 $!

300 $SET VERIFY

400 $MAC/LIS PCDRIVER+SYS$LIBRARY:LIB/LIB

500 $LINK/NOTRACE/MAP PCDRIVER/OPT,PCDRIVER,SYS$SYSTEM:SYS.STB/SEL

600 $SET NOVERIFY

100 200 BASE=O

PCDRIVER.OPT

100 200 300 400 500 600 700 800 900 1000 1100

$ ! $ ! $MCR SYSGEN LOAD SYS$SYSDISK:[COURSE.DRIVER.RT]PCDRIVER CONNECT PCA0/ADAPTER=3/NUMVEC=2/VECTOR=%070/CSR=%0777550/DRIVER=PCDRIVER SHO /DEV=PC EXIT

PCLOAD.COM

100 c
200 c
300 c
400
500 c 600 c 700 c 800 c
900 c
1000 c
1100 1200 1300 1400 1410 1500 1600 1610 1700
1800 c
1900 c 2000 c
2100 2110 2120 2130 30 2140 2150 40 2175 50
2200 c 2300 c
2400 c 2500 c
2600 2700 2710 2720 60 2800 2900
3000 c
3100 3200
3300 c
3400 c
3500 c
3600 c
3700 c 3800 c
3900 c
4000 c
4100 c
4200 4300
4400 c
4500 c 4600 c 4700 c 4800 c
4900

ATTN.FOR
PROGRAM MAIN
This program causes the subroutine SUB to entered in kernel mode. The subroutine will service interrupts from the paper tape reader, using the set attention ast mechanism.
INTEGER*4 SYS$CMKRNL,SYS$EXIT EXTERNAL SUB,SUBTWO COMMON ICSR,K,L,ICHAN COMMON /CHAR/ ALPHA COMMON /DEBUG/ ICODE,ISTAT INTEGER*2 !CHAN CHARACTER*36 ALPHA ICODE=O I=SYS$CMKRNL(SUB,)
Check for error in system service call
IF (.NOT. I) CALL SYS$EXIT(%VAL(I)) IF (!CODE .EQ. O) GOTO 40
WRITE (6,30) !CODE FORMAT (' ERROR ID= ',14) CALL SYS$EXIT(%VAL(ISTAT)) WRITE (6,50) ALPHA(l:L) FORMAT(' AFTER HIBER, ALPHA= ',A)
Now enter subroutine SUBTWO in kernel mode to punch some characters on paper tape
I=SYS$CMKRNL(SUBTWO,) IF (.NOT. I) CALL SYS$EXIT(%VAL(I)) WRITE (6,60) FORMAT(' PUNCHING COMPLETE') END
******************* SUB *******************
SUBROUTINE SUB
This routine assigns a channel to the paper tape reader, retrieves the address of the paper tape CSR in IOSB(2) (via a SENSECHAR QIO), and then requests an attention ast (when the paper tape reader interrupts) via a SETMODE QIO (in subroutine SETAST). The paper tape reader is actually started (and interrupts are enabled) by subroutine INTENA.
IMPLICIT INTEGER*4(S) EXTERNAL READAST,SETAST,INTENA,IO$_SENSECHAR
Note that integer values and character strings must be placed in separate common blocks (a FORTRAN restriction).
COMMON ICSR,K,L,ICHAN

5000
5010
5100
5200
5300
5400
5500 c
5600 c 5700 c
5800 5900 c 6000 c 6100 c 6200 c
6300
6400
6500 6600 c 6700 c 6800 c 6900 c 7000 c 7100 c
7200 c 7300 c 7400 c 7500 c
7600
7700
7800
7900
8000
8100
8200
8300 c
8400 c
8500 c 8600 c
8700 c
8800 c
8900 c
9000 c 9100 c
9200
9300 c
9400 c
9500 c 9600 c
9700
9800
9900 c
10000 c
10100 c 10200 c
10300
10400
10600
10700 c 10800 c 10900 c

COMMON /CHAR/ ALPHA COMMON /DEBUG/ ICODE,ISTAT INTEGER*4 IOSB(2) INTEGER*2 ICHAN,IOSBW(4) CHARACTER*36 ALPHA EQUIVALENCE (IOSB(l),IOSBW(l))

J is an error indicator flag

J=O

Assign a channel to the paper tape reader

and check for system service error.

·

I=SYS$ASSIGN('PCAO:' ,ICHAN,,) IF (.NOT. I) GOTO 200 J=l

K indicates position in character string for next character read
L indicates number of characters to be read into the string (note that the character statements in the subroutines need to be changed to reflect the maximum size that L may take on (set to 36)).
Also, byte array (BYTE) in subroutine READAST must be increased to the same size as L.

K=l L=36 I=SYS$QIOW(,%VAL(ICHAN),IO$ SENSECHAR,IOSB,,,,,,,,) ICSR=IOSB(2) IF (.NOT. I) GOTO 200 J=2 IF ( I OSBW ( 1) · NE. 1 ) GOTO 2 0 0

Enable attention ast (which is actually handled by subroutine READAST). Note that the %VAL function is used to pass the address of the CSR. In the subroutine, the address of the subroutine parameter becomes the address of the CSR, and the subroutine can directly reference the CSR by referencing the subroutine parameter.

CALL SETAST(O)

Enable paper tape reader interrupts, and start the paper tape reader (to read the next character).

CALL INTENA(%VAL(ICSR)) J=3

Wait for all characters to be read (determined by subroutine READAST, who issues the WAKE system service).

I=SYS$HIBER() IF (.NOT. I) GOTO 200 RETURN

Enter here if error condition occurs in a system service (J flags where error occurred).

11000 c
11100 200 11110
11120 11200
11600 11700
11800 c
11900
12000 12100 12200 12300
12400 12500
12600 12700
12800 c 12900 c 13000 c 13100 c
13200
13300 c 13400 c 13500 c 13600 c 13700 c 13800 c 13900 c
14000
14100 c 14200 c 14300 c 14400 c 14500 c
14600
14700
14800 c 14900 c i 5·000 c
15100 15200
15300 c 15400 c 15500 c 15600 c 15700 c 15800 c 15900 c 16000 c 16100 c
16200 75 16300 16400
16500 16600
16700 c
16800 16900
17000

!CODE = J !STAT = IOSBW(l)
I F ( · NOT . I ) I STAT = I
RETURN END
******************* READAST *******************
SUBROUTINE READAST(MYCSR) IMPLICIT INTEGER*4(S) CHARACTER*36 ALPHA EXTERNAL SETAST,INTENA INTEGER*2 ICHAN,MYCSR(4) BYTE DATA(36) COMMON ICSR,K,L,ICHAN COMMON /CHAR/ ALPHA
Note that the only valid (FORTRAN) equivalence for a character string is to a BYTE variable.
EQUIVALENCE (ALPHA(l:),DATA(l))
The data buffer register for the paper tape reader follows the paper tape reader CSR. Note that only the low order byte contains data. Note also, references to device registers must reference those locations as bytes or words only, not as longwords.
DATA(K)=MYCSR(2)
Increment index into string, and see if all done reading characters by comparing index to number of characters desired.
K=K+l IF (K .LE. L) GOTO 75
If all done, awaken main subroutine (SUB).
CALL SYS$WAKE ( , ) RETURN
Must reenable attention ast for next character since attention ast only good for one interrupt. Note that a separate subroutine is required since the QIO is not allowed to specify the same ast routine address as the routine from which the QIO is being issued. Interrupts are also reenabled, and the next character is read from the paper tape reader (via subroutine INTENA).
CALL SETAST(O) CALL INTENA(%VAL(ICSR)) RETURN END
******************* SETAST *******************
SUBROUTINE SETAST(ITYPE) IMPLICIT INTEGER*4(S)

17100
17200 17300 17400
17500
17600 17700
17800 c
17900 c
18000 c
18100 c
18200
18300 c
18400 c
18500 c 18600 c 18700 c
18800 18900
19000
19100 c
19200 c 19300 c 19400 c
19500 c
19600 98 19700
19800 c
19900 c 20000 c
20100 99
20200 20300
20400 20500
20600 c
20700
20800 20900
21000 c 21100 c 21200 c
21300 c 21400 c
21500 c
21600 c
21700
21800 c 21900 c
22000 c
22100
22200 22300 22400
22500 c
22600 22700
22800
22900 c
23000 c

CHARACTER*36 ALPHA EXTERNAL IO$ SETMODE,READAST,!0$ SETCHAR,PNCHAST INTEGER*2 ICHAN,IOSBW(4) INTEGER*4 IOSB(2) COMMON ICSR,K,L,ICHAN COMMON /CHAR/ ALPHA EQUIVALENCE (IOSBW(l),IOSB(l))

Check to see if requesting a reader attention ast (ITYPE=O), or a punch attention ast (!TYPE .NE. 0).

IF (!TYPE .NE. 0) GOTO 98

Request reader attention ast, specifying as the routine to service the ast subroutine READAST, and specifying as the ast parameter the CSR of the paper tape reader.

I=SYS$QIOW(,%VAL(ICHAN),I0$ SETMODE,IOSB,,,READAST,

1%VAL(ICSR),,,,)

-

GOTO 99

Request punch attention ast, specifying as the routine to service the ast subroutine PNCHAST, and specifying as the ast parameter the CSR of the paper tape reader.

I=SYS$QIOW(,%VAL(ICHAN),IO$ SETCHAR,IOSB,,,PNCHAST, 1%VAL( ICSR),,,,)

Check on system service error

IF (.NOT. I) CALL SYS$EXIT(%VAL(I)) IF (IOSBW(l) .NE. 1) CALL SYS$EXIT(%VAL(IOSBW(l))) RETURN END

******************* INTENA *******************

SUBROUTINE INTENA(MYCSR) INTEGER*2 GO,MYCSR(4)

DECIMAL 65 = HEX 41 = BINARY 01000001 which corresponds to the READER and INTERRUPT ENABLE bits in the paper tape reader control and status register. These bits must be set to enable interrupts and to allow the reading of the next character on the paper tape.

DATA GO /65/

Set the appropriate bits in the paper tape CSR

MYCSR(l) = (MYCSR(l) .OR. GO) RETURN END

******************* PNCHENA *******************

SUBROUTINE PNCHENA(MYCSR) INTEGER*2 GO,MYCSR(4)

DECIMAL 64 = HEX 40 = BINARY 01000000 which corresponds to thE

n100 23200 23 3 0 0 23400 23500 23600 23700 23800 23900 24000 24100 24200 24300 24400 2450 0
~4600
~4 700 24800
~4900
25000 ~ 510 0 25200 25300
~5400
25500 25600 257 0 0 ~ 58 0 0 ~ 590 0 ~ 6 ffO 0
~6100
2620 0 26300 26400 26500 26600 26700 26800 26900 27000 27100 27200 ~ 7300 27400 27500 27600 27700 27800 27900 28000 28100 28200 28300 28400 28500 28600 28700 28800 28900 29000

c c c c c c c
c
c c c c c c c c c c c c c c c c c c c c
650
c

INTERRUPT ENABLE bit in the paper tape punch's control and status register. This bit must be set to allow the punching of characters. The bit needs to be set only once.
DATA GO /64/
Set the appropriate bits in the punch's CSR
MYCSR(3) = (MYCSR(3) .OR. GO) RETURN END
******************* PNCHDAT *******************
SUBROUTINE PNCHDAT(MYCSR) IMPLICIT INTEGER*4(S) CHARACTER*36 ALPHA CHARACTER*l NEXT EXTERNAL SETAST,I0$ SETCHAR INTEGER*2 ICHAN,MYCSR(4),IOSBW(4) INTEGER*4 IOSB(2) BYTE DATA COMMON ICSR,K,L,ICHAN COMMON /CHAR/ ALPHA
Note that the only valid equivalence for a character string is to a BYTE variable.
EQUIVALENCE (NEXT,DATA),(IOSBW(l),IOSB(l))
Reenable attention ast for next character.
CALL SETAST(l)
The paper tape punch is started by writing a character in the punch's data buffer (in this case, MYCSR(4)). Only the low order byte contains data.
NEXT = ALPHA(K:K) MYCSR(4) = DATA
Increment index into string, and see if all done punching characters by comparing index (K) to number desired (L).
K=K+l IF (K .LE. L) GOTO 650
If all done, awaken main subroutine (SUBTWO) after disabling the last attention ast requested
I=SYS$QIOW(,%VAL(ICHAN),IO$ SETCHAR,IOSB,,,,,,,,) IF (.NOT. I) CALL SYS$EXIT(%VAL(I)) IF (IOSBW(l) .NE. 1) CALL SYS$EXIT(%VAL(IOSBW(l))) CALL SYS$WAKE(,) RETURN END
******************* SUBTWO *******************
SUBROUTINE SUBTWO

29100 c
29200 c 29300 c
29400 c 29500 c 29600 c 29700 c
29800 29900 30000 30100 30200
30300
30400 c 30500 c 30600 c
30700 c 30800 c
30900 31000 31100
31200 c 31300 c 31400 c
31500
31600 c
31700 c 31800 c
31900
32000 c 32100 c 32200 c
32300 c
32400 32500
32700
32900 33000
33100 c
33200
33300 33400
33500 33600
33700 33800
33900 c 34000 c 34100 c 34200 c
34300
34400 34500

This subroutine will punch (L) characters from the character string alpha. K serves as an index into the string. If more than (36) characters are desired, the character statement! have to be edited to the appropriate maximum length in this subroutine, and all subroutines called by this subroutine.
IMPLICIT INTEGER*4(S) EXTERNAL PNCHAST,SETAST,PNCHENA,PNCHDAT COMMON ICSR,K,L,ICHAN COMMON /CHAR/ ALPHA INTEGER*2 ICHAN CHARACTER*36 ALPHA
It is assumed that a channel has already been assigned to the punch (as in subroutine SUB), and that the CSR address has beer placed into ICSR (via a SENSECHAR QIO -- see subroutine SUB).
ALPHA='ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' K=l L=36
Enable punch interrupts
CALL PNCHENA(%VAL(ICSR))
Punch first character (will set up attn. ast)
CALL PNCHDAT(%VAL(ICSR))
Wait for all characters to be punched (determined by subroutine PNCHAST, who issues the WAKE system service).
I=SYS$HIBER() IF (.NOT. I) CALL SYS$EXIT(%VAL(I)) RETURN END
******************* PNCHAST *******************
SUBROUTINE PNCHAST(MYCSR) EXTERNAL PNCHDAT COMMON ICSR,K,L,ICHAN COMMON /CHAR/ ALPHA INTEGER*2 ICHAN,MYCSR(4) CHARACTER*36 ALPHA
This subroutine passes control to subroutine PNCHDAT. It is included so PNCHDAT doesn't specify itself as the ast routine.
CALL PNCHDAT(%VAL(ICSR)) RETURN END

PRINTER.LIS PRINTER.COM CINLOAD.COM

PRINTER Table of contents

( 1)

2697

( 1)

9402

( 1)

10702

( 1)

17102

( 1)

27702

Local Data System Mapped Data System Mapped Routines Main Program AST Routine For Each Printer Interrupt

12-SEP-1984 18:02:55 VAX-11 Macro V03-01

Page 0

PRINTER V01

12-SEP-1984 18:02:55 VAX-11 Macro V03-01

Page 1

26-MAR-1980 08:10:58 WORK2:[COURSE.DRIVER.RT]PRINTER.MA(l)

0003FF4C 0000014C 001009FF
00000001 00000000 00000002 00000040 00000080 00008000 000001FB 00000020 00000000 OOOOOOOA 00000001

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000
0000 0000
opoo
0000
0000

100

. TITLE PRINTER

110

. ID ENT /VO 1I

120

130

CONNECT TO INTERRUPT EXAMPLE

140

200

300

400

This program controls the line printer using the connect

500

to interrupt system service scheme. The printer's CSR is

600

A0777514, it has two registers (CSR first, then data register).

700

The printer is activated by placing a value to be printed in the

800

data register. The printer generates an interrupt after the

900

character is printed if the interrupt enable bit in the CSR

1000

is set. The program wil 1 prompt the user for data,

1100

and then print the data (tel ling the user each character that

1200

was printed).

1300

1310

AUTHOR:

Viktors J. Muiznieks

25-March-1980

1500

1600

System macros for defining offsets and symbols

1700

1800

1900 2000 2100 2200 2300 2400

$CINDEF $CRBDEF $IDBDEF $IODEF $I0780DEF $UCBDEF

connect to interrupt channel request block interrupt data block I/O function codes 11-780 adapter codes unit control block

2500 2600

$VECDEF

CRB vector fields

2605

2610

Local Symbol Definitions

2615

2620

2625 CSR = A0777514 2630 CSR PAGE OFFSET = <CSR&AXlFF> 2635 PFN-= <I0780$AL UBOSP+CSR>@-9 2640
2645 PAGE COUNT = 1
2650.STATUS = 0
2655 DATA = 2
2660 INT ENABLE = AX40
2665 READY = AX80
2670 ERR BIT = AX8000 2675 MAX-TT BYTES = 507
2680 LF BUFFER CR = 32 2685 CR-= 13 -
2690 LF = 10
2692 EXPECTED = 1
2695

printer CSR register page off set of CSR PFN for printer reg. 's @-9 divides by 512 reg. fit on 1 page status reg. offset data reg. offset int. enable bit
printer ready bit printer error bit entered by user TT carriage control carriage return 1 ine feed int. expected bit

2697

.SBTTL Local Data

PRINTER VOl

Local Data

12-SEP-1984 18:02:55 VAX-11 Macro V03-01

Page 2

26-MAR-1980 08:10:58 WORK2:[COURSE.DRIVER.RT]PRINTER.MA(1)

0000 0000 0000 0000 3A 30 41 50 4C 5F 00000008'010EOOOO' 0000 OOOE 54 54 00000016'010EOOOO' OOOE 0018 0000 0018 001A 0000 001A 00000000 00000000 001C 0024 0024 0024 0024 00000200' 0024 00000200' 0028 002C 002C 002C 002C 002C
002C 70 20 65 62 20 6F 74 20 61 74 61 44 002C 3E 52 43 3C 28 20 64 65 74 6E 69 72 0038 20 3A 29 65 6E 6F 6E 20 72 6F 66 20 0044
00000024 0050 0050
69 72 70 20 64 65 68 73 69 6E 69 46 0050 63 61 72 61 68 63 20 67 6E 69 74 6E 005C
20 72 65 74 0068 006C
00 006C 0000001D 006D
006D 72 72 75 63 63 6F 20 72 6F 72 72 45 006D G9 74 GE 69 72 70 20 GE 69 20 64 G5 0079 72 70 20 2D 20 61 74 61 64 20 67 6E 0085 69 74 72 6F 62 61 20 6D 61 72 67 6F 0091
2E 67 6E 009D 00000033 OOAO
OOAO OOAO OOAO OOAO OOAO
OOAO 00000000 OOAO
00000000 OOA4 00000200' OOA8 0000022F' OOAC
OOBO 0000023D' OOBO 00000000' OOB4
0088

2700

i2800
2900 3100 3200 3300

Parameters for $ASSIGN and $0IO system services

EVICE NAME:

- .ASCID I LPAO:/

T NAME:

-

; printer descriptor ; terminal descriptor

3400 I -

~ASCID /TT/

3500 tT CHAN:

3600

.WORD

; terminal channel # .

3700 DEVICE CHAN:

; printer channel #

3800

- .WORD

3900 IOSB: .QUAD

; IOSB for $0IO tails

4100

4200

Parameters for $CRMPSC system service to map the Unibus I/O page

4300 4500

M' AP

ADR:

for $CRMPSC

4600

-

.ADDRESS

AX200

start address (PO)

4700

.ADDRESS

AX200

end address (PO)

4800

4900

5000

Messages sent to the terminal user

5100

5200

5300 PROMPT STRING:

; for terminal user

5400

.ASCII /Data to be printed (<CR> for none): I

5500 PROMPT LENGTH = . - PROMPT STRING

5600 AST STRING:

-

5700

-

.ASCII /Finished printing character I

sent in AST routine

5800 CHARACTER:

5900

.BYTE

6000 AST LENGTH = - AST STRING

6100 ERROR STRING:

; if print error occurs

6200

.ASCII /Error occurred in printing data - program aborting./

6300 ERR LENGTH

ERROR STRING

6400

8200

8300

Parameters used by connect to.interrupt $0IO system service

8400

8500

8600 ROUTINE OFFSET LIST:

8700

-.LONG 0

; powerfail recovery

8800

.LONG 0

; start I/O

8900

.LONG LP INTERRUPT - SHARED BUFFER START ; interrupt service

9000

.LONG LP-CANCEL - SHARED BUFFER START ; cancel I/O

9100 SHARED BUFFER DESC~

9200

.LONG- SHARED BUFFER END - SHARED BUFFER START ; buffer length

9300

.LONG SHARED-BUFFER-START

-

;-buffer starting addr.

9402

.SBTTL System Mapped Data

PRINTER VOl

System Mapped Data

12-SEP-1984 18:02:55 VAX-11 Macro V03-01

Page 3

26-MAR-1980 08:10:58 WORK2: [COURSE.DRIVER.RT]PRINTER.MA(l)

0088 0088 0088 0088 0088 0088 0088 00000000 0000 0000 00 0000 000001FC 0001 000001FE OlFC 00 01FE
00 01FF 0200 0200

9500 9600 9700 9800 9900 10000 10100 10200
10300 10400 10500 10600 10640 10680
10690 10700 10702

Shared buffer for use by program and service routines. Note that the buffer is aligned to begin on a page boundary, and given write acce~s. Both the data area and the service routines are described by the shared buffer descriptor.

.PSECT SHAREDBUF,PAGE,WRT
SHARED BUFFER START: - .BYTE- 0
TTDATA: .BLKB MAX TT BYTES .BLK8 2 -
CURRENT: .BYTE 0 FLAGS: . BYTE 0
.S8TTL System Mapped Routines

used as index max. 507 bytes for <CR> <LF>
data printed expected int. flag

PRINTER V01

System Mapped Routines

12-SEP-1984 18:02:55 VAX-11 Macro V03-01

Page 4

26-MAR-1980 08:10:58 WORK2:[COURSE.DRIVER.RT]PRINTER.MA(1)

50 27 F9 AF 01
F4 AF 54 64 64 OOSO SF
15 64 SOOO SF
OE 53 04 A2
54 63 53 54 05 AF 63 50 0000 8F
50 24 A5 50 2C BO 60 0040 SF

0200 10800

Note that since offsets must be specified in the routine

0200 10900

offset list above, the following service routines must be

0200 11000

placed immediately following the shared buffer data area.

0200 11100

0200 11400

The LP INTERRUPT routine is called (in kernel mode, in system

0200 11500

context) after the printer generates an interrupt. The inputs are

0200 11600

R2 - address of counted argument list

0200 11700

R4 - address of IDB

0200 11800

R5 - address of UCB

0200 11900

0200 12000

The counted argument list contains the following items:

0200 12100

O(R2) - count of arguments (4)

0200 12200

4(R2) - system mapped address of shared buffer

0200 12300

8(R2) - address of AST parameter

0200 12400

12(R2) - IDB address

0200 12500

16(R2) - UCB address

0200 12600

0200 12700

The routine will place the character printed into the CURRENT

0200 12800

location, and request that an AST be delivered (by placing

0200 12900

a 1 in RO before issuing an RSB). If any error occurred in

0200 13000

the print operation, a 0 is placed into CURRENT. If the

0200 13010

interrupt is unexpected, no AST is requested (RO cleared).

0200 13100

0200 13200

The routine must preserve all registers except RO-R4.

0200 13300

0200 13800 LP INTERRUPT:

interrupt service

04 0200 13810

CLRL

RO

assume unexpected int.

E5 0202 13820

BBCC

#EXPECTED,FLAGS,NO AST

dismiss if unexpected

94 0207 13900

CLRB

CURRENT

assume printer error

DO 020A 14000

MOVL

IDB$L CSR(R4),R4

get CSR address

83 0200 14100

BITW

#READV,STATUS(R4)

printer ready?

13 0212 14200

BEQL

Q AST

error if not

83 0214 14300

BITW

#ERR BIT,STATUS(R4)

printer error?

12 0219 14400

BNEQ

Q AST

yes if NEQ

DO 0218 14500

MOVL

4(R2),R3

get buff er address

9A 021F 14600
co 0222 14700

MOVZBL (R3),R4 ADDL2 R4,R3

get index to char. point' to char'.

90 0225 14800

MOVB

(R3),CURRENT

specify current data

3C 0229 14900 Q AST: MOVZWL #SS$_NORMAL,RO

request AST delivery

05 022E 15000 NO AST: RSB

022F 15200

022F 15300

The LP CANCEL routine is called (in kernel mode, in system

022F 15400

context) when the process is being disconnected from the

022F 15500

interrupt. This routine wil 1 disable printer interrupts. The

022F 15600

inputs to the routine are as follows:

022F 15800

R2 - negated value of channel index number

022F 15900

R3 - IRP address

022F 16000

R4 - PCB address for process cancelling I/O

022F 16100

R5 - UCB address

022F 16400 LP CANCEL:

DO 022F 16500

MOVL

DO 0233 16600

MOVL

AA 0237 16700

BICW

UCB$L CRB(R5),RO @CRB$L INTD+VEC$L IDB(RO),RO #INT ENABLE,STATUS(RO)

cancel I/O routine get CRB get CSR address disable interrupts

05 023C 16800

RSB

0230 17000 SHARED BUFFER END:

0230 17102

.SBTTL Main Program

PRINTER V01

Main Program
0230 17200 0230 17300 0230 17400 0230 17500 0230 17600 0230 17700 00000000 17800 0000 17900 0000 0000 18000 START: 0002 18100 0002 18200 0002 18300 0002 18400 03 50 EB 0017 18500 014C 31 001A 18600 0010 18700 10$: 03 50 EB 0032 18800 0131 31 0035 18900 0038 19000 0038 19100 0038 19200 0038 19300 0038 19400 0038 19500 0038 19600 0038 19700 0038 19800 0038 19900 0038 20000 0038 20100 0038 20200 003S 20300 003S 20400 0038 20500 0038 20600 20$: 003S 20700 0038 20800 003S 20900 003S 21000 03 50 ES 0066 21100 OOFD 31 0069 21200 006C 21300 006C 21400 006C 21500 006C 21600 30$: 006C 21700 006C 21900 006C 22000 006C 22100 006C 22200 006C 22300 006C 22400 03 50 ES 009F 22500 OOC4 31 00A2 22600 OOA5 22700 OOA5 22SOO OOA5 22900

12-SEP-1984 18:02:55 VAX-11 Macro V03-01

Page 5

26-MAR-19SO 08:10:5S WORK2:[COURSE.DRIVER.RT]PRINTER.MA(1)

The start of the main routine that wil 1 actually control the printer, after mapping to the I/0 page and connecting to a printer interrupt.

.PSECT CODE,EXE,NOWRT,PAGE

.WORD 0

nul 1 entry mask

Assign channels to terminal and printer

$ASSIGN S DEVNAM=TT NAME,CHAN=TT CHAN

BLBS -R0,10$

-

BRW

ERROR

$ASSIGN S DEVNAM=DEVICE NAME,CHAN=DEVICE CHAN

BLBS -R0,20$

-

BRW

ERROR

Map Unibus I/O page ijnto process PO space so device registers are accessible. Flags indicate that section is to be mapped at end of PO region (which will be expanded to accomodate the new addresses since the SEC$M EXPREG bit is set); the PO region is identified because the INADR argument contains addresses in the PO range. The SEC$M PFNMAP bit indicates that the mapping
should be done by a pfn Tn the VBN argument (rather than by the default virtual block number mapping scheme). The region mapped can be written to by the program since the SEC$M WRT bit is also set (i.e;, device registers can be written Io by the program). Note that only one page (PAGCNT parameter) is mapped. If the device registers 'straddle' a page boundary, then more than one page should be mapped.

$CRMPSC_S

BLBS BRW

R0,30$ ERROR

INADR = MAP ADR ,-

; map thto PO region

RETADR= MAP-ADR ,-

; return actual addr.

FLAGS = #$EC$M WRT!SEC$M PFNMAP!SEC$M EXPREG,-

PAGCNT= #PAGE COUNT ,- ; only need 1-page

VBN

#PFN -

; pfn for mapped page

Issue connect to interrupt $QIO

$QIO S CHAN = DEVICE CHAN ,-

; specify printer chan

- FUNC = #IO$ CONINTWRITE ,-

; al low write buffer

Pl = SHARED-BUFFER DESC ,-

; shared buffer desc.

P2 = #ROUTINE OFFSET LIST ,-

; routines provided

P3=#<<3@16>!CIN$M EFN!CIN$M TSR!CIN$M CANCEL!CIN$M REPEAT>,-

P4 = #LP AST ,-

-

P5 = #0 ~-

-

AST after interrupt

no AST parameter used

P6 = #1

AST count of 1

BLBS

R0,40$

BRW

ERROR

Ask user for data to be printed

·r

,-,·,

PRINTER V01
03 50 OOSD
0000001E'EF 5A
55 0000001E'EF 52 00000001'EF
52 55 62 OAOD SF
52 55 55 02 54 0000014C SF 00000024'EF 53 02 A4 OOOOOOOO'EF 64 0040 BF OOOOOOOO'EF 00 000001FF'EF 01 63 B2
E5 55 64 0040 BF
FF67
lA 50
09 50

Main Program

OOA5 23000 40$:

OOA5 23100

ODA5 23200

ES OOD6 23300

31 OOD9 23400

OODC 23500 ;

OODC 23600 ;

OODC 23700 ;

B5 OODC 23SOO 50$:

13 OOE2 23900

3C OOE4 24000

DE OOEB 24100
co OOF2 24110

BO OOF5 24120

C2 OOFA 24130 co OOFD 24140

Cl 0100 24200

3E 010C 24300

94 0110 24400

AB 0116 24500

96 0118 24600 60$:

E3 0121 24610

90 0129 24700 70$:

012C 24SOO

F5 0133 24900

AA 0136 25000

31 013B 25100

013E 25200

013E 25300

013E 25400 ;

013E 25500 ;

013E 25600 DONE:

E9 014C 25700

014F 25SOO

E9 015D 25900

0160 26000

0169 26100

0169 26200

0169 26300 ;

0169 0169

26400 26500

E' RROR:

0172 26600

0172 27702

12-SEP-1984 18:02:55 VAX-11 Macro V03-01

Page 6

26-MAR-1980 08:10:58 WORK2:[COURSE.DRIVER.RT)PRINTER.MA(1)

$QIOW_S CHAN=TT_CHAN,FUNC=#I0$_READPROMPT,IOSB=IOSB,-

P1=TTDATA,P2=#MAX_TT_BYTES,P5=#PROMPT_STRING,-

P6=#PROMPT LENGTH

BLBS

R0,50$

BRW

ERROR

Print data user entered, or exit if no data to print

TSTW

IOSB+2

BEQL

DONE

MOVZWL IOSB+2,R5

MOVAL TTDATA,R2

ADDL2 R5,R2

MOVW

#<CR>+<LF@8>,(R2)

SUBL2 R5,R2

ADDL2 #2,RS

ADDL3 MAP ADR,#CSR PAGE OFFSET,R4

MOVAW DATA(R4),R3 -

CLRB

SHARED BUFFER START

BISW

#INT ENABLE,STATUS(R4)

INCB

SHARED BUFFER START

BBCS

#EXPECTED,FLAGS,70$

MOVB

(R2)+,(R3)

$HI BER S

SOBGTR R5,60$

BICW

#INT ENABLE,STATUS(R4)

BRW

40$

; check byte count ; exit if zero ; save byte count ; point to data ; point to end of data ; insert <CR> <LF>
; restore pointer ; account for <CR> <LF> ; point to CSR ; point to data reg. ; initialize index ; set int. enable bit ; adjust byte index ; indicate int. expected ; print a character ; wait for AST to wake ; loop if more to print
; disable printer i '"t.
; get more user data

User doesn't want any more data printed

$DASSGN S CHAN=TT CHAN

BLBC

RO.ERROR

$DASSGN S CHAN=DEVICE CHAN

BLBC

RO, ERROR

$EXIT S

; clean up channels

Error occurred -- report it to user $EXIT S CODE=RO .SBTTL AST Routine For Each Printer Interrupt

PRINTER VOl

AST Routine For Each Printer Interrupt

12-SEP-1984 18:02:55 VAX-11 Macro V03-01

Page 7

26-MAR-1980 08:10:58 WORK2:[COURSE.DRIVER.RT]PRINTER.MA(l)

0000

OOOOOlFE'EF OD 91

41

13

OOOOOlFE'Ef OA 91

38 13

000001FE'EF 95

3C 13

0000006C'EF 000001FE'EF 90

04

0172 0172 0172 0172 0172 0172 0172 0172 0172 0172 0172 0172 0174 0178 017D 0184 0186 018C 018E 0199 0199 0199 01BE 01C9 OlCA OlCA 01CA OlEF OlFC 01FC

27800 27900 28000 28100 28300 28400 28500 28600 28700 28800 28900 29000 29140 29180 29220 29260 29300 29400 29410 29500 29600 29700 29800 29900 30000 30100 30200 30300 30400 30500

LP_AST:
10$: ERR:

This AST routine is entered whenever the device generates an interrupt, and the process-supplied AST routine places a success code in RO before issuing the RSB. The routine displays for the user the character printed, and awakens the main procedure to print the next character (unless there was an error in the printing of the character, indicated by CURRENT containing a 0, in which case an error message is displayed to the user, and the image exits).

.WORD 0

; null entry mask

CMPB

#CR.CURRENT

; was character a <CR>?

BEQL

10$

; if so, no message

CMPB

#LF,CURRENT

; was character a <Lf>?

BEQL

10$

; if so, no message

TSTB

CURRENT

; 0 ==> printer error

BEQL

ERR

; report error

MOVB

CURRENT,CHARACTER

; save char. printed

$QIOW_S CHAN=TT CHAN,FUNC=#IO$ WRITEVBLK,- ; tell user that

Pl=AST STRING,P2=#AST LENGTH,- ; character has been

P4=#LF-BUFFER CR

-

; printed

$WAKE_S

; print next character

RET

$QIOW_S CHAN=TT CHAN,FUNC=#IO$ WRITEVBLK,- ; tell user that

Pl=ERROR STRING,P2=#ERR LENGTH,-; error occurred in

P4=#LF BUFFER CR

; printing

$EXIT_S CODE=#SS$_DRVERR

; and stop

.END

START

PRINTER Symbo 1 tab 1e
$$Tl AST LENGTH AST-STRING
CHARACTER CIN$M CANCEL CIN$M-EFN CIN$M-ISR CIN$M-REPEAT CR -
CRB$L I NTD. CSR -
CSR PAGE OFFSE;T CURRENT -
DATA DEVICE CHAN DEVICE-NAME DONE -
ERR ERROR ERROR STRING ERR BIT ERR-LENGTH
EXPECTED FLAGS IDB$L CSR INT ENABLE !0$-CONINTWRITE IO$-READPROMPT 10$-WRITEVBLK
I07SO$AL UBOSP IOSB LF LF BUFFER CR LP-AST LP-CANCEL LP-I N-TERRUPT MAP ADR MAX-TT BYTES NO AST PAGE COUNT
PFN PROMPT LENGTH PROMPT-STRING Q AST -
READY ROUTINE OFFSET LIST SEC$M EXPREG SEC$M-PFNMAP SEC$M-WRT SHARED BUFFER DESC SHARED-BUFFER-END
SHARED-BUFFER-START SS$ DRVERR SS$-NORMAL
START STATUS SYS$ASSIG'N

00000001

00000010

00000050 R

01

0000006C R

01

00000080

00000001

00000040

00000004

OOOOOOOD

0000002~

0003FF4C

0000014C

000001FE R

03

00000002

OOOOOOlA R

01

00000000 R

01

0000013E R

04

000001CA R

04

00000169 R

04

00000060 R

01

00008000

00000033

00000001

OOOOOlFF R

03

00000000

00000040

00000030

00000037

00000030

20100000

OOOOOOlC R

01

OOOOOOOA

00000020

00000172 R

04

0000022F R

03

00000200 R

03

00000024 R

01

000001FB

0000022E R

03

00000001

001009FF

00000024

0000002C R

01

00000229 R

03

00000080

OOOOOOAO R

01

******** x 04

******** x 04

******** x 04

OOOOOOBO' R

01

0000023D R

03

00000000 R

03

******** x 04

******** x 03

00000000 R

04

00000000

******** GX 04

SYS$CRMPSC SYS$DASSGN SYS$EXIT SYS$HIBER SYS$QIO SYS$QIOW SYS$WAKE TTDATA TT CHAN TT-NAME
UCB$L CRB
VEC$L=IDB

12-SEP-1984 18:02:55 VAX-11 Macro V03-01

Page 8

26-MAR-1980 08:10:58 WORK2:[COURSE.DRIVER.RT]PRINTER.MA(1)

******** GX 04

******** GX 04

******** GX 04

******** GX 04

******** GX 04

******** GX 04

******** GX 04

00000001 R

03

00000018 R

01

OOOOOOOE R

01

00000024

00000008

PRINTER Psect synopsis

12-SEP-1984 18:02:55 VAX-11 Macro V03-01

Page 9

26-MAR-1980 08:10:58 WORK2:[COURSE.DRIVER.RT]PRINTER.MA(1)

Psect synopsis ------------+

PSECT name
ABS BLANK $ABS$ SHAREDBUF CODE

Al location

PSECT No. Attributes ----~---- ----'--- ...... --.......:.

00000000

0.) 00 ( 0.) NOPIC USR CON ABS LCL NOSHR NOEXE NORD NOWRT NOVEC BYTE

OOOOOOB8

184.) 01 ( 1.) NOP IC USR CON REL LCL NOSHR EXE RD

WRT NOVEC BYTE

00000000

0.) 02 ( 2.) NOPIC USR CON ABS LCL NOSHR EXE RD

WRT NOVEC BYTE

00000230

573,) 03 ( 3.) NOP IC USR CON REL LCL NOSHR EXE RD

WRT NOVEC PAGE

000001FC

508.) 04 ( 4.) NOP IC USR CON REL LCL NOSHR EXE RD NOWRT NOVEC PAGE

---------+ ! Performance indicators !
+------~-----------------+

Phase

Page faults

CPU Time

Elapsed Time

Initialization Command processing Pass 1 Symbol table sort Pass 2 Symbol table output Psect synopsis output Cross-reference output Assembler run totals

104 128 828
14 207
10
5 0 1299

00:00:00.31 00:00:00.50 00:00: 11.02 00:00:01.32 00:00:01 ;73 00:00:00.08 00:00:00.03 00:00:00.00 00:00:14.99

00:00:01.24 00:00:02.19 00:00: 14.03 00:00:01.33 00:00:01 .92 00:00:00.15 00:00 00.03 00:00 00.00 00:00 20.89

The working set limit was 500 pages. 48128 bytes (94 pages) of virtual memory were used to buffer the intermediate code. There were 50 pages of symbol table space allocated to hold 852 non-local and 8 local 307 source lines were read in Pass 1, producing 17 object records in Pass 2. 26 pages of virtual memory were used to define 25 macros.

symbols.

! Macro ~ibrary statistics

Macro library name

Macros defined

SVS$SVSROOT:(SYSLIB]LIB.MLB;1

6

SVS$SYSROOT:(SVSLIB]STARLET.MLB;1

16

TOTALS (al 1 1 ibraries)

22

996 GETS were required to define 22 macros.

There were no errors, warnings or information messages.

MACRO/LIS PRINTER+SYS$LIBRARY:LIB/LIB

100 $ ! 200 $ ! 300 $MACRO/LIS PRINTER+SYS$LIBRARY:LIB/LIB 400 $LINK PRINTER,SYS$SYSTEM:SYS.STB/SEL

PRINTER.COM

100 200 300 400 500 600 700 800 900 1000 1100

$ ! $ ! $MCR SYSGEN CONNECT LPA0/ADAPTER=3/VECTOR=%0200/CSR=%0777514/DRIVER=CONINTERR SHO /DEV=CON USE CURRENT SHOW REALTIME SPTS EXIT

CINLOAD.COM


Acrobat 11.0.23 Paper Capture Plug-in