blob: 765b758e4207e89e31bccf8c68885f6cc671a568 [file] [log] [blame]
\ *****************************************************************************
\ * Copyright (c) 2004, 2008 IBM Corporation
\ * All rights reserved.
\ * This program and the accompanying materials
\ * are made available under the terms of the BSD License
\ * which accompanies this distribution, and is available at
\ * http://www.opensource.org/licenses/bsd-license.php
\ *
\ * Contributors:
\ * IBM Corporation - initial implementation
\ ****************************************************************************/
s" entered usb-storage-support.fs" usb-debug-print
\ ---------------------------------------------------------------------------
\ Parent methods
\ ---------------------------------------------------------------------------
: rw-endpoint
( pt ed-type toggle buffer length mps addres -- toggle TRUE | toggle FALSE )
s" rw-endpoint" $call-parent
( toggle TRUE | toggle FALSE )
;
: controlxfer ( dir addr dlen setup-packet MPS ep-fun --- TRUE|FALSE )
s" controlxfer" $call-parent
( TRUE | FALSE )
;
: control-std-get-configuration-descriptor
( data-buffer data-len MPS FuncAddr -- TRUE | FALSE )
s" control-std-get-configuration-descriptor" $call-parent
( TRUE | FALSE )
;
: control-std-set-configuration ( configvalue FuncAddr -- TRUE | FALSE )
s" control-std-set-configuration" $call-parent ( TRUE | FALSE )
;
: bulk-reset-recovery-procedure ( bulk-out-endp bulk-in-endp usb-addr -- )
s" bulk-reset-recovery-procedure" $call-parent
;
\ ---------------------------------------------------------------------------
\ Bulk support package methods
\ ---------------------------------------------------------------------------
: build-cbw ( address tag transfer-len direction lun command-len -- )
s" build-cbw" ihandle-bulk @ $call-method
;
: analyze-csw ( address -- residue tag TRUE | reason FALSE )
s" analyze-csw" ihandle-bulk @ $call-method
( residue tag TRUE | reason FALSE )
;
\ =======================================================
\ NATIVE METHODS USED EITHER AT PROBE TIME OR TIME
\ WHEN INSTANCE IS CREATED
\ =======================================================
\ --------------------------------------------------------
\ COLON DEFINITION: the method is a probe-time method
\ used to:
\ 1. decode the properties and store in variables
\ 2. allocat buffers required for the device and
\ 3. set the right configuration after extracting the
\ configuration descriptor
\ --------------------------------------------------------
: device-init ( -- )
s" Starting to initialize usb-storage device" usb-debug-print
s" USB-ADDRESS" get-my-property ( TRUE | propaddr proplen FALSE )
IF
s" not possible" usb-debug-print
ELSE
decode-int nip nip to my-usb-address
THEN
s" MPS-BULKOUT" get-my-property ( TRUE | propaddr proplen FALSE )
IF
s" not possible" usb-debug-print
ELSE
decode-int nip nip to mps-bulk-out
THEN
s" MPS-BULKIN" get-my-property ( TRUE | propaddr proplen FALSE )
IF
s" not possible" usb-debug-print
ELSE
decode-int nip nip to mps-bulk-in
THEN
s" BULK-IN-EP-ADDR" get-my-property ( TRUE | propaddr proplen FALSE )
IF
s" not possible" usb-debug-print
ELSE
decode-int nip nip to bulk-in-ep
THEN
s" BULK-OUT-EP-ADDR" get-my-property ( TRUE | propaddr proplen FALSE )
IF
s" not possible" usb-debug-print
ELSE
decode-int nip nip to bulk-out-ep
THEN
s" MPS-DCP" get-my-property ( TRUE | propaddr proplen FALSE )
IF
s" Not possible" usb-debug-print
ELSE
decode-int nip nip to mps-dcp
THEN
s" LUN" get-my-property ( TRUE | propaddr proplen FALSE )
IF
s" NOT Possible to extract LUN" usb-debug-print
ELSE
decode-int nip nip to lun
THEN
s" Extracted properties inherited from parent." usb-debug-print
dma-buf >cfg-buffer 8 mps-dcp my-usb-address ( buffer len mps fun-addr )
control-std-get-configuration-descriptor ( TRUE | FALSE )
drop
s" Configuration descriptor extracted." usb-debug-print
dma-buf >cfg-buffer 5 + c@ my-usb-address ( configvalue fun-addr )
control-std-set-configuration ( TRUE | FALSE )
s" usb-storage: Set config returned: " rot usb-debug-print-val
;
\ ----------------------------------------------------
\ Internal methods
\ ----------------------------------------------------
: (open-package) ( ihandle-var name-str name-len -- )
find-package IF ( ihandle-var phandle )
0 0 rot open-package ( ihandle-var ihandle )
swap !
ELSE
s" Support package not found" usb-debug-print
THEN
;
: (close-package) ( ihandle-var -- )
dup @ close-package
0 swap !
;
s" leaving usb-storage-support.fs" usb-debug-print