z/OS V1R7.0-V1R12.0 MVS Device Validation Support
Previous topic | Next topic | Contents | Index | Contact z/OS | Library | PDF


Sample of a Unit Information Module (UIM)

z/OS V1R7.0-V1R12.0 MVS Device Validation Support
SA22-7586-01

********************************* TOP OF DATA *************************
*
*       The CBDSUIM member in SYS1.SAMPLIB can be used as a model
*       by customers when writing a Unit Information Module (UIM).
*       Customer-written UIMs are used to define non-IBM I/O units,
*       including devices, control units and ESCON directors,
*       in an I/O configuration. UIMs are invoked by the
*       Hardware Configuration Definition (HCD), by MVS IPL, and
*       by MVS Dynamic Activate.
*
*       For each UIM, a corresponding UDT must be developed.
*
*       Instructions:
*
*       1) Define a name for your UIM, of the format
*          CBDUCnnn, with nnn between 001 and 256.
*          Note: The sample UIM uses the number 255. If you like
*                to use another number, replace the number.
*
*       2) Copy this Sample UIM to a PDS member with the name
*          chosen for your UIM.
*
*       3) Change all strings "CBDUC255" in the UIM to the
*          chosen name.
*
*       4) Change the UIM according to your needs.
*
*       5) Separate the JCL at the end of the UIM,
*          and correct the names in the JCL.
*          Assemble and link-edit your UIM using the JCL.
*
*---------------------------------------------------------------------
*  Note:
*  If you write an UIM, you should know the hardware and software
*  configuration characteristics of the I/O unit that needs a UIM
*  and should be familiar with the basic concepts of MVS and IOCP.
*
*  Following additional documentation is required:
*
*  - z/OS MVS Device Validation Support
*  - >
*  - IOCP User's Guide
*---------------------------------------------------------------------
*  Attention: The UIM must not use any MVS services, except those
*             described in the manual z/OS MVS Device Validation Support
*
**********************************************************************
         TITLE 'CBDUC255: Sample UIM'
*   * START OF SPECIFICATIONS ****************************************
*
*01* MODULE NAME = CBDUC255
*
*01* DESCRIPTIVE NAME = SAMPLE UIM
*
**********************************************************************
*   PROPRIETARY STATEMENT =
*
*    LICENSED MATERIALS - PROPERTY OF IBM
*    THIS SAMPLE IS "RESTRICTED MATERIAL OF IBM"
*    5655-068 (C) COPYRIGHT IBM CORP. 1990, 1995
*
*   END PROPRIETARY STATEMENT
**********************************************************************
*
*01* FUNCTION =
*
*      This sample UIM describes 2 sets of DASD equipment:
*
*      Control Units:             39CC-6            93CC
*
*      Devices attachable
*      to above control units:    33UU-1            93UU
*                                 33UU-2
*                                 33VV
*
*      MVS GENERIC names
*      for above devices:         33GG              93GG
*
*      The following parameters are recognized for the 33UU-1, 33UU-2
*      and 33VV DASD devices:
*         Common parameters:  OFFLINE, DYNAMIC, FEATURE
*         Private parameter:  DASDPOOL
*
*      The following features are recognized for the 33UU-1, 33UU-2
*      and 33VV DASD devices:
*         SHARED, SHAREDUP, ALTCTRL
*
*      The following parameters are recognized for the
*      and 93UU DASD device:
*         OFFLINE, DYNAMIC, FEATURE
*
*      The following features are recognized for the 93UU DASD
*      device:
*         ALTCTRL
*
*
*02*   OPERATION =
*      This unit information module defines the device dependent
*      support for the 33GG and 93GG DASD DEVICES.
*
*    o When called with the initialization call,
*
*    - CBDUC255 builds the parameter list for the Generic Information
*      Table and calls the GIT Build Routine to create the GITs
*      for the following generics:
*                 .33GG
*                 .93GG
*
*    - CBDUC255 builds the parameter list for the Unit Information
*      Table and calls the UIT Build Routine to create the UITs
*      for the following devices:
*                 .33UU-1 and its look-alike devices 33UU-2, 33VV
*                 .93UU
*
*    - CBDUC255 builds the parameter list for the Control Unit
*      Information Table and calls the CIT Build Routine to
*      create the CITs for the following control units:
*                 .39CC-6
*                 .93CC
*
*    - CBDUC255 builds the parameter list for the Device
*      Characteristics Table and calls the DCT Build Routine to
*      create the DCTs for the following devices:
*                 .33UU
*                 .93UU
*
*    o When called by the HCD validation routines with a parameter
*      check request,
*      no parameter check is performed because there are no
*      additional rules for the provided parameters than
*      those already supported by HCD.
*
*    o When called by the HCD validation routines with a feature
*      check request,
*      the features the user specified, contained in the IODV,
*      are validity checked.
*
*    o When called by the HCD validation routines with a device number
*      check request,
*      no device number check is performed as no special rules for the
*      device number are applicable for 33GG and 93GG devices.
*
*    o When called by the HCD validation routines with a unit address
*      check request, it is checked if the starting unit address of
*      a 93UU device definition is even-numbered.
*
*    o When HCD runs in Report Mode and during IPL and dynamic
*      activation, CBDUC255 is called to build the parameter list
*      for the Device Feature Table build routine for each device
*      defined in the IODF.
*      The DFTs are used to build the UCBs for the configuration.
*
*    o When, during MVS IPL, CBDUC255 is called for end-of-data
*      processing, no special action is taken as no end-of-data
*      processing is required.
*                                                                     *
*03*     RECOVERY OPERATION =
*          If an unexpected error occurs in CBDUC255, the ESTAE
*          routine CBDMSTAE established in module CBDMGHCP
*          will provide the diagnostic information.
*          No recovery is done during IPL. Any unexpected errors
*          during IPL will cause a wait state to be loaded.
*
*01* NOTES =
*
*02*   DEPENDENCIES = None
*
*02*   RESTRICTIONS = None
*
*01* MODULE TYPE = Procedure
*
*02*   PROCESSOR = ASSEMBLER-H
*
*02*   MODULE SIZE = For exact size see assembler listing
*
*02*   ATTRIBUTES =
*
*03*     LOCATION = Private
*
*03*     STATE = Problem
*
*03*     AMODE = 31
*
*03*     RMODE = Any
*
*03*     KEY = User
*
*03*     MODE = Task
*
*03*     SERIALIZATION = None
*
*03*     TYPE = Non-reusable
*
*01* ENTRY POINT = CBDUC255
*
*02*   PURPOSE = See FUNCTION
*
*02*   LINKAGE = Standard Linkage
*
*03*     CALLERS =
*          HCD Routines
*          (Functional Initialization routine,
*           Validation routines,
*           Report routine),
*          IPL Routine
*          Dynamic Activate Routine
*
*01* INPUT =
*       UCA
*       IODV (anchored off UCA),
*       for the following request types:
*            UCARADDR
*            UCARDFTB
*            UCARPARM
*            UCARFEAT
*            UCARUADD
*
*
*02*   ENTRY REGISTERS =
*        Register     0 - Undefined
*        Register     1 - Pointer to a one word parameter list,
*                         defined as follows:
*                           Word 1 - Address of the UCA
*        Registers 2-12 - Undefined
*        Register    13 - Address of an 18-word save area
*        Register    14 - Return address
*        Register    15 - Entry point address
*
*
*01* OUTPUT =
*       Causes GITs for generics supported by this UIM to be built.
*       Causes UITs for devices  supported by this UIM to be built.
*       Causes CITs for CUs      supported by this UIM to be built.
*       Causes DCTs for each defined device type to be built.
*       Causes DFTs for devices  supported by this UIM to be built.
*       Modifies the UCA.
*
*02*   EXIT REGISTERS =
*        Registers 0-15 - Restored to contents on entry
*
*02*   RETURN CODES = see UCA ( set in UCA )
*
*01* EXIT NORMAL = Returns to the caller
*
*01* EXIT ERROR = None
*
*01* EXTERNAL REFERENCES =
*
*02*   ROUTINES =
*        CIT Build Routine
*        DCT Build Routine
*        DFT Build Routine
*        GIT Build Routine
*        UIT Build Routine
*
*02*   DATA AREAS =
*        CBDZDIAG - Diagnostic Stack Entry
*
*02*   CONTROL-BLOCKS =
*        Common name  Macro Name   Usage
*        -----------  ----------   -----------
*        CIP          CBDZCIP      write
*        DCE          IECDDCE      read
*        DCP          CBDZDCP      write
*        DFP          CBDZDFP      write
*        GIP          CBDZGIP      write
*        IODV         CBDZIODV     read
*        MSGR         CBDZMSG      write (via CBDIMSG)
*        UCA          CBDZUCA      read/write
*        UCB          IEFUCBOB     read
*        UIP          CBDZUIP      write
*
*01* TABLES = None
*
*01* MACROS EXECUTABLE =
*      CBDIMSG   -  Write Message
*      CBDIPPDS  -  Push/Pop Diagnostic Stack Entry
*
*01* CHANGE ACTIVITY =
*
*    $H0= HCD   HCSH501 940501 BOEB: Sample UIM for DASD I/O
*    $H4= OSA   HCSH521 941011 BOEB: Open systems adapter support
*    $H1= OW12423 HCSH521 950504 BOEB: Quality enhancements
*                                - Documentation of function codes
*                                - Add MODCAT to CBDZDIAG statement
*
*01* SERIALIZATION = None
*
*01* MESSAGES =
*
*      CBDB805I   Features (SHARED) and (SHAREDUP) are mutually
*                 exclusive for device type dddddddd.
*
*      CBDB814I   The left-most digit of unit address nn for device
*                 type dddddddd must be even.
*
*01* ABEND CODES = None
*
*01* WAIT STATE CODES = None
*
***** END OF SPECIFICATIONS *******************************************
         EJECT
**********************************************************************
*
*              Initial House-keeping
*
**********************************************************************
         SPACE 1
CBDUC255 CSECT
CBDUC255 RMODE ANY
CBDUC255 AMODE 31
         SPACE 1
         USING *,R15
         USING UCA,UCAPTR           Define pointer to UCA
         USING ITRH,IODVPTR         Define pointer to IODV
         B     START
         SPACE 1
         DC    AL1(LENGTH-LENEBCDC) Length of EBCDIC description
LENEBCDC DC    C'CBDUC255 '         EBCDIC description of module
         DC    C'&SYSDATE';          Compile date
LENGTH   EQU   *
         SPACE 2
START    STM   R14,R12,12(R13)      Save caller's registers
         LR    R11,R15              Set base register contents
         DROP  R15                  Drop R15 as base register
         USING CBDUC255,R11         Establish addressability to
