|
Lines 87-92
Link Here
|
| 87 |
static __inline void ed_xmit __P((struct ed_softc *)); |
87 |
static __inline void ed_xmit __P((struct ed_softc *)); |
| 88 |
static __inline char * ed_ring_copy __P((struct ed_softc *, char *, char *, |
88 |
static __inline char * ed_ring_copy __P((struct ed_softc *, char *, char *, |
| 89 |
/* u_short */ int)); |
89 |
/* u_short */ int)); |
|
|
90 |
static int ed_rtl_set_media __P((struct ifnet *ifp)); |
| 91 |
static void ed_rtl_get_media __P(( struct ifnet *ifp, |
| 92 |
struct ifmediareq *)); |
| 90 |
static void ed_hpp_set_physical_link __P((struct ed_softc *)); |
93 |
static void ed_hpp_set_physical_link __P((struct ed_softc *)); |
| 91 |
static void ed_hpp_readmem __P((struct ed_softc *, int, unsigned char *, |
94 |
static void ed_hpp_readmem __P((struct ed_softc *, int, unsigned char *, |
| 92 |
/* u_short */ int)); |
95 |
/* u_short */ int)); |
|
Lines 1139-1144
Link Here
|
| 1139 |
return ed_probe_Novell_generic(dev, flags); |
1142 |
return ed_probe_Novell_generic(dev, flags); |
| 1140 |
} |
1143 |
} |
| 1141 |
|
1144 |
|
|
|
1145 |
int |
| 1146 |
ed_probe_Realtek(dev, port_rid, flags) |
| 1147 |
device_t dev; |
| 1148 |
int port_rid; |
| 1149 |
int flags; |
| 1150 |
{ |
| 1151 |
struct ed_softc *sc = device_get_softc(dev); |
| 1152 |
int error; |
| 1153 |
|
| 1154 |
if ((error = ed_alloc_port(dev, port_rid, ED_NOVELL_IO_PORTS))) |
| 1155 |
return (error); |
| 1156 |
|
| 1157 |
if (!ed_probe_generic8390(sc)) |
| 1158 |
return (ENXIO); |
| 1159 |
|
| 1160 |
if (ed_nic_inb(sc, ED_P0_CR) & (ED_CR_PS0 | ED_CR_PS1)) |
| 1161 |
ed_nic_outb(sc, ED_P0_CR, ED_CR_RD2 | ED_CR_STP); |
| 1162 |
|
| 1163 |
if (ed_nic_inb(sc, ED_RTL80X9_80X9ID0) != 0x50) |
| 1164 |
return (ENXIO); |
| 1165 |
|
| 1166 |
switch (ed_nic_inb(sc, ED_RTL80X9_80X9ID1)) { |
| 1167 |
case 0x70: |
| 1168 |
sc->chip_type = ED_CHIP_TYPE_RTL8019; |
| 1169 |
break; |
| 1170 |
case 0x43: |
| 1171 |
sc->chip_type = ED_CHIP_TYPE_RTL8029; |
| 1172 |
break; |
| 1173 |
default: |
| 1174 |
return (ENXIO); |
| 1175 |
} |
| 1176 |
|
| 1177 |
sc->asic_offset = ED_NOVELL_ASIC_OFFSET; |
| 1178 |
sc->nic_offset = ED_NOVELL_NIC_OFFSET; |
| 1179 |
|
| 1180 |
if ((error = ed_probe_Novell_generic(dev, flags))) |
| 1181 |
return (error); |
| 1182 |
|
| 1183 |
ifmedia_init(&sc->ifmedia, 0, ed_rtl_set_media, ed_rtl_get_media); |
| 1184 |
|
| 1185 |
ifmedia_add(&sc->ifmedia, IFM_ETHER | IFM_10_T | IFM_FDX, 0, 0); |
| 1186 |
ifmedia_add(&sc->ifmedia, IFM_ETHER | IFM_10_T, 0, 0); |
| 1187 |
ifmedia_add(&sc->ifmedia, IFM_ETHER | IFM_10_2, 0, 0); |
| 1188 |
ifmedia_add(&sc->ifmedia, IFM_ETHER | IFM_10_5, 0, 0); |
| 1189 |
ifmedia_add(&sc->ifmedia, IFM_ETHER | IFM_AUTO, 0, 0); |
| 1190 |
|
| 1191 |
ed_nic_outb(sc, ED_P0_CR, ED_CR_RD2 | ED_CR_PAGE_3 | ED_CR_STP); |
| 1192 |
|
| 1193 |
switch (ed_nic_inb(sc, ED_RTL80X9_CONFIG2) & ED_RTL80X9_CF2_MEDIA) { |
| 1194 |
case ED_RTL80X9_CF2_AUTO: |
| 1195 |
ifmedia_set(&sc->ifmedia, IFM_ETHER | IFM_AUTO); |
| 1196 |
break; |
| 1197 |
case ED_RTL80X9_CF2_10_5: |
| 1198 |
ifmedia_set(&sc->ifmedia, IFM_ETHER | IFM_10_5); |
| 1199 |
break; |
| 1200 |
case ED_RTL80X9_CF2_10_2: |
| 1201 |
ifmedia_set(&sc->ifmedia, IFM_ETHER | IFM_10_2); |
| 1202 |
break; |
| 1203 |
case ED_RTL80X9_CF2_10_T: |
| 1204 |
ifmedia_set(&sc->ifmedia, IFM_ETHER | IFM_10_T | |
| 1205 |
(ed_nic_inb(sc, ED_RTL80X9_CONFIG3) |
| 1206 |
& ED_RTL80X9_CF3_FUDUP) ? IFM_FDX : 0); |
| 1207 |
break; |
| 1208 |
} |
| 1209 |
return (0); |
| 1210 |
} |
| 1211 |
|
| 1212 |
static int |
| 1213 |
ed_rtl_set_media(ifp) |
| 1214 |
struct ifnet *ifp; |
| 1215 |
{ |
| 1216 |
struct ed_softc *sc; |
| 1217 |
int spl; |
| 1218 |
|
| 1219 |
sc = ifp->if_softc; |
| 1220 |
spl = splimp(); |
| 1221 |
ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_PAGE_3 |
| 1222 |
| (ed_nic_inb(sc, ED_P0_CR) & (ED_CR_STA | ED_CR_STP))); |
| 1223 |
|
| 1224 |
switch(IFM_SUBTYPE(sc->ifmedia.ifm_cur->ifm_media)) { |
| 1225 |
case IFM_10_T: |
| 1226 |
ed_nic_outb(sc, ED_RTL80X9_CONFIG2, ED_RTL80X9_CF2_10_T |
| 1227 |
| (ed_nic_inb(sc, ED_RTL80X9_CONFIG2) |
| 1228 |
& ~ED_RTL80X9_CF2_MEDIA)); |
| 1229 |
break; |
| 1230 |
case IFM_10_2: |
| 1231 |
ed_nic_outb(sc, ED_RTL80X9_CONFIG2, ED_RTL80X9_CF2_10_2 |
| 1232 |
| (ed_nic_inb(sc, ED_RTL80X9_CONFIG2) |
| 1233 |
& ~ED_RTL80X9_CF2_MEDIA)); |
| 1234 |
break; |
| 1235 |
case IFM_10_5: |
| 1236 |
ed_nic_outb(sc, ED_RTL80X9_CONFIG2, ED_RTL80X9_CF2_10_5 |
| 1237 |
| (ed_nic_inb(sc, ED_RTL80X9_CONFIG2) |
| 1238 |
& ~ED_RTL80X9_CF2_MEDIA)); |
| 1239 |
break; |
| 1240 |
case IFM_AUTO: |
| 1241 |
ed_nic_outb(sc, ED_RTL80X9_CONFIG2, ED_RTL80X9_CF2_AUTO |
| 1242 |
| (ed_nic_inb(sc, ED_RTL80X9_CONFIG2) |
| 1243 |
& ~ED_RTL80X9_CF2_MEDIA)); |
| 1244 |
break; |
| 1245 |
} |
| 1246 |
|
| 1247 |
ed_nic_outb(sc, ED_RTL80X9_CONFIG3, |
| 1248 |
(sc->ifmedia.ifm_cur->ifm_media & IFM_FDX) ? |
| 1249 |
(ed_nic_inb(sc, ED_RTL80X9_CONFIG3) | ED_RTL80X9_CF3_FUDUP) : |
| 1250 |
(ed_nic_inb(sc, ED_RTL80X9_CONFIG3) & ~ED_RTL80X9_CF3_FUDUP)); |
| 1251 |
|
| 1252 |
(void) splx(spl); |
| 1253 |
return (0); |
| 1254 |
} |
| 1255 |
|
| 1256 |
static void |
| 1257 |
ed_rtl_get_media(ifp, imr) |
| 1258 |
struct ifnet *ifp; |
| 1259 |
struct ifmediareq *imr; |
| 1260 |
{ |
| 1261 |
struct ed_softc *sc; |
| 1262 |
int spl; |
| 1263 |
|
| 1264 |
sc = ifp->if_softc; |
| 1265 |
imr->ifm_active = sc->ifmedia.ifm_cur->ifm_media; |
| 1266 |
|
| 1267 |
|
| 1268 |
if (IFM_SUBTYPE(imr->ifm_active) == IFM_AUTO) { |
| 1269 |
spl = splimp(); |
| 1270 |
ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_PAGE_3 | |
| 1271 |
(ed_nic_inb(sc, ED_P0_CR) & (ED_CR_STA | ED_CR_STP))); |
| 1272 |
|
| 1273 |
switch (ed_nic_inb(sc, ED_RTL80X9_CONFIG0) |
| 1274 |
& (ED_CHIP_TYPE_RTL8029 ? ED_RTL80X9_CF0_BNC |
| 1275 |
: (ED_RTL80X9_CF0_AUI | ED_RTL80X9_CF0_BNC))) { |
| 1276 |
case ED_RTL80X9_CF0_BNC: |
| 1277 |
imr->ifm_active |= IFM_10_2; |
| 1278 |
break; |
| 1279 |
case ED_RTL80X9_CF0_AUI: |
| 1280 |
imr->ifm_active |= IFM_10_5; |
| 1281 |
break; |
| 1282 |
default: |
| 1283 |
imr->ifm_active |= IFM_10_T; |
| 1284 |
break; |
| 1285 |
} |
| 1286 |
(void) splx(spl); |
| 1287 |
} |
| 1288 |
imr->ifm_status = 0; |
| 1289 |
} |
| 1290 |
|
| 1142 |
#define ED_HPP_TEST_SIZE 16 |
1291 |
#define ED_HPP_TEST_SIZE 16 |
| 1143 |
|
1292 |
|
| 1144 |
/* |
1293 |
/* |
|
Lines 2587-2592
Link Here
|
| 2587 |
|
2736 |
|
| 2588 |
case SIOCGIFMEDIA: |
2737 |
case SIOCGIFMEDIA: |
| 2589 |
case SIOCSIFMEDIA: |
2738 |
case SIOCSIFMEDIA: |
|
|
2739 |
if (sc->chip_type == ED_CHIP_TYPE_RTL8019 || |
| 2740 |
sc->chip_type == ED_CHIP_TYPE_RTL8029) { |
| 2741 |
|
| 2742 |
error = ifmedia_ioctl(ifp, ifr, &sc->ifmedia, command); |
| 2743 |
break; |
| 2744 |
} |
| 2590 |
if (sc->miibus == NULL) { |
2745 |
if (sc->miibus == NULL) { |
| 2591 |
error = EINVAL; |
2746 |
error = EINVAL; |
| 2592 |
break; |
2747 |
break; |