summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2007-09-21 15:45:11 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2007-09-21 15:45:11 +0000
commitb9f17f8a4153d257baeda355a117c06527f0119b (patch)
treeea28c787c23f43a1d021f13097ca6bb3adf3e54d /c
parent2007-09-20 Joel Sherrill <joel.sherrill@OARcorp.com> (diff)
downloadrtems-b9f17f8a4153d257baeda355a117c06527f0119b.tar.bz2
2007-09-21 Joel Sherrill <joel.sherrill@OARcorp.com>
* network_5200/network.c: Add multicast support.
Diffstat (limited to 'c')
-rw-r--r--c/src/lib/libbsp/powerpc/gen5200/ChangeLog4
-rw-r--r--c/src/lib/libbsp/powerpc/gen5200/network_5200/network.c25
2 files changed, 28 insertions, 1 deletions
diff --git a/c/src/lib/libbsp/powerpc/gen5200/ChangeLog b/c/src/lib/libbsp/powerpc/gen5200/ChangeLog
index 2781b56330..de1862da53 100644
--- a/c/src/lib/libbsp/powerpc/gen5200/ChangeLog
+++ b/c/src/lib/libbsp/powerpc/gen5200/ChangeLog
@@ -1,3 +1,7 @@
+2007-09-21 Joel Sherrill <joel.sherrill@OARcorp.com>
+
+ * network_5200/network.c: Add multicast support.
+
2007-09-12 Joel Sherrill <joel.sherrill@OARcorp.com>
PR 1257/bsps
diff --git a/c/src/lib/libbsp/powerpc/gen5200/network_5200/network.c b/c/src/lib/libbsp/powerpc/gen5200/network_5200/network.c
index c31d79410e..86813df9c0 100644
--- a/c/src/lib/libbsp/powerpc/gen5200/network_5200/network.c
+++ b/c/src/lib/libbsp/powerpc/gen5200/network_5200/network.c
@@ -1555,6 +1555,13 @@ static void mpc5200_fec_restart(struct mpc5200_enet_struct *sc)
mpc5200.ecntrl |= (FEC_ECNTRL_OE | FEC_ECNTRL_EN);
}
+int32_t mpc5200_fec_setMultiFilter(struct ifnet *ifp)
+{
+ /*struct mpc5200_enet_struct *sc = ifp->if_softc; */
+ /* XXX anything to do? */
+ return 0;
+}
+
/*
* Driver ioctl handler
@@ -1574,6 +1581,22 @@ static int mpc5200_fec_ioctl (struct ifnet *ifp, ioctl_command_t command, caddr_
break;
+ case SIOCADDMULTI:
+ case SIOCDELMULTI: {
+ struct ifreq* ifr = (struct ifreq*) data;
+ error = (command == SIOCADDMULTI)
+ ? ether_addmulti(ifr, &sc->arpcom)
+ : ether_delmulti(ifr, &sc->arpcom);
+
+ if (error == ENETRESET) {
+ if (ifp->if_flags & IFF_RUNNING)
+ error = mpc5200_fec_setMultiFilter(ifp);
+ else
+ error = 0;
+ }
+ break;
+ }
+
case SIOCSIFFLAGS:
switch(ifp->if_flags & (IFF_UP | IFF_RUNNING))
@@ -1777,7 +1800,7 @@ int rtems_mpc5200_fec_driver_attach(struct rtems_bsdnet_ifconfig *config)
ifp->if_ioctl = mpc5200_fec_ioctl;
ifp->if_start = mpc5200_fec_tx_start;
ifp->if_output = ether_output;
- ifp->if_flags = IFF_BROADCAST;
+ ifp->if_flags = IFF_BROADCAST | IFF_MULTICAST;
/*ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX;*/
if(ifp->if_snd.ifq_maxlen == 0)