*                                   UIM csect
         ST    R13,SAVAREA+4        Establish backward linkage in
*                                   current savearea
         LA    R10,SAVAREA          Obtain savearea address
         ST    R10,8(R13)           Establish forward linkage in
*                                   caller's savearea
         LR    R13,R10              Places this UIMs own savearea
*                                   address in register 13
         L     UCAPTR,0(R1)         Establish addressability to UCA
         L     IODVPTR,UCAIODVP     Establish addressability to IODV
*
**********************************************************************
*  Pushes a new entry on the diagnostic stack.
*  The entry
*  - provides diagnostic information for abnormal termination
*  - causes a trace entry to be written into the HCD.TRACE dataset,
*    when the HCD trace is active.
**********************************************************************
         SPACE 1
         CBDIPPDS PUSH,DIAG=DIAGDATA,REQ=UIM
         SPACE 1
         LA    R0,UCARCOK           Set up good return code
         ST    R0,UCARETC           Initialize return code
*
         EJECT
**********************************************************************
*
*        Determine what function the UIM is called to perform
*---------------------------------------------------------------------
*
*  Whenever the UIM is called, the field UCAUIMRT is set by the
*  calling routine with one of the request types listed below.
*
*  Request Type:       UIM function to be performed:
*
*  UCARINIT            Initialization request
*                      as required:
*                         build GIT
*                         build UIT
*                         build DCT (only for DASD devices)
*                         build CIT
*                         build SIT (only for ESCON directors)
*  UCARDFTB            DFT build request
*  UCARADDR            Device Number check
*  UCARPARM            Parameter check
*  UCARFEAT            Feature check
*  UCARUADD            Unit Address check
*  UCAREOD             End of data processing
*
*  On each call, the UIM must analyze the Request Type and call the
*  appropriate internal routines.
*  The UIM may be called with Request Types which are not applicable
*  to this UIM, in this case the UIM must perform no operation,
*  and return to the calling routine.
*
*---------------------------------------------------------------------
*              Handle Initialization Request
*---------------------------------------------------------------------
*
         CLI   UCAUIMRT,UCARINIT    Initialization request ?
         BNE   TSDFTBLD             ..No, branch to test if called for
*                                   another request
         BAL   R14,BUILDGIT         Calls routine to build the GIT
         BAL   R14,BUILDUIT         Calls routine to build the UIT
         BAL   R14,BUILDCIT         Calls routine to build the CIT
         BAL   R14,BUILDDCT         Calls routine to build the DCT
         B     EXIT                 Branch to leave routine
         SPACE 1
*---------------------------------------------------------------------
*              Handle DFT Build Request
*---------------------------------------------------------------------
*
TSDFTBLD DS    0H
         CLI   UCAUIMRT,UCARDFTB    Test the caller's function code
*                                   to determine if the purpose of this
*                                   call is to build the DFTs
         BNE   TSADDCHK             ..No, branch to test if called for
*                                   another request                @H1C
         BAL   R14,BUILDDFT         Call routine to build DFTs
         B     EXIT                 Branch to leave routine
*
         SPACE 1
*---------------------------------------------------------------------
*              Handle Device Number Check Request
*---------------------------------------------------------------------
*
TSADDCHK DS    0H                                                  @H1A
*        CLI   UCAUIMRT,UCARADDR    Test the caller's function code
*                                   to determine if the purpose of this
*                                   call is to check the device number
*                                                                  @H1A
*        BNE   TSPRMCHK             ..No, branch to test if called for
*                                   another request                @H1A
*        BAL   R14,ADDRCHEK         Call routine to check device # @H1A
*        B     EXIT                 Branch to leave routine        @H1A
*
*        SPACE 1                                                   @H1A
*---------------------------------------------------------------------
*              Handle Parameter Check Request
*---------------------------------------------------------------------
*
TSPRMCHK DS    0H                                                  @H1A
*        CLI   UCAUIMRT,UCARPARM    Test the caller's function code
*                                   to determine if the purpose of this
*                                   call is to check the device
*                                   parameters                     @H1A
*        BNE   TSFEACHK             ..No, branch to test if called for
*                                   another request                @H1A
*        BAL   R14,PARMCHEK         Call routine to check device
*                                   parameters                     @H1A
*        B     EXIT                 Branch to leave routine        @H1A
*
*        SPACE 1                                                   @H1A
*---------------------------------------------------------------------
*              Handle Feature Check Request
*---------------------------------------------------------------------
*
TSFEACHK DS    0H
         CLI   UCAUIMRT,UCARFEAT    Test the caller's function code
*                                   to determine if the purpose of this
*                                   call is to check the device
*                                   features.
         BNE   TSUADCHK             ..No, branch to test if called for
*                                   another request
         BAL   R14,FEATCHEK         Call routine to check the features
*                                   of the passed device
         B     EXIT                 Branch to leave routine
*
         SPACE 1
*---------------------------------------------------------------------
*              Handle Unit Address Check Request
*---------------------------------------------------------------------
*
TSUADCHK DS    0H
         CLI   UCAUIMRT,UCARUADD    Test the caller's function code
*                                   to determine if the purpose of this
*                                   call is to check the device
*                                   unit address.
         BNE   TSEODPRO             ..No, branch to test if called for
*                                   another request               @H1C
         BAL   R14,UADDCHEK         Call routine to check the features
*                                   of the passed device
         B     EXIT                 Branch to leave routine
*
         SPACE 1
*---------------------------------------------------------------------
*              Handle Parameter Check Request
*---------------------------------------------------------------------
*
TSEODPRO DS    0H                                                  @H1A
*        CLI   UCAUIMRT,UCAREOD     Test the caller's function code
*                                   to determine if the purpose of this
*                                   call is end of data processing @H1A
*        BNE   TSOTHERS             ..No, branch to test if called for
*                                   another request                @H1A
*        BAL   R14,PROCEOD          Call routine for end of data
*                                   processing                     @H1A
*        B     EXIT                 Branch to leave routine        @H1A
*
*        SPACE 1                                                   @H1A
*---------------------------------------------------------------------
*              Handle other Request(s)
*---------------------------------------------------------------------
*
*        There are no other requests.
*        Return to the calling routine.
*
TSOTHERS DS    0H
         EJECT ,
**********************************************************************
*
*              Final House-keeping
*
*---------------------------------------------------------------------
*
*  Pops the top entry from the diagnostic stack.
*
EXIT     DS    0H
         CBDIPPDS POP,DIAG=DIAGDATA,REQ=UIM
*
*---------------------------------------------------------------------
*  Restores caller's registers and returns
*---------------------------------------------------------------------
*
         L     R13,4(R13)           Obtains callers savearea.
         LM    R14,R12,12(R13)      Restore caller's registers.
         BR    R14                  Return to caller.
*
         EJECT
*
**********************************************************************
*
*    Procedure: BUILDGIT
*
*    Descriptive Name: Build Generic Information Parameter
*
*    Function:  Builds the Generic Information Tables (GITs)
*               for the device types supported by this UIM.
*
*    Operation: Fills in the Generic Information Parameter
*               and calls the GIT Build Routine to create
*               the GIT.
*
**********************************************************************
*  The Generic Information Table GIT is used to register
*  GENERIC device names to MVS.
*  For every GENERIC name, the UIM must set the Generic Information
*  Parameters GIP, and call the HCD routine to build the GIT.
*  (The information provided with the GIP is stored in the GIT.)
*  The GIP layout is defined in macro CBDZGIP.
*
*  All GIP fields set in this sample UIM are mandatory.
*
*  The UCB TYPE values for units, configured by means of HCD, can
*  be seen in the HCD "MVS Device Report".
*
*  The generic preference value for a generic device must
*  be UNIQUE, which means no other generic device in the
*  same MVS must have the same value.
*  For preference values used by IBM units, refer to the
*  appendix of "z/OS MVS Device Validation Support"
*
*  For affinity index values dedicated to IBM units and values
*  reserved for users, refer to macro CBDZGIP.
*
*---------------------------------------------------------------------
*  Following GIP fields are not set by this sample UIM
*
*  Name       Description                      Remarks
*  ----------|-------------------------------|------------------------
*  GIPCMPNL  |Compatible generic device name |Used by tape UIMs
*            |list                           |
*  GIPCMPNM  |Compatible generic device name |Used by tape UIMs
*            |                               |
*  GIPDENL   |Densities supported list       |Used by tape UIMs
*  GIPDENSY  |Density                        |Used by tape UIMs
**********************************************************************
**********************************************************************
*
*          Builds GIT Routine.
*
*        This routine initializes the GIT build parameter list and
*        then calls the GIT Build Service Routine.
*
**********************************************************************
*
BUILDGIT DS    0H
         ST    R14,SAVWORD1         Place return address in savearea.
**********************************************************************
*
*   Builds GIT parameter list for 33GG.
*
**********************************************************************
         XC    GIP,GIP              Zero out GIT build parameter list.
         MVC   GIPID,GIPIDNM        Insert control block ID
         MVI   GIPVER,GIPVERN       Place version number in parameter
*                                   list.
         MVC   GIPNAME,GEN33GG      Place name of generic device name
*                                   in GIP.
         MVC   GIPUCBTY,GNRCTYP1    Initialize allocation UCB type
*                                   information.
         MVC   GIPGPTPR,GNRCPRT1    Initialize generic preference
*                                   table priority.
         MVC   GIPAFFIX,=AL2(GIPNOAFF) Set the affinity index to
*                                   "No affinity consideration"
         SPACE 1
         ST    UCAPTR,PARMAREA      Store address of UCA in first word
*                                   of parmarea.
         LA    R0,GIP               Get address of GIP
         ST    R0,PARMAREA+4        Store address of GIP in second word
*                                   of parmarea.
         LA    R1,PARMAREA          Load address of parameter list
*                                   in register 1
         L     R15,UCAGITP          Pick up entry point address of     *
                                    GIT Build Routine
         BALR  R14,R15              Call routine to build GITs
         SPACE 1
***********************************************************************
*
*   Builds GIT parameter list for 93GG.
*
***********************************************************************
         XC    GIP,GIP              Zero out GIT build parameter list.
         MVC   GIPID,GIPIDNM        Insert control block ID
         MVI   GIPVER,GIPVERN       Place version number in parameter
*                                   list.
         MVC   GIPNAME,GEN93GG      Place name of generic device name
*                                   in GIP.
         MVC   GIPUCBTY,GNRCTYP2    Initialize allocation UCB type
*                                   information.
         MVC   GIPGPTPR,GNRCPRT2    Initialize generic preference
*                                   table priority.
         MVC   GIPAFFIX,=AL2(GIPNOAFF) Set the affinity index to
