**************************************************************************
** 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
******************************************************************************************
-* $FreeBSD: src/sys/dev/arcmsr/arcmsr.c,v 1.38 2011/08/16 08:41:37 delphij Exp $
+* $FreeBSD: src/sys/dev/arcmsr/arcmsr.c,v 1.43 2012/09/04 05:15:54 delphij Exp $
*/
#if 0
#define ARCMSR_DEBUG1 1
#define arcmsr_callout_init(a) callout_init_mp(a);
-#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/raid/arcmsr/arcmsr.h>
#define SRB_SIZE ((sizeof(struct CommandControlBlock)+0x1f) & 0xffe0)
#define ARCMSR_SRBS_POOL_SIZE (SRB_SIZE * ARCMSR_MAX_FREESRB_NUM)
if(acb==NULL) {
return ENXIO;
}
- return 0;
+ return (0);
}
/*
if(acb==NULL) {
return ENXIO;
}
- return(arcmsr_iop_ioctlcmd(acb, ioctl_cmd, arg));
+ return (arcmsr_iop_ioctlcmd(acb, ioctl_cmd, arg));
}
/*
}
break;
}
- return(intmask_org);
+ return (intmask_org);
}
/*
**********************************************************************
}
break;
}
- return;
}
/*
**********************************************************************
UDELAY(10000);
}/*max 1 seconds*/
}while(Retries++ < 20);/*max 20 sec*/
- return FALSE;
+ return (FALSE);
}
/*
**********************************************************************
UDELAY(10000);
}/*max 1 seconds*/
}while(Retries++ < 20);/*max 20 sec*/
- return FALSE;
+ return (FALSE);
}
/*
**********************************************************************
UDELAY(10000);
}/*max 1 seconds*/
}while(Retries++ < 20);/*max 20 sec*/
- return FALSE;
+ return (FALSE);
}
/*
************************************************************************
retry_count--;
}
}while(retry_count!=0);
- return;
}
/*
************************************************************************
retry_count--;
}
}while(retry_count!=0);
- return;
}
/*
************************************************************************
retry_count--;
}
}while(retry_count!=0);
- return;
}
/*
************************************************************************
}
break;
}
- return;
}
/*
*******************************************************************************
if((target_id > ARCMSR_MAX_TARGETID) || (target_lun > ARCMSR_MAX_TARGETLUN)) {
break;
}
- kprintf("%s:scsi id=%d lun=%d device lost \n", device_get_name(acb->pci_dev), target_id, target_lun);
+ // kprintf("%s:scsi id=%d lun=%d device lost \n", device_get_name(acb->pci_dev), target_id, target_lun);
break;
default:
break;
((u_int8_t *)&pccb->csio.sense_data)[0] = (0x1 << 7 | 0x70); /* Valid,ErrorCode */
pccb->ccb_h.status |= CAM_AUTOSNS_VALID;
}
- return;
}
/*
*********************************************************************
if(!arcmsr_hba_wait_msgint_ready(acb)) {
kprintf("arcmsr%d: wait 'abort all outstanding command' timeout \n", acb->pci_unit);
}
- return;
}
/*
*********************************************************************
if(!arcmsr_hbb_wait_msgint_ready(acb)) {
kprintf("arcmsr%d: wait 'abort all outstanding command' timeout \n", acb->pci_unit);
}
- return;
}
/*
*********************************************************************
if(!arcmsr_hbc_wait_msgint_ready(acb)) {
kprintf("arcmsr%d: wait 'abort all outstanding command' timeout \n", acb->pci_unit);
}
- return;
}
/*
*********************************************************************
}
break;
}
- return;
}
/*
**************************************************************************
break;
}
}
- return;
}
/*
**************************************************************************
return;
}
arcmsr_report_srb_state(acb, srb, error);
- return;
}
/*
**************************************************************************
}
break;
}
- return;
}
/*
****************************************************************************
acb->pktRequestCount = 0;
acb->pktReturnCount = 0;
#endif
- return;
}
/*
**********************************************************************
} else {
arcmsr_cdb->DataLength = 0;
}
- srb->arc_cdb_size=arccdbsize;
- return;
+ srb->arc_cdb_size=arccdbsize;
}
/*
**************************************************************************
}
break;
}
- return;
}
/*
************************************************************************
CHIP_REG_WRITE32(HBC_MessageUnit, 0, inbound_doorbell, ARCMSR_HBCMU_DRV2IOP_DATA_READ_OK);
}
}
- return;
}
/*
**************************************************************************
*/
arcmsr_iop_message_wrote(acb);
}
- return;
}
/*
************************************************************************
kprintf( "arcmsr%d: wait 'stop adapter background rebulid' timeout \n"
, acb->pci_unit);
}
- return;
}
/*
************************************************************************
if(!arcmsr_hbc_wait_msgint_ready(acb)) {
kprintf("arcmsr%d: wait 'stop adapter background rebulid' timeout \n", acb->pci_unit);
}
- return;
}
/*
************************************************************************
}
break;
}
- return;
}
/*
************************************************************************
arcmsr_interrupt(acb);
if( mutex == 0 )
ARCMSR_LOCK_RELEASE(&acb->qbuffer_lock);
- return;
}
/*
**************************************************************************
} else {
acb->acb_flags|=ACB_F_IOPDATA_OVERFLOW;
}
- return;
}
/*
**************************************************************************
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)
ccb.ccb_h.cbfcnp = arcmsr_rescanLun_cb;
ccb.crcn.flags = CAM_FLAG_NONE;
xpt_action(&ccb);
- return;
}
}
break;
}
+
if(acb->acb_flags & ACB_F_BUS_HANG_ON)
{
acb->acb_flags &= ~ACB_F_BUS_HANG_ON;
if(outbound_doorbell & ARCMSR_OUTBOUND_IOP331_DATA_READ_OK) {
arcmsr_iop2drv_data_read_handle(acb);
}
- return;
}
/*
**************************************************************************
if(outbound_doorbell & ARCMSR_HBCMU_IOP2DRV_MESSAGE_CMD_DONE) {
arcmsr_hbc_message_isr(acb); /* messenger of "driver to iop commands" */
}
- return;
}
/*
**************************************************************************
error=(flag_srb & ARCMSR_SRBREPLY_FLAG_ERROR_MODE0)?TRUE:FALSE;
arcmsr_drain_donequeue(acb, flag_srb, error);
} /*drain reply FIFO*/
- return;
}
/*
**************************************************************************
error=(flag_srb & ARCMSR_SRBREPLY_FLAG_ERROR_MODE0)?TRUE:FALSE;
arcmsr_drain_donequeue(acb, flag_srb, error);
} /*drain reply FIFO*/
- return;
}
/*
**************************************************************************
}
throttling++;
} /*drain reply FIFO*/
- return;
}
/*
**********************************************************************
*/
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;
}
/*
**********************************************************************
if(outbound_doorbell & ARCMSR_IOP2DRV_MESSAGE_CMD_DONE) {
arcmsr_hbb_message_isr(acb);
}
- return;
}
/*
**********************************************************************
if(host_interrupt_status & ARCMSR_HBCMU_OUTBOUND_POSTQUEUE_ISR) {
arcmsr_hbc_postqueue_isr(acb);
}
- return;
}
/*
******************************************************************************
" unknow adapter type =%d\n", acb->pci_unit, acb->adapter_type);
break;
}
- return;
}
/*
**********************************************************************
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:
break;
}
ARCMSR_LOCK_RELEASE(&acb->qbuffer_lock);
- return retvalue;
+ return (retvalue);
}
/*
**************************************************************************
retvalue = ARCMSR_MESSAGE_FAIL;
}
message_out:
- return retvalue;
+ return (retvalue);
}
/*
*********************************************************************
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;
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;
}
/*
*****************************************************************************************
}
arcmsr_iop_reset(acb);
acb->acb_flags &= ~ACB_F_BUS_RESET;
- return;
}
/*
**************************************************************************
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);
{
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 |
xpt_done(pccb);
break;
}
- return;
}
/*
**********************************************************************
if(!arcmsr_hba_wait_msgint_ready(acb)) {
kprintf("arcmsr%d: wait 'start adapter background rebulid' timeout \n", acb->pci_unit);
}
- return;
}
/*
**********************************************************************
if(!arcmsr_hbb_wait_msgint_ready(acb)) {
kprintf( "arcmsr%d: wait 'start adapter background rebulid' timeout \n", acb->pci_unit);
}
- return;
}
/*
**********************************************************************
if(!arcmsr_hbc_wait_msgint_ready(acb)) {
kprintf("arcmsr%d: wait 'start adapter background rebulid' timeout \n", acb->pci_unit);
}
- return;
}
/*
**********************************************************************
arcmsr_start_hbc_bgrb(acb);
break;
}
- return;
}
/*
**********************************************************************
}
arcmsr_report_srb_state(acb, srb, error);
} /*drain reply FIFO*/
- return;
}
/*
**********************************************************************
}
arcmsr_report_srb_state(acb, srb, error);
} /*drain reply FIFO*/
- return;
}
/*
**********************************************************************
}
arcmsr_report_srb_state(acb, srb, error);
} /*drain reply FIFO*/
- return;
}
/*
**********************************************************************
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;
}
/*
**********************************************************************
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;
}
/*
**********************************************************************
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;
}
/*
**********************************************************************
}
break;
}
- return;
}
/*
**********************************************************************
}
break;
}
- return;
}
/*
**********************************************************************
}
break;
}
- return;
}
/*
************************************************************************
}
break;
}
- return TRUE;
+ return (TRUE);
}
/*
************************************************************************
}
break;
}
- return;
}
/*
**********************************************************************
/* enable outbound Post Queue, outbound doorbell Interrupt */
arcmsr_enable_allintr(acb, intmask_org);
acb->acb_flags |=ACB_F_IOP_INITED;
- return;
}
/*
**********************************************************************
srb_tmp = (struct CommandControlBlock *)((unsigned long)srb_tmp+SRB_SIZE);
}
acb->vir2phy_offset=(unsigned long)srb_tmp-srb_phyaddr;
- return;
}
/*
************************************************************************
bus_dma_tag_destroy(acb->srb_dmat);
bus_dma_tag_destroy(acb->dm_segs_dmat);
bus_dma_tag_destroy(acb->parent_dmat);
- return;
}
/*
************************************************************************
struct AdapterControlBlock *acb=device_get_softc(dev);
u_int16_t pci_command;
int i, j,max_coherent_size;
+ u_int32_t vendor_dev_id;
- switch (pci_get_devid(dev)) {
- case PCIDevVenIDARC1880: {
+ 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;
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;
(void)make_dev_alias(acb->ioctl_dev, "arc%d", unit);
arcmsr_callout_init(&acb->devmap_callout);
callout_reset(&acb->devmap_callout, 60 * hz, arcmsr_polling_devmap, acb);
- return 0;
+ return (0);
}
/*
type = "SAS 3G";
break;
case PCIDevVenIDARC1880:
+ case PCIDevVenIDARC1882:
+ case PCIDevVenIDARC1213:
+ case PCIDevVenIDARC1223:
type = "SAS 6G";
arcmsr_msi_enable = 0;
break;
return(ENXIO);
ksprintf(buf, "Areca %s Host Adapter RAID Controller%s", type, raid6 ? " (RAID6 capable)" : "");
device_set_desc_copy(dev, buf);
- return 0;
+ return (BUS_PROBE_DEFAULT);
}
/*
************************************************************************