Annotation of qemu/roms/SLOF/slof/fs/usb/usb-storage-wrapper.fs, revision 1.1

1.1     ! root        1: \ *****************************************************************************
        !             2: \ * Copyright (c) 2004, 2008 IBM Corporation
        !             3: \ * All rights reserved.
        !             4: \ * This program and the accompanying materials
        !             5: \ * are made available under the terms of the BSD License
        !             6: \ * which accompanies this distribution, and is available at
        !             7: \ * http://www.opensource.org/licenses/bsd-license.php
        !             8: \ *
        !             9: \ * Contributors:
        !            10: \ *     IBM Corporation - initial implementation
        !            11: \ ****************************************************************************/
        !            12: 
        !            13: \ -----------------------------------------------------------
        !            14: \ OF properties
        !            15: \ -----------------------------------------------------------
        !            16: 
        !            17: s" scsi" device-name
        !            18: s" block-type" device-type
        !            19: 1 encode-int s" #address-cells" property
        !            20: 0 encode-int s" #size-cells" property
        !            21: 
        !            22: 
        !            23: : encode-unit   1 hex-encode-unit ;
        !            24: 
        !            25: : decode-unit   1 hex-decode-unit ;
        !            26: 
        !            27: 
        !            28: \ -----------------------------------------------------------
        !            29: \ Specific properties
        !            30: \ -----------------------------------------------------------
        !            31: 
        !            32: 1 chars alloc-mem VALUE ch-buffer
        !            33: 8 VALUE mps-dcp
        !            34: 0 VALUE port-number
        !            35: 0 VALUE my-usb-address
        !            36: 
        !            37: 
        !            38: : control-std-get-maxlun
        !            39:    ( MPS fun-addr dir data-buff data-len -- TRUE | FALSE )
        !            40:    s" control-std-get-maxlun" $call-parent
        !            41: ;
        !            42: 
        !            43: 
        !            44: : control-std-get-configuration-descriptor
        !            45:    ( data-buffer data-len MPS funcAddr -- TRUE|FALSE )
        !            46:    s" control-std-get-configuration-descriptor" $call-parent
        !            47: ;
        !            48: 
        !            49: : rw-endpoint
        !            50:    ( pt ed-type toggle buffer length mps address -- toggle TRUE|toggle FALSE )
        !            51:    s" rw-endpoint" $call-parent
        !            52: ;
        !            53: 
        !            54: : controlxfer ( dir addr dlen setup-packet MPS ep-fun -- TRUE|FALSE )
        !            55:    s" controlxfer" $call-parent
        !            56: ;
        !            57: 
        !            58: : control-std-set-configuration
        !            59:    ( configvalue FuncAddr -- TRUE|FALSE )
        !            60:    s" control-std-set-configuration" $call-parent
        !            61: ;
        !            62: 
        !            63: \ This method is used for extracting the properties from it's parent and
        !            64: \ storing these value to temporary variable so that they can used later.
        !            65: 
        !            66: : extract-properties ( -- )
        !            67:    s" USB-ADDRESS" get-inherited-property ( prop-addr prop-len FALSE | TRUE )
        !            68:    IF
        !            69:       s" notpossible" usb-debug-print
        !            70:    ELSE
        !            71:       decode-int nip nip to my-usb-address
        !            72:    THEN
        !            73:    s" MPS-DCP" get-inherited-property  ( prop-addr prop-len FALSE | TRUE )
        !            74:    IF
        !            75:       s" MPS-DCP property not found.Assume 8 as MAX PACKET SIZE" usb-debug-print
        !            76:       s" for the default control pipe"  usb-debug-print
        !            77:       8 to mps-dcp
        !            78:    ELSE
        !            79:       s" MPS-DCP property found!!"  usb-debug-print
        !            80:       decode-int nip nip to mps-dcp
        !            81:    THEN
        !            82:    s" reg" get-inherited-property   ( prop-addr prop-len FLASE | TRUE )
        !            83:    IF
        !            84:       s" notpossible" usb-debug-print
        !            85:    ELSE
        !            86:       decode-int nip nip to port-number
        !            87:    THEN
        !            88: ;
        !            89: 
        !            90: 
        !            91: \ This method is used for creating the child nodes for every Logical unit
        !            92: \ available in the device, this method will call control-std-get-maxlun for
        !            93: \ for finding the maximum Logical units supported by the device and along with
        !            94: \ the creation of nodes this method encodes the properties of the node also.
        !            95: 
        !            96: : create-tree ( -- )
        !            97:    mps-dcp my-usb-address 0 ch-buffer 1 ( MPS fun-addr dir data-buff data-len )
        !            98:    control-std-get-maxlun     ( TRUE | FALSE )
        !            99: 
        !           100:    \ This method extracts the maximum number of Logical Units Supported by
        !           101:    \ the Device . if no Logical Units are present then 0 will be taken as the
        !           102:    \ max logical units. if the device doesn't support the GET-MAX-LUN command
        !           103:    \ then the device may can be stalled as a temporary fix to come out from
        !           104:    \ the stalling situations we can issue the control-std-set-configuration with
        !           105:    \ appropriate arguments
        !           106: 
        !           107: 
        !           108:    IF
        !           109:       s" GET-MAX-LUN IS WORKING :" usb-debug-print
        !           110:    ELSE
        !           111:       s" ERROR in GET-MAX-LUN " usb-debug-print
        !           112:    THEN
        !           113:    ch-buffer c@ 1 +  0                              ( max-lun+1 0 )
        !           114:    DO
        !           115:       s" iManufacturer" get-inherited-property drop ( prop-addr prop-len TRUE )
        !           116:       decode-int nip nip                  ( iManu )
        !           117:       s" iProduct" get-inherited-property drop
        !           118:       ( iManu prop-addr prop-len TRUE | FALSE )
        !           119:       decode-int nip nip                  ( iManu iProd )
        !           120:       s" iSerialNumber" get-inherited-property drop
        !           121:       ( iManu iProd prop-addr prop-len TRUE | FALSE )
        !           122:       decode-int nip nip                  ( iManu iProd iSerNum )
        !           123:       s" MPS-BULKOUT" get-inherited-property drop
        !           124:       ( iManu iProd iSerNum prop-len prop-addr TRUE | FALSE )
        !           125:       decode-int nip nip                  ( iManu iProd iSerNum MPS-BULKOUT )
        !           126:       s" BULK-OUT-EP-ADDR" get-inherited-property drop
        !           127:       ( iManu iProd iSerNum MPS-BULKOUT prop-addr prop-len TRUE|FALSE )
        !           128:       decode-int nip nip ( iManu iProd iSerNum MPS-BULKOUT BULK-OUT-EP-ADDR )
        !           129:       s" MPS-BULKIN" get-inherited-property drop
        !           130:       ( iManu iProd iSerNum MPS-BULKOUT BULK-OUT-EP-ADDR prop-addr prop-len
        !           131:         TRUE | FALSE )
        !           132:       decode-int nip nip
        !           133:       ( iManu iProd iSernum MPS-BULKOUT BULK-OUT-EP-ADDR MPS-BULKIN )
        !           134:       s" BULK-IN-EP-ADDR" get-inherited-property drop
        !           135:       ( iManu iProd iSernum MPS-BULKOUT BULK-OUT-EP-ADDR MPS-BULKIN prop-addr
        !           136:         prop-len TRUE | FALSE )
        !           137:       decode-int nip nip
        !           138:       ( iManu iProd iSernum MPS-BULKOUT BULK-OUT-EP-ADDR MPS-BULKIN
        !           139:         BULKIN-EP-ADDR )
        !           140:       mps-dcp  port-number  my-usb-address I
        !           141:       ( iManu iProd iSernum MPS-BULKOUT BULK-OUT-EP-ADDR MPS-BULKIN
        !           142:         BULKIN-EP-ADDR mps-dcp port-address my-usb-address lun-number )
        !           143:       new-device
        !           144: 
        !           145:       \ creates new device child node, doesn't consume any argument from stack
        !           146: 
        !           147:       ( iManu iProd iSernum MPS-BULKOUT BULK-OUT-EP-ADDR MPS-BULKIN
        !           148:       BULKIN-EP-ADDR mps-dcp port-address my-usb-address lun-number )
        !           149: 
        !           150:       set-space
        !           151:       ( iManu iProd iSernum MPS-BULKOUT BULK-OUT-EP-ADDR MPS-BULKIN
        !           152:         BULKIN-EP-ADDR mps-dcp port-number my-usb-address )
        !           153:       encode-int s" USB-ADDRESS" property
        !           154:        ( iManu iProd iSernum MPS-BULKOUT BULK-OUT-EP-ADDR MPS-BULKIN
        !           155:          BULKIN-EP-ADDR mps-dcp port-number )
        !           156:       encode-int s" reg" property
        !           157:       ( iManu iProd iSernum MPS-BULKOUT BULK-OUT-EP-ADDR MPS-BULKIN )
        !           158:       ( BULKIN-EP-ADDR mps-dcp port-number )
        !           159:       encode-int s" MPS-DCP" property
        !           160:       ( iManu iProd iSernum MPS-BULKOUT BULK-OUT-EP-ADDR MPS-BULKIN
        !           161:         BULKIN-EP-ADDR )
        !           162:       I encode-int s" LUN" property
        !           163:       ( iManu iProd iSernum MPS-BULKOUT BULK-OUT-EP-ADDR MPS-BULKIN
        !           164:        BULKIN-EP-ADDR )
        !           165:       encode-int s" BULK-IN-EP-ADDR" property
        !           166:       ( iManu iProd iSernum MPS-BULKOUT BULK-OUT-EP-ADDR MPS-BULKIN )
        !           167:       encode-int s" MPS-BULKIN" property
        !           168:       ( iManu iProd iSernum MPS-BULKOUT BULK-OUT-EP-ADDR )
        !           169:       encode-int s" BULK-OUT-EP-ADDR" property
        !           170:       ( iManu iProd iSernum MPS-BULKOUT )
        !           171:       encode-int s" MPS-BULKOUT" property ( iManu iProd iSerNum )
        !           172:       encode-int s" iSerialNumber" property ( iManu iProd )
        !           173:       encode-int s" iProduct" property  ( iManu )
        !           174:       encode-int s" iManufacturer" property ( -- )
        !           175:       s" usb-storage.fs" INCLUDED
        !           176:       finish-device
        !           177:    LOOP
        !           178: ;
        !           179: 
        !           180: extract-properties  \ Extract the properties from parent
        !           181: create-tree       \ this method creates the node for every lun with properties

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.