*                                   "No affinity consideration"
         SPACE 1
         ST    UCAPTR,PARMAREA      Store address of UCA in first word
*                                   of parmarea.
         LA    R0,GIP               Get address of GIP
         ST    R0,PARMAREA+4        Store address of GIP in second word
*                                   of parmarea.
         LA    R1,PARMAREA          Load address of parameter list
*                                   in register 1
         L     R15,UCAGITP          Pick up entry point address of     *
                                    GIT Build Routine
         BALR  R14,R15              Call routine to build GITs
         SPACE 1
         L     R14,SAVWORD1         Restore mainline's return address
         BR    R14                  and return to mainline
         EJECT
*
**********************************************************************
*
*    Procedure: BUILDUIT
*
*    Descriptive Name: Build Unit Information Parameter
*
*    Function:  Builds the UITs for the device types supported
*               by this UIM.
*
*    Operation: Fills in the Unit Information Parameter
*               and calls the UIT Build Routine to create
*               the UIT
*
**********************************************************************
*  The Unit Information Table UIT is used to register
*  type/model names and parameters of device units to HCD.
*  Only unit types which are defined by any UIT can be
*  configured by HCD and can be operated by MVS.
*
*  You can view many of the UIT fields defined by the UIM, when you
*  select "List supported devices" and in device definition panels.
*
*  For each unit type with unique configuration parameters
*  the UIM must fill the Unit Information Parameters UIP
*  and call the HCD routine to build the UIT.
*  For each UIP field, there is a corresponding UIT field.
*
*  The UIP layout is defined in the macro CBDZUIP
*
*  There are 3 UIP sections:
*  1) The General section describes device characteristics which
*     are independent from the operating system, such as type, model,
*     or attachment information, such as the maximum number of CUs
*     a device can attach to.
*     This section is required.
*  2) The MVS Section describes device characteristics which are
*     relevant for MVS only, such as generic name, device parameters
*     and features.
*     This section is required if the device is to be defined
*     as a device supported by MVS.
*  3) The VM Section - which is not shown in this sample UIM -
*     describes device characteristics which are relevant to
*     VM only, such as "RDEV device class" or "RDEV device type".
*     This section is required if the device is to be defined
*     as a device supported by VM.
*
**********************************************************************
*  Following UIP fields are not set by this sample UIM
*
*  Name       Description                      Remarks
*  ----------|-------------------------------|------------------------
*  UIPGUSER  |UIM user value for device      |Processing control field
*            |                               |At Initialization, the
*            |                               |UIM can set a value per
*            |                               |UIP. At successive calls
*            |                               |this value is passed to
*            |                               |the UIM via the field
*            |                               |UCAUSER.
*            |                               |
* UIPGDNC    |Count of device numbers to     |Used for multiple
*            |generate for each device if    |exposure devices
*            |multiple-exposure device or    |and parallel access
*            |parallel access volume         |volumes.
*            |                               |
* UIPGDNI    |Interval between device        |Used for multiple
*            |numbers when multiple device   |exposure devices
*            |numbers are generated for the  |and parallel access
*            |same device (valid only when   |volumes.
*            |the value of UIPDNC is greater |
*            |than one)                      |
* UIPGRFLG   |Replication factor flags       |Used for multiple
*            |                               |exposure devices and
*            |                               |parallel access volumes.
*            |                               |
* UIPGPFLG   |Processing flag                | HCD internal use only;
*            |                               | UIM must not set this.
*            |                               |                     @H4A
*            |                               |
* UIPGDFLG   |Default flags                  |Defines defaults for
*  UIPGFTOU  |if 1, TIMEOUT=NO is default    |parameters which are not
*  UIPGFSTA  |if 1, STADET=NO  is default    |OS specific.
*            |                               |
* UIPGATT    |Attachment information         |OS independent
*            |                               |attachment information.
*  UIPGMNCU  |max. number of CUs a device    |The # of CUs a device
*            |can be attached to             |can be attached to is
*            |if hex zero,the value enforced |restricted to this
*            |by the dialog is taken         |maximum number by HCD.
*            |                               |
* UIPGPR     |Processing flags               |HCD internal use only,
*            |                               |UIM must not set this.
*            |                               |
* UIPMCFEA   |Map of features that are       |The features defined
*            |recognized for migration       |here are tolerated, but
*            |compatibility (bits correspond |ignored during migration
*            |to sequence of compatible      |of MVSCP decks.
*            |features in UDT. - Valid only  |
*            |if IODVFFEA flag within        |
*            |UIPOPARM is set)               |
*            |                               |
* UIPMATT    |Attachment information         |MVS attachment informa-
*  UIPMNIPC  |NIPCON device type codes       |tion, set only if NIPCON
*            |                               |device.
*            |                               |
* UIPSIMFL   |Device flags                   |
*  UIPSDFLT  |Device model is default        |Indicates that, if the
*            |                               |user does not define a
*            |                               |model, the model speci-
*            |                               |fied in UIPSMODL is used.
* UIPMLTFL   |Flags                          |
*  UIPMLTOP  |MLT contains module names      |
*            |associated with a product that |
*            |provides optional support for  |
*            |this device                    |
**********************************************************************
*
*              UIT Build Routine
*
*        This routine initializes the UIT build parameter list and
*        then calls the UIT Build Service Routine.
**********************************************************************
*
BUILDUIT DS    0H
         ST    R14,SAVWORD1         Place return address in savearea.
*
*---------------------------------------------------------------------
*
*          Builds UIT parameter list for 33UU-1
*
* Note, that the CBDZUIP macro already initializes the UIP structure.
*---------------------------------------------------------------------
*      General section
*---------------------------------------------------------------------
*  Following registers the type/model name of a device to HCD
*---------------------------------------------------------------------
*
         MVC   UIPGUNIT,UNIT33UU    Place device type in UIP
         MVC   UIPGMODL,MODL1       Place the device model in UIP
*
*---------------------------------------------------------------------
*  For each Unit defined in an UIP, there must be a unit
*  description in the corresponding UDT.
*  You can view the unit description texts in HCD, by selecting the
*  "List installed UIMs" panel, and then the
*  "View Supported devices" panel.
*  There may be multiple unit descriptions in a UDT.
*  The UIPGDESI parameter is used by HCD to find the appropriate
*  unit description for a device type.
*---------------------------------------------------------------------
*
         MVI   UIPGDESI,1          Set index to the unit description
*                                  for the device concerned in the UDT
*
*---------------------------------------------------------------------
*  In the HCD "List Supported Device" panel and in the device
*  prompt panels, the devices are grouped in order
*  to facilitate the navigation among many device types.
*
*  HCD uses the UIPGGRP parameter to associate a device type to
*  a certain device group such as DASD or Tape devices.
*  Refer to macro CBDZUIP for available group values.
*---------------------------------------------------------------------
*
         MVI   UIPGGRP,UIPGDASD     Indicate that the device belongs
*                                   to the DASD group
*---------------------------------------------------------------------
*  When a device is defined in HCD, the user can specify
*  the Replication Factor (Number of Devices).
*  Following UIP fields are used to handle the Replication Factor
*
*  UIPGDDRF     Minimum Replication Factor    (required)
*
*               Specifies the minimum number of device definitions
*               to be created.
*
*  UIPGHHRF     Maximum Replication Factor    (optional)
*
*               Specifies the maximum number of device definitions
*               to be created.
*
*  UIPGDLRF     Default Replication Factor    (required)
*
*               Specifies the default value used if the number of
*               device definitions to be created was not specified.
*---------------------------------------------------------------------
*
         MVC   UIPGDDRF,=H'1'       Set default replication factor
         MVC   UIPGDLRF,=H'1'       Set minimum replication factor
*
*---------------------------------------------------------------------
*      MVS section
*---------------------------------------------------------------------
*  The following associates the device type "33UU-1" with the
*  Generic Device "33GG".
*---------------------------------------------------------------------
*
         MVC   UIPMGNNM,GEN33GG     Set name of generic device in UIP
*
*---------------------------------------------------------------------
*  The following defines the parameters and features that are
*  applicable when defining a device unit in HCD.
*
*  Generally, the parameters must be described in the associated UDT.
*  The following parameters are applicable for all device types.
*  They need not be described in the UDT.
*
*      ADDRESS   - specifies the device number
*      UNIT      - specifies the device type
*      MODEL     - specifies the device model
*
*  HCD distinguishes between required and optional parameters.
*
*---------------------------------------------------------------------
*  Required parameters
*---------------------------------------------------------------------
*
*  Parameters defined as required for a device unit must be
*  given a value when creating the device definition.
*
*  The required parameters are set in bit string UIPMRPRM.
*  The position in the bit string is given by the parameter ID.
*  The first four bytes of UIPMRPRM are reserved for common parameters,
*  Bytes 5 through 8 are used for private parameters.
*
*  The following parameters are required for all device types:
*
*      ADDRESS   - specifies the device number
*      UNIT      - specifies the device type
*---------------------------------------------------------------------
*
         OI    IODVFLG1-IODVPRMS+UIPMRPRM,IODVFADD  ADDRESS parameter
         OI    IODVFLG2-IODVPRMS+UIPMRPRM,IODVFUNI  UNIT parameter
*
*---------------------------------------------------------------------
*  Optional parameters
*---------------------------------------------------------------------
*  Parameters defined as optional for a device unit need not be
*  given a value when creating the device definition.
*
*  The optional parameters are set in bit string UIPMOPRM.
*  The position in the bit string is given by the parameter ID.
*  The first four bytes of UIPMOPRM are reserved for common parameters,
*  Bytes 5 through 8 are used for private parameters.
*---------------------------------------------------------------------
*
         OI    IODVFLG1-IODVPRMS+UIPMOPRM,IODVFMOD   MODEL parameter
         OI    IODVFLG1-IODVPRMS+UIPMOPRM,IODVFOFF   OFFLINE parameter
         OI    IODVFLG2-IODVPRMS+UIPMOPRM,IODVFDYN   DYNAMIC parameter
         OI    IODVFLG1-IODVPRMS+UIPMOPRM,IODVFFEA   FEATURE parameter
         OI    UIPMOPRM+4,DASDPPRM                  DASDPOOL parameter
*
*---------------------------------------------------------------------
*  Features
*---------------------------------------------------------------------
*  The supported features are set in bit string UIPMSFEA.
*  Features can have the values 'Yes' or 'No'. 'No' is the default
*  value, unless the corresponding feature is defined in the
*  default feature bit string UIPMDFEA; in this case, the default
*  value is set to 'Yes'.
*
*  All features must be described in the associated UDT.
*  The positions of the features in the bit string correspond to
*  to their sequence in the UDT.
*---------------------------------------------------------------------
*
         OI    UIPMSFEA,FEATACTL                     ALTCTRL feature
         OI    UIPMSFEA,FEATSHR                      SHARED  feature
         OI    UIPMSFEA,FEATSHUP                     SHAREDUP feature
