From nobody Sat Aug 26 14:32:09 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4RXzmT46K6z4qZdX; Sat, 26 Aug 2023 14:32:09 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4RXzmT3dC2z3LNf; Sat, 26 Aug 2023 14:32:09 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1693060329; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=nDopRmdcrkGZVBP9yYFLjznFGZMHfUsibB449XDgHQc=; b=XB6a8Twd44IfbkDGwaHyOGbzo4Tpq5N6+3SFEROnxG+1gyTmgWR1Nm/VaKtqNTC0UWIKsA 9CuvFVM6lKnv2ngTsAIa1LJozClv34LbbcnkHsPpgzSlDzwzWzCMwTfdjcQaLLYtpOY1BT e+rp1dTE/pcTmRGV4NU7nUAKGT6TDm2EDiGwa5LQtL3xczFTn39+b1If721dSqOjH/kFpg tz/L9EEOJuJarQxrmsP0INShW6/fk26nJPhEqVLG/kffuuvoPYY4cLAIuxpVOYMUxvZHFb tzPgRqteyl8l2/Htv3VulWGPHNgexZZkI3O+FOrvrqsEV6s65bGAVPPbvvgbkw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1693060329; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=nDopRmdcrkGZVBP9yYFLjznFGZMHfUsibB449XDgHQc=; b=ZxUBDPr/LGEeK9O0ZPDpI1r7IsJtOzwM8SiCOOUix6VeRgPAqOo5HFgYO+NfwqzuqSk6hT Xk0HsbFgO5zn0sxkCxZQLcaQV6Aqmvc4dT79txjYRNDBGQM0idc0JINtsUInuVWRm7nOEO b7PYq178iQL2zhqnIp//bKv1h48TNj7ChMXwF2Y7EwZiURopL0+UUX8Chdhj9UpIIbsu0e ALs6hqxxbtqkN8wdUJRrTw/rr6m36HLa3JsCdTcFNp1CwQRnzAVQR0fth4CmpwM1GGbZWG TTGWeWqR0Ma1+95xZ8U0238lHWBV7GfHACUur2TpLcg23VtwxitUZCUvqsWoHg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1693060329; a=rsa-sha256; cv=none; b=ZN21DQiTaCmyt/A9QoKeuovQMXnJ0fH34VbaVxu3u6/xICCLuZ6IhCkfl+rbFgglhuFAUH GtN0RIwNItfRoL5GWj6Un2mb4/d5NDmALeJdKsv9/E9n/zrP5kvVfsWlkaGGWkStEoOUq+ fDPX3uD/fL6sPYumq6R3gKWf3nBK3AIuwf3xTHhy92DLmf3nwVaukpvEJZc3rRDcAlQOOW Taf+1LOxBZ/Ch6zr5DL3xEyTfVAoM2OJMS1PlWUMbR/V5fmBFF5SDMy3Kw6mEXSDo2J5Sy B6qxqbdf7fwYoZmm+Big3Y8hZusN89+Dy2nyoQHZQ0PQujthKHror/7jfHXZdw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4RXzmT2NfGzf1d; Sat, 26 Aug 2023 14:32:09 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 37QEW9ik094098; Sat, 26 Aug 2023 14:32:09 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 37QEW9jM094091; Sat, 26 Aug 2023 14:32:09 GMT (envelope-from git) Date: Sat, 26 Aug 2023 14:32:09 GMT Message-Id: <202308261432.37QEW9jM094091@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Justin Hibbits Subject: git: db5505172906 - main - dtsec: Support multicast receive. List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhibbits X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: db55051729066a8b162fe2f05e0e2b6c29907e8b Auto-Submitted: auto-generated The branch main has been updated by jhibbits: URL: https://cgit.FreeBSD.org/src/commit/?id=db55051729066a8b162fe2f05e0e2b6c29907e8b commit db55051729066a8b162fe2f05e0e2b6c29907e8b Author: Justin Hibbits AuthorDate: 2023-08-25 15:36:35 +0000 Commit: Justin Hibbits CommitDate: 2023-08-26 14:32:12 +0000 dtsec: Support multicast receive. Implemented based on the tsec(4) multicast support. This is the minimum required to support VLANs. The hardware does support vlan tagging, among other acceleration features, which will be added at a later time. MFC after: 2 weeks --- sys/dev/dpaa/if_dtsec.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/sys/dev/dpaa/if_dtsec.c b/sys/dev/dpaa/if_dtsec.c index 2c0dee05a03f..de5ca75c9a77 100644 --- a/sys/dev/dpaa/if_dtsec.c +++ b/sys/dev/dpaa/if_dtsec.c @@ -58,6 +58,7 @@ #include #include #include +#include #include #include "fman.h" @@ -69,6 +70,7 @@ #define DTSEC_MAX_FRAME_SIZE 9600 #define DTSEC_REG_MAXFRM 0x110 +#define DTSEC_REG_GADDR(i) (0x0a0 + 4*(i)) /** * @group dTSEC private defines. @@ -338,6 +340,33 @@ dtsec_set_mtu(struct dtsec_softc *sc, unsigned int mtu) return (0); } +static u_int +dtsec_hash_maddr(void *arg, struct sockaddr_dl *sdl, u_int cnt) +{ + struct dtsec_softc *sc = arg; + + FM_MAC_AddHashMacAddr(sc->sc_mach, (t_EnetAddr *)LLADDR(sdl)); + + return (1); +} + +static void +dtsec_setup_multicast(struct dtsec_softc *sc) +{ + int i; + + if (if_getflags(sc->sc_ifnet) & IFF_ALLMULTI) { + for (i = 0; i < 8; i++) + bus_write_4(sc->sc_mem, DTSEC_REG_GADDR(i), 0xFFFFFFFF); + + return; + } + + fman_dtsec_reset_filter_table(rman_get_virtual(sc->sc_mem), + true, false); + if_foreach_llmaddr(sc->sc_ifnet, dtsec_hash_maddr, sc); +} + static int dtsec_if_enable_locked(struct dtsec_softc *sc) { @@ -357,6 +386,8 @@ dtsec_if_enable_locked(struct dtsec_softc *sc) if (error != E_OK) return (EIO); + dtsec_setup_multicast(sc); + if_setdrvflagbits(sc->sc_ifnet, IFF_DRV_RUNNING, 0); /* Refresh link state */ @@ -686,7 +717,7 @@ dtsec_attach(device_t dev) if_setsoftc(ifp, sc); - if_setflags(ifp, IFF_SIMPLEX | IFF_BROADCAST); + if_setflags(ifp, IFF_SIMPLEX | IFF_BROADCAST | IFF_MULTICAST); if_setinitfn(ifp, dtsec_if_init); if_setstartfn(ifp, dtsec_if_start); if_setioctlfn(ifp, dtsec_if_ioctl);