- Timestamp:
- 04/11/11 11:55:42 (13 years ago)
- Branches:
- 4.11, 5, master
- Children:
- 3bc1585c
- Parents:
- b7528cf2
- Location:
- c/src/lib/libbsp/i386/pc386
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
c/src/lib/libbsp/i386/pc386/ChangeLog
rb7528cf2 r2bda489e 1 2011-04-11 Keith Robertson <kjrobert at alumni dot uwaterloo dot ca> 2 3 * ne2000/ne2000.c: Add multicast support. Patch submitted to mailing 4 list 2005-12-21. 5 1 6 2011-03-16 Jennifer Averett <jennifer.averett@OARcorp.com> 2 7 -
c/src/lib/libbsp/i386/pc386/ne2000/ne2000.c
rb7528cf2 r2bda489e 506 506 outport_byte (port + RCR, (sc->accept_broadcasts ? MSK_AB : 0)); 507 507 508 /* accept multicast */ 509 outport_byte (port + RCR, MSK_AM); 510 508 511 /* Start interface */ 509 512 outport_byte (port + CMDR, MSK_PG0 | MSK_RD2 | MSK_STA); … … 1074 1077 } 1075 1078 1079 static int ne_set_multicast_filter(struct ne_softc* sc) 1080 { 1081 int i=0; 1082 unsigned int port = sc->port; 1083 unsigned char cmd = 0; 1084 1085 /* Save CMDR settings */ 1086 inport_byte(port + CMDR, cmd); 1087 /* Change to page 1 */ 1088 outport_byte(port + CMDR, cmd | MSK_PG1); 1089 1090 /* Set MAR to accept _all_ multicast packets */ 1091 for (i = 0; i < MARsize; ++i) { 1092 outport_byte (port + MAR + i, 0xFF); 1093 } 1094 1095 /* Revert to original CMDR settings */ 1096 outport_byte(port + CMDR, cmd); 1097 1098 return 0; 1099 } 1100 1076 1101 /* NE2000 driver ioctl handler. */ 1077 1102 … … 1107 1132 } 1108 1133 break; 1134 1135 case SIOCADDMULTI: 1136 case SIOCDELMULTI: 1137 { 1138 struct ifreq* ifr = (struct ifreq*) data; 1139 error = (command == SIOCADDMULTI ? 1140 ether_addmulti(ifr, &(sc->arpcom)) : 1141 ether_delmulti(ifr, &(sc->arpcom)) ); 1142 /* ENETRESET indicates that driver should update its multicast filters */ 1143 if(error == ENETRESET) { 1144 error = ne_set_multicast_filter(sc); 1145 } 1146 break; 1147 } 1109 1148 1110 1149 case SIO_RTEMS_SHOW_STATS: 1111 1150 ne_stats (sc); 1112 1151 break; 1113 1114 /* FIXME: Multicast commands must be added here. */1115 1152 1116 1153 default: … … 1265 1302 ifp->if_start = ne_start; 1266 1303 ifp->if_output = ether_output; 1267 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX ;1304 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; 1268 1305 if (ifp->if_snd.ifq_maxlen == 0) 1269 1306 ifp->if_snd.ifq_maxlen = ifqmaxlen;
Note: See TracChangeset
for help on using the changeset viewer.