/******************************************************************* * This file is part of the Emulex Linux Device Driver for * * Fibre Channel Host Bus Adapters. * * Copyright (C) 2017-2024 Broadcom. All Rights Reserved. The term * * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. * * Copyright (C) 2004-2016 Emulex. All rights reserved. * * EMULEX and SLI are trademarks of Emulex. * * www.broadcom.com * * Portions Copyright (C) 2004-2005 Christoph Hellwig * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of version 2 of the GNU General * * Public License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful. * * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND * * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, * * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE * * DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD * * TO BE LEGALLY INVALID. See the GNU General Public License for * * more details, a copy of which can be found in the file COPYING * * included with this package. * *******************************************************************/ #include <linux/blkdev.h> #include <linux/delay.h> #include <linux/dma-mapping.h> #include <linux/idr.h> #include <linux/interrupt.h> #include <linux/kthread.h> #include <linux/pci.h> #include <linux/slab.h> #include <linux/spinlock.h> #include <linux/sched/signal.h> #include <scsi/scsi.h> #include <scsi/scsi_device.h> #include <scsi/scsi_host.h> #include <scsi/scsi_transport_fc.h> #include "lpfc_hw4.h" #include "lpfc_hw.h" #include "lpfc_sli.h" #include "lpfc_sli4.h" #include "lpfc_nl.h" #include "lpfc_disc.h" #include "lpfc_scsi.h" #include "lpfc.h" #include "lpfc_logmsg.h" #include "lpfc_crtn.h" #include "lpfc_version.h" #include "lpfc_vport.h" inline void lpfc_vport_set_state(struct lpfc_vport *vport, enum fc_vport_state new_state) { … } int lpfc_alloc_vpi(struct lpfc_hba *phba) { … } static void lpfc_free_vpi(struct lpfc_hba *phba, int vpi) { … } static int lpfc_vport_sparm(struct lpfc_hba *phba, struct lpfc_vport *vport) { … } static int lpfc_valid_wwn_format(struct lpfc_hba *phba, struct lpfc_name *wwn, const char *name_type) { … } static int lpfc_unique_wwpn(struct lpfc_hba *phba, struct lpfc_vport *new_vport) { … } /** * lpfc_discovery_wait - Wait for driver discovery to quiesce * @vport: The virtual port for which this call is being executed. * * This driver calls this routine specifically from lpfc_vport_delete * to enforce a synchronous execution of vport * delete relative to discovery activities. The * lpfc_vport_delete routine should not return until it * can reasonably guarantee that discovery has quiesced. * Post FDISC LOGO, the driver must wait until its SAN teardown is * complete and all resources recovered before allowing * cleanup. * * This routine does not require any locks held. **/ static void lpfc_discovery_wait(struct lpfc_vport *vport) { … } int lpfc_vport_create(struct fc_vport *fc_vport, bool disable) { … } static int lpfc_send_npiv_logo(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) { … } static int disable_vport(struct fc_vport *fc_vport) { … } static int enable_vport(struct fc_vport *fc_vport) { … } int lpfc_vport_disable(struct fc_vport *fc_vport, bool disable) { … } int lpfc_vport_delete(struct fc_vport *fc_vport) { … } struct lpfc_vport ** lpfc_create_vport_work_array(struct lpfc_hba *phba) { … } void lpfc_destroy_vport_work_array(struct lpfc_hba *phba, struct lpfc_vport **vports) { … }