Lines Matching refs:acb

155 static struct CommandControlBlock *arcmsr_get_freesrb(struct AdapterControlBlock *acb);
160 static u_int32_t arcmsr_iop_ioctlcmd(struct AdapterControlBlock *acb, u_int32_t ioctl_cmd, caddr_t …
161 static void arcmsr_iop_parking(struct AdapterControlBlock *acb);
163 static void arcmsr_interrupt(struct AdapterControlBlock *acb);
164 static void arcmsr_polling_srbdone(struct AdapterControlBlock *acb, struct CommandControlBlock *pol…
165 static void arcmsr_free_resource(struct AdapterControlBlock *acb);
166 static void arcmsr_bus_reset(struct AdapterControlBlock *acb);
167 static void arcmsr_stop_adapter_bgrb(struct AdapterControlBlock *acb);
168 static void arcmsr_start_adapter_bgrb(struct AdapterControlBlock *acb);
169 static void arcmsr_iop_init(struct AdapterControlBlock *acb);
170 static void arcmsr_flush_adapter_cache(struct AdapterControlBlock *acb);
171 static u_int32_t arcmsr_Read_iop_rqbuffer_data(struct AdapterControlBlock *acb, struct QBUFFER *prb…
172 static void arcmsr_Write_data_2iop_wqbuffer(struct AdapterControlBlock *acb);
173 static void arcmsr_abort_allcmd(struct AdapterControlBlock *acb);
175 static void arcmsr_iop_reset(struct AdapterControlBlock *acb);
178 static int arcmsr_iop_message_xfer(struct AdapterControlBlock *acb, union ccb *pccb);
184 static void arcmsr_hbd_postqueue_isr(struct AdapterControlBlock *acb);
185 static void arcmsr_hbe_postqueue_isr(struct AdapterControlBlock *acb);
186 static void arcmsr_hbf_postqueue_isr(struct AdapterControlBlock *acb);
187 static void arcmsr_teardown_intr(device_t dev, struct AdapterControlBlock *acb);
189 static void arcmsr_dump_data(struct AdapterControlBlock *acb);
259 struct AdapterControlBlock *acb = dev->si_drv1; in arcmsr_ioctl() local
261 return (arcmsr_iop_ioctlcmd(acb, ioctl_cmd, arg)); in arcmsr_ioctl()
267 static u_int32_t arcmsr_disable_allintr( struct AdapterControlBlock *acb) in arcmsr_disable_allintr() argument
271 switch (acb->adapter_type) { in arcmsr_disable_allintr()
279 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_disable_allintr()
312 static void arcmsr_enable_allintr( struct AdapterControlBlock *acb, u_int32_t intmask_org) in arcmsr_enable_allintr() argument
316 switch (acb->adapter_type) { in arcmsr_enable_allintr()
321 acb->outbound_int_enable = ~(intmask_org & mask) & 0x000000ff; in arcmsr_enable_allintr()
325 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_enable_allintr()
329 acb->outbound_int_enable = (intmask_org | mask) & 0x0000000f; in arcmsr_enable_allintr()
336 acb->outbound_int_enable = ~(intmask_org & mask) & 0x0000000f; in arcmsr_enable_allintr()
344 acb->outbound_int_enable = mask; in arcmsr_enable_allintr()
352 acb->outbound_int_enable = ~(intmask_org & mask) & 0x0000000f; in arcmsr_enable_allintr()
361 static u_int8_t arcmsr_hba_wait_msgint_ready(struct AdapterControlBlock *acb) in arcmsr_hba_wait_msgint_ready() argument
381 static u_int8_t arcmsr_hbb_wait_msgint_ready(struct AdapterControlBlock *acb) in arcmsr_hbb_wait_msgint_ready() argument
385 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_hbb_wait_msgint_ready()
403 static u_int8_t arcmsr_hbc_wait_msgint_ready(struct AdapterControlBlock *acb) in arcmsr_hbc_wait_msgint_ready() argument
423 static u_int8_t arcmsr_hbd_wait_msgint_ready(struct AdapterControlBlock *acb) in arcmsr_hbd_wait_msgint_ready() argument
443 static u_int8_t arcmsr_hbe_wait_msgint_ready(struct AdapterControlBlock *acb) in arcmsr_hbe_wait_msgint_ready() argument
451 if((read_doorbell ^ acb->in_doorbell) & ARCMSR_HBEMU_IOP2DRV_MESSAGE_CMD_DONE) { in arcmsr_hbe_wait_msgint_ready()
453 acb->in_doorbell = read_doorbell; in arcmsr_hbe_wait_msgint_ready()
465 static void arcmsr_flush_hba_cache(struct AdapterControlBlock *acb) in arcmsr_flush_hba_cache() argument
471 if(arcmsr_hba_wait_msgint_ready(acb)) { in arcmsr_flush_hba_cache()
482 static void arcmsr_flush_hbb_cache(struct AdapterControlBlock *acb) in arcmsr_flush_hbb_cache() argument
485 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_flush_hbb_cache()
489 if(arcmsr_hbb_wait_msgint_ready(acb)) { in arcmsr_flush_hbb_cache()
500 static void arcmsr_flush_hbc_cache(struct AdapterControlBlock *acb) in arcmsr_flush_hbc_cache() argument
507 if(arcmsr_hbc_wait_msgint_ready(acb)) { in arcmsr_flush_hbc_cache()
518 static void arcmsr_flush_hbd_cache(struct AdapterControlBlock *acb) in arcmsr_flush_hbd_cache() argument
524 if(arcmsr_hbd_wait_msgint_ready(acb)) { in arcmsr_flush_hbd_cache()
535 static void arcmsr_flush_hbe_cache(struct AdapterControlBlock *acb) in arcmsr_flush_hbe_cache() argument
540 acb->out_doorbell ^= ARCMSR_HBEMU_DRV2IOP_MESSAGE_CMD_DONE; in arcmsr_flush_hbe_cache()
541 CHIP_REG_WRITE32(HBE_MessageUnit, 0, iobound_doorbell, acb->out_doorbell); in arcmsr_flush_hbe_cache()
543 if(arcmsr_hbe_wait_msgint_ready(acb)) { in arcmsr_flush_hbe_cache()
554 static void arcmsr_flush_adapter_cache(struct AdapterControlBlock *acb) in arcmsr_flush_adapter_cache() argument
556 switch (acb->adapter_type) { in arcmsr_flush_adapter_cache()
558 arcmsr_flush_hba_cache(acb); in arcmsr_flush_adapter_cache()
562 arcmsr_flush_hbb_cache(acb); in arcmsr_flush_adapter_cache()
566 arcmsr_flush_hbc_cache(acb); in arcmsr_flush_adapter_cache()
570 arcmsr_flush_hbd_cache(acb); in arcmsr_flush_adapter_cache()
575 arcmsr_flush_hbe_cache(acb); in arcmsr_flush_adapter_cache()
586 struct AdapterControlBlock *acb = device_get_softc(dev); in arcmsr_suspend() local
589 arcmsr_iop_parking(acb); in arcmsr_suspend()
591 arcmsr_disable_allintr(acb); in arcmsr_suspend()
600 struct AdapterControlBlock *acb = device_get_softc(dev); in arcmsr_resume() local
602 arcmsr_iop_init(acb); in arcmsr_resume()
647 static void arcmsr_abort_hba_allcmd(struct AdapterControlBlock *acb) in arcmsr_abort_hba_allcmd() argument
650 if(!arcmsr_hba_wait_msgint_ready(acb)) { in arcmsr_abort_hba_allcmd()
651 printf("arcmsr%d: wait 'abort all outstanding command' timeout \n", acb->pci_unit); in arcmsr_abort_hba_allcmd()
658 static void arcmsr_abort_hbb_allcmd(struct AdapterControlBlock *acb) in arcmsr_abort_hbb_allcmd() argument
660 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_abort_hbb_allcmd()
662 if(!arcmsr_hbb_wait_msgint_ready(acb)) { in arcmsr_abort_hbb_allcmd()
663 printf("arcmsr%d: wait 'abort all outstanding command' timeout \n", acb->pci_unit); in arcmsr_abort_hbb_allcmd()
670 static void arcmsr_abort_hbc_allcmd(struct AdapterControlBlock *acb) in arcmsr_abort_hbc_allcmd() argument
674 if(!arcmsr_hbc_wait_msgint_ready(acb)) { in arcmsr_abort_hbc_allcmd()
675 printf("arcmsr%d: wait 'abort all outstanding command' timeout \n", acb->pci_unit); in arcmsr_abort_hbc_allcmd()
682 static void arcmsr_abort_hbd_allcmd(struct AdapterControlBlock *acb) in arcmsr_abort_hbd_allcmd() argument
685 if(!arcmsr_hbd_wait_msgint_ready(acb)) { in arcmsr_abort_hbd_allcmd()
686 printf("arcmsr%d: wait 'abort all outstanding command' timeout \n", acb->pci_unit); in arcmsr_abort_hbd_allcmd()
693 static void arcmsr_abort_hbe_allcmd(struct AdapterControlBlock *acb) in arcmsr_abort_hbe_allcmd() argument
696 acb->out_doorbell ^= ARCMSR_HBEMU_DRV2IOP_MESSAGE_CMD_DONE; in arcmsr_abort_hbe_allcmd()
697 CHIP_REG_WRITE32(HBE_MessageUnit, 0, iobound_doorbell, acb->out_doorbell); in arcmsr_abort_hbe_allcmd()
698 if(!arcmsr_hbe_wait_msgint_ready(acb)) { in arcmsr_abort_hbe_allcmd()
699 printf("arcmsr%d: wait 'abort all outstanding command' timeout \n", acb->pci_unit); in arcmsr_abort_hbe_allcmd()
706 static void arcmsr_abort_allcmd(struct AdapterControlBlock *acb) in arcmsr_abort_allcmd() argument
708 switch (acb->adapter_type) { in arcmsr_abort_allcmd()
710 arcmsr_abort_hba_allcmd(acb); in arcmsr_abort_allcmd()
714 arcmsr_abort_hbb_allcmd(acb); in arcmsr_abort_allcmd()
718 arcmsr_abort_hbc_allcmd(acb); in arcmsr_abort_allcmd()
722 arcmsr_abort_hbd_allcmd(acb); in arcmsr_abort_allcmd()
727 arcmsr_abort_hbe_allcmd(acb); in arcmsr_abort_allcmd()
738 struct AdapterControlBlock *acb = srb->acb; in arcmsr_srb_complete() local
751 bus_dmamap_sync(acb->dm_segs_dmat, srb->dm_segs_dmamap, op); in arcmsr_srb_complete()
752 bus_dmamap_unload(acb->dm_segs_dmat, srb->dm_segs_dmamap); in arcmsr_srb_complete()
755 atomic_subtract_int(&acb->srboutstandingcount, 1); in arcmsr_srb_complete()
756 if((acb->acb_flags & ACB_F_CAM_DEV_QFRZN) && ( in arcmsr_srb_complete()
757 acb->srboutstandingcount < (acb->maxOutstanding -10))) { in arcmsr_srb_complete()
758 acb->acb_flags &= ~ACB_F_CAM_DEV_QFRZN; in arcmsr_srb_complete()
764 acb->pktReturnCount++; in arcmsr_srb_complete()
771 static void arcmsr_report_srb_state(struct AdapterControlBlock *acb, struct CommandControlBlock *sr… in arcmsr_report_srb_state() argument
778 if(acb->devstate[target][lun] == ARECA_RAID_GONE) { in arcmsr_report_srb_state()
779 acb->devstate[target][lun] = ARECA_RAID_GOOD; in arcmsr_report_srb_state()
786 if(acb->devstate[target][lun] == ARECA_RAID_GOOD) { in arcmsr_report_srb_state()
787 …printf( "arcmsr%d: Target=%x, Lun=%x, selection timeout, raid volume was lost\n", acb->pci_unit, t… in arcmsr_report_srb_state()
789 acb->devstate[target][lun] = ARECA_RAID_GONE; in arcmsr_report_srb_state()
796 acb->devstate[target][lun] = ARECA_RAID_GONE; in arcmsr_report_srb_state()
802 acb->devstate[target][lun] = ARECA_RAID_GOOD; in arcmsr_report_srb_state()
809 , acb->pci_unit, target, lun ,srb->arcmsr_cdb.DeviceStatus); in arcmsr_report_srb_state()
810 acb->devstate[target][lun] = ARECA_RAID_GONE; in arcmsr_report_srb_state()
822 static void arcmsr_drain_donequeue(struct AdapterControlBlock *acb, u_int32_t flag_srb, u_int16_t e… in arcmsr_drain_donequeue() argument
827 switch (acb->adapter_type) { in arcmsr_drain_donequeue()
830 …srb = (struct CommandControlBlock *)(acb->vir2phy_offset+(flag_srb << 5));/*frame must be 32 bytes… in arcmsr_drain_donequeue()
834 …srb = (struct CommandControlBlock *)(acb->vir2phy_offset+(flag_srb & 0xFFFFFFE0)); /*frame must be… in arcmsr_drain_donequeue()
838 srb = acb->psrb_pool[flag_srb]; in arcmsr_drain_donequeue()
841 …srb = (struct CommandControlBlock *)(acb->vir2phy_offset+(flag_srb << 5));/*frame must be 32 bytes… in arcmsr_drain_donequeue()
844 if((srb->acb != acb) || (srb->srb_state != ARCMSR_SRB_START)) { in arcmsr_drain_donequeue()
847 printf("arcmsr%d: srb='%p' return srb has been timeouted\n", acb->pci_unit, srb); in arcmsr_drain_donequeue()
852 acb->pci_unit, srb, srb->srb_state, acb->srboutstandingcount); in arcmsr_drain_donequeue()
855 arcmsr_report_srb_state(acb, srb, error); in arcmsr_drain_donequeue()
864 struct AdapterControlBlock *acb; in arcmsr_srb_timeout() local
870 acb = srb->acb; in arcmsr_srb_timeout()
871 ARCMSR_LOCK_ACQUIRE(&acb->isr_lock); in arcmsr_srb_timeout()
879 acb->pci_unit, target, lun, cmd, srb); in arcmsr_srb_timeout()
881 ARCMSR_LOCK_RELEASE(&acb->isr_lock); in arcmsr_srb_timeout()
883 arcmsr_dump_data(acb); in arcmsr_srb_timeout()
891 static void arcmsr_done4abort_postqueue(struct AdapterControlBlock *acb) in arcmsr_done4abort_postqueue() argument
897 switch (acb->adapter_type) { in arcmsr_done4abort_postqueue()
902 …outbound_intstatus = CHIP_REG_READ32(HBA_MessageUnit, 0, outbound_intstatus) & acb->outbound_int_e… in arcmsr_done4abort_postqueue()
906 arcmsr_drain_donequeue(acb, flag_srb, error); in arcmsr_done4abort_postqueue()
911 struct HBB_MessageUnit *phbbmu=(struct HBB_MessageUnit *)acb->pmu; in arcmsr_done4abort_postqueue()
919 arcmsr_drain_donequeue(acb, flag_srb, error); in arcmsr_done4abort_postqueue()
931 arcmsr_drain_donequeue(acb, flag_srb, error); in arcmsr_done4abort_postqueue()
936 arcmsr_hbd_postqueue_isr(acb); in arcmsr_done4abort_postqueue()
939 arcmsr_hbe_postqueue_isr(acb); in arcmsr_done4abort_postqueue()
942 arcmsr_hbf_postqueue_isr(acb); in arcmsr_done4abort_postqueue()
950 static void arcmsr_iop_reset(struct AdapterControlBlock *acb) in arcmsr_iop_reset() argument
956 if(acb->srboutstandingcount>0) { in arcmsr_iop_reset()
958 intmask_org = arcmsr_disable_allintr(acb); in arcmsr_iop_reset()
960 arcmsr_done4abort_postqueue(acb); in arcmsr_iop_reset()
962 arcmsr_abort_allcmd(acb); in arcmsr_iop_reset()
964 srb = acb->psrb_pool[i]; in arcmsr_iop_reset()
970 , acb->pci_unit, srb->pccb->ccb_h.target_id in arcmsr_iop_reset()
975 arcmsr_enable_allintr(acb, intmask_org); in arcmsr_iop_reset()
977 acb->srboutstandingcount = 0; in arcmsr_iop_reset()
978 acb->workingsrb_doneindex = 0; in arcmsr_iop_reset()
979 acb->workingsrb_startindex = 0; in arcmsr_iop_reset()
980 acb->pktRequestCount = 0; in arcmsr_iop_reset()
981 acb->pktReturnCount = 0; in arcmsr_iop_reset()
1005 struct AdapterControlBlock *acb = srb->acb; in arcmsr_build_srb() local
1016 bus_dmamap_sync(acb->dm_segs_dmat, srb->dm_segs_dmamap, op); in arcmsr_build_srb()
1074 static void arcmsr_post_srb(struct AdapterControlBlock *acb, struct CommandControlBlock *srb) in arcmsr_post_srb() argument
1079 …bus_dmamap_sync(acb->srb_dmat, acb->srb_dmamap, (srb->srb_flags & SRB_FLAG_WRITE) ? BUS_DMASYNC_PO… in arcmsr_post_srb()
1080 atomic_add_int(&acb->srboutstandingcount, 1); in arcmsr_post_srb()
1083 switch (acb->adapter_type) { in arcmsr_post_srb()
1093 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_post_srb()
1115 cdb_phyaddr_hi32 = acb->srb_phyaddr.B.phyadd_high; in arcmsr_post_srb()
1128 struct HBD_MessageUnit0 *phbdmu = (struct HBD_MessageUnit0 *)acb->pmu; in arcmsr_post_srb()
1133 ARCMSR_LOCK_ACQUIRE(&acb->postDone_lock); in arcmsr_post_srb()
1152 ARCMSR_LOCK_RELEASE(&acb->postDone_lock); in arcmsr_post_srb()
1186 static struct QBUFFER *arcmsr_get_iop_rqbuffer( struct AdapterControlBlock *acb) in arcmsr_get_iop_rqbuffer() argument
1190 switch (acb->adapter_type) { in arcmsr_get_iop_rqbuffer()
1192 struct HBA_MessageUnit *phbamu = (struct HBA_MessageUnit *)acb->pmu; in arcmsr_get_iop_rqbuffer()
1198 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_get_iop_rqbuffer()
1204 struct HBC_MessageUnit *phbcmu = (struct HBC_MessageUnit *)acb->pmu; in arcmsr_get_iop_rqbuffer()
1210 struct HBD_MessageUnit0 *phbdmu = (struct HBD_MessageUnit0 *)acb->pmu; in arcmsr_get_iop_rqbuffer()
1216 struct HBE_MessageUnit *phbcmu = (struct HBE_MessageUnit *)acb->pmu; in arcmsr_get_iop_rqbuffer()
1222 qbuffer = (struct QBUFFER *)acb->message_rbuffer; in arcmsr_get_iop_rqbuffer()
1231 static struct QBUFFER *arcmsr_get_iop_wqbuffer( struct AdapterControlBlock *acb) in arcmsr_get_iop_wqbuffer() argument
1235 switch (acb->adapter_type) { in arcmsr_get_iop_wqbuffer()
1237 struct HBA_MessageUnit *phbamu = (struct HBA_MessageUnit *)acb->pmu; in arcmsr_get_iop_wqbuffer()
1243 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_get_iop_wqbuffer()
1249 struct HBC_MessageUnit *phbcmu = (struct HBC_MessageUnit *)acb->pmu; in arcmsr_get_iop_wqbuffer()
1255 struct HBD_MessageUnit0 *phbdmu = (struct HBD_MessageUnit0 *)acb->pmu; in arcmsr_get_iop_wqbuffer()
1261 struct HBE_MessageUnit *phbcmu = (struct HBE_MessageUnit *)acb->pmu; in arcmsr_get_iop_wqbuffer()
1267 qbuffer = (struct QBUFFER *)acb->message_wbuffer; in arcmsr_get_iop_wqbuffer()
1276 static void arcmsr_iop_message_read(struct AdapterControlBlock *acb) in arcmsr_iop_message_read() argument
1278 switch (acb->adapter_type) { in arcmsr_iop_message_read()
1285 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_iop_message_read()
1303 acb->out_doorbell ^= ARCMSR_HBEMU_DRV2IOP_DATA_READ_OK; in arcmsr_iop_message_read()
1304 CHIP_REG_WRITE32(HBE_MessageUnit, 0, iobound_doorbell, acb->out_doorbell); in arcmsr_iop_message_read()
1313 static void arcmsr_iop_message_wrote(struct AdapterControlBlock *acb) in arcmsr_iop_message_wrote() argument
1315 switch (acb->adapter_type) { in arcmsr_iop_message_wrote()
1325 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_iop_message_wrote()
1355 acb->out_doorbell ^= ARCMSR_HBEMU_DRV2IOP_DATA_WRITE_OK; in arcmsr_iop_message_wrote()
1356 CHIP_REG_WRITE32(HBE_MessageUnit, 0, iobound_doorbell, acb->out_doorbell); in arcmsr_iop_message_wrote()
1365 static void arcmsr_stop_hba_bgrb(struct AdapterControlBlock *acb) in arcmsr_stop_hba_bgrb() argument
1367 acb->acb_flags &= ~ACB_F_MSG_START_BGRB; in arcmsr_stop_hba_bgrb()
1370 if(!arcmsr_hba_wait_msgint_ready(acb)) { in arcmsr_stop_hba_bgrb()
1372 , acb->pci_unit); in arcmsr_stop_hba_bgrb()
1379 static void arcmsr_stop_hbb_bgrb(struct AdapterControlBlock *acb) in arcmsr_stop_hbb_bgrb() argument
1381 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_stop_hbb_bgrb()
1382 acb->acb_flags &= ~ACB_F_MSG_START_BGRB; in arcmsr_stop_hbb_bgrb()
1384 if(!arcmsr_hbb_wait_msgint_ready(acb)) { in arcmsr_stop_hbb_bgrb()
1386 , acb->pci_unit); in arcmsr_stop_hbb_bgrb()
1393 static void arcmsr_stop_hbc_bgrb(struct AdapterControlBlock *acb) in arcmsr_stop_hbc_bgrb() argument
1395 acb->acb_flags &= ~ACB_F_MSG_START_BGRB; in arcmsr_stop_hbc_bgrb()
1398 if(!arcmsr_hbc_wait_msgint_ready(acb)) { in arcmsr_stop_hbc_bgrb()
1399 printf("arcmsr%d: wait 'stop adapter background rebuild' timeout \n", acb->pci_unit); in arcmsr_stop_hbc_bgrb()
1406 static void arcmsr_stop_hbd_bgrb(struct AdapterControlBlock *acb) in arcmsr_stop_hbd_bgrb() argument
1408 acb->acb_flags &= ~ACB_F_MSG_START_BGRB; in arcmsr_stop_hbd_bgrb()
1410 if(!arcmsr_hbd_wait_msgint_ready(acb)) { in arcmsr_stop_hbd_bgrb()
1411 printf("arcmsr%d: wait 'stop adapter background rebuild' timeout \n", acb->pci_unit); in arcmsr_stop_hbd_bgrb()
1418 static void arcmsr_stop_hbe_bgrb(struct AdapterControlBlock *acb) in arcmsr_stop_hbe_bgrb() argument
1420 acb->acb_flags &= ~ACB_F_MSG_START_BGRB; in arcmsr_stop_hbe_bgrb()
1422 acb->out_doorbell ^= ARCMSR_HBEMU_DRV2IOP_MESSAGE_CMD_DONE; in arcmsr_stop_hbe_bgrb()
1423 CHIP_REG_WRITE32(HBE_MessageUnit, 0, iobound_doorbell, acb->out_doorbell); in arcmsr_stop_hbe_bgrb()
1424 if(!arcmsr_hbe_wait_msgint_ready(acb)) { in arcmsr_stop_hbe_bgrb()
1425 printf("arcmsr%d: wait 'stop adapter background rebuild' timeout \n", acb->pci_unit); in arcmsr_stop_hbe_bgrb()
1432 static void arcmsr_stop_adapter_bgrb(struct AdapterControlBlock *acb) in arcmsr_stop_adapter_bgrb() argument
1434 switch (acb->adapter_type) { in arcmsr_stop_adapter_bgrb()
1436 arcmsr_stop_hba_bgrb(acb); in arcmsr_stop_adapter_bgrb()
1440 arcmsr_stop_hbb_bgrb(acb); in arcmsr_stop_adapter_bgrb()
1444 arcmsr_stop_hbc_bgrb(acb); in arcmsr_stop_adapter_bgrb()
1448 arcmsr_stop_hbd_bgrb(acb); in arcmsr_stop_adapter_bgrb()
1453 arcmsr_stop_hbe_bgrb(acb); in arcmsr_stop_adapter_bgrb()
1464 struct AdapterControlBlock *acb; in arcmsr_poll() local
1467 acb = (struct AdapterControlBlock *)cam_sim_softc(psim); in arcmsr_poll()
1468 mutex = mtx_owned(&acb->isr_lock); in arcmsr_poll()
1470 ARCMSR_LOCK_ACQUIRE(&acb->isr_lock); in arcmsr_poll()
1471 arcmsr_interrupt(acb); in arcmsr_poll()
1473 ARCMSR_LOCK_RELEASE(&acb->isr_lock); in arcmsr_poll()
1479 static u_int32_t arcmsr_Read_iop_rqbuffer_data_D(struct AdapterControlBlock *acb, in arcmsr_Read_iop_rqbuffer_data_D() argument
1505 pQbuffer = &acb->rqbuffer[acb->rqbuf_lastindex]; in arcmsr_Read_iop_rqbuffer_data_D()
1507 acb->rqbuf_lastindex++; in arcmsr_Read_iop_rqbuffer_data_D()
1509 acb->rqbuf_lastindex %= ARCMSR_MAX_QBUFFER; in arcmsr_Read_iop_rqbuffer_data_D()
1516 arcmsr_iop_message_read(acb); in arcmsr_Read_iop_rqbuffer_data_D()
1523 static u_int32_t arcmsr_Read_iop_rqbuffer_data(struct AdapterControlBlock *acb, in arcmsr_Read_iop_rqbuffer_data() argument
1529 if(acb->adapter_type >= ACB_ADAPTER_TYPE_B) { in arcmsr_Read_iop_rqbuffer_data()
1530 return(arcmsr_Read_iop_rqbuffer_data_D(acb, prbuffer)); in arcmsr_Read_iop_rqbuffer_data()
1535 pQbuffer = &acb->rqbuffer[acb->rqbuf_lastindex]; in arcmsr_Read_iop_rqbuffer_data()
1537 acb->rqbuf_lastindex++; in arcmsr_Read_iop_rqbuffer_data()
1539 acb->rqbuf_lastindex %= ARCMSR_MAX_QBUFFER; in arcmsr_Read_iop_rqbuffer_data()
1544 arcmsr_iop_message_read(acb); in arcmsr_Read_iop_rqbuffer_data()
1551 static void arcmsr_iop2drv_data_wrote_handle(struct AdapterControlBlock *acb) in arcmsr_iop2drv_data_wrote_handle() argument
1557 ARCMSR_LOCK_ACQUIRE(&acb->qbuffer_lock); in arcmsr_iop2drv_data_wrote_handle()
1558 prbuffer = arcmsr_get_iop_rqbuffer(acb); in arcmsr_iop2drv_data_wrote_handle()
1559 if (acb->rqbuf_lastindex >= acb->rqbuf_firstindex) in arcmsr_iop2drv_data_wrote_handle()
1560 my_empty_len = (ARCMSR_MAX_QBUFFER - 1) - (acb->rqbuf_lastindex - acb->rqbuf_firstindex); in arcmsr_iop2drv_data_wrote_handle()
1562 my_empty_len = acb->rqbuf_firstindex - acb->rqbuf_lastindex - 1; in arcmsr_iop2drv_data_wrote_handle()
1564 if(arcmsr_Read_iop_rqbuffer_data(acb, prbuffer) == 0) in arcmsr_iop2drv_data_wrote_handle()
1565 acb->acb_flags |= ACB_F_IOPDATA_OVERFLOW; in arcmsr_iop2drv_data_wrote_handle()
1567 acb->acb_flags |= ACB_F_IOPDATA_OVERFLOW; in arcmsr_iop2drv_data_wrote_handle()
1569 ARCMSR_LOCK_RELEASE(&acb->qbuffer_lock); in arcmsr_iop2drv_data_wrote_handle()
1575 static void arcmsr_Write_data_2iop_wqbuffer_D(struct AdapterControlBlock *acb) in arcmsr_Write_data_2iop_wqbuffer_D() argument
1583 if(acb->acb_flags & ACB_F_MESSAGE_WQBUFFER_READ) { in arcmsr_Write_data_2iop_wqbuffer_D()
1589 acb->acb_flags &= (~ACB_F_MESSAGE_WQBUFFER_READ); in arcmsr_Write_data_2iop_wqbuffer_D()
1590 pwbuffer = arcmsr_get_iop_wqbuffer(acb); in arcmsr_Write_data_2iop_wqbuffer_D()
1592 while((acb->wqbuf_firstindex != acb->wqbuf_lastindex) in arcmsr_Write_data_2iop_wqbuffer_D()
1594 pQbuffer = &acb->wqbuffer[acb->wqbuf_firstindex]; in arcmsr_Write_data_2iop_wqbuffer_D()
1596 acb->wqbuf_firstindex++; in arcmsr_Write_data_2iop_wqbuffer_D()
1597 acb->wqbuf_firstindex %= ARCMSR_MAX_QBUFFER; in arcmsr_Write_data_2iop_wqbuffer_D()
1612 arcmsr_iop_message_wrote(acb); in arcmsr_Write_data_2iop_wqbuffer_D()
1619 static void arcmsr_Write_data_2iop_wqbuffer(struct AdapterControlBlock *acb) in arcmsr_Write_data_2iop_wqbuffer() argument
1626 if(acb->adapter_type >= ACB_ADAPTER_TYPE_B) { in arcmsr_Write_data_2iop_wqbuffer()
1627 arcmsr_Write_data_2iop_wqbuffer_D(acb); in arcmsr_Write_data_2iop_wqbuffer()
1630 if(acb->acb_flags & ACB_F_MESSAGE_WQBUFFER_READ) { in arcmsr_Write_data_2iop_wqbuffer()
1631 acb->acb_flags &= (~ACB_F_MESSAGE_WQBUFFER_READ); in arcmsr_Write_data_2iop_wqbuffer()
1632 pwbuffer = arcmsr_get_iop_wqbuffer(acb); in arcmsr_Write_data_2iop_wqbuffer()
1634 while((acb->wqbuf_firstindex != acb->wqbuf_lastindex) in arcmsr_Write_data_2iop_wqbuffer()
1636 pQbuffer = &acb->wqbuffer[acb->wqbuf_firstindex]; in arcmsr_Write_data_2iop_wqbuffer()
1638 acb->wqbuf_firstindex++; in arcmsr_Write_data_2iop_wqbuffer()
1639 acb->wqbuf_firstindex %= ARCMSR_MAX_QBUFFER; in arcmsr_Write_data_2iop_wqbuffer()
1644 arcmsr_iop_message_wrote(acb); in arcmsr_Write_data_2iop_wqbuffer()
1651 static void arcmsr_iop2drv_data_read_handle(struct AdapterControlBlock *acb) in arcmsr_iop2drv_data_read_handle() argument
1653 ARCMSR_LOCK_ACQUIRE(&acb->qbuffer_lock); in arcmsr_iop2drv_data_read_handle()
1654 acb->acb_flags |= ACB_F_MESSAGE_WQBUFFER_READ; in arcmsr_iop2drv_data_read_handle()
1661 if(acb->wqbuf_firstindex != acb->wqbuf_lastindex) { in arcmsr_iop2drv_data_read_handle()
1662 arcmsr_Write_data_2iop_wqbuffer(acb); in arcmsr_iop2drv_data_read_handle()
1664 if(acb->wqbuf_firstindex == acb->wqbuf_lastindex) { in arcmsr_iop2drv_data_read_handle()
1665 acb->acb_flags |= ACB_F_MESSAGE_WQBUFFER_CLEARED; in arcmsr_iop2drv_data_read_handle()
1667 ARCMSR_LOCK_RELEASE(&acb->qbuffer_lock); in arcmsr_iop2drv_data_read_handle()
1687 static void arcmsr_rescan_lun(struct AdapterControlBlock *acb, int target, int lun) in arcmsr_rescan_lun() argument
1694 if (xpt_create_path(&path, NULL, cam_sim_path(acb->psim), target, lun) != CAM_REQ_CMP) in arcmsr_rescan_lun()
1707 static void arcmsr_abort_dr_ccbs(struct AdapterControlBlock *acb, int target, int lun) in arcmsr_abort_dr_ccbs() argument
1714 intmask_org = arcmsr_disable_allintr(acb); in arcmsr_abort_dr_ccbs()
1717 srb = acb->psrb_pool[i]; in arcmsr_abort_dr_ccbs()
1725 printf("arcmsr%d: abort scsi id %d lun %d srb=%p \n", acb->pci_unit, target, lun, srb); in arcmsr_abort_dr_ccbs()
1730 arcmsr_enable_allintr(acb, intmask_org); in arcmsr_abort_dr_ccbs()
1736 static void arcmsr_dr_handle(struct AdapterControlBlock *acb) { in arcmsr_dr_handle() argument
1742 switch (acb->adapter_type) { in arcmsr_dr_handle()
1747 deviceMapCurrent[target]=bus_space_read_4(acb->btag[0], acb->bhandle[0], devicemap); in arcmsr_dr_handle()
1756 deviceMapCurrent[target]=bus_space_read_4(acb->btag[1], acb->bhandle[1], devicemap); in arcmsr_dr_handle()
1765 deviceMapCurrent[target]=bus_space_read_4(acb->btag[0], acb->bhandle[0], devicemap); in arcmsr_dr_handle()
1773 deviceMapCurrent[target]=bus_space_read_4(acb->btag[0], acb->bhandle[0], devicemap); in arcmsr_dr_handle()
1781 deviceMapCurrent[target]=bus_space_read_4(acb->btag[0], acb->bhandle[0], devicemap); in arcmsr_dr_handle()
1789 deviceMapCurrent[target] = acb->msgcode_rwbuffer[devicemap]; in arcmsr_dr_handle()
1795 if(acb->acb_flags & ACB_F_BUS_HANG_ON) in arcmsr_dr_handle()
1797 acb->acb_flags &= ~ACB_F_BUS_HANG_ON; in arcmsr_dr_handle()
1806 if (*pDevMap != acb->device_map[target]) in arcmsr_dr_handle()
1810 difference = *pDevMap ^ acb->device_map[target]; in arcmsr_dr_handle()
1816 if(acb->device_map[target] & bit_check) in arcmsr_dr_handle()
1820 arcmsr_abort_dr_ccbs(acb, target, lun); in arcmsr_dr_handle()
1821 arcmsr_rescan_lun(acb, target, lun); in arcmsr_dr_handle()
1822 acb->devstate[target][lun] = ARECA_RAID_GONE; in arcmsr_dr_handle()
1827 arcmsr_rescan_lun(acb, target, lun); in arcmsr_dr_handle()
1828 acb->devstate[target][lun] = ARECA_RAID_GOOD; in arcmsr_dr_handle()
1833 acb->device_map[target] = *pDevMap; in arcmsr_dr_handle()
1842 static void arcmsr_hba_message_isr(struct AdapterControlBlock *acb) { in arcmsr_hba_message_isr() argument
1848 arcmsr_dr_handle( acb ); in arcmsr_hba_message_isr()
1854 static void arcmsr_hbb_message_isr(struct AdapterControlBlock *acb) { in arcmsr_hbb_message_isr() argument
1856 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_hbb_message_isr()
1862 arcmsr_dr_handle( acb ); in arcmsr_hbb_message_isr()
1868 static void arcmsr_hbc_message_isr(struct AdapterControlBlock *acb) { in arcmsr_hbc_message_isr() argument
1874 arcmsr_dr_handle( acb ); in arcmsr_hbc_message_isr()
1880 static void arcmsr_hbd_message_isr(struct AdapterControlBlock *acb) { in arcmsr_hbd_message_isr() argument
1886 arcmsr_dr_handle( acb ); in arcmsr_hbd_message_isr()
1892 static void arcmsr_hbe_message_isr(struct AdapterControlBlock *acb) { in arcmsr_hbe_message_isr() argument
1896 if (acb->adapter_type == ACB_ADAPTER_TYPE_E) in arcmsr_hbe_message_isr()
1899 outbound_message = acb->msgcode_rwbuffer[0]; in arcmsr_hbe_message_isr()
1901 arcmsr_dr_handle( acb ); in arcmsr_hbe_message_isr()
1907 static void arcmsr_hba_doorbell_isr(struct AdapterControlBlock *acb) in arcmsr_hba_doorbell_isr() argument
1921 arcmsr_iop2drv_data_wrote_handle(acb); in arcmsr_hba_doorbell_isr()
1924 arcmsr_iop2drv_data_read_handle(acb); in arcmsr_hba_doorbell_isr()
1931 static void arcmsr_hbc_doorbell_isr(struct AdapterControlBlock *acb) in arcmsr_hbc_doorbell_isr() argument
1945 arcmsr_iop2drv_data_wrote_handle(acb); in arcmsr_hbc_doorbell_isr()
1948 arcmsr_iop2drv_data_read_handle(acb); in arcmsr_hbc_doorbell_isr()
1951 arcmsr_hbc_message_isr(acb); /* messenger of "driver to iop commands" */ in arcmsr_hbc_doorbell_isr()
1958 static void arcmsr_hbd_doorbell_isr(struct AdapterControlBlock *acb) in arcmsr_hbd_doorbell_isr() argument
1974 arcmsr_iop2drv_data_wrote_handle(acb); in arcmsr_hbd_doorbell_isr()
1977 arcmsr_iop2drv_data_read_handle(acb); in arcmsr_hbd_doorbell_isr()
1980 arcmsr_hbd_message_isr(acb); /* messenger of "driver to iop commands" */ in arcmsr_hbd_doorbell_isr()
1991 static void arcmsr_hbe_doorbell_isr(struct AdapterControlBlock *acb) in arcmsr_hbe_doorbell_isr() argument
2004 doorbell_status = in_doorbell ^ acb->in_doorbell; in arcmsr_hbe_doorbell_isr()
2006 arcmsr_iop2drv_data_wrote_handle(acb); in arcmsr_hbe_doorbell_isr()
2009 arcmsr_iop2drv_data_read_handle(acb); in arcmsr_hbe_doorbell_isr()
2012 arcmsr_hbe_message_isr(acb); /* messenger of "driver to iop commands" */ in arcmsr_hbe_doorbell_isr()
2014 acb->in_doorbell = in_doorbell; in arcmsr_hbe_doorbell_isr()
2020 static void arcmsr_hbf_doorbell_isr(struct AdapterControlBlock *acb) in arcmsr_hbf_doorbell_isr() argument
2037 doorbell_status = in_doorbell ^ acb->in_doorbell; in arcmsr_hbf_doorbell_isr()
2039 arcmsr_iop2drv_data_wrote_handle(acb); in arcmsr_hbf_doorbell_isr()
2042 arcmsr_iop2drv_data_read_handle(acb); in arcmsr_hbf_doorbell_isr()
2045 arcmsr_hbe_message_isr(acb); /* messenger of "driver to iop commands" */ in arcmsr_hbf_doorbell_isr()
2047 acb->in_doorbell = in_doorbell; in arcmsr_hbf_doorbell_isr()
2053 static void arcmsr_hba_postqueue_isr(struct AdapterControlBlock *acb) in arcmsr_hba_postqueue_isr() argument
2063 bus_dmamap_sync(acb->srb_dmat, acb->srb_dmamap, in arcmsr_hba_postqueue_isr()
2069 arcmsr_drain_donequeue(acb, flag_srb, error); in arcmsr_hba_postqueue_isr()
2076 static void arcmsr_hbb_postqueue_isr(struct AdapterControlBlock *acb) in arcmsr_hbb_postqueue_isr() argument
2078 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_hbb_postqueue_isr()
2088 bus_dmamap_sync(acb->srb_dmat, acb->srb_dmamap, in arcmsr_hbb_postqueue_isr()
2098 arcmsr_drain_donequeue(acb, flag_srb, error); in arcmsr_hbb_postqueue_isr()
2105 static void arcmsr_hbc_postqueue_isr(struct AdapterControlBlock *acb) in arcmsr_hbc_postqueue_isr() argument
2115 bus_dmamap_sync(acb->srb_dmat, acb->srb_dmamap, BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); in arcmsr_hbc_postqueue_isr()
2122 arcmsr_drain_donequeue(acb, flag_srb, error); in arcmsr_hbc_postqueue_isr()
2159 static void arcmsr_hbd_postqueue_isr(struct AdapterControlBlock *acb) in arcmsr_hbd_postqueue_isr() argument
2161 struct HBD_MessageUnit0 *phbdmu = (struct HBD_MessageUnit0 *)acb->pmu; in arcmsr_hbd_postqueue_isr()
2174 bus_dmamap_sync(acb->srb_dmat, acb->srb_dmamap, in arcmsr_hbd_postqueue_isr()
2182 arcmsr_drain_donequeue(acb, addressLow, error); /*Check if command done with no error */ in arcmsr_hbd_postqueue_isr()
2193 static void arcmsr_hbe_postqueue_isr(struct AdapterControlBlock *acb) in arcmsr_hbe_postqueue_isr() argument
2204 bus_dmamap_sync(acb->srb_dmat, acb->srb_dmamap, BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); in arcmsr_hbe_postqueue_isr()
2205 doneq_index = acb->doneq_index; in arcmsr_hbe_postqueue_isr()
2207 cmdSMID = acb->pCompletionQ[doneq_index].cmdSMID; in arcmsr_hbe_postqueue_isr()
2208 …error = (acb->pCompletionQ[doneq_index].cmdFlag & ARCMSR_SRBREPLY_FLAG_ERROR_MODE1) ? TRUE : FALSE; in arcmsr_hbe_postqueue_isr()
2209 arcmsr_drain_donequeue(acb, (u_int32_t)cmdSMID, error); in arcmsr_hbe_postqueue_isr()
2211 if (doneq_index >= acb->completionQ_entry) in arcmsr_hbe_postqueue_isr()
2214 acb->doneq_index = doneq_index; in arcmsr_hbe_postqueue_isr()
2218 static void arcmsr_hbf_postqueue_isr(struct AdapterControlBlock *acb) in arcmsr_hbf_postqueue_isr() argument
2229 bus_dmamap_sync(acb->srb_dmat, acb->srb_dmamap, BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); in arcmsr_hbf_postqueue_isr()
2230 doneq_index = acb->doneq_index; in arcmsr_hbf_postqueue_isr()
2232 cmdSMID = acb->pCompletionQ[doneq_index].cmdSMID; in arcmsr_hbf_postqueue_isr()
2235 …error = (acb->pCompletionQ[doneq_index].cmdFlag & ARCMSR_SRBREPLY_FLAG_ERROR_MODE1) ? TRUE : FALSE; in arcmsr_hbf_postqueue_isr()
2236 arcmsr_drain_donequeue(acb, (u_int32_t)cmdSMID, error); in arcmsr_hbf_postqueue_isr()
2237 acb->pCompletionQ[doneq_index].cmdSMID = 0xffff; in arcmsr_hbf_postqueue_isr()
2239 if (doneq_index >= acb->completionQ_entry) in arcmsr_hbf_postqueue_isr()
2242 acb->doneq_index = doneq_index; in arcmsr_hbf_postqueue_isr()
2250 static void arcmsr_handle_hba_isr( struct AdapterControlBlock *acb) in arcmsr_handle_hba_isr() argument
2258 …outbound_intStatus = CHIP_REG_READ32(HBA_MessageUnit, 0, outbound_intstatus) & acb->outbound_int_e… in arcmsr_handle_hba_isr()
2266 arcmsr_hba_doorbell_isr(acb); in arcmsr_handle_hba_isr()
2270 arcmsr_hba_postqueue_isr(acb); in arcmsr_handle_hba_isr()
2273 arcmsr_hba_message_isr(acb); in arcmsr_handle_hba_isr()
2280 static void arcmsr_handle_hbb_isr( struct AdapterControlBlock *acb) in arcmsr_handle_hbb_isr() argument
2283 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_handle_hbb_isr()
2289 outbound_doorbell = READ_CHIP_REG32(0, phbbmu->iop2drv_doorbell) & acb->outbound_int_enable; in arcmsr_handle_hbb_isr()
2299 arcmsr_iop2drv_data_wrote_handle(acb); in arcmsr_handle_hbb_isr()
2302 arcmsr_iop2drv_data_read_handle(acb); in arcmsr_handle_hbb_isr()
2306 arcmsr_hbb_postqueue_isr(acb); in arcmsr_handle_hbb_isr()
2309 arcmsr_hbb_message_isr(acb); in arcmsr_handle_hbb_isr()
2316 static void arcmsr_handle_hbc_isr( struct AdapterControlBlock *acb) in arcmsr_handle_hbc_isr() argument
2334 arcmsr_hbc_doorbell_isr(acb); in arcmsr_handle_hbc_isr()
2338 arcmsr_hbc_postqueue_isr(acb); in arcmsr_handle_hbc_isr()
2347 static void arcmsr_handle_hbd_isr( struct AdapterControlBlock *acb) in arcmsr_handle_hbd_isr() argument
2356 …host_interrupt_status = CHIP_REG_READ32(HBD_MessageUnit, 0, host_int_status) & acb->outbound_int_e… in arcmsr_handle_hbd_isr()
2366 arcmsr_hbd_doorbell_isr(acb); in arcmsr_handle_hbd_isr()
2370 arcmsr_hbd_postqueue_isr(acb); in arcmsr_handle_hbd_isr()
2380 static void arcmsr_handle_hbe_isr( struct AdapterControlBlock *acb) in arcmsr_handle_hbe_isr() argument
2398 arcmsr_hbe_doorbell_isr(acb); in arcmsr_handle_hbe_isr()
2402 arcmsr_hbe_postqueue_isr(acb); in arcmsr_handle_hbe_isr()
2408 static void arcmsr_handle_hbf_isr( struct AdapterControlBlock *acb) in arcmsr_handle_hbf_isr() argument
2426 arcmsr_hbf_doorbell_isr(acb); in arcmsr_handle_hbf_isr()
2430 arcmsr_hbf_postqueue_isr(acb); in arcmsr_handle_hbf_isr()
2439 static void arcmsr_interrupt(struct AdapterControlBlock *acb) in arcmsr_interrupt() argument
2441 switch (acb->adapter_type) { in arcmsr_interrupt()
2443 arcmsr_handle_hba_isr(acb); in arcmsr_interrupt()
2446 arcmsr_handle_hbb_isr(acb); in arcmsr_interrupt()
2449 arcmsr_handle_hbc_isr(acb); in arcmsr_interrupt()
2452 arcmsr_handle_hbd_isr(acb); in arcmsr_interrupt()
2455 arcmsr_handle_hbe_isr(acb); in arcmsr_interrupt()
2458 arcmsr_handle_hbf_isr(acb); in arcmsr_interrupt()
2462 " unknown adapter type =%d\n", acb->pci_unit, acb->adapter_type); in arcmsr_interrupt()
2472 struct AdapterControlBlock *acb = (struct AdapterControlBlock *)arg; in arcmsr_intr_handler() local
2474 ARCMSR_LOCK_ACQUIRE(&acb->isr_lock); in arcmsr_intr_handler()
2475 arcmsr_interrupt(acb); in arcmsr_intr_handler()
2476 ARCMSR_LOCK_RELEASE(&acb->isr_lock); in arcmsr_intr_handler()
2484 struct AdapterControlBlock *acb = (struct AdapterControlBlock *)arg; in arcmsr_polling_devmap() local
2485 switch (acb->adapter_type) { in arcmsr_polling_devmap()
2491 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_polling_devmap()
2507 acb->out_doorbell ^= ARCMSR_HBEMU_DRV2IOP_MESSAGE_CMD_DONE; in arcmsr_polling_devmap()
2508 CHIP_REG_WRITE32(HBE_MessageUnit, 0, iobound_doorbell, acb->out_doorbell); in arcmsr_polling_devmap()
2517 acb->out_doorbell ^= ARCMSR_HBEMU_DRV2IOP_MESSAGE_CMD_DONE; in arcmsr_polling_devmap()
2518 CHIP_REG_WRITE32(HBF_MessageUnit, 0, iobound_doorbell, acb->out_doorbell); in arcmsr_polling_devmap()
2523 if((acb->acb_flags & ACB_F_SCSISTOPADAPTER) == 0) in arcmsr_polling_devmap()
2525 …callout_reset(&acb->devmap_callout, 5 * hz, arcmsr_polling_devmap, acb); /* polling per 5 seconds … in arcmsr_polling_devmap()
2534 static void arcmsr_iop_parking(struct AdapterControlBlock *acb) in arcmsr_iop_parking() argument
2538 if(acb != NULL) { in arcmsr_iop_parking()
2540 if(acb->acb_flags & ACB_F_MSG_START_BGRB) { in arcmsr_iop_parking()
2541 intmask_org = arcmsr_disable_allintr(acb); in arcmsr_iop_parking()
2542 arcmsr_stop_adapter_bgrb(acb); in arcmsr_iop_parking()
2543 arcmsr_flush_adapter_cache(acb); in arcmsr_iop_parking()
2544 arcmsr_enable_allintr(acb, intmask_org); in arcmsr_iop_parking()
2553 static u_int32_t arcmsr_iop_ioctlcmd(struct AdapterControlBlock *acb, u_int32_t ioctl_cmd, caddr_t … in arcmsr_iop_ioctlcmd() argument
2562 ARCMSR_LOCK_ACQUIRE(&acb->qbuffer_lock); in arcmsr_iop_ioctlcmd()
2569 while((acb->rqbuf_firstindex != acb->rqbuf_lastindex) in arcmsr_iop_ioctlcmd()
2572 pQbuffer = &acb->rqbuffer[acb->rqbuf_firstindex]; in arcmsr_iop_ioctlcmd()
2574 acb->rqbuf_firstindex++; in arcmsr_iop_ioctlcmd()
2575 acb->rqbuf_firstindex %= ARCMSR_MAX_QBUFFER; in arcmsr_iop_ioctlcmd()
2580 if(acb->acb_flags & ACB_F_IOPDATA_OVERFLOW) { in arcmsr_iop_ioctlcmd()
2583 acb->acb_flags &= ~ACB_F_IOPDATA_OVERFLOW; in arcmsr_iop_ioctlcmd()
2584 prbuffer = arcmsr_get_iop_rqbuffer(acb); in arcmsr_iop_ioctlcmd()
2585 if(arcmsr_Read_iop_rqbuffer_data(acb, prbuffer) == 0) in arcmsr_iop_ioctlcmd()
2586 acb->acb_flags |= ACB_F_IOPDATA_OVERFLOW; in arcmsr_iop_ioctlcmd()
2600 wqbuf_lastindex = acb->wqbuf_lastindex; in arcmsr_iop_ioctlcmd()
2601 wqbuf_firstindex = acb->wqbuf_firstindex; in arcmsr_iop_ioctlcmd()
2603 arcmsr_Write_data_2iop_wqbuffer(acb); in arcmsr_iop_ioctlcmd()
2611 pQbuffer = &acb->wqbuffer[acb->wqbuf_lastindex]; in arcmsr_iop_ioctlcmd()
2613 acb->wqbuf_lastindex++; in arcmsr_iop_ioctlcmd()
2614 acb->wqbuf_lastindex %= ARCMSR_MAX_QBUFFER; in arcmsr_iop_ioctlcmd()
2620 if(acb->acb_flags & ACB_F_MESSAGE_WQBUFFER_CLEARED) { in arcmsr_iop_ioctlcmd()
2621 acb->acb_flags &= ~ACB_F_MESSAGE_WQBUFFER_CLEARED; in arcmsr_iop_ioctlcmd()
2622 arcmsr_Write_data_2iop_wqbuffer(acb); in arcmsr_iop_ioctlcmd()
2633 u_int8_t *pQbuffer = acb->rqbuffer; in arcmsr_iop_ioctlcmd()
2635 if(acb->acb_flags & ACB_F_IOPDATA_OVERFLOW) { in arcmsr_iop_ioctlcmd()
2636 acb->acb_flags &= ~ACB_F_IOPDATA_OVERFLOW; in arcmsr_iop_ioctlcmd()
2637 arcmsr_iop_message_read(acb); in arcmsr_iop_ioctlcmd()
2640 acb->acb_flags |= ACB_F_MESSAGE_RQBUFFER_CLEARED; in arcmsr_iop_ioctlcmd()
2641 acb->rqbuf_firstindex = 0; in arcmsr_iop_ioctlcmd()
2642 acb->rqbuf_lastindex = 0; in arcmsr_iop_ioctlcmd()
2650 u_int8_t *pQbuffer = acb->wqbuffer; in arcmsr_iop_ioctlcmd()
2652 if(acb->acb_flags & ACB_F_IOPDATA_OVERFLOW) { in arcmsr_iop_ioctlcmd()
2653 acb->acb_flags &= ~ACB_F_IOPDATA_OVERFLOW; in arcmsr_iop_ioctlcmd()
2654 arcmsr_iop_message_read(acb); in arcmsr_iop_ioctlcmd()
2657 acb->acb_flags |= (ACB_F_MESSAGE_WQBUFFER_CLEARED|ACB_F_MESSAGE_WQBUFFER_READ); in arcmsr_iop_ioctlcmd()
2658 acb->wqbuf_firstindex = 0; in arcmsr_iop_ioctlcmd()
2659 acb->wqbuf_lastindex = 0; in arcmsr_iop_ioctlcmd()
2668 if(acb->acb_flags & ACB_F_IOPDATA_OVERFLOW) { in arcmsr_iop_ioctlcmd()
2669 acb->acb_flags &= ~ACB_F_IOPDATA_OVERFLOW; in arcmsr_iop_ioctlcmd()
2670 arcmsr_iop_message_read(acb); in arcmsr_iop_ioctlcmd()
2673 acb->acb_flags |= (ACB_F_MESSAGE_WQBUFFER_CLEARED in arcmsr_iop_ioctlcmd()
2676 acb->rqbuf_firstindex = 0; in arcmsr_iop_ioctlcmd()
2677 acb->rqbuf_lastindex = 0; in arcmsr_iop_ioctlcmd()
2678 acb->wqbuf_firstindex = 0; in arcmsr_iop_ioctlcmd()
2679 acb->wqbuf_lastindex = 0; in arcmsr_iop_ioctlcmd()
2680 pQbuffer = acb->rqbuffer; in arcmsr_iop_ioctlcmd()
2682 pQbuffer = acb->wqbuffer; in arcmsr_iop_ioctlcmd()
2699 ARCMSR_LOCK_RELEASE(&acb->qbuffer_lock); in arcmsr_iop_ioctlcmd()
2707 arcmsr_iop_parking(acb); in arcmsr_iop_ioctlcmd()
2712 arcmsr_flush_adapter_cache(acb); in arcmsr_iop_ioctlcmd()
2717 ARCMSR_LOCK_RELEASE(&acb->qbuffer_lock); in arcmsr_iop_ioctlcmd()
2726 struct AdapterControlBlock *acb; in arcmsr_free_srb() local
2728 acb = srb->acb; in arcmsr_free_srb()
2729 ARCMSR_LOCK_ACQUIRE(&acb->srb_lock); in arcmsr_free_srb()
2732 acb->srbworkingQ[acb->workingsrb_doneindex] = srb; in arcmsr_free_srb()
2733 acb->workingsrb_doneindex++; in arcmsr_free_srb()
2734 acb->workingsrb_doneindex %= ARCMSR_MAX_FREESRB_NUM; in arcmsr_free_srb()
2735 ARCMSR_LOCK_RELEASE(&acb->srb_lock); in arcmsr_free_srb()
2741 static struct CommandControlBlock *arcmsr_get_freesrb(struct AdapterControlBlock *acb) in arcmsr_get_freesrb() argument
2746 ARCMSR_LOCK_ACQUIRE(&acb->srb_lock); in arcmsr_get_freesrb()
2747 workingsrb_doneindex = acb->workingsrb_doneindex; in arcmsr_get_freesrb()
2748 workingsrb_startindex = acb->workingsrb_startindex; in arcmsr_get_freesrb()
2749 srb = acb->srbworkingQ[workingsrb_startindex]; in arcmsr_get_freesrb()
2753 acb->workingsrb_startindex = workingsrb_startindex; in arcmsr_get_freesrb()
2757 ARCMSR_LOCK_RELEASE(&acb->srb_lock); in arcmsr_get_freesrb()
2764 static int arcmsr_iop_message_xfer(struct AdapterControlBlock *acb, union ccb *pccb) in arcmsr_iop_message_xfer() argument
2793 ARCMSR_LOCK_ACQUIRE(&acb->qbuffer_lock); in arcmsr_iop_message_xfer()
2794 while ((acb->rqbuf_firstindex != acb->rqbuf_lastindex) in arcmsr_iop_message_xfer()
2796 pQbuffer = &acb->rqbuffer[acb->rqbuf_firstindex]; in arcmsr_iop_message_xfer()
2798 acb->rqbuf_firstindex++; in arcmsr_iop_message_xfer()
2799 acb->rqbuf_firstindex %= ARCMSR_MAX_QBUFFER; in arcmsr_iop_message_xfer()
2803 if (acb->acb_flags & ACB_F_IOPDATA_OVERFLOW) { in arcmsr_iop_message_xfer()
2806 acb->acb_flags &= ~ACB_F_IOPDATA_OVERFLOW; in arcmsr_iop_message_xfer()
2807 prbuffer = arcmsr_get_iop_rqbuffer(acb); in arcmsr_iop_message_xfer()
2808 if(arcmsr_Read_iop_rqbuffer_data(acb, prbuffer) == 0) in arcmsr_iop_message_xfer()
2809 acb->acb_flags |= ACB_F_IOPDATA_OVERFLOW; in arcmsr_iop_message_xfer()
2814 ARCMSR_LOCK_RELEASE(&acb->qbuffer_lock); in arcmsr_iop_message_xfer()
2823 ARCMSR_LOCK_ACQUIRE(&acb->qbuffer_lock); in arcmsr_iop_message_xfer()
2824 wqbuf_lastindex = acb->wqbuf_lastindex; in arcmsr_iop_message_xfer()
2825 wqbuf_firstindex = acb->wqbuf_firstindex; in arcmsr_iop_message_xfer()
2827 arcmsr_Write_data_2iop_wqbuffer(acb); in arcmsr_iop_message_xfer()
2845 pQbuffer = &acb->wqbuffer[acb->wqbuf_lastindex]; in arcmsr_iop_message_xfer()
2847 acb->wqbuf_lastindex++; in arcmsr_iop_message_xfer()
2848 acb->wqbuf_lastindex %= ARCMSR_MAX_QBUFFER; in arcmsr_iop_message_xfer()
2852 if (acb->acb_flags & ACB_F_MESSAGE_WQBUFFER_CLEARED) { in arcmsr_iop_message_xfer()
2853 acb->acb_flags &= in arcmsr_iop_message_xfer()
2855 arcmsr_Write_data_2iop_wqbuffer(acb); in arcmsr_iop_message_xfer()
2872 ARCMSR_LOCK_RELEASE(&acb->qbuffer_lock); in arcmsr_iop_message_xfer()
2876 u_int8_t *pQbuffer = acb->rqbuffer; in arcmsr_iop_message_xfer()
2878 ARCMSR_LOCK_ACQUIRE(&acb->qbuffer_lock); in arcmsr_iop_message_xfer()
2879 if (acb->acb_flags & ACB_F_IOPDATA_OVERFLOW) { in arcmsr_iop_message_xfer()
2880 acb->acb_flags &= ~ACB_F_IOPDATA_OVERFLOW; in arcmsr_iop_message_xfer()
2881 arcmsr_iop_message_read(acb); in arcmsr_iop_message_xfer()
2883 acb->acb_flags |= ACB_F_MESSAGE_RQBUFFER_CLEARED; in arcmsr_iop_message_xfer()
2884 acb->rqbuf_firstindex = 0; in arcmsr_iop_message_xfer()
2885 acb->rqbuf_lastindex = 0; in arcmsr_iop_message_xfer()
2889 ARCMSR_LOCK_RELEASE(&acb->qbuffer_lock); in arcmsr_iop_message_xfer()
2893 u_int8_t *pQbuffer = acb->wqbuffer; in arcmsr_iop_message_xfer()
2895 ARCMSR_LOCK_ACQUIRE(&acb->qbuffer_lock); in arcmsr_iop_message_xfer()
2896 if (acb->acb_flags & ACB_F_IOPDATA_OVERFLOW) { in arcmsr_iop_message_xfer()
2897 acb->acb_flags &= ~ACB_F_IOPDATA_OVERFLOW; in arcmsr_iop_message_xfer()
2898 arcmsr_iop_message_read(acb); in arcmsr_iop_message_xfer()
2900 acb->acb_flags |= in arcmsr_iop_message_xfer()
2903 acb->wqbuf_firstindex = 0; in arcmsr_iop_message_xfer()
2904 acb->wqbuf_lastindex = 0; in arcmsr_iop_message_xfer()
2908 ARCMSR_LOCK_RELEASE(&acb->qbuffer_lock); in arcmsr_iop_message_xfer()
2914 ARCMSR_LOCK_ACQUIRE(&acb->qbuffer_lock); in arcmsr_iop_message_xfer()
2915 if (acb->acb_flags & ACB_F_IOPDATA_OVERFLOW) { in arcmsr_iop_message_xfer()
2916 acb->acb_flags &= ~ACB_F_IOPDATA_OVERFLOW; in arcmsr_iop_message_xfer()
2917 arcmsr_iop_message_read(acb); in arcmsr_iop_message_xfer()
2919 acb->acb_flags |= in arcmsr_iop_message_xfer()
2923 acb->rqbuf_firstindex = 0; in arcmsr_iop_message_xfer()
2924 acb->rqbuf_lastindex = 0; in arcmsr_iop_message_xfer()
2925 acb->wqbuf_firstindex = 0; in arcmsr_iop_message_xfer()
2926 acb->wqbuf_lastindex = 0; in arcmsr_iop_message_xfer()
2927 pQbuffer = acb->rqbuffer; in arcmsr_iop_message_xfer()
2929 pQbuffer = acb->wqbuffer; in arcmsr_iop_message_xfer()
2932 ARCMSR_LOCK_RELEASE(&acb->qbuffer_lock); in arcmsr_iop_message_xfer()
2948 arcmsr_iop_parking(acb); in arcmsr_iop_message_xfer()
2951 arcmsr_flush_adapter_cache(acb); in arcmsr_iop_message_xfer()
2966 struct AdapterControlBlock *acb = (struct AdapterControlBlock *)srb->acb; in arcmsr_execute_srb() local
2973 acb->pktRequestCount++; in arcmsr_execute_srb()
2978 , acb->pci_unit, error); in arcmsr_execute_srb()
2991 if(acb->acb_flags & ACB_F_BUS_RESET) { in arcmsr_execute_srb()
2992 printf("arcmsr%d: bus reset and return busy \n", acb->pci_unit); in arcmsr_execute_srb()
2997 if(acb->devstate[target][lun] == ARECA_RAID_GONE) { in arcmsr_execute_srb()
3005 , acb->pci_unit, cmd, target, lun); in arcmsr_execute_srb()
3013 bus_dmamap_unload(acb->dm_segs_dmat, srb->dm_segs_dmamap); in arcmsr_execute_srb()
3018 if(acb->srboutstandingcount >= acb->maxOutstanding) { in arcmsr_execute_srb()
3019 if((acb->acb_flags & ACB_F_CAM_DEV_QFRZN) == 0) in arcmsr_execute_srb()
3021 xpt_freeze_simq(acb->psim, 1); in arcmsr_execute_srb()
3022 acb->acb_flags |= ACB_F_CAM_DEV_QFRZN; in arcmsr_execute_srb()
3031 arcmsr_post_srb(acb, srb); in arcmsr_execute_srb()
3048 struct AdapterControlBlock *acb = (struct AdapterControlBlock *) abortccb->ccb_h.arcmsr_ccbacb_ptr; in arcmsr_seek_cmd2abort() local
3052 acb->num_aborts++; in arcmsr_seek_cmd2abort()
3062 if(acb->srboutstandingcount != 0) { in arcmsr_seek_cmd2abort()
3064 intmask_org = arcmsr_disable_allintr(acb); in arcmsr_seek_cmd2abort()
3066 srb = acb->psrb_pool[i]; in arcmsr_seek_cmd2abort()
3072 , acb->pci_unit, abortccb->ccb_h.target_id in arcmsr_seek_cmd2abort()
3074 arcmsr_polling_srbdone(acb, srb); in arcmsr_seek_cmd2abort()
3076 arcmsr_enable_allintr(acb, intmask_org); in arcmsr_seek_cmd2abort()
3082 arcmsr_enable_allintr(acb, intmask_org); in arcmsr_seek_cmd2abort()
3090 static void arcmsr_bus_reset(struct AdapterControlBlock *acb) in arcmsr_bus_reset() argument
3094 acb->num_resets++; in arcmsr_bus_reset()
3095 acb->acb_flags |= ACB_F_BUS_RESET; in arcmsr_bus_reset()
3096 while(acb->srboutstandingcount != 0 && retry < 400) { in arcmsr_bus_reset()
3097 arcmsr_interrupt(acb); in arcmsr_bus_reset()
3101 arcmsr_iop_reset(acb); in arcmsr_bus_reset()
3102 acb->acb_flags &= ~ACB_F_BUS_RESET; in arcmsr_bus_reset()
3108 static void arcmsr_handle_virtual_command(struct AdapterControlBlock *acb, in arcmsr_handle_virtual_command() argument
3139 if (arcmsr_iop_message_xfer(acb, pccb)) { in arcmsr_handle_virtual_command()
3156 struct AdapterControlBlock *acb; in arcmsr_action() local
3158 acb = (struct AdapterControlBlock *) cam_sim_softc(psim); in arcmsr_action()
3159 if(acb == NULL) { in arcmsr_action()
3178 arcmsr_handle_virtual_command(acb, pccb); in arcmsr_action()
3181 if((srb = arcmsr_get_freesrb(acb)) == NULL) { in arcmsr_action()
3187 pccb->ccb_h.arcmsr_ccbacb_ptr = acb; in arcmsr_action()
3189 error = bus_dmamap_load_ccb(acb->dm_segs_dmat in arcmsr_action()
3194 xpt_freeze_simq(acb->psim, 1); in arcmsr_action()
3215 if(acb->adapter_bus_speed == ACB_BUS_SPEED_12G) in arcmsr_action()
3217 else if(acb->adapter_bus_speed == ACB_BUS_SPEED_6G) in arcmsr_action()
3221 if((acb->vendor_device_id == PCIDevVenIDARC1880) || in arcmsr_action()
3222 (acb->vendor_device_id == PCIDevVenIDARC1883) || in arcmsr_action()
3223 (acb->vendor_device_id == PCIDevVenIDARC1884) || in arcmsr_action()
3224 (acb->vendor_device_id == PCIDevVenIDARC1886) || in arcmsr_action()
3225 (acb->vendor_device_id == PCIDevVenIDARC1680) || in arcmsr_action()
3226 (acb->vendor_device_id == PCIDevVenIDARC1214)) in arcmsr_action()
3274 arcmsr_bus_reset(acb); in arcmsr_action()
3306 if((acb->vendor_device_id == PCIDevVenIDARC1880) || in arcmsr_action()
3307 (acb->vendor_device_id == PCIDevVenIDARC1883) || in arcmsr_action()
3308 (acb->vendor_device_id == PCIDevVenIDARC1884) || in arcmsr_action()
3309 (acb->vendor_device_id == PCIDevVenIDARC1886) || in arcmsr_action()
3310 (acb->vendor_device_id == PCIDevVenIDARC1680) || in arcmsr_action()
3311 (acb->vendor_device_id == PCIDevVenIDARC1214)) in arcmsr_action()
3318 if (acb->adapter_bus_speed == ACB_BUS_SPEED_12G) in arcmsr_action()
3320 else if(acb->adapter_bus_speed == ACB_BUS_SPEED_6G) in arcmsr_action()
3322 else if(acb->adapter_bus_speed == ACB_BUS_SPEED_3G) in arcmsr_action()
3332 if (acb->adapter_bus_speed == ACB_BUS_SPEED_6G) in arcmsr_action()
3372 static void arcmsr_start_hba_bgrb(struct AdapterControlBlock *acb) in arcmsr_start_hba_bgrb() argument
3374 acb->acb_flags |= ACB_F_MSG_START_BGRB; in arcmsr_start_hba_bgrb()
3376 if(!arcmsr_hba_wait_msgint_ready(acb)) { in arcmsr_start_hba_bgrb()
3377 printf("arcmsr%d: wait 'start adapter background rebuild' timeout \n", acb->pci_unit); in arcmsr_start_hba_bgrb()
3384 static void arcmsr_start_hbb_bgrb(struct AdapterControlBlock *acb) in arcmsr_start_hbb_bgrb() argument
3386 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_start_hbb_bgrb()
3387 acb->acb_flags |= ACB_F_MSG_START_BGRB; in arcmsr_start_hbb_bgrb()
3389 if(!arcmsr_hbb_wait_msgint_ready(acb)) { in arcmsr_start_hbb_bgrb()
3390 printf( "arcmsr%d: wait 'start adapter background rebuild' timeout \n", acb->pci_unit); in arcmsr_start_hbb_bgrb()
3397 static void arcmsr_start_hbc_bgrb(struct AdapterControlBlock *acb) in arcmsr_start_hbc_bgrb() argument
3399 acb->acb_flags |= ACB_F_MSG_START_BGRB; in arcmsr_start_hbc_bgrb()
3402 if(!arcmsr_hbc_wait_msgint_ready(acb)) { in arcmsr_start_hbc_bgrb()
3403 printf("arcmsr%d: wait 'start adapter background rebuild' timeout \n", acb->pci_unit); in arcmsr_start_hbc_bgrb()
3410 static void arcmsr_start_hbd_bgrb(struct AdapterControlBlock *acb) in arcmsr_start_hbd_bgrb() argument
3412 acb->acb_flags |= ACB_F_MSG_START_BGRB; in arcmsr_start_hbd_bgrb()
3414 if(!arcmsr_hbd_wait_msgint_ready(acb)) { in arcmsr_start_hbd_bgrb()
3415 printf("arcmsr%d: wait 'start adapter background rebuild' timeout \n", acb->pci_unit); in arcmsr_start_hbd_bgrb()
3422 static void arcmsr_start_hbe_bgrb(struct AdapterControlBlock *acb) in arcmsr_start_hbe_bgrb() argument
3424 acb->acb_flags |= ACB_F_MSG_START_BGRB; in arcmsr_start_hbe_bgrb()
3426 acb->out_doorbell ^= ARCMSR_HBEMU_DRV2IOP_MESSAGE_CMD_DONE; in arcmsr_start_hbe_bgrb()
3427 CHIP_REG_WRITE32(HBE_MessageUnit, 0, iobound_doorbell, acb->out_doorbell); in arcmsr_start_hbe_bgrb()
3428 if(!arcmsr_hbe_wait_msgint_ready(acb)) { in arcmsr_start_hbe_bgrb()
3429 printf("arcmsr%d: wait 'start adapter background rebuild' timeout \n", acb->pci_unit); in arcmsr_start_hbe_bgrb()
3436 static void arcmsr_start_adapter_bgrb(struct AdapterControlBlock *acb) in arcmsr_start_adapter_bgrb() argument
3438 switch (acb->adapter_type) { in arcmsr_start_adapter_bgrb()
3440 arcmsr_start_hba_bgrb(acb); in arcmsr_start_adapter_bgrb()
3443 arcmsr_start_hbb_bgrb(acb); in arcmsr_start_adapter_bgrb()
3446 arcmsr_start_hbc_bgrb(acb); in arcmsr_start_adapter_bgrb()
3449 arcmsr_start_hbd_bgrb(acb); in arcmsr_start_adapter_bgrb()
3453 arcmsr_start_hbe_bgrb(acb); in arcmsr_start_adapter_bgrb()
3462 static void arcmsr_polling_hba_srbdone(struct AdapterControlBlock *acb, struct CommandControlBlock … in arcmsr_polling_hba_srbdone() argument
3470 …outbound_intstatus=CHIP_REG_READ32(HBA_MessageUnit, 0, outbound_intstatus) & acb->outbound_int_ena… in arcmsr_polling_hba_srbdone()
3472 bus_dmamap_sync(acb->srb_dmat, acb->srb_dmamap, BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE); in arcmsr_polling_hba_srbdone()
3488 (acb->vir2phy_offset+(flag_srb << 5));/*frame must be 32 bytes aligned*/ in arcmsr_polling_hba_srbdone()
3491 if((srb->acb != acb) || (srb->srb_state != ARCMSR_SRB_START)) { in arcmsr_polling_hba_srbdone()
3495 , acb->pci_unit in arcmsr_polling_hba_srbdone()
3504 , acb->pci_unit in arcmsr_polling_hba_srbdone()
3505 , srb, acb->srboutstandingcount); in arcmsr_polling_hba_srbdone()
3508 arcmsr_report_srb_state(acb, srb, error); in arcmsr_polling_hba_srbdone()
3516 static void arcmsr_polling_hbb_srbdone(struct AdapterControlBlock *acb, struct CommandControlBlock … in arcmsr_polling_hbb_srbdone() argument
3518 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_polling_hbb_srbdone()
3527 bus_dmamap_sync(acb->srb_dmat, acb->srb_dmamap, BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE); in arcmsr_polling_hbb_srbdone()
3547 (acb->vir2phy_offset+(flag_srb << 5));/*frame must be 32 bytes aligned*/ in arcmsr_polling_hbb_srbdone()
3550 if((srb->acb != acb) || (srb->srb_state != ARCMSR_SRB_START)) { in arcmsr_polling_hbb_srbdone()
3554 , acb->pci_unit in arcmsr_polling_hbb_srbdone()
3563 , acb->pci_unit in arcmsr_polling_hbb_srbdone()
3564 , srb, acb->srboutstandingcount); in arcmsr_polling_hbb_srbdone()
3567 arcmsr_report_srb_state(acb, srb, error); in arcmsr_polling_hbb_srbdone()
3575 static void arcmsr_polling_hbc_srbdone(struct AdapterControlBlock *acb, struct CommandControlBlock … in arcmsr_polling_hbc_srbdone() argument
3583 bus_dmamap_sync(acb->srb_dmat, acb->srb_dmamap, BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE); in arcmsr_polling_hbc_srbdone()
3593 if (acb->srboutstandingcount == 0) { in arcmsr_polling_hbc_srbdone()
3601 …srb = (struct CommandControlBlock *)(acb->vir2phy_offset+(flag_srb & 0xFFFFFFE0));/*frame must be … in arcmsr_polling_hbc_srbdone()
3605 if((srb->acb != acb) || (srb->srb_state != ARCMSR_SRB_START)) { in arcmsr_polling_hbc_srbdone()
3608 , acb->pci_unit, srb->pccb->ccb_h.target_id, (uintmax_t)srb->pccb->ccb_h.target_lun, srb); in arcmsr_polling_hbc_srbdone()
3614 , acb->pci_unit, srb, acb->srboutstandingcount); in arcmsr_polling_hbc_srbdone()
3617 arcmsr_report_srb_state(acb, srb, error); in arcmsr_polling_hbc_srbdone()
3625 static void arcmsr_polling_hbd_srbdone(struct AdapterControlBlock *acb, struct CommandControlBlock … in arcmsr_polling_hbd_srbdone() argument
3627 struct HBD_MessageUnit0 *phbdmu = (struct HBD_MessageUnit0 *)acb->pmu; in arcmsr_polling_hbd_srbdone()
3635 bus_dmamap_sync(acb->srb_dmat, acb->srb_dmamap, BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE); in arcmsr_polling_hbd_srbdone()
3647 if (acb->srboutstandingcount == 0) { in arcmsr_polling_hbd_srbdone()
3656 …srb = (struct CommandControlBlock *)(acb->vir2phy_offset+(flag_srb & 0xFFFFFFE0));/*frame must be … in arcmsr_polling_hbd_srbdone()
3661 if((srb->acb != acb) || (srb->srb_state != ARCMSR_SRB_START)) { in arcmsr_polling_hbd_srbdone()
3664 , acb->pci_unit, srb->pccb->ccb_h.target_id, (uintmax_t)srb->pccb->ccb_h.target_lun, srb); in arcmsr_polling_hbd_srbdone()
3670 , acb->pci_unit, srb, acb->srboutstandingcount); in arcmsr_polling_hbd_srbdone()
3673 arcmsr_report_srb_state(acb, srb, error); in arcmsr_polling_hbd_srbdone()
3681 static void arcmsr_polling_hbe_srbdone(struct AdapterControlBlock *acb, struct CommandControlBlock … in arcmsr_polling_hbe_srbdone() argument
3689 bus_dmamap_sync(acb->srb_dmat, acb->srb_dmamap, BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE); in arcmsr_polling_hbe_srbdone()
3691 doneq_index = acb->doneq_index; in arcmsr_polling_hbe_srbdone()
3700 if (acb->srboutstandingcount == 0) { in arcmsr_polling_hbe_srbdone()
3706 cmdSMID = acb->pCompletionQ[doneq_index].cmdSMID; in arcmsr_polling_hbe_srbdone()
3708 if (doneq_index >= acb->completionQ_entry) in arcmsr_polling_hbe_srbdone()
3710 acb->doneq_index = doneq_index; in arcmsr_polling_hbe_srbdone()
3711 srb = acb->psrb_pool[cmdSMID]; in arcmsr_polling_hbe_srbdone()
3712 …error = (acb->pCompletionQ[doneq_index].cmdFlag & ARCMSR_SRBREPLY_FLAG_ERROR_MODE1) ? TRUE : FALSE; in arcmsr_polling_hbe_srbdone()
3715 if((srb->acb != acb) || (srb->srb_state != ARCMSR_SRB_START)) { in arcmsr_polling_hbe_srbdone()
3718 , acb->pci_unit, srb->pccb->ccb_h.target_id, (uintmax_t)srb->pccb->ccb_h.target_lun, srb); in arcmsr_polling_hbe_srbdone()
3724 , acb->pci_unit, srb, acb->srboutstandingcount); in arcmsr_polling_hbe_srbdone()
3727 arcmsr_report_srb_state(acb, srb, error); in arcmsr_polling_hbe_srbdone()
3735 static void arcmsr_polling_srbdone(struct AdapterControlBlock *acb, struct CommandControlBlock *pol… in arcmsr_polling_srbdone() argument
3737 switch (acb->adapter_type) { in arcmsr_polling_srbdone()
3739 arcmsr_polling_hba_srbdone(acb, poll_srb); in arcmsr_polling_srbdone()
3742 arcmsr_polling_hbb_srbdone(acb, poll_srb); in arcmsr_polling_srbdone()
3745 arcmsr_polling_hbc_srbdone(acb, poll_srb); in arcmsr_polling_srbdone()
3748 arcmsr_polling_hbd_srbdone(acb, poll_srb); in arcmsr_polling_srbdone()
3752 arcmsr_polling_hbe_srbdone(acb, poll_srb); in arcmsr_polling_srbdone()
3760 static void arcmsr_get_hba_config(struct AdapterControlBlock *acb) in arcmsr_get_hba_config() argument
3762 char *acb_firm_model = acb->firm_model; in arcmsr_get_hba_config()
3763 char *acb_firm_version = acb->firm_version; in arcmsr_get_hba_config()
3764 char *acb_device_map = acb->device_map; in arcmsr_get_hba_config()
3771 if(!arcmsr_hba_wait_msgint_ready(acb)) { in arcmsr_get_hba_config()
3772 printf("arcmsr%d: wait 'get adapter firmware miscellaneous data' timeout \n", acb->pci_unit); in arcmsr_get_hba_config()
3776 *acb_firm_model = bus_space_read_1(acb->btag[0], acb->bhandle[0], iop_firm_model+i); in arcmsr_get_hba_config()
3783 *acb_firm_version = bus_space_read_1(acb->btag[0], acb->bhandle[0], iop_firm_version+i); in arcmsr_get_hba_config()
3790 *acb_device_map = bus_space_read_1(acb->btag[0], acb->bhandle[0], iop_device_map+i); in arcmsr_get_hba_config()
3794 …printf("Areca RAID adapter%d: %s F/W version %s \n", acb->pci_unit, acb->firm_model, acb->firm_ver… in arcmsr_get_hba_config()
3795acb->firm_request_len = CHIP_REG_READ32(HBA_MessageUnit, 0, msgcode_rwbuffer[1]); /*firm_request… in arcmsr_get_hba_config()
3796acb->firm_numbers_queue = CHIP_REG_READ32(HBA_MessageUnit, 0, msgcode_rwbuffer[2]); /*firm_numbers… in arcmsr_get_hba_config()
3797acb->firm_sdram_size = CHIP_REG_READ32(HBA_MessageUnit, 0, msgcode_rwbuffer[3]); /*firm_sdram_s… in arcmsr_get_hba_config()
3798acb->firm_ide_channels = CHIP_REG_READ32(HBA_MessageUnit, 0, msgcode_rwbuffer[4]); /*firm_ide_cha… in arcmsr_get_hba_config()
3799acb->firm_cfg_version = CHIP_REG_READ32(HBA_MessageUnit, 0, msgcode_rwbuffer[ARCMSR_FW_CFGVER_OFFS… in arcmsr_get_hba_config()
3800 if(acb->firm_numbers_queue > ARCMSR_MAX_OUTSTANDING_CMD) in arcmsr_get_hba_config()
3801 acb->maxOutstanding = ARCMSR_MAX_OUTSTANDING_CMD - 1; in arcmsr_get_hba_config()
3803 acb->maxOutstanding = acb->firm_numbers_queue - 1; in arcmsr_get_hba_config()
3809 static void arcmsr_get_hbb_config(struct AdapterControlBlock *acb) in arcmsr_get_hbb_config() argument
3811 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_get_hbb_config()
3812 char *acb_firm_model = acb->firm_model; in arcmsr_get_hbb_config()
3813 char *acb_firm_version = acb->firm_version; in arcmsr_get_hbb_config()
3814 char *acb_device_map = acb->device_map; in arcmsr_get_hbb_config()
3821 if(!arcmsr_hbb_wait_msgint_ready(acb)) { in arcmsr_get_hbb_config()
3822 printf( "arcmsr%d: wait" "'get adapter firmware miscellaneous data' timeout \n", acb->pci_unit); in arcmsr_get_hbb_config()
3826 *acb_firm_model = bus_space_read_1(acb->btag[1], acb->bhandle[1], iop_firm_model+i); in arcmsr_get_hbb_config()
3833 *acb_firm_version = bus_space_read_1(acb->btag[1], acb->bhandle[1], iop_firm_version+i); in arcmsr_get_hbb_config()
3840 *acb_device_map = bus_space_read_1(acb->btag[1], acb->bhandle[1], iop_device_map+i); in arcmsr_get_hbb_config()
3844 …printf("Areca RAID adapter%d: %s F/W version %s \n", acb->pci_unit, acb->firm_model, acb->firm_ver… in arcmsr_get_hbb_config()
3845acb->firm_request_len = CHIP_REG_READ32(HBB_RWBUFFER, 1, msgcode_rwbuffer[1]); /*firm_request_le… in arcmsr_get_hbb_config()
3846acb->firm_numbers_queue = CHIP_REG_READ32(HBB_RWBUFFER, 1, msgcode_rwbuffer[2]); /*firm_numbers_qu… in arcmsr_get_hbb_config()
3847acb->firm_sdram_size = CHIP_REG_READ32(HBB_RWBUFFER, 1, msgcode_rwbuffer[3]); /*firm_sdram_size… in arcmsr_get_hbb_config()
3848acb->firm_ide_channels = CHIP_REG_READ32(HBB_RWBUFFER, 1, msgcode_rwbuffer[4]); /*firm_ide_channe… in arcmsr_get_hbb_config()
3849acb->firm_cfg_version = CHIP_REG_READ32(HBB_RWBUFFER, 1, msgcode_rwbuffer[ARCMSR_FW_CFGVER_OFFSET]… in arcmsr_get_hbb_config()
3850 if(acb->firm_numbers_queue > ARCMSR_MAX_HBB_POSTQUEUE) in arcmsr_get_hbb_config()
3851 acb->maxOutstanding = ARCMSR_MAX_HBB_POSTQUEUE - 1; in arcmsr_get_hbb_config()
3853 acb->maxOutstanding = acb->firm_numbers_queue - 1; in arcmsr_get_hbb_config()
3859 static void arcmsr_get_hbc_config(struct AdapterControlBlock *acb) in arcmsr_get_hbc_config() argument
3861 char *acb_firm_model = acb->firm_model; in arcmsr_get_hbc_config()
3862 char *acb_firm_version = acb->firm_version; in arcmsr_get_hbc_config()
3863 char *acb_device_map = acb->device_map; in arcmsr_get_hbc_config()
3871 if(!arcmsr_hbc_wait_msgint_ready(acb)) { in arcmsr_get_hbc_config()
3872 printf("arcmsr%d: wait 'get adapter firmware miscellaneous data' timeout \n", acb->pci_unit); in arcmsr_get_hbc_config()
3876 *acb_firm_model = bus_space_read_1(acb->btag[0], acb->bhandle[0], iop_firm_model+i); in arcmsr_get_hbc_config()
3883 *acb_firm_version = bus_space_read_1(acb->btag[0], acb->bhandle[0], iop_firm_version+i); in arcmsr_get_hbc_config()
3890 *acb_device_map = bus_space_read_1(acb->btag[0], acb->bhandle[0], iop_device_map+i); in arcmsr_get_hbc_config()
3894 …printf("Areca RAID adapter%d: %s F/W version %s \n", acb->pci_unit, acb->firm_model, acb->firm_ver… in arcmsr_get_hbc_config()
3895acb->firm_request_len = CHIP_REG_READ32(HBC_MessageUnit, 0, msgcode_rwbuffer[1]); /*firm_request_l… in arcmsr_get_hbc_config()
3896acb->firm_numbers_queue = CHIP_REG_READ32(HBC_MessageUnit, 0, msgcode_rwbuffer[2]); /*firm_numbers… in arcmsr_get_hbc_config()
3897acb->firm_sdram_size = CHIP_REG_READ32(HBC_MessageUnit, 0, msgcode_rwbuffer[3]); /*firm_sdram_size… in arcmsr_get_hbc_config()
3898acb->firm_ide_channels = CHIP_REG_READ32(HBC_MessageUnit, 0, msgcode_rwbuffer[4]); /*firm_ide_chan… in arcmsr_get_hbc_config()
3899acb->firm_cfg_version = CHIP_REG_READ32(HBC_MessageUnit, 0, msgcode_rwbuffer[ARCMSR_FW_CFGVER_OFFS… in arcmsr_get_hbc_config()
3900 if(acb->firm_numbers_queue > ARCMSR_MAX_OUTSTANDING_CMD) in arcmsr_get_hbc_config()
3901 acb->maxOutstanding = ARCMSR_MAX_OUTSTANDING_CMD - 1; in arcmsr_get_hbc_config()
3903 acb->maxOutstanding = acb->firm_numbers_queue - 1; in arcmsr_get_hbc_config()
3909 static void arcmsr_get_hbd_config(struct AdapterControlBlock *acb) in arcmsr_get_hbd_config() argument
3911 char *acb_firm_model = acb->firm_model; in arcmsr_get_hbd_config()
3912 char *acb_firm_version = acb->firm_version; in arcmsr_get_hbd_config()
3913 char *acb_device_map = acb->device_map; in arcmsr_get_hbd_config()
3922 if(!arcmsr_hbd_wait_msgint_ready(acb)) { in arcmsr_get_hbd_config()
3923 printf("arcmsr%d: wait 'get adapter firmware miscellaneous data' timeout \n", acb->pci_unit); in arcmsr_get_hbd_config()
3927 *acb_firm_model = bus_space_read_1(acb->btag[0], acb->bhandle[0], iop_firm_model+i); in arcmsr_get_hbd_config()
3934 *acb_firm_version = bus_space_read_1(acb->btag[0], acb->bhandle[0], iop_firm_version+i); in arcmsr_get_hbd_config()
3941 *acb_device_map = bus_space_read_1(acb->btag[0], acb->bhandle[0], iop_device_map+i); in arcmsr_get_hbd_config()
3945 …printf("Areca RAID adapter%d: %s F/W version %s \n", acb->pci_unit, acb->firm_model, acb->firm_ver… in arcmsr_get_hbd_config()
3946acb->firm_request_len = CHIP_REG_READ32(HBD_MessageUnit, 0, msgcode_rwbuffer[1]); /*firm_request_l… in arcmsr_get_hbd_config()
3947acb->firm_numbers_queue = CHIP_REG_READ32(HBD_MessageUnit, 0, msgcode_rwbuffer[2]); /*firm_numbers… in arcmsr_get_hbd_config()
3948acb->firm_sdram_size = CHIP_REG_READ32(HBD_MessageUnit, 0, msgcode_rwbuffer[3]); /*firm_sdram_size… in arcmsr_get_hbd_config()
3949acb->firm_ide_channels = CHIP_REG_READ32(HBD_MessageUnit, 0, msgcode_rwbuffer[4]); /*firm_ide_chan… in arcmsr_get_hbd_config()
3950acb->firm_cfg_version = CHIP_REG_READ32(HBD_MessageUnit, 0, msgcode_rwbuffer[ARCMSR_FW_CFGVER_OFFS… in arcmsr_get_hbd_config()
3951 if(acb->firm_numbers_queue > ARCMSR_MAX_HBD_POSTQUEUE) in arcmsr_get_hbd_config()
3952 acb->maxOutstanding = ARCMSR_MAX_HBD_POSTQUEUE - 1; in arcmsr_get_hbd_config()
3954 acb->maxOutstanding = acb->firm_numbers_queue - 1; in arcmsr_get_hbd_config()
3960 static void arcmsr_get_hbe_config(struct AdapterControlBlock *acb) in arcmsr_get_hbe_config() argument
3962 char *acb_firm_model = acb->firm_model; in arcmsr_get_hbe_config()
3963 char *acb_firm_version = acb->firm_version; in arcmsr_get_hbe_config()
3964 char *acb_device_map = acb->device_map; in arcmsr_get_hbe_config()
3971 acb->out_doorbell ^= ARCMSR_HBEMU_DRV2IOP_MESSAGE_CMD_DONE; in arcmsr_get_hbe_config()
3972 CHIP_REG_WRITE32(HBE_MessageUnit, 0, iobound_doorbell, acb->out_doorbell); in arcmsr_get_hbe_config()
3973 if(!arcmsr_hbe_wait_msgint_ready(acb)) { in arcmsr_get_hbe_config()
3974 printf("arcmsr%d: wait 'get adapter firmware miscellaneous data' timeout \n", acb->pci_unit); in arcmsr_get_hbe_config()
3979 *acb_firm_model = bus_space_read_1(acb->btag[0], acb->bhandle[0], iop_firm_model+i); in arcmsr_get_hbe_config()
3986 *acb_firm_version = bus_space_read_1(acb->btag[0], acb->bhandle[0], iop_firm_version+i); in arcmsr_get_hbe_config()
3993 *acb_device_map = bus_space_read_1(acb->btag[0], acb->bhandle[0], iop_device_map+i); in arcmsr_get_hbe_config()
3997 …printf("Areca RAID adapter%d: %s F/W version %s \n", acb->pci_unit, acb->firm_model, acb->firm_ver… in arcmsr_get_hbe_config()
3998acb->firm_request_len = CHIP_REG_READ32(HBE_MessageUnit, 0, msgcode_rwbuffer[1]); /*firm_request_l… in arcmsr_get_hbe_config()
3999acb->firm_numbers_queue = CHIP_REG_READ32(HBE_MessageUnit, 0, msgcode_rwbuffer[2]); /*firm_numbers… in arcmsr_get_hbe_config()
4000acb->firm_sdram_size = CHIP_REG_READ32(HBE_MessageUnit, 0, msgcode_rwbuffer[3]); /*firm_sdram_size… in arcmsr_get_hbe_config()
4001acb->firm_ide_channels = CHIP_REG_READ32(HBE_MessageUnit, 0, msgcode_rwbuffer[4]); /*firm_ide_chan… in arcmsr_get_hbe_config()
4002acb->firm_cfg_version = CHIP_REG_READ32(HBE_MessageUnit, 0, msgcode_rwbuffer[ARCMSR_FW_CFGVER_OFFS… in arcmsr_get_hbe_config()
4003 if(acb->firm_numbers_queue > ARCMSR_MAX_OUTSTANDING_CMD) in arcmsr_get_hbe_config()
4004 acb->maxOutstanding = ARCMSR_MAX_OUTSTANDING_CMD - 1; in arcmsr_get_hbe_config()
4006 acb->maxOutstanding = acb->firm_numbers_queue - 1; in arcmsr_get_hbe_config()
4012 static void arcmsr_get_hbf_config(struct AdapterControlBlock *acb) in arcmsr_get_hbf_config() argument
4014 u_int32_t *acb_firm_model = (u_int32_t *)acb->firm_model; in arcmsr_get_hbf_config()
4015 u_int32_t *acb_firm_version = (u_int32_t *)acb->firm_version; in arcmsr_get_hbf_config()
4016 u_int32_t *acb_device_map = (u_int32_t *)acb->device_map; in arcmsr_get_hbf_config()
4023 acb->out_doorbell ^= ARCMSR_HBEMU_DRV2IOP_MESSAGE_CMD_DONE; in arcmsr_get_hbf_config()
4024 CHIP_REG_WRITE32(HBE_MessageUnit, 0, iobound_doorbell, acb->out_doorbell); in arcmsr_get_hbf_config()
4025 if(!arcmsr_hbe_wait_msgint_ready(acb)) in arcmsr_get_hbf_config()
4026 printf("arcmsr%d: wait 'get adapter firmware miscellaneous data' timeout \n", acb->pci_unit); in arcmsr_get_hbf_config()
4030 *acb_firm_model = acb->msgcode_rwbuffer[iop_firm_model]; in arcmsr_get_hbf_config()
4038 *acb_firm_version = acb->msgcode_rwbuffer[iop_firm_version]; in arcmsr_get_hbf_config()
4046 *acb_device_map = acb->msgcode_rwbuffer[iop_device_map]; in arcmsr_get_hbf_config()
4051 …printf("Areca RAID adapter%d: %s F/W version %s \n", acb->pci_unit, acb->firm_model, acb->firm_ver… in arcmsr_get_hbf_config()
4052 acb->firm_request_len = acb->msgcode_rwbuffer[1]; /*firm_request_len, 1, 04-07*/ in arcmsr_get_hbf_config()
4053 acb->firm_numbers_queue = acb->msgcode_rwbuffer[2]; /*firm_numbers_queue, 2, 08-11*/ in arcmsr_get_hbf_config()
4054 acb->firm_sdram_size = acb->msgcode_rwbuffer[3]; /*firm_sdram_size, 3, 12-15*/ in arcmsr_get_hbf_config()
4055 acb->firm_ide_channels = acb->msgcode_rwbuffer[4]; /*firm_ide_channels, 4, 16-19*/ in arcmsr_get_hbf_config()
4056 acb->firm_cfg_version = acb->msgcode_rwbuffer[ARCMSR_FW_CFGVER_OFFSET]; /*firm_cfg_version, 25*/ in arcmsr_get_hbf_config()
4057 acb->firm_PicStatus = acb->msgcode_rwbuffer[ARCMSR_FW_PICSTATUS]; /* firm_PicStatus, 30 */ in arcmsr_get_hbf_config()
4058 if(acb->firm_numbers_queue > ARCMSR_MAX_OUTSTANDING_CMD) in arcmsr_get_hbf_config()
4059 acb->maxOutstanding = ARCMSR_MAX_OUTSTANDING_CMD - 1; in arcmsr_get_hbf_config()
4061 acb->maxOutstanding = acb->firm_numbers_queue - 1; in arcmsr_get_hbf_config()
4067 static void arcmsr_get_firmware_spec(struct AdapterControlBlock *acb) in arcmsr_get_firmware_spec() argument
4069 switch (acb->adapter_type) { in arcmsr_get_firmware_spec()
4071 arcmsr_get_hba_config(acb); in arcmsr_get_firmware_spec()
4074 arcmsr_get_hbb_config(acb); in arcmsr_get_firmware_spec()
4077 arcmsr_get_hbc_config(acb); in arcmsr_get_firmware_spec()
4080 arcmsr_get_hbd_config(acb); in arcmsr_get_firmware_spec()
4083 arcmsr_get_hbe_config(acb); in arcmsr_get_firmware_spec()
4086 arcmsr_get_hbf_config(acb); in arcmsr_get_firmware_spec()
4094 static void arcmsr_wait_firmware_ready( struct AdapterControlBlock *acb) in arcmsr_wait_firmware_ready() argument
4098 switch (acb->adapter_type) { in arcmsr_wait_firmware_ready()
4104 printf( "arcmsr%d:timed out waiting for firmware \n", acb->pci_unit); in arcmsr_wait_firmware_ready()
4112 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_wait_firmware_ready()
4117 printf( "arcmsr%d: timed out waiting for firmware \n", acb->pci_unit); in arcmsr_wait_firmware_ready()
4130 printf( "arcmsr%d:timed out waiting for firmware ready\n", acb->pci_unit); in arcmsr_wait_firmware_ready()
4142 printf( "arcmsr%d:timed out waiting for firmware ready\n", acb->pci_unit); in arcmsr_wait_firmware_ready()
4155 printf( "arcmsr%d:timed out waiting for firmware ready\n", acb->pci_unit); in arcmsr_wait_firmware_ready()
4168 static void arcmsr_clear_doorbell_queue_buffer( struct AdapterControlBlock *acb) in arcmsr_clear_doorbell_queue_buffer() argument
4172 switch (acb->adapter_type) { in arcmsr_clear_doorbell_queue_buffer()
4181 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_clear_doorbell_queue_buffer()
4206 acb->in_doorbell = CHIP_REG_READ32(HBE_MessageUnit, 0, iobound_doorbell); in arcmsr_clear_doorbell_queue_buffer()
4208 acb->out_doorbell ^= ARCMSR_HBEMU_DRV2IOP_DATA_READ_OK; in arcmsr_clear_doorbell_queue_buffer()
4209 CHIP_REG_WRITE32(HBE_MessageUnit, 0, iobound_doorbell, acb->out_doorbell); in arcmsr_clear_doorbell_queue_buffer()
4218 static u_int32_t arcmsr_iop_confirm(struct AdapterControlBlock *acb) in arcmsr_iop_confirm() argument
4230 srb_phyaddr = (unsigned long) acb->srb_phyaddr.phyaddr; in arcmsr_iop_confirm()
4231 srb_phyaddr_hi32 = acb->srb_phyaddr.B.phyadd_high; in arcmsr_iop_confirm()
4232 srb_phyaddr_lo32 = acb->srb_phyaddr.B.phyadd_low; in arcmsr_iop_confirm()
4233 switch (acb->adapter_type) { in arcmsr_iop_confirm()
4239 if(!arcmsr_hba_wait_msgint_ready(acb)) { in arcmsr_iop_confirm()
4240 printf( "arcmsr%d: 'set srb high part physical address' timeout \n", acb->pci_unit); in arcmsr_iop_confirm()
4255 phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_iop_confirm()
4259 if(!arcmsr_hbb_wait_msgint_ready(acb)) { in arcmsr_iop_confirm()
4260 printf( "arcmsr%d: 'set window of post command Q' timeout\n", acb->pci_unit); in arcmsr_iop_confirm()
4271 if(!arcmsr_hbb_wait_msgint_ready(acb)) { in arcmsr_iop_confirm()
4272 printf( "arcmsr%d: 'set command Q window' timeout \n", acb->pci_unit); in arcmsr_iop_confirm()
4276 if(!arcmsr_hbb_wait_msgint_ready(acb)) { in arcmsr_iop_confirm()
4277 printf( "arcmsr%d: 'start diver mode' timeout \n", acb->pci_unit); in arcmsr_iop_confirm()
4288 if(!arcmsr_hbc_wait_msgint_ready(acb)) { in arcmsr_iop_confirm()
4289 printf( "arcmsr%d: 'set srb high part physical address' timeout \n", acb->pci_unit); in arcmsr_iop_confirm()
4299 phbdmu = (struct HBD_MessageUnit0 *)acb->pmu; in arcmsr_iop_confirm()
4312 if(!arcmsr_hbd_wait_msgint_ready(acb)) { in arcmsr_iop_confirm()
4313 printf( "arcmsr%d: 'set srb high part physical address' timeout \n", acb->pci_unit); in arcmsr_iop_confirm()
4331 acb->out_doorbell ^= ARCMSR_HBEMU_DRV2IOP_MESSAGE_CMD_DONE; in arcmsr_iop_confirm()
4332 CHIP_REG_WRITE32(HBE_MessageUnit, 0, iobound_doorbell, acb->out_doorbell); in arcmsr_iop_confirm()
4333 if(!arcmsr_hbe_wait_msgint_ready(acb)) { in arcmsr_iop_confirm()
4334 printf( "arcmsr%d: 'set srb high part physical address' timeout \n", acb->pci_unit); in arcmsr_iop_confirm()
4342 acb->msgcode_rwbuffer[0] = ARCMSR_SIGNATURE_SET_CONFIG; in arcmsr_iop_confirm()
4343 acb->msgcode_rwbuffer[1] = ARCMSR_SIGNATURE_1886; in arcmsr_iop_confirm()
4344 acb->msgcode_rwbuffer[2] = cdb_phyaddr_lo32; in arcmsr_iop_confirm()
4345 acb->msgcode_rwbuffer[3] = srb_phyaddr_hi32; in arcmsr_iop_confirm()
4346 acb->msgcode_rwbuffer[4] = SRB_SIZE; in arcmsr_iop_confirm()
4348 acb->msgcode_rwbuffer[5] = cdb_phyaddr_lo32; in arcmsr_iop_confirm()
4349 acb->msgcode_rwbuffer[6] = srb_phyaddr_hi32; in arcmsr_iop_confirm()
4350 acb->msgcode_rwbuffer[7] = COMPLETION_Q_POOL_SIZE; in arcmsr_iop_confirm()
4351 if (acb->xor_mega) { in arcmsr_iop_confirm()
4352 acb->msgcode_rwbuffer[8] = 0x555AA; //FreeBSD init 2 in arcmsr_iop_confirm()
4353 acb->msgcode_rwbuffer[9] = 0; in arcmsr_iop_confirm()
4354 acb->msgcode_rwbuffer[10] = (uint32_t)acb->xor_sgtable_phy; in arcmsr_iop_confirm()
4355 acb->msgcode_rwbuffer[11] = (uint32_t)((acb->xor_sgtable_phy >> 16) >> 16); in arcmsr_iop_confirm()
4358 acb->out_doorbell ^= ARCMSR_HBEMU_DRV2IOP_MESSAGE_CMD_DONE; in arcmsr_iop_confirm()
4359 CHIP_REG_WRITE32(HBF_MessageUnit, 0, iobound_doorbell, acb->out_doorbell); in arcmsr_iop_confirm()
4360 if(!arcmsr_hbe_wait_msgint_ready(acb)) { in arcmsr_iop_confirm()
4361 printf( "arcmsr%d: 'set srb high part physical address' timeout \n", acb->pci_unit); in arcmsr_iop_confirm()
4373 static void arcmsr_enable_eoi_mode(struct AdapterControlBlock *acb) in arcmsr_enable_eoi_mode() argument
4375 if (acb->adapter_type == ACB_ADAPTER_TYPE_B) in arcmsr_enable_eoi_mode()
4377 struct HBB_MessageUnit *phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_enable_eoi_mode()
4379 if(!arcmsr_hbb_wait_msgint_ready(acb)) { in arcmsr_enable_eoi_mode()
4380 printf( "arcmsr%d: 'iop enable eoi mode' timeout \n", acb->pci_unit); in arcmsr_enable_eoi_mode()
4389 static void arcmsr_iop_init(struct AdapterControlBlock *acb) in arcmsr_iop_init() argument
4394 intmask_org = arcmsr_disable_allintr(acb); in arcmsr_iop_init()
4395 arcmsr_wait_firmware_ready(acb); in arcmsr_iop_init()
4396 arcmsr_iop_confirm(acb); in arcmsr_iop_init()
4397 arcmsr_get_firmware_spec(acb); in arcmsr_iop_init()
4399 arcmsr_start_adapter_bgrb(acb); in arcmsr_iop_init()
4401 arcmsr_clear_doorbell_queue_buffer(acb); in arcmsr_iop_init()
4402 arcmsr_enable_eoi_mode(acb); in arcmsr_iop_init()
4404 arcmsr_enable_allintr(acb, intmask_org); in arcmsr_iop_init()
4405 acb->acb_flags |= ACB_F_IOP_INITED; in arcmsr_iop_init()
4413 struct AdapterControlBlock *acb = arg; in arcmsr_map_free_srb() local
4418 acb->srb_phyaddr.phyaddr = srb_phyaddr; in arcmsr_map_free_srb()
4419 srb_tmp = (struct CommandControlBlock *)acb->uncacheptr; in arcmsr_map_free_srb()
4421 if(bus_dmamap_create(acb->dm_segs_dmat, in arcmsr_map_free_srb()
4423 acb->acb_flags |= ACB_F_MAPFREESRB_FAILD; in arcmsr_map_free_srb()
4425 " srb dmamap bus_dmamap_create error\n", acb->pci_unit); in arcmsr_map_free_srb()
4428 if((acb->adapter_type == ACB_ADAPTER_TYPE_C) || (acb->adapter_type == ACB_ADAPTER_TYPE_D) in arcmsr_map_free_srb()
4429 || (acb->adapter_type == ACB_ADAPTER_TYPE_E) || (acb->adapter_type == ACB_ADAPTER_TYPE_F)) in arcmsr_map_free_srb()
4435 srb_tmp->acb = acb; in arcmsr_map_free_srb()
4437 acb->srbworkingQ[i] = acb->psrb_pool[i] = srb_tmp; in arcmsr_map_free_srb()
4441 srb_tmp = (struct CommandControlBlock *)(acb->uncacheptr + ARCMSR_SRBS_POOL_SIZE); in arcmsr_map_free_srb()
4443 switch (acb->adapter_type) { in arcmsr_map_free_srb()
4447 acb->pmu = (struct MessageUnit_UNION *)srb_tmp; in arcmsr_map_free_srb()
4448 phbbmu = (struct HBB_MessageUnit *)acb->pmu; in arcmsr_map_free_srb()
4449 phbbmu->hbb_doorbell = (struct HBB_DOORBELL *)acb->mem_base0; in arcmsr_map_free_srb()
4450 phbbmu->hbb_rwbuffer = (struct HBB_RWBUFFER *)acb->mem_base1; in arcmsr_map_free_srb()
4451 if (acb->vendor_device_id == PCIDevVenIDARC1203) { in arcmsr_map_free_srb()
4465 acb->pmu = (struct MessageUnit_UNION *)srb_tmp; in arcmsr_map_free_srb()
4466 acb->pmu->muu.hbdmu.phbdmu = (struct HBD_MessageUnit *)acb->mem_base0; in arcmsr_map_free_srb()
4469 acb->pCompletionQ = (pCompletion_Q)srb_tmp; in arcmsr_map_free_srb()
4473 acb->pCompletionQ = (pCompletion_Q)srb_tmp; in arcmsr_map_free_srb()
4474 acb->completeQ_phys = srb_phyaddr; in arcmsr_map_free_srb()
4475 memset(acb->pCompletionQ, 0xff, COMPLETION_Q_POOL_SIZE); in arcmsr_map_free_srb()
4476 acb->message_wbuffer = (u_int32_t *)((unsigned long)acb->pCompletionQ + COMPLETION_Q_POOL_SIZE); in arcmsr_map_free_srb()
4477 acb->message_rbuffer = (u_int32_t *)((unsigned long)acb->message_wbuffer + 0x100); in arcmsr_map_free_srb()
4478 acb->msgcode_rwbuffer = (u_int32_t *)((unsigned long)acb->message_wbuffer + 0x200); in arcmsr_map_free_srb()
4479 memset((void *)acb->message_wbuffer, 0, MESG_RW_BUFFER_SIZE); in arcmsr_map_free_srb()
4480 arcmsr_wait_firmware_ready(acb); in arcmsr_map_free_srb()
4481 host_buffer_dma = acb->completeQ_phys + COMPLETION_Q_POOL_SIZE; in arcmsr_map_free_srb()
4485acb->firm_PicStatus = CHIP_REG_READ32(HBF_MessageUnit, 0, outbound_msgaddr1); /* get firmware spec… in arcmsr_map_free_srb()
4489 acb->vir2phy_offset = (unsigned long)srb_tmp - (unsigned long)srb_phyaddr; in arcmsr_map_free_srb()
4494 struct AdapterControlBlock *acb = arg; in arcmsr_map_xor_sgtable() local
4496 acb->xor_sgtable_phy = (unsigned long)segs->ds_addr; in arcmsr_map_xor_sgtable()
4497 if ((nseg != 1) || ((u_int32_t)segs->ds_len != acb->init2cfg_size)) { in arcmsr_map_xor_sgtable()
4498 acb->acb_flags |= ACB_F_MAPXOR_FAILD; in arcmsr_map_xor_sgtable()
4499 printf("arcmsr%d: alloc xor table seg num or size not as i wish!\n", acb->pci_unit); in arcmsr_map_xor_sgtable()
4506 struct AdapterControlBlock *acb = arg; in arcmsr_map_xor_sg() local
4509 struct XorSg *pxortable = (struct XorSg *)(acb->xortable + sizeof(struct HostRamBuf)); in arcmsr_map_xor_sg()
4511 if (nseg != acb->xor_mega) { in arcmsr_map_xor_sg()
4512 acb->acb_flags |= ACB_F_MAPXOR_FAILD; in arcmsr_map_xor_sg()
4513 printf("arcmsr%d: alloc xor seg NUM not as i wish!\n", acb->pci_unit); in arcmsr_map_xor_sg()
4518 acb->acb_flags |= ACB_F_MAPXOR_FAILD; in arcmsr_map_xor_sg()
4519 printf("arcmsr%d: alloc xor seg SIZE not as i wish!\n", acb->pci_unit); in arcmsr_map_xor_sg()
4527 pRamBuf = (struct HostRamBuf *)acb->xortable; in arcmsr_map_xor_sg()
4532 bus_dmamap_sync(acb->xortable_dmat, acb->xortable_dmamap, BUS_DMASYNC_PREREAD); in arcmsr_map_xor_sg()
4533 bus_dmamap_sync(acb->xor_dmat, acb->xor_dmamap, BUS_DMASYNC_PREWRITE); in arcmsr_map_xor_sg()
4540 static void arcmsr_free_resource(struct AdapterControlBlock *acb) in arcmsr_free_resource() argument
4543 if(acb->ioctl_dev != NULL) { in arcmsr_free_resource()
4544 destroy_dev(acb->ioctl_dev); in arcmsr_free_resource()
4546 if (acb->acb_flags & ACB_F_DMAMAP_SG) in arcmsr_free_resource()
4547 bus_dmamap_unload(acb->xor_dmat, acb->xor_dmamap); in arcmsr_free_resource()
4548 if (acb->xor_dmamap) { in arcmsr_free_resource()
4549 bus_dmamem_free(acb->xor_dmat, acb->xorptr, acb->xor_dmamap); in arcmsr_free_resource()
4551 if (acb->acb_flags & ACB_F_DMAMAP_SGTABLE) in arcmsr_free_resource()
4552 bus_dmamap_unload(acb->xortable_dmat, acb->xortable_dmamap); in arcmsr_free_resource()
4553 if (acb->xortable_dmamap) { in arcmsr_free_resource()
4554 bus_dmamem_free(acb->xortable_dmat, acb->xortable, acb->xortable_dmamap); in arcmsr_free_resource()
4556 if (acb->acb_flags & ACB_F_DMAMAP_SRB) in arcmsr_free_resource()
4557 bus_dmamap_unload(acb->srb_dmat, acb->srb_dmamap); in arcmsr_free_resource()
4558 if (acb->srb_dmamap) { in arcmsr_free_resource()
4559 bus_dmamem_free(acb->srb_dmat, acb->uncacheptr, acb->srb_dmamap); in arcmsr_free_resource()
4561 if (acb->srb_dmat) in arcmsr_free_resource()
4562 bus_dma_tag_destroy(acb->srb_dmat); in arcmsr_free_resource()
4563 if (acb->dm_segs_dmat) in arcmsr_free_resource()
4564 bus_dma_tag_destroy(acb->dm_segs_dmat); in arcmsr_free_resource()
4565 if (acb->parent_dmat) in arcmsr_free_resource()
4566 bus_dma_tag_destroy(acb->parent_dmat); in arcmsr_free_resource()
4567 switch(acb->adapter_type) { in arcmsr_free_resource()
4569 if (acb->sys_res_arcmsr[0]) in arcmsr_free_resource()
4570 bus_release_resource(acb->pci_dev, SYS_RES_MEMORY, PCIR_BAR(0), acb->sys_res_arcmsr[0]); in arcmsr_free_resource()
4573 if (acb->sys_res_arcmsr[0]) in arcmsr_free_resource()
4574 bus_release_resource(acb->pci_dev, SYS_RES_MEMORY, PCIR_BAR(0), acb->sys_res_arcmsr[0]); in arcmsr_free_resource()
4575 if (acb->sys_res_arcmsr[1]) in arcmsr_free_resource()
4576 bus_release_resource(acb->pci_dev, SYS_RES_MEMORY, PCIR_BAR(2), acb->sys_res_arcmsr[1]); in arcmsr_free_resource()
4579 if (acb->sys_res_arcmsr[0]) in arcmsr_free_resource()
4580 bus_release_resource(acb->pci_dev, SYS_RES_MEMORY, PCIR_BAR(1), acb->sys_res_arcmsr[0]); in arcmsr_free_resource()
4583 if (acb->sys_res_arcmsr[0]) in arcmsr_free_resource()
4584 bus_release_resource(acb->pci_dev, SYS_RES_MEMORY, PCIR_BAR(0), acb->sys_res_arcmsr[0]); in arcmsr_free_resource()
4587 if (acb->sys_res_arcmsr[0]) in arcmsr_free_resource()
4588 bus_release_resource(acb->pci_dev, SYS_RES_MEMORY, PCIR_BAR(1), acb->sys_res_arcmsr[0]); in arcmsr_free_resource()
4591 if (acb->sys_res_arcmsr[0]) in arcmsr_free_resource()
4592 bus_release_resource(acb->pci_dev, SYS_RES_MEMORY, PCIR_BAR(0), acb->sys_res_arcmsr[0]); in arcmsr_free_resource()
4600 static void arcmsr_mutex_init(struct AdapterControlBlock *acb) in arcmsr_mutex_init() argument
4602 ARCMSR_LOCK_INIT(&acb->isr_lock, "arcmsr isr lock"); in arcmsr_mutex_init()
4603 ARCMSR_LOCK_INIT(&acb->srb_lock, "arcmsr srb lock"); in arcmsr_mutex_init()
4604 ARCMSR_LOCK_INIT(&acb->postDone_lock, "arcmsr postQ lock"); in arcmsr_mutex_init()
4605 ARCMSR_LOCK_INIT(&acb->qbuffer_lock, "arcmsr RW buffer lock"); in arcmsr_mutex_init()
4611 static void arcmsr_mutex_destroy(struct AdapterControlBlock *acb) in arcmsr_mutex_destroy() argument
4613 ARCMSR_LOCK_DESTROY(&acb->qbuffer_lock); in arcmsr_mutex_destroy()
4614 ARCMSR_LOCK_DESTROY(&acb->postDone_lock); in arcmsr_mutex_destroy()
4615 ARCMSR_LOCK_DESTROY(&acb->srb_lock); in arcmsr_mutex_destroy()
4616 ARCMSR_LOCK_DESTROY(&acb->isr_lock); in arcmsr_mutex_destroy()
4622 static int arcmsr_define_adapter_type(struct AdapterControlBlock *acb) in arcmsr_define_adapter_type() argument
4626 switch (acb->vendor_device_id) { in arcmsr_define_adapter_type()
4632 acb->adapter_type = ACB_ADAPTER_TYPE_C; in arcmsr_define_adapter_type()
4633 if ((acb->sub_device_id == ARECA_SUB_DEV_ID_1883) || in arcmsr_define_adapter_type()
4634 (acb->sub_device_id == ARECA_SUB_DEV_ID_1216) || in arcmsr_define_adapter_type()
4635 (acb->sub_device_id == ARECA_SUB_DEV_ID_1226)) in arcmsr_define_adapter_type()
4636 acb->adapter_bus_speed = ACB_BUS_SPEED_12G; in arcmsr_define_adapter_type()
4638 acb->adapter_bus_speed = ACB_BUS_SPEED_6G; in arcmsr_define_adapter_type()
4639 acb->max_coherent_size = ARCMSR_SRBS_POOL_SIZE; in arcmsr_define_adapter_type()
4643 acb->adapter_type = ACB_ADAPTER_TYPE_E; in arcmsr_define_adapter_type()
4644 acb->adapter_bus_speed = ACB_BUS_SPEED_12G; in arcmsr_define_adapter_type()
4645 acb->max_coherent_size = ARCMSR_SRBS_POOL_SIZE + COMPLETION_Q_POOL_SIZE; in arcmsr_define_adapter_type()
4646 acb->completionQ_entry = COMPLETION_Q_POOL_SIZE / sizeof(struct deliver_completeQ); in arcmsr_define_adapter_type()
4651 acb->adapter_type = ACB_ADAPTER_TYPE_F; in arcmsr_define_adapter_type()
4652 acb->adapter_bus_speed = ACB_BUS_SPEED_12G; in arcmsr_define_adapter_type()
4653 acb->max_coherent_size = ARCMSR_SRBS_POOL_SIZE + COMPLETION_Q_POOL_SIZE + MESG_RW_BUFFER_SIZE; in arcmsr_define_adapter_type()
4654 acb->completionQ_entry = COMPLETION_Q_POOL_SIZE / sizeof(struct deliver_completeQ); in arcmsr_define_adapter_type()
4658 acb->adapter_type = ACB_ADAPTER_TYPE_D; in arcmsr_define_adapter_type()
4659 acb->adapter_bus_speed = ACB_BUS_SPEED_6G; in arcmsr_define_adapter_type()
4660 acb->max_coherent_size = ARCMSR_SRBS_POOL_SIZE + (sizeof(struct HBD_MessageUnit0)); in arcmsr_define_adapter_type()
4665 acb->adapter_type = ACB_ADAPTER_TYPE_B; in arcmsr_define_adapter_type()
4666 acb->adapter_bus_speed = ACB_BUS_SPEED_3G; in arcmsr_define_adapter_type()
4667 acb->max_coherent_size = ARCMSR_SRBS_POOL_SIZE + (sizeof(struct HBB_MessageUnit)); in arcmsr_define_adapter_type()
4671 acb->adapter_type = ACB_ADAPTER_TYPE_B; in arcmsr_define_adapter_type()
4672 acb->adapter_bus_speed = ACB_BUS_SPEED_6G; in arcmsr_define_adapter_type()
4673 acb->max_coherent_size = ARCMSR_SRBS_POOL_SIZE + (sizeof(struct HBB_MessageUnit)); in arcmsr_define_adapter_type()
4695 acb->adapter_type = ACB_ADAPTER_TYPE_A; in arcmsr_define_adapter_type()
4696 acb->adapter_bus_speed = ACB_BUS_SPEED_3G; in arcmsr_define_adapter_type()
4697 acb->max_coherent_size = ARCMSR_SRBS_POOL_SIZE; in arcmsr_define_adapter_type()
4702 " unknown RAID adapter type \n", acb->pci_unit); in arcmsr_define_adapter_type()
4709 static int arcmsr_map_pcireg(device_t dev, struct AdapterControlBlock *acb) in arcmsr_map_pcireg() argument
4711 switch(acb->adapter_type) { in arcmsr_map_pcireg()
4716 acb->sys_res_arcmsr[0] = bus_alloc_resource_any(dev,SYS_RES_MEMORY, &rid0, RF_ACTIVE); in arcmsr_map_pcireg()
4717 if(acb->sys_res_arcmsr[0] == NULL) { in arcmsr_map_pcireg()
4718 arcmsr_free_resource(acb); in arcmsr_map_pcireg()
4719 printf("arcmsr%d: bus_alloc_resource failure!\n", acb->pci_unit); in arcmsr_map_pcireg()
4722 if(rman_get_start(acb->sys_res_arcmsr[0]) <= 0) { in arcmsr_map_pcireg()
4723 arcmsr_free_resource(acb); in arcmsr_map_pcireg()
4724 printf("arcmsr%d: rman_get_start failure!\n", acb->pci_unit); in arcmsr_map_pcireg()
4727 mem_base0 = (vm_offset_t) rman_get_virtual(acb->sys_res_arcmsr[0]); in arcmsr_map_pcireg()
4729 arcmsr_free_resource(acb); in arcmsr_map_pcireg()
4730 printf("arcmsr%d: rman_get_virtual failure!\n", acb->pci_unit); in arcmsr_map_pcireg()
4733 acb->btag[0] = rman_get_bustag(acb->sys_res_arcmsr[0]); in arcmsr_map_pcireg()
4734 acb->bhandle[0] = rman_get_bushandle(acb->sys_res_arcmsr[0]); in arcmsr_map_pcireg()
4735 acb->pmu = (struct MessageUnit_UNION *)mem_base0; in arcmsr_map_pcireg()
4736 acb->rid[0] = rid0; in arcmsr_map_pcireg()
4745 acb->sys_res_arcmsr[i] = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid[i], RF_ACTIVE); in arcmsr_map_pcireg()
4746 if(acb->sys_res_arcmsr[i] == NULL) { in arcmsr_map_pcireg()
4747 arcmsr_free_resource(acb); in arcmsr_map_pcireg()
4748 printf("arcmsr%d: bus_alloc_resource %d failure!\n", acb->pci_unit, i); in arcmsr_map_pcireg()
4751 if(rman_get_start(acb->sys_res_arcmsr[i]) <= 0) { in arcmsr_map_pcireg()
4752 arcmsr_free_resource(acb); in arcmsr_map_pcireg()
4753 printf("arcmsr%d: rman_get_start %d failure!\n", acb->pci_unit, i); in arcmsr_map_pcireg()
4756 mem_base[i] = (vm_offset_t) rman_get_virtual(acb->sys_res_arcmsr[i]); in arcmsr_map_pcireg()
4758 arcmsr_free_resource(acb); in arcmsr_map_pcireg()
4759 printf("arcmsr%d: rman_get_virtual %d failure!\n", acb->pci_unit, i); in arcmsr_map_pcireg()
4762 acb->btag[i] = rman_get_bustag(acb->sys_res_arcmsr[i]); in arcmsr_map_pcireg()
4763 acb->bhandle[i] = rman_get_bushandle(acb->sys_res_arcmsr[i]); in arcmsr_map_pcireg()
4765 acb->mem_base0 = mem_base[0]; in arcmsr_map_pcireg()
4766 acb->mem_base1 = mem_base[1]; in arcmsr_map_pcireg()
4767 acb->rid[0] = rid[0]; in arcmsr_map_pcireg()
4768 acb->rid[1] = rid[1]; in arcmsr_map_pcireg()
4775 acb->sys_res_arcmsr[0] = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid0, RF_ACTIVE); in arcmsr_map_pcireg()
4776 if(acb->sys_res_arcmsr[0] == NULL) { in arcmsr_map_pcireg()
4777 arcmsr_free_resource(acb); in arcmsr_map_pcireg()
4778 printf("arcmsr%d: bus_alloc_resource failure!\n", acb->pci_unit); in arcmsr_map_pcireg()
4781 if(rman_get_start(acb->sys_res_arcmsr[0]) <= 0) { in arcmsr_map_pcireg()
4782 arcmsr_free_resource(acb); in arcmsr_map_pcireg()
4783 printf("arcmsr%d: rman_get_start failure!\n", acb->pci_unit); in arcmsr_map_pcireg()
4786 mem_base0 = (vm_offset_t) rman_get_virtual(acb->sys_res_arcmsr[0]); in arcmsr_map_pcireg()
4788 arcmsr_free_resource(acb); in arcmsr_map_pcireg()
4789 printf("arcmsr%d: rman_get_virtual failure!\n", acb->pci_unit); in arcmsr_map_pcireg()
4792 acb->btag[0] = rman_get_bustag(acb->sys_res_arcmsr[0]); in arcmsr_map_pcireg()
4793 acb->bhandle[0] = rman_get_bushandle(acb->sys_res_arcmsr[0]); in arcmsr_map_pcireg()
4794 acb->pmu = (struct MessageUnit_UNION *)mem_base0; in arcmsr_map_pcireg()
4795 acb->rid[0] = rid0; in arcmsr_map_pcireg()
4802 acb->sys_res_arcmsr[0] = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid0, RF_ACTIVE); in arcmsr_map_pcireg()
4803 if(acb->sys_res_arcmsr[0] == NULL) { in arcmsr_map_pcireg()
4804 arcmsr_free_resource(acb); in arcmsr_map_pcireg()
4805 printf("arcmsr%d: bus_alloc_resource failure!\n", acb->pci_unit); in arcmsr_map_pcireg()
4808 if(rman_get_start(acb->sys_res_arcmsr[0]) <= 0) { in arcmsr_map_pcireg()
4809 arcmsr_free_resource(acb); in arcmsr_map_pcireg()
4810 printf("arcmsr%d: rman_get_start failure!\n", acb->pci_unit); in arcmsr_map_pcireg()
4813 mem_base0 = (vm_offset_t) rman_get_virtual(acb->sys_res_arcmsr[0]); in arcmsr_map_pcireg()
4815 arcmsr_free_resource(acb); in arcmsr_map_pcireg()
4816 printf("arcmsr%d: rman_get_virtual failure!\n", acb->pci_unit); in arcmsr_map_pcireg()
4819 acb->btag[0] = rman_get_bustag(acb->sys_res_arcmsr[0]); in arcmsr_map_pcireg()
4820 acb->bhandle[0] = rman_get_bushandle(acb->sys_res_arcmsr[0]); in arcmsr_map_pcireg()
4821 acb->mem_base0 = mem_base0; in arcmsr_map_pcireg()
4822 acb->rid[0] = rid0; in arcmsr_map_pcireg()
4829 acb->sys_res_arcmsr[0] = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid0, RF_ACTIVE); in arcmsr_map_pcireg()
4830 if(acb->sys_res_arcmsr[0] == NULL) { in arcmsr_map_pcireg()
4831 arcmsr_free_resource(acb); in arcmsr_map_pcireg()
4832 printf("arcmsr%d: bus_alloc_resource failure!\n", acb->pci_unit); in arcmsr_map_pcireg()
4835 if(rman_get_start(acb->sys_res_arcmsr[0]) <= 0) { in arcmsr_map_pcireg()
4836 arcmsr_free_resource(acb); in arcmsr_map_pcireg()
4837 printf("arcmsr%d: rman_get_start failure!\n", acb->pci_unit); in arcmsr_map_pcireg()
4840 mem_base0 = (vm_offset_t) rman_get_virtual(acb->sys_res_arcmsr[0]); in arcmsr_map_pcireg()
4842 arcmsr_free_resource(acb); in arcmsr_map_pcireg()
4843 printf("arcmsr%d: rman_get_virtual failure!\n", acb->pci_unit); in arcmsr_map_pcireg()
4846 acb->btag[0] = rman_get_bustag(acb->sys_res_arcmsr[0]); in arcmsr_map_pcireg()
4847 acb->bhandle[0] = rman_get_bushandle(acb->sys_res_arcmsr[0]); in arcmsr_map_pcireg()
4848 acb->pmu = (struct MessageUnit_UNION *)mem_base0; in arcmsr_map_pcireg()
4849 acb->doneq_index = 0; in arcmsr_map_pcireg()
4850 acb->in_doorbell = 0; in arcmsr_map_pcireg()
4851 acb->out_doorbell = 0; in arcmsr_map_pcireg()
4852 acb->rid[0] = rid0; in arcmsr_map_pcireg()
4861 acb->sys_res_arcmsr[0] = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid0, RF_ACTIVE); in arcmsr_map_pcireg()
4862 if(acb->sys_res_arcmsr[0] == NULL) { in arcmsr_map_pcireg()
4863 arcmsr_free_resource(acb); in arcmsr_map_pcireg()
4864 printf("arcmsr%d: bus_alloc_resource failure!\n", acb->pci_unit); in arcmsr_map_pcireg()
4867 if(rman_get_start(acb->sys_res_arcmsr[0]) <= 0) { in arcmsr_map_pcireg()
4868 arcmsr_free_resource(acb); in arcmsr_map_pcireg()
4869 printf("arcmsr%d: rman_get_start failure!\n", acb->pci_unit); in arcmsr_map_pcireg()
4872 mem_base0 = (vm_offset_t) rman_get_virtual(acb->sys_res_arcmsr[0]); in arcmsr_map_pcireg()
4874 arcmsr_free_resource(acb); in arcmsr_map_pcireg()
4875 printf("arcmsr%d: rman_get_virtual failure!\n", acb->pci_unit); in arcmsr_map_pcireg()
4878 acb->btag[0] = rman_get_bustag(acb->sys_res_arcmsr[0]); in arcmsr_map_pcireg()
4879 acb->bhandle[0] = rman_get_bushandle(acb->sys_res_arcmsr[0]); in arcmsr_map_pcireg()
4880 acb->pmu = (struct MessageUnit_UNION *)mem_base0; in arcmsr_map_pcireg()
4881 acb->doneq_index = 0; in arcmsr_map_pcireg()
4882 acb->in_doorbell = 0; in arcmsr_map_pcireg()
4883 acb->out_doorbell = 0; in arcmsr_map_pcireg()
4884 acb->rid[0] = rid0; in arcmsr_map_pcireg()
4893 static int arcmsr_alloc_srb(device_t dev, struct AdapterControlBlock *acb) in arcmsr_alloc_srb() argument
4910 &acb->parent_dmat) != 0) in arcmsr_alloc_srb()
4912 printf("arcmsr%d: parent_dmat bus_dma_tag_create failure!\n", acb->pci_unit); in arcmsr_alloc_srb()
4917 if(bus_dma_tag_create( /*parent_dmat*/ acb->parent_dmat, in arcmsr_alloc_srb()
4933 /*lockarg*/ &acb->isr_lock, in arcmsr_alloc_srb()
4934 &acb->dm_segs_dmat) != 0) in arcmsr_alloc_srb()
4936 arcmsr_free_resource(acb); in arcmsr_alloc_srb()
4937 printf("arcmsr%d: dm_segs_dmat bus_dma_tag_create failure!\n", acb->pci_unit); in arcmsr_alloc_srb()
4942 if(bus_dma_tag_create( /*parent_dmat*/ acb->parent_dmat, in arcmsr_alloc_srb()
4949 /*maxsize*/ acb->max_coherent_size, in arcmsr_alloc_srb()
4955 &acb->srb_dmat) != 0) in arcmsr_alloc_srb()
4957 arcmsr_free_resource(acb); in arcmsr_alloc_srb()
4958 printf("arcmsr%d: srb_dmat bus_dma_tag_create failure!\n", acb->pci_unit); in arcmsr_alloc_srb()
4962 …if(bus_dmamem_alloc(acb->srb_dmat, (void **)&acb->uncacheptr, ARCMSR_DMA_ALLOC_FLAG, &acb->srb_dma… in arcmsr_alloc_srb()
4963 arcmsr_free_resource(acb); in arcmsr_alloc_srb()
4964 printf("arcmsr%d: srb_dmat bus_dmamem_alloc failure!\n", acb->pci_unit); in arcmsr_alloc_srb()
4968 …rc = bus_dmamap_load(acb->srb_dmat, acb->srb_dmamap, acb->uncacheptr, acb->max_coherent_size, arcm… in arcmsr_alloc_srb()
4970 arcmsr_free_resource(acb); in arcmsr_alloc_srb()
4971 printf("arcmsr%d: srb_dmat bus_dmamap_load failure!\n", acb->pci_unit); in arcmsr_alloc_srb()
4974 acb->acb_flags |= ACB_F_DMAMAP_SRB; in arcmsr_alloc_srb()
4978 static int arcmsr_alloc_xor_mem(device_t dev, struct AdapterControlBlock *acb) in arcmsr_alloc_xor_mem() argument
4982 xor_ram = (acb->firm_PicStatus >> 24) & 0x0f; in arcmsr_alloc_xor_mem()
4983 acb->xor_mega = (xor_ram - 1) * 32 + 128 + 3; in arcmsr_alloc_xor_mem()
4984 acb->init2cfg_size = sizeof(struct HostRamBuf) + (sizeof(struct XorSg) * acb->xor_mega); in arcmsr_alloc_xor_mem()
4986 if(bus_dma_tag_create( /*parent_dmat*/ acb->parent_dmat, in arcmsr_alloc_xor_mem()
4993 /*maxsize*/ acb->init2cfg_size, in arcmsr_alloc_xor_mem()
4995 /*maxsegsz*/ acb->init2cfg_size, in arcmsr_alloc_xor_mem()
4999 &acb->xortable_dmat) != 0) in arcmsr_alloc_xor_mem()
5001 arcmsr_free_resource(acb); in arcmsr_alloc_xor_mem()
5002 printf("arcmsr%d: xor table bus_dma_tag_create failure!\n", acb->pci_unit); in arcmsr_alloc_xor_mem()
5006 …if(bus_dmamem_alloc(acb->xortable_dmat, (void **)&acb->xortable, ARCMSR_DMA_ALLOC_FLAG, &acb->xort… in arcmsr_alloc_xor_mem()
5007 arcmsr_free_resource(acb); in arcmsr_alloc_xor_mem()
5008 printf("arcmsr%d: xor table bus_dmamem_alloc failure!\n", acb->pci_unit); in arcmsr_alloc_xor_mem()
5012 …rc = bus_dmamap_load(acb->xortable_dmat, acb->xortable_dmamap, acb->xortable, acb->init2cfg_size, … in arcmsr_alloc_xor_mem()
5014 arcmsr_free_resource(acb); in arcmsr_alloc_xor_mem()
5015 printf("arcmsr%d: xor table bus_dmamap_load failure!\n", acb->pci_unit); in arcmsr_alloc_xor_mem()
5018 acb->acb_flags |= ACB_F_DMAMAP_SGTABLE; in arcmsr_alloc_xor_mem()
5021 if(bus_dma_tag_create( /*parent_dmat*/ acb->parent_dmat, in arcmsr_alloc_xor_mem()
5028 /*maxsize*/ (ARCMSR_XOR_SEG_SIZE * acb->xor_mega), in arcmsr_alloc_xor_mem()
5029 /*nsegments*/ acb->xor_mega, in arcmsr_alloc_xor_mem()
5034 &acb->xor_dmat) != 0) in arcmsr_alloc_xor_mem()
5036 arcmsr_free_resource(acb); in arcmsr_alloc_xor_mem()
5037 printf("arcmsr%d: xor bus_dma_tag_create failure!\n", acb->pci_unit); in arcmsr_alloc_xor_mem()
5041 …if(bus_dmamem_alloc(acb->xor_dmat, (void **)&acb->xorptr, ARCMSR_DMA_ALLOC_FLAG, &acb->xor_dmamap)… in arcmsr_alloc_xor_mem()
5042 arcmsr_free_resource(acb); in arcmsr_alloc_xor_mem()
5043 printf("arcmsr%d: xor bus_dmamem_alloc failure!\n", acb->pci_unit); in arcmsr_alloc_xor_mem()
5047 …rc = bus_dmamap_load(acb->xor_dmat, acb->xor_dmamap, acb->xorptr, (ARCMSR_XOR_SEG_SIZE * acb->xor_… in arcmsr_alloc_xor_mem()
5049 arcmsr_free_resource(acb); in arcmsr_alloc_xor_mem()
5050 printf("arcmsr%d: xor bus_dmamap_load failure!\n", acb->pci_unit); in arcmsr_alloc_xor_mem()
5053 acb->acb_flags |= ACB_F_DMAMAP_SG; in arcmsr_alloc_xor_mem()
5059 struct AdapterControlBlock *acb = device_get_softc(dev); in arcmsr_initialize() local
5064 acb->vendor_device_id = vendor_dev_id; in arcmsr_initialize()
5065 acb->sub_device_id = pci_read_config(dev, PCIR_SUBDEV_0, 2); in arcmsr_initialize()
5066 rc = arcmsr_define_adapter_type(acb); in arcmsr_initialize()
5069 rc = arcmsr_map_pcireg(dev, acb); in arcmsr_initialize()
5072 rc = arcmsr_alloc_srb(dev, acb); in arcmsr_initialize()
5076 if ((acb->firm_PicStatus >> 24) & 0x0f) { in arcmsr_initialize()
5077 rc = arcmsr_alloc_xor_mem(dev, acb); in arcmsr_initialize()
5081 if(acb->acb_flags & (ACB_F_MAPFREESRB_FAILD | ACB_F_MAPXOR_FAILD)) { in arcmsr_initialize()
5082 arcmsr_free_resource(acb); in arcmsr_initialize()
5083 printf("arcmsr%d: map free srb or xor buffer failure!\n", acb->pci_unit); in arcmsr_initialize()
5086acb->acb_flags |= (ACB_F_MESSAGE_WQBUFFER_CLEARED|ACB_F_MESSAGE_RQBUFFER_CLEARED|ACB_F_MESSAGE_WQ… in arcmsr_initialize()
5087 acb->acb_flags &= ~ACB_F_SCSISTOPADAPTER; in arcmsr_initialize()
5095 acb->devstate[i][j] = ARECA_RAID_GONE; in arcmsr_initialize()
5098 arcmsr_iop_init(acb); in arcmsr_initialize()
5102 static int arcmsr_setup_msix(struct AdapterControlBlock *acb) in arcmsr_setup_msix() argument
5106 for (i = 0; i < acb->msix_vectors; i++) { in arcmsr_setup_msix()
5107 acb->irq_id[i] = 1 + i; in arcmsr_setup_msix()
5108 acb->irqres[i] = bus_alloc_resource_any(acb->pci_dev, in arcmsr_setup_msix()
5109 SYS_RES_IRQ, &acb->irq_id[i], RF_ACTIVE); in arcmsr_setup_msix()
5110 if (acb->irqres[i] == NULL) { in arcmsr_setup_msix()
5114 if (bus_setup_intr(acb->pci_dev, acb->irqres[i], in arcmsr_setup_msix()
5116 acb, &acb->ih[i])) { in arcmsr_setup_msix()
5122 acb->acb_flags |= ACB_F_MSIX_ENABLED; in arcmsr_setup_msix()
5126 arcmsr_teardown_intr(acb->pci_dev, acb); in arcmsr_setup_msix()
5137 struct AdapterControlBlock *acb=(struct AdapterControlBlock *)device_get_softc(dev); in arcmsr_attach() local
5143 if(acb == NULL) { in arcmsr_attach()
5147 arcmsr_mutex_init(acb); in arcmsr_attach()
5148 acb->pci_dev = dev; in arcmsr_attach()
5149 acb->pci_unit = unit; in arcmsr_attach()
5155 acb->msix_vectors = ARCMSR_NUM_MSIX_VECTORS; in arcmsr_attach()
5156 if (pci_alloc_msix(dev, &acb->msix_vectors) == 0) { in arcmsr_attach()
5157 if (arcmsr_setup_msix(acb) == TRUE) in arcmsr_attach()
5160 acb->irq_id[0] = 0; in arcmsr_attach()
5161 irqres = bus_alloc_resource_any(dev, SYS_RES_IRQ, &acb->irq_id[0], RF_SHAREABLE | RF_ACTIVE); in arcmsr_attach()
5163 …ev, irqres, INTR_TYPE_CAM|INTR_ENTROPY|INTR_MPSAFE, NULL, arcmsr_intr_handler, acb, &acb->ih[0])) { in arcmsr_attach()
5167 acb->irqres[0] = irqres; in arcmsr_attach()
5175 devq = cam_simq_alloc(acb->maxOutstanding); in arcmsr_attach()
5180acb->psim = cam_sim_alloc(arcmsr_action, arcmsr_poll, "arcmsr", acb, unit, &acb->isr_lock, 1, ARCM… in arcmsr_attach()
5181 if(acb->psim == NULL) { in arcmsr_attach()
5185 ARCMSR_LOCK_ACQUIRE(&acb->isr_lock); in arcmsr_attach()
5186 if(xpt_bus_register(acb->psim, dev, 0) != CAM_SUCCESS) { in arcmsr_attach()
5190 …if(xpt_create_path(&acb->ppath, /* periph */ NULL, cam_sim_path(acb->psim), CAM_TARGET_WILDCARD, C… in arcmsr_attach()
5198 xpt_setup_ccb(&csa.ccb_h, acb->ppath, /*priority*/5); in arcmsr_attach()
5202 csa.callback_arg = acb->psim; in arcmsr_attach()
5204 ARCMSR_LOCK_RELEASE(&acb->isr_lock); in arcmsr_attach()
5211 args.mda_si_drv1 = acb; in arcmsr_attach()
5212 (void)make_dev_s(&args, &acb->ioctl_dev, "arcmsr%d", unit); in arcmsr_attach()
5214 (void)make_dev_alias(acb->ioctl_dev, "arc%d", unit); in arcmsr_attach()
5215 arcmsr_callout_init(&acb->devmap_callout); in arcmsr_attach()
5216 callout_reset(&acb->devmap_callout, 60 * hz, arcmsr_polling_devmap, acb); in arcmsr_attach()
5219 xpt_bus_deregister(cam_sim_path(acb->psim)); in arcmsr_attach()
5221 cam_sim_free(acb->psim, /* free_simq */ TRUE); in arcmsr_attach()
5225 arcmsr_teardown_intr(dev, acb); in arcmsr_attach()
5227 arcmsr_free_resource(acb); in arcmsr_attach()
5229 arcmsr_mutex_destroy(acb); in arcmsr_attach()
5327 struct AdapterControlBlock *acb=(struct AdapterControlBlock *)device_get_softc(dev); in arcmsr_shutdown() local
5330 ARCMSR_LOCK_ACQUIRE(&acb->isr_lock); in arcmsr_shutdown()
5332 arcmsr_disable_allintr(acb); in arcmsr_shutdown()
5333 arcmsr_stop_adapter_bgrb(acb); in arcmsr_shutdown()
5334 arcmsr_flush_adapter_cache(acb); in arcmsr_shutdown()
5336 acb->acb_flags |= ACB_F_SCSISTOPADAPTER; in arcmsr_shutdown()
5337 acb->acb_flags &= ~ACB_F_IOP_INITED; in arcmsr_shutdown()
5338 if(acb->srboutstandingcount != 0) { in arcmsr_shutdown()
5340 arcmsr_done4abort_postqueue(acb); in arcmsr_shutdown()
5342 arcmsr_abort_allcmd(acb); in arcmsr_shutdown()
5344 srb = acb->psrb_pool[i]; in arcmsr_shutdown()
5352 acb->srboutstandingcount = 0; in arcmsr_shutdown()
5353 acb->workingsrb_doneindex = 0; in arcmsr_shutdown()
5354 acb->workingsrb_startindex = 0; in arcmsr_shutdown()
5355 acb->pktRequestCount = 0; in arcmsr_shutdown()
5356 acb->pktReturnCount = 0; in arcmsr_shutdown()
5357 ARCMSR_LOCK_RELEASE(&acb->isr_lock); in arcmsr_shutdown()
5364 static void arcmsr_teardown_intr(device_t dev, struct AdapterControlBlock *acb) in arcmsr_teardown_intr() argument
5368 if (acb->acb_flags & ACB_F_MSIX_ENABLED) { in arcmsr_teardown_intr()
5369 for (i = 0; i < acb->msix_vectors; i++) { in arcmsr_teardown_intr()
5370 if (acb->ih[i]) in arcmsr_teardown_intr()
5371 bus_teardown_intr(dev, acb->irqres[i], acb->ih[i]); in arcmsr_teardown_intr()
5372 if (acb->irqres[i] != NULL) in arcmsr_teardown_intr()
5374 acb->irq_id[i], acb->irqres[i]); in arcmsr_teardown_intr()
5376 acb->ih[i] = NULL; in arcmsr_teardown_intr()
5380 if (acb->ih[0]) in arcmsr_teardown_intr()
5381 bus_teardown_intr(dev, acb->irqres[0], acb->ih[0]); in arcmsr_teardown_intr()
5382 if (acb->irqres[0] != NULL) in arcmsr_teardown_intr()
5384 acb->irq_id[0], acb->irqres[0]); in arcmsr_teardown_intr()
5385 acb->ih[0] = NULL; in arcmsr_teardown_intr()
5395 struct AdapterControlBlock *acb=(struct AdapterControlBlock *)device_get_softc(dev); in arcmsr_detach() local
5397 callout_stop(&acb->devmap_callout); in arcmsr_detach()
5398 arcmsr_teardown_intr(dev, acb); in arcmsr_detach()
5400 arcmsr_free_resource(acb); in arcmsr_detach()
5401 ARCMSR_LOCK_ACQUIRE(&acb->isr_lock); in arcmsr_detach()
5402 xpt_async(AC_LOST_DEVICE, acb->ppath, NULL); in arcmsr_detach()
5403 xpt_free_path(acb->ppath); in arcmsr_detach()
5404 xpt_bus_deregister(cam_sim_path(acb->psim)); in arcmsr_detach()
5405 cam_sim_free(acb->psim, TRUE); in arcmsr_detach()
5406 ARCMSR_LOCK_RELEASE(&acb->isr_lock); in arcmsr_detach()
5407 arcmsr_mutex_destroy(acb); in arcmsr_detach()
5412 static void arcmsr_dump_data(struct AdapterControlBlock *acb) in arcmsr_dump_data() argument
5414 if((acb->pktRequestCount - acb->pktReturnCount) == 0) in arcmsr_dump_data()
5416 printf("Command Request Count =0x%x\n",acb->pktRequestCount); in arcmsr_dump_data()
5417 printf("Command Return Count =0x%x\n",acb->pktReturnCount); in arcmsr_dump_data()
5418 printf("Command (Req-Rtn) Count =0x%x\n",(acb->pktRequestCount - acb->pktReturnCount)); in arcmsr_dump_data()
5419 printf("Queued Command Count =0x%x\n",acb->srboutstandingcount); in arcmsr_dump_data()