*---------------------------------------------------------------------
*  Parameter default values
*---------------------------------------------------------------------
*  The UIM allows you to set defaults or initial values for
*  parameters.
*  For some common parameters, defaults are indicated by flags
*  in the UIP:
*   - UIPMDFLG specifies defaults for
*        MODEL - If UIPMFDMD is set, and the model is not specified
*                during device definition, the default
*                device model is taken from UIPGMODL.
*        OFFLINE - If UIPMFOFF is set, the device is defined
*                as offline during IPL (OFFLINE=YES).
*        DYNAMIC - UIPMFDYC indicates whether the device supports
*                dynamic reconfiguration.
*                You can set DYNAMIC=YES only if UIPMFDYC is set.
*                If UIPMFDYC is set, the device will default to be
*                dynamically reconfigurable in the HCD dialog
*                (DYNAMIC=YES).
*                Note, however, that for the migration function
*                this default does not apply; here, if DYNAMIC is not
*                specified, it is left undefined.
*
*   To provide default values for other OS specific parameters
*   (common or private), you can provide an entry in the parameter
*   default list. The entry contains the parameter ID together with
*   the default value.
*---------------------------------------------------------------------
*
         OI    UIPMDFLG,UIPMFDMD    Indicates that, if no device model
*                                   is specified, the model specified
*                                   in UIPGMODL is used as default.
         OI    UIPMFLG2,UIPMFDYC    Indicates that the device supports
*                                   dynamic reconfiguration.
*                                   The DYNAMIC parameter is
*                                   initialized to YES in the HCD
*                                   dialog.
         L     R1,UIPMDLFP          Gets address of parameter default
*                                   list.
         USING UIPDLFPL,R1          Establishes addressability to
*                                   parameter default list.
         MVC   UIPDPID,DASD_PID     Identifies parameter to which the
*                                   default applies: DASDPOOL.
         LA    R2,L'DASD_DEF        Gets length of default value
*                                   string.
         STH   R2,UIPDLEN           Stores length of default value
*                                   in parameter default list entry.
         LA    R2,DASD_DEF          Gets address of default value
*                                   string.
         ST    R2,UIPDPTR           Stores address of default value
*                                   in parameter default list entry.
         DROP  R1                   Removes addressability of parameter
*                                   default list.
*---------------------------------------------------------------------
*  Parameter selection values
*---------------------------------------------------------------------
*
*  The UIM allows you to specify the allowed values for a parameter
*  in the parameter selection list.
*
*  The values specified in the parameter selection list for a
*  parameter serve two purposes:
*  (1) They are offered via prompt in the OS/device parameter and
*      feature panel.
*  (2) The HCD validation function checks the entered value
*      against the values specified in the parameter selection list.
*      If the entered value is not contained, an error message
*      is provided, and the parameter value is rejected. This
*      technique frees the UIM from checking the valid parameter
*      values.
*
*   To provide selection values for an OS specific parameter
*   (common or private), you must provide an entry in the parameter
*   selection list. The entry contains the parameter ID together with
*   the selection values.
*---------------------------------------------------------------------
*
         L     R1,UIPMSELP          Gets address of parameter selection
*                                   list.
         USING UIPSELPL,R1          Establishes addressability to
*                                   parameter selection list.
         MVC   UIPSPID,DASD_PID     Identifies parameter to which the
*                                   selection values apply: DASDPOOL.
         LA    R2,3                 Gets the number of selection values
*                                   for the parameter.
         STH   R2,UIPSCNT           Stores the number of selection
*                                   values in the parameter selection
*                                   list entry.
         LA    R2,L'DASD_SP1        Gets length of a parameter
*                                   selection value.
         STH   R2,UIPSLEN           Stores length of selection value
*                                   in parameter selection list entry.
         LA    R2,DASD_SEL          Gets address of selection value
*                                   string.
         ST    R2,UIPSPTR           Stores address of selection values
*                                   in parameter selection list entry.
         DROP  R1                   Removes addressability of parameter
*                                   selection list.
*---------------------------------------------------------------------
*  Similar device list
*---------------------------------------------------------------------
*
*  The UIM allows you to specify for a given device
*  a list of device types which
*  are look-alikes to the device. This frees you from
*  specifying the same UIP settings and calling the
*  UIT Build routine again if only the device types and models differ.
*
*  An entry in the similar device list causes the UIT Build routine
*  to build a UIT with the same values as specified in the UIP,
*  using the device type of the similar device list entry.
*---------------------------------------------------------------------
*
         L     R1,UIPMSIMP          Gets address of similar device
*                                   list.
         USING UIPSIMDL,R1          Establishes addressability to
*                                   similar device list.
         MVC   UIPSUNIT,UNIT33UU    Moves first similar device type to
*                                   the similar device list.
         MVC   UIPSMODL,MODL2       Moves the model of the first
*                                   device type.
         LA    R1,UIPSLENG(R1)      Advance to next entry.
         MVC   UIPSUNIT,UNIT33VV    Moves second similar device type to
*                                   the similar device list.
         DROP  R1                   Removes addressability of similar
*                                   device list.
*---------------------------------------------------------------------
*   Following indicates that 4-digit device numbers for this
*   device type are supported
*---------------------------------------------------------------------
*
         OI    UIPMFLG2,UIPMFDVN    Device supports 4-digit device
*                                   numbers
*
*---------------------------------------------------------------------
*  The MLT is the list of modules representing the device code that
*  is loaded at IPL time
*---------------------------------------------------------------------
*
         LA    R2,UIPMLTNM          Initialize pointer to MLT name list
         ST    R2,UIPMMLTP          Put this value in the UIP
         MVC   UIPMLTNM,NAMEMLT     Set MLT name.
         MVC   UIPMMLTC,ONE         Set MLT count.
*
*---------------------------------------------------------------------
*  The DDT name represents a Device Definition Table that is loaded
*  at IPL time
*---------------------------------------------------------------------
*
         MVC   UIPMDDTN,NAMEDDT     Set DDT name.
**********************************************************************
*        Call UIT Build Service Routine
**********************************************************************
         ST    UCAPTR,PARMAREA      Store address of UCA in first word
*                                   of parmarea.
         LA    R0,UIP               Get address of UIP
         ST    R0,PARMAREA+4        Store address of UIP in second word
*                                   of parmarea.
         LA    R1,PARMAREA          Store address of parameter list
*                                   in register 1
         L     R15,UCAUITP          Pick up entry point address of     *
                                    UIT Build Routine
         BALR  R14,R15              Call routine to build UITs
         SPACE 1
**********************************************************************
*
*   Builds UIT parameter list for 93UU
*
**********************************************************************
*
* Since the UIP is used for another device unit, it has to
* be initialized again.
*---------------------------------------------------------------------
         XC    UIP(UIPGELN1),UIP    Zeroes out UIP list.
* Initialize the UIP header.
         MVC   UIPGID,UIPIDNM       Sets storage descriptor in header.
         OI    UIPGVER,UIPGVER1     Sets UIP version code.
         MVC   UIPGELEN,=AL2(UIPGELN1) Sets total length of UIP.
* Initialize the UIP general section.
         OI    UIPGTYP,UIPGEN       Indicates general section.
         MVC   UIPGLEN,=AL2(UIPGLN1) Sets length of general section.
* Initialize the UIP MVS section.
         OI    UIPMTYP,UIPMVS       Indicates the MVS section.
         MVC   UIPMLEN,=AL2(UIPMLN1) Sets length of MVS section.
* Initialize the parameter default area.
         LA    R2,UIPPDFLT          Loads address of parameter default
*                                   list.
         ST    R2,UIPMDLFP          Stores address of parameter default
*                                   list in UIP.
         XC    UIPPDFLT,UIPPDFLT    Zeroes out parameter default list.
* Initialize the parameter selection list.
         LA    R2,UIPPSEL           Loads address of parameter
*                                   selection list.
         ST    R2,UIPMSELP          Stores address of parameter
*                                   selection list in UIP.
* Initialize the similar device list.
         LA    R2,UIPSIMIL          Loads address of similar device
*                                   list.
         ST    R2,UIPMSIMP          Stores address of similar device
*                                   list in UIP.
         XC    UIPSIMIL,UIPSIMIL    Zeroes out similar device list.
* Initialize the MLT name list.
         LA    R2,UIPMLTNM          Initialize pointer to MLT name list
         ST    R2,UIPMMLTP          Puts this value in the UIP
         XC    UIPMLTNL,UIPMLTNL    Zeros out the MLT name list
*---------------------------------------------------------------------
* Fills in the values for device unit 93UU.
*---------------------------------------------------------------------
**********************************************************************
*      General section
**********************************************************************
         MVC   UIPGUNIT,UNIT93UU    Place device type in UIP
         XC    UIPGMODL,UIPGMODL    Clear out model field
         MVI   UIPGDESI,1           Set index to the unit description  *
                                    for the device concerned in the UDT
         MVI   UIPGGRP,UIPGDASD     Indicate to what group the device  *
                                    belongs
         MVC   UIPGDDRF,=H'1'       Set default replication factor
         MVC   UIPGDLRF,=H'1'       Set minimum replication factor
**********************************************************************
*      MVS section
**********************************************************************
         MVC   UIPMGNNM,GEN93GG     Place name of generic device in UIP
         OI    IODVFLG2-IODVPRMS+UIPMRPRM,IODVFUNI  UNIT parameter
*
         OI    IODVFLG1-IODVPRMS+UIPMRPRM,IODVFADD   ADDRESS parameter
         OI    IODVFLG1-IODVPRMS+UIPMOPRM,IODVFOFF   OFFLINE parameter
         OI    IODVFLG2-IODVPRMS+UIPMOPRM,IODVFDYN   DYNAMIC parameter
*
         OI    IODVFLG1-IODVPRMS+UIPMOPRM,IODVFFEA   FEATURE parameter
         OI    UIPMSFEA,FEATACTL                     ALTCTRL feature
*
         OI    UIPMFLG2,UIPMFDYC    Device supports dynamic
*                                   configuration
         OI    UIPMFLG2,UIPMFDVN    Device supports 4-digit device
*
*                                   numbers
*
         MVC   UIPMLTNM,NAMEMLT     Initialize MLT name.
         MVC   UIPMMLTC,ONE         Initialize MLT count.
         MVC   UIPMDDTN,NAMEDDT     Initialize DDT name.
**********************************************************************
*        Call UIT Build Service Routine
**********************************************************************
         ST    UCAPTR,PARMAREA      Store address of UCA in first word
