\ ***************************************************************************** \ * 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" bulk" device-name \ standard open firmare method : open true ; \ standard open firmare method : close ; \ ------------------------------------------------- \ Locals \ ------------------------------------------------ 8 chars alloc-mem VALUE setup-packet \ -------------------------------------------------- \ signature --->4bytes offset --->0 \ tag --->4bytes offset --->4 \ trans-len --->4bytes offset --->8 \ dir-flag --->1byte offset --->c \ lun --->1byte offset --->d \ comm-len --->1byte offset --->e \ -------------------------------------------------- 0 VALUE cbw-addr : build-cbw ( address tag transfer-len direction lun command-len -- ) 5 pick TO cbw-addr ( address tag transfer-len direction lun command-len ) cbw-addr 0f erase ( address tag transfer-len direction lun command-len ) cbw-addr e + c! ( address tag transfer-len direction lun ) cbw-addr d + c! ( address tag transfer-len direction ) cbw-addr c + c! ( address tag transfer-len ) cbw-addr 8 + l!-le ( address tag ) cbw-addr 4 + l!-le ( address ) 43425355 cbw-addr l!-le ( address ) drop ; \ --------------------------------------------------- \ signature --->4bytes offset --->0 \ tag --->4bytes offset --->4 \ residue --->4bytes offset --->8 \ status --->1byte offset --->c \ --------------------------------------------------- 0 VALUE csw-addr : analyze-csw ( address -- residue tag true|reason false ) TO csw-addr csw-addr l@-le 53425355 = IF csw-addr c + c@ dup 0= IF ( reason ) drop csw-addr 8 + l@-le ( residue ) csw-addr 4 + l@-le ( residue tag ) \ command block tag TRUE ( residue tag TRUE ) ELSE FALSE ( reason FALSE ) THEN ELSE FALSE ( FALSE ) THEN csw-addr 0c erase ; : bulk-reset-recovery-procedure ( bulk-out-endp bulk-in-endp usb-addr -- ) s" bulk-reset-recovery-procedure" $call-parent ;