12.3.9.1 SIM/HA接受目标设备I/O CCB接受
当SIM/HA从主机目标设备方式外围驱动程序接收了一个接受目标设备I/O CCB时,它应有如下操作:
a) 检验接受目标设备I/O CCB中规定的路径id、目标设备id、和目标设备LUN是那个允许的LUN。若该LUN未被允许.CCB CAM状态和xpt_action()返回状态应是路径无效。
b) 检验在接受目标设备I/O CCB中设置CDB完成函数。若它未被设置,CCB CAM状态和xpt_action()返回状态应是带错误的完成请求.
c) 检验设置指向断定缓冲器的指针.并且断定缓冲器长度最小为l8字节。若不正确.CCB CAM状态和xpt_action()返回状态应是带错误的完成请求。
d) 另外xpt_action()返回状态应是进行中的请求。
12.3,9.2 SIM/HA COB接受
对于接受目标设备I/0函数,处理CD8接受的错误条件在12.3.9.6中描述。
当为主机目标设备方式中一个允许的LUN.SIM/IIA在SCSI总线上请求一个CDB时,它应有如下实现:
a)若在识别消息中断开特权位未被设置,并且断开必须位被设置在ENABLE LUN CCB的目标设备方式专用CAM标记字段中,则SIM应进入总线空闲阶段。
注31:要引用处理这种情况见I2.3.4(使用立即通知CCB).能够在SJ20631--97中寻到关于总线空闲阶段的附加信息.
b) 另外,SIM应从使ENABLE LUN或接受目标设备I/0函数有效的接受目标设备I/O CCB的SIM的表移走一个CCB.若CCB无效,SIM应进入状态阶段并对启动设备返回忙SCSI状态.SIM/HA应通过12.3.4中描述的立即通知机制通知这个事件的主机目标设备方式外围驱动程序。
c)接受目标设备I/O CCB应以下列信息填充:
1)这个SIM/HA的目标设备ID。
2) SIM/IIA的总线ID.
3) LUN ID.
4)接收来自启动设备的CDB数据。
——若CDB的操作代码的组代码是售方专用.SIM/HA应为这个LUN传送ENABLE LUN CCB
中规定的CDB字节数。引入CDB中的组代码(6或7)应选择来自ENABLE LUN CCB
的售方专用CDB大小.若所选的CDB大小(ENABLB LUN CCB中规定的)为“0”.SIM/HA应只传送CDB操作代码.若请求的字节数来被传送或为这个组代码规定的大小为“0”,刚SIM应在所选CCB中设置所提供区域中传送的CDB字节(更进一步的信息见12.3.9.6).
注32:SIM/HA不在接受目标设备I/0 CCB传送的CDB字节数中设置CDB长度字段.CDB中的组代码用于SIM/HA和主机目标设备方式外围驱动程序以便确定CDB中的长度.CDB长度字段用于表示大量缓冲器区域对CDB字节是有效的.
5)在启动设备ID字段中选择这个SIM/HA的启动设备的SCSI总线ID。
d) CAM状态应被置为接收的CDB。
e) 若这是一个带标签请求,则SIM/HA应有如下操作;
1) SIM/HA应检验主机目标设备方式外围驱动程序是否已允许这个LUN的带有允许的LUN命令的标签排队。若主机目标设备方式外围驱动程序不支持标签命令,SIM/HA廊为排队标签消息发送消息拒绝消息,并按SJ 20631--97中的规定继续。
2) 若主机目标设备方式外围驱动程序支持标签命令,则会发生以下情况:
·排队标签消息(排队头标签、顺序排队标签、或简单排队标签)应被放入接受目标设
备I/O CCB的标签排队操作字段中。
·排队标签值应被放入接受目标设备I/O CCB的标签id字段中.
f) 若主机目标设备方式外围驱动程序要求断开,SIM/HA应发送断开消息并进入总线空闲阶段.若不要求求断开(ENABLE LUN CCB),但允许断开(识别消息).则SIM/HA应发送断开消息并进入总线空闲阶段.
g) 调用接受目标设备I/O CCB完成回调字段中提供的主机目标设备方式外围驱动程序CDB完成回调函数.
注33.SIM/HA透明地处理SDTR和WDTR消息.
12.3.9.3主机外围驱动程序CDB完成回调
当主机目标设备方式外围驱动程序的CDB完成回调函数被调用时,它应有如下操作:
a)确定它如何响应CDB中规定的SCSI命令,若运行带标签命令,,主机目标设备方式外围驱动程序可以对继续目标设备I/O函数使用相同的CCB(尽管这不被要求).填充连接id、启动设备id、函数代码、数据指针(若需要)、数据记数(若需要)、数据传送方向(如果有的话)、回调完成函数、和排队标签id.若需要数据传送,则方向位应在继续目标设备I/O CCB的CAM标记字段中被设置:若允许断开,主机目标设备方式外围驱动程序在传送某些数据之后可能需要一个保存数据指针消息和断开消息,若完成了该请求,则SEND_STATUS位应被设置在继续目标设备I/O CCB的CAM标记字段中,SCSI状态字段应包含返回到启动设备的SCSI状态
b) 若检验情况SCSI状态被返回到启动设备,则主机目标设备方式外围驱动程序应按SJ 20631-97的规定配置和保持偶然联系条件。
注34:主机目标设备方式外围驱动程序断定数据总是代表主机目标设备方式外围驱动程序的当前状态.
c) 随后主机目标设备方式外围驱动程序应通过传送继续目标设备I/O.CCB的xpt_action()函数调用SIMI/HA.
d) 从xpt_action()调用返回时,主机目标设备方式外围驱动程序应检验来自xpt_ action()的返回值是进行中的请求.若不是进行中的请求的状态被返回,则该命令不能被传送到SIM/HA(可能由于总线复位或接受一个消息).正确处理该条件是主机目标设备方式外围驱动程序的责任。
注35:对更进一步的信息见12.3.4(使用立即通知CCB).
12.3.9.4 SIM/HA继续目标设备I/O COB接受
数据阶段和消息阶段为继续目标设备I/O函数处理的错误条件在12.3.9.6中描述.
当SIM/HA接收了继续目标设备I/O CCB时.它应有如下操作:
a) 若SIM/HA正从总线复位或总线设备复位、或立即通知条件恢复,应相应的设置CAM状态和xpt_action()返回状态.
b) 若存在一些SIM/HA通过主机设置CAM状态和xpt action()返回状态为不确认的事件并返回.则为这个I T_L连系检验是否存在一些未完成的末确认事件.
c) 检验继续目标设备I/O CCB中规定的路径id、目标设备id、和目标设备LUN是那个允许的LUN.若LUN未被允许,CCB CAM状态和xpt_act ion()返回状态将是无效的路径。
d) 检验设置在继续目标设备I/O CCB中的完成回调函数.若它未被设置,CCB C从状态和xpt—actionO返回状态应是带有错误的完成请求。
e) 检验设置指向断定缓冲器的指针,并且断定缓冲器长度最小为18字节。若不正确,CCB CAM状态和xpt_action()返回状态应是带有错误的完成请求.
f) 此外.SIM应设置CAM状态和xpt- action()返回值是进行中的请求。
g) 若不允许断开,SIM/HA应执行必要的阶段转化.若允许断开,可能的话.SIM/HA应重新选择启动设备以便执行必要的阶段转化和重建I T L或I_T_L Q连系.SIM/HA执行的操作次序按如下规定t
1) 若方向位在继续目标设备I/O CCB的CAM标记字段中被置为指定的数据入(数据进入启动设备)或数据出(数据出自启动设备),则数据应被转换(数据阶段)。
2)若发送状态位被设置在继续目标设备I/O CCB的CAM标记字段中,SIM/HA应进入状态阶段并完成带有命令完成消息的请求及进入总线空闲阶段。
3)若允许断开并且SEND_STATUS位不在继续目标设备I/O CCB的CAM标记字段中被设置.
SIM/HA应发送保在数翅堂盐消息和逝汪消息,随后进入总线空闲阶段.
4) CCB中规定的所有操作已披成功传送之后,继续目标设备I/O CCB中的主机目标设备方式外围驱动程序的回调完成函数应被调用,CAM状态为无错误完成的请求.
12.3.9.5主机目标设备方式外围驱动程序继续目标设备I/0回调
主机目标设备方式外围驱动程序的继续目标设备I/O回调完成函数应:
a) 若CAM状态不是无错误完成的请求,则会发生一个错误,若适用并保持它,主机目标设备方式外围驱动程序应负责构成断定数据,断定数据条件在SJ 20631--97中定义。主机目标设备方式外围驱动程序也应负责保持与断定数据有关的偶然联系条件。
b) 若请求完成并且主机目标设备方式外围驱动程序有一些数据和/或状态发送到启动设备,则继续目标设备I/0 CCB应被发送到SIM.且设置适当的字段。
c) 若状态已被发送到启动设备,则主机目标设备方式外围驱动程序可以通过调用传送相同CCB的SIM/HA重新发出相同的CCB。CCB应按本部分的规定为接受目标设备I/O CCB设置所有相应的字段。SIM/HA目前能够重新使用该CCB以便为接收的CDB接受一个新的连接.
d)若状态未被发送,则主机日标设备方式外围驱动程序能够在它建立之后重新发出该CCB作为一个继续目标设备I/O CCB。
12.3.9.6命令接受错误和数据阶段错误处理
若不支持命令组代码(组3、4、6或7).或CDB长度存在错误,或不能被透明处理的输入CDB中存在错误,则SIM/HA应有如下操作:
a)在接受目标设备I/0 CCB中殴置相应的连接ID,和在启动设备ID字段中选择这个SIM/HA的启动设备的目标设备ID。
b) 若在输入CDB中该条件出错,SIM/HA应构成需要的正确SCSI断定数据18字节,并且把它放入接受目标设备I/O CCB断定缓冲器中.SIM/HA通过设置CAM状态中的自动断定标记也表示断定数据有效.并设置SCSI状态字段为检验情况.
c) 对于一个带标签排队I/O处理:
注36:若SIM/HA或主机目标设备方式外围驱动程序已表示排队标签不披支持,则排队标签消息应被拒绝.
1)排队标签消息(排队头标签、顺序排队标签、或简单单排队标签)被放入接受目标设备I/O CCB的标签排队操作字段中.
2)排队标签值虑被放入接受目标设备I/O CCB的标签ID字段中.
3)标签排队操作允许位应被置在接受目标设备I/O CCB的CAM标记段中.
d) 由于SIM/HA的各种功能和总线条件.SIM/HA应以下列任一种方式释放SCSI总线:
1)若主机目标设备方式外围驱动程序请求断开,SIM/HA应发送一个断开消息并进入总线空闲阶段.若断开不被要求,但被允许(识别消息),则SIM/HA应发送一个断开消息并进入总线空闲阶段。若SIM/HA从总线上断开,则接受目标设备I/O CCB中的CAM状态应被置为无效的CDB。
2)引起不期望的总线空闲,更进一步信息见SJ 20631--97.
若SIM/HA引起一个不期望的总线空闲条件,则接受目标设备I/O CCB中的CAM状态应放置为不期望的总线空闲.
注37;不期望的总线空闲:CAM状态结束I/O处理,并且主机目标设备方式外围驱动程序不应试图终止它.
e) 使用接受目标设备I/O CCB内的回调字段回调主机目标设备方式外围驱动程序。
若CAM状态是不期望的总线空闲.主机目标设备方式外围驱动程序应负责建立和保存偶然联系条件。若CAM状态是期望的总线空闲.它也应通过发送一个继续目标设备I/O CCB完成总线事物处理以便相应的终止该连接.
若SIM/HA检测到不能透明地处理的数据阶段、或消息阶段、或状态阶段错误或任何其它不可恢复错误(除了超时外).则当处理继续目标设备I/O CCB时,SIM/HA应:
a) 在继续目标设备I/O CCB中设置适当的连接ID和在启动设备ID字段中选择这个SIM/HA的启动设备的目标设备ID.
b) SIM/HA应构成SCSI-2要求的正确18字节SCSI断定数据并把它放入继续目标设备I/O CCB断定缓冲器.SIM/HB也表示通过设置CAM状态中的自动断定标记使断定数据有效并设置SCSI状态字段为检验情况.
c) 对于标签排队I/O处理:
1)排队标记值应被放入继续目标设备I/O CCB的标记ID字段中.
2)标签排队操作允许位应被设置在继续目标设备I/O CCB的CAM标记字段中。
d) 由于SIM/HA的各种功能和总线条件.SIM/HA应以下列方式之一释放SCSI总线:
1)若目标设备方式外围驱动程序请求断开,SIM/HA应发送一个断开消息并进入总线空闲阶段。若断开不被要求.但被允许(识别消息),则SIM/HA应发送一个断开消息并进入总线空闲阶段。若SIM/HA从总线上断开,则继续目标设备I/O CCB中的CAM状态应被设置成下面一种状态:
· 目标设备总线阶段顺序失效
· 检出不可正确的奇偶校验错
· 启动设备检出错误
2)引起一个不期望的总线空闲,更进一步信息见SJ 20631--97(总线空闲)。
若SIM/HA引起一个不期望的总线空闲条件,则继续目标设备I/O CCB中的CAM状态应被置为不期望的总线空闺。
注38:不期望的总线空闲CAM状态结束I/O处理,并且主机目标设备方式外围驱动程序不应试图终止它.
e) 使用继续目标设备I/O CCB内的回调字段回调主机目标设备方式外围驱动程序,
若CAM状态是期望的总线空闲,主机目标设备方式外围驱动程序应负责建立和保存偶然联系条件。若CAM状态是期望的总线空闲,它也应通过发送一个继续目标设备I/O CCB完成总线事物处理以便相应的终止该连接。
12.3.9.7接受和继续目标设备I/0 CCB超时
对于还没有被充分识别的连接,SIM/HA应使用它的默认超时值。充分识别的连接有以下含义:
——初始连接:
识别消息已被ATN信号为“伪”的不带错误的该连接处理。
识别消息和排队标签消息已被ATN信号为“伪”的不带错误的该连接处理。
——重新连接:
通过有效的继续目标设备I/O CCB充分识别。
对于初始连接.若SIM/HA在默认超时周期期满未充分识别该连接,SIM/HA应按12.3.4.1.1中的规定运行。当该初始连接已被充分识别时,SIM/HA应使用接受目标设备I/O CCB超时字段值减去以秒为单位的充分连接识别的选择时间(如果有得话).
重新连接超时值应是有效的继续目标设备I/O CCB超时值字段.
CCB中规定的超时周期以秒来测量,并且当该连接已被充分识别时应以下列方式处理:
a) 对于初始连接,接受目标设备I/0 CCB超时
1)在主机目标设备方式外围驱动程序回调之前,超时周期是指从SIM/HA选择到正好选中
注39:使用断开事例,
一当启动设备选择了SIM/HA时,超时周期开始.
一识别消息和任选的排队标签消息被接收之后.SIM/HA进入命令阶段.
—接收CDB,并且SIM/HA断开.
一当SIM/HA从总线(断开消息和总线空闲阶段)断开时.
一CCB超时值-连接识别时间(以秒为单位)是正值,超时周期结束,无操作运行.
一SIM/HA回调主机目标设备方式外围驱动程序,
一若回调之前计时器满-则这个接受目标设备I/O CCB表示一个超时条件,
不使用断开事例;
一当启动设备选择了SIM/HA时,超时周期开始,
一识别消息和任选的排队标签消息被接收之后.SIM/HA进入命令阶段.
一接收了CDB,但SIM/HA未被允许断开,
一CCB超时值一连接识别时间(以秒为单位)是正值,超时周期结束,无操作运行.
一SIM/HA回调主机目标设备方式外围驱动程序.
一若回调之前计时器满.则这个接受目标设备I/O CCB表示一个超时条件.
2)若接受目标设备I/O CCB的超时周期满.SIM/HA应设置CAM状态为命令超时.
3)适当的连接ID应在接受目标设备I/O CCB中被设置.选择这个SIM/HA的启动设备的SCSI总线ID应被设置在启动设备ID字段中.
4) SIM/HA引起一个不期望的总线空闲,更进一步信息见SJ 20631---97(总线空闲).
5)利用接受目标设备I/O CCB内的回调字段回调主机目标设备方式外围驱动程序。
b) 重新连接的继缝目标设备I/O CCB
l)在主机目标设备方式外围驱动程序回调之前,时间周期是从启动设备的SIM/HA重新选择开始到正好选中这段时问.
2)若继续目标设备I/O CCB的超时周期期满.SIM/HA应设置CIM/HA状态为命令超时.
3)若数据传送已被这个CCB规定,剩余长度应被置成未传送的字节数.
4) SIM/HA引起一个不期望的总线空闲,更进一步信息见SJ 20631--97(总线空闲).
5)利用继续目标设备I/O CCB内的回调字段回调主机目标设备方式外围驱动程序.
主机目标设备方式外围驱动程序应为所有超对负责构成和保持断定数据.
12.3.10接受目标设备I/O COB
XPT的提供者定义接受目标设备I/O CCB结构如下:
typedef struct ccb _ accept _ targ3
{
CCB _HEADER3 ccb _ header3 : / *标题信息字段*/
CCB HEADER3 cam _ next _ ccb : / *为操作指向下一个CCB 的指针*/
CAM VOID OFFSET cam_req map ; / *请求时指向映象信息的指针*/
CAM_VOID (*cam _cbfcnp ) (): / *回调完成函数*/
CAM U8 cam data ptr ; / *指向数据缓冲器/SG 表的指针*/
CAM U32 cam_dxfer_len ; / *数据传送长度*/
CAM U8 cam cdb _ len ; / * CDB 的字节数*/
CAM U8 cam reservedl ; / *为定位(调整)保留*/
CAM U16 cam_sglist_cnt ; / *分散集中表入口号*/
CAM U32 cam_vu_field ; / *售方专用字段*/
CAM U8 cam_scsi_status : / *返回的SCSI 设备状态*/
CAM U8 cam_reserved2 / *为调整保留*/
CAM U16 cam sense_resid: / *自动断定数据残留长度:2 的补码形式*/
CAM U32 cam_resid ; / *传送剩余长度:2 的补码形式*/
CAM U32 cam _ timeout /*超时值*/
CDB UN3 cam_cdb_io /*联合CDB 字节/指针*/
CAM U8 cam msg ptr /*指向消息缓冲器的指针*/
CAM U16 cam msgb len /*消息缓冲器中的字节数*/
CAM U16 cam vu_ flags /*售方专用标记*/
CAM U8 cam_tag action /*标记排队怎么做*/
CAM U8 cam reserved3[3] /*为调整保留*/
CAM U32 cam _ tag id /*标记ID * /
CAM U32 cam initiator_id[2] / *启动设各ID 目标(设备)操作*/
CAM U16 cam sense_len : / *为自动断定请求的字节数*/
CAM U8 cam reserved4 / *为调整保留*/
CAM U32 cam sim sense [16] / * sIM 检索断定数据的工作区域*/
CAM U8 cam sense buf [256] / *断定数据缓冲器*/
} CCB ACCEPT TARG3 :
12.3.10.1接受目标设备I/O的组成说明
——请求CCB的发送者设置的CCB HEADER3组成的信息.
· cam func_code
该组成应包含XPT_CAM_3.CCB函数代码
· cam3_func code:
该组成应包含XPT_ACCEP TARG函数代码。
· port_id.
该组成应包含一个端口号(如:SCSI总线号).
· addr_specl:
该组成应包含SCSI目标设备说明符,
· addr_spec2;
该组成应包含SCSI逻辑单元说明符, .
· cam_sim_generation:
该组成应反映为当前连接操作返回的SIM连接生成号.
· cam_sim_bhandle:
该组成戍反映为当前连接操作返回的SIM连接处理.
——cam_flags;
以下是该函数有效的cam_flags.cam_flags位的完成描述见11.8.1.1.
·CDB是一个指针(cAM.CDB POINTER)-表示:接受目标设备I/O CCB中包含的CDB是一个指针.CDB长度字段应表示CDB缓冲器的大小.
·CDB物理特性(CAM CDB_PHYS)一表示指针地址是虚拟的或者是物理的.
·断定缓冲器(CAM_SNS_BUF_PHYS)-表示指针地址是虚拟的或者是物理的.
·禁止完成回调(CAM_DIS_ CALLBACK).
所有其它组成说明见11.8.1.1.接受目标设备,I/0- CCB具有与执行SCSI I/O CCB一样的准确定义.
12.3.10.2接受目标设备I/0返回
下面列出了接受目标设备I/O CCB的可能CAM状态值:
——无效的请求一表示CCB被发送到一个禁止的LUN.
——接收的CDB —表示CCB包含从启动设备接收的CDB.
——无效的CDB —目标设备方式CDB错误.
——由主机中止的请求.
——SCSI总线复位发送/接收一这个SIM/HA正从总线复位恢复.
——总线设备复位发送一这个SIM/HA正从总线设备复位消息恢复。
—一命令超时一规定的时间周期已满,
——路径无效.
——不期望的总线空闲。
12.3.11继续目标设备I/O CCB
XPT的提供者定义继续目标设备I/0 CCB结构如下:
Typedef struct ccb_cont_targ3
{
CCB HEADER3 ccb _ header3 / *标题信息字段*/
CCB HEADER3 cam next _ccb / *为动作指向下一个CCB 的指针*/
CAM VOID OFFSET cam_req _ map / *请求时指向映象信息的指针*/
CAM VOID ( * cam _ cbfcnp ) ( ) /*回调完成功能*/
CAM U8 cam _ data _ ptr / *指向数据缓冲器/sG 表的指针*/
CAM U32 cam _ dxfer len / *数据传送长度*/
CAM U8 cam _ cdb _ len / * CDB 的字节数*/
CAB U8 cam _ reservedl / *为定位(调整)保留*/
CAM U16 cam _ sglist _ cnt / *分散集中表入口号*/
CAM U32 cam _ vu _ field / *售方专用字段*/
CAM U8 cam _ scsi _ status / *返回的SCgl 设各状态*/
CAM U8 cam _ reserved2 / *为调整保留*/
CAM U16 cam _ sense _ resid / *自动断定数据剩余长度:2 的补码形式*/
CAM U32 cam _ resid / *传送剩余长度:2 的补码形式*/
CAM U32 cam _ timeout / *超时值*/
CDB UN3 cam _ cdb _ id / *联合CDB 字节/指针*/
CAM U8 cam _msg ptr / *指向消息缓冲器的指针*/
CAM U16 cam _ msgb_ len / *消息缓冲器中的字节数*/
CAM U16 cam_vu _ flags / *售方专用标记*/
CAM U8 cam _ tag action / *标记排队怎么做*/
CAM U8 cam _ reserved3 [3] / *为调整保留*/
CAM U32 cam _ tag _ id /*标记ID * /
CAM U32 cam_initiator _ id [2] / *启动设备ID 目标(设备)操作*/
CAM U16 cam _ sense _ len / *请求自动断定的字节数*/
CAM U8 cam _ reserved4 / *为调整保留*/
CAM U32 cam _ sim _ sense [16] / * SIM 检索断定数据的工作区域*/
CAM U8 cam _ sense _ buf [256] / *断定数据缓冲器*/
} CCB CONT TARG3
12.3. 11.1继续目标设备一I/0的组成说明
——请求CCB的发送者设置的CB_HEADER3组成的信息.
· cam_func code;
该组成应包含XPT_CAM_3_CCB函数代码.
· cam3_func_code;
该组成应包含XPT_CONLTARG函数代码。
· port_id
该组成应包含一个端口号(如:SCSI总线号).
· addr_specl:
该织成应包含SCSI目标设备说明符.
· addr_spec2
该组成虑包含SCSI逻辑单元说明符,
· cam_sim_generatiom
该组成应反映为当前连接操作返回的SIM连接生成号,
· cam_simbhandle,
该组成应反映为当前连接操作返回的SIM连接处理。
——cam flags;
以下是该函数有效的cam_flags,cam_flags位的完成描述见11.8.1.1.
· 方向出一从目标设备外围设备发送数据到启动设备.
◇SG表/数据缓冲器指针和数据传送长度字段应被填充.
· 方向入一从启动设备接收数据到目标设备外围设备.
◇ SG表/数据缓冲器指针和数据传送长度字段应被填充,
· 无方向一无数据阶段要求,
· 分散/集中一表示数据缓冲器指针是一个指向分散/集中表的指针.
· 标签排队操作允许一表示这是一个带标签请求并且标签ID应被填充.
· 断定缓冲器一表示指针地址是虚拟的或者是物理的.
· 完成回调.
所有其它组成说明见l1. 8.1.1.接受目标设备I/Q.CCB具有与执行SCSI I/O CCB一样的准确定义.
12.3. 11.2继续目标设备I/0返回
下面列出了继续目标设备I/0 CCB的可能CAM状态值:
——无效的请求一表示CCB被发送到一个已禁止的LUN.
——进行中的请求- SIM/HA接受的请求,
——带有错误的完成请求一表示CCB未被适当配置,
——由主机中止的请求。
——无错误完成的请求一请求成功完成,
——SCSI总线复位发送/接收一这个SIM/HA正从总线复位恢复.
——未检出HA一该HA不再响应,
——总线设备复位发送一这个SIM正从总线设备复位消息恢复.
——目标设备总线阶段顺序失效,
——检出不正确的奇偶校验错,
——启动设备检出错误。
——不期望的总线空闲。
——目标设备选择超时一启动设备响应选择失败.
——命令超时一规定的时间周期已满。
——路径无效,
——主机来确认的事件一主机目标设备方式外围驱动程序还未确认的事件.
12.3.12禁止主机目标设备方式LUN
当主机目标设备方式外围驱动程序希望为一个允许的LUN禁止主机目标设备方式时,它应执行下列任务:
a) 对所有被发送到SIM并还未返网的接受目标设备I/O CCB发出一个中止CCB。
b) 等待处理发送到SIM的所有继续目标设备I/O CCB被完成,
c) 一旦主机目标设备方式外围驱动程序控制了所有CCB,它应发出一个ENABLE LUN CCB到SIM/HA,目标设备CCB号等于“0”(表示LUN应被禁止)。
d) 成功完成对主机目标设备方式LUN的禁止(若请求完成无错误,则由CAM状态表示)时,主机目标设备方式外围驱动程序应控制所有发送到SIM/HA的立即通知CCB。若这样期望,当前主机目标设备方式外围驱动程序可能释放CCB。
当SIM接收一个日标设备CCB号等于“0”(禁止LUN)的ENABLE LUN CCB,它应执行以下任务:
a) 若LUN从来被允许.则ENABLE LUN- CCB应被返回,CAM状态为无效的请求。
b) 若由SIM控制的接受目标设备I/O CCB或继续目标设备I/Q CCB仍然存在,则禁止的LUN请求失败,CAM状态为带有错误的完成请求。
c) 未确认的SIM/HA事件表应被清除。
d) 接受另外的允许LUN的ENABLE LUN.CCB之前.由SIM-接收的所有后续的接受目标设备I/O和继续目标设备,I/O CCB应被返回,CAM状态为五兹的请求。
12.3.13异常情况
12.3.13.1总线复位
当总线复位(硬复位)被发送或接收时,事件顺序发生如下:
a)SIM/HA操作如下:
1)对于通过调用回调完成函数经受复位的总线,消除由SIM/HA控制的任何未完成的目标设备I/0,CAM状态为接收的/发送的SCSI总线复位.
· 当前总线上的任何I/0。
· 当前SIM/HA中已排队的任何继续目标设备I/0请求.
2)导致主机目标设备方式外用驱动程序异步回调函数被作为一般的异步回调通知的一部分来调用,
3)所有初始连接应完成,SCSI状态为忙碌,直到SIM/HA接收一个适当的通知确认CCB。
4)当复位恢复进行时.由SIM接收的所有继续目标设备I/O CCB应被返回.CAM状态为发送/接收的SCSI总线复位.
5)当主机目标设备方式外围驱动程序发出一个通知确认CCB,同时复位清除字段设置,并且顺序标识符等于“0”时,复位恢复应被完成.
6)对于经历了总线复位的总线上所有注册的LUN,SlM/HA朱确认事件表应被清除.
b) 主机目标设备方式外围驱动程序异步回调例程应,
1)清除所有未决的断定数据.
2)停止处理主机目标设备方式外围驱动程序所控制的任何未完成请求.这些由主机目标设备方式外围驱动程序正处理的是接受目标设备I/O或继续目标设备I/0 CCB。
3)对于所有启动设备.应构成和保存表示作为一个总线复位的结果引起的部件注意条件的断定数据.构成和清除偶然联系条件的更进一步信息见SJ 20631--97。
4)发出一个通知确认CCB,同时复位清除字段设置,并且顺序标识符等于“O”。
5)若需要,主机目标设备方式外围驱动程序应发出/重新发出接受目标设备I/0 CCB, 以使SIM/HA能够恢复正常处理.
12.3.13.2总线设备复位消息
当发送/接收一个总线设备复位消息时,事件顺序发生如下:
a)SIM/HA应:
1)对于通过调用回调完成函数接收总线设备复位消息的目标设备,清除任何由SIM/HA控制的未完成的目标设备I/O,CAM状态为总线设备复位.SIM/HA控制的请求是:
· 当前总线上的任何I/O。
· 当前SIM中已排队的任何继续目标设备I/O请求.
2)导致主机目标设备方式外围驱动程序异步回调函数被作为一般的异步回调通知的一部分来调用.
3)所有初始连接应完成,SCSI状态为忙碌,直到SIM/HA接收一个适当的通知确认CCB。
4)在复位恢复进行时,由SIM接收的所有继续目标设备I/OCCB应被返回,CAM状态为SCSI总线复位。
5)当主机目标设备方式外围驱动程序发出一个通知确认CCB.同时复位清除字段设置,并且顺序标识符等于“O”时,复位恢复应被完成。
6)对于在接收总线设备复位消息的目标设备上所有允许的LUN, SIM/HA未确认的事件表应被清除.
b) 主机目标设备方式外围驱动程序异步回调例程应:
1)清除所有未决的断定数据.
2)停止处理主机目标设备方式外围驱动程序所控制的任何未完成请求。这些由主机目标设备方式外围驱动程序正处理的是接受目标设备I/O或继续目标设备I/O CCB.
3)对于所有启动设备,应构成和保存表示作为一个总线复位的结果引起部件注意条件的断定数据。构成和消除偶然练习条件的更进一步信息见SJ 2063l—97。
4)发出一个通知确认CCB.同时复位清除字段设置,并且顺序标识符等于“O”.
5)若需要,主机目标设备方式外围驱动程序应发出/重新发出接受目标设备I/O CCB,以使SIM/HA能够恢复正常处理
12.3.14在未允许的LUN上的COB接受
对于未被允许的LUN,当SIM/HA接收一个CDB时,依据接收的命令会有下列一种顺序发生:
a)查询命令
对于未允许的LUN,若sIM为查询命令接收了一个CDB,则SIM应只返回查询数据字节“0”为“23H”
1)外围限定符被设置为“O1B”,表示目标设备能够支持该逻辑单元上的物理设备,然而,该物理设备不是当前连接到这个LUN的设备。
2)外围设备类型被设置为“3H”,表示处理机设备类型.
b)请求断定命令
若对于一个未允许的LUN,接收了一个请求断定命令.SIM应返回断定数据,断定键被置为非法请求.附加断定码被置为不支持的逻辑单元。
c) 所有其它命令
对于一个未允许的LUN,若一个不是查询或请求断定的命令被接收,返同的SCSI状态为捡验情况。任何后续的请求断定命令操作方法与B)--样.
12.3.15从SIM重新得到未使用的接受目标设备I/0 CCB
若主机目标设备方式外围驱动程序希望重新得到被发送到SIM的接受目标设备I/O CC8(或许由于资源缺乏),主机目标设备方式外围驱动程序可以发出一个中止CCB.这将引起正被调用的接受目标设备I/O CCB的CDB完成函数,CAM状态为由主机中止的请求.
1554