*                                   of parmarea.
         LA    R0,UIP               Get address of UIP
         ST    R0,PARMAREA+4        Store address of UIP in second word
*                                   of parmarea.
         LA    R1,PARMAREA          Store address of parameter list
*                                   in register 1
         L     R15,UCAUITP          Pick up entry point address of     *
                                    UIT Build Routine
         BALR  R14,R15              Call routine to build UITs
         SPACE 1
         L     R14,SAVWORD1         Restore mainline's return address
         BR    R14                  and return to mainline
*
         EJECT
*
**********************************************************************
*
*    Procedure: BUILDDCT
*
*    Descriptive Name: Build Device Characteristics Parameters
*
*    Function:  Fills in the Device Characteristics Parameters
*               for the devices defined by this UIM
*
*    Operation: Fills in the Device Characteristics Parameters
*               for the devices defined by this UIM and calls the
*               DCT Build Routine to create a DCT entry
*
**********************************************************************
*
*              DCT Build Routine
*
*        This routine initializes the DCT build parameter list and
*        then calls the DCT Build Service Routine
*
**********************************************************************
*
BUILDDCT DS    0H
         ST    R14,SAVWORD1         Place return address in savearea.
**********************************************************************
*
*          Builds the device characteristics table entry for a
*          33GG device.
*
**********************************************************************
         XC    DCP,DCP              Zero out DCT build parameter list.
         MVC   DCPID,DCPIDNM        Insert control block ID
         MVI   DCPTYPE,DCP3390      Sets index into DCT
         MVC   DCPLNGTH,=AL1(DCPEND-DCPENTRY) Sets length of DCP entry.
         MVC   DCPCYL,=H'1113'      Sets physical number of cylinders
*                                   per volume.
         MVC   DCPTRK,=H'15'        Sets number of tracks per cylinder.
         MVC   DCPOVR0,=H'1428'     Sets record 0 overhead.
         MVC   DCPSECT,=AL1(224)    Sets total number of records
         MVC   DCPBPSEC,=H'272'     Sets bytes per sector.
         MVC   DCPTRKLN,=AL2(58786) Sets number of bytes per track.
         OI    DCPFLAGS,DCPMODU     Indicates track requires modulo
*                                   arithmetic.
         MVC   DCPMOD1,=H'34'       Sets modulo factor.
         MVC   DCPALT,=H'15'        Sets number of alternate tracks.
         SPACE 1
         ST    UCAPTR,PARMAREA      Store address of UCA in first word
*                                   of parmarea.
         LA    R0,DCP               Get address of DCP
         ST    R0,PARMAREA+4        Store address of DCP in second word
*                                   of parmarea.
         LA    R1,PARMAREA          Store address of parameter list
*                                   in register 1
         L     R15,UCADCTP          Pick up entry point address of     *
                                    DCT Build Routine
         BALR  R14,R15              Call routine to build DCTs
         SPACE 1
**********************************************************************
*
*          Builds the device characteristics table entry for a
*          93GG device.
*
**********************************************************************
         XC    DCP,DCP              Zero out DCT build parameter list.
         MVC   DCPID,DCPIDNM        Insert control block ID
         MVI   DCPTYPE,4            DCPTYPE of 9345 used
         MVC   DCPLNGTH,=AL1(DCPEND-DCPENTRY) Sets length of DCP entry.
         MVC   DCPCYL,=H'1440'      Sets physical number of cylinders
*                                   per volume.
         MVC   DCPTRK,=H'15'        Sets number of tracks per cylinder.
         MVC   DCPOVR0,=H'1184'     Sets record 0 overhead.
         MVC   DCPSECT,=AL1(213)    Sets total number of records
         MVC   DCPBPSEC,=H'238'     Sets bytes per sector.
         MVC   DCPTRKLN,=AL2(48280) Sets number of bytes per track.
         OI    DCPFLAGS,DCPMODU     Indicates track requires modulo
*                                   arithmetic.
         MVC   DCPMOD1,=H'35'       Sets modulo factor.
         MVC   DCPALT,=H'15'        Sets number of alternate tracks.
         SPACE 1
         ST    UCAPTR,PARMAREA      Store address of UCA in first word
*                                   of parmarea.
         LA    R0,DCP               Get address of DCP
         ST    R0,PARMAREA+4        Store address of DCP in second word
*                                   of parmarea.
         LA    R1,PARMAREA          Store address of parameter list
*                                   in register 1
         L     R15,UCADCTP          Pick up entry point address of     *
                                    DCT Build Routine
         BALR  R14,R15              Call routine to build DCTs
         SPACE 1
         L     R14,SAVWORD1         Restore mainline's return address
         BR    R14                  and return to mainline
*
         EJECT
*
**********************************************************************
*
*    Procedure: BUILDCIT
*
*    Descriptive Name: Build Control Unit Information Parameter
*
*    Function:  Fills in the Control Unit Information Parameters
*
*    Operation: Fills in the Control Unit Information Parameters
*               and calls the CIT Build Routine to create the CIT.
*
**********************************************************************
*
*  The Control Unit Information Table CIT is required by HCD
*  for the validation of a control unit definition.
*  For each CU type, a separate CIT is required.
*  Only control unit types defined by any CIT can be configured
*  with HCD.
*
*  The CIT contains parameters such as:
*      type, model, attachment information, minimum/maximum values,
*      default values
*
*  You can view many of the CIT values in the HCD "Supported
*  Control Units" panel, and in dialog panels used to define
*  control units.
*
*  The UIM must set the Control Unit Information Parameters CIP
*  and call the HCD routine to build the CIT.
*  The CIP information is stored in the CIT.
*
*  The CIP layout is defined in the macro CBDZCIP.
*
**********************************************************************
*  Following CIP fields are not set by this sample UIM
*
*  Name       Description                      Remarks
*  ----------|-------------------------------|------------------------
*  CIPFLAG   |Flag byte                      |
*   CIPFCUD  |If 1, device and CU are        |
*            |physically the same            |
*   CIPFDMOD |If 1, this model is the default|If the user does not
*            |model for this CU              |specify a CU model,
*            |                               |HCD uses the model
*            |                               |defined in this CIP
*            |                               |as default model
*            |                               |
*  CIPPRFLG  |Processing flags               |HCD internal use only,
*            |                               |the UIM must not set
*            |                               |
*  CIPRUAN   |recommended number of          |
*            |unit addresses                 |
*            |(contains hex zero, if no value|
*            |is defined)                    |
*            |                               |
*  CIPMINDV  |minimum number of devices      |
*            |connected to the control unit  |
*            |(contains hex zero, if no value|
*            |is defined)                    |                     @H4A
*            |                               |
*  CIPCUTYP  |CU type                        |
*   CIPCUCTC |CU type = CTC                  |Set for CTC virtual CU
*            |                               |only
*   CIPCUSWI |CU type = Switch               |Set for ESCON director
*            |                               |virtual CU only
*   CIPCUOSA |CU type = OSA                  |Set for open systems
*            |                               |adapter only         @H4A
*            |                               |
*  CIPLMXNO  |Maximum number of logical      |
*            |control units supported        |
*            |(contains hex zero, if no value|
*            |is defined)                    |
*            |                               |
*  CIPUADEF  |Unit address rules for control |
*            |unit                           |
*   CIPMINUA |Min. number of unit addresses  |The user must define at
*            |                               |least this # of unit
*            |                               |addresses.
*            |                               |The user should specify
*            |                               |at least this number of
*            |                               |devices. Otherwise, at
*            |                               |build production IODF
*            |                               |time, a warning message
*            |                               |is issued.
*            |                               |
*   CIPMAXUA |Max. number of unit addresses  |The user must not define
*            |                               |more than this # of unit
*            |                               |addresses.
*   CIPMXUAR |Maximum number of unit address |
*            |ranges supported by CU         |
*            |                               |
*  CIPVALUA  |Valid unit addresses; unit     |Can only be set if
*            |addresses are mapped to bit    |CIPEXTPT is set; must be
*            |array.                         |set if CIPEXTPT is set.
*            |                               |                     @H4A
*            |                               |
*  CIPREQUA  |Unit addresses required to be  |Can only be set if
*            |defined for the control unit;  |CIPEXTPT is set; must be
*            |unit addresses are mapped to   |set if CIPEXTPT is set.
*            |bit array.                     |                     @H4A
*            |                               |
*  CIPPROUA  |Unit addresses recommended to  | Can only be set if
*            |be defined for the control unit| CIPEXTPT is set; must be
*            |                               | set if CIPEXTPT is set.
*            |                               |                     @H4A
*   CIPRUARN |Number of address ranges in the| A maximum of 8 unit
*            |array of recommended unit      | address ranges may be
*            |addresses                      | specified.          @H4A
*   CIPRUARS |Structure of recommended unit  | Array of 8          @H4A
*            |address ranges                 |                     @H4A
*    CIPRUA  |Starting unit address          |                     @H4A
*    CIPRUARF|Replication factor             | Specify the range value
*            |                               | reduced by 1.       @H4A
*            |                               |
*  CIPLPATH  |Logical path information       |
*   CIPMXPTH |max. number of logical paths   |
*            |supported by the control unit. |
*            |(contains hex zero if no max.  |
*            |is defined)                    |
*   CIPMNGRP |Minimum group attachment value | If CIPMXPTH is set to
*            |The counted number of logical  | a value greater than
*            |paths per channel path type    | zero, CIPMNGRP must
*            |is rounded to the next multiple| also be set to a value
*            |of this value before the check | greater than zero.
*            |against CIPMXPTH is performed. |
*            |                               |
*  CIPEXTPT  |Pointer to CIP extension area  | If CIPEXTPT is set the
*            |(contains hex zero, if no value| following fields must
*            |is defined)                    | be set, too:
*            |                               | CIPVALUA, CIPREQUA,
*            |                               | CIPPROUA            @H4A
**********************************************************************
**********************************************************************
*
*              CIT Build Routine
*
*        This routine initializes the CIT build parameter list and
*        then calls the CIT Build Service Routine.
*
**********************************************************************
BUILDCIT DS    0H
         ST    R14,SAVWORD1         Place return address in savearea.
         SPACE 1
**********************************************************************
*
*          Builds CIP for control unit 93CC.
*          Note: The CBDZCIP macro already initializes the
*                CIP data structure.
*
**********************************************************************
*  Following registers the control unit type '93CC' w/o model
*  number to HCD.
*  In HCD, this control unit type must be defined to identify the CU.
*---------------------------------------------------------------------
*
         MVC   CIPUNIT,CNTL93CC     Place control unit name in CIP
         XC    CIPMODL,CIPMODL      Indicate that the control unit does*
                                    not have a model number
