be2net: fix wrong usage of adapter->generation
adapter->generation was being incorrectly set as BE_GEN3 for Skyhawk-R. Replace generation usage with XXX_chip() macros to identify the chip. Signed-off-by: Sathya Perla <sathya.perla@emulex.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
5727f841dc
Коммит
ca34fe38f0
|
@ -410,7 +410,6 @@ struct be_adapter {
|
||||||
u32 rx_fc; /* Rx flow control */
|
u32 rx_fc; /* Rx flow control */
|
||||||
u32 tx_fc; /* Tx flow control */
|
u32 tx_fc; /* Tx flow control */
|
||||||
bool stats_cmd_sent;
|
bool stats_cmd_sent;
|
||||||
u8 generation; /* BladeEngine ASIC generation */
|
|
||||||
u32 if_type;
|
u32 if_type;
|
||||||
struct {
|
struct {
|
||||||
u8 __iomem *base; /* Door Bell */
|
u8 __iomem *base; /* Door Bell */
|
||||||
|
@ -458,19 +457,22 @@ struct be_adapter {
|
||||||
for (i = 0, vf_cfg = &adapter->vf_cfg[i]; i < adapter->num_vfs; \
|
for (i = 0, vf_cfg = &adapter->vf_cfg[i]; i < adapter->num_vfs; \
|
||||||
i++, vf_cfg++)
|
i++, vf_cfg++)
|
||||||
|
|
||||||
/* BladeEngine Generation numbers */
|
|
||||||
#define BE_GEN2 2
|
|
||||||
#define BE_GEN3 3
|
|
||||||
#define SH_HW 4
|
|
||||||
|
|
||||||
#define ON 1
|
#define ON 1
|
||||||
#define OFF 0
|
#define OFF 0
|
||||||
#define lancer_chip(adapter) ((adapter->pdev->device == OC_DEVICE_ID3) || \
|
|
||||||
(adapter->pdev->device == OC_DEVICE_ID4))
|
#define lancer_chip(adapter) (adapter->pdev->device == OC_DEVICE_ID3 || \
|
||||||
|
adapter->pdev->device == OC_DEVICE_ID4)
|
||||||
|
|
||||||
#define skyhawk_chip(adapter) (adapter->pdev->device == OC_DEVICE_ID5 || \
|
#define skyhawk_chip(adapter) (adapter->pdev->device == OC_DEVICE_ID5 || \
|
||||||
adapter->pdev->device == OC_DEVICE_ID6)
|
adapter->pdev->device == OC_DEVICE_ID6)
|
||||||
|
|
||||||
|
#define BE3_chip(adapter) (adapter->pdev->device == BE_DEVICE_ID2 || \
|
||||||
|
adapter->pdev->device == OC_DEVICE_ID2)
|
||||||
|
|
||||||
|
#define BE2_chip(adapter) (adapter->pdev->device == BE_DEVICE_ID1 || \
|
||||||
|
adapter->pdev->device == OC_DEVICE_ID1)
|
||||||
|
|
||||||
|
#define BEx_chip(adapter) (BE3_chip(adapter) || BE2_chip(adapter))
|
||||||
|
|
||||||
#define be_roce_supported(adapter) ((adapter->if_type == SLI_INTF_TYPE_3 || \
|
#define be_roce_supported(adapter) ((adapter->if_type == SLI_INTF_TYPE_3 || \
|
||||||
adapter->sli_family == SKYHAWK_SLI_FAMILY) && \
|
adapter->sli_family == SKYHAWK_SLI_FAMILY) && \
|
||||||
|
|
|
@ -1362,7 +1362,8 @@ int be_cmd_get_stats(struct be_adapter *adapter, struct be_dma_mem *nonemb_cmd)
|
||||||
be_wrb_cmd_hdr_prepare(hdr, CMD_SUBSYSTEM_ETH,
|
be_wrb_cmd_hdr_prepare(hdr, CMD_SUBSYSTEM_ETH,
|
||||||
OPCODE_ETH_GET_STATISTICS, nonemb_cmd->size, wrb, nonemb_cmd);
|
OPCODE_ETH_GET_STATISTICS, nonemb_cmd->size, wrb, nonemb_cmd);
|
||||||
|
|
||||||
if (adapter->generation == BE_GEN3)
|
/* version 1 of the cmd is not supported only by BE2 */
|
||||||
|
if (!BE2_chip(adapter))
|
||||||
hdr->version = 1;
|
hdr->version = 1;
|
||||||
|
|
||||||
be_mcc_notify(adapter);
|
be_mcc_notify(adapter);
|
||||||
|
@ -1452,7 +1453,8 @@ int be_cmd_link_status_query(struct be_adapter *adapter, u16 *link_speed,
|
||||||
be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
|
be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
|
||||||
OPCODE_COMMON_NTWK_LINK_STATUS_QUERY, sizeof(*req), wrb, NULL);
|
OPCODE_COMMON_NTWK_LINK_STATUS_QUERY, sizeof(*req), wrb, NULL);
|
||||||
|
|
||||||
if (adapter->generation == BE_GEN3 || lancer_chip(adapter))
|
/* version 1 of the cmd is not supported only by BE2 */
|
||||||
|
if (!BE2_chip(adapter))
|
||||||
req->hdr.version = 1;
|
req->hdr.version = 1;
|
||||||
|
|
||||||
req->hdr.domain = dom;
|
req->hdr.domain = dom;
|
||||||
|
|
|
@ -1656,33 +1656,6 @@ struct be_cmd_resp_get_stats_v1 {
|
||||||
struct be_hw_stats_v1 hw_stats;
|
struct be_hw_stats_v1 hw_stats;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline void *hw_stats_from_cmd(struct be_adapter *adapter)
|
|
||||||
{
|
|
||||||
if (adapter->generation == BE_GEN3) {
|
|
||||||
struct be_cmd_resp_get_stats_v1 *cmd = adapter->stats_cmd.va;
|
|
||||||
|
|
||||||
return &cmd->hw_stats;
|
|
||||||
} else {
|
|
||||||
struct be_cmd_resp_get_stats_v0 *cmd = adapter->stats_cmd.va;
|
|
||||||
|
|
||||||
return &cmd->hw_stats;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void *be_erx_stats_from_cmd(struct be_adapter *adapter)
|
|
||||||
{
|
|
||||||
if (adapter->generation == BE_GEN3) {
|
|
||||||
struct be_hw_stats_v1 *hw_stats = hw_stats_from_cmd(adapter);
|
|
||||||
|
|
||||||
return &hw_stats->erx;
|
|
||||||
} else {
|
|
||||||
struct be_hw_stats_v0 *hw_stats = hw_stats_from_cmd(adapter);
|
|
||||||
|
|
||||||
return &hw_stats->erx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/************** get fat capabilites *******************/
|
/************** get fat capabilites *******************/
|
||||||
#define MAX_MODULES 27
|
#define MAX_MODULES 27
|
||||||
#define MAX_MODES 4
|
#define MAX_MODES 4
|
||||||
|
|
|
@ -285,7 +285,35 @@ err:
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void populate_be2_stats(struct be_adapter *adapter)
|
/* BE2 supports only v0 cmd */
|
||||||
|
static void *hw_stats_from_cmd(struct be_adapter *adapter)
|
||||||
|
{
|
||||||
|
if (BE2_chip(adapter)) {
|
||||||
|
struct be_cmd_resp_get_stats_v0 *cmd = adapter->stats_cmd.va;
|
||||||
|
|
||||||
|
return &cmd->hw_stats;
|
||||||
|
} else {
|
||||||
|
struct be_cmd_resp_get_stats_v1 *cmd = adapter->stats_cmd.va;
|
||||||
|
|
||||||
|
return &cmd->hw_stats;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* BE2 supports only v0 cmd */
|
||||||
|
static void *be_erx_stats_from_cmd(struct be_adapter *adapter)
|
||||||
|
{
|
||||||
|
if (BE2_chip(adapter)) {
|
||||||
|
struct be_hw_stats_v0 *hw_stats = hw_stats_from_cmd(adapter);
|
||||||
|
|
||||||
|
return &hw_stats->erx;
|
||||||
|
} else {
|
||||||
|
struct be_hw_stats_v1 *hw_stats = hw_stats_from_cmd(adapter);
|
||||||
|
|
||||||
|
return &hw_stats->erx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void populate_be_v0_stats(struct be_adapter *adapter)
|
||||||
{
|
{
|
||||||
struct be_hw_stats_v0 *hw_stats = hw_stats_from_cmd(adapter);
|
struct be_hw_stats_v0 *hw_stats = hw_stats_from_cmd(adapter);
|
||||||
struct be_pmem_stats *pmem_sts = &hw_stats->pmem;
|
struct be_pmem_stats *pmem_sts = &hw_stats->pmem;
|
||||||
|
@ -334,7 +362,7 @@ static void populate_be2_stats(struct be_adapter *adapter)
|
||||||
adapter->drv_stats.eth_red_drops = pmem_sts->eth_red_drops;
|
adapter->drv_stats.eth_red_drops = pmem_sts->eth_red_drops;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void populate_be3_stats(struct be_adapter *adapter)
|
static void populate_be_v1_stats(struct be_adapter *adapter)
|
||||||
{
|
{
|
||||||
struct be_hw_stats_v1 *hw_stats = hw_stats_from_cmd(adapter);
|
struct be_hw_stats_v1 *hw_stats = hw_stats_from_cmd(adapter);
|
||||||
struct be_pmem_stats *pmem_sts = &hw_stats->pmem;
|
struct be_pmem_stats *pmem_sts = &hw_stats->pmem;
|
||||||
|
@ -436,28 +464,25 @@ void be_parse_stats(struct be_adapter *adapter)
|
||||||
struct be_rx_obj *rxo;
|
struct be_rx_obj *rxo;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (adapter->generation == BE_GEN3) {
|
if (lancer_chip(adapter)) {
|
||||||
if (lancer_chip(adapter))
|
populate_lancer_stats(adapter);
|
||||||
populate_lancer_stats(adapter);
|
|
||||||
else
|
|
||||||
populate_be3_stats(adapter);
|
|
||||||
} else {
|
} else {
|
||||||
populate_be2_stats(adapter);
|
if (BE2_chip(adapter))
|
||||||
}
|
populate_be_v0_stats(adapter);
|
||||||
|
else
|
||||||
|
/* for BE3 and Skyhawk */
|
||||||
|
populate_be_v1_stats(adapter);
|
||||||
|
|
||||||
if (lancer_chip(adapter))
|
/* as erx_v1 is longer than v0, ok to use v1 for v0 access */
|
||||||
goto done;
|
for_all_rx_queues(adapter, rxo, i) {
|
||||||
|
/* below erx HW counter can actually wrap around after
|
||||||
/* as erx_v1 is longer than v0, ok to use v1 defn for v0 access */
|
* 65535. Driver accumulates a 32-bit value
|
||||||
for_all_rx_queues(adapter, rxo, i) {
|
*/
|
||||||
/* below erx HW counter can actually wrap around after
|
accumulate_16bit_val(&rx_stats(rxo)->rx_drops_no_frags,
|
||||||
* 65535. Driver accumulates a 32-bit value
|
(u16)erx->rx_drops_no_fragments \
|
||||||
*/
|
[rxo->q.id]);
|
||||||
accumulate_16bit_val(&rx_stats(rxo)->rx_drops_no_frags,
|
}
|
||||||
(u16)erx->rx_drops_no_fragments[rxo->q.id]);
|
|
||||||
}
|
}
|
||||||
done:
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct rtnl_link_stats64 *be_get_stats64(struct net_device *netdev,
|
static struct rtnl_link_stats64 *be_get_stats64(struct net_device *netdev,
|
||||||
|
@ -1874,7 +1899,7 @@ static int be_num_txqs_want(struct be_adapter *adapter)
|
||||||
if ((!lancer_chip(adapter) && sriov_want(adapter)) ||
|
if ((!lancer_chip(adapter) && sriov_want(adapter)) ||
|
||||||
be_is_mc(adapter) ||
|
be_is_mc(adapter) ||
|
||||||
(!lancer_chip(adapter) && !be_physfn(adapter)) ||
|
(!lancer_chip(adapter) && !be_physfn(adapter)) ||
|
||||||
adapter->generation == BE_GEN2)
|
BE2_chip(adapter))
|
||||||
return 1;
|
return 1;
|
||||||
else
|
else
|
||||||
return adapter->max_tx_queues;
|
return adapter->max_tx_queues;
|
||||||
|
@ -3046,7 +3071,7 @@ static bool is_comp_in_ufi(struct be_adapter *adapter,
|
||||||
int i = 0, img_type = 0;
|
int i = 0, img_type = 0;
|
||||||
struct flash_section_info_g2 *fsec_g2 = NULL;
|
struct flash_section_info_g2 *fsec_g2 = NULL;
|
||||||
|
|
||||||
if (adapter->generation != BE_GEN3)
|
if (BE2_chip(adapter))
|
||||||
fsec_g2 = (struct flash_section_info_g2 *)fsec;
|
fsec_g2 = (struct flash_section_info_g2 *)fsec;
|
||||||
|
|
||||||
for (i = 0; i < MAX_FLASH_COMP; i++) {
|
for (i = 0; i < MAX_FLASH_COMP; i++) {
|
||||||
|
@ -3120,7 +3145,8 @@ static int be_flash(struct be_adapter *adapter, const u8 *img,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int be_flash_data(struct be_adapter *adapter,
|
/* For BE2 and BE3 */
|
||||||
|
static int be_flash_BEx(struct be_adapter *adapter,
|
||||||
const struct firmware *fw,
|
const struct firmware *fw,
|
||||||
struct be_dma_mem *flash_cmd,
|
struct be_dma_mem *flash_cmd,
|
||||||
int num_of_images)
|
int num_of_images)
|
||||||
|
@ -3175,7 +3201,7 @@ static int be_flash_data(struct be_adapter *adapter,
|
||||||
FLASH_IMAGE_MAX_SIZE_g2, IMAGE_FIRMWARE_BACKUP_FCoE}
|
FLASH_IMAGE_MAX_SIZE_g2, IMAGE_FIRMWARE_BACKUP_FCoE}
|
||||||
};
|
};
|
||||||
|
|
||||||
if (adapter->generation == BE_GEN3) {
|
if (BE3_chip(adapter)) {
|
||||||
pflashcomp = gen3_flash_types;
|
pflashcomp = gen3_flash_types;
|
||||||
filehdr_size = sizeof(struct flash_file_hdr_g3);
|
filehdr_size = sizeof(struct flash_file_hdr_g3);
|
||||||
num_comp = ARRAY_SIZE(gen3_flash_types);
|
num_comp = ARRAY_SIZE(gen3_flash_types);
|
||||||
|
@ -3184,6 +3210,7 @@ static int be_flash_data(struct be_adapter *adapter,
|
||||||
filehdr_size = sizeof(struct flash_file_hdr_g2);
|
filehdr_size = sizeof(struct flash_file_hdr_g2);
|
||||||
num_comp = ARRAY_SIZE(gen2_flash_types);
|
num_comp = ARRAY_SIZE(gen2_flash_types);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get flash section info*/
|
/* Get flash section info*/
|
||||||
fsec = get_fsec_info(adapter, filehdr_size + img_hdrs_size, fw);
|
fsec = get_fsec_info(adapter, filehdr_size + img_hdrs_size, fw);
|
||||||
if (!fsec) {
|
if (!fsec) {
|
||||||
|
@ -3431,20 +3458,21 @@ lancer_fw_exit:
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int be_get_ufi_gen(struct be_adapter *adapter,
|
#define UFI_TYPE2 2
|
||||||
struct flash_file_hdr_g2 *fhdr)
|
#define UFI_TYPE3 3
|
||||||
|
#define UFI_TYPE4 4
|
||||||
|
static int be_get_ufi_type(struct be_adapter *adapter,
|
||||||
|
struct flash_file_hdr_g2 *fhdr)
|
||||||
{
|
{
|
||||||
if (fhdr == NULL)
|
if (fhdr == NULL)
|
||||||
goto be_get_ufi_exit;
|
goto be_get_ufi_exit;
|
||||||
|
|
||||||
if (adapter->generation == BE_GEN3) {
|
if (skyhawk_chip(adapter) && fhdr->build[0] == '4')
|
||||||
if (skyhawk_chip(adapter) && fhdr->build[0] == '4')
|
return UFI_TYPE4;
|
||||||
return SH_HW;
|
else if (BE3_chip(adapter) && fhdr->build[0] == '3')
|
||||||
else if (!skyhawk_chip(adapter) && fhdr->build[0] == '3')
|
return UFI_TYPE3;
|
||||||
return BE_GEN3;
|
else if (BE2_chip(adapter) && fhdr->build[0] == '2')
|
||||||
} else if (adapter->generation == BE_GEN2 && fhdr->build[0] == '2') {
|
return UFI_TYPE2;
|
||||||
return BE_GEN2;
|
|
||||||
}
|
|
||||||
|
|
||||||
be_get_ufi_exit:
|
be_get_ufi_exit:
|
||||||
dev_err(&adapter->pdev->dev,
|
dev_err(&adapter->pdev->dev,
|
||||||
|
@ -3474,7 +3502,7 @@ static int be_fw_download(struct be_adapter *adapter, const struct firmware* fw)
|
||||||
p = fw->data;
|
p = fw->data;
|
||||||
fhdr = (struct flash_file_hdr_g2 *)p;
|
fhdr = (struct flash_file_hdr_g2 *)p;
|
||||||
|
|
||||||
ufi_type = be_get_ufi_gen(adapter, fhdr);
|
ufi_type = be_get_ufi_type(adapter, fhdr);
|
||||||
|
|
||||||
fhdr3 = (struct flash_file_hdr_g3 *)fw->data;
|
fhdr3 = (struct flash_file_hdr_g3 *)fw->data;
|
||||||
num_imgs = le32_to_cpu(fhdr3->num_imgs);
|
num_imgs = le32_to_cpu(fhdr3->num_imgs);
|
||||||
|
@ -3483,17 +3511,17 @@ static int be_fw_download(struct be_adapter *adapter, const struct firmware* fw)
|
||||||
(sizeof(struct flash_file_hdr_g3) +
|
(sizeof(struct flash_file_hdr_g3) +
|
||||||
i * sizeof(struct image_hdr)));
|
i * sizeof(struct image_hdr)));
|
||||||
if (le32_to_cpu(img_hdr_ptr->imageid) == 1) {
|
if (le32_to_cpu(img_hdr_ptr->imageid) == 1) {
|
||||||
if (ufi_type == SH_HW)
|
if (ufi_type == UFI_TYPE4)
|
||||||
status = be_flash_skyhawk(adapter, fw,
|
status = be_flash_skyhawk(adapter, fw,
|
||||||
&flash_cmd, num_imgs);
|
&flash_cmd, num_imgs);
|
||||||
else if (ufi_type == BE_GEN3)
|
else if (ufi_type == UFI_TYPE3)
|
||||||
status = be_flash_data(adapter, fw,
|
status = be_flash_BEx(adapter, fw, &flash_cmd,
|
||||||
&flash_cmd, num_imgs);
|
num_imgs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ufi_type == BE_GEN2)
|
if (ufi_type == UFI_TYPE2)
|
||||||
status = be_flash_data(adapter, fw, &flash_cmd, 0);
|
status = be_flash_BEx(adapter, fw, &flash_cmd, 0);
|
||||||
else if (ufi_type == -1)
|
else if (ufi_type == -1)
|
||||||
status = -1;
|
status = -1;
|
||||||
|
|
||||||
|
@ -3644,7 +3672,7 @@ static int be_map_pci_bars(struct be_adapter *adapter)
|
||||||
adapter->csr = addr;
|
adapter->csr = addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (adapter->generation == BE_GEN2) {
|
if (BE2_chip(adapter)) {
|
||||||
db_reg = 4;
|
db_reg = 4;
|
||||||
} else {
|
} else {
|
||||||
if (be_physfn(adapter))
|
if (be_physfn(adapter))
|
||||||
|
@ -3751,14 +3779,14 @@ static int be_stats_init(struct be_adapter *adapter)
|
||||||
{
|
{
|
||||||
struct be_dma_mem *cmd = &adapter->stats_cmd;
|
struct be_dma_mem *cmd = &adapter->stats_cmd;
|
||||||
|
|
||||||
if (adapter->generation == BE_GEN2) {
|
if (lancer_chip(adapter))
|
||||||
|
cmd->size = sizeof(struct lancer_cmd_req_pport_stats);
|
||||||
|
else if (BE2_chip(adapter))
|
||||||
cmd->size = sizeof(struct be_cmd_req_get_stats_v0);
|
cmd->size = sizeof(struct be_cmd_req_get_stats_v0);
|
||||||
} else {
|
else
|
||||||
if (lancer_chip(adapter))
|
/* BE3 and Skyhawk */
|
||||||
cmd->size = sizeof(struct lancer_cmd_req_pport_stats);
|
cmd->size = sizeof(struct be_cmd_req_get_stats_v1);
|
||||||
else
|
|
||||||
cmd->size = sizeof(struct be_cmd_req_get_stats_v1);
|
|
||||||
}
|
|
||||||
cmd->va = dma_alloc_coherent(&adapter->pdev->dev, cmd->size, &cmd->dma,
|
cmd->va = dma_alloc_coherent(&adapter->pdev->dev, cmd->size, &cmd->dma,
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (cmd->va == NULL)
|
if (cmd->va == NULL)
|
||||||
|
@ -3878,11 +3906,9 @@ static int be_dev_type_check(struct be_adapter *adapter)
|
||||||
switch (pdev->device) {
|
switch (pdev->device) {
|
||||||
case BE_DEVICE_ID1:
|
case BE_DEVICE_ID1:
|
||||||
case OC_DEVICE_ID1:
|
case OC_DEVICE_ID1:
|
||||||
adapter->generation = BE_GEN2;
|
|
||||||
break;
|
break;
|
||||||
case BE_DEVICE_ID2:
|
case BE_DEVICE_ID2:
|
||||||
case OC_DEVICE_ID2:
|
case OC_DEVICE_ID2:
|
||||||
adapter->generation = BE_GEN3;
|
|
||||||
break;
|
break;
|
||||||
case OC_DEVICE_ID3:
|
case OC_DEVICE_ID3:
|
||||||
case OC_DEVICE_ID4:
|
case OC_DEVICE_ID4:
|
||||||
|
@ -3898,7 +3924,6 @@ static int be_dev_type_check(struct be_adapter *adapter)
|
||||||
}
|
}
|
||||||
adapter->sli_family = ((sli_intf & SLI_INTF_FAMILY_MASK) >>
|
adapter->sli_family = ((sli_intf & SLI_INTF_FAMILY_MASK) >>
|
||||||
SLI_INTF_FAMILY_SHIFT);
|
SLI_INTF_FAMILY_SHIFT);
|
||||||
adapter->generation = BE_GEN3;
|
|
||||||
break;
|
break;
|
||||||
case OC_DEVICE_ID5:
|
case OC_DEVICE_ID5:
|
||||||
case OC_DEVICE_ID6:
|
case OC_DEVICE_ID6:
|
||||||
|
@ -3909,10 +3934,7 @@ static int be_dev_type_check(struct be_adapter *adapter)
|
||||||
}
|
}
|
||||||
adapter->sli_family = ((sli_intf & SLI_INTF_FAMILY_MASK) >>
|
adapter->sli_family = ((sli_intf & SLI_INTF_FAMILY_MASK) >>
|
||||||
SLI_INTF_FAMILY_SHIFT);
|
SLI_INTF_FAMILY_SHIFT);
|
||||||
adapter->generation = BE_GEN3;
|
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
adapter->generation = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pci_read_config_dword(adapter->pdev, SLI_INTF_REG_OFFSET, &sli_intf);
|
pci_read_config_dword(adapter->pdev, SLI_INTF_REG_OFFSET, &sli_intf);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче