——具有错误的完成请求:表示连接ID现存一个连接.
——无效的请求:因为不能实现一个或多个操作属性,所以该请求已被拒绝。
——无效的路径ID:表示未安装指定的路径ID.
11.7.3.2 CAM-3连接释放该函数能引起对指定连接ID连接的释放.SIM应验证连接的拥有者与释放连接的请求者相同.SIM应把cam.pdrv_reg组成、cam_sim__bhandle组成、和cam_sim_generation组成与现行连接存储的起始值进行比较,若该值不等于所存储的值.SIM不应释放该连接.
XPT的供给者定义CAM-3连接释放CCB结构,如下所示,
typedef struct ccb_bindrelease3
{
CCB HEADER3 ccb.header3 /*CCB_HEADER3信息字段*/
CAM_ U32 cam_pdrv_reg /*请求者驱动程序注册号*/
} CCB_BIND-RELEASE3:
11.7.3.2.1连接释放的组成说明
——请求由CCB的发送者设置的CCB_HEADER3组成的信息,
· cam_func_code;
该组成应包含XPT CAM3__CCB函数代码,
· cam3_func—code
该组成应包含XPT—BIND_REL函数代码.
. port_id~
该组成应包含一个端口号(如:SCSI总线号).
· addr_specl:
该组成应包含SCSI目标设备说明符,
· addr..spec2
该组成应包含SC.SI逻辑单元说明符.
· cam_sim—generation
该组成应反映当前连接操作返回的Sit[连接生成号.
· cam_sim..bhandle
该组成应反映当前连接操作返回的SIM连接处理,
· cam_f]ags;
该函数不存在定义的CAM标记.
· cam pdrv__reg;
该组成是请求者外围驱动程序注册号,它由获得外围驱动程序注册号的请求
者设置.
11.7.3.2.连接释放返回
——无错误完成的请求:连接释放函数成功实现,
——具有错误的完成请求:表示一个连接对连接ID不是现存的.
——无效的请求:因为CCB发送者不是连接的当前拥有者,所以该请求已被拒绝.
——无效的路径ID.表示未安装指定的路径ID.
11.7.3.3 CAH-3连接查询OCB
该函数使SIM置入cam bind_ops组成,产生它所支持的函数值,使SIM报告是否具有连接ID的当前连接.若连接ID具有当前连接.SIM应把一个任意的正值(推荐值为“l")置入cam-sim.bhandle组成,
若互连协议支持命令传送时间报告的概念(如:FC),SIM应把cam_delivery_time组成置入以秒为单位的当前时间,以便给设备传送一条命令.SIM总是上舍入(进位舍入)时间到最近的秒数(如:“125”ms上舍入为“1”s).由于协议中没有机制置该值为“O”(如:SPI),所以SIM不能确定一个命令的传送时间.
XPT的供给者定义CAM-3连接查询CCB结构如下:
typedef struct ccb_bind—query3
{
CCB_HEDER3 ccb_header3: /*CCB_HEADER3信息字段*/
CAM-U32 cam_bJnd_ops. /*操作属性*/
CAM_U32 cam_pdrv_reg; /*请求者驱动程序注册号*/
} CCB_BIND_QUERY3:
11.7.3.3.1连接查询的组成说明
——请求CCB的发送者设置的CCB_HEADER3组成的信息。
· cam_func-code;
该组成应包含XPT_CAM_3_CCB函数代码.
· cam3_func_code
该组成应包含XPT_BIND_REL函数代码.,
. port_id
该组成应包含一个端口号(如:SCSI总线号)。
· addr_spec2
该组成应包含SCSI日标设备说明符.
· addr_specl
该组成应包含SCSI逻辑单元说明符.
· cam_flags
该函数没有定义的CAM标记.
· cam_bind-ops
没有当前定义的操作属性.对于任何与CAM-3这个版本的一致的SIM.该组成应被置为0
11.7.3.3.2连接查询返回
一无错误完成的请求:连接释放函数成功实现,
一无效的路径ID:表示未安装指定的路径ID。
11.7.4CAJP3获得设备类型
对于给出的逻辑单元,该函数返回cam_pd-type组成中查迩响应数据的外围设备类型,任选供给的缓冲器中查询数据的头36字节.
附属于SCSI设备上的信息在XPT/SIM需要的时候被集中(为每个驱动程序消除该要求,以便为设备尽量复制SCSI总线的扫描).
XPT的供给者定义得到设备类型CCB结构如下:
typedcf struct ccb_getdev 3
{
CCBJIEADER3 ccb_header3;. /*CCB..HEADER3信息字段*/
CAM_U8 cam..inq._data; /*指向查询数据空间的指针*/
CAM U8 cam_pd_type. /*}围设备类型*/
} CCB_GETDEV3;
11.7.4.1.获得设备类型的组成说明
——请求CCB的发送者设置的CCB..HEADER3组成的信息.
· cam_func_code
该组成应包含XPT_CAM 3_CCB函数代码,
· cam3_func_code:
该组成应包含XPT_GDEV_TYPE函数代码.
· cam_protocol;
该组成应包含SCSI_PROTOCOL号,
· logical_id
该组成是对指定协议分配的设备逻辑标识符的XPT.
· cam_flags:
该函数没有定义的CAM标记。
——cam_pd_type
逻辑单元字段的外围设备类型是来自直迫响应数据的外围设备类型。XPT/SlM应通过采用查询响应数据的字节“O”生成该数据并设置位7-5为“O”.
--cam_inq.data;
若查询数据指针字段包含一个不是空的值,它应指向最低36字节的缓冲器。当查询数据指针字段不为空时.XPT/SIM应从它的内部表拷贝查询响应数据的头36字节到已识别的缓冲器,若逻辑单元按SCSl-3的定义时,用直迦响应数据响应查询命令.
11.7.4.2获得设备类型返回
该函数应返回一个不是在进行中请求的CAM状态.CAM状态应是下列情况之一:
——无错误完成的请求表示安装指定的设备,而且外围设备类型字段有效。
一一未安装的SCST设备表示描述的外围设备(CAM协议类型绒logical_.id )在EDT中还没有找到.
11.7.5 CAM-3路径查询
该函数应返回已安装编址的HA/SCSI总线硬件或XFT上的信息.为获得附加的专用HA/SCSI总线的更进一步的信息.能够对每个分配的路径ID发出该函数.
在某些操作系统环境中,它可能动态地装载和卸载SIH,所以端口ID可以不必从“O”开始到分配的最高端口ID进行连续地记数。
若CCB被XPT寻址,则XPT应置protocol—type组成到它支持的所有协议类型中.若CCB被指向一个SIM.则对指定的port_id组成,SIM应置protocol_type组成到它支持的协议号。
XPT的供给者应定义路径查询ccB结构和全部标记位定义.路径查询CCB结构定义如下:
typedef struct ccb—pathinq3
{
CCB._HEADER3 ccb_pathinq3: / *标题信息字段*/
CAM U8 cam version. num [32] / * ASCII NULL .终止的串版本号*/
CAM_U8 cam_interconnect [32] / * ASCII NULL 终止的串互连协议类型(如:SIP FCP ) * /
CAM U32 cam ha_inquiry: / *SIM/HA支持任务控制等*/
CAM_U32 casi_target_sprt / *目标设备方式支持的标记*/
CAM_U32 cam_ba_mi sc / *Misc HA 性能标记*/
CAM U32 cam ha_eng_cnt: / * HA 引擎记数*/
CAM_U32 cam_max_targ addr [2]; / *最大SCSI 目标设备地址*/
CAM_U32 cam_max_fun_ addr[2] / *最大SCSI 逻辑单元地址*/
CAM U32 cam vuha_.flags[16] / *售方专用能力*/
CAM U32 cam_async_flags; / *异步回调的事件能力*/
CAM_U32 cam_hpath_id; / *子系统中的最高路径ID * /
CAM_Ii32 cam-initiator_id[2] / * SCSI 总线上HA的ID * /
CAM U32 cam_prsvdO / *为调整保留的字段*/
CAM_U8 csm_sim vid [32] / * SIM 的售方ID * /
CAM cam_havid [32] / * IIA 的售方ID * /
CAM U8 cam_osd_usage /指向OSD专用区域的指针*/
} CCB_PATJINQ3,
注l5,对于不是路经查询CCB的CCB的XP的路径ID.CCB以无效路径ID的CAM状态返回。
11.7.5.1路径查询的组成说明
——请求CCB的发送者设置的CCB_HEADER3组成的信息
· cam_func_code
该组成应包含XPT_CAM_3_CCB函数代码.
· cam3_func_code
该组成应包含XPT_PATH_INQ函数代码.
·port.id
该组成应包含一个端口号(如:SCSI总线号)或XPT的port id号(OxFF)。
· cam_flags:
该函数没有定义的CAM标记
一cam_version num
该版本号组成应识别与SIM/HA或XPT一致的CAM-3版本号-对一个有效的SIM/HA或者XPT寻址的路经查询CCB应在版本号组成中分别设置与它一致的ASCII NULL终止串CAM-3版本号.当认为ANSI CAM-3文本是一个标准时,版本串应是遵守该标准的售方的CAM-3V1.与此版本工作图一致应由CAM-3 WR[X]表示,其中[X]是版本号。现行CAM-3版本号是2.应由CAM一3WDR2的ASCII NULL终止串表示。
一Cam_i nterconnect
互连协议类型应识别SIWHA的互连协议
---cam_ha_inquiry
SCSI性能组成可能是查询数据中字节7字段的两倍.根据SCSI传输协议的变化(如:SIP,
FCP和SBP),某些定义的性能不适用.SIM应按下列定义设置它支持的性能标记:
· SIM支持自动设备分辨,该标记指示SIM支持一种方法,该方法允许一个SCSI设备通过互连事件(如:SCAM、FC)改交它舸物理地址说明符。若它支持地址分辨方法的这个类型,SIM应设置这个标记.
#定义PI_AUTO_DEV_RESOLVE Ox80000000
· SIM支持总线复位任务
PI BUSRESET_ABLE Ox200
· SIM支持终止I/O任灸
#定义PI TERMINATE_IO_ABLE Ox100
· SIM支持修改数据指针消息
#定义PI_MDP_ABLE Ox80
· SIM支持32位宽SCSI数据传送
#定义PI_WIDE_32 0x40
· SIM支持16位宽SCSI数据传送
#定义PI_WIDE- 16 0x20
· SIM支持异步数据传送
#定义PI SDTR_ABLE Ox10
· SIM支持链接的SCSI命令
#定义PI_LINKED_CDB Ox08
· SIM支持标签排队命令
#定义PI_TAG- ABLE Ox02
· SIM支持软复位功能
#定义PI SOFT_RST 0x01
· 保留标记位定义 0x02
--cam_ target.sprt;
目标设备方式支持的组成为目标设备方式报告功能性支持.SI}X应按下列定义设置它支持的性能标记:
· 保留Ox100~~OxFFFFFF00标记位定义
SIM支持主机目标设备方式
#定义PIT_HOST-MODE OxSO
· SIM支持阶段认知方式
#定义PIT_PHASE COG_MODE, Ox40
· SIM支持目标设备方式断开
#定义PIT- TMODE DISCON Ox20
· SIM支持终止I/O处理消息
#定义PIT_TERMINATE. IO OxlO
· SIM支持组6命令
#定义PIT- Group_6 0xlO
SIM支持组5命令
#定义PIT_Group_5 0x20
· 保留OxOl~~Ox00标记位定义
——cam_ha_misc
支持的各种各样组成通过XPT报告各种各样的功能支持,XPT应按下列定义设置它支持的性能标记,
· 保留标记位定义(OxlO、Ox08、Ox04、Ox02、OxOl和Oxl00~OxFFFFFF00)
· SCSI总线扫描方向.若XPT从低到高(如,目标设备OxO~~OxF)扫描,定义的位应被清除.若XPT从高到低(如,目标设备OxF~OxO)扫描,定义的位应被设置.
#定义PIM..SCANHILO Ox80
· 不包括在扫描中移走设备,这表示XPT不保持在那些设备上的查询数据.若XPT不为移走设备保持查询数据,该指示位应被设置.
#定义PIM_NORF310VE 0x40.
· 查询数据不由XPT集保持表示XPT不存储查询数据,
#定义PIM.NOINQUIRY Ox20
--cam_ha engL cnt;
引擎记数表示一个HA引擎在这个指定的端口ID上可用的引擎数.
——cam_max_targ_addr
最大可寻址目标设备地址是两个CAM_U32中的一个阵列。该组成表示SIM/HA能够寻址到最高的目标设备地址。cam_max_target_addr [0]组成应包含最大SCSI目标设备说明符中的低32位(最低有效部分),cam_max_targetaddr[l]组成应包含最大SCSI目标设备说明符中的高32位(最高有效部分).
——cam_max lun addr
最大可寻址逻辑单元地址是两个CAM_U32中的一个阵列。该组成表示SIM/HA能够寻址到最高的逻辑单元地址.cam_max_target_addr [0]组成cam_max_target_addr[1]组成应包含SCSI逻辑设备说明符的低32位(最低有效部分),cam max_targe t_addr[1]组成应包含SCSI逻辑设备说明符的高32位(最高有效部分).
--cam vuha_.area
售方专用存储区域为16字节.
——cam_sim__priv
在某些环境中,返回的私人数据区域字段值可能为“0”,这是因为OSD具有私人数据要求的主要存储元素分配,或按照OSD售方的定义是一个固定值。对限于一个特定的HA实现,售方专用HA性能的定义见售方说明.
——cam_async_.flags;
异步事件性能字段表示所能引起XPT/SIM生成一个异步事件回调的原因。XPT或SIl4应按下列定义设置它支持的性能标记:
· 位值Oxl000000~OxFF000000(位24~~31)是售方专用.
· 位值Oxl00~OxOFFFF00(位8~~23)保留。
· 重新扫描期间寻找到新设备,CCB寻址XPT(XPT集)。
◇#定义AC_FOUNDDEVICES Ox80
· 消除SIM模块注册,CCB寻址XPT (XPT集).
◇#定义AC_SIM..DEREGISTER Ox40
· 注册SIM模块,CCB寻址XPT (XPT集).
◇#定义AC_SIM_REGISTER Ox20
· 发送总线设备复位到目标设备.CCB寻址SIM(SIM集)。
◇#定义AC SENT_ BDR OxlO
·SCSI AEN.CCB寻址SIM (SIM集).
◇#定义AC_SCSI_ AEN Ox08
· Ox04保留
· 主动请求的重新选择.CCB寻址SIM (SIM集).
◇#定义AC_UNSOL_RESEL Ox02
· 主动请求的SCSI总线复位.CCB寻址SIM(SIM集)。
◇#定义AC_BUS_RESET OxOl
——cam hpath_id:
若CCB的路径ID字段有值FFh (XPT路径ID),那么仅在返回到调用者时有效的字段是分配的最高路径ID组成和版本号组成。若CCB中的路径ID字段包含一个FFh以外的值,分配的最高路径ID字段无效,
若没有端口ID(即:没有SCSl总线被注册),分配的最高路径ID字段应为FFh,ID为XPT.
——cam_initiator_id
CAM启动设备标识符是两个CAM_U32中的一个阵列。该组成表示这个HA的目标设备地址(启动设备id)作为port id组成的标识符.cam _target_id [0]组成应包含SCSI目标设备说明符(启动设备id)中的低32位(最低有效部分).cam _target_id[1]组成应包含SCSI目标设备说明符(启动设备id)中的高32位(最高有效部分).
——cam_sim_vid[16];
SIM供给者的售方ID组成应包含SIM垡方名称的NULL终止的串。
——cam_ha_vid[16]t
.HA供给者的售方ID组成应包含H^售方名称的NULL终止的串.
——cam_osd_usage
OSD用法(使用)指针字段被提供给OS专用或SIM执行的平台专用函数.该字段的内容是售方专用并且不在本部分中定义,
SJ 20820/9--2002
——请求CCB的发送者设置的CCB_HEADER3组成的信息.
· cam func_code:
该组成应包含XPT_CAM_3_CCB函数代码。
· cam3 func code=
该组成应包含XPT_RESET_BUS函数代码。
.port_id~
该组成应包含一个端口号(如:SCSI总线号).
· cam-flagsr
该函数没有CAM标记.
11.7.12.2复位SCSt总线返回
该函数应返回不是进行中的请求的CAM状态,CAM状态应是下列情况之一
——无错误完成的请求表示该路径ID有效.
——无效的路径ID表示该路径ID无效。
复位SCSI总线函数的失败或成功实际上由异步回调信息来表示.
11.7.13CAM-3复位SCSI设备
该函数用于指定的SCSI目标设备复位,不应用于正常操作,该请求总是导致发出盛线设备复位任务。
XPT的提供者定义如下的复位SCSI设备CCB结构;
typedof struct ccb-resetdev3
{
CCB.HEADER3 ccb_header3; /*标题信息字段*/
} CCB_RESETDEV3,
11.7.13.1复位SOSl设备的组成说明
.——请求CCB的发送者设置的CCB_HEADER3组成的信息.
· cam_func_code:
该组成应包含.XPT_CAM 3_CCB函数代码。
· cam3_func_code
该组成应包含XPT_RESET_DEV函数代码。
. port_id;
该组成应包含一个端口号(如:SCSl总线号)。
· addr_specl
该组成应包含SCSI目标设备说明符.
· addr_spec2
该组成应包含SCSI逻辑单元说明符.
. cam_sim_bhandles
该组成应反映为当前连接操作返回的SIM连接处理.
· cam flags
该函数没有CAM标记.
11.7.13.2复位SCSl设备返回
该函数应返网不是进行中的请求的C脯状态,CAM状态应是下列情况之一:
——无错误完成的请求表示该路径ID有效,
——无效的路径ID表示该路径ID无效。
——无连接表示或者连接还没有建立或者连接已被丢失。
复位SCSI设备函数的失败或成功实际上由异步回调信息来表示.
11.7.14CAM-3终止I/0处理
该函数请求SCSI I/O要求由识别与此请求有关的CCB来终止.驱动程序期望终止的还没有完成的任何I/O请求应被发出.SIM/HA应根据下列条件之一在SCSI总线上发出一个终止I/0处理消息:
——被中止的指针字段的CCB中标识的CCB是一个已建立I _T_L联系的I/O处理.(不带标记的当前命令有效).
——被中止的指针字段的CCB中标识的CCB是一个己建立I T L_Q联系的I/O处理,
若偶然联系条件对指定的执行I/O请求CCB有效(如:从逻辑单元的捡验情况或命令终止已返回的一个SCSI状态).则执行SCSI I/O请求CCB应按本部分的正常规定完成。若为执行SCSI I/O请求CCB规定自动断定.SIWHA会重新得到自动断定数据。
若标识的CCB未建立I/O处理,该请求不必导致在SCSI总线上发出一个终止I/0处理消息.
XPT的供给者定义中止I/0处理CCB结构如下:
typedef struct ccb_termi03
{
CCB_HEADER3 ccb_ header3: /*标题信启字段*/
CCB_HEADER3 cam_termio_ ch. /*终止CCB的指针*/
} CCB_TERMI033;
11.7.14.1终止I/0处理的组成说明
——请求CCB的发送者设置的CCB_HEADER3组成的信息.
· cam func code;
该组成应包含XPT CAM_3_CCB函数代码。
· cam3_func_code
该组成应包含XPT_ TER IO函数代码.
. port_id
该组成应包含一个端口号(如:SCSI总线号).
· addr_specl;
该组成应包含SCSI目标设备说明符.
· addr_spec2
该组成应包含SCSI逻辑单元说明符.
· cam_sim_generation
该组成应反映当前连接操作返回的SIM连接生成号。
· cam sim_bhandle
该组成应反映当前连接操作返回的SIM连接处理。
· cam flags;
该函数没有CCAM标记。该设备排队的状态(如冻结或未冻结)应由正被中止的CCB的CAM标记来控制。
——cam termio_cht
终止CCB的指针.
11.7.14.2终止I/0处理返回
该函数应返回不是进行中的请求的CAM状态.CAM状态应是下列情况之一
——无错误完成的请求表示该路径ID有效.
——无效的路径ID表示该路径ID无效.
——无连接表示或者连接还没有建立或者连接已被丢失。
指定的执行I/O请求CCB可能是下列确定终止I/O处理功能的最终结果的状态之一:
——可寻址的逻辑单元未包含在SIM/HA排队中.SIM/HA不应对指定的CCB的任何更进一步处理负责
——可寻址的逻辑单元包含在SIM / HA 排队中,而不是该逻辑单元中的一个I/ 0 处理。SIM / HA 应在指定CCB 中设置CAM 状态字段进行终止I / 0 处理并通过CCB 中规定的机制返回CCB 。
——可寻址的逻辑单元包含在SIM / HA 排队中,它是该逻辑单元中的一个I / 0 处理。SIM / HA 接收一个响应启动设备终止.处理消息的消息拒绝消息。当I / 0 处理按照SJ 20631 一97 的规定完成时,SIM / HA 应对规定的CCB 设置CAM状态字段为不能终止I / 0 处理,按本部分的规定完成对规定的CCB 的处理。
SIM / HA 接收SCSI 一2 状态字节而不是规定CCB 的命令中止。当I / 0 处理按照SJ 20631 一97的规定被完成时,SIM / HA 应对规定的CCB 设置CAM 状态字段为不能终止I / 0 处理,并按本部分的规定完成对规定的CCB 的处理。
SIM /HA对规定的CCB 接收sSCSI-2 状态字节命令中止。当I/ 0 处理按照SJ 20631 一97 的规定被完成时,SIM / HA 应设置C AM状态字段为完成具有错误的请求.同时按本部分的规定完成对规定的CCB 的处理(如自动断定机制)。
11 . 8 CAM 一3 控制块请求I/ O
外围驱动程序由使用这个CCB 的SCSI I/ 0 请求构成,而这个CCB 被设计成利用任何HA / SIM 的组合实际能提供的所有SCSI 性能。CCB 的格式和结构是共用的,功能代码如下:
——执行SCSI I/O(更进一步的信息见11.8.1)。
——执行目标设备I/0 (更进一步的信息见12.2.6 )。
——接受目标设备I/0 (更进一步的信息见12.3.10 )。
——继续目标设备I/0 (更进一步的信息见12.3.11 )。
11 . 8 . 1 CAM 一3 执行SCSI I/0 请求
此函数典型地返回进行中请求的CAM 状态,表明这种请求进行成功地排队。请求完成能够由轮询CAM 状态而不是在进行中的请求或通过使用完成回调字段来确定。推荐不采用轮询CCB 完成.
SCSI命令描述块或者是连续的16 字节的一个阵列,或者是一个指向连续字节的阵列的指针.XPT 的供给者对执行SCSI I/0 请求CCB 定义SCSI命令描述块结构如下:
typedef union cdb un
{
CAM一U8 * cam cdb ptr : / *指向发送CDB 字节的指针*/
CAM U8 cam cdb bytes [16] / *发送的CDB 的字节阵列*/
} CDB UN
XPT 的供给者定义执行SCSI I/0 请求CCB 结构如下:
typedef union cdb scsiio3
{
CCB HEADER3 ccb header3 / *标题信息字段*/
CCB HEADER3*cam next ccb / * Ptr to the next CCB for action * /
CAM VOID OFFSET*cam req map / * Ptr for 切apping info on the Req . * /
CAM VOID(*cam cbfcnp)() / *完成功能回调*/
CAM U8*cam data ptr /*指向数据缓冲器/SG 表的指针*/
CAM U32cam dxfer len / *数据传送长度*/
CAM U8cam cdb len / * CDB 的字节数*/
CAM U8cam reservedl / *保留校准*/
CAM U16cam sglist cnt / *分散集中表入口个数*/
CAM U3cam vu field / *售方专用字段*/
CAM U8cam scsi status / *返回的SCSI 设备状态*/
CAM U8cam reserved2 ; / *保留校准*/
CAM U16cam sense resid : / *自动断定驻留长度:2 ' 5 co , p * /
CAM 132cam resid : / *传送剩余长度:2 ' 5 comp * /
CAM U32cam _timeout : / *超时值*/
CAM UN3cam _ cdb _ 10 : / * CDB 字节/指针的结合*/
CAM U8* cam msg ptr ; / *指向消息缓冲器的指针州
CAM U16cam msgb_ len ; / *消息缓冲器中的字节数*/
CAM U16cam _vu flags : / *售方专用标记*/
CAM U8cam tag ction ; / *标记怎样排队*/
CAM Uscam resorved3[3] ; / *保留校准*/
CAM U32cam tag id ; / *标记ID * /
CAM U32cam initiator id [2] : / *启动设备ID 目标操作*/
CAM U16cam sense _len : / *请求自动断定的字节数*/
CAM U8cam reserved4 ; / *保留校准*/
CAM U32cam_sim_sense [16] ; / *重新得到断定数据SIM 的工作区域*/
CAM U8cam_sense_ buf [256] : / *断定数据缓冲器*/
11.8.1.1执行SCSl I/0请求的组成说明
——请求ccB的发送者设置的CCB HEADER3组成的信息.
· cam_func_code;
该组成应包含XFrrCAM_S_CCB函数代码.
· cam3_func_code;
该组成应包含XPT...SCS I_IO函数代码。
· port_id
该组成应包含一个端口号(如:SCSI总线号).
· addr_specl
该组成应包含SCSI目标设备说明符.
addr_spec2.
该组成应包含SCSI逻辑单元说明符.
· cam_sim_generation
该组成应反映当前连接操作返回的SIM连接生成号
· cam_sim_bhandle
该组成应反映当前连接操作返回的SIM连接处理.
· cam_fIags
该组成包含用来指示请求的函数特殊处理的位设置.按照CAM标记的规定而设置的所需行为特征应取决于逻辑特征成功能特征.例如,外围驱动程序希望指示数据传送方向是进入启动设备并且发散/集中表有效,外围驱动程序可能通过如下的列式实现该函数:
ccb->ccb_header3, cam_flagsl=(CAM_DIR_INlCAM_SCATTER..VALID);
该标记定义如下;
· CAM方向标记规定了与SCSI启动设备有关的数据传送的方向。在数据传送期间这些编码位识别数据移动的方向.
◇保留
#定义CAM. DIR_RESV Ox00000000
◇数据方向入(读自逻辑单元);
#定义CAM_DIR_IN Ox00000040
◇数据方向出(写到逻辑单元):
#定义CAM DIR_.OUT Ox00000080
◇数据方向无(无数据传送):
#定义CAII_DIR._NONE Ox000000CO
· 已删除禁止自动断定性能标记,目前自动断定是CAM-3中的必要性能.
· 当数据位置“l”时(此位表示.数据不传到/来自存储器中单个存储元素,而是传到/来自几个元素),分散/集中表有效.在这种情况中,数据缓冲器指针指的是被传送的数据
的
每个地址的地址表和字节长度.
#定义CAW_SCATTER_VALID 0x000000lO
SG表的格式定义如下:
typedef struct sg_elem
{
CAM U8*cam sg_address: /*分散/集中地址*/
U32cam_ sg countr /*分散/集中字节记数*/
}SG._ELEM:
1921