*
*---------------------------------------------------------------------
*  In the HCD "List Supported Control Units" panel and in the
*  control unit prompt panels, the CUs are grouped
*  in order to facilitate the navigation among many CU types.
*
*  HCD uses the CIPGROUP parameter to associate a CU type to
*  a certain CU group such as DASD or tape control units.
*  Refer to macro CBDZCIP for available group values.
*
*  The following associates the control unit to the group of DASD CUs.
*---------------------------------------------------------------------
*
         MVC   CIPGROUP,=A(CIPGDASD) Get control unit group for this CU*
                                    and store into CIP
*
*---------------------------------------------------------------------
*  The UIM can define which channel protocols are supported
*  by the CU and which protocol is default.
*  Every protocol is represented by a bit, multiple protocols can
*  be defined as being supported, but only one default protocol.
*  For available protocols and defaults refer to CBDZCIP.
*
*  Here, '3.0 MB data streaming' and '4.5 MB data streaming' is set,
*  as default '3.0 MB data streaming' is defined.
*---------------------------------------------------------------------
*
         MVI   CIPSPROT,CIPSPSTR+CIPSP4MB       Set supported protocols*
                                    for this CU
         MVI   CIPDPROT,CIPDPDS     Set default protocol  =
*                                          data streaming protocol
*
*---------------------------------------------------------------------
*  CIPATTT defines to which channel path types a CU is attachable.
*  Every channel path type is represented by a bit, multiple channel
*  path types can be defined, for all possible channel path types
*  refer to field CIPATTT in macro CBDZCIP.
*
*  Following, the channel path types for BL, CNC and CVC are set.
*---------------------------------------------------------------------
*
         MVC   CIPATTT,=AL2(CIPATBL+CIPATSER+CIPATFX)                  *
                                    Sets attachment information for    *
                                    this CU.
*
*---------------------------------------------------------------------
*  CIPUADEF defines the unit address rules for the control unit.
*  - CIPMINUA specifies the minimum number of unit addresses that
*    must be assigned to a control unit when defining it.
*  - CIPMAXUA specifies the maximum number of unit addresses that
*    can be assigned to a control unit when defining it.
*  - CIPMXUAR specifies the maximum number of unit addresses ranges
*    that can be assigned to a control unit when defining it.
*
*  HCD validates these rules and rejects any definitions not
*  adhering to them.
*
*  The following statements specify that for a 93CC control unit:
*  - at least 32 unit addresses must be specified
*  - at most  64 unit addresses can be specified
*  - at most   1 unit address range can be specified
*---------------------------------------------------------------------
*
         MVC   CIPMINUA,MINUA32   Specifies that at least 32 unit      *
                                    addresses must be specified.
         MVC   CIPMAXUA,MAXUA64   Specifies that at most  64 unit      *
                                    addresses can  be specified.
         MVC   CIPMXUAR,MAXUAR1   Specifies that at most 1 unit        *
                                    address range can be specified.
*
*---------------------------------------------------------------------
*  The following defines the rules and limits for the CUADD parameter.
*  CUADD parameters apply to ESCON control units which support
*  logical addressing. IBM processors allow a maximum range
*  of logical addresses of 0..15.
*
*  The next instructions define the following for control unit 93CC:
*  - Setting CIPLFCUS  indicates, that this CU supports logical
*    addresses
*  - Setting CIPLFRS indicates, that a CUADD range is defined.
*  - The minimum value for CUADD is set to 0
*  - The maximum value for CUADD is set to 8 (the highest value
*    which can be set into CIPLMAX is 15).
*---------------------------------------------------------------------
*
         MVI   CIPLFLGS,CIPLFRS+CIPLFCUS   Sets Logical CU addressing  *
                                           flags
         MVI   CIPLMIN,0            Sets minimum value of allowed CUADD
         MVI   CIPLMAX,8            Sets maximum value of allowed CUADD
*
*---------------------------------------------------------------------
*  The default I/O concurrency level is correlated to the "SHARED"
*  parameter of an IOCP CNTLUNIT macro instruction.
*  For all available defaults refer to CBDZCIP.
*
*  Next, a default value of type 2 is specified, which means SHARED=NO,
*  multiple I/O requests are allowed.
*---------------------------------------------------------------------
*
         MVI   CIPDIOCL,CIPDIOT2    Set default I/O concurrency level
*
*---------------------------------------------------------------------
*  The following defines that HCD checks for unit address range
*  starting with X'00', if the CU is attached to an ESCON channel
*---------------------------------------------------------------------
*
         OI    CIPVALF,CIPUAES0     Indicates that unit address range
*                                   should start with X'00', if
*                                   connected to an ESCON channel path
*
*---------------------------------------------------------------------
*  HCD checks, that not more devices are attached to this CU,
*  than defined in CIPMXDEV (if the value is not zero).
*---------------------------------------------------------------------
*
         MVC   CIPMXDEV,MAX64       A maximum number of 64 devices
*                                   can be attached to the CU.
*
*---------------------------------------------------------------------
*  Initialize the attachable device list showing all devices which
*  can be attached to the control unit concerned.
*  The type-models in the list must be registered by a UIT.
*
*  With the model parameter CIPADEVM you can determine how a
*  device type is recognized in HCD.
*  A) When you specify an explicit model number, this number must
*     be defined in HCD.
*  B) When you specify a blank character string X'40', then
*     the device must be specified without model (only device type).
*  C) When you specify X'00' this will work like a "wild card"
*     character, which means any model can be specified, provided
*     it is defined by a UIT.
*
*  Following, a device list containing 1 entry is specified,
*  with the device type parameter CIPADEVT set to 93UU, and
*  the model parameter CIPADEVM set to X'40', see case B).
*---------------------------------------------------------------------
*
         L     R1,CIPDVLP           Pick up device address of dev list
         USING CIPADEVS,R1          Establish addressability
         MVC   CIPADEVT,UNIT93UU    Sets device unit.
         MVC   CIPADEVM,BLANKS      Device has no model.
         DROP  R1
         MVC   CIPDVLC,=F'1'        Sets count of devices in attachable
*                                   device list.
         SPACE 1
*
*---------------------------------------------------------------------
* Call CIT Build Service Routine
*---------------------------------------------------------------------
*
         SPACE 1
         ST    UCAPTR,PARMAREA      Store address of UCA in first word
*                                   of parmarea.
         LA    R0,CIP               Get address of CIP
         ST    R0,PARMAREA+4        Store address of CIP in second word
*                                   of parmarea.
         LA    R1,PARMAREA          Store address of parameter list
*                                   in register 1
         L     R15,UCACITP          Pick up entry point address of     *
                                    CIT Build Routine
         BALR  R14,R15              Call routine to build CITs
         SPACE 1
**********************************************************************
*
*   BUILDS CIP FOR Control unit 39CC-6.
*
**********************************************************************
*
* Since the CIP is used for another control unit, it has to
* be initialized again.
*---------------------------------------------------------------------
         XC    CIP(CIPADEV-CIP),CIP Zeroes out CIP list.
         MVC   CIPID,=CL4'CIP '     Sets storage descriptor in header.
         MVI   UIPGVER,X'01'        Sets CIP version code.
         LA    R2,CIPADEV           Address of attachable device list
         ST    R2,CIPDVLP           Store it into pointer
*---------------------------------------------------------------------
* Fills in the values for control unit 39CC-6.
*---------------------------------------------------------------------
         MVC   CIPUNIT,CNTL39CC     Place control unit name in CIP.
         MVC   CIPMODL,MODL6        Place control unit model in CIP.
         MVC   CIPGROUP,=A(CIPGDASD) Get control unit group for this CU*
                                    and store into CIP
         MVI   CIPSPROT,CIPSPSTR+CIPSP4MB      Set supported protocols *
                                    for this CU
         MVI   CIPDPROT,CIPDPDS     Set default protocol  =
*                                          data streaming protocol
         MVC   CIPATTT,=AL2(CIPATBL+CIPATSER+CIPATFX)                  *
                                     Set attachment information for    *
                                    this CU
*
         MVC   CIPMINUA,MINUA2    Specifies that at least 2  unit      *
                                    addresses must be specified.
         MVC   CIPMAXUA,MAXUA64   Specifies that at most  64 unit      *
                                    addresses can  be specified.
         MVC   CIPMXUAR,MAXUAR1   Specifies that at most 1 unit        *
                                    address range can be specified.
*
*
         MVI   CIPLFLGS,CIPLFRS+CIPLFCUS   Sets Logical CU addressing  *
                                           flags.
         MVI   CIPLMIN,0            Sets minimum value of allowed CUADD
         MVI   CIPLMAX,15           Sets maximum value of allowed CUADD
*
         MVI   CIPDIOCL,CIPDIOT2    Set default I/O concurrency level.
         OI    CIPVALF,CIPUAES0     Indicates that unit address        *
                                    should start with 00 if connected  *
                                    to an ESCON channel path.
*
*---------------------------------------------------------------------
*  Initialize attachable device list showing all devices which
*  can be attached to the control unit concerned
*
*  In following a device list containing 3 entries is specified.
*
*  Entry    Device Type      Device Model
*  1        '33UU'           '1'
*  2        '33UU'           '2'
*  3        '33VV'           X'40', no model
*---------------------------------------------------------------------
*
*---------------------------------------------------------------------
*
         L     R1,CIPDVLP           Pick up address of device list.
         USING CIPADEVS,R1          Establish addressability.
         MVC   CIPADEVT,UNIT33UU    Set device unit.
         MVC   CIPADEVM,MODL1       Set device model.
         LA    R1,CIPADEVL(R1)      Proceed to next entry.
         MVC   CIPADEVT,UNIT33UU    Set device unit.
         MVC   CIPADEVM,MODL2       Set device model.
         LA    R1,CIPADEVL(R1)      Proceed to next entry.
         MVC   CIPADEVT,UNIT33VV    Set device unit.
         MVC   CIPADEVM,BLANKS      Device has no model.
         DROP  R1
         MVC   CIPDVLC,=F'3'        Set count of devices in attachable
*                                   device list.
         SPACE 1
*---------------------------------------------------------------------
*        Call CIT Build Service Routine
*---------------------------------------------------------------------
         SPACE 1
         ST    UCAPTR,PARMAREA      Store address of UCA in first word
*                                   of parmarea.
         LA    R0,CIP               Get address of CIP
         ST    R0,PARMAREA+4        Store address of CIP in second word
*                                   of parmarea.
         LA    R1,PARMAREA          Store address of parameter list
