Author: wmb Date: 2009-01-03 02:52:19 +0100 (Sat, 03 Jan 2009) New Revision: 1057
Added: ofw/inet/iscsi/ ofw/inet/iscsi/buffers.fth ofw/inet/iscsi/debug.fth ofw/inet/iscsi/ipackets.fth ofw/inet/iscsi/keys.fth ofw/inet/iscsi/loadiscsi.fth ofw/inet/iscsi/low.fth ofw/inet/iscsi/methods.fth ofw/inet/iscsi/opackets.fth ofw/inet/iscsi/scsi.fth Modified: cpu/x86/pc/biosload/fw.bth Log: Added iSCSI support package.
Modified: cpu/x86/pc/biosload/fw.bth =================================================================== --- cpu/x86/pc/biosload/fw.bth 2008-12-30 02:31:29 UTC (rev 1056) +++ cpu/x86/pc/biosload/fw.bth 2009-01-03 01:52:19 UTC (rev 1057) @@ -180,6 +180,12 @@ [then] devalias nfs net//obp-tftp:last//nfs
+[ifdef] use-iscsi +support-package: iscsi + fload ${BP}/ofw/inet/iscsi/loadiscsi.fth +end-support-package +[then] + fload ${BP}/ofw/inet/loadtcp.fth
support-package: http
Added: ofw/inet/iscsi/buffers.fth =================================================================== --- ofw/inet/iscsi/buffers.fth (rev 0) +++ ofw/inet/iscsi/buffers.fth 2009-01-03 01:52:19 UTC (rev 1057) @@ -0,0 +1,233 @@ +purpose: iSCSI buffers +\ See license at end of file + +hex + +\ structures for iscsi Protocol Data Units +\ formats vary with request or response + +struct \ iscsi Basic Header Segment + \ 0 + 1 field >opcode + 1 field >flags + 1 field >response + 1 field >status + \ 4 + 1 field >AHSlen + 3 field >DSlen + \ 8 + 0 field >LUN + 6 field >ISID + 2 field >TSIH + \ 16 + 4 field >ITT + \ 20 + 0 field >SNACK + 0 field >ExpDataLen + 0 field >CID + 0 field >RTT + 4 field >TTT + \ 24 + 0 field >CmdSN + 4 field >StatSN + \ 28 + 0 field >ExpCmdSN + 4 field >ExpStatSN + \ 32 + 0 field >CDB + 0 field >RefCmdSN + 4 field >MaxCmdSN + \ 36 + 0 field >Async + 0 field >LoginStat + 0 field >R2TSN + 0 field >ExpDataSN + 4 field >DataSN + \ 40 + 0 field >BRRC + 0 field >Waittime + 0 field >BegRun + 4 field >BufferOffset + \ 44 + 0 field >RunLen + 0 field >DDTlen + 4 field >RC + \ 48 + 0 field >Data +constant /bhs + + +\ buffers for iscsi messages + +\ large data will be sent directly from the source address +d# 1024 constant /max-pdu +/max-pdu buffer: outbuf + +\ all incoming data goes to inbuf, so it must be large +h# 4.0000 constant /max-transfer +/max-transfer /bhs + buffer: inbuf + + +0 value stage ( T C CSG NSG ) +: flags@ ( -- flags ) inbuf >flags c@ ; +: flags! ( flags -- ) outbuf >flags c! ; + +0 [if] +: update-stage ( -- ) + flags@ h# 80 and 0= if exit then + \ transition + flags@ 3 and 1 = if + h# 87 to stage + then +; +[then] + +0 value dslen + +: !dslen ( -- ) + dslen lwsplit ( lo hi ) + outbuf >DSlen tuck c! 1+ be-w! +; +: @dslen ( -- dslen ) + inbuf >AHSlen be-l@ h# 00ff.ffff and +; + + +\ get and set some fields + +\ XXX verify that this is the value that Solaris uses +h# 4000.002A value isidh +0 value isid +: !isid ( -- ) + outbuf >ISID isidh over be-l! isid swap 4 + be-w! +; +: ++isid ( -- ) isid 1+ to isid !isid ; + +0 value itt +0 value ttt +0 value cmdsn +0 value expstatsn +2variable lun + +: @ttt ( -- ) inbuf >TTT be-l@ to ttt ; +: !ttt ( -- ) ttt outbuf >TTT be-l! ; +: !itt ( -- ) itt outbuf >ITT be-l! ; +: ++itt ( -- ) itt 1+ to itt !itt ; +: !lun ( -- ) + lun 2@ outbuf >LUN be-l! + outbuf >LUN 4 + be-l! +; +: @lun ( -- ) + inbuf >LUN 4 + be-l@ + inbuf >LUN be-l@ + lun 2! +; +: .lun ( -- ) lun 2@ 8u.h ." ." 8u.h space ; + +: set-sn ( -- ) + cmdsn outbuf >CmdSN be-l! + expstatsn outbuf >ExpStatSN be-l! +; + +\ false value target-ready? +: update-sn ( -- ) + inbuf >ExpCmdSN be-l@ to cmdsn + inbuf >StatSN be-l@ 1+ to expstatsn + + \ XXX use target-ready?, do nops if false + \ inbuf >maxcmdsn be-l@ cmdsn 1- <> to target-ready? +; + +: init-pdu ( opcode -- ) + 0 inbuf c! + outbuf /max-pdu erase + outbuf >opcode c! + set-sn + 0 to dslen !dslen +; + +: read-more ( adr len -- actual ) + wait-read dup 0< abort" read failed" ( sum actual ) +; +: read-all ( adr total -- ) + dup 0= if 2drop exit then + + over + ( adr end ) >r ( adr ) + begin dup r@ < while + dup r@ over - ( adr adr len ) read-more ( adr actual ) + + repeat + r> 2drop +; + +defer get-pdu ( -- actual ) +: (get-pdu) ( -- actual ) + inbuf /max-pdu erase \ helps debugging + inbuf /bhs read-all \ get the header + inbuf >data @dslen tuck 4 round-up read-all ( actual' ) + /bhs + ( actual ) + update-sn +; +' (get-pdu) to get-pdu + +defer send-pdu ( -- ) +: (send-pdu) ( -- ) + !dslen + outbuf /bhs dslen + 4 round-up tcp-write + " flush-writes" $call-parent +; +' (send-pdu) to send-pdu + +\ send large data as if contiguous with BHS +defer send-pdu+data ( a n -- ) +: (send-pdu+data) ( a n -- ) + dup to dslen !dslen + outbuf /bhs tcp-write ( a n ) + 4 round-up tcp-write + " flush-writes" $call-parent +; +' (send-pdu+data) to send-pdu+data + +\ append strings to the data segment +: addnull ( -- ) + /bhs dslen + 1+ /max-pdu > abort" Data Segment overrun" + + 0 outbuf >Data dslen + c! \ append a null + dslen 1+ to dslen +; +: append ( a n -- ) + dup /bhs + dslen + /max-pdu > abort" Data Segment overrun" + + >r outbuf >Data dslen + r@ cmove + r> dslen + to dslen +; +: append0 ( a n -- ) + dup /bhs + dslen + 1+ /max-pdu > abort" Data Segment overrun" + + >r outbuf >Data dslen + r@ cmove + 0 outbuf >Data dslen + r@ + c! \ append a null + r> dslen + 1+ to dslen +; + +\ LICENSE_BEGIN +\ Copyright (c) 2009 FirmWorks +\ +\ Permission is hereby granted, free of charge, to any person obtaining +\ a copy of this software and associated documentation files (the +\ "Software"), to deal in the Software without restriction, including +\ without limitation the rights to use, copy, modify, merge, publish, +\ distribute, sublicense, and/or sell copies of the Software, and to +\ permit persons to whom the Software is furnished to do so, subject to +\ the following conditions: +\ +\ The above copyright notice and this permission notice shall be +\ included in all copies or substantial portions of the Software. +\ +\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +\ +\ LICENSE_END
Property changes on: ofw/inet/iscsi/buffers.fth ___________________________________________________________________ Added: svn:executable + *
Added: ofw/inet/iscsi/debug.fth =================================================================== --- ofw/inet/iscsi/debug.fth (rev 0) +++ ofw/inet/iscsi/debug.fth 2009-01-03 01:52:19 UTC (rev 1057) @@ -0,0 +1,287 @@ +purpose: iSCSI buffer dumps +\ See license at end of file + +\ show field values +: .op ( buf -- ) ." opcode " >opcode c@ .h ; +: .flags ( buf -- ) ." flags " >flags c@ .h ; +: .status ( buf -- ) ." status " >status c@ .h ; +: .dsl ( buf -- ) ." DSlength " >AHSlen be-l@ h# 00ffffff and .d ; +: .lun8 ( buf -- ) ." lun " >lun dup be-l@ 8u.h ." ." 4 + be-l@ 8u.h space ; +: .isid ( buf -- ) ." isid " >isid dup 2+ be-l@ swap be-w@ (.12) type space ; +: .tsih ( buf -- ) ." tsih " >tsih be-w@ .h ; +: .itt ( buf -- ) ." itt " >itt be-l@ .h ; +: .ttt ( buf -- ) ." ttt " >ttt be-l@ .h ; +: .rtt ( buf -- ) ." rtt " >rtt be-l@ .h ; +: .cid ( buf -- ) ." cid " >cid be-l@ .h ; +: .edl ( buf -- ) ." Exp Data Length " >expdatalen be-l@ .h ; +: .snack ( buf -- ) ." SNACK " >snack be-l@ .h ; +: .cmdsn ( buf -- ) ." CmdSN " >cmdsn be-l@ .h ; +: .statsn ( buf -- ) ." StatSN " >statsn be-l@ .h ; +: .xcmdsn ( buf -- ) ." ExpCmdSN " >expcmdsn be-l@ .h ; +: .xstatsn ( buf -- ) ." ExpStatSN " >expstatsn be-l@ .h ; +: .refcmdsn ( buf -- ) ." RefCmdSN " >refcmdsn be-l@ .h ; +: .maxcmdsn ( buf -- ) ." maxCmdSN " >maxcmdsn be-l@ .h ; +: .r2tsn ( buf -- ) ." R2TSN " >r2tsn be-l@ .h ; +: .xdatasn ( buf -- ) ." ExpDataSN " >expdatasn be-l@ .h ; +: .datasn ( buf -- ) ." DataSN " >datasn be-l@ .h ; +: .brrc ( buf -- ) ." BRRC " >brrc be-l@ .h ; +: .rc ( buf -- ) ." RC " >rc be-l@ .h ; +: .offset ( buf -- ) ." Buffer Offset " >bufferoffset be-l@ .h ; +: .ddtl ( buf -- ) ." Desired Data Transfer Length " >DDTlen be-l@ .h ; + +: .ahsl ( buf -- ) + >AHSlen c@ dup if + ." AHSlength " .h + else + drop + then +; +: .cdb ( buf -- ) cr ." CDB " >CDB h# 10 dump ; +: .login-status ( buf -- ) + ." login status " >loginstat dup be-w@ .h + c@ + case + 0 of ." success" endof + 1 of ." target moved error" endof + 2 of ." initiator error" endof + 3 of ." target error" endof + ." unknown" + endcase + cr +; + +\ display packets + +\ basic header segment +: .bhs ( buf -- ) + dup .op dup .flags + dup >opcode c@ h# 40 and if ." immediate " then + dup >flags c@ h# 80 and if ." final " then + dup .ahsl dup .dsl .itt cr +; + +\ command pdu +: .cmd ( -- buf ) + outbuf dup .bhs dup .cmdsn dup .xstatsn cr +; + +\ response pdu +: .resp ( -- buf ) + inbuf dup .bhs dup .statsn dup .xcmdsn dup .maxcmdsn cr +; + +: .scsicmd ( -- ) + ." SCSI Command " .cmd ( buf ) + dup .lun8 dup .edl .cdb cr +; +: .scsiresp ( -- ) + ." SCSI Response " .resp ( buf ) + dup .snack dup .xdatasn dup .brrc .rc cr +; +: .tmfrq ( -- ) + ." Task Request " .cmd ( buf ) + dup .lun8 dup .rtt .refcmdsn cr +; +: .tmfr ( -- ) + ." Task Response " .resp drop cr +; +: .scsidout ( -- ) + ." SCSI Data Out " .cmd ( buf ) + dup .lun8 dup .ttt dup .datasn + .offset cr +; +: .scsidin ( -- ) + ." SCSI Data In " .resp ( buf ) + dup .lun8 dup .ttt dup .datasn + dup .offset .rc cr +; +: .r2t ( -- ) + ." Ready To Transfer " .resp ( buf ) + dup .lun8 dup .ttt dup .r2tsn dup .offset .ddtl cr +; +: .async ( -- ) + ." Async Event " .resp ( buf ) + dup .lun8 ." type " >async c@ .h cr +; +: .textrq ( -- ) + ." Text Request " .cmd ( buf ) + dup .lun8 .ttt cr +; +: .textr ( -- ) + ." Text Response " .resp ( buf ) + dup .lun8 .ttt cr +; +: .loginrq ( -- ) + ." Login Request " .cmd ( buf ) + dup .isid dup .tsih .cid cr +; +: .login-response ( -- ) + ." Login Response " .resp ( buf ) + dup .isid dup .tsih cr ( buf ) + .login-status ( ) + flags@ dup 2 >> 3 and ." stage " . ( flags ) + h# 80 and 0= if ." no " then ." transition " cr +; +: .logoutrq ( -- ) + ." Logout Request " .cmd ( buf ) + .cid cr +; +: .logoutr ( -- ) + ." Logout Response " .resp ( buf ) + dup >response c@ 0= if ." logout successful" cr then + >waittime ( wt ) + ." time to wait " dup be-w@ . + ." time to retain " 2+ be-w@ . cr +; +: .snackrq ( -- ) + ." SNACK Request " .cmd ( buf ) + dup .lun8 dup .ttt + ." Begin Run " dup >begrun be-l@ .h + ." Run Length " >runlen be-l@ .h cr +; +: .reject ( -- ) + ." Reject " .resp ( buf ) + dup .datasn + ." reason " >response c@ .h cr +; +: .nopout ( -- ) + ." NOP Out " .cmd ( buf ) + dup .lun8 .ttt cr +; +: .nopin ( -- ) + ." NOP In " .resp ( buf ) + dup .lun8 .ttt cr +; + +\ display the data segment, assuming it consists of null terminated strings +: showbufdata ( a -- ) + dup >AHSlen be-l@ h# 00ff.ffff and ( a dslen ) + dup 0= if 2drop exit then + + d# 1024 min \ safety + + swap >Data swap bounds ?do + i c@ dup if emit else drop cr then + loop +; + +\ dump the buffers +: dump-got ( actual -- ) + verbose? 0= if drop exit then ( actual ) + + dup /bhs < if + ." received " .d ." bytes partial header " cr inbuf /bhs dump cr + exit + then + + ." received header " cr inbuf /bhs dump cr ( actual ) + ." plus " dup /bhs - .d ." bytes of data" cr ( actual ) + inbuf swap /bhs /string dump cr cr +; +: dump-sent ( a n -- ) + verbose? 0= if 2drop exit then + + ." sent header " cr outbuf /bhs dump cr ( a n ) + dup if + ." plus " 4 round-up dup .d ." bytes of data" cr ( a n ) + 2dup d# 512 min dump cr + then + cr + 2drop +; + +\ display a packet +: show-in-pdu ( -- ) + debug? 0= if exit then + + inbuf >opcode c@ h# 3f and + case + h# 20 of .nopin endof + h# 21 of .scsiresp endof + h# 22 of .tmfr endof + h# 23 of .login-response endof + h# 24 of .textr endof + h# 25 of .scsidin endof + h# 26 of .logoutr endof + h# 31 of .r2t endof + h# 32 of .async endof + h# 3f of .reject endof + ( default ) + .resp + true abort" invalid target packet" + endcase + cr +; +: separator ( $tag -- ) + debug? 0= if 2drop exit then + + type ." -----------------------------------------" cr +; +: get-show-pdu ( -- actual ) +\ " get" separator + (get-pdu) ( actual ) + dup dump-got show-in-pdu +\ " got" separator +; +' get-show-pdu to get-pdu + +: show-out-pdu ( -- ) + debug? 0= if exit then + + outbuf >opcode c@ h# 3f and + case + h# 00 of .nopout endof + h# 01 of .scsicmd endof + h# 02 of .tmfrq endof + h# 03 of .loginrq outbuf showbufdata endof + h# 04 of .textrq outbuf showbufdata endof + h# 05 of .scsidout endof + h# 06 of .logoutrq endof + h# 10 of .snackrq endof + ( default ) + .cmd cr + true abort" invalid initiator packet" + endcase + cr +; +: send-show-pdu ( -- ) +\ " send" separator + (send-pdu) + outbuf >data dslen dump-sent + show-out-pdu +\ " sent" separator +; +' send-show-pdu to send-pdu + +: send-show-pdu+data ( a n -- ) +\ " send" separator + 2dup (send-pdu+data) + dump-sent + show-out-pdu +\ " sent" separator +; +' send-show-pdu+data to send-pdu+data + +\ LICENSE_BEGIN +\ Copyright (c) 2009 FirmWorks +\ +\ Permission is hereby granted, free of charge, to any person obtaining +\ a copy of this software and associated documentation files (the +\ "Software"), to deal in the Software without restriction, including +\ without limitation the rights to use, copy, modify, merge, publish, +\ distribute, sublicense, and/or sell copies of the Software, and to +\ permit persons to whom the Software is furnished to do so, subject to +\ the following conditions: +\ +\ The above copyright notice and this permission notice shall be +\ included in all copies or substantial portions of the Software. +\ +\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +\ +\ LICENSE_END
Property changes on: ofw/inet/iscsi/debug.fth ___________________________________________________________________ Added: svn:executable + *
Added: ofw/inet/iscsi/ipackets.fth =================================================================== --- ofw/inet/iscsi/ipackets.fth (rev 0) +++ ofw/inet/iscsi/ipackets.fth 2009-01-03 01:52:19 UTC (rev 1057) @@ -0,0 +1,103 @@ +purpose: incoming iSCSI packets +\ See license at end of file + +hex + +\ particular responses + +defer nop-out +: nop-in ( -- ) + @ttt ttt -1 <> if \ this is not a replay + nop-out \ so we need to respond + then +; + +0 value status +0 value status-valid? +: scsi-response ( -- ) + inbuf >response c@ 0= to status-valid? + inbuf >status c@ to status +; + +defer get-response +0 instance value read-address +0 instance value read-length +: scsi-data-in ( -- ) + read-address 0= abort" read-address is not set" + inbuf >data read-address read-length + inbuf >bufferoffset be-l@ /string ( src dst len ) + @dslen min cmove + + flags@ h# 81 and h# 81 = \ F and S set? + dup to status-valid? if + inbuf >status c@ to status + else + get-response \ not final, get more + then +; + +: scsi-task-response ( -- ) +; +: login-response ( -- ) + inbuf >loginstat c@ abort" login failed" + + inbuf >data @dslen parse-keys +; +: text-response ( -- ) + inbuf >data @dslen parse-keys +; + +: logout-response ( -- ) +; +: ready2transfer ( -- ) +; +: async-message ( -- ) +; +: reject ( -- ) +; +: (get-response) ( -- ) + get-pdu ( actual ) + drop + + false to status-valid? + inbuf >opcode c@ h# 3f and + case + h# 20 of nop-in endof + h# 21 of scsi-response endof + h# 22 of scsi-task-response endof + h# 23 of login-response endof + h# 24 of text-response endof + h# 25 of scsi-data-in endof + h# 26 of logout-response endof + h# 31 of ready2transfer endof + h# 32 of async-message endof + h# 3f of reject endof + ( default ) + true abort" invalid command packet" + endcase +; +' (get-response) to get-response + +\ LICENSE_BEGIN +\ Copyright (c) 2009 FirmWorks +\ +\ Permission is hereby granted, free of charge, to any person obtaining +\ a copy of this software and associated documentation files (the +\ "Software"), to deal in the Software without restriction, including +\ without limitation the rights to use, copy, modify, merge, publish, +\ distribute, sublicense, and/or sell copies of the Software, and to +\ permit persons to whom the Software is furnished to do so, subject to +\ the following conditions: +\ +\ The above copyright notice and this permission notice shall be +\ included in all copies or substantial portions of the Software. +\ +\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +\ +\ LICENSE_END
Property changes on: ofw/inet/iscsi/ipackets.fth ___________________________________________________________________ Added: svn:executable + *
Added: ofw/inet/iscsi/keys.fth =================================================================== --- ofw/inet/iscsi/keys.fth (rev 0) +++ ofw/inet/iscsi/keys.fth 2009-01-03 01:52:19 UTC (rev 1057) @@ -0,0 +1,294 @@ +purpose: iSCSI parameters +\ See license at end of file + +decimal + +\ these are negotiated between initiator and target as key=value strings +\ each chategory has different behavior: boolean, digest, numeric, text + +\ Note: we negotiate the values with the target, but do not implement +\ the functionality in many cases. During negotiation we request that +\ digests and markers not be used, and expect the target to comply. + +\ For numerical values we simply accept values provided by the target. +\ Currently only MaxRecvDataSegmentLength is used. + +\ The keys are grouped by behavior. + +vocabulary bkeys +vocabulary dkeys +vocabulary nkeys +vocabulary tkeys + +\ boolean +also bkeys definitions + +variable DataPDUInOrder +variable DataSequenceInOrder +variable ImmediateData +variable InitialR2T +variable IFMarker +variable OFMarker + +\ digest +dkeys definitions + +variable DataDigest +variable HeaderDigest + +\ numeric +nkeys definitions + +variable DefaultTime2Wait +variable DefaultTime2Retain +variable ErrorRecoveryLevel +variable FirstBurstLength +variable MaxBurstLength +variable MaxConnections +variable MaxOutstandingR2T +variable MaxRecvDataSegmentLength +variable TargetPortalGroupTag +variable CHAP_A +variable CHAP_I + +\ text +tkeys definitions + +256 buffer: TargetAddress +256 buffer: TargetAlias +256 buffer: TargetName +256 buffer: InitiatorName +256 buffer: InitiatorAlias +256 buffer: AuthMethod +256 buffer: CHAP_C +256 buffer: CHAP_N +256 buffer: CHAP_R +256 buffer: CHAP_S + +previous definitions + +: find-key ( $ -- false | a type ) + ['] nkeys $vfind if ( xt ) + execute ['] nkeys exit ( a t ) + then ( $ ) + + ['] tkeys $vfind if ( xt ) + execute ['] tkeys exit ( a t ) + then ( $ ) + + ['] bkeys $vfind if ( xt ) + execute ['] tkeys exit ( a t ) + then ( $ ) + + ['] dkeys $vfind if ( xt ) + execute ['] tkeys exit ( a t ) + then ( $ ) + + 2drop false +; + +: default-keys ( -- ) + [ also bkeys ] + 1 DataPDUInOrder ! + 1 DataSequenceInOrder ! + 1 ImmediateData ! + 0 InitialR2T ! + 0 IFMarker ! + 0 OFMarker ! + + [ dkeys ] + + 0 DataDigest ! + 0 HeaderDigest ! + + [ nkeys ] + + 0 DefaultTime2Wait ! + 0 DefaultTime2Retain ! + 0 ErrorRecoveryLevel ! + 65536 FirstBurstLength ! + 262144 MaxBurstLength ! + 1 MaxConnections ! + 1 MaxOutstandingR2T ! + 65536 MaxRecvDataSegmentLength ! + \ 0 TargetPortalGroupTag ! + 5 CHAP_A ! + + [ tkeys ] + + 0 TargetAddress c! + 0 TargetAlias c! + 0 TargetName c! + 0 CHAP_C c! + + [ previous ] +; + +: get-addr ( $name --a ) find-key 0= abort" key not found" ; + +: get-num ( $name -- value ) + find-key ['] nkeys <> abort" numeric key not found" ( a ) + @ +; +: get-text ( $name -- $text ) + find-key ['] tkeys <> abort" text key not found" ( a ) + count +; +: get-key ( $key -- $value ) + ['] nkeys $vfind if ( xt ) + execute @ push-decimal (.) pop-base + exit + then ( $ ) + + ['] tkeys $vfind if ( xt ) + execute count exit + then ( $ ) + + ['] bkeys $vfind if ( xt ) + execute @ if " Yes" else " No" then + exit + then ( $ ) + + ['] dkeys $vfind if ( xt ) + execute @ if " CRC32C" else " None" then + exit ( a t ) + then ( $ ) + + 2drop " Unknown key" +; +: set-key ( $value $key -- ) + ['] nkeys $vfind if ( $v xt ) + execute -rot $dnumber if drop bad-number throw then + swap ! exit + then ( $v $k ) + + ['] tkeys $vfind if ( $v xt ) + execute place exit + then ( $v $k ) + + ['] bkeys $vfind if ( $v xt ) + execute -rot ( a $v ) + " Yes" $= swap ! exit + then ( $v $k ) + + ['] dkeys $vfind if ( $v xt ) + execute -rot ( a $v ) + " CRC32C" $= swap ! exit + then ( $v $k ) + + 4drop true abort" Invalid key" +; + +: set-text ( $text $name -- ) + find-key ['] tkeys <> if + 2drop true abort" text key not found" + then ( $text a ) + place +; +: set-iname ( -- ) + " iqn.1986-03.com.sun:boot." (mac-address) $cat2 + " InitiatorName" set-text + " openboot" " InitiatorAlias" set-text +; + + +create $( char " c, char ( c, +create $) char ) c, +\ for CHAP +: 2hd ( a n -- a' ) + swap >r + dup 4 >> >digit r@ c! + h# 0f and >digit r@ 1+ c! + r> 2+ +; +: put-hex ( $number $name -- ) + find-key ['] tkeys <> if ( $number ) + 2drop true abort" text key not found" + then ( $number a ) + + dup >r + + 1+ [char] 0 over c! 1+ [char] x over c! 1+ + -rot bounds ?do ( a' ) + i c@ 2hd + loop ( a' ) + r@ - r> c! +; + +256 buffer: hexbuf +: get-hex ( $name -- $hex ) + get-addr dup 1+ 2 " 0x" $= 0= if ( a ) + drop true abort" invalid hex format" + then ( a ) + + count dup 1 and if + 2drop true abort" invalid hex format" \ odd number of digits + then ( a n ) + + 2 /string hexbuf -rot bounds ?do ( buf ) + i c@ d# 16 digit 0= abort" bad number" ( buf h ) + 4 << i 1+ c@ d# 16 digit 0= abort" bad number" ( buf h l ) + + over c! 1+ ( buf' ) + 2 +loop + hexbuf tuck - +; + + +: append-key ( $name -- ) + 2dup get-key ( $name $value ) + " =" 2swap $cat3 append0 +; + + +\ handle incoming k=v pairs +256 buffer: keybuf +256 buffer: valbuf +0 value parsely + +: update-kev ( -- ) + debug? if + ." set " keybuf count type ." =" valbuf count type cr + then + valbuf count keybuf count set-key +; +: parse-keys ( a n -- ) + over to parsely + bounds ?do + i c@ [char] = = if + parsely i over - keybuf place + i 1+ to parsely + else + i c@ 0= if + parsely i over - valbuf place + i 1+ to parsely + update-kev + parsely c@ 0= if unloop exit then \ teminate on double null + then + then + loop + debug? if cr then +; + +\ LICENSE_BEGIN +\ Copyright (c) 2009 FirmWorks +\ +\ Permission is hereby granted, free of charge, to any person obtaining +\ a copy of this software and associated documentation files (the +\ "Software"), to deal in the Software without restriction, including +\ without limitation the rights to use, copy, modify, merge, publish, +\ distribute, sublicense, and/or sell copies of the Software, and to +\ permit persons to whom the Software is furnished to do so, subject to +\ the following conditions: +\ +\ The above copyright notice and this permission notice shall be +\ included in all copies or substantial portions of the Software. +\ +\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +\ +\ LICENSE_END
Property changes on: ofw/inet/iscsi/keys.fth ___________________________________________________________________ Added: svn:executable + *
Added: ofw/inet/iscsi/loadiscsi.fth =================================================================== --- ofw/inet/iscsi/loadiscsi.fth (rev 0) +++ ofw/inet/iscsi/loadiscsi.fth 2009-01-03 01:52:19 UTC (rev 1057) @@ -0,0 +1,56 @@ +purpose: load iSCSI package +\ See license at end of file + +devalias iscsi tcp//iscsi + +" " d# 32 config-string iscsi-user +" " d# 32 config-string iscsi-password + +\ true instance value debug? +\ false instance value verbose? +false value debug? +false value verbose? + +fload ${BP}/ofw/inet/iscsi/low.fth +fload ${BP}/ofw/inet/iscsi/buffers.fth + +\ debug.fth may be commented out to save space +fload ${BP}/ofw/inet/iscsi/debug.fth + +fload ${BP}/ofw/inet/iscsi/keys.fth +fload ${BP}/ofw/inet/random.fth +fload ${BP}/ofw/ppp/md5.fth +fload ${BP}/ofw/inet/iscsi/ipackets.fth +fload ${BP}/ofw/inet/iscsi/opackets.fth +fload ${BP}/ofw/inet/iscsi/methods.fth +fload ${BP}/ofw/inet/iscsi/scsi.fth + +fload ${BP}/dev/scsi/hacom.fth + +support-package: disk +fload ${BP}/dev/scsi/scsidisk.fth +end-support-package + +\ LICENSE_BEGIN +\ Copyright (c) 2009 FirmWorks +\ +\ Permission is hereby granted, free of charge, to any person obtaining +\ a copy of this software and associated documentation files (the +\ "Software"), to deal in the Software without restriction, including +\ without limitation the rights to use, copy, modify, merge, publish, +\ distribute, sublicense, and/or sell copies of the Software, and to +\ permit persons to whom the Software is furnished to do so, subject to +\ the following conditions: +\ +\ The above copyright notice and this permission notice shall be +\ included in all copies or substantial portions of the Software. +\ +\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +\ +\ LICENSE_END
Property changes on: ofw/inet/iscsi/loadiscsi.fth ___________________________________________________________________ Added: svn:executable + *
Added: ofw/inet/iscsi/low.fth =================================================================== --- ofw/inet/iscsi/low.fth (rev 0) +++ ofw/inet/iscsi/low.fth 2009-01-03 01:52:19 UTC (rev 1057) @@ -0,0 +1,120 @@ +purpose: iSCSI low level routines +\ See license at end of file + +hex + +d# 3260 value is_port +0 value use_port \ remember which port we used, for re-connect + +\ parent routines +: connect ( port -- connected? ) + debug? if ." connecting to port " dup .d cr then + " connect" $call-parent + debug? if dup 0= if ." not " then ." connected" cr then +; +: disconnect ( -- ) + " disconnect" $call-parent +; +: tcp-read ( adr len -- actual ) " read" $call-parent ; +: tcp-write ( adr len -- ) " write" $call-parent drop ; +: set-server ( server$ -- ) + dup if " $set-host" $call-parent else 2drop then +; + + +\ we do not have a parent physical device, so get memory directly +: dma-alloc ( size -- adr ) alloc-mem ; +: dma-free ( adr size -- ) free-mem ; +: dma-map-in ( vaddr n cache? -- devaddr ) 2drop ; +: dma-map-out ( vaddr devaddr n -- ) 3drop ; + +0 [if] +\ tcp input + +variable rah \ read ahead buffer +: rah0 ( -- ) 0 rah ! ; +: rahlen@ ( -- n ) rah 1+ c@ ; +: rahlen! ( n -- ) rah 1+ c! ; + +: rah? ( -- any? ) + rahlen@ dup 0> if exit then drop + rah 1 tcp-read dup rahlen! 0> +; +: rah@ ( -- c ) rah c@ rah0 ; + +: tcp-rd ( adr len -- actual ) + rah? if + over rah@ swap c! 1 /string ( adr' len' ) + 1 -rot + then + tcp-read dup 0> if ( rahl actual' ) + + + else + drop + then +; +[then] + +\ timeout +1 [if] +\ XXX for debugging +instance variable endtime +: set-interval ( interval -- ) + dup if get-msecs + then endtime ! +; +: timeout? ( -- flag ) + endtime @ if get-msecs endtime @ >= else true then +; +[then] + +\ read up to len characters into buffer at adr +\ returns -1 if the connection is closed +: wait-read ( adr len -- actual ) + d# 60000 set-interval \ try for up to 60 seconds + begin + 2dup tcp-read dup -2 = ( adr len actual flag ) + while ( adr len actual ) + drop ( adr len ) + timeout? if + debug? if ." wait-read timed out " cr then + 2drop 0 exit + then + repeat ( adr len actual ) + nip nip ( actual ) +; + +: (.12) ( d -- a n ) + <# d# 12 0 do # loop #> +; + +\ return the mac address as a string +: (mac-address) ( -- a n ) + mac-address drop dup 2+ be-l@ swap be-w@ (.12) +; + +\ convert a decimal string to an integer +: $dnumber ( adr len -- true | n false ) push-decimal $number pop-base ; + +\ LICENSE_BEGIN +\ Copyright (c) 2009 FirmWorks +\ +\ Permission is hereby granted, free of charge, to any person obtaining +\ a copy of this software and associated documentation files (the +\ "Software"), to deal in the Software without restriction, including +\ without limitation the rights to use, copy, modify, merge, publish, +\ distribute, sublicense, and/or sell copies of the Software, and to +\ permit persons to whom the Software is furnished to do so, subject to +\ the following conditions: +\ +\ The above copyright notice and this permission notice shall be +\ included in all copies or substantial portions of the Software. +\ +\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +\ +\ LICENSE_END
Property changes on: ofw/inet/iscsi/low.fth ___________________________________________________________________ Added: svn:executable + *
Added: ofw/inet/iscsi/methods.fth =================================================================== --- ofw/inet/iscsi/methods.fth (rev 0) +++ ofw/inet/iscsi/methods.fth 2009-01-03 01:52:19 UTC (rev 1057) @@ -0,0 +1,101 @@ +purpose: iSCSI high level routines +\ See license at end of file + +hex + +\ proposed syntax is select iscsi:server:port//disk@0:\filename +\ ofw will open this node with arguments "server:port" +\ and will open the subsidiary disk node with arguments "\filename" + +: decode-server ( server$ -- port# server$' ) + [char] : left-parse-string ( port$ server$ ) + 2swap dup if ( server$ port$ ) + push-decimal $number pop-base ( server$ port# error? ) + abort" Bad port number" ( server$ port# ) + else ( server$ port$ ) + 2drop is_port ( server$ port# ) + then ( server$ port# ) + -rot ( port# server$ ) +; +: mount ( target$ -- error? ) + decode-server ( port# server$ ) + set-server ( port# ) + dup to use_port + connect 0= if true exit then + + ['] login-discovery catch ( failed? ) + debug? if + ." login-discovery " + dup if ." failed" else ." succeeded" then cr + then + if true exit then + + + ['] login-normal catch ( failed? ) + debug? if + ." login-normal " + dup if ." failed" else ." succeeded" then cr + then +; + +\ Called when an instance, but not the last instance, of the driver +\ is being closed +: reclose-hardware ( -- ) ; + +\ Called when the last instance of driver is being closed +: close-hardware ( -- ) + logout + disconnect +; + +: seed-rng ( -- ) + " get-time" clock-node @ $call-method ( s m h d m y ) + 3drop d# 60 * + d# 60 * + rn ! + 3 0 do random drop loop \ stir the bits +; +: reopen-hardware ( -- okay? ) + seed-rng + true +; +: open-hardware ( -- status ) + reopen-hardware 0= if false exit then + + my-args dup if + bootnet-debug if + 2dup ." iSCSI: target is: " type cr + then + mount 0= + bootnet-debug if + ." iSCSI: " + dup if ." Succeeded" else ." Failed!" then cr + then + else + 2drop true + then +\ true to debug? +\ true to verbose? +; + +\ LICENSE_BEGIN +\ Copyright (c) 2009 FirmWorks +\ +\ Permission is hereby granted, free of charge, to any person obtaining +\ a copy of this software and associated documentation files (the +\ "Software"), to deal in the Software without restriction, including +\ without limitation the rights to use, copy, modify, merge, publish, +\ distribute, sublicense, and/or sell copies of the Software, and to +\ permit persons to whom the Software is furnished to do so, subject to +\ the following conditions: +\ +\ The above copyright notice and this permission notice shall be +\ included in all copies or substantial portions of the Software. +\ +\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +\ +\ LICENSE_END
Property changes on: ofw/inet/iscsi/methods.fth ___________________________________________________________________ Added: svn:executable + *
Added: ofw/inet/iscsi/opackets.fth =================================================================== --- ofw/inet/iscsi/opackets.fth (rev 0) +++ ofw/inet/iscsi/opackets.fth 2009-01-03 01:52:19 UTC (rev 1057) @@ -0,0 +1,261 @@ +purpose: iSCSI packets +\ See license at end of file + +hex + +: send-cmd ( -- ) + send-pdu + get-response +; + +: init-login ( -- ) + h# 43 init-pdu + !isid + stage flags! +; +: init-text ( -- ) + h# 04 init-pdu + h# 80 flags! + -1 to ttt !ttt +; + +: login-d ( -- ) + set-iname + 1 to cmdsn + 0 to expstatsn + 0 to itt + random to isid + !isid + init-login + " InitiatorName" append-key + " InitiatorAlias" append-key + " SessionType=Discovery" append0 + " AuthMethod=CHAP,None" append0 + send-cmd +; +: login-n ( -- ) + 0 to cmdsn + 0 to expstatsn + ++isid + init-login + h# 000a0000 to itt !itt + " InitiatorName" append-key + " InitiatorAlias" append-key + " TargetName" append-key + " SessionType=Normal" append0 + " AuthMethod=CHAP,None" append0 + send-cmd +; +: login-dp ( -- ) + h# 87 to stage + init-login + " HeaderDigest=None" append0 + " DataDigest=None" append0 +\ " DefaultTime2Wait" append-key +\ " DefaultTime2Retain" append-key + " IFMarker" append-key + " OFMarker" append-key + " ErrorRecoveryLevel" append-key + " MaxRecvDataSegmentLength=32768" append0 + send-cmd +; +: login-np ( -- ) + h# 87 to stage + init-login + !itt + " HeaderDigest=None" append0 + " DataDigest=None" append0 +\ " DefaultTime2Wait" append-key +\ " DefaultTime2Retain" append-key + " IFMarker" append-key + " OFMarker" append-key + " ErrorRecoveryLevel" append-key + " InitialR2T" append-key + " ImmediateData" append-key + " MaxBurstLength" append-key + " FirstBurstLength" append-key + " MaxOutstandingR2T" append-key + " MaxConnections" append-key + " DataPDUInOrder" append-key + " DataSequenceInOrder" append-key + " MaxRecvDataSegmentLength" append-key + send-cmd +; +: login-st ( -- ) + init-text + ++itt + " SendTargets=All" append0 + send-cmd +; +: login-none ( -- ) + flags@ h# 81 = if exit then + + h# 81 to stage + init-login + !itt + send-cmd +; +: login-chapa ( -- ) + 0 to stage + init-login + !itt + " CHAP_A=5" append0 + send-cmd +; + +\ use this version for production systems +: get-user ( -- ) + " iscsi-user" $getenv if 0 0 then + " CHAP_N" set-text + " iscsi-password" $getenv if 0 0 then + " CHAP_S" set-text +; + +: calculate-chap-response ( -- ) + " CHAP_I" get-addr 1 ( $I ) + " CHAP_S" get-text ( $I $N ) + " CHAP_C" get-hex ( $I $N $C ) + $cat3 + $md5digest1 ( $R ) + " CHAP_R" put-hex +; + +: login-chapn ( -- ) + h# 81 to stage + init-login + get-user + calculate-chap-response + " CHAP_N" append-key + " CHAP_R" append-key + send-cmd +; +: logout ( -- ) + h# 46 init-pdu + h# 80 flags! + !itt + send-cmd +; + +: (nop-out) ( -- ) + h# 40 init-pdu + !ttt + -1 outbuf >ITT be-l! + send-cmd +; +' (nop-out) is nop-out + +: auth-login ( -- ) + " AuthMethod" get-text " CHAP" $= if + login-chapa + login-chapn + else + login-none + then +; + +d# 1000 value outtime +: delay ( -- ) + debug? if ." delaying " outtime d# 1000 / .d ." seconds " cr then + outtime ms +; +: verify-target ( -- ) + " TargetName" get-text nip 0= abort" No target devices found" +; +: login-discovery ( -- ) + default-keys + h# 81 to stage + login-d + auth-login + login-dp + login-st + logout + disconnect + verify-target + delay +; +: login-normal ( -- ) + use_port connect 0= abort" reconnect failed" + h# 81 to stage + login-n + auth-login + login-np +; + +: login ( -- ) + login-discovery + login-normal +; + +\ +\ SCSI commands +\ + +\ statbyte values come asynchronously in the response packet +: result ( -- hwresult | statbyte 0 ) + status-valid? if + status + debug? if dup if ." statbyte is " dup .h cr then then + false + else + debug? if ." no status" cr then + true + then +; +: nodata-cmd ( -- hwresult | statbyte 0 ) + h# 80 flags! + send-cmd + result +; +: write-cmd ( data-adr,len -- hwresult | statbyte 0 ) + h# a0 flags! + dup outbuf >ExpDataLen be-l! + send-pdu+data + get-response + result +; +: read-cmd ( data-adr,len -- hwresult | statbyte 0 ) + to read-length + to read-address + h# c0 flags! + read-length outbuf >ExpDataLen be-l! + send-cmd + result +; +: execute-command ( data-adr,len dir cmd-adr,len -- hwresult | statbyte 0 ) + dup d# 16 > if ." CDB is too large" -1 exit then + + h# 01 init-pdu \ make it non-immediate + ++itt \ and change itt + outbuf >CDB swap move ( data-adr,len dir ) + !lun \ set LUN + over outbuf >ExpDataLen be-l! + over if ( data-adr,len dir ) \ moving data + if read-cmd else write-cmd then + else + 3drop nodata-cmd + then +; + +\ LICENSE_BEGIN +\ Copyright (c) 2009 FirmWorks +\ +\ Permission is hereby granted, free of charge, to any person obtaining +\ a copy of this software and associated documentation files (the +\ "Software"), to deal in the Software without restriction, including +\ without limitation the rights to use, copy, modify, merge, publish, +\ distribute, sublicense, and/or sell copies of the Software, and to +\ permit persons to whom the Software is furnished to do so, subject to +\ the following conditions: +\ +\ The above copyright notice and this permission notice shall be +\ included in all copies or substantial portions of the Software. +\ +\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +\ +\ LICENSE_END
Property changes on: ofw/inet/iscsi/opackets.fth ___________________________________________________________________ Added: svn:executable + *
Added: ofw/inet/iscsi/scsi.fth =================================================================== --- ofw/inet/iscsi/scsi.fth (rev 0) +++ ofw/inet/iscsi/scsi.fth 2009-01-03 01:52:19 UTC (rev 1057) @@ -0,0 +1,63 @@ +purpose: SCSI routines for iSCSI +\ See license at end of file + +hex + +\ XXX is this what we need? +: max-transfer ( -- n ) + " MaxRecvDataSegmentLength" get-num ( n ) + /max-transfer min + dup 0= if drop /max-transfer then +; + + +\ stubs + +\ error code +fd constant bus-reset + +0 value his-id +0 value his-lun +: set-address ( unit target -- ) + to his-id to his-lun +; + +: set-timeout ( msecs -- ) drop ; + + +0 [if] +\ debug +: showkey ( $name -- ) + 2dup type space get-key type cr +; +: showkeys ( -- ) + " MaxRecvDataSegmentLength" showkey + " FirstBurstLength" showkey + " MaxBurstLength" showkey + ." max-transfer " max-transfer .d +; +[then] + +\ LICENSE_BEGIN +\ Copyright (c) 2009 FirmWorks +\ +\ Permission is hereby granted, free of charge, to any person obtaining +\ a copy of this software and associated documentation files (the +\ "Software"), to deal in the Software without restriction, including +\ without limitation the rights to use, copy, modify, merge, publish, +\ distribute, sublicense, and/or sell copies of the Software, and to +\ permit persons to whom the Software is furnished to do so, subject to +\ the following conditions: +\ +\ The above copyright notice and this permission notice shall be +\ included in all copies or substantial portions of the Software. +\ +\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +\ +\ LICENSE_END
Property changes on: ofw/inet/iscsi/scsi.fth ___________________________________________________________________ Added: svn:executable + *
openfirmware@openfirmware.info