summaryrefslogtreecommitdiffstats
path: root/sys/dev/sfxge/common
diff options
context:
space:
mode:
authorarybchik <arybchik@FreeBSD.org>2016-01-14 16:20:52 +0000
committerarybchik <arybchik@FreeBSD.org>2016-01-14 16:20:52 +0000
commit2284ae3cdc0efdca84b0315130e21f558f8710b1 (patch)
treea2a0739c0cbaa0d1efe30525e143c8262ac789a6 /sys/dev/sfxge/common
parentfcd6be20105c13afccd70e945adfdaee55df87ec (diff)
downloadFreeBSD-src-2284ae3cdc0efdca84b0315130e21f558f8710b1.zip
FreeBSD-src-2284ae3cdc0efdca84b0315130e21f558f8710b1.tar.gz
MFC r293808
sfxge: note VI_SHIFT reported in ALLOC_VIS response Submitted by: Andy Moreton <amoreton at solarflare.com> Reviewed by: gnn Sponsored by: Solarflare Communications, Inc.
Diffstat (limited to 'sys/dev/sfxge/common')
-rw-r--r--sys/dev/sfxge/common/efx_impl.h1
-rw-r--r--sys/dev/sfxge/common/hunt_nic.c22
2 files changed, 14 insertions, 9 deletions
diff --git a/sys/dev/sfxge/common/efx_impl.h b/sys/dev/sfxge/common/efx_impl.h
index a8c17f5..b5a7ec1 100644
--- a/sys/dev/sfxge/common/efx_impl.h
+++ b/sys/dev/sfxge/common/efx_impl.h
@@ -672,6 +672,7 @@ struct efx_nic_s {
struct {
int ena_vi_base;
int ena_vi_count;
+ int ena_vi_shift;
#if EFSYS_OPT_VPD
caddr_t ena_svpd;
size_t ena_svpd_length;
diff --git a/sys/dev/sfxge/common/hunt_nic.c b/sys/dev/sfxge/common/hunt_nic.c
index d716bd8..4df2711 100644
--- a/sys/dev/sfxge/common/hunt_nic.c
+++ b/sys/dev/sfxge/common/hunt_nic.c
@@ -470,9 +470,9 @@ efx_mcdi_alloc_vis(
__in efx_nic_t *enp,
__in uint32_t min_vi_count,
__in uint32_t max_vi_count,
- __out_opt uint32_t *vi_basep,
- __out uint32_t *vi_countp)
-
+ __out uint32_t *vi_basep,
+ __out uint32_t *vi_countp,
+ __out uint32_t *vi_shiftp)
{
efx_mcdi_req_t req;
uint8_t payload[MAX(MC_CMD_ALLOC_VIS_IN_LEN,
@@ -506,11 +506,14 @@ efx_mcdi_alloc_vis(
goto fail3;
}
- if (vi_basep != NULL)
- *vi_basep = MCDI_OUT_DWORD(req, ALLOC_VIS_OUT_VI_BASE);
+ *vi_basep = MCDI_OUT_DWORD(req, ALLOC_VIS_OUT_VI_BASE);
+ *vi_countp = MCDI_OUT_DWORD(req, ALLOC_VIS_OUT_VI_COUNT);
- if (vi_countp != NULL)
- *vi_countp = MCDI_OUT_DWORD(req, ALLOC_VIS_OUT_VI_COUNT);
+ /* Report VI_SHIFT if available (always zero for Huntington) */
+ if (req.emr_out_length_used < MC_CMD_ALLOC_VIS_EXT_OUT_LEN)
+ *vi_shiftp = 0;
+ else
+ *vi_shiftp = MCDI_OUT_DWORD(req, ALLOC_VIS_EXT_OUT_VI_SHIFT);
return (0);
@@ -1560,7 +1563,7 @@ ef10_nic_init(
{
efx_drv_cfg_t *edcp = &(enp->en_drv_cfg);
uint32_t min_vi_count, max_vi_count;
- uint32_t vi_count, vi_base;
+ uint32_t vi_count, vi_base, vi_shift;
uint32_t i;
uint32_t retry;
uint32_t delay_us;
@@ -1603,7 +1606,7 @@ ef10_nic_init(
*/
vi_count = 0;
if ((rc = efx_mcdi_alloc_vis(enp, min_vi_count, max_vi_count,
- &vi_base, &vi_count)) != 0)
+ &vi_base, &vi_count, &vi_shift)) != 0)
goto fail3;
EFSYS_PROBE2(vi_alloc, uint32_t, vi_base, uint32_t, vi_count);
@@ -1615,6 +1618,7 @@ ef10_nic_init(
enp->en_arch.ef10.ena_vi_base = vi_base;
enp->en_arch.ef10.ena_vi_count = vi_count;
+ enp->en_arch.ef10.ena_vi_shift = vi_shift;
if (vi_count < min_vi_count + enp->en_arch.ef10.ena_piobuf_count) {
/* Not enough extra VIs to map piobufs */
OpenPOWER on IntegriCloud