*                                   in register 1.
         L     R15,UCACITP          Pick up entry point address of     *
                                    CIT Build Routine.
         BALR  R14,R15              Call routine to build CITs.
         SPACE 1
         L     R14,SAVWORD1         Restore mainline's return address
         BR    R14                  and return to mainline
     EJECT
*
**********************************************************************
*
*    Procedure: FEATCHEK
*
*    Descriptive Name: Feature Check Routine
*
*    Function:  Validity checks the specified features, sets
*               return code, and issues message.
*
*    Operation: Checks whether mutually exclusive features
*               are specified.
*               If an error occurred
*                 - sets error return code in UCA
*                 - sets a field in the UCA to indicate that
*                   the error occurred during feature check
*                 - sets a field in the UCA to indicate which
*                   feature is in error
*                 - Invokes macro CBDIMSG to issue an error
*                   message
*
*    Input:     Information contained in the internal text record
*               CBDZIODV
*
*    Output:    - Fields set in UCA
*               - Message  CBDB805I
*
**********************************************************************
FEATCHEK DS    0H
         ST    R14,SAVWORD1         Place return address in savearea.
         SPACE 1
         TM    IODVFEA1,FEATSHR+FEATSHUP  If mutually exclusive
*                                   features specified, writes message.
         BNO   FEATLBL1             .. No, return
         MVC   UCAPID,=H'4'         Sets ID of feature
*                                   where error occurred.
         MVC   UCAPPOS,=H'3'        Sets ID of feature where
*                                   error occurred.
         LA    R0,UCARCERR          Sets error return code
         ST    R0,UCARETC           into UCA parameter list.
*
*---------------------------------------------------------------------
*  The message issued below must be defined in the corresponding UDT
*---------------------------------------------------------------------
*
         CBDIMSG MID=CBDB805I,VAR1=IODVUNIT,STMT=YES,REQ=UIM
*                                   Issues message CBDB805I
         SPACE 1
FEATLBL1 DS    0H
         L     R14,SAVWORD1         Restore mainline's return address
         BR    R14                  and return to mainline
*
         EJECT
*
**********************************************************************
*
*    Procedure: UADDCHEK
*
*    Descriptive Name: Unit Address Check Routine
*
*    Function:  Validity checks the specified unit address, sets
*               return code, and issues message.
*
*    Operation: Checks for a 93UU device, whether the first digit
*               of the starting unit address is even.
*               If an error occurred
*                 - sets error return code in UCA
*                 - sets a field in the UCA to indicate that
*                   the error occurred during unit address check
*                 - Invokes macro CBDIMSG to issue an error
*                   message
*
*    Input:     Information contained in the internal text record
*               CBDZIODV
*
*    Output:    - UCA field: UCARETC
*               - Message CBDB814I
*
**********************************************************************
UADDCHEK DS    0H
         ST    R14,SAVWORD1         Place return address in savearea.
         SPACE 1
         CLC   IODVUNIT,UNIT93UU    Is it a 93UU device?
         BNE   UADDLBL1             .. No, return
         TM    IODVUNIA,X'10'       Check if low order bit of
*                                   the first digit is B'1'
*                                   in unit address of IODV record.
         BZ    UADDLBL1             .. No, return
         LA    R0,UCARCERR          Set error return code
         ST    R0,UCARETC           into UCA parameter list.
         CBDIMSG MID=CBDB814I,VAR1=(IODVUNIA,H),VAR2=IODVUNIT,         *
               STMT=YES,REQ=UIM
*                                   Issue message CBDB814I.
         SPACE 1
UADDLBL1 DS    0H
         L     R14,SAVWORD1         Restore mainline's return address
         BR    R14                  and return to mainline.
*
         EJECT
*
**********************************************************************
*
*    Procedure: BUILDDFT
*
*    Descriptive Name: Build Device Feature Parameter
*
*    Function:  Fills in the Device Feature Parameter
*
*    Operation: Fills in the Device Feature Parameter
*               and calls the DFT Build Routine to create
*               the DFT
*
*    Input:     Information supplied in the UIM
*               IODV record
*
*    Output:    DFP - Device Feature Parameter
*
**********************************************************************
*
*  The Device Feature Parameters DFP are used for building
*  the UCBs. See the comments in macro CBDZDFP.
*
*  For units configured with HCD, the values of major DFP
*  fields can be seen in the HCD "MVS Device Report".
*
**********************************************************************
*
*              DFT Build Routine
*
**********************************************************************
*
*
BUILDDFT DS    0H
         ST    R14,SAVWORD1         Place return address in savearea.
         XC    DFP,DFP              Zero out the DFP.
*
*---------------------------------------------------------------------
*  UCBs, beside the common parts, optionally may have following
*  sections:
*      Device Dependent Segment
*      Device Class Extension
*      Device Dependent Extension
*
*  As required for the DFP parameters, pointers and lengths
*  for the optional fields must be set.
*  Note:
*  In this Sample UIM no Device Dependent Extension is defined
*---------------------------------------------------------------------
*
         XC    DEVDPSEG,DEVDPSEG    Zero out the device dependent
*                                   segment.
         XC    DEVCESEG,DEVCESEG    Zero out the device class extension
         LA    R1,DEVCESEG
         LA    R0,L'DEVCESEG        Get the length of the device
*                                   class extension.
         ST    R0,DFPDCEL           Set length of device class
*                                   extension in DFP.
         LA    R0,DEVCESEG          Get address of device class
*                                   extension
         ST    R0,DFPDCEP           Set pointer to device class
*                                   extension in DFP.
         LA    R0,L'DEVDPSEG        Get the length of the device
*                                   dependent segment.
         ST    R0,DFPDDSL           Set length of device dependent
*                                   segment in DFP.
         LA    R0,DEVDPSEG          Get address of device dependent
*                                   segment.
         ST    R0,DFPDDSP           Set pointer to device dependent
*                                   segment in DFP.
         OI    DFPFL5,DFPDCC        Disconnect command chain device.
         OI    DFPFL5,DFPENVRD      Device returns environmental data.
         OI    DFPFL6,DFPIOT        Device supports I/O timing.
         MVC   DFPID,DFPCBID        Place control block ID in DFP.
         MVC   DFPVER,DFPVERN       Place the version number in DFP.
*
*---------------------------------------------------------------------
*  Following, the UCB TYPE value is set depending on the unit type
*  passed in the IODV record.
*  The UCB TYPE used here must match the value defined in the
*  GIT of the Generic Device to which the unit is associated.
*---------------------------------------------------------------------
*
         CLC   IODVUNIT,UNIT33UU    Is it a 33UU device?
         BE    DFTLBL0              .. Yes, device type found
         CLC   IODVUNIT,UNIT33VV    Is it a 33VV device?
         BNZ   DFTLBL1              .. No, continue check
DFTLBL0  DS    0H                   Start initializing DFT.
         MVC   DFPNAME,GEN33GG      Place generic name of device in DFP
         MVC   DFPUCBTY,GNRCTYP1    Initialize DFT UCB type.
         B     DFTLBL2              Continue to setting further
*                                   information.
DFTLBL1  DS    0H
         CLC   IODVUNIT,UNIT93UU    Is it a 93UU device?
         BNZ   DFTLBL3              .. No, do not set values
         MVC   DFPNAME,GEN93GG      Place generic name of device in DFP
         MVC   DFPUCBTY,GNRCTYP2    Initialize DFT UCB type.
DFTLBL2  DS    0H
         OI    DFPFLP1,DFPDYNPH     Indicate that dynamic pathing
*                                   feature is supported by the device.
         OI    DFPFLAG1,DFPPRES     Indicates that device is
*                                   permanently resident.
         MVI   DFPATI,ATTNINDX      Sets attention table index.
         MVI   DFPSNSCT,SENSBYT#    Initialize number of sense bytes.
         MVI   DFPDSTCT,STATETY#    Initialize count of statistics
*                                   table entries.
DFTLBL3  DS    0H
         MVI   DFPETI,ERPINDEX      Sets ERP index.
         TM    IODVFLG1,IODVFOFF    Offline parameter specified
*                                   at all ?
         BZ    DFTLBL4              .. No, skip ahead
         TM    IODVPFLG,IODVPOFF    Offline set on ?
         BZ    DFTLBL4              .. No, skip ahead
         OI    DFPFLAG1,DFPOFFLN    Offline, if specified
DFTLBL4  DS    0H
         TM    IODVFEAT,FEATACTL    Is ALTCTRL feature set?
         BZ    DFTLBL5              .. No, skip ahead
         OI    DFPFL5,DFPALTCU      Include feature in DFP.
DFTLBL5  DS    0H
         TM    IODVFEAT,FEATSHUP    Is SHAREDUP feature specified?
         BZ    DFTLBL6              .. No, skip ahead
         OI    DFPFLP1,DFPSHRUP     Set shareable in UP mode.
DFTLBL6  DS    0H
         TM    IODVFEAT,FEATSHR     Is SHARED feature specified?
         BZ    DFTLBL7              .. No, skip ahead
         OI    DFPTBYT2,DFPRR       Indicate device is shareable
*                                   between processors.
DFTLBL7  DS    0H
         SPACE 1
**********************************************************************
*  This loop manages successive calls to the DFT build routine
**********************************************************************
*
*  On a single build DFT request, the UIM can be requested
*  to build DFTs for multiple devices of the same type.
*  In IODVDNBR the starting device number is set.
*  In IODVNBRD the number of devices is set.
*
*  The value of IODVNBRD is used in the loop variable R9
*  of below DFTLOOP.
*---------------------------------------------------------------------
*
LOOPINIT DS    0H
         LH    R9,IODVNBRD          Obtain number of requested devices
         XR    R10,R10              Clear register for subsequent ICM.
         ICM   R10,3,IODVDNBR       Obtain device number.
*
DFTLOOP  DS    0H
         ST    R10,DFPDNBR          Establish device number to be sent
*                                   to DFT build routine.
         ST    UCAPTR,PARMAREA      Initialize parameter area.
         LA    R0,DFP               Get address of DFP
         ST    R0,PARMAREA+4        and store address in second word
*                                   of parmarea.
         LA    R1,PARMAREA          Store address of parameter list
*                                   in register 1.
         L     R15,UCADFTP          Obtain the entry point address from
*                                   the UCA
         BALR  R14,R15              Call routine to build DFT.
         LTR   R15,R15              Bad return code from DFT build ?
         BNZ   DONEDFTB             ..Yes, do not make any more calls
*                                   to build DFTs.
         A     R10,ONE              Increment device number.
         BCT   R9,DFTLOOP           Cycle until every device defined.
         SPACE 1
DONEDFTB DS    0H
         L     R14,SAVWORD1         Restore return address from
*                                   savearea.
         BR    R14                  Return to main procedure.
*
         EJECT
