Rewrote CAM.h. Since this file is from an ANSI standard, I
kept the non-be specific comments. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32805 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
ca8b8ff27b
commit
5ce0a8a2d2
|
@ -1,28 +1,21 @@
|
||||||
/* ++++++++++
|
/*
|
||||||
CAM.h
|
* Copyright 2009, Haiku, Inc. All rights reserved.
|
||||||
Copyright (c) 1996-98 by Be Incorporated. All Rights Reserved.
|
* Distributed under the terms of the MIT License.
|
||||||
|
*
|
||||||
Definitions for the SCSI Common Access Method as implemented in the Be OS.
|
*
|
||||||
|
* Definitions for the SCSI Common Access Method as implemented in Haiku.
|
||||||
See also "Draft Proposed American National Standard, SCSI-2 Common
|
*
|
||||||
Access Method Transport and SCSI Interface Module", Revision 12,
|
* See also "Draft Proposed American National Standard, SCSI-2 Common
|
||||||
ANSI refernce number X3.232-199x.
|
* Access Method Transport and SCSI Interface Module", Revision 12,
|
||||||
|
* ANSI refernce number X3.232-199x.
|
||||||
This file consists of the definitions for the fictional "UNIVOS"
|
*
|
||||||
operating system described in the standard. The file is mostly
|
*/
|
||||||
the same text as the standard, with Be-provided additions as needed.
|
|
||||||
+++++ */
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef _CAM_H
|
#ifndef _CAM_H
|
||||||
#define _CAM_H
|
#define _CAM_H
|
||||||
|
|
||||||
#include <bus_manager.h>
|
#include <bus_manager.h>
|
||||||
|
|
||||||
/* ---
|
|
||||||
Be-provided additions to the standard include file.
|
|
||||||
--- */
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -41,22 +34,19 @@ typedef long I32;
|
||||||
typedef unsigned short U16;
|
typedef unsigned short U16;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Haiku specific additions */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32 serial; /* operation serial number */
|
uint32 serial; /* operation serial number */
|
||||||
uint32 micros; /* operation time in microseconds (4294s max) */
|
uint32 micros; /* operation time in microseconds (4294s max) */
|
||||||
uint32 bytes; /* number of bytes to transfer */
|
uint32 bytes; /* number of bytes to transfer */
|
||||||
uchar path; /* target SIM ID */
|
uchar path; /* target SIM ID */
|
||||||
uchar target; /* target device ID */
|
uchar target; /* target device ID */
|
||||||
uchar sgcount; /* # of sg segments (0 if non-sg operation) */
|
uchar sgcount; /* # of sg segments (0 if non-sg operation) */
|
||||||
uchar scsi_op; /* scsi operation byte */
|
uchar scsi_op; /* scsi operation byte */
|
||||||
} cam_iostat;
|
} cam_iostat;
|
||||||
|
|
||||||
|
/* End of Haiku specific additions */
|
||||||
/* -----
|
|
||||||
The rest of this file contains the definitions and data structures for
|
|
||||||
the CAM Subsystem interface. The contents of this file should match the
|
|
||||||
data structures and constants that are specified in the CAM document
|
|
||||||
----- */
|
|
||||||
|
|
||||||
/* Defines for the XPT function codes, Table 8-2 in the CAM spec. */
|
/* Defines for the XPT function codes, Table 8-2 in the CAM spec. */
|
||||||
|
|
||||||
|
@ -91,8 +81,6 @@ typedef struct {
|
||||||
#define XPT_FUNC 0x7F /* TEMPLATE */
|
#define XPT_FUNC 0x7F /* TEMPLATE */
|
||||||
#define XPT_VUNIQUE 0x80 /* All the rest are vendor unique commands */
|
#define XPT_VUNIQUE 0x80 /* All the rest are vendor unique commands */
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
/* General allocation length defines for the CCB structures. */
|
/* General allocation length defines for the CCB structures. */
|
||||||
|
|
||||||
#define IOCDBLEN 12 /* Space for the CDB bytes/pointer */
|
#define IOCDBLEN 12 /* Space for the CDB bytes/pointer */
|
||||||
|
@ -100,8 +88,8 @@ typedef struct {
|
||||||
#define SIM_ID 16 /* ASCII string len for SIM ID */
|
#define SIM_ID 16 /* ASCII string len for SIM ID */
|
||||||
#define HBA_ID 16 /* ASCII string len for HBA ID */
|
#define HBA_ID 16 /* ASCII string len for HBA ID */
|
||||||
|
|
||||||
#define BE_SIM_CCB_SIZE 1536 /* we want to allocate 1.5k chunks */
|
#define BE_SIM_CCB_SIZE 1536 /* we want to allocate 1.5k chunks */
|
||||||
#define BE_SIM_SCSIIO_SIZE 88 /* sizeof(CAM_CCB_SCSIIO) - SIM_PRIV */
|
#define BE_SIM_SCSIIO_SIZE 88 /* sizeof(CAM_CCB_SCSIIO) - SIM_PRIV */
|
||||||
#define SIM_PRIV (BE_SIM_CCB_SIZE - BE_SIM_SCSIIO_SIZE) /* Length of SIM private data area */
|
#define SIM_PRIV (BE_SIM_CCB_SIZE - BE_SIM_SCSIIO_SIZE) /* Length of SIM private data area */
|
||||||
|
|
||||||
/* SIM_PRIV (sim private data area) Terms and Conditions:
|
/* SIM_PRIV (sim private data area) Terms and Conditions:
|
||||||
|
@ -124,15 +112,15 @@ subsystem. */
|
||||||
/* Common CCB header definition. */
|
/* Common CCB header definition. */
|
||||||
typedef struct ccb_header
|
typedef struct ccb_header
|
||||||
{
|
{
|
||||||
uint32 phys_addr; /* physical address of this CCB */
|
uint32 phys_addr; /* physical address of this CCB */
|
||||||
uint16 cam_ccb_len; /* Length of the entire CCB */
|
uint16 cam_ccb_len; /* Length of the entire CCB */
|
||||||
uchar cam_func_code; /* XPT function code */
|
uchar cam_func_code; /* XPT function code */
|
||||||
uchar cam_status; /* Returned CAM subsystem status */
|
uchar cam_status; /* Returned CAM subsystem status */
|
||||||
uchar cam_hrsvd0; /* Reserved field, for alignment */
|
uchar cam_hrsvd0; /* Reserved field, for alignment */
|
||||||
uchar cam_path_id; /* Path ID for the request */
|
uchar cam_path_id; /* Path ID for the request */
|
||||||
uchar cam_target_id; /* Target device ID */
|
uchar cam_target_id; /* Target device ID */
|
||||||
uchar cam_target_lun; /* Target LUN number */
|
uchar cam_target_lun; /* Target LUN number */
|
||||||
uint32 cam_flags; /* Flags for operation of the subsystem */
|
uint32 cam_flags; /* Flags for operation of the subsystem */
|
||||||
} CCB_HEADER;
|
} CCB_HEADER;
|
||||||
|
|
||||||
/* Common SCSI functions. */
|
/* Common SCSI functions. */
|
||||||
|
@ -140,16 +128,16 @@ typedef struct ccb_header
|
||||||
/* Union definition for the CDB space in the SCSI I/O request CCB */
|
/* Union definition for the CDB space in the SCSI I/O request CCB */
|
||||||
typedef union cdb_un
|
typedef union cdb_un
|
||||||
{
|
{
|
||||||
uchar *cam_cdb_ptr; /* Pointer to the CDB bytes to send */
|
uchar* cam_cdb_ptr; /* Pointer to the CDB bytes to send */
|
||||||
uchar cam_cdb_bytes[ IOCDBLEN ]; /* Area for the CDB to send */
|
uchar cam_cdb_bytes[IOCDBLEN]; /* Area for the CDB to send */
|
||||||
} CDB_UN;
|
} CDB_UN;
|
||||||
|
|
||||||
/* Get device type CCB */
|
/* Get device type CCB */
|
||||||
typedef struct ccb_getdev
|
typedef struct ccb_getdev
|
||||||
{
|
{
|
||||||
CCB_HEADER cam_ch; /* Header information fields */
|
CCB_HEADER cam_ch; /* Header information fields */
|
||||||
char *cam_inq_data; /* Ptr to the inquiry data space */
|
char* cam_inq_data; /* Ptr to the inquiry data space */
|
||||||
uchar cam_pd_type; /* Periph device type from the TLUN */
|
uchar cam_pd_type; /* Periph device type from the TLUN */
|
||||||
} CCB_GETDEV;
|
} CCB_GETDEV;
|
||||||
|
|
||||||
/* Path inquiry CCB */
|
/* Path inquiry CCB */
|
||||||
|
@ -161,52 +149,52 @@ typedef struct ccb_pathinq
|
||||||
uchar cam_target_sprt; /* Flags for target mode support */
|
uchar cam_target_sprt; /* Flags for target mode support */
|
||||||
uchar cam_hba_misc; /* Misc HBA feature flags */
|
uchar cam_hba_misc; /* Misc HBA feature flags */
|
||||||
uint16 cam_hba_eng_cnt; /* HBA engine count */
|
uint16 cam_hba_eng_cnt; /* HBA engine count */
|
||||||
uchar cam_vuhba_flags[ VUHBA ]; /* Vendor unique capabilities */
|
uchar cam_vuhba_flags[VUHBA]; /* Vendor unique capabilities */
|
||||||
uint32 cam_sim_priv; /* Size of SIM private data area */
|
uint32 cam_sim_priv; /* Size of SIM private data area */
|
||||||
uint32 cam_async_flags; /* Event cap. for Async Callback */
|
uint32 cam_async_flags; /* Event cap. for Async Callback */
|
||||||
uchar cam_hpath_id; /* Highest path ID in the subsystem */
|
uchar cam_hpath_id; /* Highest path ID in the subsystem */
|
||||||
uchar cam_initiator_id; /* ID of the HBA on the SCSI bus */
|
uchar cam_initiator_id; /* ID of the HBA on the SCSI bus */
|
||||||
uchar cam_prsvd0; /* Reserved field, for alignment */
|
uchar cam_prsvd0; /* Reserved field, for alignment */
|
||||||
uchar cam_prsvd1; /* Reserved field, for alignment */
|
uchar cam_prsvd1; /* Reserved field, for alignment */
|
||||||
char cam_sim_vid[ SIM_ID ]; /* Vendor ID of the SIM */
|
char cam_sim_vid[SIM_ID]; /* Vendor ID of the SIM */
|
||||||
char cam_hba_vid[ HBA_ID ]; /* Vendor ID of the HBA */
|
char cam_hba_vid[HBA_ID]; /* Vendor ID of the HBA */
|
||||||
uchar *cam_osd_usage; /* Ptr for the OSD specific area */
|
uchar* cam_osd_usage; /* Ptr for the OSD specific area */
|
||||||
} CCB_PATHINQ;
|
} CCB_PATHINQ;
|
||||||
|
|
||||||
/* Release SIM Queue CCB */
|
/* Release SIM Queue CCB */
|
||||||
typedef struct ccb_relsim
|
typedef struct ccb_relsim
|
||||||
{
|
{
|
||||||
CCB_HEADER cam_ch; /* Header information fields */
|
CCB_HEADER cam_ch; /* Header information fields */
|
||||||
} CCB_RELSIM;
|
} CCB_RELSIM;
|
||||||
|
|
||||||
/* SCSI I/O Request CCB */
|
/* SCSI I/O Request CCB */
|
||||||
typedef struct ccb_scsiio
|
typedef struct ccb_scsiio
|
||||||
{
|
{
|
||||||
CCB_HEADER cam_ch; /* Header information fields */
|
CCB_HEADER cam_ch; /* Header information fields */
|
||||||
uchar *cam_pdrv_ptr; /* Ptr used by the Peripheral driver */
|
uchar* cam_pdrv_ptr; /* Ptr used by the Peripheral driver */
|
||||||
CCB_HEADER *cam_next_ccb; /* Ptr to the next CCB for action */
|
CCB_HEADER* cam_next_ccb; /* Ptr to the next CCB for action */
|
||||||
uchar *cam_req_map; /* Ptr for mapping info on the Req. */
|
uchar* cam_req_map; /* Ptr for mapping info on the Req. */
|
||||||
void (*cam_cbfcnp)(struct ccb_scsiio *);
|
void (*cam_cbfcnp)(struct ccb_scsiio*);
|
||||||
/* Callback on completion function */
|
/* Callback on completion function */
|
||||||
uchar *cam_data_ptr; /* Pointer to the data buf/SG list */
|
uchar* cam_data_ptr; /* Pointer to the data buf/SG list */
|
||||||
uint32 cam_dxfer_len; /* Data xfer length */
|
uint32 cam_dxfer_len; /* Data xfer length */
|
||||||
uchar *cam_sense_ptr; /* Pointer to the sense data buffer */
|
uchar* cam_sense_ptr; /* Pointer to the sense data buffer */
|
||||||
uchar cam_sense_len; /* Num of bytes in the Autosense buf */
|
uchar cam_sense_len; /* Num of bytes in the Autosense buf */
|
||||||
uchar cam_cdb_len; /* Number of bytes for the CDB */
|
uchar cam_cdb_len; /* Number of bytes for the CDB */
|
||||||
uint16 cam_sglist_cnt; /* Num of scatter gather list entries */
|
uint16 cam_sglist_cnt; /* Num of scatter gather list entries */
|
||||||
uint32 cam_sort; /* Value used by SIM to sort on */
|
uint32 cam_sort; /* Value used by SIM to sort on */
|
||||||
uchar cam_scsi_status; /* Returned scsi device status */
|
uchar cam_scsi_status; /* Returned scsi device status */
|
||||||
uchar cam_sense_resid; /* Autosense resid length: 2's comp */
|
uchar cam_sense_resid; /* Autosense resid length: 2's comp */
|
||||||
uchar cam_osd_rsvd1[2]; /* OSD Reserved field, for alignment */
|
uchar cam_osd_rsvd1[2]; /* OSD Reserved field, for alignment */
|
||||||
int32 cam_resid; /* Transfer residual length: 2's comp */
|
int32 cam_resid; /* Transfer residual length: 2's comp */
|
||||||
CDB_UN cam_cdb_io; /* Union for CDB bytes/pointer */
|
CDB_UN cam_cdb_io; /* Union for CDB bytes/pointer */
|
||||||
uint32 cam_timeout; /* Timeout value */
|
uint32 cam_timeout; /* Timeout value */
|
||||||
uchar *cam_msg_ptr; /* Pointer to the message buffer */
|
uchar* cam_msg_ptr; /* Pointer to the message buffer */
|
||||||
uint16 cam_msgb_len; /* Num of bytes in the message buf */
|
uint16 cam_msgb_len; /* Num of bytes in the message buf */
|
||||||
uint16 cam_vu_flags; /* Vendor unique flags */
|
uint16 cam_vu_flags; /* Vendor unique flags */
|
||||||
uchar cam_tag_action; /* What to do for tag queuing */
|
uchar cam_tag_action; /* What to do for tag queuing */
|
||||||
uchar cam_iorsvd0[3]; /* Reserved field, for alignment */
|
uchar cam_iorsvd0[3]; /* Reserved field, for alignment */
|
||||||
uchar cam_sim_priv[ SIM_PRIV ]; /* SIM private data area */
|
uchar cam_sim_priv[SIM_PRIV]; /* SIM private data area */
|
||||||
} CCB_SCSIIO;
|
} CCB_SCSIIO;
|
||||||
|
|
||||||
/* Set Async Callback CCB */
|
/* Set Async Callback CCB */
|
||||||
|
@ -215,15 +203,15 @@ typedef struct ccb_setasync
|
||||||
CCB_HEADER cam_ch; /* Header information fields */
|
CCB_HEADER cam_ch; /* Header information fields */
|
||||||
uint32 cam_async_flags; /* Event enables for Callback resp */
|
uint32 cam_async_flags; /* Event enables for Callback resp */
|
||||||
void (*cam_async_func)(); /* Async Callback function address */
|
void (*cam_async_func)(); /* Async Callback function address */
|
||||||
uchar *pdrv_buf; /* Buffer set aside by the Per. drv */
|
uchar* pdrv_buf; /* Buffer set aside by the Per. drv */
|
||||||
uchar pdrv_buf_len; /* The size of the buffer */
|
uchar pdrv_buf_len; /* The size of the buffer */
|
||||||
} CCB_SETASYNC;
|
} CCB_SETASYNC;
|
||||||
|
|
||||||
/* Set device type CCB */
|
/* Set device type CCB */
|
||||||
typedef struct ccb_setdev
|
typedef struct ccb_setdev
|
||||||
{
|
{
|
||||||
CCB_HEADER cam_ch; /* Header information fields */
|
CCB_HEADER cam_ch; /* Header information fields */
|
||||||
uchar cam_dev_type; /* Val for the dev type field in EDT */
|
uchar cam_dev_type; /* Val for the dev type field in EDT */
|
||||||
} CCB_SETDEV;
|
} CCB_SETDEV;
|
||||||
|
|
||||||
/* SCSI Control Functions. */
|
/* SCSI Control Functions. */
|
||||||
|
@ -232,7 +220,7 @@ typedef struct ccb_setdev
|
||||||
typedef struct ccb_abort
|
typedef struct ccb_abort
|
||||||
{
|
{
|
||||||
CCB_HEADER cam_ch; /* Header information fields */
|
CCB_HEADER cam_ch; /* Header information fields */
|
||||||
CCB_HEADER *cam_abort_ch; /* Pointer to the CCB to abort */
|
CCB_HEADER* cam_abort_ch; /* Pointer to the CCB to abort */
|
||||||
} CCB_ABORT;
|
} CCB_ABORT;
|
||||||
|
|
||||||
/* Reset SCSI Bus CCB */
|
/* Reset SCSI Bus CCB */
|
||||||
|
@ -251,7 +239,7 @@ typedef struct ccb_resetdev
|
||||||
typedef struct ccb_termio
|
typedef struct ccb_termio
|
||||||
{
|
{
|
||||||
CCB_HEADER cam_ch; /* Header information fields */
|
CCB_HEADER cam_ch; /* Header information fields */
|
||||||
CCB_HEADER *cam_termio_ch; /* Pointer to the CCB to terminate */
|
CCB_HEADER* cam_termio_ch; /* Pointer to the CCB to terminate */
|
||||||
} CCB_TERMIO;
|
} CCB_TERMIO;
|
||||||
|
|
||||||
/* Target mode structures. */
|
/* Target mode structures. */
|
||||||
|
@ -262,7 +250,7 @@ typedef struct ccb_en_lun
|
||||||
CCB_HEADER cam_ch; /* Header information fields */
|
CCB_HEADER cam_ch; /* Header information fields */
|
||||||
uint16 cam_grp6_len; /* Group 6 VU CDB length */
|
uint16 cam_grp6_len; /* Group 6 VU CDB length */
|
||||||
uint16 cam_grp7_len; /* Group 7 VU CDB length */
|
uint16 cam_grp7_len; /* Group 7 VU CDB length */
|
||||||
uchar *cam_ccb_listptr; /* Pointer to the target CCB list */
|
uchar* cam_ccb_listptr; /* Pointer to the target CCB list */
|
||||||
uint16 cam_ccb_listcnt; /* Count of Target CCBs in the list */
|
uint16 cam_ccb_listcnt; /* Count of Target CCBs in the list */
|
||||||
} CCB_EN_LUN;
|
} CCB_EN_LUN;
|
||||||
|
|
||||||
|
@ -272,20 +260,20 @@ typedef struct ccb_enable_lun
|
||||||
CCB_HEADER cam_ch; /* Header information fields */
|
CCB_HEADER cam_ch; /* Header information fields */
|
||||||
uint16 cam_grp6_length; /* Group 6 Vendor Unique CDB Lengths */
|
uint16 cam_grp6_length; /* Group 6 Vendor Unique CDB Lengths */
|
||||||
uint16 cam_grp7_length; /* Group 7 Vendor Unique CDB Lengths */
|
uint16 cam_grp7_length; /* Group 7 Vendor Unique CDB Lengths */
|
||||||
uchar *cam_immed_notify_list; /* Ptr to Immediate Notify CCB list */
|
uchar* cam_immed_notify_list; /* Ptr to Immediate Notify CCB list */
|
||||||
uint32 cam_immed_notify_cnt; /* Number of Immediate Notify CCBs */
|
uint32 cam_immed_notify_cnt; /* Number of Immediate Notify CCBs */
|
||||||
uchar *cam_accept_targ_list; /* Ptr to Accept Target I/O CCB list */
|
uchar* cam_accept_targ_list; /* Ptr to Accept Target I/O CCB list */
|
||||||
uint32 cam_accept_targ_cnt; /* Number of Accept Target I/O CCBs */
|
uint32 cam_accept_targ_cnt; /* Number of Accept Target I/O CCBs */
|
||||||
uchar cam_sim_priv[ SIM_PRIV ]; /* SIM private data area */
|
uchar cam_sim_priv[SIM_PRIV]; /* SIM private data area */
|
||||||
} CCB_ENABLE_LUN;
|
} CCB_ENABLE_LUN;
|
||||||
|
|
||||||
/* Immediate Notify CCB */
|
/* Immediate Notify CCB */
|
||||||
typedef struct ccb_immed_notify
|
typedef struct ccb_immed_notify
|
||||||
{
|
{
|
||||||
CCB_HEADER cam_ch; /* Header information fields */
|
CCB_HEADER cam_ch; /* Header information fields */
|
||||||
uchar *cam_pdrv_ptr; /* Ptr used by the Peripheral driver */
|
uchar* cam_pdrv_ptr; /* Ptr used by the Peripheral driver */
|
||||||
void (*cam_cbfnot)(); /* Callback on notification function */
|
void (*cam_cbfnot)(); /* Callback on notification function */
|
||||||
uchar *cam_sense_ptr; /* Pointer to the sense data buffer */
|
uchar* cam_sense_ptr; /* Pointer to the sense data buffer */
|
||||||
uchar cam_sense_len; /* Num of bytes in the Autosense buf */
|
uchar cam_sense_len; /* Num of bytes in the Autosense buf */
|
||||||
uchar cam_init_id; /* ID of Initiator that selected */
|
uchar cam_init_id; /* ID of Initiator that selected */
|
||||||
uint16 cam_seq_id; /* Sequence Identifier */
|
uint16 cam_seq_id; /* Sequence Identifier */
|
||||||
|
@ -306,13 +294,13 @@ typedef struct ccb_notify_ack
|
||||||
typedef struct ccb_accept_targ
|
typedef struct ccb_accept_targ
|
||||||
{
|
{
|
||||||
CCB_HEADER cam_ch; /* Header information fields */
|
CCB_HEADER cam_ch; /* Header information fields */
|
||||||
uchar *cam_pdrv_ptr; /* Ptr used by the Peripheral driver */
|
uchar* cam_pdrv_ptr; /* Ptr used by the Peripheral driver */
|
||||||
CCB_HEADER *cam_next_ccb; /* Ptr to the next CCB for action */
|
CCB_HEADER* cam_next_ccb; /* Ptr to the next CCB for action */
|
||||||
uchar *cam_req_map; /* Ptr for mapping info on the Req. */
|
uchar* cam_req_map; /* Ptr for mapping info on the Req. */
|
||||||
void (*cam_cbfcnot)(); /* Callback on completion function */
|
void (*cam_cbfcnot)(); /* Callback on completion function */
|
||||||
uchar *cam_data_ptr; /* Pointer to the data buf/SG list */
|
uchar* cam_data_ptr; /* Pointer to the data buf/SG list */
|
||||||
uint32 cam_dxfer_len; /* Data xfer length */
|
uint32 cam_dxfer_len; /* Data xfer length */
|
||||||
uchar *cam_sense_ptr; /* Pointer to the sense data buffer */
|
uchar* cam_sense_ptr; /* Pointer to the sense data buffer */
|
||||||
uchar cam_sense_len; /* Num of bytes in the Autosense buf */
|
uchar cam_sense_len; /* Num of bytes in the Autosense buf */
|
||||||
uchar cam_cdb_len; /* Number of bytes for the CDB */
|
uchar cam_cdb_len; /* Number of bytes for the CDB */
|
||||||
uint16 cam_sglist_cnt; /* Num of scatter gather list entries */
|
uint16 cam_sglist_cnt; /* Num of scatter gather list entries */
|
||||||
|
@ -323,14 +311,14 @@ typedef struct ccb_accept_targ
|
||||||
int32 cam_resid; /* Transfer residual length: 2's comp */
|
int32 cam_resid; /* Transfer residual length: 2's comp */
|
||||||
CDB_UN cam_cdb_io; /* Union for CDB bytes/pointer */
|
CDB_UN cam_cdb_io; /* Union for CDB bytes/pointer */
|
||||||
uint32 cam_timeout; /* Timeout value */
|
uint32 cam_timeout; /* Timeout value */
|
||||||
uchar *cam_msg_ptr; /* Pointer to the message buffer */
|
uchar* cam_msg_ptr; /* Pointer to the message buffer */
|
||||||
uint16 cam_msgb_len; /* Num of bytes in the message buf */
|
uint16 cam_msgb_len; /* Num of bytes in the message buf */
|
||||||
uint16 cam_vu_flags; /* Vendor unique flags */
|
uint16 cam_vu_flags; /* Vendor unique flags */
|
||||||
uchar cam_tag_action; /* What to do for tag queuing */
|
uchar cam_tag_action; /* What to do for tag queuing */
|
||||||
uchar cam_tag_id; /* Tag ID */
|
uchar cam_tag_id; /* Tag ID */
|
||||||
uchar cam_initiator_id; /* Initiator ID */
|
uchar cam_initiator_id; /* Initiator ID */
|
||||||
uchar cam_iorsvd0[1]; /* Reserved field, for alignment */
|
uchar cam_iorsvd0[1]; /* Reserved field, for alignment */
|
||||||
uchar cam_sim_priv[ SIM_PRIV ]; /* SIM private data area */
|
uchar cam_sim_priv[SIM_PRIV]; /* SIM private data area */
|
||||||
} CCB_ACCEPT_TARG;
|
} CCB_ACCEPT_TARG;
|
||||||
|
|
||||||
/* Continue Target I/O CCB */
|
/* Continue Target I/O CCB */
|
||||||
|
@ -350,13 +338,13 @@ typedef struct ccb_eng_inq
|
||||||
typedef struct ccb_eng_exec /* NOTE: must match SCSIIO size */
|
typedef struct ccb_eng_exec /* NOTE: must match SCSIIO size */
|
||||||
{
|
{
|
||||||
CCB_HEADER cam_ch; /* Header information fields */
|
CCB_HEADER cam_ch; /* Header information fields */
|
||||||
uchar *cam_pdrv_ptr; /* Ptr used by the Peripheral driver */
|
uchar* cam_pdrv_ptr; /* Ptr used by the Peripheral driver */
|
||||||
uint32 cam_engrsvd0; /* Reserved field, for alignment */
|
uint32 cam_engrsvd0; /* Reserved field, for alignment */
|
||||||
uchar *cam_req_map; /* Ptr for mapping info on the Req. */
|
uchar* cam_req_map; /* Ptr for mapping info on the Req. */
|
||||||
void (*cam_cbfcnp)(); /* Callback on completion function */
|
void (*cam_cbfcnp)(); /* Callback on completion function */
|
||||||
uchar *cam_data_ptr; /* Pointer to the data buf/SG list */
|
uchar* cam_data_ptr; /* Pointer to the data buf/SG list */
|
||||||
uint32 cam_dxfer_len; /* Data xfer length */
|
uint32 cam_dxfer_len; /* Data xfer length */
|
||||||
uchar *cam_engdata_ptr; /* Pointer to the engine buffer data */
|
uchar* cam_engdata_ptr; /* Pointer to the engine buffer data */
|
||||||
uchar cam_engrsvd1; /* Reserved field, for alignment */
|
uchar cam_engrsvd1; /* Reserved field, for alignment */
|
||||||
uchar cam_engrsvd2; /* Reserved field, for alignment */
|
uchar cam_engrsvd2; /* Reserved field, for alignment */
|
||||||
uint16 cam_sglist_cnt; /* Num of scatter gather list entries */
|
uint16 cam_sglist_cnt; /* Num of scatter gather list entries */
|
||||||
|
@ -370,7 +358,7 @@ typedef struct ccb_eng_exec /* NOTE: must match SCSIIO size */
|
||||||
uint16 cam_vu_flags; /* Vendor unique flags */
|
uint16 cam_vu_flags; /* Vendor unique flags */
|
||||||
uchar cam_engrsvd5; /* Reserved field, for alignment */
|
uchar cam_engrsvd5; /* Reserved field, for alignment */
|
||||||
uchar cam_engrsvd6[3]; /* Reserved field, for alignment */
|
uchar cam_engrsvd6[3]; /* Reserved field, for alignment */
|
||||||
uchar cam_sim_priv[ SIM_PRIV ]; /* SIM private data area */
|
uchar cam_sim_priv[SIM_PRIV]; /* SIM private data area */
|
||||||
} CCB_ENG_EXEC;
|
} CCB_ENG_EXEC;
|
||||||
|
|
||||||
/* The sim_module_info definition is used to define the entry points for
|
/* The sim_module_info definition is used to define the entry points for
|
||||||
|
@ -382,14 +370,14 @@ entries. */
|
||||||
typedef struct sim_module_info sim_module_info;
|
typedef struct sim_module_info sim_module_info;
|
||||||
|
|
||||||
struct sim_module_info {
|
struct sim_module_info {
|
||||||
module_info minfo;
|
module_info minfo;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct CAM_SIM_ENTRY CAM_SIM_ENTRY;
|
typedef struct CAM_SIM_ENTRY CAM_SIM_ENTRY;
|
||||||
|
|
||||||
struct CAM_SIM_ENTRY {
|
struct CAM_SIM_ENTRY {
|
||||||
status_t (*sim_init)();
|
status_t (*sim_init)();
|
||||||
int32 (*sim_action)();
|
int32 (*sim_action)();
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
@ -544,7 +532,7 @@ SIM's default timeout can take effect. */
|
||||||
|
|
||||||
typedef struct sg_elem
|
typedef struct sg_elem
|
||||||
{
|
{
|
||||||
uchar *cam_sg_address; /* Scatter/Gather address */
|
uchar* cam_sg_address; /* Scatter/Gather address */
|
||||||
uint32 cam_sg_count; /* Scatter/Gather count */
|
uint32 cam_sg_count; /* Scatter/Gather count */
|
||||||
} SG_ELEM;
|
} SG_ELEM;
|
||||||
|
|
||||||
|
@ -588,11 +576,11 @@ in a linked list structure. */
|
||||||
|
|
||||||
typedef struct async_info
|
typedef struct async_info
|
||||||
{
|
{
|
||||||
struct async_info *cam_async_next; /* pointer to the next structure */
|
struct async_info* cam_async_next; /* pointer to the next structure */
|
||||||
uint32 cam_event_enable; /* Event enables for Callback resp */
|
uint32 cam_event_enable; /* Event enables for Callback resp */
|
||||||
void (*cam_async_func)(); /* Async Callback function address */
|
void (*cam_async_func)(); /* Async Callback function address */
|
||||||
uint32 cam_async_blen; /* Length of "information" buffer */
|
uint32 cam_async_blen; /* Length of "information" buffer */
|
||||||
uchar *cam_async_ptr; /* Address for the "information */
|
uchar* cam_async_ptr; /* Address for the "information */
|
||||||
} ASYNC_INFO;
|
} ASYNC_INFO;
|
||||||
|
|
||||||
/* The CAM EDT table contains the device information for all the
|
/* The CAM EDT table contains the device information for all the
|
||||||
|
@ -603,9 +591,9 @@ table contains a CAM_EDT_ENTRY structure for each device on the bus.
|
||||||
typedef struct cam_edt_entry
|
typedef struct cam_edt_entry
|
||||||
{
|
{
|
||||||
int32 cam_tlun_found; /* Flag for the existence of the target/LUN */
|
int32 cam_tlun_found; /* Flag for the existence of the target/LUN */
|
||||||
ASYNC_INFO *cam_ainfo; /* Async callback list info for this B/T/L */
|
ASYNC_INFO* cam_ainfo; /* Async callback list info for this B/T/L */
|
||||||
uint32 cam_owner_tag; /* Tag for the peripheral driver's ownership */
|
uint32 cam_owner_tag; /* Tag for the peripheral driver's ownership */
|
||||||
char cam_inq_data[ INQLEN ]; /* storage for the inquiry data */
|
char cam_inq_data[INQLEN]; /* storage for the inquiry data */
|
||||||
} CAM_EDT_ENTRY;
|
} CAM_EDT_ENTRY;
|
||||||
|
|
||||||
|
|
||||||
|
@ -628,15 +616,15 @@ typedef struct cam_edt_entry
|
||||||
typedef struct ccb_extended_pathinq
|
typedef struct ccb_extended_pathinq
|
||||||
{
|
{
|
||||||
CCB_PATHINQ cam_path; /* Default path inquiry */
|
CCB_PATHINQ cam_path; /* Default path inquiry */
|
||||||
char cam_sim_version [ VERS ]; /* SIM version number */
|
char cam_sim_version[VERS]; /* SIM version number */
|
||||||
char cam_hba_version [ VERS ]; /* HBA version number */
|
char cam_hba_version[VERS]; /* HBA version number */
|
||||||
char cam_controller_family [ FAM_ID ]; /* Controller family */
|
char cam_controller_family[FAM_ID]; /* Controller family */
|
||||||
char cam_controller_type [ TYPE_ID ]; /* Controller type */
|
char cam_controller_type[TYPE_ID]; /* Controller type */
|
||||||
} CCB_EXTENDED_PATHINQ;
|
} CCB_EXTENDED_PATHINQ;
|
||||||
|
|
||||||
|
|
||||||
/* ---
|
/* ---
|
||||||
Vendor unique flags supported by Be OS (cam_vu_flags)
|
Vendor unique flags supported by Haiku (cam_vu_flags)
|
||||||
--- */
|
--- */
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -655,9 +643,9 @@ typedef struct cam_for_driver_module_info cam_for_driver_module_info;
|
||||||
|
|
||||||
struct cam_for_driver_module_info {
|
struct cam_for_driver_module_info {
|
||||||
bus_manager_info minfo;
|
bus_manager_info minfo;
|
||||||
CCB_HEADER * (*xpt_ccb_alloc)(void);
|
CCB_HEADER* (*xpt_ccb_alloc)(void);
|
||||||
void (*xpt_ccb_free)(void *ccb);
|
void (*xpt_ccb_free)(void* ccb);
|
||||||
long (*xpt_action)(CCB_HEADER *ccbh);
|
long (*xpt_action)(CCB_HEADER* ccbh);
|
||||||
};
|
};
|
||||||
|
|
||||||
#define B_CAM_FOR_DRIVER_MODULE_NAME "bus_managers/scsi/driver/v1"
|
#define B_CAM_FOR_DRIVER_MODULE_NAME "bus_managers/scsi/driver/v1"
|
||||||
|
@ -670,8 +658,8 @@ typedef struct cam_for_sim_module_info cam_for_sim_module_info;
|
||||||
|
|
||||||
struct cam_for_sim_module_info {
|
struct cam_for_sim_module_info {
|
||||||
bus_manager_info minfo;
|
bus_manager_info minfo;
|
||||||
long (*xpt_bus_register) (CAM_SIM_ENTRY *sim);
|
long (*xpt_bus_register)(CAM_SIM_ENTRY* sim);
|
||||||
long (*xpt_bus_deregister) (long path);
|
long (*xpt_bus_deregister)(long path);
|
||||||
};
|
};
|
||||||
|
|
||||||
#define B_CAM_FOR_SIM_MODULE_NAME "bus_managers/scsi/sim/v1"
|
#define B_CAM_FOR_SIM_MODULE_NAME "bus_managers/scsi/sim/v1"
|
||||||
|
|
Loading…
Reference in New Issue