Print this page
NEX-5717 import QLogic 16G FC drivers
Reviewed by: Steve Peng <steve.peng@nexenta.com>
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
*** 17,41 ****
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
! /* Copyright 2010 QLogic Corporation */
/*
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
*/
! #pragma ident "Copyright 2010 QLogic Corporation; ql_hba_fru.c"
/*
* ISP2xxx Solaris Fibre Channel Adapter (FCA) driver source file.
*
* ***********************************************************************
* * **
* * NOTICE **
! * * COPYRIGHT (C) 1996-2010 QLOGIC CORPORATION **
* * ALL RIGHTS RESERVED **
* * **
* ***********************************************************************
*
*/
--- 17,41 ----
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
! /* Copyright 2015 QLogic Corporation */
/*
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
*/
! #pragma ident "Copyright 2015 QLogic Corporation; ql_hba_fru.c"
/*
* ISP2xxx Solaris Fibre Channel Adapter (FCA) driver source file.
*
* ***********************************************************************
* * **
* * NOTICE **
! * * COPYRIGHT (C) 1996-2015 QLOGIC CORPORATION **
* * ALL RIGHTS RESERVED **
* * **
* ***********************************************************************
*
*/
*** 237,247 ****
uint16_t model = ha->subsys_id;
uint16_t ssdevid = ha->subven_id;
size_t vlen;
int32_t i;
! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance);
attrs = &port_info->pi_attrs;
/* Constants */
(void) snprintf(attrs->manufacturer, FCHBA_MANUFACTURER_LEN,
--- 237,247 ----
uint16_t model = ha->subsys_id;
uint16_t ssdevid = ha->subven_id;
size_t vlen;
int32_t i;
! QL_PRINT_3(ha, "started\n");
attrs = &port_info->pi_attrs;
/* Constants */
(void) snprintf(attrs->manufacturer, FCHBA_MANUFACTURER_LEN,
*** 260,271 ****
/* Dynamic data */
(void) snprintf(attrs->firmware_version, FCHBA_FIRMWARE_VERSION_LEN,
"%02d.%02d.%02d", ha->fw_major_version, ha->fw_minor_version,
ha->fw_subminor_version);
- CACHE_LOCK(ha);
-
/* Report FCode / BIOS / EFI version(s). */
if (ha->fcache != NULL) {
uint32_t types = FTYPE_BIOS|FTYPE_FCODE|FTYPE_EFI;
ql_fcache_t *fptr = ha->fcache;
int8_t *orv = &*attrs->option_rom_version;
--- 260,269 ----
*** 298,315 ****
types &= ~(fptr->type);
}
}
}
- CACHE_UNLOCK(ha);
-
if (strlen(attrs->option_rom_version) == 0) {
int rval = -1;
uint32_t i = 0;
caddr_t fcode_ver_buf = NULL;
! if (CFG_IST(ha, CFG_CTRL_2200)) {
/*LINTED [Solaris DDI_DEV_T_ANY Lint warning]*/
rval = ddi_getlongprop(DDI_DEV_T_ANY, ha->dip,
DDI_PROP_DONTPASS | DDI_PROP_CANSLEEP, "version",
(caddr_t)&fcode_ver_buf, (int32_t *)&i);
}
--- 296,311 ----
types &= ~(fptr->type);
}
}
}
if (strlen(attrs->option_rom_version) == 0) {
int rval = -1;
uint32_t i = 0;
caddr_t fcode_ver_buf = NULL;
! if (CFG_IST(ha, CFG_CTRL_22XX)) {
/*LINTED [Solaris DDI_DEV_T_ANY Lint warning]*/
rval = ddi_getlongprop(DDI_DEV_T_ANY, ha->dip,
DDI_PROP_DONTPASS | DDI_PROP_CANSLEEP, "version",
(caddr_t)&fcode_ver_buf, (int32_t *)&i);
}
*** 324,343 ****
}
}
attrs->vendor_specific_id = ha->adapter_features;
! attrs->max_frame_size = CFG_IST(ha, CFG_CTRL_24258081) ?
! (ha->init_ctrl_blk.cb24.max_frame_length[1] << 8 |
! ha->init_ctrl_blk.cb24.max_frame_length[0]) :
! (ha->init_ctrl_blk.cb.max_frame_length[1] << 8 |
! ha->init_ctrl_blk.cb.max_frame_length[0]);
attrs->supported_cos = 0x10000000; /* Class 3 only */
switch (chip & 0xFF00) {
case 0x2200:
! attrs->supported_speed = FC_HBA_PORTSPEED_1GBIT;
break;
case 0x2300:
attrs->supported_speed = FC_HBA_PORTSPEED_2GBIT |
FC_HBA_PORTSPEED_1GBIT;
break;
--- 320,340 ----
}
}
attrs->vendor_specific_id = ha->adapter_features;
! attrs->max_frame_size = ha->loginparams.common_service.rx_bufsize;
attrs->supported_cos = 0x10000000; /* Class 3 only */
switch (chip & 0xFF00) {
+ case 0x2000:
+ attrs->supported_speed = chip == 0x2071 ?
+ FC_HBA_PORTSPEED_32GBIT : FC_HBA_PORTSPEED_16GBIT;
+ break;
case 0x2200:
! attrs->supported_speed = chip == 0x2261 ?
! FC_HBA_PORTSPEED_16GBIT : FC_HBA_PORTSPEED_1GBIT;
break;
case 0x2300:
attrs->supported_speed = FC_HBA_PORTSPEED_2GBIT |
FC_HBA_PORTSPEED_1GBIT;
break;
*** 486,496 ****
vlen = (strlen(QL_NAME) + 9 > FCHBA_SYMB_NAME_LEN ?
FCHBA_SYMB_NAME_LEN : strlen(QL_NAME) + 9);
(void) snprintf((int8_t *)attrs->sym_port_name, vlen,
"%s(%d,%d)", QL_NAME, ha->instance, ha->vp_index);
! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance);
}
/*
* ql_setup_fruinfo
* Generates common id's for instances on the same
--- 483,493 ----
vlen = (strlen(QL_NAME) + 9 > FCHBA_SYMB_NAME_LEN ?
FCHBA_SYMB_NAME_LEN : strlen(QL_NAME) + 9);
(void) snprintf((int8_t *)attrs->sym_port_name, vlen,
"%s(%d,%d)", QL_NAME, ha->instance, ha->vp_index);
! QL_PRINT_3(ha, "done\n");
}
/*
* ql_setup_fruinfo
* Generates common id's for instances on the same
*** 508,518 ****
ql_setup_fruinfo(ql_adapter_state_t *ha)
{
uint32_t mybasedev_len;
ql_adapter_state_t *base_ha = NULL;
! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance);
/*
* To generate common id for instances residing on the
* the same HBA, the devpath for each instance is parsed
* and those instances which have matching base devpaths are
--- 505,515 ----
ql_setup_fruinfo(ql_adapter_state_t *ha)
{
uint32_t mybasedev_len;
ql_adapter_state_t *base_ha = NULL;
! QL_PRINT_3(ha, "started\n");
/*
* To generate common id for instances residing on the
* the same HBA, the devpath for each instance is parsed
* and those instances which have matching base devpaths are
*** 523,534 ****
/*
* Get this ha's basedev path and its port index
*/
if (ql_get_basedev_len(ha, &mybasedev_len, &ha->fru_port_index) == 0) {
- GLOBAL_STATE_LOCK();
-
/*
* Search for this basedev against all of the
* ha in the ql_hba global list. If found one
* then we are part of other adapter in the
* ql_hba list and hence use that ha's hba_index.
--- 520,529 ----
*** 535,565 ****
* If not create a new one from the global hba index.
*/
base_ha = ql_search_basedev(ha, mybasedev_len);
if (base_ha != NULL && base_ha->fru_hba_index != 0) {
ha->fru_hba_index = base_ha->fru_hba_index;
} else {
ha->fru_hba_index = ql_gfru_hba_index++;
}
-
- if (CFG_IST(ha, CFG_CTRL_8081)) {
- /*
- * The FC functions on 81xx hbas are functions 2 and 3
- * while the Nic functions occupy 0 and 1. Adjust
- * fru port index to be like previous FCAs.
- */
- ha->fru_port_index = ha->flags & FUNCTION_1 ? 1 : 0;
- }
-
- GLOBAL_STATE_UNLOCK();
-
} else {
ha->fru_hba_index = 0;
ha->fru_port_index = 0;
}
! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance);
}
/*
* ql_get_basedev_len
*
--- 530,550 ----
* If not create a new one from the global hba index.
*/
base_ha = ql_search_basedev(ha, mybasedev_len);
if (base_ha != NULL && base_ha->fru_hba_index != 0) {
ha->fru_hba_index = base_ha->fru_hba_index;
+ ha->fru_port_index = base_ha->fru_port_index + 1;
} else {
ha->fru_hba_index = ql_gfru_hba_index++;
+ ha->fru_port_index = 0;
}
} else {
ha->fru_hba_index = 0;
ha->fru_port_index = 0;
}
! QL_PRINT_3(ha, "done\n");
}
/*
* ql_get_basedev_len
*
*** 585,595 ****
{
int32_t dev_off;
int32_t port_off;
int8_t *devstr;
! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance);
if (ha->devpath == NULL) {
return ((uint32_t)-1);
}
--- 570,580 ----
{
int32_t dev_off;
int32_t port_off;
int8_t *devstr;
! QL_PRINT_3(ha, "started\n");
if (ha->devpath == NULL) {
return ((uint32_t)-1);
}
*** 626,636 ****
}
*basedev_len = (uint32_t)(port_off - 1);
}
! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance);
return (0);
}
/*
--- 611,621 ----
}
*basedev_len = (uint32_t)(port_off - 1);
}
! QL_PRINT_3(ha, "done\n");
return (0);
}
/*
*** 655,665 ****
{
ql_link_t *link;
ql_adapter_state_t *ha;
uint32_t basedev_len, port_index;
! QL_PRINT_3(CE_CONT, "(%d): started\n", myha->instance);
for (link = ql_hba.first; link != NULL; link = link->next) {
ha = link->base_address;
--- 640,650 ----
{
ql_link_t *link;
ql_adapter_state_t *ha;
uint32_t basedev_len, port_index;
! QL_PRINT_3(myha, "started\n", myha->instance);
for (link = ql_hba.first; link != NULL; link = link->next) {
ha = link->base_address;
*** 691,705 ****
*/
if ((basedev_len == mybasedev_len) && (strncmp(myha->devpath,
ha->devpath, basedev_len) == 0)) {
/* We found the ha with same basedev */
! QL_PRINT_3(CE_CONT, "(%d): found, done\n",
myha->instance);
return (ha);
}
}
! QL_PRINT_3(CE_CONT, "(%d): not found, done\n", myha->instance);
return (NULL);
}
--- 676,690 ----
*/
if ((basedev_len == mybasedev_len) && (strncmp(myha->devpath,
ha->devpath, basedev_len) == 0)) {
/* We found the ha with same basedev */
! QL_PRINT_3(myha, "found, done\n",
myha->instance);
return (ha);
}
}
! QL_PRINT_3(myha, "not found, done\n", myha->instance);
return (NULL);
}