*********************************************************************
*
*  The following  word serves as savearea for register 14 when
*  internal procedures are called.
*
*********************************************************************
*
SAVWORD1 DS    F
*
*********************************************************************
*
*  The first 2 of the following words serve as this module's
*  parameter area for external calls.
*  The next 18 words serve as the module savearea.
*
*********************************************************************
*
PARMAREA DS    2F
SAVAREA  DS    18F
*
*********************************************************************
*
*  Device dependent constants
*
*********************************************************************
*
ONE      DC    F'1'                 Constant one
MAX64    DC    F'64'                Constant 64
MINUA2   DC    H'2'                 Constant 2
MINUA32  DC    H'32'                Constant 32
MAXUA64  DC    H'64'                Constant 64
MAXUAR1  DC    H'1'                 Constant 1
*--------------------------------------------------------------------
* Definition of message ids used for validation checks.
*--------------------------------------------------------------------
CBDB805I DC    CL8'CBDB805I'        Message id.
CBDB814I DC    CL8'CBDB814I'        Message id.
*--------------------------------------------------------------------
* Definition of generic names.
*--------------------------------------------------------------------
GEN33GG  DC    CL8'33GG    '        Generic name 33GG.
GEN93GG  DC    CL8'93GG    '        Generic name 93GG.
*--------------------------------------------------------------------
* Definition of device units and models
*--------------------------------------------------------------------
UNIT33UU DC    CL8'33UU    '        Device type 33UU.
UNIT33VV DC    CL8'33VV    '        Device type 33VV.
UNIT93UU DC    CL8'93UU    '        Device type 93UU.
MODL1    DC    CL4'1   '            Model 1.
MODL2    DC    CL4'2   '            Model 2.
BLANKS   DC    CL4'    '            No Model.
*--------------------------------------------------------------------
* Definition of control unit types and models
*--------------------------------------------------------------------
CNTL39CC DC    CL8'39CC    '        Control unit type 39CC.
MODL6    DC    CL4'6   '            Model 6.
CNTL93CC DC    CL8'93CC    '        Control unit type 93CC.
********************************************************************
* Definitions for private parameter DASDPOOL
*-------------------------------------------------------------------
DASDPPRM EQU   X'80'                Bit mask for DASDPOOL parameter
*-------------------------------------------------------------------
DASD_PID DC    AL2(33)              Parameter ID for DASDPOOL
*                                   parameter (must correspond
*                                   to specification in UDT).
*-------------------------------------------------------------------
DASD_DEF DC    CL8'DSP1    '        Default value for DASDPOOL
*                                   parameter.
*-------------------------------------------------------------------
DASD_SEL DS    0CL24                Parameter selection list values
*                                   for DASDPOOL parameter.
*                                   The values must be contiguous
*                                   using the same length.
DASD_SP1 DC    CL8'DSP1    '        Selection value for DASDPOOL
*                                   parameter.
         DC    CL8'DSP2    '        Selection value for DASDPOOL
*                                   parameter.
         DC    CL8'*       '        Selection value for DASDPOOL
*                                   parameter.
**********************************************************************
* *
*  DDT, MLT, UCB type values are required for building the
*  UCBs.
*  For units configured with HCD, the values of DDT, MLT and
*  UCB types can be seen in the HCD "MVS Device Report".
*-------------------------------------------------------------------
*
NAMEDDT  DC    CL8'IECVDDT5'        DDT name
NAMEMLT  DC    CL8'IEAMLT33'        MLT name
GNRCTYP1 DC    XL4'3010200C'        UCB type
GNRCTYP2 DC    XL4'3010200E'        UCB type
*
*-------------------------------------------------------------------
*  The generic preference value for a generic device must
*  be UNIQUE, which means no other generic device in the
*  same MVS must have the same value.
*  For preference values used by IBM units, refer to the
*  appendix of "z/OS MVS Device Validation Support"
*-------------------------------------------------------------------
*
GNRCPRT1 DC    F'99981'             Generic preference value
GNRCPRT2 DC    F'99984'             Generic preference value
*
STATETY# EQU   1                    Number of statistics table entries
SENSBYT# EQU   2                    Number of sense bytes
ERPINDEX EQU   0                    ERP index.
ATTNINDX EQU   64                   Attention table index.
*
*-------------------------------------------------------------------
*  Features set in the UIT are those features which HCD
*  recognizes for the device.
*  The UIP field for supported features UIPMSFEA is defined
*  for each UIM exclusively.
*  All Feature definitions like FEATACTL, FEATSHR must be
*  defined also with CBDZUDT statements in the corresponding UDT
*  The features in the UIM and in the UDT must be defined
*  in the same sequence.
*
*  The following bit masks are used to set the UIP field UIPMSFEA.
*-------------------------------------------------------------------
*
FEATACTL EQU   X'80'                ALTCTRL feature value.
FEATSHR  EQU   X'40'                SHARED  feature value.
FEATSHUP EQU   X'20'                SHAREDUP feature value.
*
DEVCESEG DS    CL40                 Device class extension
DEVDPSEG DS    CL16                 Device dependent segment
         LTORG *                    Define literals here
         EJECT ,
*********************************************************************
*
*  Register equates
*
*********************************************************************
*
R0       EQU   0
R1       EQU   1
R2       EQU   2
R3       EQU   3
R4       EQU   4
IODVPTR  EQU   5                    IODV pointer.
UCAPTR   EQU   6                    UCA pointer.
R7       EQU   7
R8       EQU   8
R9       EQU   9
R10      EQU   10
R11      EQU   11                   Base register
R12      EQU   12
R13      EQU   13                   Save area address
R14      EQU   14
R15      EQU   15
*
*********************************************************************
*
*  This macro invocation generates a diagnostic stack entry
*
*********************************************************************
*
DIAGDATA CBDZDIAG MODNAME=CBDUC255,CSECT=CBDUC255,COMP=SC1XL,          X
               MODCAT=UIM,DESC='UIM FOR DASD 33UU, 93UU'           @H1C
         EJECT
*********************************************************************
* Storage declaration for control unit information parameters (CIP).
*********************************************************************
* The CBDZCIP macro maps the control unit information parameters
* (CIP).
*
*        It generates an initialized structure of the CIP.
*
* DEV       specifies the number of entries to be generated in
*           the attachable device list for the control unit.
*
*
* Note:
*  If the CIP is re-used for another control unit definition, it
*  has to be re-initialized as shown in this sample UIM.
*
*--------------------------------------------------------------------
*
         CBDZCIP DEV=3
         EJECT
         CBDZDCP
         EJECT
         CBDZDFP
         EJECT
         CBDZGIP
         EJECT
*********************************************************************
* Storage declaration for unit information parameters (UIP).
*********************************************************************
* The CBDZUIP macro maps the unit information parameters (UIP).
*
* TYPE=GEN  generates an initialized structure of the UIP.
*
* MLTS      specifies the number of entries to be generated in
*           the module lists table (MLT). The specified number
*           must be between 1 and 5; the default is 1.
*
* DFLT      specifies the number of entries that are generated
*           in the parameter default list. This list contains
*           information about default values of parameters.
*           The default value is initially shown for the parameter
*           in the HCD dialog when defining the corresponding device
*           for the operating system.
*
* SEL       specifies the number of entries that are generated
*           in the parameter selection list. If a parameter
*           selection list is specified, HCD provides a prompt
*           for the corresponding parameter showing the values of
*           the parameter selection list. The parameter selection
*           list is also used by HCD to check for the possible
*           values of a parameter.
*
* SIM       specifies the number of entries that are generated
*           in the similar device list. This list identifies,
*           by device types and models, those devices which have
*           the same characteristics as the device named in the UIP.
*
* Note:
*  If like in this UIM, the UIP is cleared before it is re-used
*  for the next UIT to be build, then the fields initialized by this
*  macro, must be refreshed by program.
*
*--------------------------------------------------------------------
*
         CBDZUIP TYPE=GEN,MLTS=1,DFLT=1,SEL=1,SIM=2
         EJECT
*********************************************************************
* Storage declaration for message service routine parameter list
* (MSGR).
*********************************************************************
         CBDZMSG ,
         EJECT
*********************************************************************
* Mapping of the Control unit Information Parameter list (CIP).
*********************************************************************
* The CBDZCIP macro maps the control unit information parameters
* (CIP).
*
* TYPE=DSECT provides mappings for attachable device list.
*--------------------------------------------------------------------
*
         CBDZCIP TYPE=DSECT
         EJECT
         CBDZITRH ,
         EJECT
         CBDZUCA ,
         EJECT
*********************************************************************
* Mapping of the Unit Information Parameters (UIP).
*********************************************************************
* The CBDZUIP macro maps the unit information parameters (UIP).
*
* TYPE=DSECT provides mappings for
*                                  the parameter default list,
*                                  the parameter selection list.
*--------------------------------------------------------------------
*
         CBDZUIP TYPE=DSECT
         END
//********************************************************************
//JJJJJJ    JOB ,NOTIFY=UUUUUU,MSGLEVEL=(1,1),MSGCLASS=H
//ASMH    EXEC PGM=IEV90,REGION=1024K,PARM='LINECNT=55,DECK'
//SYSPRINT  DD SYSOUT=*
//SYSIN     DD DSN=XXXXXXXXXXXXXXX(CBDUC255),DISP=SHR
//SYSUT1    DD UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(NEW,DELETE)
//SYSPUNCH  DD DSN=&OBJ(CBDUC255),DISP=(,PASS,DELETE),UNIT=SYSDA,;
//             SPACE=(TRK,(1,5,5))
//SYSGO     DD DUMMY
//SYSLIB    DD DSN=SYS1.AMODGEN,
//             DISP=SHR
//SYSLIN    DD UNIT=SYSDA,SPACE=(TRK,(30,10)),DISP=(NEW,PASS),
//             DSN=&POBJ;
//LKED    EXEC PGM=IEWL,PARM='AMOD=31,LET,LIST,NCAL,RMOD=ANY,XREF',
//             COND=(0,NE)
//SYSPRINT  DD SYSOUT=*,DCB=(RECFM=FB,LRECL=121,BLKSIZE=1210)
//SYSLIN    DD DDNAME=SYSIN
//SYSLMOD   DD DSN=YYYYYYYYYYYYYYY(CBDUC255),DISP=SHR
//SYSUT1    DD DISP=(NEW,DELETE),SPACE=(CYL,(5,2)),UNIT=SYSDA
//OBJ       DD DSN=&OBJ,DISP=(OLD,DELETE);
//SYSIN     DD *
  INCLUDE OBJ(CBDUC255)
  NAME CBDUC255(R)
/*

Go to the previous page Go to the next page




Copyright IBM Corporation 1990, 2014