svn commit: r564758 - in head/net/aquantia-atlantic-kmod: . files

Philip Paeps philip at FreeBSD.org
Tue Feb 9 02:51:03 UTC 2021


Author: philip
Date: Tue Feb  9 02:51:02 2021
New Revision: 564758
URL: https://svnweb.freebsd.org/changeset/ports/564758

Log:
  net/aquantia-atlantic-kmod: Fix build on CURRENT
  
  This patch enables the port to build a working if_atlantic.ko on
  13-CURRENT, broken since r353868 (Git commit 19e09f447fd9), where
  the `if_multi_apply` and `if_multiaddr_count` KPIs were removed.
  
  PR:             252642
  Submitted by:   Michael Chiu <nyan-at-myuji.xyz>
  Approved by:    koobs (maintainer)
  MFH:            2021Q1 (blanket: build fix)
  Differential_Revision: https://reviews.freebsd.org/D28135

Added:
  head/net/aquantia-atlantic-kmod/files/
  head/net/aquantia-atlantic-kmod/files/patch-aq__hw.c   (contents, props changed)
  head/net/aquantia-atlantic-kmod/files/patch-aq__main.c   (contents, props changed)
Modified:
  head/net/aquantia-atlantic-kmod/Makefile   (contents, props changed)

Modified: head/net/aquantia-atlantic-kmod/Makefile
==============================================================================
--- head/net/aquantia-atlantic-kmod/Makefile	Tue Feb  9 02:49:26 2021	(r564757)
+++ head/net/aquantia-atlantic-kmod/Makefile	Tue Feb  9 02:51:02 2021	(r564758)
@@ -2,6 +2,7 @@
 
 PORTNAME=	aquantia-atlantic-kmod
 PORTVERSION=	0.0.5
+PORTREVISION=	1
 CATEGORIES=	net
 
 MAINTAINER=	koobs at FreeBSD.org

Added: head/net/aquantia-atlantic-kmod/files/patch-aq__hw.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/net/aquantia-atlantic-kmod/files/patch-aq__hw.c	Tue Feb  9 02:51:02 2021	(r564758)
@@ -0,0 +1,30 @@
+Upstream PR:
+https://github.com/Aquantia/aqtion-freebsd/pull/11
+
+--- aq_hw.c.orig	2019-09-24 14:45:34 UTC
++++ aq_hw.c
+@@ -160,7 +160,7 @@ static int aq_hw_init_ucp(struct aq_hw *hw)
+             unsigned int rnd = 0;
+             unsigned int ucp_0x370 = 0;
+ 
+-            rnd = random();
++            rnd = arc4random();
+ 
+             ucp_0x370 = 0x02020202 | (0xFEFEFEFE & rnd);
+             AQ_WRITE_REG(hw, AQ_HW_UCP_0X370_REG, ucp_0x370);
+@@ -307,7 +307,6 @@ int aq_hw_get_mac_permanent(struct aq_hw *hw,  u8 *mac
+ 
+     /* Couldn't get MAC address from HW. Use auto-generated one. */
+     if ((mac[0] & 1) || ((mac[0] | mac[1] | mac[2]) == 0)) {
+-        u64 seed = get_cyclecount();
+         u16 rnd;
+         u32 h = 0;
+         u32 l = 0;
+@@ -315,7 +314,6 @@ int aq_hw_get_mac_permanent(struct aq_hw *hw,  u8 *mac
+         printf("atlantic: HW MAC address %x:%x:%x:%x:%x:%x is multicast or empty MAC", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
+         printf("atlantic: Use random MAC address");
+ 
+-        srandom(seed);
+         rnd = random();
+ 
+         /* chip revision */

Added: head/net/aquantia-atlantic-kmod/files/patch-aq__main.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/net/aquantia-atlantic-kmod/files/patch-aq__main.c	Tue Feb  9 02:51:02 2021	(r564758)
@@ -0,0 +1,61 @@
+Upstream PR:
+https://github.com/Aquantia/aqtion-freebsd/pull/11
+
+--- aq_main.c.orig	2019-09-24 14:45:34 UTC
++++ aq_main.c
+@@ -735,6 +735,23 @@ static uint64_t aq_if_get_counter(if_ctx_t ctx, ift_co
+ 	}
+ }
+ 
++#if __FreeBSD_version >= 1300054
++static u_int aq_mc_filter_apply(void *arg, struct sockaddr_dl *dl, int count)
++{
++	struct aq_dev *softc = arg;
++	struct aq_hw *hw = &softc->hw;
++	u8 *mac_addr = NULL;
++
++	if (count == AQ_HW_MAC_MAX)
++		return (0);
++
++	mac_addr = LLADDR(dl);
++	aq_hw_mac_addr_set(hw, mac_addr, count + 1);
++
++	aq_log_detail("set %d mc address %6D", count + 1, mac_addr, ":");
++	return (1);
++}
++#else
+ static int aq_mc_filter_apply(void *arg, struct ifmultiaddr *ifma, int count)
+ {
+ 	struct aq_dev *softc = arg;
+@@ -752,6 +769,7 @@ static int aq_mc_filter_apply(void *arg, struct ifmult
+ 	aq_log_detail("set %d mc address %6D", count + 1, mac_addr, ":");
+ 	return (1);
+ }
++#endif
+ 
+ static bool aq_is_mc_promisc_required(struct aq_dev *softc)
+ {
+@@ -764,15 +782,22 @@ static void aq_if_multi_set(if_ctx_t ctx)
+ 	struct ifnet  *ifp = iflib_get_ifp(ctx);
+ 	struct aq_hw  *hw = &softc->hw;
+ 	AQ_DBG_ENTER();
+-
++#if __FreeBSD_version >= 1300054
++	softc->mcnt = if_llmaddr_count(iflib_get_ifp(ctx));
++#else
+ 	softc->mcnt = if_multiaddr_count(iflib_get_ifp(ctx), AQ_HW_MAC_MAX);
++#endif
+ 	if (softc->mcnt >= AQ_HW_MAC_MAX)
+ 	{
+ 		aq_hw_set_promisc(hw, !!(ifp->if_flags & IFF_PROMISC),
+ 				  aq_is_vlan_promisc_required(softc),
+ 				  !!(ifp->if_flags & IFF_ALLMULTI) || aq_is_mc_promisc_required(softc));
+ 	}else{
++#if __FreeBSD_version >= 1300054
++		if_foreach_llmaddr(iflib_get_ifp(ctx), aq_mc_filter_apply, softc);
++#else
+ 		if_multi_apply(iflib_get_ifp(ctx), aq_mc_filter_apply, softc);
++#endif
+ 	}
+ 	AQ_DBG_EXIT(0);
+ }


More information about the svn-ports-all mailing list