Lines Matching refs:asc_dvc
1971 #define AdvAbortQueue(asc_dvc, srb_tag) \ argument
1972 AdvSendIdleCmd((asc_dvc), (ushort) IDLE_CMD_ABORT, \
1986 #define AdvResetDevice(asc_dvc, target_id) \ argument
1987 AdvSendIdleCmd((asc_dvc), (ushort) IDLE_CMD_DEVICE_RESET, \
2274 #define asc_dvc_to_board(asc_dvc) container_of(asc_dvc, struct asc_board, \ argument
3667 static bool AscResetChipAndScsiBus(ASC_DVC_VAR *asc_dvc) in AscResetChipAndScsiBus() argument
3672 iop_base = asc_dvc->iop_base; in AscResetChipAndScsiBus()
3862 static void AscInitLram(ASC_DVC_VAR *asc_dvc) in AscInitLram() argument
3868 iop_base = asc_dvc->iop_base; in AscInitLram()
3870 (ushort)(((int)(asc_dvc->max_total_qng + 2 + 1) * in AscInitLram()
3877 (uchar)(asc_dvc->max_total_qng)); in AscInitLram()
3882 for (; i < asc_dvc->max_total_qng; i++, s_addr += ASC_QBLK_SIZE) { in AscInitLram()
3893 (uchar)(asc_dvc->max_total_qng - 1)); in AscInitLram()
3895 (uchar)asc_dvc->max_total_qng); in AscInitLram()
3898 for (; i <= (uchar)(asc_dvc->max_total_qng + 3); in AscInitLram()
3936 static void AscInitQLinkVar(ASC_DVC_VAR *asc_dvc) in AscInitQLinkVar() argument
3942 iop_base = asc_dvc->iop_base; in AscInitQLinkVar()
3944 AscPutRiscVarDoneQTail(iop_base, asc_dvc->max_total_qng); in AscInitQLinkVar()
3946 AscPutVarDoneQTail(iop_base, asc_dvc->max_total_qng); in AscInitQLinkVar()
3948 (uchar)((int)asc_dvc->max_total_qng + 1)); in AscInitQLinkVar()
3950 (uchar)((int)asc_dvc->max_total_qng + 2)); in AscInitQLinkVar()
3952 asc_dvc->max_total_qng); in AscInitQLinkVar()
3965 static int AscInitMicroCodeVar(ASC_DVC_VAR *asc_dvc) in AscInitMicroCodeVar() argument
3972 struct asc_board *board = asc_dvc_to_board(asc_dvc); in AscInitMicroCodeVar()
3974 iop_base = asc_dvc->iop_base; in AscInitMicroCodeVar()
3978 asc_dvc->cfg->sdtr_period_offset[i]); in AscInitMicroCodeVar()
3981 AscInitQLinkVar(asc_dvc); in AscInitMicroCodeVar()
3983 asc_dvc->cfg->disc_enable); in AscInitMicroCodeVar()
3985 ASC_TID_TO_TARGET_ID(asc_dvc->cfg->chip_scsi_id)); in AscInitMicroCodeVar()
3988 BUG_ON((unsigned long)asc_dvc->overrun_buf & 7); in AscInitMicroCodeVar()
3989 asc_dvc->overrun_dma = dma_map_single(board->dev, asc_dvc->overrun_buf, in AscInitMicroCodeVar()
3991 if (dma_mapping_error(board->dev, asc_dvc->overrun_dma)) { in AscInitMicroCodeVar()
3995 phy_addr = cpu_to_le32(asc_dvc->overrun_dma); in AscInitMicroCodeVar()
4002 asc_dvc->cfg->mcode_date = in AscInitMicroCodeVar()
4004 asc_dvc->cfg->mcode_version = in AscInitMicroCodeVar()
4009 asc_dvc->err_code |= ASC_IERR_SET_PC_ADDR; in AscInitMicroCodeVar()
4014 asc_dvc->err_code |= ASC_IERR_START_STOP_CHIP; in AscInitMicroCodeVar()
4022 dma_unmap_single(board->dev, asc_dvc->overrun_dma, in AscInitMicroCodeVar()
4025 asc_dvc->overrun_dma = 0; in AscInitMicroCodeVar()
4029 static int AscInitAsc1000Driver(ASC_DVC_VAR *asc_dvc) in AscInitAsc1000Driver() argument
4038 iop_base = asc_dvc->iop_base; in AscInitAsc1000Driver()
4040 if ((asc_dvc->dvc_cntl & ASC_CNTL_RESET_SCSI) && in AscInitAsc1000Driver()
4041 !(asc_dvc->init_state & ASC_INIT_RESET_SCSI_DONE)) { in AscInitAsc1000Driver()
4042 AscResetChipAndScsiBus(asc_dvc); in AscInitAsc1000Driver()
4043 mdelay(asc_dvc->scsi_reset_wait * 1000); /* XXX: msleep? */ in AscInitAsc1000Driver()
4045 asc_dvc->init_state |= ASC_INIT_STATE_BEG_LOAD_MC; in AscInitAsc1000Driver()
4046 if (asc_dvc->err_code != 0) in AscInitAsc1000Driver()
4048 if (!AscFindSignature(asc_dvc->iop_base)) { in AscInitAsc1000Driver()
4049 asc_dvc->err_code = ASC_IERR_BAD_SIGNATURE; in AscInitAsc1000Driver()
4053 AscInitLram(asc_dvc); in AscInitAsc1000Driver()
4055 err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev); in AscInitAsc1000Driver()
4059 asc_dvc->err_code |= ASC_IERR_MCODE_CHKSUM; in AscInitAsc1000Driver()
4066 asc_dvc->err_code |= ASC_IERR_MCODE_CHKSUM; in AscInitAsc1000Driver()
4074 asc_dvc->err_code |= ASC_IERR_MCODE_CHKSUM; in AscInitAsc1000Driver()
4079 warn_code |= AscInitMicroCodeVar(asc_dvc); in AscInitAsc1000Driver()
4080 if (!asc_dvc->overrun_dma) in AscInitAsc1000Driver()
4082 asc_dvc->init_state |= ASC_INIT_STATE_END_LOAD_MC; in AscInitAsc1000Driver()
4242 AdvSendIdleCmd(ADV_DVC_VAR *asc_dvc, in AdvSendIdleCmd() argument
4248 iop_base = asc_dvc->iop_base; in AdvSendIdleCmd()
4271 if (asc_dvc->chip_type == ADV_CHIP_ASC3550) { in AdvSendIdleCmd()
4305 static int AdvResetSB(ADV_DVC_VAR *asc_dvc) in AdvResetSB() argument
4313 status = AdvSendIdleCmd(asc_dvc, (ushort)IDLE_CMD_SCSI_RESET_START, 0L); in AdvResetSB()
4330 status = AdvSendIdleCmd(asc_dvc, (ushort)IDLE_CMD_SCSI_RESET_END, 0L); in AdvResetSB()
4335 mdelay(asc_dvc->scsi_reset_wait * 1000); /* XXX: msleep? */ in AdvResetSB()
4350 static int AdvInitAsc3550Driver(ADV_DVC_VAR *asc_dvc) in AdvInitAsc3550Driver() argument
4370 if (asc_dvc->err_code != 0) in AdvInitAsc3550Driver()
4376 if (asc_dvc->chip_type != ADV_CHIP_ASC3550) { in AdvInitAsc3550Driver()
4377 asc_dvc->err_code = ASC_IERR_BAD_CHIPTYPE; in AdvInitAsc3550Driver()
4382 iop_base = asc_dvc->iop_base; in AdvInitAsc3550Driver()
4421 err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev); in AdvInitAsc3550Driver()
4425 asc_dvc->err_code = ASC_IERR_MCODE_CHKSUM; in AdvInitAsc3550Driver()
4432 asc_dvc->err_code = ASC_IERR_MCODE_CHKSUM; in AdvInitAsc3550Driver()
4437 asc_dvc->err_code = AdvLoadMicrocode(iop_base, &fw->data[4], in AdvInitAsc3550Driver()
4441 if (asc_dvc->err_code) in AdvInitAsc3550Driver()
4469 asc_dvc->cfg->mcode_date); in AdvInitAsc3550Driver()
4471 asc_dvc->cfg->mcode_version); in AdvInitAsc3550Driver()
4484 if (asc_dvc->cfg->control_flag & CONTROL_FLAG_IGNORE_PERR) { in AdvInitAsc3550Driver()
4509 if ((asc_dvc->bios_ctrl & BIOS_CTRL_RESET_SCSI_BUS) == 0) { in AdvInitAsc3550Driver()
4511 asc_dvc->wdtr_able); in AdvInitAsc3550Driver()
4513 asc_dvc->sdtr_able); in AdvInitAsc3550Driver()
4540 if (ADV_TID_TO_TIDMASK(tid) & asc_dvc->ultra_able) { in AdvInitAsc3550Driver()
4566 asc_dvc->cfg->disc_enable); in AdvInitAsc3550Driver()
4576 asc_dvc->chip_scsi_id); in AdvInitAsc3550Driver()
4593 asc_dvc->err_code |= ASC_IERR_ILLEGAL_CONNECTION; in AdvInitAsc3550Driver()
4603 asc_dvc->err_code |= ASC_IERR_REVERSED_CABLE; in AdvInitAsc3550Driver()
4612 asc_dvc->err_code |= ASC_IERR_SINGLE_END_DEVICE; in AdvInitAsc3550Driver()
4624 if (asc_dvc->cfg->termination == 0) { in AdvInitAsc3550Driver()
4629 asc_dvc->cfg->termination |= TERM_CTL_SEL; in AdvInitAsc3550Driver()
4639 asc_dvc->cfg->termination |= (TERM_CTL_H | TERM_CTL_L); in AdvInitAsc3550Driver()
4648 asc_dvc->cfg->termination |= TERM_CTL_H; in AdvInitAsc3550Driver()
4669 scsi_cfg1 |= (TERM_CTL_SEL | (~asc_dvc->cfg->termination & TERM_CTL)); in AdvInitAsc3550Driver()
4704 ADV_TID_TO_TIDMASK(asc_dvc->chip_scsi_id)); in AdvInitAsc3550Driver()
4706 AdvBuildCarrierFreelist(asc_dvc); in AdvInitAsc3550Driver()
4712 asc_dvc->icq_sp = adv_get_next_carrier(asc_dvc); in AdvInitAsc3550Driver()
4713 if (!asc_dvc->icq_sp) { in AdvInitAsc3550Driver()
4714 asc_dvc->err_code |= ASC_IERR_NO_CARRIER; in AdvInitAsc3550Driver()
4721 AdvWriteDWordLramNoSwap(iop_base, ASC_MC_ICQ, asc_dvc->icq_sp->carr_pa); in AdvInitAsc3550Driver()
4726 asc_dvc->irq_sp = adv_get_next_carrier(asc_dvc); in AdvInitAsc3550Driver()
4727 if (!asc_dvc->irq_sp) { in AdvInitAsc3550Driver()
4728 asc_dvc->err_code |= ASC_IERR_NO_CARRIER; in AdvInitAsc3550Driver()
4735 AdvWriteDWordLramNoSwap(iop_base, ASC_MC_IRQ, asc_dvc->irq_sp->carr_pa); in AdvInitAsc3550Driver()
4736 asc_dvc->carr_pending_cnt = 0; in AdvInitAsc3550Driver()
4753 if (asc_dvc->bios_ctrl & BIOS_CTRL_RESET_SCSI_BUS) { in AdvInitAsc3550Driver()
4774 if (AdvResetSB(asc_dvc) != ADV_TRUE) { in AdvInitAsc3550Driver()
4793 static int AdvInitAsc38C0800Driver(ADV_DVC_VAR *asc_dvc) in AdvInitAsc38C0800Driver() argument
4814 if (asc_dvc->err_code != 0) in AdvInitAsc38C0800Driver()
4820 if (asc_dvc->chip_type != ADV_CHIP_ASC38C0800) { in AdvInitAsc38C0800Driver()
4821 asc_dvc->err_code = ASC_IERR_BAD_CHIPTYPE; in AdvInitAsc38C0800Driver()
4826 iop_base = asc_dvc->iop_base; in AdvInitAsc38C0800Driver()
4887 asc_dvc->err_code = ASC_IERR_BIST_PRE_TEST; in AdvInitAsc38C0800Driver()
4895 asc_dvc->err_code = ASC_IERR_BIST_PRE_TEST; in AdvInitAsc38C0800Driver()
4913 asc_dvc->bist_err_code = byte; /* for BIOS display message */ in AdvInitAsc38C0800Driver()
4914 asc_dvc->err_code = ASC_IERR_BIST_RAM_TEST; in AdvInitAsc38C0800Driver()
4921 err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev); in AdvInitAsc38C0800Driver()
4925 asc_dvc->err_code = ASC_IERR_MCODE_CHKSUM; in AdvInitAsc38C0800Driver()
4932 asc_dvc->err_code = ASC_IERR_MCODE_CHKSUM; in AdvInitAsc38C0800Driver()
4937 asc_dvc->err_code = AdvLoadMicrocode(iop_base, &fw->data[4], in AdvInitAsc38C0800Driver()
4941 if (asc_dvc->err_code) in AdvInitAsc38C0800Driver()
4969 asc_dvc->cfg->mcode_date); in AdvInitAsc38C0800Driver()
4971 asc_dvc->cfg->mcode_version); in AdvInitAsc38C0800Driver()
4996 if (asc_dvc->cfg->control_flag & CONTROL_FLAG_IGNORE_PERR) { in AdvInitAsc38C0800Driver()
5026 if ((asc_dvc->bios_ctrl & BIOS_CTRL_RESET_SCSI_BUS) == 0) { in AdvInitAsc38C0800Driver()
5028 asc_dvc->wdtr_able); in AdvInitAsc38C0800Driver()
5030 asc_dvc->sdtr_able); in AdvInitAsc38C0800Driver()
5043 asc_dvc->cfg->disc_enable); in AdvInitAsc38C0800Driver()
5044 AdvWriteWordLram(iop_base, ASC_MC_SDTR_SPEED1, asc_dvc->sdtr_speed1); in AdvInitAsc38C0800Driver()
5045 AdvWriteWordLram(iop_base, ASC_MC_SDTR_SPEED2, asc_dvc->sdtr_speed2); in AdvInitAsc38C0800Driver()
5046 AdvWriteWordLram(iop_base, ASC_MC_SDTR_SPEED3, asc_dvc->sdtr_speed3); in AdvInitAsc38C0800Driver()
5047 AdvWriteWordLram(iop_base, ASC_MC_SDTR_SPEED4, asc_dvc->sdtr_speed4); in AdvInitAsc38C0800Driver()
5057 asc_dvc->chip_scsi_id); in AdvInitAsc38C0800Driver()
5075 asc_dvc->err_code |= ASC_IERR_REVERSED_CABLE; in AdvInitAsc38C0800Driver()
5091 asc_dvc->err_code = ASC_IERR_HVD_DEVICE; in AdvInitAsc38C0800Driver()
5103 if ((asc_dvc->cfg->termination & TERM_SE) == 0) { in AdvInitAsc38C0800Driver()
5110 asc_dvc->cfg->termination |= TERM_SE; in AdvInitAsc38C0800Driver()
5115 asc_dvc->cfg->termination |= TERM_SE_HI; in AdvInitAsc38C0800Driver()
5120 if ((asc_dvc->cfg->termination & TERM_LVD) == 0) { in AdvInitAsc38C0800Driver()
5127 asc_dvc->cfg->termination |= TERM_LVD; in AdvInitAsc38C0800Driver()
5144 scsi_cfg1 |= (~asc_dvc->cfg->termination & 0xF0); in AdvInitAsc38C0800Driver()
5185 ADV_TID_TO_TIDMASK(asc_dvc->chip_scsi_id)); in AdvInitAsc38C0800Driver()
5187 AdvBuildCarrierFreelist(asc_dvc); in AdvInitAsc38C0800Driver()
5193 asc_dvc->icq_sp = adv_get_next_carrier(asc_dvc); in AdvInitAsc38C0800Driver()
5194 if (!asc_dvc->icq_sp) { in AdvInitAsc38C0800Driver()
5196 asc_dvc->err_code |= ASC_IERR_NO_CARRIER; in AdvInitAsc38C0800Driver()
5204 AdvWriteDWordLramNoSwap(iop_base, ASC_MC_ICQ, asc_dvc->icq_sp->carr_pa); in AdvInitAsc38C0800Driver()
5209 asc_dvc->irq_sp = adv_get_next_carrier(asc_dvc); in AdvInitAsc38C0800Driver()
5210 if (!asc_dvc->irq_sp) { in AdvInitAsc38C0800Driver()
5212 asc_dvc->err_code |= ASC_IERR_NO_CARRIER; in AdvInitAsc38C0800Driver()
5221 AdvWriteDWordLramNoSwap(iop_base, ASC_MC_IRQ, asc_dvc->irq_sp->carr_pa); in AdvInitAsc38C0800Driver()
5222 asc_dvc->carr_pending_cnt = 0; in AdvInitAsc38C0800Driver()
5239 if (asc_dvc->bios_ctrl & BIOS_CTRL_RESET_SCSI_BUS) { in AdvInitAsc38C0800Driver()
5260 if (AdvResetSB(asc_dvc) != ADV_TRUE) { in AdvInitAsc38C0800Driver()
5279 static int AdvInitAsc38C1600Driver(ADV_DVC_VAR *asc_dvc) in AdvInitAsc38C1600Driver() argument
5300 if (asc_dvc->err_code != 0) { in AdvInitAsc38C1600Driver()
5307 if (asc_dvc->chip_type != ADV_CHIP_ASC38C1600) { in AdvInitAsc38C1600Driver()
5308 asc_dvc->err_code = ASC_IERR_BAD_CHIPTYPE; in AdvInitAsc38C1600Driver()
5313 iop_base = asc_dvc->iop_base; in AdvInitAsc38C1600Driver()
5375 asc_dvc->err_code = ASC_IERR_BIST_PRE_TEST; in AdvInitAsc38C1600Driver()
5383 asc_dvc->err_code = ASC_IERR_BIST_PRE_TEST; in AdvInitAsc38C1600Driver()
5401 asc_dvc->bist_err_code = byte; /* for BIOS display message */ in AdvInitAsc38C1600Driver()
5402 asc_dvc->err_code = ASC_IERR_BIST_RAM_TEST; in AdvInitAsc38C1600Driver()
5409 err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev); in AdvInitAsc38C1600Driver()
5413 asc_dvc->err_code = ASC_IERR_MCODE_CHKSUM; in AdvInitAsc38C1600Driver()
5420 asc_dvc->err_code = ASC_IERR_MCODE_CHKSUM; in AdvInitAsc38C1600Driver()
5425 asc_dvc->err_code = AdvLoadMicrocode(iop_base, &fw->data[4], in AdvInitAsc38C1600Driver()
5429 if (asc_dvc->err_code) in AdvInitAsc38C1600Driver()
5457 asc_dvc->cfg->mcode_date); in AdvInitAsc38C1600Driver()
5459 asc_dvc->cfg->mcode_version); in AdvInitAsc38C1600Driver()
5484 if (asc_dvc->cfg->control_flag & CONTROL_FLAG_IGNORE_PERR) { in AdvInitAsc38C1600Driver()
5496 if ((asc_dvc->bios_ctrl & BIOS_CTRL_AIPP_DIS) == 0) { in AdvInitAsc38C1600Driver()
5521 if ((asc_dvc->bios_ctrl & BIOS_CTRL_RESET_SCSI_BUS) == 0) { in AdvInitAsc38C1600Driver()
5523 asc_dvc->wdtr_able); in AdvInitAsc38C1600Driver()
5525 asc_dvc->sdtr_able); in AdvInitAsc38C1600Driver()
5538 asc_dvc->cfg->disc_enable); in AdvInitAsc38C1600Driver()
5539 AdvWriteWordLram(iop_base, ASC_MC_SDTR_SPEED1, asc_dvc->sdtr_speed1); in AdvInitAsc38C1600Driver()
5540 AdvWriteWordLram(iop_base, ASC_MC_SDTR_SPEED2, asc_dvc->sdtr_speed2); in AdvInitAsc38C1600Driver()
5541 AdvWriteWordLram(iop_base, ASC_MC_SDTR_SPEED3, asc_dvc->sdtr_speed3); in AdvInitAsc38C1600Driver()
5542 AdvWriteWordLram(iop_base, ASC_MC_SDTR_SPEED4, asc_dvc->sdtr_speed4); in AdvInitAsc38C1600Driver()
5552 asc_dvc->chip_scsi_id); in AdvInitAsc38C1600Driver()
5571 asc_dvc->err_code |= ASC_IERR_REVERSED_CABLE; in AdvInitAsc38C1600Driver()
5584 asc_dvc->err_code |= ASC_IERR_HVD_DEVICE; in AdvInitAsc38C1600Driver()
5601 if ((asc_dvc->cfg->termination & TERM_SE) == 0) { in AdvInitAsc38C1600Driver()
5602 struct pci_dev *pdev = adv_dvc_to_pdev(asc_dvc); in AdvInitAsc38C1600Driver()
5609 asc_dvc->cfg->termination |= TERM_SE; in AdvInitAsc38C1600Driver()
5617 asc_dvc->cfg->termination |= TERM_SE_HI; in AdvInitAsc38C1600Driver()
5631 scsi_cfg1 |= (~asc_dvc->cfg->termination & TERM_SE); in AdvInitAsc38C1600Driver()
5682 ADV_TID_TO_TIDMASK(asc_dvc->chip_scsi_id)); in AdvInitAsc38C1600Driver()
5684 AdvBuildCarrierFreelist(asc_dvc); in AdvInitAsc38C1600Driver()
5689 asc_dvc->icq_sp = adv_get_next_carrier(asc_dvc); in AdvInitAsc38C1600Driver()
5690 if (!asc_dvc->icq_sp) { in AdvInitAsc38C1600Driver()
5691 asc_dvc->err_code |= ASC_IERR_NO_CARRIER; in AdvInitAsc38C1600Driver()
5700 AdvWriteDWordLramNoSwap(iop_base, ASC_MC_ICQ, asc_dvc->icq_sp->carr_pa); in AdvInitAsc38C1600Driver()
5702 le32_to_cpu(asc_dvc->icq_sp->carr_pa)); in AdvInitAsc38C1600Driver()
5707 asc_dvc->irq_sp = adv_get_next_carrier(asc_dvc); in AdvInitAsc38C1600Driver()
5708 if (!asc_dvc->irq_sp) { in AdvInitAsc38C1600Driver()
5709 asc_dvc->err_code |= ASC_IERR_NO_CARRIER; in AdvInitAsc38C1600Driver()
5716 AdvWriteDWordLramNoSwap(iop_base, ASC_MC_IRQ, asc_dvc->irq_sp->carr_pa); in AdvInitAsc38C1600Driver()
5717 asc_dvc->carr_pending_cnt = 0; in AdvInitAsc38C1600Driver()
5733 if (asc_dvc->bios_ctrl & BIOS_CTRL_RESET_SCSI_BUS) { in AdvInitAsc38C1600Driver()
5754 if (AdvResetSB(asc_dvc) != ADV_TRUE) { in AdvInitAsc38C1600Driver()
5770 static int AdvResetChipAndSB(ADV_DVC_VAR *asc_dvc) in AdvResetChipAndSB() argument
5779 iop_base = asc_dvc->iop_base; in AdvResetChipAndSB()
5786 if (asc_dvc->chip_type == ADV_CHIP_ASC38C1600) { in AdvResetChipAndSB()
5817 asc_dvc->err_code = 0; in AdvResetChipAndSB()
5818 if (asc_dvc->chip_type == ADV_CHIP_ASC38C1600) { in AdvResetChipAndSB()
5819 status = AdvInitAsc38C1600Driver(asc_dvc); in AdvResetChipAndSB()
5820 } else if (asc_dvc->chip_type == ADV_CHIP_ASC38C0800) { in AdvResetChipAndSB()
5821 status = AdvInitAsc38C0800Driver(asc_dvc); in AdvResetChipAndSB()
5823 status = AdvInitAsc3550Driver(asc_dvc); in AdvResetChipAndSB()
5843 if (asc_dvc->chip_type == ADV_CHIP_ASC38C1600) { in AdvResetChipAndSB()
6046 static int AdvISR(ADV_DVC_VAR *asc_dvc) in AdvISR() argument
6055 iop_base = asc_dvc->iop_base; in AdvISR()
6075 if (asc_dvc->chip_type == ADV_CHIP_ASC3550 || in AdvISR()
6076 asc_dvc->chip_type == ADV_CHIP_ASC38C0800) { in AdvISR()
6078 asc_dvc->carr_pending_cnt != 0) { in AdvISR()
6081 if (asc_dvc->chip_type == ADV_CHIP_ASC3550) { in AdvISR()
6089 adv_async_callback(asc_dvc, intrb_code); in AdvISR()
6096 le32_to_cpu(asc_dvc->irq_sp->next_vpa)) & ADV_RQ_DONE) != 0) { in AdvISR()
6106 u32 pa_offset = le32_to_cpu(asc_dvc->irq_sp->areq_vpa); in AdvISR()
6108 asc_dvc->irq_sp, pa_offset); in AdvISR()
6109 reqp = adv_get_reqp(asc_dvc, pa_offset); in AdvISR()
6128 free_carrp = asc_dvc->irq_sp; in AdvISR()
6129 asc_dvc->irq_sp = adv_get_carrier(asc_dvc, in AdvISR()
6132 free_carrp->next_vpa = asc_dvc->carr_freelist->carr_va; in AdvISR()
6133 asc_dvc->carr_freelist = free_carrp; in AdvISR()
6134 asc_dvc->carr_pending_cnt--; in AdvISR()
6145 adv_isr_callback(asc_dvc, scsiq); in AdvISR()
6157 static int AscSetLibErrorCode(ASC_DVC_VAR *asc_dvc, ushort err_code) in AscSetLibErrorCode() argument
6159 if (asc_dvc->err_code == 0) { in AscSetLibErrorCode()
6160 asc_dvc->err_code = err_code; in AscSetLibErrorCode()
6161 AscWriteLramWord(asc_dvc->iop_base, ASCV_ASCDVC_ERR_CODE_W, in AscSetLibErrorCode()
6196 static uchar AscGetSynPeriodIndex(ASC_DVC_VAR *asc_dvc, uchar syn_time) in AscGetSynPeriodIndex() argument
6203 period_table = asc_dvc->sdtr_period_tbl; in AscGetSynPeriodIndex()
6204 max_index = (int)asc_dvc->max_sdtr_index; in AscGetSynPeriodIndex()
6205 min_index = (int)asc_dvc->min_sdtr_index; in AscGetSynPeriodIndex()
6219 AscMsgOutSDTR(ASC_DVC_VAR *asc_dvc, uchar sdtr_period, uchar sdtr_offset) in AscMsgOutSDTR() argument
6221 PortAddr iop_base = asc_dvc->iop_base; in AscMsgOutSDTR()
6222 uchar sdtr_period_index = AscGetSynPeriodIndex(asc_dvc, sdtr_period); in AscMsgOutSDTR()
6232 if (sdtr_period_index <= asc_dvc->max_sdtr_index) { in AscMsgOutSDTR()
6247 AscCalSDTRData(ASC_DVC_VAR *asc_dvc, uchar sdtr_period, uchar syn_offset) in AscCalSDTRData() argument
6252 sdtr_period_ix = AscGetSynPeriodIndex(asc_dvc, sdtr_period); in AscCalSDTRData()
6253 if (sdtr_period_ix > asc_dvc->max_sdtr_index) in AscCalSDTRData()
6294 static void AscIsrChipHalted(ASC_DVC_VAR *asc_dvc) in AscIsrChipHalted() argument
6315 BUG_ON(!asc_dvc->drv_ptr); in AscIsrChipHalted()
6316 boardp = asc_dvc->drv_ptr; in AscIsrChipHalted()
6318 iop_base = asc_dvc->iop_base; in AscIsrChipHalted()
6330 if (asc_dvc->pci_fix_asyn_xfer & target_id) { in AscIsrChipHalted()
6336 if (asc_dvc->pci_fix_asyn_xfer & target_id) { in AscIsrChipHalted()
6343 if (asc_dvc->pci_fix_asyn_xfer & target_id) { in AscIsrChipHalted()
6365 asc_dvc->sdtr_period_tbl[asc_dvc->min_sdtr_index]) in AscIsrChipHalted()
6367 asc_dvc->sdtr_period_tbl[asc_dvc-> in AscIsrChipHalted()
6371 asc_dvc->sdtr_period_tbl[asc_dvc-> in AscIsrChipHalted()
6376 AscCalSDTRData(asc_dvc, ext_msg.xfer_period, in AscIsrChipHalted()
6381 asc_dvc->init_sdtr &= ~target_id; in AscIsrChipHalted()
6382 asc_dvc->sdtr_done &= ~target_id; in AscIsrChipHalted()
6391 asc_dvc->init_sdtr &= ~target_id; in AscIsrChipHalted()
6392 asc_dvc->sdtr_done &= ~target_id; in AscIsrChipHalted()
6397 asc_dvc->sdtr_done |= target_id; in AscIsrChipHalted()
6398 asc_dvc->init_sdtr |= target_id; in AscIsrChipHalted()
6399 asc_dvc->pci_fix_asyn_xfer &= in AscIsrChipHalted()
6402 AscCalSDTRData(asc_dvc, in AscIsrChipHalted()
6411 AscMsgOutSDTR(asc_dvc, in AscIsrChipHalted()
6414 asc_dvc->pci_fix_asyn_xfer &= in AscIsrChipHalted()
6417 AscCalSDTRData(asc_dvc, in AscIsrChipHalted()
6424 asc_dvc->sdtr_done |= target_id; in AscIsrChipHalted()
6425 asc_dvc->init_sdtr |= target_id; in AscIsrChipHalted()
6470 if ((asc_dvc->init_sdtr & target_id) != 0) { in AscIsrChipHalted()
6472 asc_dvc->sdtr_done &= ~target_id; in AscIsrChipHalted()
6476 AscMsgOutSDTR(asc_dvc, in AscIsrChipHalted()
6477 asc_dvc-> in AscIsrChipHalted()
6479 (uchar)(asc_dvc-> in AscIsrChipHalted()
6494 if ((asc_dvc->pci_fix_asyn_xfer & target_id) in AscIsrChipHalted()
6495 && !(asc_dvc->pci_fix_asyn_xfer_always & target_id) in AscIsrChipHalted()
6533 asc_dvc->init_sdtr &= ~target_id; in AscIsrChipHalted()
6534 asc_dvc->sdtr_done &= ~target_id; in AscIsrChipHalted()
6554 if ((cur_dvc_qng > 0) && (asc_dvc->cur_dvc_qng[tid_no] > 0)) { in AscIsrChipHalted()
6561 asc_dvc->queue_full_or_busy |= target_id; in AscIsrChipHalted()
6566 asc_dvc->max_dvc_qng[tid_no] = in AscIsrChipHalted()
6764 static int AscIsrQDone(ASC_DVC_VAR *asc_dvc) in AscIsrQDone() argument
6783 iop_base = asc_dvc->iop_base; in AscIsrQDone()
6794 asc_dvc->max_dma_count); in AscIsrQDone()
6813 AscSetLibErrorCode(asc_dvc, in AscIsrQDone()
6828 if (asc_dvc->queue_full_or_busy & target_id) { in AscIsrQDone()
6835 if (cur_target_qng < asc_dvc->max_dvc_qng[tid_no]) { in AscIsrQDone()
6842 asc_dvc->queue_full_or_busy &= ~target_id; in AscIsrQDone()
6845 if (asc_dvc->cur_total_qng >= n_q_used) { in AscIsrQDone()
6846 asc_dvc->cur_total_qng -= n_q_used; in AscIsrQDone()
6847 if (asc_dvc->cur_dvc_qng[tid_no] != 0) { in AscIsrQDone()
6848 asc_dvc->cur_dvc_qng[tid_no]--; in AscIsrQDone()
6851 AscSetLibErrorCode(asc_dvc, ASCQ_ERR_CUR_QNG); in AscIsrQDone()
6898 asc_isr_callback(asc_dvc, scsiq); in AscIsrQDone()
6904 asc_dvc->unit_not_ready &= ~target_id; in AscIsrQDone()
6906 asc_dvc->start_motor &= in AscIsrQDone()
6913 AscSetLibErrorCode(asc_dvc, ASCQ_ERR_Q_STATUS); in AscIsrQDone()
6916 asc_isr_callback(asc_dvc, scsiq); in AscIsrQDone()
6924 static int AscISR(ASC_DVC_VAR *asc_dvc) in AscISR() argument
6935 iop_base = asc_dvc->iop_base; in AscISR()
6941 if ((asc_dvc->init_state & ASC_INIT_STATE_END_LOAD_MC) == 0) { in AscISR()
6944 if (asc_dvc->in_critical_cnt != 0) { in AscISR()
6945 AscSetLibErrorCode(asc_dvc, ASCQ_ERR_ISR_ON_CRITICAL); in AscISR()
6948 if (asc_dvc->is_in_int) { in AscISR()
6949 AscSetLibErrorCode(asc_dvc, ASCQ_ERR_ISR_RE_ENTRY); in AscISR()
6952 asc_dvc->is_in_int = true; in AscISR()
6958 if (!(asc_dvc->bus_type & (ASC_IS_VL | ASC_IS_EISA))) { in AscISR()
6961 asc_dvc->sdtr_done = 0; in AscISR()
6984 AscIsrChipHalted(asc_dvc); in AscISR()
6987 if ((asc_dvc->dvc_cntl & ASC_CNTL_INT_MULTI_Q) != 0) { in AscISR()
6989 AscIsrQDone(asc_dvc)) & 0x01) != 0) { in AscISR()
6994 AscIsrQDone(asc_dvc)) == 1) { in AscISR()
7006 asc_dvc->is_in_int = false; in AscISR()
7034 ASC_DVC_VAR *asc_dvc = &boardp->dvc_var.asc_dvc_var; in advansys_reset() local
7038 status = AscInitAsc1000Driver(asc_dvc); in advansys_reset()
7041 if (asc_dvc->err_code || !asc_dvc->overrun_dma) { in advansys_reset()
7043 "0x%x, status: 0x%x\n", asc_dvc->err_code, in advansys_reset()
7198 static void AscAsyncFix(ASC_DVC_VAR *asc_dvc, struct scsi_device *sdev) in AscAsyncFix() argument
7203 if (!(asc_dvc->bug_fix_cntl & ASC_BUG_FIX_ASYN_USE_SYN)) in AscAsyncFix()
7205 if (asc_dvc->init_sdtr & tid_bits) in AscAsyncFix()
7209 asc_dvc->pci_fix_asyn_xfer_always |= tid_bits; in AscAsyncFix()
7211 asc_dvc->pci_fix_asyn_xfer |= tid_bits; in AscAsyncFix()
7214 asc_dvc->pci_fix_asyn_xfer &= ~tid_bits; in AscAsyncFix()
7216 if (asc_dvc->pci_fix_asyn_xfer & tid_bits) in AscAsyncFix()
7217 AscSetRunChipSynRegAtID(asc_dvc->iop_base, sdev->id, in AscAsyncFix()
7222 advansys_narrow_sdev_configure(struct scsi_device *sdev, ASC_DVC_VAR *asc_dvc) in advansys_narrow_sdev_configure() argument
7225 ASC_SCSI_BIT_ID_TYPE orig_use_tagged_qng = asc_dvc->use_tagged_qng; in advansys_narrow_sdev_configure()
7228 ASC_SCSI_BIT_ID_TYPE orig_init_sdtr = asc_dvc->init_sdtr; in advansys_narrow_sdev_configure()
7229 if ((asc_dvc->cfg->sdtr_enable & tid_bit) && sdev->sdtr) { in advansys_narrow_sdev_configure()
7230 asc_dvc->init_sdtr |= tid_bit; in advansys_narrow_sdev_configure()
7232 asc_dvc->init_sdtr &= ~tid_bit; in advansys_narrow_sdev_configure()
7235 if (orig_init_sdtr != asc_dvc->init_sdtr) in advansys_narrow_sdev_configure()
7236 AscAsyncFix(asc_dvc, sdev); in advansys_narrow_sdev_configure()
7240 if (asc_dvc->cfg->cmd_qng_enabled & tid_bit) { in advansys_narrow_sdev_configure()
7242 asc_dvc->cfg->can_tagged_qng |= tid_bit; in advansys_narrow_sdev_configure()
7243 asc_dvc->use_tagged_qng |= tid_bit; in advansys_narrow_sdev_configure()
7246 asc_dvc->max_dvc_qng[sdev->id]); in advansys_narrow_sdev_configure()
7250 asc_dvc->cfg->can_tagged_qng &= ~tid_bit; in advansys_narrow_sdev_configure()
7251 asc_dvc->use_tagged_qng &= ~tid_bit; in advansys_narrow_sdev_configure()
7256 (orig_use_tagged_qng != asc_dvc->use_tagged_qng)) { in advansys_narrow_sdev_configure()
7257 AscWriteLramByte(asc_dvc->iop_base, ASCV_DISC_ENABLE_B, in advansys_narrow_sdev_configure()
7258 asc_dvc->cfg->disc_enable); in advansys_narrow_sdev_configure()
7259 AscWriteLramByte(asc_dvc->iop_base, ASCV_USE_TAGGED_QNG_B, in advansys_narrow_sdev_configure()
7260 asc_dvc->use_tagged_qng); in advansys_narrow_sdev_configure()
7261 AscWriteLramByte(asc_dvc->iop_base, ASCV_CAN_TAGGED_QNG_B, in advansys_narrow_sdev_configure()
7262 asc_dvc->cfg->can_tagged_qng); in advansys_narrow_sdev_configure()
7264 asc_dvc->max_dvc_qng[sdev->id] = in advansys_narrow_sdev_configure()
7265 asc_dvc->cfg->max_tag_qng[sdev->id]; in advansys_narrow_sdev_configure()
7266 AscWriteLramByte(asc_dvc->iop_base, in advansys_narrow_sdev_configure()
7268 asc_dvc->max_dvc_qng[sdev->id]); in advansys_narrow_sdev_configure()
7426 struct asc_dvc_var *asc_dvc = &boardp->dvc_var.asc_dvc_var; in asc_build_req() local
7464 if ((asc_dvc->cur_dvc_qng[scp->device->id] > 0) && in asc_build_req()
7780 AscGetNumOfFreeQueue(ASC_DVC_VAR *asc_dvc, uchar target_ix, uchar n_qs) in AscGetNumOfFreeQueue() argument
7789 if ((asc_dvc->unit_not_ready & target_id) || in AscGetNumOfFreeQueue()
7790 (asc_dvc->queue_full_or_busy & target_id)) { in AscGetNumOfFreeQueue()
7794 cur_used_qs = (uint) asc_dvc->cur_total_qng + in AscGetNumOfFreeQueue()
7795 (uint) asc_dvc->last_q_shortage + (uint) ASC_MIN_FREE_Q; in AscGetNumOfFreeQueue()
7797 cur_used_qs = (uint) asc_dvc->cur_total_qng + in AscGetNumOfFreeQueue()
7800 if ((uint) (cur_used_qs + n_qs) <= (uint) asc_dvc->max_total_qng) { in AscGetNumOfFreeQueue()
7801 cur_free_qs = (uint) asc_dvc->max_total_qng - cur_used_qs; in AscGetNumOfFreeQueue()
7802 if (asc_dvc->cur_dvc_qng[tid_no] >= in AscGetNumOfFreeQueue()
7803 asc_dvc->max_dvc_qng[tid_no]) { in AscGetNumOfFreeQueue()
7809 if ((n_qs > asc_dvc->last_q_shortage) in AscGetNumOfFreeQueue()
7810 && (n_qs <= (asc_dvc->max_total_qng - ASC_MIN_FREE_Q))) { in AscGetNumOfFreeQueue()
7811 asc_dvc->last_q_shortage = n_qs; in AscGetNumOfFreeQueue()
7872 static int AscPutReadyQueue(ASC_DVC_VAR *asc_dvc, ASC_SCSI_Q *scsiq, uchar q_no) in AscPutReadyQueue() argument
7881 iop_base = asc_dvc->iop_base; in AscPutReadyQueue()
7882 if (((asc_dvc->init_sdtr & scsiq->q1.target_id) != 0) && in AscPutReadyQueue()
7883 ((asc_dvc->sdtr_done & scsiq->q1.target_id) == 0)) { in AscPutReadyQueue()
7887 (sdtr_data >> 4) & (asc_dvc->max_sdtr_index - 1); in AscPutReadyQueue()
7889 AscMsgOutSDTR(asc_dvc, in AscPutReadyQueue()
7890 asc_dvc->sdtr_period_tbl[syn_period_ix], in AscPutReadyQueue()
7895 if ((scsiq->q1.target_id & asc_dvc->use_tagged_qng) == 0) { in AscPutReadyQueue()
7915 AscPutReadySgListQueue(ASC_DVC_VAR *asc_dvc, ASC_SCSI_Q *scsiq, uchar q_no) in AscPutReadySgListQueue() argument
7930 iop_base = asc_dvc->iop_base; in AscPutReadySgListQueue()
8001 sta = AscPutReadyQueue(asc_dvc, scsiq, q_no); in AscPutReadySgListQueue()
8008 AscSendScsiQueue(ASC_DVC_VAR *asc_dvc, ASC_SCSI_Q *scsiq, uchar n_q_required) in AscSendScsiQueue() argument
8017 iop_base = asc_dvc->iop_base; in AscSendScsiQueue()
8026 asc_dvc->last_q_shortage = 0; in AscSendScsiQueue()
8029 sta = AscPutReadySgListQueue(asc_dvc, scsiq, in AscSendScsiQueue()
8036 sta = AscPutReadyQueue(asc_dvc, scsiq, free_q_head); in AscSendScsiQueue()
8041 asc_dvc->cur_total_qng += n_q_required; in AscSendScsiQueue()
8042 asc_dvc->cur_dvc_qng[tid_no]++; in AscSendScsiQueue()
8067 static int AscExeScsiQueue(ASC_DVC_VAR *asc_dvc, ASC_SCSI_Q *scsiq) in AscExeScsiQueue() argument
8086 iop_base = asc_dvc->iop_base; in AscExeScsiQueue()
8088 if (asc_dvc->err_code != 0) in AscExeScsiQueue()
8099 if ((asc_dvc->init_sdtr & scsiq->q1.target_id) != 0) { in AscExeScsiQueue()
8100 asc_dvc->sdtr_done &= ~scsiq->q1.target_id; in AscExeScsiQueue()
8102 AscMsgOutSDTR(asc_dvc, in AscExeScsiQueue()
8103 asc_dvc-> in AscExeScsiQueue()
8105 (uchar)(asc_dvc-> in AscExeScsiQueue()
8113 if (asc_dvc->in_critical_cnt != 0) { in AscExeScsiQueue()
8114 AscSetLibErrorCode(asc_dvc, ASCQ_ERR_CRITICAL_RE_ENTRY); in AscExeScsiQueue()
8117 asc_dvc->in_critical_cnt++; in AscExeScsiQueue()
8120 asc_dvc->in_critical_cnt--; in AscExeScsiQueue()
8124 asc_dvc->in_critical_cnt--; in AscExeScsiQueue()
8136 if ((asc_dvc->pci_fix_asyn_xfer & scsiq->q1.target_id) && in AscExeScsiQueue()
8137 !(asc_dvc->pci_fix_asyn_xfer_always & scsiq->q1.target_id)) { in AscExeScsiQueue()
8175 if (asc_dvc->bug_fix_cntl) { in AscExeScsiQueue()
8176 if (asc_dvc->bug_fix_cntl & ASC_BUG_FIX_IF_NOT_DWB) { in AscExeScsiQueue()
8216 if ((AscGetNumOfFreeQueue(asc_dvc, target_ix, n_q_required) >= in AscExeScsiQueue()
8220 AscSendScsiQueue(asc_dvc, scsiq, in AscExeScsiQueue()
8222 asc_dvc->in_critical_cnt--; in AscExeScsiQueue()
8227 if (asc_dvc->bug_fix_cntl) { in AscExeScsiQueue()
8228 if (asc_dvc->bug_fix_cntl & ASC_BUG_FIX_IF_NOT_DWB) { in AscExeScsiQueue()
8261 if ((AscGetNumOfFreeQueue(asc_dvc, target_ix, 1) >= 1) || in AscExeScsiQueue()
8263 if ((sta = AscSendScsiQueue(asc_dvc, scsiq, in AscExeScsiQueue()
8265 asc_dvc->in_critical_cnt--; in AscExeScsiQueue()
8270 asc_dvc->in_critical_cnt--; in AscExeScsiQueue()
8295 static int AdvExeScsiQueue(ADV_DVC_VAR *asc_dvc, adv_req_t *reqp) in AdvExeScsiQueue() argument
8310 iop_base = asc_dvc->iop_base; in AdvExeScsiQueue()
8316 new_carrp = adv_get_next_carrier(asc_dvc); in AdvExeScsiQueue()
8322 asc_dvc->carr_pending_cnt++; in AdvExeScsiQueue()
8328 scsiq->carr_va = asc_dvc->icq_sp->carr_va; in AdvExeScsiQueue()
8329 scsiq->carr_pa = asc_dvc->icq_sp->carr_pa; in AdvExeScsiQueue()
8336 asc_dvc->icq_sp->areq_vpa = scsiq->scsiq_rptr; in AdvExeScsiQueue()
8343 asc_dvc->icq_sp->next_vpa = new_carrp->carr_pa; in AdvExeScsiQueue()
8348 asc_dvc->icq_sp = new_carrp; in AdvExeScsiQueue()
8350 if (asc_dvc->chip_type == ADV_CHIP_ASC3550 || in AdvExeScsiQueue()
8351 asc_dvc->chip_type == ADV_CHIP_ASC38C0800) { in AdvExeScsiQueue()
8356 if (asc_dvc->chip_type == ADV_CHIP_ASC3550) { in AdvExeScsiQueue()
8365 } else if (asc_dvc->chip_type == ADV_CHIP_ASC38C1600) { in AdvExeScsiQueue()
8388 ASC_DVC_VAR *asc_dvc = &boardp->dvc_var.asc_dvc_var; in asc_execute_scsi_cmnd() local
8397 ret = AscExeScsiQueue(asc_dvc, &asc_scsi_q); in asc_execute_scsi_cmnd()
8399 err_code = asc_dvc->err_code; in asc_execute_scsi_cmnd()
8592 static void AscInitAscDvcVar(ASC_DVC_VAR *asc_dvc) in AscInitAscDvcVar() argument
8598 iop_base = asc_dvc->iop_base; in AscInitAscDvcVar()
8599 asc_dvc->err_code = 0; in AscInitAscDvcVar()
8600 if ((asc_dvc->bus_type & in AscInitAscDvcVar()
8602 asc_dvc->err_code |= ASC_IERR_NO_BUS_TYPE; in AscInitAscDvcVar()
8606 asc_dvc->bug_fix_cntl = 0; in AscInitAscDvcVar()
8607 asc_dvc->pci_fix_asyn_xfer = 0; in AscInitAscDvcVar()
8608 asc_dvc->pci_fix_asyn_xfer_always = 0; in AscInitAscDvcVar()
8610 asc_dvc->sdtr_done = 0; in AscInitAscDvcVar()
8611 asc_dvc->cur_total_qng = 0; in AscInitAscDvcVar()
8612 asc_dvc->is_in_int = false; in AscInitAscDvcVar()
8613 asc_dvc->in_critical_cnt = 0; in AscInitAscDvcVar()
8614 asc_dvc->last_q_shortage = 0; in AscInitAscDvcVar()
8615 asc_dvc->use_tagged_qng = 0; in AscInitAscDvcVar()
8616 asc_dvc->no_scam = 0; in AscInitAscDvcVar()
8617 asc_dvc->unit_not_ready = 0; in AscInitAscDvcVar()
8618 asc_dvc->queue_full_or_busy = 0; in AscInitAscDvcVar()
8619 asc_dvc->redo_scam = 0; in AscInitAscDvcVar()
8620 asc_dvc->res2 = 0; in AscInitAscDvcVar()
8621 asc_dvc->min_sdtr_index = 0; in AscInitAscDvcVar()
8622 asc_dvc->cfg->can_tagged_qng = 0; in AscInitAscDvcVar()
8623 asc_dvc->cfg->cmd_qng_enabled = 0; in AscInitAscDvcVar()
8624 asc_dvc->dvc_cntl = ASC_DEF_DVC_CNTL; in AscInitAscDvcVar()
8625 asc_dvc->init_sdtr = 0; in AscInitAscDvcVar()
8626 asc_dvc->max_total_qng = ASC_DEF_MAX_TOTAL_QNG; in AscInitAscDvcVar()
8627 asc_dvc->scsi_reset_wait = 3; in AscInitAscDvcVar()
8628 asc_dvc->start_motor = ASC_SCSI_WIDTH_BIT_SET; in AscInitAscDvcVar()
8629 asc_dvc->max_dma_count = AscGetMaxDmaCount(asc_dvc->bus_type); in AscInitAscDvcVar()
8630 asc_dvc->cfg->sdtr_enable = ASC_SCSI_WIDTH_BIT_SET; in AscInitAscDvcVar()
8631 asc_dvc->cfg->disc_enable = ASC_SCSI_WIDTH_BIT_SET; in AscInitAscDvcVar()
8632 asc_dvc->cfg->chip_scsi_id = ASC_DEF_CHIP_SCSI_ID; in AscInitAscDvcVar()
8633 chip_version = AscGetChipVersion(iop_base, asc_dvc->bus_type); in AscInitAscDvcVar()
8634 asc_dvc->cfg->chip_version = chip_version; in AscInitAscDvcVar()
8635 asc_dvc->sdtr_period_tbl = asc_syn_xfer_period; in AscInitAscDvcVar()
8636 asc_dvc->max_sdtr_index = 7; in AscInitAscDvcVar()
8637 if ((asc_dvc->bus_type & ASC_IS_PCI) && in AscInitAscDvcVar()
8639 asc_dvc->bus_type = ASC_IS_PCI_ULTRA; in AscInitAscDvcVar()
8640 asc_dvc->sdtr_period_tbl = asc_syn_ultra_xfer_period; in AscInitAscDvcVar()
8641 asc_dvc->max_sdtr_index = 15; in AscInitAscDvcVar()
8651 if (asc_dvc->bus_type == ASC_IS_PCI) { in AscInitAscDvcVar()
8657 asc_dvc->cur_dvc_qng[i] = 0; in AscInitAscDvcVar()
8658 asc_dvc->max_dvc_qng[i] = ASC_MAX_SCSI1_QNG; in AscInitAscDvcVar()
8659 asc_dvc->scsiq_busy_head[i] = (ASC_SCSI_Q *)0L; in AscInitAscDvcVar()
8660 asc_dvc->scsiq_busy_tail[i] = (ASC_SCSI_Q *)0L; in AscInitAscDvcVar()
8661 asc_dvc->cfg->max_tag_qng[i] = ASC_MAX_INRAM_TAG_QNG; in AscInitAscDvcVar()
8747 static int AscTestExternalLram(ASC_DVC_VAR *asc_dvc) in AscTestExternalLram() argument
8754 iop_base = asc_dvc->iop_base; in AscTestExternalLram()
8928 static int AscInitFromEEP(ASC_DVC_VAR *asc_dvc) in AscInitFromEEP() argument
8939 iop_base = asc_dvc->iop_base; in AscInitFromEEP()
8945 asc_dvc->init_state |= ASC_INIT_RESET_SCSI_DONE; in AscInitFromEEP()
8946 AscResetChipAndScsiBus(asc_dvc); in AscInitFromEEP()
8947 mdelay(asc_dvc->scsi_reset_wait * 1000); /* XXX: msleep? */ in AscInitFromEEP()
8950 asc_dvc->err_code |= ASC_IERR_START_STOP_CHIP; in AscInitFromEEP()
8955 asc_dvc->err_code |= ASC_IERR_SET_PC_ADDR; in AscInitFromEEP()
8966 chksum = AscGetEEPConfig(iop_base, eep_config, asc_dvc->bus_type); in AscInitFromEEP()
8973 if (asc_dvc->cfg->chip_version == 3) { in AscInitFromEEP()
8990 if (AscGetChipVersion(iop_base, asc_dvc->bus_type) == in AscInitFromEEP()
9016 asc_dvc->cfg->sdtr_enable = eep_config->init_sdtr; in AscInitFromEEP()
9017 asc_dvc->cfg->disc_enable = eep_config->disc_enable; in AscInitFromEEP()
9018 asc_dvc->cfg->cmd_qng_enabled = eep_config->use_cmd_qng; in AscInitFromEEP()
9019 asc_dvc->start_motor = eep_config->start_motor; in AscInitFromEEP()
9020 asc_dvc->dvc_cntl = eep_config->cntl; in AscInitFromEEP()
9021 asc_dvc->no_scam = eep_config->no_scam; in AscInitFromEEP()
9022 asc_dvc->cfg->adapter_info[0] = eep_config->adapter_info[0]; in AscInitFromEEP()
9023 asc_dvc->cfg->adapter_info[1] = eep_config->adapter_info[1]; in AscInitFromEEP()
9024 asc_dvc->cfg->adapter_info[2] = eep_config->adapter_info[2]; in AscInitFromEEP()
9025 asc_dvc->cfg->adapter_info[3] = eep_config->adapter_info[3]; in AscInitFromEEP()
9026 asc_dvc->cfg->adapter_info[4] = eep_config->adapter_info[4]; in AscInitFromEEP()
9027 asc_dvc->cfg->adapter_info[5] = eep_config->adapter_info[5]; in AscInitFromEEP()
9028 if (!AscTestExternalLram(asc_dvc)) { in AscInitFromEEP()
9029 if (((asc_dvc->bus_type & ASC_IS_PCI_ULTRA) == in AscInitFromEEP()
9056 asc_dvc->max_total_qng = eep_config->max_total_qng; in AscInitFromEEP()
9064 asc_dvc->cfg->chip_scsi_id = ASC_EEP_GET_CHIP_ID(eep_config); in AscInitFromEEP()
9065 if (((asc_dvc->bus_type & ASC_IS_PCI_ULTRA) == ASC_IS_PCI_ULTRA) && in AscInitFromEEP()
9066 !(asc_dvc->dvc_cntl & ASC_CNTL_SDTR_ENABLE_ULTRA)) { in AscInitFromEEP()
9067 asc_dvc->min_sdtr_index = ASC_SDTR_ULTRA_PCI_10MB_INDEX; in AscInitFromEEP()
9071 asc_dvc->dos_int13_table[i] = eep_config->dos_int13_table[i]; in AscInitFromEEP()
9072 asc_dvc->cfg->max_tag_qng[i] = eep_config->max_tag_qng; in AscInitFromEEP()
9073 asc_dvc->cfg->sdtr_period_offset[i] = in AscInitFromEEP()
9075 (asc_dvc->min_sdtr_index << 4)); in AscInitFromEEP()
9080 asc_dvc->bus_type)) != 0) { in AscInitFromEEP()
9095 ASC_DVC_VAR *asc_dvc = &board->dvc_var.asc_dvc_var; in AscInitGetConfig() local
9098 asc_dvc->init_state = ASC_INIT_STATE_BEG_GET_CFG; in AscInitGetConfig()
9099 if (asc_dvc->err_code != 0) in AscInitGetConfig()
9100 return asc_dvc->err_code; in AscInitGetConfig()
9102 if (AscFindSignature(asc_dvc->iop_base)) { in AscInitGetConfig()
9103 AscInitAscDvcVar(asc_dvc); in AscInitGetConfig()
9104 warn_code = AscInitFromEEP(asc_dvc); in AscInitGetConfig()
9105 asc_dvc->init_state |= ASC_INIT_STATE_END_GET_CFG; in AscInitGetConfig()
9106 if (asc_dvc->scsi_reset_wait > ASC_MAX_SCSI_RESET_WAIT) in AscInitGetConfig()
9107 asc_dvc->scsi_reset_wait = ASC_MAX_SCSI_RESET_WAIT; in AscInitGetConfig()
9109 asc_dvc->err_code = ASC_IERR_BAD_SIGNATURE; in AscInitGetConfig()
9139 if (asc_dvc->err_code != 0) in AscInitGetConfig()
9141 "0x%x\n", asc_dvc->err_code, asc_dvc->init_state); in AscInitGetConfig()
9143 return asc_dvc->err_code; in AscInitGetConfig()
9149 ASC_DVC_VAR *asc_dvc = &board->dvc_var.asc_dvc_var; in AscInitSetConfig() local
9150 PortAddr iop_base = asc_dvc->iop_base; in AscInitSetConfig()
9154 asc_dvc->init_state |= ASC_INIT_STATE_BEG_SET_CFG; in AscInitSetConfig()
9155 if (asc_dvc->err_code != 0) in AscInitSetConfig()
9156 return asc_dvc->err_code; in AscInitSetConfig()
9157 if (!AscFindSignature(asc_dvc->iop_base)) { in AscInitSetConfig()
9158 asc_dvc->err_code = ASC_IERR_BAD_SIGNATURE; in AscInitSetConfig()
9159 return asc_dvc->err_code; in AscInitSetConfig()
9168 if ((asc_dvc->cfg->cmd_qng_enabled & asc_dvc->cfg->disc_enable) != in AscInitSetConfig()
9169 asc_dvc->cfg->cmd_qng_enabled) { in AscInitSetConfig()
9170 asc_dvc->cfg->disc_enable = asc_dvc->cfg->cmd_qng_enabled; in AscInitSetConfig()
9177 if (asc_dvc->bus_type & ASC_IS_PCI) { in AscInitSetConfig()
9180 if ((asc_dvc->bus_type & ASC_IS_PCI_ULTRA) == ASC_IS_PCI_ULTRA) { in AscInitSetConfig()
9184 asc_dvc->bug_fix_cntl |= ASC_BUG_FIX_IF_NOT_DWB; in AscInitSetConfig()
9185 asc_dvc->bug_fix_cntl |= in AscInitSetConfig()
9191 if (AscSetChipScsiID(iop_base, asc_dvc->cfg->chip_scsi_id) != in AscInitSetConfig()
9192 asc_dvc->cfg->chip_scsi_id) { in AscInitSetConfig()
9193 asc_dvc->err_code |= ASC_IERR_SET_SCSI_ID; in AscInitSetConfig()
9196 asc_dvc->init_state |= ASC_INIT_STATE_END_SET_CFG; in AscInitSetConfig()
9225 if (asc_dvc->err_code != 0) in AscInitSetConfig()
9227 "0x%x\n", asc_dvc->err_code, asc_dvc->init_state); in AscInitSetConfig()
9229 return asc_dvc->err_code; in AscInitSetConfig()
9957 static int AdvInitFrom3550EEP(ADV_DVC_VAR *asc_dvc) in AdvInitFrom3550EEP() argument
9963 iop_base = asc_dvc->iop_base; in AdvInitFrom3550EEP()
10002 asc_dvc->wdtr_able = eep_config.wdtr_able; in AdvInitFrom3550EEP()
10003 asc_dvc->sdtr_able = eep_config.sdtr_able; in AdvInitFrom3550EEP()
10004 asc_dvc->ultra_able = eep_config.ultra_able; in AdvInitFrom3550EEP()
10005 asc_dvc->tagqng_able = eep_config.tagqng_able; in AdvInitFrom3550EEP()
10006 asc_dvc->cfg->disc_enable = eep_config.disc_enable; in AdvInitFrom3550EEP()
10007 asc_dvc->max_host_qng = eep_config.max_host_qng; in AdvInitFrom3550EEP()
10008 asc_dvc->max_dvc_qng = eep_config.max_dvc_qng; in AdvInitFrom3550EEP()
10009 asc_dvc->chip_scsi_id = (eep_config.adapter_scsi_id & ADV_MAX_TID); in AdvInitFrom3550EEP()
10010 asc_dvc->start_motor = eep_config.start_motor; in AdvInitFrom3550EEP()
10011 asc_dvc->scsi_reset_wait = eep_config.scsi_reset_delay; in AdvInitFrom3550EEP()
10012 asc_dvc->bios_ctrl = eep_config.bios_ctrl; in AdvInitFrom3550EEP()
10013 asc_dvc->no_scam = eep_config.scam_tolerant; in AdvInitFrom3550EEP()
10014 asc_dvc->cfg->serial1 = eep_config.serial_number_word1; in AdvInitFrom3550EEP()
10015 asc_dvc->cfg->serial2 = eep_config.serial_number_word2; in AdvInitFrom3550EEP()
10016 asc_dvc->cfg->serial3 = eep_config.serial_number_word3; in AdvInitFrom3550EEP()
10056 asc_dvc->max_host_qng = eep_config.max_host_qng; in AdvInitFrom3550EEP()
10057 asc_dvc->max_dvc_qng = eep_config.max_dvc_qng; in AdvInitFrom3550EEP()
10068 asc_dvc->cfg->termination = 0; /* auto termination */ in AdvInitFrom3550EEP()
10072 asc_dvc->cfg->termination = TERM_CTL_SEL; in AdvInitFrom3550EEP()
10076 asc_dvc->cfg->termination = TERM_CTL_SEL | TERM_CTL_H; in AdvInitFrom3550EEP()
10080 asc_dvc->cfg->termination = in AdvInitFrom3550EEP()
10087 asc_dvc->cfg->termination = 0; in AdvInitFrom3550EEP()
10107 static int AdvInitFrom38C0800EEP(ADV_DVC_VAR *asc_dvc) in AdvInitFrom38C0800EEP() argument
10115 iop_base = asc_dvc->iop_base; in AdvInitFrom38C0800EEP()
10155 asc_dvc->wdtr_able = eep_config.wdtr_able; in AdvInitFrom38C0800EEP()
10156 asc_dvc->sdtr_speed1 = eep_config.sdtr_speed1; in AdvInitFrom38C0800EEP()
10157 asc_dvc->sdtr_speed2 = eep_config.sdtr_speed2; in AdvInitFrom38C0800EEP()
10158 asc_dvc->sdtr_speed3 = eep_config.sdtr_speed3; in AdvInitFrom38C0800EEP()
10159 asc_dvc->sdtr_speed4 = eep_config.sdtr_speed4; in AdvInitFrom38C0800EEP()
10160 asc_dvc->tagqng_able = eep_config.tagqng_able; in AdvInitFrom38C0800EEP()
10161 asc_dvc->cfg->disc_enable = eep_config.disc_enable; in AdvInitFrom38C0800EEP()
10162 asc_dvc->max_host_qng = eep_config.max_host_qng; in AdvInitFrom38C0800EEP()
10163 asc_dvc->max_dvc_qng = eep_config.max_dvc_qng; in AdvInitFrom38C0800EEP()
10164 asc_dvc->chip_scsi_id = (eep_config.adapter_scsi_id & ADV_MAX_TID); in AdvInitFrom38C0800EEP()
10165 asc_dvc->start_motor = eep_config.start_motor; in AdvInitFrom38C0800EEP()
10166 asc_dvc->scsi_reset_wait = eep_config.scsi_reset_delay; in AdvInitFrom38C0800EEP()
10167 asc_dvc->bios_ctrl = eep_config.bios_ctrl; in AdvInitFrom38C0800EEP()
10168 asc_dvc->no_scam = eep_config.scam_tolerant; in AdvInitFrom38C0800EEP()
10169 asc_dvc->cfg->serial1 = eep_config.serial_number_word1; in AdvInitFrom38C0800EEP()
10170 asc_dvc->cfg->serial2 = eep_config.serial_number_word2; in AdvInitFrom38C0800EEP()
10171 asc_dvc->cfg->serial3 = eep_config.serial_number_word3; in AdvInitFrom38C0800EEP()
10177 asc_dvc->sdtr_able = 0; in AdvInitFrom38C0800EEP()
10180 sdtr_speed = asc_dvc->sdtr_speed1; in AdvInitFrom38C0800EEP()
10182 sdtr_speed = asc_dvc->sdtr_speed2; in AdvInitFrom38C0800EEP()
10184 sdtr_speed = asc_dvc->sdtr_speed3; in AdvInitFrom38C0800EEP()
10186 sdtr_speed = asc_dvc->sdtr_speed4; in AdvInitFrom38C0800EEP()
10189 asc_dvc->sdtr_able |= (1 << tid); in AdvInitFrom38C0800EEP()
10232 asc_dvc->max_host_qng = eep_config.max_host_qng; in AdvInitFrom38C0800EEP()
10233 asc_dvc->max_dvc_qng = eep_config.max_dvc_qng; in AdvInitFrom38C0800EEP()
10268 asc_dvc->cfg->termination = termination; /* auto termination for LVD */ in AdvInitFrom38C0800EEP()
10272 asc_dvc->cfg->termination = termination; in AdvInitFrom38C0800EEP()
10276 asc_dvc->cfg->termination = termination | TERM_LVD_HI; in AdvInitFrom38C0800EEP()
10280 asc_dvc->cfg->termination = termination | TERM_LVD; in AdvInitFrom38C0800EEP()
10286 asc_dvc->cfg->termination = termination; in AdvInitFrom38C0800EEP()
10306 static int AdvInitFrom38C1600EEP(ADV_DVC_VAR *asc_dvc) in AdvInitFrom38C1600EEP() argument
10314 iop_base = asc_dvc->iop_base; in AdvInitFrom38C1600EEP()
10325 struct pci_dev *pdev = adv_dvc_to_pdev(asc_dvc); in AdvInitFrom38C1600EEP()
10381 asc_dvc->wdtr_able = eep_config.wdtr_able; in AdvInitFrom38C1600EEP()
10382 asc_dvc->sdtr_speed1 = eep_config.sdtr_speed1; in AdvInitFrom38C1600EEP()
10383 asc_dvc->sdtr_speed2 = eep_config.sdtr_speed2; in AdvInitFrom38C1600EEP()
10384 asc_dvc->sdtr_speed3 = eep_config.sdtr_speed3; in AdvInitFrom38C1600EEP()
10385 asc_dvc->sdtr_speed4 = eep_config.sdtr_speed4; in AdvInitFrom38C1600EEP()
10386 asc_dvc->ppr_able = 0; in AdvInitFrom38C1600EEP()
10387 asc_dvc->tagqng_able = eep_config.tagqng_able; in AdvInitFrom38C1600EEP()
10388 asc_dvc->cfg->disc_enable = eep_config.disc_enable; in AdvInitFrom38C1600EEP()
10389 asc_dvc->max_host_qng = eep_config.max_host_qng; in AdvInitFrom38C1600EEP()
10390 asc_dvc->max_dvc_qng = eep_config.max_dvc_qng; in AdvInitFrom38C1600EEP()
10391 asc_dvc->chip_scsi_id = (eep_config.adapter_scsi_id & ASC_MAX_TID); in AdvInitFrom38C1600EEP()
10392 asc_dvc->start_motor = eep_config.start_motor; in AdvInitFrom38C1600EEP()
10393 asc_dvc->scsi_reset_wait = eep_config.scsi_reset_delay; in AdvInitFrom38C1600EEP()
10394 asc_dvc->bios_ctrl = eep_config.bios_ctrl; in AdvInitFrom38C1600EEP()
10395 asc_dvc->no_scam = eep_config.scam_tolerant; in AdvInitFrom38C1600EEP()
10401 asc_dvc->sdtr_able = 0; in AdvInitFrom38C1600EEP()
10404 sdtr_speed = asc_dvc->sdtr_speed1; in AdvInitFrom38C1600EEP()
10406 sdtr_speed = asc_dvc->sdtr_speed2; in AdvInitFrom38C1600EEP()
10408 sdtr_speed = asc_dvc->sdtr_speed3; in AdvInitFrom38C1600EEP()
10410 sdtr_speed = asc_dvc->sdtr_speed4; in AdvInitFrom38C1600EEP()
10413 asc_dvc->sdtr_able |= (1 << tid); in AdvInitFrom38C1600EEP()
10456 asc_dvc->max_host_qng = eep_config.max_host_qng; in AdvInitFrom38C1600EEP()
10457 asc_dvc->max_dvc_qng = eep_config.max_dvc_qng; in AdvInitFrom38C1600EEP()
10492 asc_dvc->cfg->termination = termination; /* auto termination for LVD */ in AdvInitFrom38C1600EEP()
10496 asc_dvc->cfg->termination = termination; in AdvInitFrom38C1600EEP()
10500 asc_dvc->cfg->termination = termination | TERM_LVD_HI; in AdvInitFrom38C1600EEP()
10504 asc_dvc->cfg->termination = termination | TERM_LVD; in AdvInitFrom38C1600EEP()
10510 asc_dvc->cfg->termination = termination; in AdvInitFrom38C1600EEP()
10529 ADV_DVC_VAR *asc_dvc = &board->dvc_var.adv_dvc_var; in AdvInitGetConfig() local
10531 AdvPortAddr iop_base = asc_dvc->iop_base; in AdvInitGetConfig()
10535 asc_dvc->err_code = 0; in AdvInitGetConfig()
10543 asc_dvc->cfg->control_flag = 0; in AdvInitGetConfig()
10546 asc_dvc->cfg->control_flag |= CONTROL_FLAG_IGNORE_PERR; in AdvInitGetConfig()
10548 asc_dvc->cfg->chip_version = in AdvInitGetConfig()
10549 AdvGetChipVersion(iop_base, asc_dvc->bus_type); in AdvInitGetConfig()
10563 asc_dvc->err_code = ASC_IERR_BAD_SIGNATURE; in AdvInitGetConfig()
10569 if (asc_dvc->chip_type != ADV_CHIP_ASC3550 && in AdvInitGetConfig()
10570 asc_dvc->chip_type != ADV_CHIP_ASC38C0800 && in AdvInitGetConfig()
10571 asc_dvc->chip_type != ADV_CHIP_ASC38C1600) { in AdvInitGetConfig()
10572 asc_dvc->err_code |= ASC_IERR_BAD_CHIPTYPE; in AdvInitGetConfig()
10585 if (asc_dvc->chip_type == ADV_CHIP_ASC38C1600) { in AdvInitGetConfig()
10586 status = AdvInitFrom38C1600EEP(asc_dvc); in AdvInitGetConfig()
10587 } else if (asc_dvc->chip_type == ADV_CHIP_ASC38C0800) { in AdvInitGetConfig()
10588 status = AdvInitFrom38C0800EEP(asc_dvc); in AdvInitGetConfig()
10590 status = AdvInitFrom3550EEP(asc_dvc); in AdvInitGetConfig()
10598 if (asc_dvc->err_code) in AdvInitGetConfig()
10600 asc_dvc->err_code); in AdvInitGetConfig()
10602 return asc_dvc->err_code; in AdvInitGetConfig()