/** * Copyright (C) 2005 - 2013 Emulex * All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version 2 * as published by the Free Software Foundation. The full GNU General * Public License is included in this distribution in the file called COPYING. * * Contact Information: * linux-drivers@emulex.com * * Emulex * 3333 Susan Street * Costa Mesa, CA 92626 */#include<scsi/iscsi_proto.h>#include"be.h"#include"be_mgmt.h"#include"be_main.h"intbeiscsi_pci_soft_reset(structbeiscsi_hba*phba){u32sreset;u8*pci_reset_offset=0;u8*pci_online0_offset=0;u8*pci_online1_offset=0;u32pconline0=0;u32pconline1=0;u32i;pci_reset_offset=(u8*)phba->pci_va+BE2_SOFT_RESET;pci_online0_offset=(u8*)phba->pci_va+BE2_PCI_ONLINE0;pci_online1_offset=(u8*)phba->pci_va+BE2_PCI_ONLINE1;sreset=readl((void*)pci_reset_offset);sreset|=BE2_SET_RESET;writel(sreset,(void*)pci_reset_offset);i=0;while(sreset&BE2_SET_RESET){if(i>64)break;msleep(100);sreset=readl((void*)pci_reset_offset);i++;}if(sreset&BE2_SET_RESET){printk(KERN_ERRDRV_NAME" Soft Reset did not deassert\n");return-EIO;}pconline1=BE2_MPU_IRAM_ONLINE;writel(pconline0,(void*)pci_online0_offset);writel(pconline1,(void*)pci_online1_offset);sreset|=BE2_SET_RESET;writel(sreset,(void*)pci_reset_offset);i=0;while(sreset&BE2_SET_RESET){if(i>64)break;msleep(1);sreset=readl((void*)pci_reset_offset);i++;}if(sreset&BE2_SET_RESET){printk(KERN_ERRDRV_NAME" MPU Online Soft Reset did not deassert\n");return-EIO;}return0;}intbe_chk_reset_complete(structbeiscsi_hba*phba){unsignedintnum_loop;u8*mpu_sem=0;u32status;num_loop=1000;mpu_sem=(u8*)phba->csr_va+MPU_EP_SEMAPHORE;msleep(5000);while(num_loop){status=readl((void*)mpu_sem);if((status&0x80000000)||(status&0x0000FFFF)==0xC000)break;msleep(60);num_loop--;}if((status&0x80000000)