1b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati/* 2b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * Copyright (c) 2005-2010 Brocade Communications Systems, Inc. 3b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * All rights reserved 4b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * www.brocade.com 5b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * 6b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * Linux driver for Brocade Fibre Channel Host Bus Adapter. 7b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * 8b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * This program is free software; you can redistribute it and/or modify it 9b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * under the terms of the GNU General Public License (GPL) Version 2 as 10b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * published by the Free Software Foundation 11b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * 12b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * This program is distributed in the hope that it will be useful, but 13b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * WITHOUT ANY WARRANTY; without even the implied warranty of 14b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * General Public License for more details. 16b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati */ 17b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 18b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati#include <linux/uaccess.h> 19b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati#include "bfad_drv.h" 20b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati#include "bfad_im.h" 21b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati#include "bfad_bsg.h" 22b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 23b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna GudipatiBFA_TRC_FILE(LDRV, BSG); 24b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 25601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiint 26601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_ioc_enable(struct bfad_s *bfad, void *cmd) 27601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 28601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_gen_s *iocmd = (struct bfa_bsg_gen_s *)cmd; 29601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati int rc = 0; 30601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned long flags; 31601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 32601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 33601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati /* If IOC is not in disabled state - return */ 34601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (!bfa_ioc_is_disabled(&bfad->bfa.ioc)) { 35601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 36601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_IOC_FAILURE; 37601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return rc; 38601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 39601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 40601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati init_completion(&bfad->enable_comp); 41601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_iocfc_enable(&bfad->bfa); 42601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_OK; 43601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 44601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati wait_for_completion(&bfad->enable_comp); 45601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 46601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return rc; 47601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 48601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 49601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiint 50601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_ioc_disable(struct bfad_s *bfad, void *cmd) 51601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 52601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_gen_s *iocmd = (struct bfa_bsg_gen_s *)cmd; 53601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati int rc = 0; 54601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned long flags; 55601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 56601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 57601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (bfad->disable_active) { 58601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 599afbcfab74d26051702862b57c0115f71477a3ccKrishna Gudipati return -EBUSY; 60601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 61601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 62601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfad->disable_active = BFA_TRUE; 63601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati init_completion(&bfad->disable_comp); 64601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_iocfc_disable(&bfad->bfa); 65601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 66601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 67601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati wait_for_completion(&bfad->disable_comp); 68601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfad->disable_active = BFA_FALSE; 69601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_OK; 70601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 71601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return rc; 72601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 73601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 74b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatistatic int 75b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_iocmd_ioc_get_info(struct bfad_s *bfad, void *cmd) 76b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 77b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati int i; 78b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_bsg_ioc_info_s *iocmd = (struct bfa_bsg_ioc_info_s *)cmd; 79b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfad_im_port_s *im_port; 80b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_port_attr_s pattr; 81b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati unsigned long flags; 82b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 83b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 84b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfa_fcport_get_attr(&bfad->bfa, &pattr); 85b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->nwwn = pattr.nwwn; 86b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->pwwn = pattr.pwwn; 87b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->ioc_type = bfa_get_type(&bfad->bfa); 88b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->mac = bfa_get_mac(&bfad->bfa); 89b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->factory_mac = bfa_get_mfg_mac(&bfad->bfa); 90b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfa_get_adapter_serial_num(&bfad->bfa, iocmd->serialnum); 91b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->factorynwwn = pattr.factorynwwn; 92b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->factorypwwn = pattr.factorypwwn; 937826f304b1efa5ab839cf029742290f51c4fa009Krishna Gudipati iocmd->bfad_num = bfad->inst_no; 94b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati im_port = bfad->pport.im_port; 95b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->host = im_port->shost->host_no; 96b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 97b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 98b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati strcpy(iocmd->name, bfad->adapter_name); 99b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati strcpy(iocmd->port_name, bfad->port_name); 100b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati strcpy(iocmd->hwpath, bfad->pci_name); 101b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 102b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* set adapter hw path */ 103b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati strcpy(iocmd->adapter_hwpath, bfad->pci_name); 104b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati i = strlen(iocmd->adapter_hwpath) - 1; 105b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati while (iocmd->adapter_hwpath[i] != '.') 106b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati i--; 107b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->adapter_hwpath[i] = '\0'; 108b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->status = BFA_STATUS_OK; 109b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return 0; 110b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 111b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 112b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatistatic int 113b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_iocmd_ioc_get_attr(struct bfad_s *bfad, void *cmd) 114b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 115b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_bsg_ioc_attr_s *iocmd = (struct bfa_bsg_ioc_attr_s *)cmd; 116b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati unsigned long flags; 117b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 118b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 119b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfa_ioc_get_attr(&bfad->bfa.ioc, &iocmd->ioc_attr); 120b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 121b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 122b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* fill in driver attr info */ 123b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati strcpy(iocmd->ioc_attr.driver_attr.driver, BFAD_DRIVER_NAME); 124b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati strncpy(iocmd->ioc_attr.driver_attr.driver_ver, 125b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati BFAD_DRIVER_VERSION, BFA_VERSION_LEN); 126b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati strcpy(iocmd->ioc_attr.driver_attr.fw_ver, 127b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->ioc_attr.adapter_attr.fw_ver); 128b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati strcpy(iocmd->ioc_attr.driver_attr.bios_ver, 129b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->ioc_attr.adapter_attr.optrom_ver); 130b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 131b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* copy chip rev info first otherwise it will be overwritten */ 132b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati memcpy(bfad->pci_attr.chip_rev, iocmd->ioc_attr.pci_attr.chip_rev, 133b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sizeof(bfad->pci_attr.chip_rev)); 134b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati memcpy(&iocmd->ioc_attr.pci_attr, &bfad->pci_attr, 135b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sizeof(struct bfa_ioc_pci_attr_s)); 136b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 137b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->status = BFA_STATUS_OK; 138b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return 0; 139b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 140b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 141601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiint 142601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_ioc_get_stats(struct bfad_s *bfad, void *cmd) 143601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 144601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_ioc_stats_s *iocmd = (struct bfa_bsg_ioc_stats_s *)cmd; 145601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 146601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_ioc_get_stats(&bfad->bfa, &iocmd->ioc_stats); 147601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_OK; 148601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 149601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 150601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 151601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiint 152601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_ioc_get_fwstats(struct bfad_s *bfad, void *cmd, 153601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned int payload_len) 154601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 155601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_ioc_fwstats_s *iocmd = 156601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati (struct bfa_bsg_ioc_fwstats_s *)cmd; 157601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati void *iocmd_bufptr; 158601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned long flags; 159601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 160601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (bfad_chk_iocmd_sz(payload_len, 161601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati sizeof(struct bfa_bsg_ioc_fwstats_s), 162601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati sizeof(struct bfa_fw_stats_s)) != BFA_STATUS_OK) { 163601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_VERSION_FAIL; 164601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati goto out; 165601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 166601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 167601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd_bufptr = (char *)iocmd + sizeof(struct bfa_bsg_ioc_fwstats_s); 168601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 169601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = bfa_ioc_fw_stats_get(&bfad->bfa.ioc, iocmd_bufptr); 170601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 171601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 172601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) { 173601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_trc(bfad, iocmd->status); 174601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati goto out; 175601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 176601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiout: 177601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_trc(bfad, 0x6666); 178601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 179601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 180601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 181601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiint 182f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_ioc_reset_stats(struct bfad_s *bfad, void *cmd, unsigned int v_cmd) 183f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 184f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_gen_s *iocmd = (struct bfa_bsg_gen_s *)cmd; 185f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned long flags; 186f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 187f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (v_cmd == IOCMD_IOC_RESET_STATS) { 188f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati bfa_ioc_clear_stats(&bfad->bfa); 189f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_OK; 190f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } else if (v_cmd == IOCMD_IOC_RESET_FWSTATS) { 191f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 192f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = bfa_ioc_fw_stats_clear(&bfad->bfa.ioc); 193f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 194f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } 195f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 196f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 197f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 198f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 199f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 200f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_ioc_set_name(struct bfad_s *bfad, void *cmd, unsigned int v_cmd) 201f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 202f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_ioc_name_s *iocmd = (struct bfa_bsg_ioc_name_s *) cmd; 203f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 204f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (v_cmd == IOCMD_IOC_SET_ADAPTER_NAME) 205f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati strcpy(bfad->adapter_name, iocmd->name); 206f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati else if (v_cmd == IOCMD_IOC_SET_PORT_NAME) 207f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati strcpy(bfad->port_name, iocmd->name); 208f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 209f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_OK; 210f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 211f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 212f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 213f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 214601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_iocfc_get_attr(struct bfad_s *bfad, void *cmd) 215601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 216601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_iocfc_attr_s *iocmd = (struct bfa_bsg_iocfc_attr_s *)cmd; 217601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 218601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_OK; 219601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_iocfc_get_attr(&bfad->bfa, &iocmd->iocfc_attr); 220601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 221601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 222601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 223601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 224601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiint 225601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_iocfc_set_intr(struct bfad_s *bfad, void *cmd) 226601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 227601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_iocfc_intr_s *iocmd = (struct bfa_bsg_iocfc_intr_s *)cmd; 228601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned long flags; 229601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 230601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 231601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = bfa_iocfc_israttr_set(&bfad->bfa, &iocmd->attr); 232601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 233601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 234601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 235601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 236601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 237601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiint 238601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_port_enable(struct bfad_s *bfad, void *cmd) 239601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 240601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_gen_s *iocmd = (struct bfa_bsg_gen_s *)cmd; 241601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfad_hal_comp fcomp; 242601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned long flags; 243601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 244601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati init_completion(&fcomp.comp); 245601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 246601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = bfa_port_enable(&bfad->bfa.modules.port, 247601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfad_hcb_comp, &fcomp); 248601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 249601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) { 250601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_trc(bfad, iocmd->status); 251601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 252601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 253601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati wait_for_completion(&fcomp.comp); 254601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = fcomp.status; 255601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 256601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 257601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 258601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiint 259601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_port_disable(struct bfad_s *bfad, void *cmd) 260601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 261601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_gen_s *iocmd = (struct bfa_bsg_gen_s *)cmd; 262601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfad_hal_comp fcomp; 263601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned long flags; 264601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 265601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati init_completion(&fcomp.comp); 266601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 267601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = bfa_port_disable(&bfad->bfa.modules.port, 268601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfad_hcb_comp, &fcomp); 269601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 270601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 271601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) { 272601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_trc(bfad, iocmd->status); 273601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 274601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 275601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati wait_for_completion(&fcomp.comp); 276601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = fcomp.status; 277601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 278601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 279601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 280b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatistatic int 281b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_iocmd_port_get_attr(struct bfad_s *bfad, void *cmd) 282b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 283b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_bsg_port_attr_s *iocmd = (struct bfa_bsg_port_attr_s *)cmd; 284b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_lport_attr_s port_attr; 285b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati unsigned long flags; 286b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 287b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 288b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfa_fcport_get_attr(&bfad->bfa, &iocmd->attr); 289b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfa_fcs_lport_get_attr(&bfad->bfa_fcs.fabric.bport, &port_attr); 290b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 291b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 292b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (iocmd->attr.topology != BFA_PORT_TOPOLOGY_NONE) 293b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->attr.pid = port_attr.pid; 294b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati else 295b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->attr.pid = 0; 296b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 297b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->attr.port_type = port_attr.port_type; 298b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->attr.loopback = port_attr.loopback; 299b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->attr.authfail = port_attr.authfail; 300b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati strncpy(iocmd->attr.port_symname.symname, 301b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati port_attr.port_cfg.sym_name.symname, 302b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sizeof(port_attr.port_cfg.sym_name.symname)); 303b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 304b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->status = BFA_STATUS_OK; 305b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return 0; 306b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 307b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 308601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiint 309601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_port_get_stats(struct bfad_s *bfad, void *cmd, 310601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned int payload_len) 311601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 312601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_port_stats_s *iocmd = (struct bfa_bsg_port_stats_s *)cmd; 313601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfad_hal_comp fcomp; 314601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati void *iocmd_bufptr; 315601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned long flags; 316601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 317601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (bfad_chk_iocmd_sz(payload_len, 318601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati sizeof(struct bfa_bsg_port_stats_s), 319601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati sizeof(union bfa_port_stats_u)) != BFA_STATUS_OK) { 320601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_VERSION_FAIL; 321601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 322601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 323601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 324601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd_bufptr = (char *)iocmd + sizeof(struct bfa_bsg_port_stats_s); 325601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 326601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati init_completion(&fcomp.comp); 327601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 328601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = bfa_port_get_stats(&bfad->bfa.modules.port, 329601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd_bufptr, bfad_hcb_comp, &fcomp); 330601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 331601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) { 332601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_trc(bfad, iocmd->status); 333601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati goto out; 334601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 335601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 336601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati wait_for_completion(&fcomp.comp); 337601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = fcomp.status; 338601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiout: 339601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 340601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 341601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 342f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 343f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_port_reset_stats(struct bfad_s *bfad, void *cmd) 344f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 345f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_gen_s *iocmd = (struct bfa_bsg_gen_s *)cmd; 346f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfad_hal_comp fcomp; 347f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned long flags; 348f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 349f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati init_completion(&fcomp.comp); 350f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 351f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = bfa_port_clear_stats(&bfad->bfa.modules.port, 352f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati bfad_hcb_comp, &fcomp); 353f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 354f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) { 355f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati bfa_trc(bfad, iocmd->status); 356f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 357f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } 358f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati wait_for_completion(&fcomp.comp); 359f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = fcomp.status; 360f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 361f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 362f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 363f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 364f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_set_port_cfg(struct bfad_s *bfad, void *iocmd, unsigned int v_cmd) 365f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 366f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_port_cfg_s *cmd = (struct bfa_bsg_port_cfg_s *)iocmd; 367f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned long flags; 368f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 369f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 370f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (v_cmd == IOCMD_PORT_CFG_TOPO) 371f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati cmd->status = bfa_fcport_cfg_topology(&bfad->bfa, cmd->param); 372f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati else if (v_cmd == IOCMD_PORT_CFG_SPEED) 373f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati cmd->status = bfa_fcport_cfg_speed(&bfad->bfa, cmd->param); 374f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati else if (v_cmd == IOCMD_PORT_CFG_ALPA) 375f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati cmd->status = bfa_fcport_cfg_hardalpa(&bfad->bfa, cmd->param); 376f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati else if (v_cmd == IOCMD_PORT_CLR_ALPA) 377f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati cmd->status = bfa_fcport_clr_hardalpa(&bfad->bfa); 378f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 379f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 380f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 381f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 382f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 383f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 384f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_port_cfg_maxfrsize(struct bfad_s *bfad, void *cmd) 385f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 386f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_port_cfg_maxfrsize_s *iocmd = 387f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati (struct bfa_bsg_port_cfg_maxfrsize_s *)cmd; 388f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned long flags; 389f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 390f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 391f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = bfa_fcport_cfg_maxfrsize(&bfad->bfa, iocmd->maxfrsize); 392f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 393f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 394f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 395f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 396f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 397f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 398f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_port_cfg_bbsc(struct bfad_s *bfad, void *cmd, unsigned int v_cmd) 399f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 400f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_gen_s *iocmd = (struct bfa_bsg_gen_s *)cmd; 401f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(&bfad->bfa); 402f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned long flags; 403f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 404f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 405f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (bfa_ioc_get_type(&bfad->bfa.ioc) == BFA_IOC_TYPE_FC) { 406f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (v_cmd == IOCMD_PORT_BBSC_ENABLE) 407f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati fcport->cfg.bb_scn_state = BFA_TRUE; 408f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati else if (v_cmd == IOCMD_PORT_BBSC_DISABLE) 409f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati fcport->cfg.bb_scn_state = BFA_FALSE; 410f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } 411f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 412f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 413f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_OK; 414f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 415f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 416f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 417b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatistatic int 418b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_iocmd_lport_get_attr(struct bfad_s *bfad, void *cmd) 419b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 420b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_fcs_lport_s *fcs_port; 421b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_bsg_lport_attr_s *iocmd = (struct bfa_bsg_lport_attr_s *)cmd; 422b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati unsigned long flags; 423b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 424b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 425b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati fcs_port = bfa_fcs_lookup_port(&bfad->bfa_fcs, 426b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->vf_id, iocmd->pwwn); 427b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (fcs_port == NULL) { 428b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 429b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_LWWN; 430b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out; 431b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 432b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 433b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfa_fcs_lport_get_attr(fcs_port, &iocmd->port_attr); 434b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 435b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->status = BFA_STATUS_OK; 436b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatiout: 437b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return 0; 438b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 439b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 440601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiint 441601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_lport_get_stats(struct bfad_s *bfad, void *cmd) 442601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 443601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_fcs_lport_s *fcs_port; 444601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_lport_stats_s *iocmd = 445601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati (struct bfa_bsg_lport_stats_s *)cmd; 446601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned long flags; 447601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 448601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 449601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati fcs_port = bfa_fcs_lookup_port(&bfad->bfa_fcs, 450601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->vf_id, iocmd->pwwn); 451601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (fcs_port == NULL) { 452601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 453601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_LWWN; 454601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati goto out; 455601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 456601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 457601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_fcs_lport_get_stats(fcs_port, &iocmd->port_stats); 458601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 459601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_OK; 460601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiout: 461601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 462601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 463601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 464601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiint 465f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_lport_reset_stats(struct bfad_s *bfad, void *cmd) 466f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 467f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_fcs_lport_s *fcs_port; 468f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_reset_stats_s *iocmd = 469f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati (struct bfa_bsg_reset_stats_s *)cmd; 470f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_fcpim_s *fcpim = BFA_FCPIM(&bfad->bfa); 471f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct list_head *qe, *qen; 472f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_itnim_s *itnim; 473f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned long flags; 474f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 475f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 476f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati fcs_port = bfa_fcs_lookup_port(&bfad->bfa_fcs, 477f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->vf_id, iocmd->vpwwn); 478f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (fcs_port == NULL) { 479f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 480f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_LWWN; 481f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati goto out; 482f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } 483f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 484f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati bfa_fcs_lport_clear_stats(fcs_port); 485f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati /* clear IO stats from all active itnims */ 486f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati list_for_each_safe(qe, qen, &fcpim->itnim_q) { 487f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati itnim = (struct bfa_itnim_s *) qe; 488f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (itnim->rport->rport_info.lp_tag != fcs_port->lp_tag) 489f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati continue; 490f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati bfa_itnim_clear_stats(itnim); 491f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } 492f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 493f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_OK; 494f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiout: 495f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 496f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 497f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 498f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 499601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_lport_get_iostats(struct bfad_s *bfad, void *cmd) 500601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 501601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_fcs_lport_s *fcs_port; 502601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_lport_iostats_s *iocmd = 503601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati (struct bfa_bsg_lport_iostats_s *)cmd; 504601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned long flags; 505601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 506601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 507601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati fcs_port = bfa_fcs_lookup_port(&bfad->bfa_fcs, 508601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->vf_id, iocmd->pwwn); 509601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (fcs_port == NULL) { 510601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 511601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_LWWN; 512601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati goto out; 513601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 514601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 515601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_fcpim_port_iostats(&bfad->bfa, &iocmd->iostats, 516601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati fcs_port->lp_tag); 517601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 518601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_OK; 519601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiout: 520601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 521601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 522601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 523601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiint 524601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_lport_get_rports(struct bfad_s *bfad, void *cmd, 525601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned int payload_len) 526601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 527601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_lport_get_rports_s *iocmd = 528601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati (struct bfa_bsg_lport_get_rports_s *)cmd; 529601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_fcs_lport_s *fcs_port; 530601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned long flags; 531601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati void *iocmd_bufptr; 532601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 533601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (iocmd->nrports == 0) 5349afbcfab74d26051702862b57c0115f71477a3ccKrishna Gudipati return -EINVAL; 535601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 536601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (bfad_chk_iocmd_sz(payload_len, 537601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati sizeof(struct bfa_bsg_lport_get_rports_s), 538601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati sizeof(wwn_t) * iocmd->nrports) != BFA_STATUS_OK) { 539601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_VERSION_FAIL; 540601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 541601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 542601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 543601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd_bufptr = (char *)iocmd + 544601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati sizeof(struct bfa_bsg_lport_get_rports_s); 545601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 546601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati fcs_port = bfa_fcs_lookup_port(&bfad->bfa_fcs, 547601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->vf_id, iocmd->pwwn); 548601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (fcs_port == NULL) { 549601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 550601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_trc(bfad, 0); 551601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_LWWN; 552601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati goto out; 553601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 554601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 555601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_fcs_lport_get_rports(fcs_port, (wwn_t *)iocmd_bufptr, 556601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati &iocmd->nrports); 557601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 558601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_OK; 559601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiout: 560601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 561601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 562601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 563601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiint 564601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_rport_get_attr(struct bfad_s *bfad, void *cmd) 565601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 566601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_rport_attr_s *iocmd = (struct bfa_bsg_rport_attr_s *)cmd; 567601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_fcs_lport_s *fcs_port; 568601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_fcs_rport_s *fcs_rport; 569601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned long flags; 570601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 571601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 572601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati fcs_port = bfa_fcs_lookup_port(&bfad->bfa_fcs, 573601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->vf_id, iocmd->pwwn); 574601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (fcs_port == NULL) { 575601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_trc(bfad, 0); 576601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 577601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_LWWN; 578601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati goto out; 579601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 580601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 581601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati fcs_rport = bfa_fcs_rport_lookup(fcs_port, iocmd->rpwwn); 582601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (fcs_rport == NULL) { 583601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_trc(bfad, 0); 584601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 585601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_RWWN; 586601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati goto out; 587601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 588601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 589601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_fcs_rport_get_attr(fcs_rport, &iocmd->attr); 590601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 591601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_OK; 592601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiout: 593601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 594601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 595601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 596b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatistatic int 597b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_iocmd_rport_get_addr(struct bfad_s *bfad, void *cmd) 598b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 599b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_bsg_rport_scsi_addr_s *iocmd = 600b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati (struct bfa_bsg_rport_scsi_addr_s *)cmd; 601b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_fcs_lport_s *fcs_port; 602b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_fcs_itnim_s *fcs_itnim; 603b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfad_itnim_s *drv_itnim; 604b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati unsigned long flags; 605b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 606b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 607b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati fcs_port = bfa_fcs_lookup_port(&bfad->bfa_fcs, 608b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->vf_id, iocmd->pwwn); 609b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (fcs_port == NULL) { 610b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfa_trc(bfad, 0); 611b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 612b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_LWWN; 613b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out; 614b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 615b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 616b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati fcs_itnim = bfa_fcs_itnim_lookup(fcs_port, iocmd->rpwwn); 617b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (fcs_itnim == NULL) { 618b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfa_trc(bfad, 0); 619b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 620b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_RWWN; 621b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out; 622b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 623b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 624b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_itnim = fcs_itnim->itnim_drv; 625b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 626b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (drv_itnim && drv_itnim->im_port) 627b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->host = drv_itnim->im_port->shost->host_no; 628b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati else { 629b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfa_trc(bfad, 0); 630b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 631b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_RWWN; 632b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out; 633b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 634b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 635b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->target = drv_itnim->scsi_tgt_id; 636b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 637b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 638b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->bus = 0; 639b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->lun = 0; 640b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->status = BFA_STATUS_OK; 641b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatiout: 642b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return 0; 643b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 644b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 645601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiint 646601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_rport_get_stats(struct bfad_s *bfad, void *cmd) 647601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 648601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_rport_stats_s *iocmd = 649601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati (struct bfa_bsg_rport_stats_s *)cmd; 650601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_fcs_lport_s *fcs_port; 651601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_fcs_rport_s *fcs_rport; 652601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned long flags; 653601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 654601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 655601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati fcs_port = bfa_fcs_lookup_port(&bfad->bfa_fcs, 656601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->vf_id, iocmd->pwwn); 657601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (fcs_port == NULL) { 658601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_trc(bfad, 0); 659601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 660601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_LWWN; 661601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati goto out; 662601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 663601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 664601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati fcs_rport = bfa_fcs_rport_lookup(fcs_port, iocmd->rpwwn); 665601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (fcs_rport == NULL) { 666601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_trc(bfad, 0); 667601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 668601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_RWWN; 669601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati goto out; 670601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 671601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 672601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati memcpy((void *)&iocmd->stats, (void *)&fcs_rport->stats, 673601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati sizeof(struct bfa_rport_stats_s)); 674601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati memcpy((void *)&iocmd->stats.hal_stats, 675601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati (void *)&(bfa_fcs_rport_get_halrport(fcs_rport)->stats), 676601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati sizeof(struct bfa_rport_hal_stats_s)); 677601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 678601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 679601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_OK; 680601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiout: 681601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 682601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 683601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 684f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 685f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_rport_clr_stats(struct bfad_s *bfad, void *cmd) 686f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 687f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_rport_reset_stats_s *iocmd = 688f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati (struct bfa_bsg_rport_reset_stats_s *)cmd; 689f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_fcs_lport_s *fcs_port; 690f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_fcs_rport_s *fcs_rport; 691f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_rport_s *rport; 692f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned long flags; 693f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 694f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 695f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati fcs_port = bfa_fcs_lookup_port(&bfad->bfa_fcs, 696f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->vf_id, iocmd->pwwn); 697f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (fcs_port == NULL) { 698f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 699f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_LWWN; 700f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati goto out; 701f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } 702f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 703f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati fcs_rport = bfa_fcs_rport_lookup(fcs_port, iocmd->rpwwn); 704f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (fcs_rport == NULL) { 705f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 706f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_RWWN; 707f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati goto out; 708f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } 709f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 710f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati memset((char *)&fcs_rport->stats, 0, sizeof(struct bfa_rport_stats_s)); 711f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rport = bfa_fcs_rport_get_halrport(fcs_rport); 712f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati memset(&rport->stats, 0, sizeof(rport->stats)); 713f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 714f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_OK; 715f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiout: 716f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 717f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 718f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 719f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 720f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_rport_set_speed(struct bfad_s *bfad, void *cmd) 721f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 722f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_rport_set_speed_s *iocmd = 723f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati (struct bfa_bsg_rport_set_speed_s *)cmd; 724f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_fcs_lport_s *fcs_port; 725f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_fcs_rport_s *fcs_rport; 726f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned long flags; 727f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 728f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 729f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati fcs_port = bfa_fcs_lookup_port(&bfad->bfa_fcs, 730f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->vf_id, iocmd->pwwn); 731f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (fcs_port == NULL) { 732f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 733f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_LWWN; 734f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati goto out; 735f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } 736f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 737f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati fcs_rport = bfa_fcs_rport_lookup(fcs_port, iocmd->rpwwn); 738f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (fcs_rport == NULL) { 739f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 740f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_RWWN; 741f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati goto out; 742f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } 743f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 744f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati fcs_rport->rpf.assigned_speed = iocmd->speed; 745f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati /* Set this speed in f/w only if the RPSC speed is not available */ 746f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (fcs_rport->rpf.rpsc_speed == BFA_PORT_SPEED_UNKNOWN) 747f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati bfa_rport_speed(fcs_rport->bfa_rport, iocmd->speed); 748f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 749f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_OK; 750f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiout: 751f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 752f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 753f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 754f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 755f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_vport_get_attr(struct bfad_s *bfad, void *cmd) 756f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 757f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_fcs_vport_s *fcs_vport; 758f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_vport_attr_s *iocmd = (struct bfa_bsg_vport_attr_s *)cmd; 759f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned long flags; 760f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 761f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 762f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati fcs_vport = bfa_fcs_vport_lookup(&bfad->bfa_fcs, 763f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->vf_id, iocmd->vpwwn); 764f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (fcs_vport == NULL) { 765f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 766f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_VWWN; 767f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati goto out; 768f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } 769f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 770f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati bfa_fcs_vport_get_attr(fcs_vport, &iocmd->vport_attr); 771f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 772f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_OK; 773f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiout: 774f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 775f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 776f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 777f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 778f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_vport_get_stats(struct bfad_s *bfad, void *cmd) 779f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 780f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_fcs_vport_s *fcs_vport; 781f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_vport_stats_s *iocmd = 782f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati (struct bfa_bsg_vport_stats_s *)cmd; 783f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned long flags; 784f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 785f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 786f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati fcs_vport = bfa_fcs_vport_lookup(&bfad->bfa_fcs, 787f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->vf_id, iocmd->vpwwn); 788f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (fcs_vport == NULL) { 789f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 790f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_VWWN; 791f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati goto out; 792f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } 793f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 794f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati memcpy((void *)&iocmd->vport_stats, (void *)&fcs_vport->vport_stats, 795f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati sizeof(struct bfa_vport_stats_s)); 796f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati memcpy((void *)&iocmd->vport_stats.port_stats, 797f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati (void *)&fcs_vport->lport.stats, 798f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati sizeof(struct bfa_lport_stats_s)); 799f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 800f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_OK; 801f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiout: 802f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 803f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 804f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 805f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 806f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_vport_clr_stats(struct bfad_s *bfad, void *cmd) 807f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 808f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_fcs_vport_s *fcs_vport; 809f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_reset_stats_s *iocmd = 810f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati (struct bfa_bsg_reset_stats_s *)cmd; 811f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned long flags; 812f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 813f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 814f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati fcs_vport = bfa_fcs_vport_lookup(&bfad->bfa_fcs, 815f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->vf_id, iocmd->vpwwn); 816f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (fcs_vport == NULL) { 817f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 818f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_VWWN; 819f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati goto out; 820f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } 821f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 822f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati memset(&fcs_vport->vport_stats, 0, sizeof(struct bfa_vport_stats_s)); 823f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati memset(&fcs_vport->lport.stats, 0, sizeof(struct bfa_lport_stats_s)); 824f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 825f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_OK; 826f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiout: 827f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 828f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 829f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 830b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatistatic int 831b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_iocmd_fabric_get_lports(struct bfad_s *bfad, void *cmd, 832b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati unsigned int payload_len) 833b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 834b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_bsg_fabric_get_lports_s *iocmd = 835b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati (struct bfa_bsg_fabric_get_lports_s *)cmd; 836b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfa_fcs_vf_t *fcs_vf; 837b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati uint32_t nports = iocmd->nports; 838b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati unsigned long flags; 839b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati void *iocmd_bufptr; 840b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 841b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (nports == 0) { 842b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->status = BFA_STATUS_EINVAL; 843b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out; 844b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 845b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 846b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (bfad_chk_iocmd_sz(payload_len, 847b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sizeof(struct bfa_bsg_fabric_get_lports_s), 848b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sizeof(wwn_t[iocmd->nports])) != BFA_STATUS_OK) { 849b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->status = BFA_STATUS_VERSION_FAIL; 850b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out; 851b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 852b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 853b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd_bufptr = (char *)iocmd + 854b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sizeof(struct bfa_bsg_fabric_get_lports_s); 855b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 856b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 857b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati fcs_vf = bfa_fcs_vf_lookup(&bfad->bfa_fcs, iocmd->vf_id); 858b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (fcs_vf == NULL) { 859b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 860b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_VFID; 861b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out; 862b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 863b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfa_fcs_vf_get_ports(fcs_vf, (wwn_t *)iocmd_bufptr, &nports); 864b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 865b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 866b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->nports = nports; 867b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->status = BFA_STATUS_OK; 868b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatiout: 869b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return 0; 870b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 871b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 872601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiint 873f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_ratelim(struct bfad_s *bfad, unsigned int cmd, void *pcmd) 874f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 875f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_gen_s *iocmd = (struct bfa_bsg_gen_s *)pcmd; 876f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(&bfad->bfa); 877f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned long flags; 878f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 879f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 880f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 881f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (cmd == IOCMD_RATELIM_ENABLE) 882f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati fcport->cfg.ratelimit = BFA_TRUE; 883f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati else if (cmd == IOCMD_RATELIM_DISABLE) 884f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati fcport->cfg.ratelimit = BFA_FALSE; 885f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 886f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (fcport->cfg.trl_def_speed == BFA_PORT_SPEED_UNKNOWN) 887f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati fcport->cfg.trl_def_speed = BFA_PORT_SPEED_1GBPS; 888f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 889f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 890f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_OK; 891f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 892f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 893f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 894f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 895f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 896f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_ratelim_speed(struct bfad_s *bfad, unsigned int cmd, void *pcmd) 897f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 898f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_trl_speed_s *iocmd = (struct bfa_bsg_trl_speed_s *)pcmd; 899f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(&bfad->bfa); 900f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned long flags; 901f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 902f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 903f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 904f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati /* Auto and speeds greater than the supported speed, are invalid */ 905f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if ((iocmd->speed == BFA_PORT_SPEED_AUTO) || 906f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati (iocmd->speed > fcport->speed_sup)) { 907f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_UNSUPP_SPEED; 908f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 909f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 910f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } 911f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 912f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati fcport->cfg.trl_def_speed = iocmd->speed; 913f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_OK; 914f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 915f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 916f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 917f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 918f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 919f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 920f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_cfg_fcpim(struct bfad_s *bfad, void *cmd) 921f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 922f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_fcpim_s *iocmd = (struct bfa_bsg_fcpim_s *)cmd; 923f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned long flags; 924f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 925f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 926f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati bfa_fcpim_path_tov_set(&bfad->bfa, iocmd->param); 927f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 928f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_OK; 929f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 930f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 931f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 932f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 933601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_fcpim_get_modstats(struct bfad_s *bfad, void *cmd) 934601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 935601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_fcpim_modstats_s *iocmd = 936601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati (struct bfa_bsg_fcpim_modstats_s *)cmd; 937601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_fcpim_s *fcpim = BFA_FCPIM(&bfad->bfa); 938601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct list_head *qe, *qen; 939601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_itnim_s *itnim; 940601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned long flags; 941601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 942601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 943601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati /* accumulate IO stats from itnim */ 944601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati memset((void *)&iocmd->modstats, 0, sizeof(struct bfa_itnim_iostats_s)); 945601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati list_for_each_safe(qe, qen, &fcpim->itnim_q) { 946601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati itnim = (struct bfa_itnim_s *) qe; 947601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_fcpim_add_stats(&iocmd->modstats, &(itnim->stats)); 948601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 949601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 950601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_OK; 951601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 952601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 953601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 954601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiint 955f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_fcpim_clr_modstats(struct bfad_s *bfad, void *cmd) 956f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 957f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_fcpim_modstatsclr_s *iocmd = 958f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati (struct bfa_bsg_fcpim_modstatsclr_s *)cmd; 959f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_fcpim_s *fcpim = BFA_FCPIM(&bfad->bfa); 960f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct list_head *qe, *qen; 961f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_itnim_s *itnim; 962f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned long flags; 963f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 964f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 965f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati list_for_each_safe(qe, qen, &fcpim->itnim_q) { 966f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati itnim = (struct bfa_itnim_s *) qe; 967f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati bfa_itnim_clear_stats(itnim); 968f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } 969f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati memset(&fcpim->del_itn_stats, 0, 970f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati sizeof(struct bfa_fcpim_del_itn_stats_s)); 971f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 972f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_OK; 973f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 974f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 975f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 976f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 977601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_fcpim_get_del_itn_stats(struct bfad_s *bfad, void *cmd) 978601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 979601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_fcpim_del_itn_stats_s *iocmd = 980601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati (struct bfa_bsg_fcpim_del_itn_stats_s *)cmd; 981601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_fcpim_s *fcpim = BFA_FCPIM(&bfad->bfa); 982601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned long flags; 983601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 984601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 985601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati memcpy((void *)&iocmd->modstats, (void *)&fcpim->del_itn_stats, 986601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati sizeof(struct bfa_fcpim_del_itn_stats_s)); 987601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 988601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 989601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_OK; 990601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 991601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 992601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 993b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatistatic int 994b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_iocmd_itnim_get_attr(struct bfad_s *bfad, void *cmd) 995b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 996b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_bsg_itnim_attr_s *iocmd = (struct bfa_bsg_itnim_attr_s *)cmd; 997b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_fcs_lport_s *fcs_port; 998b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati unsigned long flags; 999b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 1000b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 1001b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati fcs_port = bfa_fcs_lookup_port(&bfad->bfa_fcs, 1002b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->vf_id, iocmd->lpwwn); 1003b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (!fcs_port) 1004b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_LWWN; 1005b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati else 1006b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->status = bfa_fcs_itnim_attr_get(fcs_port, 1007b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati iocmd->rpwwn, &iocmd->attr); 1008b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 1009b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return 0; 1010b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 1011b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 1012601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatistatic int 1013601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_itnim_get_iostats(struct bfad_s *bfad, void *cmd) 1014601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 1015601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_itnim_iostats_s *iocmd = 1016601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati (struct bfa_bsg_itnim_iostats_s *)cmd; 1017601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_fcs_lport_s *fcs_port; 1018601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_fcs_itnim_s *itnim; 1019601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned long flags; 1020601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 1021601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 1022601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati fcs_port = bfa_fcs_lookup_port(&bfad->bfa_fcs, 1023601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->vf_id, iocmd->lpwwn); 1024601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (!fcs_port) { 1025601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_LWWN; 1026601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_trc(bfad, 0); 1027601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } else { 1028601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati itnim = bfa_fcs_itnim_lookup(fcs_port, iocmd->rpwwn); 1029601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (itnim == NULL) 1030601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_RWWN; 1031601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati else { 1032601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_OK; 1033601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati memcpy((void *)&iocmd->iostats, (void *) 1034601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati &(bfa_fcs_itnim_get_halitn(itnim)->stats), 1035601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati sizeof(struct bfa_itnim_iostats_s)); 1036601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 1037601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 1038601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 1039601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 1040601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 1041601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 1042601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatistatic int 1043f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_itnim_reset_stats(struct bfad_s *bfad, void *cmd) 1044f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 1045f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_rport_reset_stats_s *iocmd = 1046f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati (struct bfa_bsg_rport_reset_stats_s *)cmd; 1047f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_fcs_lport_s *fcs_port; 1048f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_fcs_itnim_s *itnim; 1049f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned long flags; 1050f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 1051f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 1052f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati fcs_port = bfa_fcs_lookup_port(&bfad->bfa_fcs, 1053f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->vf_id, iocmd->pwwn); 1054f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (!fcs_port) 1055f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_LWWN; 1056f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati else { 1057f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati itnim = bfa_fcs_itnim_lookup(fcs_port, iocmd->rpwwn); 1058f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (itnim == NULL) 1059f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_RWWN; 1060f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati else { 1061f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_OK; 1062f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati bfa_fcs_itnim_stats_clear(fcs_port, iocmd->rpwwn); 1063f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati bfa_itnim_clear_stats(bfa_fcs_itnim_get_halitn(itnim)); 1064f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } 1065f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } 1066f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 1067f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 1068f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 1069f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 1070f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 1071f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatistatic int 1072601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_itnim_get_itnstats(struct bfad_s *bfad, void *cmd) 1073601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 1074601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_itnim_itnstats_s *iocmd = 1075601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati (struct bfa_bsg_itnim_itnstats_s *)cmd; 1076601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_fcs_lport_s *fcs_port; 1077601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_fcs_itnim_s *itnim; 1078601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned long flags; 1079601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 1080601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 1081601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati fcs_port = bfa_fcs_lookup_port(&bfad->bfa_fcs, 1082601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->vf_id, iocmd->lpwwn); 1083601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (!fcs_port) { 1084601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_LWWN; 1085601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_trc(bfad, 0); 1086601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } else { 1087601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati itnim = bfa_fcs_itnim_lookup(fcs_port, iocmd->rpwwn); 1088601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati if (itnim == NULL) 1089601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_RWWN; 1090601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati else { 1091601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = BFA_STATUS_OK; 1092601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati bfa_fcs_itnim_stats_get(fcs_port, iocmd->rpwwn, 1093601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati &iocmd->itnstats); 1094601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 1095601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati } 1096601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 1097601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 1098601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 1099601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 1100601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiint 1101601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_fcport_enable(struct bfad_s *bfad, void *cmd) 1102601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 1103601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_gen_s *iocmd = (struct bfa_bsg_gen_s *)cmd; 1104601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned long flags; 1105601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 1106601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 1107601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = bfa_fcport_enable(&bfad->bfa); 1108601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 1109601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 1110601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 1111601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 1112601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 1113601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatiint 1114601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipatibfad_iocmd_fcport_disable(struct bfad_s *bfad, void *cmd) 1115601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati{ 1116601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati struct bfa_bsg_gen_s *iocmd = (struct bfa_bsg_gen_s *)cmd; 1117601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati unsigned long flags; 1118601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 1119601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 1120601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati iocmd->status = bfa_fcport_disable(&bfad->bfa); 1121601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 1122601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 1123601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati return 0; 1124601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati} 1125601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati 11261a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatiint 11271a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatibfad_iocmd_ioc_get_pcifn_cfg(struct bfad_s *bfad, void *cmd) 11281a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati{ 11291a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati struct bfa_bsg_pcifn_cfg_s *iocmd = (struct bfa_bsg_pcifn_cfg_s *)cmd; 11301a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati struct bfad_hal_comp fcomp; 11311a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati unsigned long flags; 11321a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 11331a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati init_completion(&fcomp.comp); 11341a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 11351a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->status = bfa_ablk_query(&bfad->bfa.modules.ablk, 11361a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati &iocmd->pcifn_cfg, 11371a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati bfad_hcb_comp, &fcomp); 11381a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 11391a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) 11401a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati goto out; 11411a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 11421a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati wait_for_completion(&fcomp.comp); 11431a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->status = fcomp.status; 11441a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatiout: 11451a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati return 0; 11461a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati} 11471a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 11481a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatiint 11491a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatibfad_iocmd_pcifn_create(struct bfad_s *bfad, void *cmd) 11501a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati{ 11511a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati struct bfa_bsg_pcifn_s *iocmd = (struct bfa_bsg_pcifn_s *)cmd; 11521a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati struct bfad_hal_comp fcomp; 11531a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati unsigned long flags; 11541a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 11551a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati init_completion(&fcomp.comp); 11561a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 11571a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->status = bfa_ablk_pf_create(&bfad->bfa.modules.ablk, 11581a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati &iocmd->pcifn_id, iocmd->port, 11591a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->pcifn_class, iocmd->bandwidth, 11601a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati bfad_hcb_comp, &fcomp); 11611a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 11621a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) 11631a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati goto out; 11641a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 11651a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati wait_for_completion(&fcomp.comp); 11661a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->status = fcomp.status; 11671a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatiout: 11681a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati return 0; 11691a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati} 11701a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 11711a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatiint 11721a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatibfad_iocmd_pcifn_delete(struct bfad_s *bfad, void *cmd) 11731a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati{ 11741a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati struct bfa_bsg_pcifn_s *iocmd = (struct bfa_bsg_pcifn_s *)cmd; 11751a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati struct bfad_hal_comp fcomp; 11761a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati unsigned long flags; 11771a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 11781a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati init_completion(&fcomp.comp); 11791a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 11801a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->status = bfa_ablk_pf_delete(&bfad->bfa.modules.ablk, 11811a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->pcifn_id, 11821a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati bfad_hcb_comp, &fcomp); 11831a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 11841a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) 11851a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati goto out; 11861a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 11871a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati wait_for_completion(&fcomp.comp); 11881a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->status = fcomp.status; 11891a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatiout: 11901a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati return 0; 11911a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati} 11921a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 11931a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatiint 11941a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatibfad_iocmd_pcifn_bw(struct bfad_s *bfad, void *cmd) 11951a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati{ 11961a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati struct bfa_bsg_pcifn_s *iocmd = (struct bfa_bsg_pcifn_s *)cmd; 11971a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati struct bfad_hal_comp fcomp; 11981a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati unsigned long flags; 11991a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 12001a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati init_completion(&fcomp.comp); 12011a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 12021a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->status = bfa_ablk_pf_update(&bfad->bfa.modules.ablk, 12031a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->pcifn_id, iocmd->bandwidth, 12041a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati bfad_hcb_comp, &fcomp); 12051a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 12061a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati bfa_trc(bfad, iocmd->status); 12071a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) 12081a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati goto out; 12091a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 12101a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati wait_for_completion(&fcomp.comp); 12111a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->status = fcomp.status; 12121a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati bfa_trc(bfad, iocmd->status); 12131a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatiout: 12141a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati return 0; 12151a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati} 12161a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 12171a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatiint 12181a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatibfad_iocmd_adapter_cfg_mode(struct bfad_s *bfad, void *cmd) 12191a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati{ 12201a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati struct bfa_bsg_adapter_cfg_mode_s *iocmd = 12211a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati (struct bfa_bsg_adapter_cfg_mode_s *)cmd; 12221a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati struct bfad_hal_comp fcomp; 12231a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati unsigned long flags = 0; 12241a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 12251a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati init_completion(&fcomp.comp); 12261a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 12271a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->status = bfa_ablk_adapter_config(&bfad->bfa.modules.ablk, 12281a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->cfg.mode, iocmd->cfg.max_pf, 12291a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->cfg.max_vf, bfad_hcb_comp, &fcomp); 12301a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 12311a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) 12321a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati goto out; 12331a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 12341a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati wait_for_completion(&fcomp.comp); 12351a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->status = fcomp.status; 12361a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatiout: 12371a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati return 0; 12381a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati} 12391a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 12401a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatiint 12411a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatibfad_iocmd_port_cfg_mode(struct bfad_s *bfad, void *cmd) 12421a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati{ 12431a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati struct bfa_bsg_port_cfg_mode_s *iocmd = 12441a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati (struct bfa_bsg_port_cfg_mode_s *)cmd; 12451a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati struct bfad_hal_comp fcomp; 12461a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati unsigned long flags = 0; 12471a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 12481a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati init_completion(&fcomp.comp); 12491a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 12501a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->status = bfa_ablk_port_config(&bfad->bfa.modules.ablk, 12511a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->instance, iocmd->cfg.mode, 12521a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->cfg.max_pf, iocmd->cfg.max_vf, 12531a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati bfad_hcb_comp, &fcomp); 12541a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 12551a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) 12561a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati goto out; 12571a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 12581a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati wait_for_completion(&fcomp.comp); 12591a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->status = fcomp.status; 12601a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatiout: 12611a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati return 0; 12621a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati} 12631a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 12641a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatiint 12651a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatibfad_iocmd_ablk_optrom(struct bfad_s *bfad, unsigned int cmd, void *pcmd) 12661a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati{ 12671a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati struct bfa_bsg_gen_s *iocmd = (struct bfa_bsg_gen_s *)pcmd; 12681a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati struct bfad_hal_comp fcomp; 12691a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati unsigned long flags; 12701a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 12711a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati init_completion(&fcomp.comp); 12721a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 12731a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati if (cmd == IOCMD_FLASH_ENABLE_OPTROM) 12741a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->status = bfa_ablk_optrom_en(&bfad->bfa.modules.ablk, 12751a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati bfad_hcb_comp, &fcomp); 12761a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati else 12771a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->status = bfa_ablk_optrom_dis(&bfad->bfa.modules.ablk, 12781a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati bfad_hcb_comp, &fcomp); 12791a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 12801a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 12811a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) 12821a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati goto out; 12831a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 12841a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati wait_for_completion(&fcomp.comp); 12851a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati iocmd->status = fcomp.status; 12861a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipatiout: 12871a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati return 0; 12881a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati} 12891a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati 1290a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipatiint 1291a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipatibfad_iocmd_faa_query(struct bfad_s *bfad, void *cmd) 1292a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati{ 1293a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati struct bfa_bsg_faa_attr_s *iocmd = (struct bfa_bsg_faa_attr_s *)cmd; 1294a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati struct bfad_hal_comp fcomp; 1295a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati unsigned long flags; 1296a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati 1297a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati init_completion(&fcomp.comp); 1298a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati iocmd->status = BFA_STATUS_OK; 1299a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 1300a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati iocmd->status = bfa_faa_query(&bfad->bfa, &iocmd->faa_attr, 1301a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati bfad_hcb_comp, &fcomp); 1302a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 1303a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati 1304a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) 1305a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati goto out; 1306a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati 1307a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati wait_for_completion(&fcomp.comp); 1308a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati iocmd->status = fcomp.status; 1309a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipatiout: 1310a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati return 0; 1311a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati} 1312a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati 1313148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipatiint 1314148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipatibfad_iocmd_cee_attr(struct bfad_s *bfad, void *cmd, unsigned int payload_len) 1315148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati{ 1316148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati struct bfa_bsg_cee_attr_s *iocmd = 1317148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati (struct bfa_bsg_cee_attr_s *)cmd; 1318148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati void *iocmd_bufptr; 1319148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati struct bfad_hal_comp cee_comp; 1320148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati unsigned long flags; 1321148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati 1322148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati if (bfad_chk_iocmd_sz(payload_len, 1323148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati sizeof(struct bfa_bsg_cee_attr_s), 1324148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati sizeof(struct bfa_cee_attr_s)) != BFA_STATUS_OK) { 1325148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati iocmd->status = BFA_STATUS_VERSION_FAIL; 1326148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati return 0; 1327148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati } 1328148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati 1329148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati iocmd_bufptr = (char *)iocmd + sizeof(struct bfa_bsg_cee_attr_s); 1330148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati 1331148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati cee_comp.status = 0; 1332148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati init_completion(&cee_comp.comp); 1333148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati mutex_lock(&bfad_mutex); 1334148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 1335148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati iocmd->status = bfa_cee_get_attr(&bfad->bfa.modules.cee, iocmd_bufptr, 1336148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati bfad_hcb_comp, &cee_comp); 1337148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 1338148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati if (iocmd->status != BFA_STATUS_OK) { 1339148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati mutex_unlock(&bfad_mutex); 1340148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati bfa_trc(bfad, 0x5555); 1341148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati goto out; 1342148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati } 1343148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati wait_for_completion(&cee_comp.comp); 1344148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati mutex_unlock(&bfad_mutex); 1345148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipatiout: 1346148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati return 0; 1347148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati} 1348148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati 1349148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipatiint 1350148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipatibfad_iocmd_cee_get_stats(struct bfad_s *bfad, void *cmd, 1351148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati unsigned int payload_len) 1352148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati{ 1353148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati struct bfa_bsg_cee_stats_s *iocmd = 1354148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati (struct bfa_bsg_cee_stats_s *)cmd; 1355148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati void *iocmd_bufptr; 1356148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati struct bfad_hal_comp cee_comp; 1357148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati unsigned long flags; 1358148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati 1359148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati if (bfad_chk_iocmd_sz(payload_len, 1360148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati sizeof(struct bfa_bsg_cee_stats_s), 1361148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati sizeof(struct bfa_cee_stats_s)) != BFA_STATUS_OK) { 1362148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati iocmd->status = BFA_STATUS_VERSION_FAIL; 1363148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati return 0; 1364148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati } 1365148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati 1366148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati iocmd_bufptr = (char *)iocmd + sizeof(struct bfa_bsg_cee_stats_s); 1367148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati 1368148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati cee_comp.status = 0; 1369148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati init_completion(&cee_comp.comp); 1370148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati mutex_lock(&bfad_mutex); 1371148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 1372148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati iocmd->status = bfa_cee_get_stats(&bfad->bfa.modules.cee, iocmd_bufptr, 1373148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati bfad_hcb_comp, &cee_comp); 1374148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 1375148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati if (iocmd->status != BFA_STATUS_OK) { 1376148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati mutex_unlock(&bfad_mutex); 1377148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati bfa_trc(bfad, 0x5555); 1378148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati goto out; 1379148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati } 1380148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati wait_for_completion(&cee_comp.comp); 1381148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati mutex_unlock(&bfad_mutex); 1382148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipatiout: 1383148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati return 0; 1384148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati} 1385148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati 1386148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipatiint 1387148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipatibfad_iocmd_cee_reset_stats(struct bfad_s *bfad, void *cmd) 1388148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati{ 1389148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati struct bfa_bsg_gen_s *iocmd = (struct bfa_bsg_gen_s *)cmd; 1390148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati unsigned long flags; 1391148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati 1392148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 1393148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati iocmd->status = bfa_cee_reset_stats(&bfad->bfa.modules.cee, NULL, NULL); 1394148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 1395148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati if (iocmd->status != BFA_STATUS_OK) 1396148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati bfa_trc(bfad, 0x5555); 1397148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati return 0; 1398148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati} 1399148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati 140051e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipatiint 140151e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipatibfad_iocmd_sfp_media(struct bfad_s *bfad, void *cmd) 140251e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati{ 140351e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati struct bfa_bsg_sfp_media_s *iocmd = (struct bfa_bsg_sfp_media_s *)cmd; 140451e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati struct bfad_hal_comp fcomp; 140551e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati unsigned long flags; 140651e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati 140751e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati init_completion(&fcomp.comp); 140851e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 140951e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati iocmd->status = bfa_sfp_media(BFA_SFP_MOD(&bfad->bfa), &iocmd->media, 141051e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati bfad_hcb_comp, &fcomp); 141151e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 141251e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati bfa_trc(bfad, iocmd->status); 141351e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati if (iocmd->status != BFA_STATUS_SFP_NOT_READY) 141451e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati goto out; 141551e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati 141651e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati wait_for_completion(&fcomp.comp); 141751e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati iocmd->status = fcomp.status; 141851e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipatiout: 141951e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati return 0; 142051e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati} 142151e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati 142251e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipatiint 142351e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipatibfad_iocmd_sfp_speed(struct bfad_s *bfad, void *cmd) 142451e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati{ 142551e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati struct bfa_bsg_sfp_speed_s *iocmd = (struct bfa_bsg_sfp_speed_s *)cmd; 142651e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati struct bfad_hal_comp fcomp; 142751e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati unsigned long flags; 142851e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati 142951e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati init_completion(&fcomp.comp); 143051e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 143151e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati iocmd->status = bfa_sfp_speed(BFA_SFP_MOD(&bfad->bfa), iocmd->speed, 143251e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati bfad_hcb_comp, &fcomp); 143351e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 143451e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati bfa_trc(bfad, iocmd->status); 143551e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati if (iocmd->status != BFA_STATUS_SFP_NOT_READY) 143651e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati goto out; 143751e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati wait_for_completion(&fcomp.comp); 143851e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati iocmd->status = fcomp.status; 143951e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipatiout: 144051e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati return 0; 144151e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati} 144251e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati 14435a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipatiint 14445a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipatibfad_iocmd_flash_get_attr(struct bfad_s *bfad, void *cmd) 14455a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati{ 14465a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati struct bfa_bsg_flash_attr_s *iocmd = 14475a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati (struct bfa_bsg_flash_attr_s *)cmd; 14485a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati struct bfad_hal_comp fcomp; 14495a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati unsigned long flags; 14505a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati 14515a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati init_completion(&fcomp.comp); 14525a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 14535a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati iocmd->status = bfa_flash_get_attr(BFA_FLASH(&bfad->bfa), &iocmd->attr, 14545a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati bfad_hcb_comp, &fcomp); 14555a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 14565a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati if (iocmd->status != BFA_STATUS_OK) 14575a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati goto out; 14585a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati wait_for_completion(&fcomp.comp); 14595a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati iocmd->status = fcomp.status; 14605a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipatiout: 14615a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati return 0; 14625a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati} 14635a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati 14645a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipatiint 14655a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipatibfad_iocmd_flash_erase_part(struct bfad_s *bfad, void *cmd) 14665a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati{ 14675a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati struct bfa_bsg_flash_s *iocmd = (struct bfa_bsg_flash_s *)cmd; 14685a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati struct bfad_hal_comp fcomp; 14695a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati unsigned long flags; 14705a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati 14715a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati init_completion(&fcomp.comp); 14725a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 14735a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati iocmd->status = bfa_flash_erase_part(BFA_FLASH(&bfad->bfa), iocmd->type, 14745a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati iocmd->instance, bfad_hcb_comp, &fcomp); 14755a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 14765a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati if (iocmd->status != BFA_STATUS_OK) 14775a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati goto out; 14785a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati wait_for_completion(&fcomp.comp); 14795a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati iocmd->status = fcomp.status; 14805a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipatiout: 14815a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati return 0; 14825a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati} 14835a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati 14845a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipatiint 14855a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipatibfad_iocmd_flash_update_part(struct bfad_s *bfad, void *cmd, 14865a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati unsigned int payload_len) 14875a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati{ 14885a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati struct bfa_bsg_flash_s *iocmd = (struct bfa_bsg_flash_s *)cmd; 14895a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati void *iocmd_bufptr; 14905a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati struct bfad_hal_comp fcomp; 14915a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati unsigned long flags; 14925a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati 14935a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati if (bfad_chk_iocmd_sz(payload_len, 14945a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati sizeof(struct bfa_bsg_flash_s), 14955a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati iocmd->bufsz) != BFA_STATUS_OK) { 14965a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati iocmd->status = BFA_STATUS_VERSION_FAIL; 14975a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati return 0; 14985a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati } 14995a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati 15005a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati iocmd_bufptr = (char *)iocmd + sizeof(struct bfa_bsg_flash_s); 15015a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati 15025a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati init_completion(&fcomp.comp); 15035a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 15045a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati iocmd->status = bfa_flash_update_part(BFA_FLASH(&bfad->bfa), 15055a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati iocmd->type, iocmd->instance, iocmd_bufptr, 15065a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati iocmd->bufsz, 0, bfad_hcb_comp, &fcomp); 15075a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 15085a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati if (iocmd->status != BFA_STATUS_OK) 15095a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati goto out; 15105a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati wait_for_completion(&fcomp.comp); 15115a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati iocmd->status = fcomp.status; 15125a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipatiout: 15135a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati return 0; 15145a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati} 15155a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati 15165a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipatiint 15175a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipatibfad_iocmd_flash_read_part(struct bfad_s *bfad, void *cmd, 15185a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati unsigned int payload_len) 15195a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati{ 15205a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati struct bfa_bsg_flash_s *iocmd = (struct bfa_bsg_flash_s *)cmd; 15215a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati struct bfad_hal_comp fcomp; 15225a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati void *iocmd_bufptr; 15235a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati unsigned long flags; 15245a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati 15255a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati if (bfad_chk_iocmd_sz(payload_len, 15265a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati sizeof(struct bfa_bsg_flash_s), 15275a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati iocmd->bufsz) != BFA_STATUS_OK) { 15285a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati iocmd->status = BFA_STATUS_VERSION_FAIL; 15295a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati return 0; 15305a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati } 15315a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati 15325a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati iocmd_bufptr = (char *)iocmd + sizeof(struct bfa_bsg_flash_s); 15335a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati 15345a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati init_completion(&fcomp.comp); 15355a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 15365a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati iocmd->status = bfa_flash_read_part(BFA_FLASH(&bfad->bfa), iocmd->type, 15375a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati iocmd->instance, iocmd_bufptr, iocmd->bufsz, 0, 15385a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati bfad_hcb_comp, &fcomp); 15395a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 15405a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati if (iocmd->status != BFA_STATUS_OK) 15415a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati goto out; 15425a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati wait_for_completion(&fcomp.comp); 15435a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati iocmd->status = fcomp.status; 15445a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipatiout: 15455a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati return 0; 15465a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati} 15475a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati 15483d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatiint 15493d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatibfad_iocmd_diag_temp(struct bfad_s *bfad, void *cmd) 15503d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati{ 15513d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati struct bfa_bsg_diag_get_temp_s *iocmd = 15523d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati (struct bfa_bsg_diag_get_temp_s *)cmd; 15533d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati struct bfad_hal_comp fcomp; 15543d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati unsigned long flags; 15553d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 15563d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati init_completion(&fcomp.comp); 15573d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 15583d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->status = bfa_diag_tsensor_query(BFA_DIAG_MOD(&bfad->bfa), 15593d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati &iocmd->result, bfad_hcb_comp, &fcomp); 15603d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 15613d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati bfa_trc(bfad, iocmd->status); 15623d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) 15633d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati goto out; 15643d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati wait_for_completion(&fcomp.comp); 15653d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->status = fcomp.status; 15663d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatiout: 15673d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati return 0; 15683d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati} 15693d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 15703d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatiint 15713d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatibfad_iocmd_diag_memtest(struct bfad_s *bfad, void *cmd) 15723d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati{ 15733d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati struct bfa_bsg_diag_memtest_s *iocmd = 15743d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati (struct bfa_bsg_diag_memtest_s *)cmd; 15753d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati struct bfad_hal_comp fcomp; 15763d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati unsigned long flags; 15773d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 15783d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati init_completion(&fcomp.comp); 15793d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 15803d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->status = bfa_diag_memtest(BFA_DIAG_MOD(&bfad->bfa), 15813d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati &iocmd->memtest, iocmd->pat, 15823d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati &iocmd->result, bfad_hcb_comp, &fcomp); 15833d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 15843d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati bfa_trc(bfad, iocmd->status); 15853d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) 15863d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati goto out; 15873d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati wait_for_completion(&fcomp.comp); 15883d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->status = fcomp.status; 15893d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatiout: 15903d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati return 0; 15913d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati} 15923d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 15933d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatiint 15943d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatibfad_iocmd_diag_loopback(struct bfad_s *bfad, void *cmd) 15953d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati{ 15963d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati struct bfa_bsg_diag_loopback_s *iocmd = 15973d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati (struct bfa_bsg_diag_loopback_s *)cmd; 15983d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati struct bfad_hal_comp fcomp; 15993d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati unsigned long flags; 16003d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 16013d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati init_completion(&fcomp.comp); 16023d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 16033d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->status = bfa_fcdiag_loopback(&bfad->bfa, iocmd->opmode, 16043d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->speed, iocmd->lpcnt, iocmd->pat, 16053d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati &iocmd->result, bfad_hcb_comp, &fcomp); 16063d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 16073d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati bfa_trc(bfad, iocmd->status); 16083d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) 16093d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati goto out; 16103d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati wait_for_completion(&fcomp.comp); 16113d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->status = fcomp.status; 16123d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatiout: 16133d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati return 0; 16143d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati} 16153d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 16163d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatiint 16173d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatibfad_iocmd_diag_fwping(struct bfad_s *bfad, void *cmd) 16183d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati{ 16193d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati struct bfa_bsg_diag_fwping_s *iocmd = 16203d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati (struct bfa_bsg_diag_fwping_s *)cmd; 16213d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati struct bfad_hal_comp fcomp; 16223d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati unsigned long flags; 16233d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 16243d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati init_completion(&fcomp.comp); 16253d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 16263d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->status = bfa_diag_fwping(BFA_DIAG_MOD(&bfad->bfa), iocmd->cnt, 16273d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->pattern, &iocmd->result, 16283d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati bfad_hcb_comp, &fcomp); 16293d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 16303d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati bfa_trc(bfad, iocmd->status); 16313d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) 16323d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati goto out; 16333d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati bfa_trc(bfad, 0x77771); 16343d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati wait_for_completion(&fcomp.comp); 16353d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->status = fcomp.status; 16363d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatiout: 16373d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati return 0; 16383d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati} 16393d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 16403d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatiint 16413d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatibfad_iocmd_diag_queuetest(struct bfad_s *bfad, void *cmd) 16423d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati{ 16433d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati struct bfa_bsg_diag_qtest_s *iocmd = (struct bfa_bsg_diag_qtest_s *)cmd; 16443d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati struct bfad_hal_comp fcomp; 16453d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati unsigned long flags; 16463d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 16473d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati init_completion(&fcomp.comp); 16483d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 16493d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->status = bfa_fcdiag_queuetest(&bfad->bfa, iocmd->force, 16503d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->queue, &iocmd->result, 16513d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati bfad_hcb_comp, &fcomp); 16523d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 16533d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) 16543d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati goto out; 16553d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati wait_for_completion(&fcomp.comp); 16563d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->status = fcomp.status; 16573d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatiout: 16583d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati return 0; 16593d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati} 16603d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 16613d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatiint 16623d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatibfad_iocmd_diag_sfp(struct bfad_s *bfad, void *cmd) 16633d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati{ 16643d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati struct bfa_bsg_sfp_show_s *iocmd = 16653d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati (struct bfa_bsg_sfp_show_s *)cmd; 16663d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati struct bfad_hal_comp fcomp; 16673d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati unsigned long flags; 16683d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 16693d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati init_completion(&fcomp.comp); 16703d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 16713d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->status = bfa_sfp_show(BFA_SFP_MOD(&bfad->bfa), &iocmd->sfp, 16723d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati bfad_hcb_comp, &fcomp); 16733d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 16743d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati bfa_trc(bfad, iocmd->status); 16753d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) 16763d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati goto out; 16773d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati wait_for_completion(&fcomp.comp); 16783d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->status = fcomp.status; 16793d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati bfa_trc(bfad, iocmd->status); 16803d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatiout: 16813d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati return 0; 16823d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati} 16833d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 16843d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatiint 16853d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatibfad_iocmd_diag_led(struct bfad_s *bfad, void *cmd) 16863d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati{ 16873d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati struct bfa_bsg_diag_led_s *iocmd = (struct bfa_bsg_diag_led_s *)cmd; 16883d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati unsigned long flags; 16893d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 16903d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 16913d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->status = bfa_diag_ledtest(BFA_DIAG_MOD(&bfad->bfa), 16923d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati &iocmd->ledtest); 16933d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 16943d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati return 0; 16953d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati} 16963d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 16973d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatiint 16983d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatibfad_iocmd_diag_beacon_lport(struct bfad_s *bfad, void *cmd) 16993d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati{ 17003d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati struct bfa_bsg_diag_beacon_s *iocmd = 17013d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati (struct bfa_bsg_diag_beacon_s *)cmd; 17023d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati unsigned long flags; 17033d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 17043d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 17053d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->status = bfa_diag_beacon_port(BFA_DIAG_MOD(&bfad->bfa), 17063d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->beacon, iocmd->link_e2e_beacon, 17073d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->second); 17083d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 17093d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati return 0; 17103d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati} 17113d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 17123d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatiint 17133d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatibfad_iocmd_diag_lb_stat(struct bfad_s *bfad, void *cmd) 17143d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati{ 17153d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati struct bfa_bsg_diag_lb_stat_s *iocmd = 17163d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati (struct bfa_bsg_diag_lb_stat_s *)cmd; 17173d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati unsigned long flags; 17183d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 17193d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 17203d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati iocmd->status = bfa_fcdiag_lb_is_running(&bfad->bfa); 17213d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 17223d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati bfa_trc(bfad, iocmd->status); 17233d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 17243d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati return 0; 17253d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati} 17263d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati 17273350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipatiint 17283350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipatibfad_iocmd_phy_get_attr(struct bfad_s *bfad, void *cmd) 17293350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati{ 17303350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati struct bfa_bsg_phy_attr_s *iocmd = 17313350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati (struct bfa_bsg_phy_attr_s *)cmd; 17323350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati struct bfad_hal_comp fcomp; 17333350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati unsigned long flags; 17343350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati 17353350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati init_completion(&fcomp.comp); 17363350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 17373350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati iocmd->status = bfa_phy_get_attr(BFA_PHY(&bfad->bfa), iocmd->instance, 17383350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati &iocmd->attr, bfad_hcb_comp, &fcomp); 17393350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 17403350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati if (iocmd->status != BFA_STATUS_OK) 17413350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati goto out; 17423350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati wait_for_completion(&fcomp.comp); 17433350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati iocmd->status = fcomp.status; 17443350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipatiout: 17453350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati return 0; 17463350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati} 17473350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati 17483350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipatiint 17493350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipatibfad_iocmd_phy_get_stats(struct bfad_s *bfad, void *cmd) 17503350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati{ 17513350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati struct bfa_bsg_phy_stats_s *iocmd = 17523350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati (struct bfa_bsg_phy_stats_s *)cmd; 17533350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati struct bfad_hal_comp fcomp; 17543350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati unsigned long flags; 17553350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati 17563350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati init_completion(&fcomp.comp); 17573350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 17583350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati iocmd->status = bfa_phy_get_stats(BFA_PHY(&bfad->bfa), iocmd->instance, 17593350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati &iocmd->stats, bfad_hcb_comp, &fcomp); 17603350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 17613350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati if (iocmd->status != BFA_STATUS_OK) 17623350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati goto out; 17633350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati wait_for_completion(&fcomp.comp); 17643350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati iocmd->status = fcomp.status; 17653350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipatiout: 17663350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati return 0; 17673350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati} 17683350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati 17693350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipatiint 17703350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipatibfad_iocmd_phy_read(struct bfad_s *bfad, void *cmd, unsigned int payload_len) 17713350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati{ 17723350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati struct bfa_bsg_phy_s *iocmd = (struct bfa_bsg_phy_s *)cmd; 17733350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati struct bfad_hal_comp fcomp; 17743350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati void *iocmd_bufptr; 17753350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati unsigned long flags; 17763350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati 17773350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati if (bfad_chk_iocmd_sz(payload_len, 17783350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati sizeof(struct bfa_bsg_phy_s), 17793350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati iocmd->bufsz) != BFA_STATUS_OK) { 17803350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati iocmd->status = BFA_STATUS_VERSION_FAIL; 17813350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati return 0; 17823350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati } 17833350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati 17843350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati iocmd_bufptr = (char *)iocmd + sizeof(struct bfa_bsg_phy_s); 17853350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati init_completion(&fcomp.comp); 17863350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 17873350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati iocmd->status = bfa_phy_read(BFA_PHY(&bfad->bfa), 17883350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati iocmd->instance, iocmd_bufptr, iocmd->bufsz, 17893350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati 0, bfad_hcb_comp, &fcomp); 17903350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 17913350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati if (iocmd->status != BFA_STATUS_OK) 17923350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati goto out; 17933350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati wait_for_completion(&fcomp.comp); 17943350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati iocmd->status = fcomp.status; 17953350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati if (iocmd->status != BFA_STATUS_OK) 17963350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati goto out; 17973350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipatiout: 17983350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati return 0; 17993350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati} 18003350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati 18013350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipatiint 180261e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipatibfad_iocmd_vhba_query(struct bfad_s *bfad, void *cmd) 180361e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati{ 180461e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati struct bfa_bsg_vhba_attr_s *iocmd = 180561e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati (struct bfa_bsg_vhba_attr_s *)cmd; 180661e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati struct bfa_vhba_attr_s *attr = &iocmd->attr; 180761e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati unsigned long flags; 180861e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati 180961e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 181061e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati attr->pwwn = bfad->bfa.ioc.attr->pwwn; 181161e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati attr->nwwn = bfad->bfa.ioc.attr->nwwn; 181261e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati attr->plog_enabled = (bfa_boolean_t)bfad->bfa.plog->plog_enabled; 181361e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati attr->io_profile = bfa_fcpim_get_io_profile(&bfad->bfa); 181461e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati attr->path_tov = bfa_fcpim_path_tov_get(&bfad->bfa); 181561e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati iocmd->status = BFA_STATUS_OK; 181661e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 181761e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati return 0; 181861e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati} 181961e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati 182061e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipatiint 18213350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipatibfad_iocmd_phy_update(struct bfad_s *bfad, void *cmd, unsigned int payload_len) 18223350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati{ 18233350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati struct bfa_bsg_phy_s *iocmd = (struct bfa_bsg_phy_s *)cmd; 18243350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati void *iocmd_bufptr; 18253350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati struct bfad_hal_comp fcomp; 18263350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati unsigned long flags; 18273350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati 18283350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati if (bfad_chk_iocmd_sz(payload_len, 18293350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati sizeof(struct bfa_bsg_phy_s), 18303350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati iocmd->bufsz) != BFA_STATUS_OK) { 18313350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati iocmd->status = BFA_STATUS_VERSION_FAIL; 18323350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati return 0; 18333350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati } 18343350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati 18353350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati iocmd_bufptr = (char *)iocmd + sizeof(struct bfa_bsg_phy_s); 18363350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati init_completion(&fcomp.comp); 18373350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 18383350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati iocmd->status = bfa_phy_update(BFA_PHY(&bfad->bfa), 18393350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati iocmd->instance, iocmd_bufptr, iocmd->bufsz, 18403350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati 0, bfad_hcb_comp, &fcomp); 18413350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 18423350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati if (iocmd->status != BFA_STATUS_OK) 18433350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati goto out; 18443350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati wait_for_completion(&fcomp.comp); 18453350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati iocmd->status = fcomp.status; 18463350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipatiout: 18473350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati return 0; 18483350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati} 18493350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati 185061e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipatiint 185161e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipatibfad_iocmd_porglog_get(struct bfad_s *bfad, void *cmd) 185261e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati{ 185361e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati struct bfa_bsg_debug_s *iocmd = (struct bfa_bsg_debug_s *)cmd; 185461e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati void *iocmd_bufptr; 185561e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati 185661e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati if (iocmd->bufsz < sizeof(struct bfa_plog_s)) { 185761e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati bfa_trc(bfad, sizeof(struct bfa_plog_s)); 185861e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati iocmd->status = BFA_STATUS_EINVAL; 185961e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati goto out; 186061e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati } 186161e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati 186261e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati iocmd->status = BFA_STATUS_OK; 186361e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati iocmd_bufptr = (char *)iocmd + sizeof(struct bfa_bsg_debug_s); 186461e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati memcpy(iocmd_bufptr, (u8 *) &bfad->plog_buf, sizeof(struct bfa_plog_s)); 186561e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipatiout: 186661e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati return 0; 186761e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati} 186861e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati 1869f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati#define BFA_DEBUG_FW_CORE_CHUNK_SZ 0x4000U /* 16K chunks for FW dump */ 1870f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 1871f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_debug_fw_core(struct bfad_s *bfad, void *cmd, 1872f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned int payload_len) 1873f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 1874f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_debug_s *iocmd = (struct bfa_bsg_debug_s *)cmd; 1875f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati void *iocmd_bufptr; 1876f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned long flags; 187776c8ae4b2fbcbc92601c48e1b534c35638c8d597Santosh Nayak u32 offset; 1878f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 1879f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (bfad_chk_iocmd_sz(payload_len, sizeof(struct bfa_bsg_debug_s), 1880f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati BFA_DEBUG_FW_CORE_CHUNK_SZ) != BFA_STATUS_OK) { 1881f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_VERSION_FAIL; 1882f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 1883f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } 1884f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 1885f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (iocmd->bufsz < BFA_DEBUG_FW_CORE_CHUNK_SZ || 1886f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati !IS_ALIGNED(iocmd->bufsz, sizeof(u16)) || 1887f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati !IS_ALIGNED(iocmd->offset, sizeof(u32))) { 1888f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati bfa_trc(bfad, BFA_DEBUG_FW_CORE_CHUNK_SZ); 1889f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_EINVAL; 1890f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati goto out; 1891f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } 1892f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 1893f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd_bufptr = (char *)iocmd + sizeof(struct bfa_bsg_debug_s); 1894f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 189576c8ae4b2fbcbc92601c48e1b534c35638c8d597Santosh Nayak offset = iocmd->offset; 1896f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = bfa_ioc_debug_fwcore(&bfad->bfa.ioc, iocmd_bufptr, 189776c8ae4b2fbcbc92601c48e1b534c35638c8d597Santosh Nayak &offset, &iocmd->bufsz); 189876c8ae4b2fbcbc92601c48e1b534c35638c8d597Santosh Nayak iocmd->offset = offset; 1899f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 1900f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiout: 1901f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 1902f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 1903f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 1904f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 1905f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_debug_ctl(struct bfad_s *bfad, void *cmd, unsigned int v_cmd) 1906f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 1907f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_gen_s *iocmd = (struct bfa_bsg_gen_s *)cmd; 1908f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati unsigned long flags; 1909f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 1910f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (v_cmd == IOCMD_DEBUG_FW_STATE_CLR) { 1911f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 1912f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati bfad->bfa.ioc.dbg_fwsave_once = BFA_TRUE; 1913f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 1914f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati } else if (v_cmd == IOCMD_DEBUG_PORTLOG_CLR) 1915f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati bfad->plog_buf.head = bfad->plog_buf.tail = 0; 1916f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati else if (v_cmd == IOCMD_DEBUG_START_DTRC) 1917f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati bfa_trc_init(bfad->trcmod); 1918f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati else if (v_cmd == IOCMD_DEBUG_STOP_DTRC) 1919f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati bfa_trc_stop(bfad->trcmod); 1920f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 1921f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_OK; 1922f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 1923f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 1924f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 1925f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatiint 1926f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipatibfad_iocmd_porglog_ctl(struct bfad_s *bfad, void *cmd) 1927f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati{ 1928f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati struct bfa_bsg_portlogctl_s *iocmd = (struct bfa_bsg_portlogctl_s *)cmd; 1929f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 1930f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati if (iocmd->ctl == BFA_TRUE) 1931f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati bfad->plog_buf.plog_enabled = 1; 1932f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati else 1933f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati bfad->plog_buf.plog_enabled = 0; 1934f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 1935f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati iocmd->status = BFA_STATUS_OK; 1936f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati return 0; 1937f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati} 1938f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati 193942a8e6e298f39518445785c53a16357267db37efKrishna Gudipatiint 194042a8e6e298f39518445785c53a16357267db37efKrishna Gudipatibfad_iocmd_fcpim_cfg_profile(struct bfad_s *bfad, void *cmd, unsigned int v_cmd) 194142a8e6e298f39518445785c53a16357267db37efKrishna Gudipati{ 194242a8e6e298f39518445785c53a16357267db37efKrishna Gudipati struct bfa_bsg_fcpim_profile_s *iocmd = 194342a8e6e298f39518445785c53a16357267db37efKrishna Gudipati (struct bfa_bsg_fcpim_profile_s *)cmd; 194442a8e6e298f39518445785c53a16357267db37efKrishna Gudipati struct timeval tv; 194542a8e6e298f39518445785c53a16357267db37efKrishna Gudipati unsigned long flags; 194642a8e6e298f39518445785c53a16357267db37efKrishna Gudipati 194742a8e6e298f39518445785c53a16357267db37efKrishna Gudipati do_gettimeofday(&tv); 194842a8e6e298f39518445785c53a16357267db37efKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 194942a8e6e298f39518445785c53a16357267db37efKrishna Gudipati if (v_cmd == IOCMD_FCPIM_PROFILE_ON) 195042a8e6e298f39518445785c53a16357267db37efKrishna Gudipati iocmd->status = bfa_fcpim_profile_on(&bfad->bfa, tv.tv_sec); 195142a8e6e298f39518445785c53a16357267db37efKrishna Gudipati else if (v_cmd == IOCMD_FCPIM_PROFILE_OFF) 195242a8e6e298f39518445785c53a16357267db37efKrishna Gudipati iocmd->status = bfa_fcpim_profile_off(&bfad->bfa); 195342a8e6e298f39518445785c53a16357267db37efKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 195442a8e6e298f39518445785c53a16357267db37efKrishna Gudipati 195542a8e6e298f39518445785c53a16357267db37efKrishna Gudipati return 0; 195642a8e6e298f39518445785c53a16357267db37efKrishna Gudipati} 195742a8e6e298f39518445785c53a16357267db37efKrishna Gudipati 195842a8e6e298f39518445785c53a16357267db37efKrishna Gudipatistatic int 195942a8e6e298f39518445785c53a16357267db37efKrishna Gudipatibfad_iocmd_itnim_get_ioprofile(struct bfad_s *bfad, void *cmd) 196042a8e6e298f39518445785c53a16357267db37efKrishna Gudipati{ 196142a8e6e298f39518445785c53a16357267db37efKrishna Gudipati struct bfa_bsg_itnim_ioprofile_s *iocmd = 196242a8e6e298f39518445785c53a16357267db37efKrishna Gudipati (struct bfa_bsg_itnim_ioprofile_s *)cmd; 196342a8e6e298f39518445785c53a16357267db37efKrishna Gudipati struct bfa_fcs_lport_s *fcs_port; 196442a8e6e298f39518445785c53a16357267db37efKrishna Gudipati struct bfa_fcs_itnim_s *itnim; 196542a8e6e298f39518445785c53a16357267db37efKrishna Gudipati unsigned long flags; 196642a8e6e298f39518445785c53a16357267db37efKrishna Gudipati 196742a8e6e298f39518445785c53a16357267db37efKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 196842a8e6e298f39518445785c53a16357267db37efKrishna Gudipati fcs_port = bfa_fcs_lookup_port(&bfad->bfa_fcs, 196942a8e6e298f39518445785c53a16357267db37efKrishna Gudipati iocmd->vf_id, iocmd->lpwwn); 197042a8e6e298f39518445785c53a16357267db37efKrishna Gudipati if (!fcs_port) 197142a8e6e298f39518445785c53a16357267db37efKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_LWWN; 197242a8e6e298f39518445785c53a16357267db37efKrishna Gudipati else { 197342a8e6e298f39518445785c53a16357267db37efKrishna Gudipati itnim = bfa_fcs_itnim_lookup(fcs_port, iocmd->rpwwn); 197442a8e6e298f39518445785c53a16357267db37efKrishna Gudipati if (itnim == NULL) 197542a8e6e298f39518445785c53a16357267db37efKrishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_RWWN; 197642a8e6e298f39518445785c53a16357267db37efKrishna Gudipati else 197742a8e6e298f39518445785c53a16357267db37efKrishna Gudipati iocmd->status = bfa_itnim_get_ioprofile( 197842a8e6e298f39518445785c53a16357267db37efKrishna Gudipati bfa_fcs_itnim_get_halitn(itnim), 197942a8e6e298f39518445785c53a16357267db37efKrishna Gudipati &iocmd->ioprofile); 198042a8e6e298f39518445785c53a16357267db37efKrishna Gudipati } 198142a8e6e298f39518445785c53a16357267db37efKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 198242a8e6e298f39518445785c53a16357267db37efKrishna Gudipati return 0; 198342a8e6e298f39518445785c53a16357267db37efKrishna Gudipati} 198442a8e6e298f39518445785c53a16357267db37efKrishna Gudipati 198537ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipatiint 198637ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipatibfad_iocmd_fcport_get_stats(struct bfad_s *bfad, void *cmd) 198737ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati{ 198837ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati struct bfa_bsg_fcport_stats_s *iocmd = 198937ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati (struct bfa_bsg_fcport_stats_s *)cmd; 199037ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati struct bfad_hal_comp fcomp; 199137ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati unsigned long flags; 199237ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati struct bfa_cb_pending_q_s cb_qe; 199337ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati 199437ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati init_completion(&fcomp.comp); 199537ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati bfa_pending_q_init(&cb_qe, (bfa_cb_cbfn_t)bfad_hcb_comp, 199637ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati &fcomp, &iocmd->stats); 199737ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 199837ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati iocmd->status = bfa_fcport_get_stats(&bfad->bfa, &cb_qe); 199937ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 200037ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) { 200137ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati bfa_trc(bfad, iocmd->status); 200237ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati goto out; 200337ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati } 200437ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati wait_for_completion(&fcomp.comp); 200537ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati iocmd->status = fcomp.status; 200637ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipatiout: 200737ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati return 0; 200837ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati} 200937ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati 201037ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipatiint 201137ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipatibfad_iocmd_fcport_reset_stats(struct bfad_s *bfad, void *cmd) 201237ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati{ 201337ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati struct bfa_bsg_gen_s *iocmd = (struct bfa_bsg_gen_s *)cmd; 201437ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati struct bfad_hal_comp fcomp; 201537ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati unsigned long flags; 201637ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati struct bfa_cb_pending_q_s cb_qe; 201737ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati 201837ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati init_completion(&fcomp.comp); 201937ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati bfa_pending_q_init(&cb_qe, (bfa_cb_cbfn_t)bfad_hcb_comp, &fcomp, NULL); 202037ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati 202137ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 202237ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati iocmd->status = bfa_fcport_clear_stats(&bfad->bfa, &cb_qe); 202337ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 202437ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) { 202537ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati bfa_trc(bfad, iocmd->status); 202637ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati goto out; 202737ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati } 202837ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati wait_for_completion(&fcomp.comp); 202937ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati iocmd->status = fcomp.status; 203037ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipatiout: 203137ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati return 0; 203237ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati} 203337ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati 2034a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipatiint 2035a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipatibfad_iocmd_boot_cfg(struct bfad_s *bfad, void *cmd) 2036a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati{ 2037a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati struct bfa_bsg_boot_s *iocmd = (struct bfa_bsg_boot_s *)cmd; 2038a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati struct bfad_hal_comp fcomp; 2039a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati unsigned long flags; 2040a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati 2041a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati init_completion(&fcomp.comp); 2042a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 2043a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati iocmd->status = bfa_flash_update_part(BFA_FLASH(&bfad->bfa), 2044a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati BFA_FLASH_PART_BOOT, PCI_FUNC(bfad->pcidev->devfn), 2045a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati &iocmd->cfg, sizeof(struct bfa_boot_cfg_s), 0, 2046a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati bfad_hcb_comp, &fcomp); 2047a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 2048a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) 2049a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati goto out; 2050a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati wait_for_completion(&fcomp.comp); 2051a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati iocmd->status = fcomp.status; 2052a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipatiout: 2053a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati return 0; 2054a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati} 2055a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati 2056a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipatiint 2057a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipatibfad_iocmd_boot_query(struct bfad_s *bfad, void *cmd) 2058a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati{ 2059a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati struct bfa_bsg_boot_s *iocmd = (struct bfa_bsg_boot_s *)cmd; 2060a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati struct bfad_hal_comp fcomp; 2061a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati unsigned long flags; 2062a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati 2063a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati init_completion(&fcomp.comp); 2064a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 2065a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati iocmd->status = bfa_flash_read_part(BFA_FLASH(&bfad->bfa), 2066a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati BFA_FLASH_PART_BOOT, PCI_FUNC(bfad->pcidev->devfn), 2067a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati &iocmd->cfg, sizeof(struct bfa_boot_cfg_s), 0, 2068a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati bfad_hcb_comp, &fcomp); 2069a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 2070a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) 2071a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati goto out; 2072a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati wait_for_completion(&fcomp.comp); 2073a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati iocmd->status = fcomp.status; 2074a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipatiout: 2075a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati return 0; 2076a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati} 2077a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati 2078a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipatiint 2079a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipatibfad_iocmd_preboot_query(struct bfad_s *bfad, void *cmd) 2080a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati{ 2081a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati struct bfa_bsg_preboot_s *iocmd = (struct bfa_bsg_preboot_s *)cmd; 2082a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati struct bfi_iocfc_cfgrsp_s *cfgrsp = bfad->bfa.iocfc.cfgrsp; 2083a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati struct bfa_boot_pbc_s *pbcfg = &iocmd->cfg; 2084a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati unsigned long flags; 2085a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati 2086a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 2087a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati pbcfg->enable = cfgrsp->pbc_cfg.boot_enabled; 2088a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati pbcfg->nbluns = cfgrsp->pbc_cfg.nbluns; 2089a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati pbcfg->speed = cfgrsp->pbc_cfg.port_speed; 2090a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati memcpy(pbcfg->pblun, cfgrsp->pbc_cfg.blun, sizeof(pbcfg->pblun)); 2091a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati iocmd->status = BFA_STATUS_OK; 2092a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 2093a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati 2094a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati return 0; 2095a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati} 2096a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati 2097a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipatiint 2098a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipatibfad_iocmd_ethboot_cfg(struct bfad_s *bfad, void *cmd) 2099a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati{ 2100a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati struct bfa_bsg_ethboot_s *iocmd = (struct bfa_bsg_ethboot_s *)cmd; 2101a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati struct bfad_hal_comp fcomp; 2102a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati unsigned long flags; 2103a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati 2104a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati init_completion(&fcomp.comp); 2105a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 2106a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati iocmd->status = bfa_flash_update_part(BFA_FLASH(&bfad->bfa), 2107a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati BFA_FLASH_PART_PXECFG, 2108a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati bfad->bfa.ioc.port_id, &iocmd->cfg, 2109a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati sizeof(struct bfa_ethboot_cfg_s), 0, 2110a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati bfad_hcb_comp, &fcomp); 2111a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 2112a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) 2113a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati goto out; 2114a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati wait_for_completion(&fcomp.comp); 2115a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati iocmd->status = fcomp.status; 2116a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipatiout: 2117a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati return 0; 2118a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati} 2119a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati 2120a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipatiint 2121a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipatibfad_iocmd_ethboot_query(struct bfad_s *bfad, void *cmd) 2122a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati{ 2123a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati struct bfa_bsg_ethboot_s *iocmd = (struct bfa_bsg_ethboot_s *)cmd; 2124a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati struct bfad_hal_comp fcomp; 2125a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati unsigned long flags; 2126a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati 2127a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati init_completion(&fcomp.comp); 2128a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 2129a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati iocmd->status = bfa_flash_read_part(BFA_FLASH(&bfad->bfa), 2130a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati BFA_FLASH_PART_PXECFG, 2131a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati bfad->bfa.ioc.port_id, &iocmd->cfg, 2132a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati sizeof(struct bfa_ethboot_cfg_s), 0, 2133a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati bfad_hcb_comp, &fcomp); 2134a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 2135a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati if (iocmd->status != BFA_STATUS_OK) 2136a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati goto out; 2137a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati wait_for_completion(&fcomp.comp); 2138a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati iocmd->status = fcomp.status; 2139a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipatiout: 2140a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati return 0; 2141a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati} 2142a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati 214345191236b179877d259a40e13c5144628d4df37fKrishna Gudipatiint 214445191236b179877d259a40e13c5144628d4df37fKrishna Gudipatibfad_iocmd_cfg_trunk(struct bfad_s *bfad, void *cmd, unsigned int v_cmd) 214545191236b179877d259a40e13c5144628d4df37fKrishna Gudipati{ 214645191236b179877d259a40e13c5144628d4df37fKrishna Gudipati struct bfa_bsg_gen_s *iocmd = (struct bfa_bsg_gen_s *)cmd; 214745191236b179877d259a40e13c5144628d4df37fKrishna Gudipati struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(&bfad->bfa); 214845191236b179877d259a40e13c5144628d4df37fKrishna Gudipati struct bfa_fcport_trunk_s *trunk = &fcport->trunk; 214945191236b179877d259a40e13c5144628d4df37fKrishna Gudipati unsigned long flags; 215045191236b179877d259a40e13c5144628d4df37fKrishna Gudipati 215145191236b179877d259a40e13c5144628d4df37fKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 215245191236b179877d259a40e13c5144628d4df37fKrishna Gudipati 215345191236b179877d259a40e13c5144628d4df37fKrishna Gudipati if (v_cmd == IOCMD_TRUNK_ENABLE) { 215445191236b179877d259a40e13c5144628d4df37fKrishna Gudipati trunk->attr.state = BFA_TRUNK_OFFLINE; 215545191236b179877d259a40e13c5144628d4df37fKrishna Gudipati bfa_fcport_disable(&bfad->bfa); 215645191236b179877d259a40e13c5144628d4df37fKrishna Gudipati fcport->cfg.trunked = BFA_TRUE; 215745191236b179877d259a40e13c5144628d4df37fKrishna Gudipati } else if (v_cmd == IOCMD_TRUNK_DISABLE) { 215845191236b179877d259a40e13c5144628d4df37fKrishna Gudipati trunk->attr.state = BFA_TRUNK_DISABLED; 215945191236b179877d259a40e13c5144628d4df37fKrishna Gudipati bfa_fcport_disable(&bfad->bfa); 216045191236b179877d259a40e13c5144628d4df37fKrishna Gudipati fcport->cfg.trunked = BFA_FALSE; 216145191236b179877d259a40e13c5144628d4df37fKrishna Gudipati } 216245191236b179877d259a40e13c5144628d4df37fKrishna Gudipati 216345191236b179877d259a40e13c5144628d4df37fKrishna Gudipati if (!bfa_fcport_is_disabled(&bfad->bfa)) 216445191236b179877d259a40e13c5144628d4df37fKrishna Gudipati bfa_fcport_enable(&bfad->bfa); 216545191236b179877d259a40e13c5144628d4df37fKrishna Gudipati 216645191236b179877d259a40e13c5144628d4df37fKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 216745191236b179877d259a40e13c5144628d4df37fKrishna Gudipati 216845191236b179877d259a40e13c5144628d4df37fKrishna Gudipati iocmd->status = BFA_STATUS_OK; 216945191236b179877d259a40e13c5144628d4df37fKrishna Gudipati return 0; 217045191236b179877d259a40e13c5144628d4df37fKrishna Gudipati} 217145191236b179877d259a40e13c5144628d4df37fKrishna Gudipati 217245191236b179877d259a40e13c5144628d4df37fKrishna Gudipatiint 217345191236b179877d259a40e13c5144628d4df37fKrishna Gudipatibfad_iocmd_trunk_get_attr(struct bfad_s *bfad, void *cmd) 217445191236b179877d259a40e13c5144628d4df37fKrishna Gudipati{ 217545191236b179877d259a40e13c5144628d4df37fKrishna Gudipati struct bfa_bsg_trunk_attr_s *iocmd = (struct bfa_bsg_trunk_attr_s *)cmd; 217645191236b179877d259a40e13c5144628d4df37fKrishna Gudipati struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(&bfad->bfa); 217745191236b179877d259a40e13c5144628d4df37fKrishna Gudipati struct bfa_fcport_trunk_s *trunk = &fcport->trunk; 217845191236b179877d259a40e13c5144628d4df37fKrishna Gudipati unsigned long flags; 217945191236b179877d259a40e13c5144628d4df37fKrishna Gudipati 218045191236b179877d259a40e13c5144628d4df37fKrishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 218145191236b179877d259a40e13c5144628d4df37fKrishna Gudipati memcpy((void *)&iocmd->attr, (void *)&trunk->attr, 218245191236b179877d259a40e13c5144628d4df37fKrishna Gudipati sizeof(struct bfa_trunk_attr_s)); 218345191236b179877d259a40e13c5144628d4df37fKrishna Gudipati iocmd->attr.port_id = bfa_lps_get_base_pid(&bfad->bfa); 218445191236b179877d259a40e13c5144628d4df37fKrishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 218545191236b179877d259a40e13c5144628d4df37fKrishna Gudipati 218645191236b179877d259a40e13c5144628d4df37fKrishna Gudipati iocmd->status = BFA_STATUS_OK; 218745191236b179877d259a40e13c5144628d4df37fKrishna Gudipati return 0; 218845191236b179877d259a40e13c5144628d4df37fKrishna Gudipati} 218945191236b179877d259a40e13c5144628d4df37fKrishna Gudipati 21903ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipatiint 21913ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipatibfad_iocmd_qos(struct bfad_s *bfad, void *cmd, unsigned int v_cmd) 21923ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati{ 21933ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati struct bfa_bsg_gen_s *iocmd = (struct bfa_bsg_gen_s *)cmd; 21943ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(&bfad->bfa); 21953ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati unsigned long flags; 21963ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati 21973ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 21983ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati if (bfa_ioc_get_type(&bfad->bfa.ioc) == BFA_IOC_TYPE_FC) { 21993ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati if (v_cmd == IOCMD_QOS_ENABLE) 22003ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati fcport->cfg.qos_enabled = BFA_TRUE; 22013ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati else if (v_cmd == IOCMD_QOS_DISABLE) 22023ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati fcport->cfg.qos_enabled = BFA_FALSE; 22033ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati } 22043ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 22053ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati 22063ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati iocmd->status = BFA_STATUS_OK; 22073ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati return 0; 22083ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati} 22093ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati 22103ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipatiint 22113ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipatibfad_iocmd_qos_get_attr(struct bfad_s *bfad, void *cmd) 22123ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati{ 22133ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati struct bfa_bsg_qos_attr_s *iocmd = (struct bfa_bsg_qos_attr_s *)cmd; 22143ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(&bfad->bfa); 22153ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati unsigned long flags; 22163ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati 22173ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 22183ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati iocmd->attr.state = fcport->qos_attr.state; 22193ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati iocmd->attr.total_bb_cr = be32_to_cpu(fcport->qos_attr.total_bb_cr); 22203ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 22213ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati 22223ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati iocmd->status = BFA_STATUS_OK; 22233ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati return 0; 22243ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati} 22253ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati 22263ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipatiint 22273ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipatibfad_iocmd_qos_get_vc_attr(struct bfad_s *bfad, void *cmd) 22283ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati{ 22293ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati struct bfa_bsg_qos_vc_attr_s *iocmd = 22303ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati (struct bfa_bsg_qos_vc_attr_s *)cmd; 22313ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(&bfad->bfa); 22323ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati struct bfa_qos_vc_attr_s *bfa_vc_attr = &fcport->qos_vc_attr; 22333ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati unsigned long flags; 22343ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati u32 i = 0; 22353ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati 22363ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 22373ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati iocmd->attr.total_vc_count = be16_to_cpu(bfa_vc_attr->total_vc_count); 22383ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati iocmd->attr.shared_credit = be16_to_cpu(bfa_vc_attr->shared_credit); 22393ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati iocmd->attr.elp_opmode_flags = 22403ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati be32_to_cpu(bfa_vc_attr->elp_opmode_flags); 22413ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati 22423ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati /* Individual VC info */ 22433ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati while (i < iocmd->attr.total_vc_count) { 22443ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati iocmd->attr.vc_info[i].vc_credit = 22453ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati bfa_vc_attr->vc_info[i].vc_credit; 22463ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati iocmd->attr.vc_info[i].borrow_credit = 22473ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati bfa_vc_attr->vc_info[i].borrow_credit; 22483ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati iocmd->attr.vc_info[i].priority = 22493ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati bfa_vc_attr->vc_info[i].priority; 22503ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati i++; 22513ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati } 22523ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 22533ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati 22543ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati iocmd->status = BFA_STATUS_OK; 22553ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati return 0; 22563ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati} 22573ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati 22583ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipatiint 22593ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipatibfad_iocmd_qos_get_stats(struct bfad_s *bfad, void *cmd) 22603ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati{ 22613ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati struct bfa_bsg_fcport_stats_s *iocmd = 22623ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati (struct bfa_bsg_fcport_stats_s *)cmd; 22633ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati struct bfad_hal_comp fcomp; 22643ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati unsigned long flags; 22653ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati struct bfa_cb_pending_q_s cb_qe; 22663ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati 22673ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati init_completion(&fcomp.comp); 22683ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati bfa_pending_q_init(&cb_qe, (bfa_cb_cbfn_t)bfad_hcb_comp, 22693ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati &fcomp, &iocmd->stats); 22703ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati 22713ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 22723ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati WARN_ON(!bfa_ioc_get_fcmode(&bfad->bfa.ioc)); 22733ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati iocmd->status = bfa_fcport_get_stats(&bfad->bfa, &cb_qe); 22743ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 22753ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati if (iocmd->status != BFA_STATUS_OK) { 22763ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati bfa_trc(bfad, iocmd->status); 22773ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati goto out; 22783ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati } 22793ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati wait_for_completion(&fcomp.comp); 22803ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati iocmd->status = fcomp.status; 22813ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipatiout: 22823ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati return 0; 22833ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati} 22843ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati 22853ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipatiint 22863ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipatibfad_iocmd_qos_reset_stats(struct bfad_s *bfad, void *cmd) 22873ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati{ 22883ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati struct bfa_bsg_gen_s *iocmd = (struct bfa_bsg_gen_s *)cmd; 22893ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati struct bfad_hal_comp fcomp; 22903ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati unsigned long flags; 22913ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati struct bfa_cb_pending_q_s cb_qe; 22923ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati 22933ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati init_completion(&fcomp.comp); 22943ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati bfa_pending_q_init(&cb_qe, (bfa_cb_cbfn_t)bfad_hcb_comp, 22953ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati &fcomp, NULL); 22963ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati 22973ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 22983ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati WARN_ON(!bfa_ioc_get_fcmode(&bfad->bfa.ioc)); 22993ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati iocmd->status = bfa_fcport_clear_stats(&bfad->bfa, &cb_qe); 23003ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 23013ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati if (iocmd->status != BFA_STATUS_OK) { 23023ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati bfa_trc(bfad, iocmd->status); 23033ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati goto out; 23043ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati } 23053ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati wait_for_completion(&fcomp.comp); 23063ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati iocmd->status = fcomp.status; 23073ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipatiout: 23083ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati return 0; 23093ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati} 23103ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati 2311c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipatiint 2312c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipatibfad_iocmd_vf_get_stats(struct bfad_s *bfad, void *cmd) 2313c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati{ 2314c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati struct bfa_bsg_vf_stats_s *iocmd = 2315c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati (struct bfa_bsg_vf_stats_s *)cmd; 2316c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati struct bfa_fcs_fabric_s *fcs_vf; 2317c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati unsigned long flags; 2318c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati 2319c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 2320c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati fcs_vf = bfa_fcs_vf_lookup(&bfad->bfa_fcs, iocmd->vf_id); 2321c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati if (fcs_vf == NULL) { 2322c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 2323c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_VFID; 2324c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati goto out; 2325c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati } 2326c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati memcpy((void *)&iocmd->stats, (void *)&fcs_vf->stats, 2327c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati sizeof(struct bfa_vf_stats_s)); 2328c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 2329c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati iocmd->status = BFA_STATUS_OK; 2330c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipatiout: 2331c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati return 0; 2332c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati} 2333c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati 2334c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipatiint 2335c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipatibfad_iocmd_vf_clr_stats(struct bfad_s *bfad, void *cmd) 2336c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati{ 2337c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati struct bfa_bsg_vf_reset_stats_s *iocmd = 2338c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati (struct bfa_bsg_vf_reset_stats_s *)cmd; 2339c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati struct bfa_fcs_fabric_s *fcs_vf; 2340c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati unsigned long flags; 2341c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati 2342c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 2343c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati fcs_vf = bfa_fcs_vf_lookup(&bfad->bfa_fcs, iocmd->vf_id); 2344c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati if (fcs_vf == NULL) { 2345c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 2346c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati iocmd->status = BFA_STATUS_UNKNOWN_VFID; 2347c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati goto out; 2348c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati } 2349c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati memset((void *)&fcs_vf->stats, 0, sizeof(struct bfa_vf_stats_s)); 2350c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 2351c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati iocmd->status = BFA_STATUS_OK; 2352c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipatiout: 2353c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati return 0; 2354c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati} 2355c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati 23565b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati/* Function to reset the LUN SCAN mode */ 23575b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipatistatic void 23585b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipatibfad_iocmd_lunmask_reset_lunscan_mode(struct bfad_s *bfad, int lunmask_cfg) 23595b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati{ 23605b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati struct bfad_im_port_s *pport_im = bfad->pport.im_port; 23615b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati struct bfad_vport_s *vport = NULL; 23625b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati 23635b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati /* Set the scsi device LUN SCAN flags for base port */ 23645b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati bfad_reset_sdev_bflags(pport_im, lunmask_cfg); 23655b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati 23665b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati /* Set the scsi device LUN SCAN flags for the vports */ 23675b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati list_for_each_entry(vport, &bfad->vport_list, list_entry) 23685b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati bfad_reset_sdev_bflags(vport->drv_port.im_port, lunmask_cfg); 23695b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati} 23705b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati 23714c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipatiint 23724c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipatibfad_iocmd_lunmask(struct bfad_s *bfad, void *pcmd, unsigned int v_cmd) 23734c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati{ 23744c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati struct bfa_bsg_gen_s *iocmd = (struct bfa_bsg_gen_s *)pcmd; 23754c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati unsigned long flags; 23764c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati 23774c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 23785b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati if (v_cmd == IOCMD_FCPIM_LUNMASK_ENABLE) { 23794c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati iocmd->status = bfa_fcpim_lunmask_update(&bfad->bfa, BFA_TRUE); 23805b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati /* Set the LUN Scanning mode to be Sequential scan */ 23815b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati if (iocmd->status == BFA_STATUS_OK) 23825b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati bfad_iocmd_lunmask_reset_lunscan_mode(bfad, BFA_TRUE); 23835b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati } else if (v_cmd == IOCMD_FCPIM_LUNMASK_DISABLE) { 23844c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati iocmd->status = bfa_fcpim_lunmask_update(&bfad->bfa, BFA_FALSE); 23855b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati /* Set the LUN Scanning mode to default REPORT_LUNS scan */ 23865b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati if (iocmd->status == BFA_STATUS_OK) 23875b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati bfad_iocmd_lunmask_reset_lunscan_mode(bfad, BFA_FALSE); 23885b7db7af522d9f281ff8bf540d2b5cbea2206b27Krishna Gudipati } else if (v_cmd == IOCMD_FCPIM_LUNMASK_CLEAR) 23894c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati iocmd->status = bfa_fcpim_lunmask_clear(&bfad->bfa); 23904c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 23914c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati return 0; 23924c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati} 23934c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati 23944c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipatiint 23954c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipatibfad_iocmd_fcpim_lunmask_query(struct bfad_s *bfad, void *cmd) 23964c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati{ 23974c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati struct bfa_bsg_fcpim_lunmask_query_s *iocmd = 23984c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati (struct bfa_bsg_fcpim_lunmask_query_s *)cmd; 23994c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati struct bfa_lunmask_cfg_s *lun_mask = &iocmd->lun_mask; 24004c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati unsigned long flags; 24014c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati 24024c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 24034c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati iocmd->status = bfa_fcpim_lunmask_query(&bfad->bfa, lun_mask); 24044c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 24054c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati return 0; 24064c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati} 24074c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati 24084c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipatiint 24094c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipatibfad_iocmd_fcpim_cfg_lunmask(struct bfad_s *bfad, void *cmd, unsigned int v_cmd) 24104c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati{ 24114c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati struct bfa_bsg_fcpim_lunmask_s *iocmd = 24124c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati (struct bfa_bsg_fcpim_lunmask_s *)cmd; 24134c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati unsigned long flags; 24144c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati 24154c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 24164c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati if (v_cmd == IOCMD_FCPIM_LUNMASK_ADD) 24174c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati iocmd->status = bfa_fcpim_lunmask_add(&bfad->bfa, iocmd->vf_id, 24184c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati &iocmd->pwwn, iocmd->rpwwn, iocmd->lun); 24194c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati else if (v_cmd == IOCMD_FCPIM_LUNMASK_DELETE) 24204c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati iocmd->status = bfa_fcpim_lunmask_delete(&bfad->bfa, 24214c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati iocmd->vf_id, &iocmd->pwwn, 24224c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati iocmd->rpwwn, iocmd->lun); 24234c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 24244c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati return 0; 24254c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati} 24264c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati 2427b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatistatic int 2428b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_iocmd_handler(struct bfad_s *bfad, unsigned int cmd, void *iocmd, 2429b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati unsigned int payload_len) 2430b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 24319afbcfab74d26051702862b57c0115f71477a3ccKrishna Gudipati int rc = -EINVAL; 2432b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2433b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati switch (cmd) { 2434601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_IOC_ENABLE: 2435601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_ioc_enable(bfad, iocmd); 2436601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2437601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_IOC_DISABLE: 2438601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_ioc_disable(bfad, iocmd); 2439601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2440b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati case IOCMD_IOC_GET_INFO: 2441b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rc = bfad_iocmd_ioc_get_info(bfad, iocmd); 2442b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati break; 2443b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati case IOCMD_IOC_GET_ATTR: 2444b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rc = bfad_iocmd_ioc_get_attr(bfad, iocmd); 2445b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati break; 2446601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_IOC_GET_STATS: 2447601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_ioc_get_stats(bfad, iocmd); 2448601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2449601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_IOC_GET_FWSTATS: 2450601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_ioc_get_fwstats(bfad, iocmd, payload_len); 2451601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2452f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_IOC_RESET_STATS: 2453f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_IOC_RESET_FWSTATS: 2454f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_ioc_reset_stats(bfad, iocmd, cmd); 2455f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2456f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_IOC_SET_ADAPTER_NAME: 2457f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_IOC_SET_PORT_NAME: 2458f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_ioc_set_name(bfad, iocmd, cmd); 2459f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2460601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_IOCFC_GET_ATTR: 2461601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_iocfc_get_attr(bfad, iocmd); 2462601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2463601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_IOCFC_SET_INTR: 2464601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_iocfc_set_intr(bfad, iocmd); 2465601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2466601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_PORT_ENABLE: 2467601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_port_enable(bfad, iocmd); 2468601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2469601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_PORT_DISABLE: 2470601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_port_disable(bfad, iocmd); 2471601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2472b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati case IOCMD_PORT_GET_ATTR: 2473b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rc = bfad_iocmd_port_get_attr(bfad, iocmd); 2474b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati break; 2475601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_PORT_GET_STATS: 2476601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_port_get_stats(bfad, iocmd, payload_len); 2477601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2478f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_PORT_RESET_STATS: 2479f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_port_reset_stats(bfad, iocmd); 2480f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2481f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_PORT_CFG_TOPO: 2482f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_PORT_CFG_SPEED: 2483f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_PORT_CFG_ALPA: 2484f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_PORT_CLR_ALPA: 2485f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_set_port_cfg(bfad, iocmd, cmd); 2486f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2487f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_PORT_CFG_MAXFRSZ: 2488f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_port_cfg_maxfrsize(bfad, iocmd); 2489f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2490f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_PORT_BBSC_ENABLE: 2491f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_PORT_BBSC_DISABLE: 2492f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_port_cfg_bbsc(bfad, iocmd, cmd); 2493f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2494b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati case IOCMD_LPORT_GET_ATTR: 2495b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rc = bfad_iocmd_lport_get_attr(bfad, iocmd); 2496b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati break; 2497601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_LPORT_GET_STATS: 2498601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_lport_get_stats(bfad, iocmd); 2499601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2500f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_LPORT_RESET_STATS: 2501f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_lport_reset_stats(bfad, iocmd); 2502f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2503601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_LPORT_GET_IOSTATS: 2504601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_lport_get_iostats(bfad, iocmd); 2505601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2506601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_LPORT_GET_RPORTS: 2507601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_lport_get_rports(bfad, iocmd, payload_len); 2508601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2509601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_RPORT_GET_ATTR: 2510601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_rport_get_attr(bfad, iocmd); 2511601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2512b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati case IOCMD_RPORT_GET_ADDR: 2513b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rc = bfad_iocmd_rport_get_addr(bfad, iocmd); 2514b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati break; 2515601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_RPORT_GET_STATS: 2516601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_rport_get_stats(bfad, iocmd); 2517601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2518f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_RPORT_RESET_STATS: 2519f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_rport_clr_stats(bfad, iocmd); 2520f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2521f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_RPORT_SET_SPEED: 2522f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_rport_set_speed(bfad, iocmd); 2523f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2524f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_VPORT_GET_ATTR: 2525f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_vport_get_attr(bfad, iocmd); 2526f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2527f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_VPORT_GET_STATS: 2528f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_vport_get_stats(bfad, iocmd); 2529f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2530f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_VPORT_RESET_STATS: 2531f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_vport_clr_stats(bfad, iocmd); 2532f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2533b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati case IOCMD_FABRIC_GET_LPORTS: 2534b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rc = bfad_iocmd_fabric_get_lports(bfad, iocmd, payload_len); 2535b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati break; 2536f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_RATELIM_ENABLE: 2537f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_RATELIM_DISABLE: 2538f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_ratelim(bfad, cmd, iocmd); 2539f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2540f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_RATELIM_DEF_SPEED: 2541f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_ratelim_speed(bfad, cmd, iocmd); 2542f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2543f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_FCPIM_FAILOVER: 2544f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_cfg_fcpim(bfad, iocmd); 2545f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2546601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_FCPIM_MODSTATS: 2547601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_fcpim_get_modstats(bfad, iocmd); 2548601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2549f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_FCPIM_MODSTATSCLR: 2550f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_fcpim_clr_modstats(bfad, iocmd); 2551f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2552601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_FCPIM_DEL_ITN_STATS: 2553601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_fcpim_get_del_itn_stats(bfad, iocmd); 2554601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2555b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati case IOCMD_ITNIM_GET_ATTR: 2556b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rc = bfad_iocmd_itnim_get_attr(bfad, iocmd); 2557b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati break; 2558601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_ITNIM_GET_IOSTATS: 2559601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_itnim_get_iostats(bfad, iocmd); 2560601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2561f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_ITNIM_RESET_STATS: 2562f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_itnim_reset_stats(bfad, iocmd); 2563f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2564601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_ITNIM_GET_ITNSTATS: 2565601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_itnim_get_itnstats(bfad, iocmd); 2566601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2567601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_FCPORT_ENABLE: 2568601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_fcport_enable(bfad, iocmd); 2569601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 2570601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati case IOCMD_FCPORT_DISABLE: 2571601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati rc = bfad_iocmd_fcport_disable(bfad, iocmd); 2572601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati break; 25731a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati case IOCMD_IOC_PCIFN_CFG: 25741a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati rc = bfad_iocmd_ioc_get_pcifn_cfg(bfad, iocmd); 25751a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati break; 25761a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati case IOCMD_PCIFN_CREATE: 25771a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati rc = bfad_iocmd_pcifn_create(bfad, iocmd); 25781a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati break; 25791a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati case IOCMD_PCIFN_DELETE: 25801a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati rc = bfad_iocmd_pcifn_delete(bfad, iocmd); 25811a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati break; 25821a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati case IOCMD_PCIFN_BW: 25831a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati rc = bfad_iocmd_pcifn_bw(bfad, iocmd); 25841a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati break; 25851a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati case IOCMD_ADAPTER_CFG_MODE: 25861a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati rc = bfad_iocmd_adapter_cfg_mode(bfad, iocmd); 25871a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati break; 25881a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati case IOCMD_PORT_CFG_MODE: 25891a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati rc = bfad_iocmd_port_cfg_mode(bfad, iocmd); 25901a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati break; 25911a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati case IOCMD_FLASH_ENABLE_OPTROM: 25921a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati case IOCMD_FLASH_DISABLE_OPTROM: 25931a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati rc = bfad_iocmd_ablk_optrom(bfad, cmd, iocmd); 25941a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati break; 2595a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati case IOCMD_FAA_QUERY: 2596a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati rc = bfad_iocmd_faa_query(bfad, iocmd); 2597a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati break; 2598148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati case IOCMD_CEE_GET_ATTR: 2599148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati rc = bfad_iocmd_cee_attr(bfad, iocmd, payload_len); 2600148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati break; 2601148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati case IOCMD_CEE_GET_STATS: 2602148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati rc = bfad_iocmd_cee_get_stats(bfad, iocmd, payload_len); 2603148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati break; 2604148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati case IOCMD_CEE_RESET_STATS: 2605148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati rc = bfad_iocmd_cee_reset_stats(bfad, iocmd); 2606148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati break; 260751e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati case IOCMD_SFP_MEDIA: 260851e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati rc = bfad_iocmd_sfp_media(bfad, iocmd); 260951e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati break; 261051e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati case IOCMD_SFP_SPEED: 261151e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati rc = bfad_iocmd_sfp_speed(bfad, iocmd); 261251e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati break; 26135a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati case IOCMD_FLASH_GET_ATTR: 26145a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati rc = bfad_iocmd_flash_get_attr(bfad, iocmd); 26155a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati break; 26165a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati case IOCMD_FLASH_ERASE_PART: 26175a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati rc = bfad_iocmd_flash_erase_part(bfad, iocmd); 26185a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati break; 26195a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati case IOCMD_FLASH_UPDATE_PART: 26205a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati rc = bfad_iocmd_flash_update_part(bfad, iocmd, payload_len); 26215a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati break; 26225a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati case IOCMD_FLASH_READ_PART: 26235a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati rc = bfad_iocmd_flash_read_part(bfad, iocmd, payload_len); 26245a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati break; 26253d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati case IOCMD_DIAG_TEMP: 26263d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati rc = bfad_iocmd_diag_temp(bfad, iocmd); 26273d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati break; 26283d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati case IOCMD_DIAG_MEMTEST: 26293d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati rc = bfad_iocmd_diag_memtest(bfad, iocmd); 26303d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati break; 26313d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati case IOCMD_DIAG_LOOPBACK: 26323d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati rc = bfad_iocmd_diag_loopback(bfad, iocmd); 26333d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati break; 26343d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati case IOCMD_DIAG_FWPING: 26353d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati rc = bfad_iocmd_diag_fwping(bfad, iocmd); 26363d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati break; 26373d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati case IOCMD_DIAG_QUEUETEST: 26383d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati rc = bfad_iocmd_diag_queuetest(bfad, iocmd); 26393d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati break; 26403d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati case IOCMD_DIAG_SFP: 26413d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati rc = bfad_iocmd_diag_sfp(bfad, iocmd); 26423d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati break; 26433d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati case IOCMD_DIAG_LED: 26443d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati rc = bfad_iocmd_diag_led(bfad, iocmd); 26453d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati break; 26463d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati case IOCMD_DIAG_BEACON_LPORT: 26473d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati rc = bfad_iocmd_diag_beacon_lport(bfad, iocmd); 26483d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati break; 26493d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati case IOCMD_DIAG_LB_STAT: 26503d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati rc = bfad_iocmd_diag_lb_stat(bfad, iocmd); 26513d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati break; 26523350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati case IOCMD_PHY_GET_ATTR: 26533350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati rc = bfad_iocmd_phy_get_attr(bfad, iocmd); 26543350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati break; 26553350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati case IOCMD_PHY_GET_STATS: 26563350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati rc = bfad_iocmd_phy_get_stats(bfad, iocmd); 26573350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati break; 26583350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati case IOCMD_PHY_UPDATE_FW: 26593350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati rc = bfad_iocmd_phy_update(bfad, iocmd, payload_len); 26603350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati break; 26613350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati case IOCMD_PHY_READ_FW: 26623350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati rc = bfad_iocmd_phy_read(bfad, iocmd, payload_len); 26633350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati break; 266461e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati case IOCMD_VHBA_QUERY: 266561e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati rc = bfad_iocmd_vhba_query(bfad, iocmd); 266661e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati break; 266761e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati case IOCMD_DEBUG_PORTLOG: 266861e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati rc = bfad_iocmd_porglog_get(bfad, iocmd); 266961e62e21afe469854e04546ea10b7a6f4cfd1142Krishna Gudipati break; 2670f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_DEBUG_FW_CORE: 2671f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_debug_fw_core(bfad, iocmd, payload_len); 2672f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2673f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_DEBUG_FW_STATE_CLR: 2674f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_DEBUG_PORTLOG_CLR: 2675f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_DEBUG_START_DTRC: 2676f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_DEBUG_STOP_DTRC: 2677f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_debug_ctl(bfad, iocmd, cmd); 2678f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 2679f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati case IOCMD_DEBUG_PORTLOG_CTL: 2680f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati rc = bfad_iocmd_porglog_ctl(bfad, iocmd); 2681f2ee76017b30c84f128dfbf716950ffc0e4d949aKrishna Gudipati break; 268242a8e6e298f39518445785c53a16357267db37efKrishna Gudipati case IOCMD_FCPIM_PROFILE_ON: 268342a8e6e298f39518445785c53a16357267db37efKrishna Gudipati case IOCMD_FCPIM_PROFILE_OFF: 268442a8e6e298f39518445785c53a16357267db37efKrishna Gudipati rc = bfad_iocmd_fcpim_cfg_profile(bfad, iocmd, cmd); 268542a8e6e298f39518445785c53a16357267db37efKrishna Gudipati break; 268642a8e6e298f39518445785c53a16357267db37efKrishna Gudipati case IOCMD_ITNIM_GET_IOPROFILE: 268742a8e6e298f39518445785c53a16357267db37efKrishna Gudipati rc = bfad_iocmd_itnim_get_ioprofile(bfad, iocmd); 268842a8e6e298f39518445785c53a16357267db37efKrishna Gudipati break; 268937ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati case IOCMD_FCPORT_GET_STATS: 269037ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati rc = bfad_iocmd_fcport_get_stats(bfad, iocmd); 269137ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati break; 269237ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati case IOCMD_FCPORT_RESET_STATS: 269337ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati rc = bfad_iocmd_fcport_reset_stats(bfad, iocmd); 269437ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati break; 2695a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati case IOCMD_BOOT_CFG: 2696a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati rc = bfad_iocmd_boot_cfg(bfad, iocmd); 2697a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati break; 2698a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati case IOCMD_BOOT_QUERY: 2699a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati rc = bfad_iocmd_boot_query(bfad, iocmd); 2700a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati break; 2701a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati case IOCMD_PREBOOT_QUERY: 2702a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati rc = bfad_iocmd_preboot_query(bfad, iocmd); 2703a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati break; 2704a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati case IOCMD_ETHBOOT_CFG: 2705a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati rc = bfad_iocmd_ethboot_cfg(bfad, iocmd); 2706a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati break; 2707a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati case IOCMD_ETHBOOT_QUERY: 2708a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati rc = bfad_iocmd_ethboot_query(bfad, iocmd); 2709a46bd300e191d5a1a7367a799a9f5268c5e6aafdKrishna Gudipati break; 271045191236b179877d259a40e13c5144628d4df37fKrishna Gudipati case IOCMD_TRUNK_ENABLE: 271145191236b179877d259a40e13c5144628d4df37fKrishna Gudipati case IOCMD_TRUNK_DISABLE: 271245191236b179877d259a40e13c5144628d4df37fKrishna Gudipati rc = bfad_iocmd_cfg_trunk(bfad, iocmd, cmd); 271345191236b179877d259a40e13c5144628d4df37fKrishna Gudipati break; 271445191236b179877d259a40e13c5144628d4df37fKrishna Gudipati case IOCMD_TRUNK_GET_ATTR: 271545191236b179877d259a40e13c5144628d4df37fKrishna Gudipati rc = bfad_iocmd_trunk_get_attr(bfad, iocmd); 271645191236b179877d259a40e13c5144628d4df37fKrishna Gudipati break; 27173ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati case IOCMD_QOS_ENABLE: 27183ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati case IOCMD_QOS_DISABLE: 27193ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati rc = bfad_iocmd_qos(bfad, iocmd, cmd); 27203ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati break; 27213ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati case IOCMD_QOS_GET_ATTR: 27223ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati rc = bfad_iocmd_qos_get_attr(bfad, iocmd); 27233ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati break; 27243ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati case IOCMD_QOS_GET_VC_ATTR: 27253ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati rc = bfad_iocmd_qos_get_vc_attr(bfad, iocmd); 27263ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati break; 27273ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati case IOCMD_QOS_GET_STATS: 27283ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati rc = bfad_iocmd_qos_get_stats(bfad, iocmd); 27293ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati break; 27303ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati case IOCMD_QOS_RESET_STATS: 27313ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati rc = bfad_iocmd_qos_reset_stats(bfad, iocmd); 27323ec4f2c8bff2568e5a51ba083db2c073321ca2c1Krishna Gudipati break; 2733c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati case IOCMD_VF_GET_STATS: 2734c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati rc = bfad_iocmd_vf_get_stats(bfad, iocmd); 2735c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati break; 2736c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati case IOCMD_VF_RESET_STATS: 2737c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati rc = bfad_iocmd_vf_clr_stats(bfad, iocmd); 2738c0350bf57445b9e2a4369668127ecc4431472d26Krishna Gudipati break; 27394c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati case IOCMD_FCPIM_LUNMASK_ENABLE: 27404c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati case IOCMD_FCPIM_LUNMASK_DISABLE: 27414c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati case IOCMD_FCPIM_LUNMASK_CLEAR: 27424c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati rc = bfad_iocmd_lunmask(bfad, iocmd, cmd); 27434c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati break; 27444c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati case IOCMD_FCPIM_LUNMASK_QUERY: 27454c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati rc = bfad_iocmd_fcpim_lunmask_query(bfad, iocmd); 27464c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati break; 27474c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati case IOCMD_FCPIM_LUNMASK_ADD: 27484c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati case IOCMD_FCPIM_LUNMASK_DELETE: 27494c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati rc = bfad_iocmd_fcpim_cfg_lunmask(bfad, iocmd, cmd); 27504c5d22bf7bdea68d3d449f6a8e1835da84909346Krishna Gudipati break; 2751b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati default: 27529afbcfab74d26051702862b57c0115f71477a3ccKrishna Gudipati rc = -EINVAL; 2753b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati break; 2754b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 27559afbcfab74d26051702862b57c0115f71477a3ccKrishna Gudipati return rc; 2756b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 2757b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2758b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatistatic int 2759b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_im_bsg_vendor_request(struct fc_bsg_job *job) 2760b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 2761b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati uint32_t vendor_cmd = job->request->rqst_data.h_vendor.vendor_cmd[0]; 2762b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfad_im_port_s *im_port = 2763b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati (struct bfad_im_port_s *) job->shost->hostdata[0]; 2764b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfad_s *bfad = im_port->bfad; 2765bd5a026019bc1f799065b0a39230d1f81bb4ff76Krishna Gudipati struct request_queue *request_q = job->req->q; 2766b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati void *payload_kbuf; 2767b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati int rc = -EINVAL; 2768b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2769bd5a026019bc1f799065b0a39230d1f81bb4ff76Krishna Gudipati /* 2770bd5a026019bc1f799065b0a39230d1f81bb4ff76Krishna Gudipati * Set the BSG device request_queue size to 256 to support 2771bd5a026019bc1f799065b0a39230d1f81bb4ff76Krishna Gudipati * payloads larger than 512*1024K bytes. 2772bd5a026019bc1f799065b0a39230d1f81bb4ff76Krishna Gudipati */ 2773bd5a026019bc1f799065b0a39230d1f81bb4ff76Krishna Gudipati blk_queue_max_segments(request_q, 256); 2774bd5a026019bc1f799065b0a39230d1f81bb4ff76Krishna Gudipati 2775b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* Allocate a temp buffer to hold the passed in user space command */ 2776b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati payload_kbuf = kzalloc(job->request_payload.payload_len, GFP_KERNEL); 2777b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (!payload_kbuf) { 2778b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rc = -ENOMEM; 2779b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out; 2780b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 2781b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2782b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* Copy the sg_list passed in to a linear buffer: holds the cmnd data */ 2783b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sg_copy_to_buffer(job->request_payload.sg_list, 2784b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->request_payload.sg_cnt, payload_kbuf, 2785b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->request_payload.payload_len); 2786b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2787b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* Invoke IOCMD handler - to handle all the vendor command requests */ 2788b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rc = bfad_iocmd_handler(bfad, vendor_cmd, payload_kbuf, 2789b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->request_payload.payload_len); 2790b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (rc != BFA_STATUS_OK) 2791b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto error; 2792b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2793b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* Copy the response data to the job->reply_payload sg_list */ 2794b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sg_copy_from_buffer(job->reply_payload.sg_list, 2795b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply_payload.sg_cnt, 2796b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati payload_kbuf, 2797b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply_payload.payload_len); 2798b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2799b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* free the command buffer */ 2800b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati kfree(payload_kbuf); 2801b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2802b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* Fill the BSG job reply data */ 2803b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply_len = job->reply_payload.payload_len; 2804b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply->reply_payload_rcv_len = job->reply_payload.payload_len; 2805b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply->result = rc; 2806b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2807b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->job_done(job); 2808b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return rc; 2809b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatierror: 2810b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* free the command buffer */ 2811b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati kfree(payload_kbuf); 2812b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatiout: 2813b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply->result = rc; 2814b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply_len = sizeof(uint32_t); 2815b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply->reply_payload_rcv_len = 0; 2816b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return rc; 2817b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 2818b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2819b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati/* FC passthru call backs */ 2820b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatiu64 2821b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_fcxp_get_req_sgaddr_cb(void *bfad_fcxp, int sgeid) 2822b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 2823b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfad_fcxp *drv_fcxp = bfad_fcxp; 2824b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_sge_s *sge; 2825b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati u64 addr; 2826b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2827b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sge = drv_fcxp->req_sge + sgeid; 2828b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati addr = (u64)(size_t) sge->sg_addr; 2829b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return addr; 2830b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 2831b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2832b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatiu32 2833b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_fcxp_get_req_sglen_cb(void *bfad_fcxp, int sgeid) 2834b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 2835b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfad_fcxp *drv_fcxp = bfad_fcxp; 2836b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_sge_s *sge; 2837b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2838b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sge = drv_fcxp->req_sge + sgeid; 2839b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return sge->sg_len; 2840b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 2841b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2842b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatiu64 2843b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_fcxp_get_rsp_sgaddr_cb(void *bfad_fcxp, int sgeid) 2844b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 2845b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfad_fcxp *drv_fcxp = bfad_fcxp; 2846b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_sge_s *sge; 2847b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati u64 addr; 2848b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2849b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sge = drv_fcxp->rsp_sge + sgeid; 2850b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati addr = (u64)(size_t) sge->sg_addr; 2851b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return addr; 2852b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 2853b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2854b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatiu32 2855b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_fcxp_get_rsp_sglen_cb(void *bfad_fcxp, int sgeid) 2856b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 2857b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfad_fcxp *drv_fcxp = bfad_fcxp; 2858b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_sge_s *sge; 2859b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2860b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sge = drv_fcxp->rsp_sge + sgeid; 2861b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return sge->sg_len; 2862b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 2863b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2864b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipativoid 2865b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_send_fcpt_cb(void *bfad_fcxp, struct bfa_fcxp_s *fcxp, void *cbarg, 2866b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfa_status_t req_status, u32 rsp_len, u32 resid_len, 2867b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct fchs_s *rsp_fchs) 2868b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 2869b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfad_fcxp *drv_fcxp = bfad_fcxp; 2870b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2871b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp->req_status = req_status; 2872b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp->rsp_len = rsp_len; 2873b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2874b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* bfa_fcxp will be automatically freed by BFA */ 2875b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp->bfa_fcxp = NULL; 2876b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati complete(&drv_fcxp->comp); 2877b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 2878b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2879b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatistruct bfad_buf_info * 2880b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_fcxp_map_sg(struct bfad_s *bfad, void *payload_kbuf, 2881b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati uint32_t payload_len, uint32_t *num_sgles) 2882b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 2883b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfad_buf_info *buf_base, *buf_info; 2884b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_sge_s *sg_table; 2885b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati int sge_num = 1; 2886b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2887b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati buf_base = kzalloc((sizeof(struct bfad_buf_info) + 2888b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sizeof(struct bfa_sge_s)) * sge_num, GFP_KERNEL); 2889b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (!buf_base) 2890b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return NULL; 2891b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2892b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sg_table = (struct bfa_sge_s *) (((uint8_t *)buf_base) + 2893b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati (sizeof(struct bfad_buf_info) * sge_num)); 2894b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2895b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* Allocate dma coherent memory */ 2896b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati buf_info = buf_base; 2897b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati buf_info->size = payload_len; 2898b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati buf_info->virt = dma_alloc_coherent(&bfad->pcidev->dev, buf_info->size, 2899b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati &buf_info->phys, GFP_KERNEL); 2900b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (!buf_info->virt) 2901b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out_free_mem; 2902b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2903b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* copy the linear bsg buffer to buf_info */ 2904b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati memset(buf_info->virt, 0, buf_info->size); 2905b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati memcpy(buf_info->virt, payload_kbuf, buf_info->size); 2906b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2907b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* 2908b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * Setup SG table 2909b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati */ 2910b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sg_table->sg_len = buf_info->size; 2911b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sg_table->sg_addr = (void *)(size_t) buf_info->phys; 2912b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2913b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati *num_sgles = sge_num; 2914b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2915b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return buf_base; 2916b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2917b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatiout_free_mem: 2918b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati kfree(buf_base); 2919b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return NULL; 2920b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 2921b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2922b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipativoid 2923b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_fcxp_free_mem(struct bfad_s *bfad, struct bfad_buf_info *buf_base, 2924b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati uint32_t num_sgles) 2925b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 2926b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati int i; 2927b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfad_buf_info *buf_info = buf_base; 2928b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2929b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (buf_base) { 2930b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati for (i = 0; i < num_sgles; buf_info++, i++) { 2931b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (buf_info->virt != NULL) 2932b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati dma_free_coherent(&bfad->pcidev->dev, 2933b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati buf_info->size, buf_info->virt, 2934b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati buf_info->phys); 2935b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 2936b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati kfree(buf_base); 2937b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 2938b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 2939b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2940b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatiint 2941b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_fcxp_bsg_send(struct fc_bsg_job *job, struct bfad_fcxp *drv_fcxp, 2942b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfa_bsg_fcpt_t *bsg_fcpt) 2943b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 2944b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_fcxp_s *hal_fcxp; 2945b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfad_s *bfad = drv_fcxp->port->bfad; 2946b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati unsigned long flags; 2947b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati uint8_t lp_tag; 2948b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2949b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 2950b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2951b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* Allocate bfa_fcxp structure */ 2952b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati hal_fcxp = bfa_fcxp_alloc(drv_fcxp, &bfad->bfa, 2953b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp->num_req_sgles, 2954b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp->num_rsp_sgles, 2955b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfad_fcxp_get_req_sgaddr_cb, 2956b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfad_fcxp_get_req_sglen_cb, 2957b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfad_fcxp_get_rsp_sgaddr_cb, 2958b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfad_fcxp_get_rsp_sglen_cb); 2959b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (!hal_fcxp) { 2960b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfa_trc(bfad, 0); 2961b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 2962b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return BFA_STATUS_ENOMEM; 2963b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 2964b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2965b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp->bfa_fcxp = hal_fcxp; 2966b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2967b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati lp_tag = bfa_lps_get_tag_from_pid(&bfad->bfa, bsg_fcpt->fchs.s_id); 2968b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2969b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfa_fcxp_send(hal_fcxp, drv_fcxp->bfa_rport, bsg_fcpt->vf_id, lp_tag, 2970b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bsg_fcpt->cts, bsg_fcpt->cos, 2971b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->request_payload.payload_len, 2972b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati &bsg_fcpt->fchs, bfad_send_fcpt_cb, bfad, 2973b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply_payload.payload_len, bsg_fcpt->tsecs); 2974b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2975b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 2976b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2977b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return BFA_STATUS_OK; 2978b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 2979b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2980b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatiint 2981b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_im_bsg_els_ct_request(struct fc_bsg_job *job) 2982b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 2983b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_bsg_data *bsg_data; 2984b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfad_im_port_s *im_port = 2985b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati (struct bfad_im_port_s *) job->shost->hostdata[0]; 2986b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfad_s *bfad = im_port->bfad; 2987b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfa_bsg_fcpt_t *bsg_fcpt; 2988b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfad_fcxp *drv_fcxp; 2989b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_fcs_lport_s *fcs_port; 2990b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfa_fcs_rport_s *fcs_rport; 2991b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati uint32_t command_type = job->request->msgcode; 2992b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati unsigned long flags; 2993b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati struct bfad_buf_info *rsp_buf_info; 2994b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati void *req_kbuf = NULL, *rsp_kbuf = NULL; 2995b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati int rc = -EINVAL; 2996b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 2997b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply_len = sizeof(uint32_t); /* Atleast uint32_t reply_len */ 2998b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply->reply_payload_rcv_len = 0; 2999b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3000b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* Get the payload passed in from userspace */ 3001b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bsg_data = (struct bfa_bsg_data *) (((char *)job->request) + 3002b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sizeof(struct fc_bsg_request)); 3003b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (bsg_data == NULL) 3004b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out; 3005b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3006b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* 3007b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * Allocate buffer for bsg_fcpt and do a copy_from_user op for payload 3008b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * buffer of size bsg_data->payload_len 3009b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati */ 301064b8aa75bc101eb73e2c76a66fb5432b4c83ffb2Jesper Juhl bsg_fcpt = kzalloc(bsg_data->payload_len, GFP_KERNEL); 3011b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (!bsg_fcpt) 3012b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out; 3013b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3014b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (copy_from_user((uint8_t *)bsg_fcpt, bsg_data->payload, 3015b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bsg_data->payload_len)) { 3016b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati kfree(bsg_fcpt); 3017b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out; 3018b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 3019b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3020b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp = kzalloc(sizeof(struct bfad_fcxp), GFP_KERNEL); 3021b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (drv_fcxp == NULL) { 302264b8aa75bc101eb73e2c76a66fb5432b4c83ffb2Jesper Juhl kfree(bsg_fcpt); 3023b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rc = -ENOMEM; 3024b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out; 3025b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 3026b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3027b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_lock_irqsave(&bfad->bfad_lock, flags); 3028b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati fcs_port = bfa_fcs_lookup_port(&bfad->bfa_fcs, bsg_fcpt->vf_id, 3029b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bsg_fcpt->lpwwn); 3030b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (fcs_port == NULL) { 3031b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bsg_fcpt->status = BFA_STATUS_UNKNOWN_LWWN; 3032b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 3033b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out_free_mem; 3034b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 3035b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3036b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* Check if the port is online before sending FC Passthru cmd */ 3037b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (!bfa_fcs_lport_is_online(fcs_port)) { 3038b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bsg_fcpt->status = BFA_STATUS_PORT_OFFLINE; 3039b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 3040b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out_free_mem; 3041b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 3042b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3043b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp->port = fcs_port->bfad_port; 3044b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3045b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (drv_fcxp->port->bfad == 0) 3046b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp->port->bfad = bfad; 3047b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3048b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* Fetch the bfa_rport - if nexus needed */ 3049b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (command_type == FC_BSG_HST_ELS_NOLOGIN || 3050b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati command_type == FC_BSG_HST_CT) { 3051b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* BSG HST commands: no nexus needed */ 3052b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp->bfa_rport = NULL; 3053b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3054b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } else if (command_type == FC_BSG_RPT_ELS || 3055b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati command_type == FC_BSG_RPT_CT) { 3056b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* BSG RPT commands: nexus needed */ 3057b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati fcs_rport = bfa_fcs_lport_get_rport_by_pwwn(fcs_port, 3058b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bsg_fcpt->dpwwn); 3059b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (fcs_rport == NULL) { 3060b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bsg_fcpt->status = BFA_STATUS_UNKNOWN_RWWN; 3061b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 3062b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out_free_mem; 3063b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 3064b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3065b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp->bfa_rport = fcs_rport->bfa_rport; 3066b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3067b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } else { /* Unknown BSG msgcode; return -EINVAL */ 3068b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 3069b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out_free_mem; 3070b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 3071b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3072b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati spin_unlock_irqrestore(&bfad->bfad_lock, flags); 3073b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3074b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* allocate memory for req / rsp buffers */ 3075b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati req_kbuf = kzalloc(job->request_payload.payload_len, GFP_KERNEL); 3076b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (!req_kbuf) { 3077b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati printk(KERN_INFO "bfa %s: fcpt request buffer alloc failed\n", 3078b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfad->pci_name); 3079b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rc = -ENOMEM; 3080b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out_free_mem; 3081b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 3082b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3083b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rsp_kbuf = kzalloc(job->reply_payload.payload_len, GFP_KERNEL); 3084b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (!rsp_kbuf) { 3085b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati printk(KERN_INFO "bfa %s: fcpt response buffer alloc failed\n", 3086b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfad->pci_name); 3087b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rc = -ENOMEM; 3088b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out_free_mem; 3089b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 3090b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3091b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* map req sg - copy the sg_list passed in to the linear buffer */ 3092b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sg_copy_to_buffer(job->request_payload.sg_list, 3093b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->request_payload.sg_cnt, req_kbuf, 3094b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->request_payload.payload_len); 3095b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3096b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp->reqbuf_info = bfad_fcxp_map_sg(bfad, req_kbuf, 3097b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->request_payload.payload_len, 3098b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati &drv_fcxp->num_req_sgles); 3099b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (!drv_fcxp->reqbuf_info) { 3100b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati printk(KERN_INFO "bfa %s: fcpt request fcxp_map_sg failed\n", 3101b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfad->pci_name); 3102b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rc = -ENOMEM; 3103b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out_free_mem; 3104b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 3105b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3106b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp->req_sge = (struct bfa_sge_s *) 3107b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati (((uint8_t *)drv_fcxp->reqbuf_info) + 3108b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati (sizeof(struct bfad_buf_info) * 3109b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp->num_req_sgles)); 3110b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3111b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* map rsp sg */ 3112b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp->rspbuf_info = bfad_fcxp_map_sg(bfad, rsp_kbuf, 3113b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply_payload.payload_len, 3114b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati &drv_fcxp->num_rsp_sgles); 3115b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (!drv_fcxp->rspbuf_info) { 3116b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati printk(KERN_INFO "bfa %s: fcpt response fcxp_map_sg failed\n", 3117b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfad->pci_name); 3118b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rc = -ENOMEM; 3119b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out_free_mem; 3120b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 3121b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3122b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rsp_buf_info = (struct bfad_buf_info *)drv_fcxp->rspbuf_info; 3123b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp->rsp_sge = (struct bfa_sge_s *) 3124b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati (((uint8_t *)drv_fcxp->rspbuf_info) + 3125b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati (sizeof(struct bfad_buf_info) * 3126b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp->num_rsp_sgles)); 3127b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3128b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* fcxp send */ 3129b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati init_completion(&drv_fcxp->comp); 3130b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rc = bfad_fcxp_bsg_send(job, drv_fcxp, bsg_fcpt); 3131b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (rc == BFA_STATUS_OK) { 3132b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati wait_for_completion(&drv_fcxp->comp); 3133b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bsg_fcpt->status = drv_fcxp->req_status; 3134b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } else { 3135b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bsg_fcpt->status = rc; 3136b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati goto out_free_mem; 3137b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 3138b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3139b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* fill the job->reply data */ 3140b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (drv_fcxp->req_status == BFA_STATUS_OK) { 3141b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply_len = drv_fcxp->rsp_len; 3142b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply->reply_payload_rcv_len = drv_fcxp->rsp_len; 3143b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply->reply_data.ctels_reply.status = FC_CTELS_STATUS_OK; 3144b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } else { 3145b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply->reply_payload_rcv_len = 3146b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sizeof(struct fc_bsg_ctels_reply); 3147b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply_len = sizeof(uint32_t); 3148b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply->reply_data.ctels_reply.status = 3149b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati FC_CTELS_STATUS_REJECT; 3150b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 3151b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3152b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* Copy the response data to the reply_payload sg list */ 3153b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati sg_copy_from_buffer(job->reply_payload.sg_list, 3154b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply_payload.sg_cnt, 3155b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati (uint8_t *)rsp_buf_info->virt, 3156b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply_payload.payload_len); 3157b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3158b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatiout_free_mem: 3159b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfad_fcxp_free_mem(bfad, drv_fcxp->rspbuf_info, 3160b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp->num_rsp_sgles); 3161b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bfad_fcxp_free_mem(bfad, drv_fcxp->reqbuf_info, 3162b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati drv_fcxp->num_req_sgles); 3163b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati kfree(req_kbuf); 3164b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati kfree(rsp_kbuf); 3165b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3166b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* Need a copy to user op */ 3167b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (copy_to_user(bsg_data->payload, (void *) bsg_fcpt, 3168b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati bsg_data->payload_len)) 3169b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rc = -EIO; 3170b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3171b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati kfree(bsg_fcpt); 3172b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati kfree(drv_fcxp); 3173b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatiout: 3174b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply->result = rc; 3175b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3176b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati if (rc == BFA_STATUS_OK) 3177b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->job_done(job); 3178b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3179b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return rc; 3180b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 3181b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3182b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatiint 3183b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_im_bsg_request(struct fc_bsg_job *job) 3184b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 3185b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati uint32_t rc = BFA_STATUS_OK; 3186b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3187b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati switch (job->request->msgcode) { 3188b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati case FC_BSG_HST_VENDOR: 3189b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* Process BSG HST Vendor requests */ 3190b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rc = bfad_im_bsg_vendor_request(job); 3191b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati break; 3192b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati case FC_BSG_HST_ELS_NOLOGIN: 3193b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati case FC_BSG_RPT_ELS: 3194b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati case FC_BSG_HST_CT: 3195b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati case FC_BSG_RPT_CT: 3196b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* Process BSG ELS/CT commands */ 3197b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati rc = bfad_im_bsg_els_ct_request(job); 3198b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati break; 3199b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati default: 3200b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply->result = rc = -EINVAL; 3201b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati job->reply->reply_payload_rcv_len = 0; 3202b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati break; 3203b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati } 3204b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3205b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return rc; 3206b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 3207b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati 3208b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatiint 3209b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipatibfad_im_bsg_timeout(struct fc_bsg_job *job) 3210b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati{ 3211b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati /* Don't complete the BSG job request - return -EAGAIN 3212b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * to reset bsg job timeout : for ELS/CT pass thru we 3213b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati * already have timer to track the request. 3214b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati */ 3215b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati return -EAGAIN; 3216b85daafe46eeb0a9ad32c4b2c3a4e09ffcae9599Krishna Gudipati} 3217