Update arcmsr(4) to vendor version 1.20.00.25.
Many thanks to Areca for continuing to support FreeBSD. Submitted by: Ching-Lung Huang <ching2048 areca com tw> MFC after: 2 weeks
This commit is contained in:
parent
0ac7f606c8
commit
4e47a32be0
@ -24,7 +24,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd November 25, 2010
|
||||
.Dd September 3, 2012
|
||||
.Dt ARCMSR 4
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -98,10 +98,14 @@ ARC-1210
|
||||
.It
|
||||
ARC-1212
|
||||
.It
|
||||
ARC-1213
|
||||
.It
|
||||
ARC-1220
|
||||
.It
|
||||
ARC-1222
|
||||
.It
|
||||
ARC-1223
|
||||
.It
|
||||
ARC-1230
|
||||
.It
|
||||
ARC-1231
|
||||
@ -133,6 +137,8 @@ ARC-1680
|
||||
ARC-1681
|
||||
.It
|
||||
ARC-1880
|
||||
.It
|
||||
ARC-1882
|
||||
.El
|
||||
.Sh FILES
|
||||
.Bl -tag -width ".Pa /dev/arcmsr?" -compact
|
||||
|
@ -37,38 +37,43 @@
|
||||
**************************************************************************
|
||||
** History
|
||||
**
|
||||
** REV# DATE NAME DESCRIPTION
|
||||
** 1.00.00.00 03/31/2004 Erich Chen First release
|
||||
** 1.20.00.02 11/29/2004 Erich Chen bug fix with arcmsr_bus_reset when PHY error
|
||||
** 1.20.00.03 04/19/2005 Erich Chen add SATA 24 Ports adapter type support
|
||||
** REV# DATE NAME DESCRIPTION
|
||||
** 1.00.00.00 03/31/2004 Erich Chen First release
|
||||
** 1.20.00.02 11/29/2004 Erich Chen bug fix with arcmsr_bus_reset when PHY error
|
||||
** 1.20.00.03 04/19/2005 Erich Chen add SATA 24 Ports adapter type support
|
||||
** clean unused function
|
||||
** 1.20.00.12 09/12/2005 Erich Chen bug fix with abort command handling,
|
||||
** 1.20.00.12 09/12/2005 Erich Chen bug fix with abort command handling,
|
||||
** firmware version check
|
||||
** and firmware update notify for hardware bug fix
|
||||
** handling if none zero high part physical address
|
||||
** of srb resource
|
||||
** 1.20.00.13 08/18/2006 Erich Chen remove pending srb and report busy
|
||||
** 1.20.00.13 08/18/2006 Erich Chen remove pending srb and report busy
|
||||
** add iop message xfer
|
||||
** with scsi pass-through command
|
||||
** add new device id of sas raid adapters
|
||||
** code fit for SPARC64 & PPC
|
||||
** 1.20.00.14 02/05/2007 Erich Chen bug fix for incorrect ccb_h.status report
|
||||
** 1.20.00.14 02/05/2007 Erich Chen bug fix for incorrect ccb_h.status report
|
||||
** and cause g_vfs_done() read write error
|
||||
** 1.20.00.15 10/10/2007 Erich Chen support new RAID adapter type ARC120x
|
||||
** 1.20.00.16 10/10/2009 Erich Chen Bug fix for RAID adapter type ARC120x
|
||||
** 1.20.00.15 10/10/2007 Erich Chen support new RAID adapter type ARC120x
|
||||
** 1.20.00.16 10/10/2009 Erich Chen Bug fix for RAID adapter type ARC120x
|
||||
** bus_dmamem_alloc() with BUS_DMA_ZERO
|
||||
** 1.20.00.17 07/15/2010 Ching Huang Added support ARC1880
|
||||
** report CAM_DEV_NOT_THERE instead of CAM_SEL_TIMEOUT when device failed,
|
||||
** prevent cam_periph_error removing all LUN devices of one Target id
|
||||
** for any one LUN device failed
|
||||
** 1.20.00.18 10/14/2010 Ching Huang Fixed "inquiry data fails comparion at DV1 step"
|
||||
** 10/25/2010 Ching Huang Fixed bad range input in bus_alloc_resource for ADAPTER_TYPE_B
|
||||
** 1.20.00.19 11/11/2010 Ching Huang Fixed arcmsr driver prevent arcsas support for Areca SAS HBA ARC13x0
|
||||
** 1.20.00.20 12/08/2010 Ching Huang Avoid calling atomic_set_int function
|
||||
** 1.20.00.21 02/08/2011 Ching Huang Implement I/O request timeout
|
||||
** 02/14/2011 Ching Huang Modified pktRequestCount
|
||||
** 1.20.00.21 03/03/2011 Ching Huang if a command timeout, then wait its ccb back before free it
|
||||
** 1.20.00.22 07/04/2011 Ching Huang Fixed multiple MTX panic
|
||||
** 1.20.00.17 07/15/2010 Ching Huang Added support ARC1880
|
||||
** report CAM_DEV_NOT_THERE instead of CAM_SEL_TIMEOUT when device failed,
|
||||
** prevent cam_periph_error removing all LUN devices of one Target id
|
||||
** for any one LUN device failed
|
||||
** 1.20.00.18 10/14/2010 Ching Huang Fixed "inquiry data fails comparion at DV1 step"
|
||||
** 10/25/2010 Ching Huang Fixed bad range input in bus_alloc_resource for ADAPTER_TYPE_B
|
||||
** 1.20.00.19 11/11/2010 Ching Huang Fixed arcmsr driver prevent arcsas support for Areca SAS HBA ARC13x0
|
||||
** 1.20.00.20 12/08/2010 Ching Huang Avoid calling atomic_set_int function
|
||||
** 1.20.00.21 02/08/2011 Ching Huang Implement I/O request timeout
|
||||
** 02/14/2011 Ching Huang Modified pktRequestCount
|
||||
** 1.20.00.21 03/03/2011 Ching Huang if a command timeout, then wait its ccb back before free it
|
||||
** 1.20.00.22 07/04/2011 Ching Huang Fixed multiple MTX panic
|
||||
** 1.20.00.23 10/28/2011 Ching Huang Added TIMEOUT_DELAY in case of too many HDDs need to start
|
||||
** 1.20.00.23 11/08/2011 Ching Huang Added report device transfer speed
|
||||
** 1.20.00.23 01/30/2012 Ching Huang Fixed Request requeued and Retrying command
|
||||
** 1.20.00.24 06/11/2012 Ching Huang Fixed return sense data condition
|
||||
** 1.20.00.25 08/17/2012 Ching Huang Fixed hotplug device no function on type A adapter
|
||||
******************************************************************************************
|
||||
*/
|
||||
|
||||
@ -154,7 +159,7 @@ __FBSDID("$FreeBSD$");
|
||||
#define arcmsr_callout_init(a) callout_init(a);
|
||||
#endif
|
||||
|
||||
#define ARCMSR_DRIVER_VERSION "Driver Version 1.20.00.22 2011-07-04"
|
||||
#define ARCMSR_DRIVER_VERSION "Driver Version 1.20.00.25 2012-08-17"
|
||||
#include <dev/arcmsr/arcmsr.h>
|
||||
#define SRB_SIZE ((sizeof(struct CommandControlBlock)+0x1f) & 0xffe0)
|
||||
#define ARCMSR_SRBS_POOL_SIZE (SRB_SIZE * ARCMSR_MAX_FREESRB_NUM)
|
||||
@ -296,7 +301,7 @@ static struct cdevsw arcmsr_cdevsw = {
|
||||
if(acb==NULL) {
|
||||
return ENXIO;
|
||||
}
|
||||
return 0;
|
||||
return (0);
|
||||
}
|
||||
/*
|
||||
**************************************************************************
|
||||
@ -347,7 +352,7 @@ static struct cdevsw arcmsr_cdevsw = {
|
||||
if(acb==NULL) {
|
||||
return ENXIO;
|
||||
}
|
||||
return(arcmsr_iop_ioctlcmd(acb, ioctl_cmd, arg));
|
||||
return (arcmsr_iop_ioctlcmd(acb, ioctl_cmd, arg));
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -378,7 +383,7 @@ static u_int32_t arcmsr_disable_allintr( struct AdapterControlBlock *acb)
|
||||
}
|
||||
break;
|
||||
}
|
||||
return(intmask_org);
|
||||
return (intmask_org);
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -411,7 +416,6 @@ static void arcmsr_enable_allintr( struct AdapterControlBlock *acb, u_int32_t in
|
||||
}
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -431,7 +435,7 @@ static u_int8_t arcmsr_hba_wait_msgint_ready(struct AdapterControlBlock *acb)
|
||||
UDELAY(10000);
|
||||
}/*max 1 seconds*/
|
||||
}while(Retries++ < 20);/*max 20 sec*/
|
||||
return FALSE;
|
||||
return (FALSE);
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -452,7 +456,7 @@ static u_int8_t arcmsr_hbb_wait_msgint_ready(struct AdapterControlBlock *acb)
|
||||
UDELAY(10000);
|
||||
}/*max 1 seconds*/
|
||||
}while(Retries++ < 20);/*max 20 sec*/
|
||||
return FALSE;
|
||||
return (FALSE);
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -472,7 +476,7 @@ static u_int8_t arcmsr_hbc_wait_msgint_ready(struct AdapterControlBlock *acb)
|
||||
UDELAY(10000);
|
||||
}/*max 1 seconds*/
|
||||
}while(Retries++ < 20);/*max 20 sec*/
|
||||
return FALSE;
|
||||
return (FALSE);
|
||||
}
|
||||
/*
|
||||
************************************************************************
|
||||
@ -490,7 +494,6 @@ static void arcmsr_flush_hba_cache(struct AdapterControlBlock *acb)
|
||||
retry_count--;
|
||||
}
|
||||
}while(retry_count!=0);
|
||||
return;
|
||||
}
|
||||
/*
|
||||
************************************************************************
|
||||
@ -509,7 +512,6 @@ static void arcmsr_flush_hbb_cache(struct AdapterControlBlock *acb)
|
||||
retry_count--;
|
||||
}
|
||||
}while(retry_count!=0);
|
||||
return;
|
||||
}
|
||||
/*
|
||||
************************************************************************
|
||||
@ -528,7 +530,6 @@ static void arcmsr_flush_hbc_cache(struct AdapterControlBlock *acb)
|
||||
retry_count--;
|
||||
}
|
||||
}while(retry_count!=0);
|
||||
return;
|
||||
}
|
||||
/*
|
||||
************************************************************************
|
||||
@ -550,7 +551,6 @@ static void arcmsr_flush_adapter_cache(struct AdapterControlBlock *acb)
|
||||
}
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
*******************************************************************************
|
||||
@ -596,7 +596,7 @@ static void arcmsr_async(void *cb_arg, u_int32_t code, struct cam_path *path, vo
|
||||
if((target_id > ARCMSR_MAX_TARGETID) || (target_lun > ARCMSR_MAX_TARGETLUN)) {
|
||||
break;
|
||||
}
|
||||
printf("%s:scsi id=%d lun=%d device lost \n", device_get_name(acb->pci_dev), target_id, target_lun);
|
||||
// printf("%s:scsi id=%d lun=%d device lost \n", device_get_name(acb->pci_dev), target_id, target_lun);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -612,14 +612,13 @@ static void arcmsr_report_sense_info(struct CommandControlBlock *srb)
|
||||
|
||||
pccb->ccb_h.status |= CAM_SCSI_STATUS_ERROR;
|
||||
pccb->csio.scsi_status = SCSI_STATUS_CHECK_COND;
|
||||
if(&pccb->csio.sense_data) {
|
||||
if(pccb->csio.sense_len) {
|
||||
memset(&pccb->csio.sense_data, 0, sizeof(pccb->csio.sense_data));
|
||||
memcpy(&pccb->csio.sense_data, srb->arcmsr_cdb.SenseData,
|
||||
get_min(sizeof(struct SENSE_DATA), sizeof(pccb->csio.sense_data)));
|
||||
((u_int8_t *)&pccb->csio.sense_data)[0] = (0x1 << 7 | 0x70); /* Valid,ErrorCode */
|
||||
pccb->ccb_h.status |= CAM_AUTOSNS_VALID;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
*********************************************************************
|
||||
@ -631,7 +630,6 @@ static void arcmsr_abort_hba_allcmd(struct AdapterControlBlock *acb)
|
||||
if(!arcmsr_hba_wait_msgint_ready(acb)) {
|
||||
printf("arcmsr%d: wait 'abort all outstanding command' timeout \n", acb->pci_unit);
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
*********************************************************************
|
||||
@ -643,7 +641,6 @@ static void arcmsr_abort_hbb_allcmd(struct AdapterControlBlock *acb)
|
||||
if(!arcmsr_hbb_wait_msgint_ready(acb)) {
|
||||
printf("arcmsr%d: wait 'abort all outstanding command' timeout \n", acb->pci_unit);
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
*********************************************************************
|
||||
@ -656,7 +653,6 @@ static void arcmsr_abort_hbc_allcmd(struct AdapterControlBlock *acb)
|
||||
if(!arcmsr_hbc_wait_msgint_ready(acb)) {
|
||||
printf("arcmsr%d: wait 'abort all outstanding command' timeout \n", acb->pci_unit);
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
*********************************************************************
|
||||
@ -678,7 +674,6 @@ static void arcmsr_abort_allcmd(struct AdapterControlBlock *acb)
|
||||
}
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -716,7 +711,6 @@ static void arcmsr_srb_complete(struct CommandControlBlock *srb, int stand_flag)
|
||||
acb->pktReturnCount++;
|
||||
#endif
|
||||
xpt_done(pccb);
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**************************************************************************
|
||||
@ -768,7 +762,6 @@ static void arcmsr_report_srb_state(struct AdapterControlBlock *acb, struct Comm
|
||||
break;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**************************************************************************
|
||||
@ -801,7 +794,6 @@ static void arcmsr_drain_donequeue(struct AdapterControlBlock *acb, u_int32_t fl
|
||||
return;
|
||||
}
|
||||
arcmsr_report_srb_state(acb, srb, error);
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**************************************************************************
|
||||
@ -883,7 +875,6 @@ static void arcmsr_done4abort_postqueue(struct AdapterControlBlock *acb)
|
||||
}
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
****************************************************************************
|
||||
@ -923,7 +914,6 @@ static void arcmsr_iop_reset(struct AdapterControlBlock *acb)
|
||||
acb->pktRequestCount = 0;
|
||||
acb->pktReturnCount = 0;
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -1011,7 +1001,6 @@ static void arcmsr_build_srb(struct CommandControlBlock *srb,
|
||||
arcmsr_cdb->DataLength = 0;
|
||||
}
|
||||
srb->arc_cdb_size=arccdbsize;
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**************************************************************************
|
||||
@ -1072,7 +1061,6 @@ static void arcmsr_post_srb(struct AdapterControlBlock *acb, struct CommandContr
|
||||
}
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
************************************************************************
|
||||
@ -1156,7 +1144,6 @@ static void arcmsr_iop_message_read(struct AdapterControlBlock *acb)
|
||||
CHIP_REG_WRITE32(HBC_MessageUnit, 0, inbound_doorbell, ARCMSR_HBCMU_DRV2IOP_DATA_READ_OK);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**************************************************************************
|
||||
@ -1221,7 +1208,6 @@ static void arcmsr_post_ioctldata2iop(struct AdapterControlBlock *acb)
|
||||
*/
|
||||
arcmsr_iop_message_wrote(acb);
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
************************************************************************
|
||||
@ -1236,7 +1222,6 @@ static void arcmsr_stop_hba_bgrb(struct AdapterControlBlock *acb)
|
||||
printf("arcmsr%d: wait 'stop adapter background rebulid' timeout \n"
|
||||
, acb->pci_unit);
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
************************************************************************
|
||||
@ -1251,7 +1236,6 @@ static void arcmsr_stop_hbb_bgrb(struct AdapterControlBlock *acb)
|
||||
printf( "arcmsr%d: wait 'stop adapter background rebulid' timeout \n"
|
||||
, acb->pci_unit);
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
************************************************************************
|
||||
@ -1265,7 +1249,6 @@ static void arcmsr_stop_hbc_bgrb(struct AdapterControlBlock *acb)
|
||||
if(!arcmsr_hbc_wait_msgint_ready(acb)) {
|
||||
printf("arcmsr%d: wait 'stop adapter background rebulid' timeout \n", acb->pci_unit);
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
************************************************************************
|
||||
@ -1287,7 +1270,6 @@ static void arcmsr_stop_adapter_bgrb(struct AdapterControlBlock *acb)
|
||||
}
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
************************************************************************
|
||||
@ -1305,7 +1287,6 @@ static void arcmsr_poll(struct cam_sim * psim)
|
||||
arcmsr_interrupt(acb);
|
||||
if( mutex == 0 )
|
||||
ARCMSR_LOCK_RELEASE(&acb->qbuffer_lock);
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**************************************************************************
|
||||
@ -1340,7 +1321,6 @@ static void arcmsr_iop2drv_data_wrote_handle(struct AdapterControlBlock *acb)
|
||||
} else {
|
||||
acb->acb_flags|=ACB_F_IOPDATA_OVERFLOW;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**************************************************************************
|
||||
@ -1383,7 +1363,6 @@ static void arcmsr_iop2drv_data_read_handle(struct AdapterControlBlock *acb)
|
||||
if(acb->wqbuf_firstindex==acb->wqbuf_lastindex) {
|
||||
acb->acb_flags |= ACB_F_MESSAGE_WQBUFFER_CLEARED;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
static void arcmsr_rescanLun_cb(struct cam_periph *periph, union ccb *ccb)
|
||||
@ -1417,7 +1396,6 @@ static void arcmsr_rescan_lun(struct AdapterControlBlock *acb, int target, int l
|
||||
ccb->ccb_h.cbfcnp = arcmsr_rescanLun_cb;
|
||||
ccb->crcn.flags = CAM_FLAG_NONE;
|
||||
xpt_action(ccb);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -1488,6 +1466,7 @@ static void arcmsr_dr_handle(struct AdapterControlBlock *acb) {
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if(acb->acb_flags & ACB_F_BUS_HANG_ON)
|
||||
{
|
||||
acb->acb_flags &= ~ACB_F_BUS_HANG_ON;
|
||||
@ -1592,7 +1571,6 @@ static void arcmsr_hba_doorbell_isr(struct AdapterControlBlock *acb)
|
||||
if(outbound_doorbell & ARCMSR_OUTBOUND_IOP331_DATA_READ_OK) {
|
||||
arcmsr_iop2drv_data_read_handle(acb);
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**************************************************************************
|
||||
@ -1620,7 +1598,6 @@ static void arcmsr_hbc_doorbell_isr(struct AdapterControlBlock *acb)
|
||||
if(outbound_doorbell & ARCMSR_HBCMU_IOP2DRV_MESSAGE_CMD_DONE) {
|
||||
arcmsr_hbc_message_isr(acb); /* messenger of "driver to iop commands" */
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**************************************************************************
|
||||
@ -1644,7 +1621,6 @@ static void arcmsr_hba_postqueue_isr(struct AdapterControlBlock *acb)
|
||||
error=(flag_srb & ARCMSR_SRBREPLY_FLAG_ERROR_MODE0)?TRUE:FALSE;
|
||||
arcmsr_drain_donequeue(acb, flag_srb, error);
|
||||
} /*drain reply FIFO*/
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**************************************************************************
|
||||
@ -1674,7 +1650,6 @@ static void arcmsr_hbb_postqueue_isr(struct AdapterControlBlock *acb)
|
||||
error=(flag_srb & ARCMSR_SRBREPLY_FLAG_ERROR_MODE0)?TRUE:FALSE;
|
||||
arcmsr_drain_donequeue(acb, flag_srb, error);
|
||||
} /*drain reply FIFO*/
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**************************************************************************
|
||||
@ -1704,7 +1679,6 @@ static void arcmsr_hbc_postqueue_isr(struct AdapterControlBlock *acb)
|
||||
}
|
||||
throttling++;
|
||||
} /*drain reply FIFO*/
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -1712,30 +1686,29 @@ static void arcmsr_hbc_postqueue_isr(struct AdapterControlBlock *acb)
|
||||
*/
|
||||
static void arcmsr_handle_hba_isr( struct AdapterControlBlock *acb)
|
||||
{
|
||||
u_int32_t outbound_intstatus;
|
||||
u_int32_t outbound_intStatus;
|
||||
/*
|
||||
*********************************************
|
||||
** check outbound intstatus
|
||||
*********************************************
|
||||
*/
|
||||
outbound_intstatus=CHIP_REG_READ32(HBA_MessageUnit, 0, outbound_intstatus) & acb->outbound_int_enable;
|
||||
if(!outbound_intstatus) {
|
||||
outbound_intStatus=CHIP_REG_READ32(HBA_MessageUnit, 0, outbound_intstatus) & acb->outbound_int_enable;
|
||||
if(!outbound_intStatus) {
|
||||
/*it must be share irq*/
|
||||
return;
|
||||
}
|
||||
CHIP_REG_WRITE32(HBA_MessageUnit, 0, outbound_intstatus, outbound_intstatus);/*clear interrupt*/
|
||||
CHIP_REG_WRITE32(HBA_MessageUnit, 0, outbound_intstatus, outbound_intStatus);/*clear interrupt*/
|
||||
/* MU doorbell interrupts*/
|
||||
if(outbound_intstatus & ARCMSR_MU_OUTBOUND_DOORBELL_INT) {
|
||||
if(outbound_intStatus & ARCMSR_MU_OUTBOUND_DOORBELL_INT) {
|
||||
arcmsr_hba_doorbell_isr(acb);
|
||||
}
|
||||
/* MU post queue interrupts*/
|
||||
if(outbound_intstatus & ARCMSR_MU_OUTBOUND_POSTQUEUE_INT) {
|
||||
if(outbound_intStatus & ARCMSR_MU_OUTBOUND_POSTQUEUE_INT) {
|
||||
arcmsr_hba_postqueue_isr(acb);
|
||||
}
|
||||
if(outbound_intstatus & ARCMSR_MU_OUTBOUND_MESSAGE0_INT) {
|
||||
if(outbound_intStatus & ARCMSR_MU_OUTBOUND_MESSAGE0_INT) {
|
||||
arcmsr_hba_message_isr(acb);
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -1771,7 +1744,6 @@ static void arcmsr_handle_hbb_isr( struct AdapterControlBlock *acb)
|
||||
if(outbound_doorbell & ARCMSR_IOP2DRV_MESSAGE_CMD_DONE) {
|
||||
arcmsr_hbb_message_isr(acb);
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -1798,7 +1770,6 @@ static void arcmsr_handle_hbc_isr( struct AdapterControlBlock *acb)
|
||||
if(host_interrupt_status & ARCMSR_HBCMU_OUTBOUND_POSTQUEUE_ISR) {
|
||||
arcmsr_hbc_postqueue_isr(acb);
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
******************************************************************************
|
||||
@ -1821,7 +1792,6 @@ static void arcmsr_interrupt(struct AdapterControlBlock *acb)
|
||||
" unknow adapter type =%d\n", acb->pci_unit, acb->adapter_type);
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -1844,7 +1814,7 @@ static void arcmsr_polling_devmap(void* arg)
|
||||
struct AdapterControlBlock *acb = (struct AdapterControlBlock *)arg;
|
||||
switch (acb->adapter_type) {
|
||||
case ACB_ADAPTER_TYPE_A:
|
||||
CHIP_REG_WRITE32(HBC_MessageUnit, 0, inbound_msgaddr0, ARCMSR_INBOUND_MESG0_GET_CONFIG);
|
||||
CHIP_REG_WRITE32(HBA_MessageUnit, 0, inbound_msgaddr0, ARCMSR_INBOUND_MESG0_GET_CONFIG);
|
||||
break;
|
||||
|
||||
case ACB_ADAPTER_TYPE_B:
|
||||
@ -2065,7 +2035,7 @@ u_int32_t arcmsr_iop_ioctlcmd(struct AdapterControlBlock *acb, u_int32_t ioctl_c
|
||||
break;
|
||||
}
|
||||
ARCMSR_LOCK_RELEASE(&acb->qbuffer_lock);
|
||||
return retvalue;
|
||||
return (retvalue);
|
||||
}
|
||||
/*
|
||||
**************************************************************************
|
||||
@ -2191,7 +2161,7 @@ static int arcmsr_iop_message_xfer(struct AdapterControlBlock *acb, union ccb *
|
||||
if (wqbuf_lastindex != wqbuf_firstindex) {
|
||||
arcmsr_post_ioctldata2iop(acb);
|
||||
/* has error report sensedata */
|
||||
if(&pccb->csio.sense_data) {
|
||||
if(pccb->csio.sense_len) {
|
||||
((u_int8_t *)&pccb->csio.sense_data)[0] = (0x1 << 7 | 0x70);
|
||||
/* Valid,ErrorCode */
|
||||
((u_int8_t *)&pccb->csio.sense_data)[2] = 0x05;
|
||||
@ -2221,7 +2191,7 @@ static int arcmsr_iop_message_xfer(struct AdapterControlBlock *acb, union ccb *
|
||||
}
|
||||
} else {
|
||||
/* has error report sensedata */
|
||||
if(&pccb->csio.sense_data) {
|
||||
if(pccb->csio.sense_len) {
|
||||
((u_int8_t *)&pccb->csio.sense_data)[0] = (0x1 << 7 | 0x70);
|
||||
/* Valid,ErrorCode */
|
||||
((u_int8_t *)&pccb->csio.sense_data)[2] = 0x05;
|
||||
@ -2312,7 +2282,7 @@ static int arcmsr_iop_message_xfer(struct AdapterControlBlock *acb, union ccb *
|
||||
retvalue = ARCMSR_MESSAGE_FAIL;
|
||||
}
|
||||
message_out:
|
||||
return retvalue;
|
||||
return (retvalue);
|
||||
}
|
||||
/*
|
||||
*********************************************************************
|
||||
@ -2375,7 +2345,7 @@ static void arcmsr_execute_srb(void *arg, bus_dma_segment_t *dm_segs, int nseg,
|
||||
arcmsr_srb_complete(srb, 0);
|
||||
return;
|
||||
}
|
||||
if(acb->srboutstandingcount >= ARCMSR_MAX_OUTSTANDING_CMD) {
|
||||
if(acb->srboutstandingcount > ARCMSR_MAX_OUTSTANDING_CMD) {
|
||||
xpt_freeze_simq(acb->psim, 1);
|
||||
pccb->ccb_h.status = CAM_REQUEUE_REQ;
|
||||
acb->acb_flags |= ACB_F_CAM_DEV_QFRZN;
|
||||
@ -2388,10 +2358,9 @@ static void arcmsr_execute_srb(void *arg, bus_dma_segment_t *dm_segs, int nseg,
|
||||
if (pccb->ccb_h.timeout != CAM_TIME_INFINITY)
|
||||
{
|
||||
arcmsr_callout_init(&srb->ccb_callout);
|
||||
callout_reset(&srb->ccb_callout, (pccb->ccb_h.timeout * hz ) / 1000, arcmsr_srb_timeout, srb);
|
||||
callout_reset(&srb->ccb_callout, ((pccb->ccb_h.timeout + (ARCMSR_TIMEOUT_DELAY * 1000)) * hz) / 1000, arcmsr_srb_timeout, srb);
|
||||
srb->srb_flags |= SRB_FLAG_TIMER_START;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
*****************************************************************************************
|
||||
@ -2455,7 +2424,6 @@ static void arcmsr_bus_reset(struct AdapterControlBlock *acb)
|
||||
}
|
||||
arcmsr_iop_reset(acb);
|
||||
acb->acb_flags &= ~ACB_F_BUS_RESET;
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**************************************************************************
|
||||
@ -2607,10 +2575,24 @@ static void arcmsr_action(struct cam_sim * psim, union ccb * pccb)
|
||||
strncpy(cpi->dev_name, cam_sim_name(psim), DEV_IDLEN);
|
||||
cpi->unit_number=cam_sim_unit(psim);
|
||||
#ifdef CAM_NEW_TRAN_CODE
|
||||
cpi->transport = XPORT_SPI;
|
||||
cpi->transport_version = 2;
|
||||
if(acb->adapter_bus_speed == ACB_BUS_SPEED_6G)
|
||||
cpi->base_transfer_speed = 600000;
|
||||
else
|
||||
cpi->base_transfer_speed = 300000;
|
||||
if((acb->vendor_device_id == PCIDevVenIDARC1880) ||
|
||||
(acb->vendor_device_id == PCIDevVenIDARC1680))
|
||||
{
|
||||
cpi->transport = XPORT_SAS;
|
||||
cpi->transport_version = 0;
|
||||
cpi->protocol_version = SCSI_REV_SPC2;
|
||||
}
|
||||
else
|
||||
{
|
||||
cpi->transport = XPORT_SPI;
|
||||
cpi->transport_version = 2;
|
||||
cpi->protocol_version = SCSI_REV_2;
|
||||
}
|
||||
cpi->protocol = PROTO_SCSI;
|
||||
cpi->protocol_version = SCSI_REV_2;
|
||||
#endif
|
||||
cpi->ccb_h.status |= CAM_REQ_CMP;
|
||||
xpt_done(pccb);
|
||||
@ -2674,28 +2656,46 @@ static void arcmsr_action(struct cam_sim * psim, union ccb * pccb)
|
||||
{
|
||||
struct ccb_trans_settings_scsi *scsi;
|
||||
struct ccb_trans_settings_spi *spi;
|
||||
struct ccb_trans_settings_sas *sas;
|
||||
|
||||
scsi = &cts->proto_specific.scsi;
|
||||
spi = &cts->xport_specific.spi;
|
||||
cts->protocol = PROTO_SCSI;
|
||||
cts->protocol_version = SCSI_REV_2;
|
||||
cts->transport = XPORT_SPI;
|
||||
cts->transport_version = 2;
|
||||
spi->flags = CTS_SPI_FLAGS_DISC_ENB;
|
||||
spi->sync_period=3;
|
||||
spi->sync_offset=32;
|
||||
spi->bus_width=MSG_EXT_WDTR_BUS_16_BIT;
|
||||
scsi->flags = CTS_SCSI_FLAGS_TAG_ENB;
|
||||
spi->valid = CTS_SPI_VALID_DISC
|
||||
| CTS_SPI_VALID_SYNC_RATE
|
||||
| CTS_SPI_VALID_SYNC_OFFSET
|
||||
| CTS_SPI_VALID_BUS_WIDTH;
|
||||
scsi->valid = CTS_SCSI_VALID_TQ;
|
||||
cts->protocol = PROTO_SCSI;
|
||||
|
||||
if((acb->vendor_device_id == PCIDevVenIDARC1880) ||
|
||||
(acb->vendor_device_id == PCIDevVenIDARC1680))
|
||||
{
|
||||
cts->protocol_version = SCSI_REV_SPC2;
|
||||
cts->transport_version = 0;
|
||||
cts->transport = XPORT_SAS;
|
||||
sas = &cts->xport_specific.sas;
|
||||
sas->valid = CTS_SAS_VALID_SPEED;
|
||||
if(acb->vendor_device_id == PCIDevVenIDARC1880)
|
||||
sas->bitrate = 600000;
|
||||
else if(acb->vendor_device_id == PCIDevVenIDARC1680)
|
||||
sas->bitrate = 300000;
|
||||
}
|
||||
else
|
||||
{
|
||||
cts->protocol_version = SCSI_REV_2;
|
||||
cts->transport_version = 2;
|
||||
cts->transport = XPORT_SPI;
|
||||
spi = &cts->xport_specific.spi;
|
||||
spi->flags = CTS_SPI_FLAGS_DISC_ENB;
|
||||
spi->sync_period=2;
|
||||
spi->sync_offset=32;
|
||||
spi->bus_width=MSG_EXT_WDTR_BUS_16_BIT;
|
||||
spi->valid = CTS_SPI_VALID_DISC
|
||||
| CTS_SPI_VALID_SYNC_RATE
|
||||
| CTS_SPI_VALID_SYNC_OFFSET
|
||||
| CTS_SPI_VALID_BUS_WIDTH;
|
||||
}
|
||||
}
|
||||
#else
|
||||
{
|
||||
cts->flags=(CCB_TRANS_DISC_ENB | CCB_TRANS_TAG_ENB);
|
||||
cts->sync_period=3;
|
||||
cts->sync_period=2;
|
||||
cts->sync_offset=32;
|
||||
cts->bus_width=MSG_EXT_WDTR_BUS_16_BIT;
|
||||
cts->valid=CCB_TRANS_SYNC_RATE_VALID |
|
||||
@ -2759,7 +2759,6 @@ static void arcmsr_action(struct cam_sim * psim, union ccb * pccb)
|
||||
xpt_done(pccb);
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -2772,7 +2771,6 @@ static void arcmsr_start_hba_bgrb(struct AdapterControlBlock *acb)
|
||||
if(!arcmsr_hba_wait_msgint_ready(acb)) {
|
||||
printf("arcmsr%d: wait 'start adapter background rebulid' timeout \n", acb->pci_unit);
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -2785,7 +2783,6 @@ static void arcmsr_start_hbb_bgrb(struct AdapterControlBlock *acb)
|
||||
if(!arcmsr_hbb_wait_msgint_ready(acb)) {
|
||||
printf( "arcmsr%d: wait 'start adapter background rebulid' timeout \n", acb->pci_unit);
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -2799,7 +2796,6 @@ static void arcmsr_start_hbc_bgrb(struct AdapterControlBlock *acb)
|
||||
if(!arcmsr_hbc_wait_msgint_ready(acb)) {
|
||||
printf("arcmsr%d: wait 'start adapter background rebulid' timeout \n", acb->pci_unit);
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -2818,7 +2814,6 @@ static void arcmsr_start_adapter_bgrb(struct AdapterControlBlock *acb)
|
||||
arcmsr_start_hbc_bgrb(acb);
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -2873,7 +2868,6 @@ static void arcmsr_polling_hba_srbdone(struct AdapterControlBlock *acb, struct C
|
||||
}
|
||||
arcmsr_report_srb_state(acb, srb, error);
|
||||
} /*drain reply FIFO*/
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -2934,7 +2928,6 @@ static void arcmsr_polling_hbb_srbdone(struct AdapterControlBlock *acb, struct C
|
||||
}
|
||||
arcmsr_report_srb_state(acb, srb, error);
|
||||
} /*drain reply FIFO*/
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -2985,7 +2978,6 @@ static void arcmsr_polling_hbc_srbdone(struct AdapterControlBlock *acb, struct C
|
||||
}
|
||||
arcmsr_report_srb_state(acb, srb, error);
|
||||
} /*drain reply FIFO*/
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -3053,7 +3045,6 @@ static void arcmsr_get_hba_config(struct AdapterControlBlock *acb)
|
||||
acb->firm_sdram_size=CHIP_REG_READ32(HBA_MessageUnit, 0, msgcode_rwbuffer[3]); /*firm_sdram_size, 3, 12-15*/
|
||||
acb->firm_ide_channels=CHIP_REG_READ32(HBA_MessageUnit, 0, msgcode_rwbuffer[4]); /*firm_ide_channels, 4, 16-19*/
|
||||
acb->firm_cfg_version=CHIP_REG_READ32(HBA_MessageUnit, 0, msgcode_rwbuffer[ARCMSR_FW_CFGVER_OFFSET]); /*firm_cfg_version, 25, */
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -3100,7 +3091,6 @@ static void arcmsr_get_hbb_config(struct AdapterControlBlock *acb)
|
||||
acb->firm_sdram_size=CHIP_REG_READ32(HBB_RWBUFFER, 1, msgcode_rwbuffer[3]); /*firm_sdram_size, 3, 12-15*/
|
||||
acb->firm_ide_channels=CHIP_REG_READ32(HBB_RWBUFFER, 1, msgcode_rwbuffer[4]); /*firm_ide_channels, 4, 16-19*/
|
||||
acb->firm_cfg_version=CHIP_REG_READ32(HBB_RWBUFFER, 1, msgcode_rwbuffer[ARCMSR_FW_CFGVER_OFFSET]); /*firm_cfg_version, 25, */
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -3148,7 +3138,6 @@ static void arcmsr_get_hbc_config(struct AdapterControlBlock *acb)
|
||||
acb->firm_sdram_size =CHIP_REG_READ32(HBC_MessageUnit, 0, msgcode_rwbuffer[3]); /*firm_sdram_size, 3, 12-15*/
|
||||
acb->firm_ide_channels =CHIP_REG_READ32(HBC_MessageUnit, 0, msgcode_rwbuffer[4]); /*firm_ide_channels, 4, 16-19*/
|
||||
acb->firm_cfg_version =CHIP_REG_READ32(HBC_MessageUnit, 0, msgcode_rwbuffer[ARCMSR_FW_CFGVER_OFFSET]); /*firm_cfg_version, 25, */
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -3170,7 +3159,6 @@ static void arcmsr_get_firmware_spec(struct AdapterControlBlock *acb)
|
||||
}
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -3219,7 +3207,6 @@ static void arcmsr_wait_firmware_ready( struct AdapterControlBlock *acb)
|
||||
}
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -3253,7 +3240,6 @@ static void arcmsr_clear_doorbell_queue_buffer( struct AdapterControlBlock *acb)
|
||||
}
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
************************************************************************
|
||||
@ -3336,7 +3322,7 @@ static u_int32_t arcmsr_iop_confirm(struct AdapterControlBlock *acb)
|
||||
}
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
return (TRUE);
|
||||
}
|
||||
/*
|
||||
************************************************************************
|
||||
@ -3359,7 +3345,6 @@ static void arcmsr_enable_eoi_mode(struct AdapterControlBlock *acb)
|
||||
}
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -3382,7 +3367,6 @@ static void arcmsr_iop_init(struct AdapterControlBlock *acb)
|
||||
/* enable outbound Post Queue, outbound doorbell Interrupt */
|
||||
arcmsr_enable_allintr(acb, intmask_org);
|
||||
acb->acb_flags |=ACB_F_IOP_INITED;
|
||||
return;
|
||||
}
|
||||
/*
|
||||
**********************************************************************
|
||||
@ -3414,7 +3398,6 @@ static void arcmsr_map_free_srb(void *arg, bus_dma_segment_t *segs, int nseg, in
|
||||
srb_tmp = (struct CommandControlBlock *)((unsigned long)srb_tmp+SRB_SIZE);
|
||||
}
|
||||
acb->vir2phy_offset=(unsigned long)srb_tmp-(unsigned long)srb_phyaddr;
|
||||
return;
|
||||
}
|
||||
/*
|
||||
************************************************************************
|
||||
@ -3433,7 +3416,6 @@ static void arcmsr_free_resource(struct AdapterControlBlock *acb)
|
||||
bus_dma_tag_destroy(acb->srb_dmat);
|
||||
bus_dma_tag_destroy(acb->dm_segs_dmat);
|
||||
bus_dma_tag_destroy(acb->parent_dmat);
|
||||
return;
|
||||
}
|
||||
/*
|
||||
************************************************************************
|
||||
@ -3444,16 +3426,24 @@ static u_int32_t arcmsr_initialize(device_t dev)
|
||||
struct AdapterControlBlock *acb=device_get_softc(dev);
|
||||
u_int16_t pci_command;
|
||||
int i, j,max_coherent_size;
|
||||
|
||||
switch (pci_get_devid(dev)) {
|
||||
case PCIDevVenIDARC1880: {
|
||||
u_int32_t vendor_dev_id;
|
||||
|
||||
vendor_dev_id = pci_get_devid(dev);
|
||||
acb->vendor_device_id = vendor_dev_id;
|
||||
switch (vendor_dev_id) {
|
||||
case PCIDevVenIDARC1880:
|
||||
case PCIDevVenIDARC1882:
|
||||
case PCIDevVenIDARC1213:
|
||||
case PCIDevVenIDARC1223: {
|
||||
acb->adapter_type=ACB_ADAPTER_TYPE_C;
|
||||
acb->adapter_bus_speed = ACB_BUS_SPEED_6G;
|
||||
max_coherent_size=ARCMSR_SRBS_POOL_SIZE;
|
||||
}
|
||||
break;
|
||||
case PCIDevVenIDARC1200:
|
||||
case PCIDevVenIDARC1201: {
|
||||
acb->adapter_type=ACB_ADAPTER_TYPE_B;
|
||||
acb->adapter_bus_speed = ACB_BUS_SPEED_3G;
|
||||
max_coherent_size=ARCMSR_SRBS_POOL_SIZE+(sizeof(struct HBB_MessageUnit));
|
||||
}
|
||||
break;
|
||||
@ -3477,6 +3467,7 @@ static u_int32_t arcmsr_initialize(device_t dev)
|
||||
case PCIDevVenIDARC1680:
|
||||
case PCIDevVenIDARC1681: {
|
||||
acb->adapter_type=ACB_ADAPTER_TYPE_A;
|
||||
acb->adapter_bus_speed = ACB_BUS_SPEED_3G;
|
||||
max_coherent_size=ARCMSR_SRBS_POOL_SIZE;
|
||||
}
|
||||
break;
|
||||
@ -3804,7 +3795,7 @@ static int arcmsr_attach(device_t dev)
|
||||
#endif
|
||||
arcmsr_callout_init(&acb->devmap_callout);
|
||||
callout_reset(&acb->devmap_callout, 60 * hz, arcmsr_polling_devmap, acb);
|
||||
return 0;
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -3851,6 +3842,9 @@ static int arcmsr_probe(device_t dev)
|
||||
type = "SAS 3G";
|
||||
break;
|
||||
case PCIDevVenIDARC1880:
|
||||
case PCIDevVenIDARC1882:
|
||||
case PCIDevVenIDARC1213:
|
||||
case PCIDevVenIDARC1223:
|
||||
type = "SAS 6G";
|
||||
break;
|
||||
default:
|
||||
|
@ -52,6 +52,7 @@
|
||||
#define ARCMSR_MAX_ADAPTER 4
|
||||
#define ARCMSR_RELEASE_SIMQ_LEVEL 230
|
||||
#define ARCMSR_MAX_HBB_POSTQUEUE 264 /* (ARCMSR_MAX_OUTSTANDING_CMD+8) */
|
||||
#define ARCMSR_TIMEOUT_DELAY 60 /* in sec */
|
||||
/*
|
||||
*********************************************************************
|
||||
*/
|
||||
@ -97,6 +98,13 @@
|
||||
#define PCI_DEVICE_ID_ARECA_1681 0x1681 /* Device ID */
|
||||
#define PCI_DEVICE_ID_ARECA_1880 0x1880 /* Device ID */
|
||||
|
||||
#define ARECA_SUB_DEV_ID_1880 0x1880 /* Subsystem Device ID */
|
||||
#define ARECA_SUB_DEV_ID_1882 0x1882 /* Subsystem Device ID */
|
||||
#define ARECA_SUB_DEV_ID_1212 0x1212 /* Subsystem Device ID */
|
||||
#define ARECA_SUB_DEV_ID_1213 0x1213 /* Subsystem Device ID */
|
||||
#define ARECA_SUB_DEV_ID_1222 0x1222 /* Subsystem Device ID */
|
||||
#define ARECA_SUB_DEV_ID_1223 0x1223 /* Subsystem Device ID */
|
||||
|
||||
#define PCIDevVenIDARC1110 0x111017D3 /* Vendor Device ID */
|
||||
#define PCIDevVenIDARC1120 0x112017D3 /* Vendor Device ID */
|
||||
#define PCIDevVenIDARC1130 0x113017D3 /* Vendor Device ID */
|
||||
@ -106,8 +114,10 @@
|
||||
#define PCIDevVenIDARC1201 0x120117D3 /* Vendor Device ID */
|
||||
#define PCIDevVenIDARC1210 0x121017D3 /* Vendor Device ID */
|
||||
#define PCIDevVenIDARC1212 0x121217D3 /* Vendor Device ID */
|
||||
#define PCIDevVenIDARC1213 0x121317D3 /* Vendor Device ID */
|
||||
#define PCIDevVenIDARC1220 0x122017D3 /* Vendor Device ID */
|
||||
#define PCIDevVenIDARC1222 0x122217D3 /* Vendor Device ID */
|
||||
#define PCIDevVenIDARC1223 0x122317D3 /* Vendor Device ID */
|
||||
#define PCIDevVenIDARC1230 0x123017D3 /* Vendor Device ID */
|
||||
#define PCIDevVenIDARC1231 0x123117D3 /* Vendor Device ID */
|
||||
#define PCIDevVenIDARC1260 0x126017D3 /* Vendor Device ID */
|
||||
@ -119,6 +129,7 @@
|
||||
#define PCIDevVenIDARC1680 0x168017D3 /* Vendor Device ID */
|
||||
#define PCIDevVenIDARC1681 0x168117D3 /* Vendor Device ID */
|
||||
#define PCIDevVenIDARC1880 0x188017D3 /* Vendor Device ID */
|
||||
#define PCIDevVenIDARC1882 0x188217D3 /* Vendor Device ID */
|
||||
|
||||
#ifndef PCIR_BARS
|
||||
#define PCIR_BARS 0x10
|
||||
@ -830,6 +841,8 @@ struct AdapterControlBlock {
|
||||
u_int32_t pktRequestCount;
|
||||
u_int32_t pktReturnCount;
|
||||
#endif
|
||||
u_int32_t vendor_device_id;
|
||||
u_int32_t adapter_bus_speed;
|
||||
};/* HW_DEVICE_EXTENSION */
|
||||
/* acb_flags */
|
||||
#define ACB_F_SCSISTOPADAPTER 0x0001
|
||||
@ -848,6 +861,10 @@ struct AdapterControlBlock {
|
||||
/* devstate */
|
||||
#define ARECA_RAID_GONE 0x55
|
||||
#define ARECA_RAID_GOOD 0xaa
|
||||
/* adapter_bus_speed */
|
||||
#define ACB_BUS_SPEED_3G 0
|
||||
#define ACB_BUS_SPEED_6G 1
|
||||
#define ACB_BUS_SPEED_12G 2
|
||||
/*
|
||||
*********************************************************************
|
||||
** Message Unit structure
|
||||
|
Loading…
Reference in New Issue
Block a user