Annotation of qemu/roms/SLOF/slof/fs/usb/usb-storage-wrapper.fs, revision 1.1.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.