本文整理汇总了C++中IFM_SUBTYPE函数的典型用法代码示例。如果您正苦于以下问题:C++ IFM_SUBTYPE函数的具体用法?C++ IFM_SUBTYPE怎么用?C++ IFM_SUBTYPE使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了IFM_SUBTYPE函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: le_dma_nocarrier
static void
le_dma_nocarrier(struct lance_softc *sc)
{
struct le_dma_softc *lesc = (struct le_dma_softc *)sc;
/*
* Check if the user has requested a certain cable type, and
* if so, honor that request.
*/
if (L64854_GCSR(lesc->sc_dma) & E_TP_AUI) {
switch (IFM_SUBTYPE(sc->sc_media.ifm_media)) {
case IFM_10_5:
case IFM_AUTO:
if_printf(sc->sc_ifp, "lost carrier on UTP port, "
"switching to AUI port\n");
le_dma_setaui(sc);
}
} else {
switch (IFM_SUBTYPE(sc->sc_media.ifm_media)) {
case IFM_10_T:
case IFM_AUTO:
if_printf(sc->sc_ifp, "lost carrier on AUI port, "
"switching to UTP port\n");
le_dma_setutp(sc);
}
}
}
开发者ID:looncraz,项目名称:haiku,代码行数:28,代码来源:if_le_ledma.c
示例2: rtems_ifmedia2str
int
rtems_ifmedia2str (int media, char *buf, int bufsz)
{
const char *mdesc;
const char *dupdesc = 0;
/* only ethernet supported, so far */
if (IFM_ETHER != IFM_TYPE (media))
return -1;
if (!(mdesc = find_desc (IFM_SUBTYPE (media), shared_media_strings)))
mdesc = find_desc (IFM_SUBTYPE (media), ethern_media_strings);
if (!mdesc)
return -1;
if (IFM_NONE != IFM_SUBTYPE (media))
dupdesc = IFM_FDX & media ? " full-duplex" : " half-duplex";
return WHATPRINT (buf, bufsz,
"Ethernet [phy instance: %" PRId32 "]: (link %s, autoneg %s) -- media: %s%s",
(int32_t) IFM_INST (media),
IFM_LINK_OK & media ? "ok" : "down",
IFM_ANEG_DIS & media ? "off" : "on",
mdesc, dupdesc ? dupdesc : "");
}
开发者ID:jfpmonteiro,项目名称:rtems-4.8-rhealstone,代码行数:26,代码来源:rtems_mii_ioctl.c
示例3: atphy_anar
static uint16_t
atphy_anar(struct ifmedia_entry *ife)
{
uint16_t anar = 0;
switch (IFM_SUBTYPE(ife->ifm_media)) {
case IFM_AUTO:
anar |= ANAR_TX_FD | ANAR_TX | ANAR_10_FD | ANAR_10;
return anar;
case IFM_1000_T:
return anar;
case IFM_100_TX:
anar |= ANAR_TX;
break;
case IFM_10_T:
anar |= ANAR_10;
break;
default:
return 0;
}
if ((ife->ifm_media & IFM_GMASK) & IFM_FDX) {
if (IFM_SUBTYPE(ife->ifm_media) == IFM_100_TX)
anar |= ANAR_TX_FD;
else
anar |= ANAR_10_FD;
}
return anar;
}
开发者ID:mihaicarabas,项目名称:dragonfly,代码行数:33,代码来源:atphy.c
示例4: qe_ifmedia_upd
/*
* Set media options.
*/
int
qe_ifmedia_upd(struct ifnet *ifp)
{
struct qe_softc *sc = ifp->if_softc;
struct ifmedia *ifm = &sc->sc_ifmedia;
bus_space_tag_t t = sc->sc_bustag;
bus_space_handle_t mr = sc->sc_mr;
int newmedia = ifm->ifm_media;
uint8_t plscc, phycc;
#if defined(SUN4U) || defined(__GNUC__)
(void)&t;
#endif
if (IFM_TYPE(newmedia) != IFM_ETHER)
return (EINVAL);
plscc = bus_space_read_1(t, mr, QE_MRI_PLSCC) & ~QE_MR_PLSCC_PORTMASK;
phycc = bus_space_read_1(t, mr, QE_MRI_PHYCC) & ~QE_MR_PHYCC_ASEL;
if (IFM_SUBTYPE(newmedia) == IFM_AUTO)
phycc |= QE_MR_PHYCC_ASEL;
else if (IFM_SUBTYPE(newmedia) == IFM_10_T)
plscc |= QE_MR_PLSCC_TP;
else if (IFM_SUBTYPE(newmedia) == IFM_10_5)
plscc |= QE_MR_PLSCC_AUI;
bus_space_write_1(t, mr, QE_MRI_PLSCC, plscc);
bus_space_write_1(t, mr, QE_MRI_PHYCC, phycc);
return (0);
}
开发者ID:ryo,项目名称:netbsd-src,代码行数:34,代码来源:qe.c
示例5: mii_phy_setmedia
void
mii_phy_setmedia(struct mii_softc *sc)
{
struct mii_data *mii = sc->mii_pdata;
struct ifmedia_entry *ife = mii->mii_media.ifm_cur;
int bmcr, anar, gtcr;
if (IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO) {
/*
* Force renegotiation if MIIF_DOPAUSE or MIIF_FORCEANEG.
* The former is necessary as we might switch from flow-
* control advertisment being off to on or vice versa.
*/
if ((PHY_READ(sc, MII_BMCR) & BMCR_AUTOEN) == 0 ||
(sc->mii_flags & (MIIF_DOPAUSE | MIIF_FORCEANEG)) != 0)
(void)mii_phy_auto(sc);
return;
}
/*
* Table index is stored in the media entry.
*/
KASSERT(ife->ifm_data >=0 && ife->ifm_data < MII_NMEDIA,
("invalid ife->ifm_data (0x%x) in mii_phy_setmedia",
ife->ifm_data));
anar = mii_media_table[ife->ifm_data].mm_anar;
bmcr = mii_media_table[ife->ifm_data].mm_bmcr;
gtcr = mii_media_table[ife->ifm_data].mm_gtcr;
if (IFM_SUBTYPE(ife->ifm_media) == IFM_1000_T) {
gtcr |= GTCR_MAN_MS;
if ((ife->ifm_media & IFM_ETH_MASTER) != 0)
gtcr |= GTCR_ADV_MS;
}
if ((ife->ifm_media & IFM_GMASK) == (IFM_FDX | IFM_FLOW) ||
(sc->mii_flags & MIIF_FORCEPAUSE) != 0) {
if ((sc->mii_flags & MIIF_IS_1000X) != 0)
anar |= ANAR_X_PAUSE_TOWARDS;
else {
anar |= ANAR_FC;
/* XXX Only 1000BASE-T has PAUSE_ASYM? */
if ((sc->mii_flags & MIIF_HAVE_GTCR) != 0 &&
(sc->mii_extcapabilities &
(EXTSR_1000THDX | EXTSR_1000TFDX)) != 0)
anar |= ANAR_X_PAUSE_ASYM;
}
}
if ((ife->ifm_media & IFM_LOOP) != 0)
bmcr |= BMCR_LOOP;
PHY_WRITE(sc, MII_ANAR, anar);
PHY_WRITE(sc, MII_BMCR, bmcr);
if ((sc->mii_flags & MIIF_HAVE_GTCR) != 0)
PHY_WRITE(sc, MII_100T2CR, gtcr);
}
开发者ID:BlueFireworks,项目名称:rtems-libbsd,代码行数:59,代码来源:mii_physubr.c
示例6: smcphy_service
static int
smcphy_service(struct mii_softc *sc, struct mii_data *mii, int cmd)
{
struct ifmedia_entry *ife;
int reg;
ife = mii->mii_media.ifm_cur;
switch (cmd) {
case MII_POLLSTAT:
break;
case MII_MEDIACHG:
switch (IFM_SUBTYPE(ife->ifm_media)) {
case IFM_AUTO:
smcphy_auto(sc, ife->ifm_media);
break;
default:
mii_phy_setmedia(sc);
break;
}
break;
case MII_TICK:
if (IFM_SUBTYPE(ife->ifm_media) != IFM_AUTO) {
break;
}
/* I have no idea why BMCR_ISO gets set. */
reg = PHY_READ(sc, MII_BMCR);
if (reg & BMCR_ISO) {
PHY_WRITE(sc, MII_BMCR, reg & ~BMCR_ISO);
}
reg = PHY_READ(sc, MII_BMSR) | PHY_READ(sc, MII_BMSR);
if (reg & BMSR_LINK) {
sc->mii_ticks = 0;
break;
}
if (++sc->mii_ticks <= MII_ANEGTICKS) {
break;
}
sc->mii_ticks = 0;
PHY_RESET(sc);
smcphy_auto(sc, ife->ifm_media);
break;
}
/* Update the media status. */
PHY_STATUS(sc);
/* Callback if something changed. */
mii_phy_update(sc, cmd);
return (0);
}
开发者ID:hmatyschok,项目名称:MeshBSD,代码行数:59,代码来源:smcphy.c
示例7: vte_miibus_statchg
void
vte_miibus_statchg(struct device *dev)
{
struct vte_softc *sc = (struct vte_softc *)dev;
struct ifnet *ifp = &sc->sc_arpcom.ac_if;
struct mii_data *mii;
uint16_t val;
if ((ifp->if_flags & IFF_RUNNING) == 0)
return;
mii = &sc->sc_miibus;
sc->vte_flags &= ~VTE_FLAG_LINK;
if ((mii->mii_media_status & (IFM_ACTIVE | IFM_AVALID)) ==
(IFM_ACTIVE | IFM_AVALID)) {
switch (IFM_SUBTYPE(mii->mii_media_active)) {
case IFM_10_T:
case IFM_100_TX:
sc->vte_flags |= VTE_FLAG_LINK;
break;
default:
break;
}
}
/* Stop RX/TX MACs. */
vte_stop_mac(sc);
/* Program MACs with resolved duplex and flow control. */
if ((sc->vte_flags & VTE_FLAG_LINK) != 0) {
/*
* Timer waiting time : (63 + TIMER * 64) MII clock.
* MII clock : 25MHz(100Mbps) or 2.5MHz(10Mbps).
*/
if (IFM_SUBTYPE(mii->mii_media_active) == IFM_100_TX)
val = 18 << VTE_IM_TIMER_SHIFT;
else
val = 1 << VTE_IM_TIMER_SHIFT;
sc->vte_int_rx_mod = VTE_IM_RX_BUNDLE_DEFAULT;
val |= sc->vte_int_rx_mod << VTE_IM_BUNDLE_SHIFT;
/* 48.6us for 100Mbps, 50.8us for 10Mbps */
CSR_WRITE_2(sc, VTE_MRICR, val);
if (IFM_SUBTYPE(mii->mii_media_active) == IFM_100_TX)
val = 18 << VTE_IM_TIMER_SHIFT;
else
val = 1 << VTE_IM_TIMER_SHIFT;
sc->vte_int_tx_mod = VTE_IM_TX_BUNDLE_DEFAULT;
val |= sc->vte_int_tx_mod << VTE_IM_BUNDLE_SHIFT;
/* 48.6us for 100Mbps, 50.8us for 10Mbps */
CSR_WRITE_2(sc, VTE_MTICR, val);
vte_mac_config(sc);
vte_start_mac(sc);
}
}
开发者ID:orumin,项目名称:openbsd-efivars,代码行数:56,代码来源:if_vte.c
示例8: get_media_subtype_string
const char *
get_media_subtype_string(uint64_t mword)
{
const struct ifmedia_description *desc;
for (desc = ifm_subtype_descriptions; desc->ifmt_string != NULL;
desc++) {
if (IFM_TYPE_MATCH(desc->ifmt_word, mword) &&
IFM_SUBTYPE(desc->ifmt_word) == IFM_SUBTYPE(mword))
return (desc->ifmt_string);
}
return ("<unknown subtype>");
}
开发者ID:muhammadn,项目名称:nsh,代码行数:13,代码来源:media.c
示例9: truephy_service
static int
truephy_service(struct mii_softc *sc, struct mii_data *mii, int cmd)
{
struct ifmedia_entry *ife = mii->mii_media.ifm_cur;
int bmcr;
switch (cmd) {
case MII_POLLSTAT:
break;
case MII_MEDIACHG:
/*
* If the interface is not up, don't do anything.
*/
if ((mii->mii_ifp->if_flags & IFF_UP) == 0)
break;
if (IFM_SUBTYPE(ife->ifm_media) != IFM_AUTO) {
bmcr = PHY_READ(sc, MII_BMCR) & ~BMCR_AUTOEN;
PHY_WRITE(sc, MII_BMCR, bmcr);
PHY_WRITE(sc, MII_BMCR, bmcr | BMCR_PDOWN);
}
mii_phy_setmedia(sc);
if (IFM_SUBTYPE(ife->ifm_media) != IFM_AUTO) {
bmcr = PHY_READ(sc, MII_BMCR) & ~BMCR_PDOWN;
PHY_WRITE(sc, MII_BMCR, bmcr);
if (IFM_SUBTYPE(ife->ifm_media) == IFM_1000_T) {
PHY_WRITE(sc, MII_BMCR,
bmcr | BMCR_AUTOEN | BMCR_STARTNEG);
}
}
break;
case MII_TICK:
if (mii_phy_tick(sc) == EJUSTRETURN)
return (0);
break;
}
/* Update the media status. */
PHY_STATUS(sc);
/* Callback if something changed. */
mii_phy_update(sc, cmd);
return (0);
}
开发者ID:dcui,项目名称:FreeBSD-9.3_kernel,代码行数:49,代码来源:truephy.c
示例10: brgphy_setmedia
static void
brgphy_setmedia(struct mii_softc *sc, int media)
{
int bmcr = 0, gig;
switch (IFM_SUBTYPE(media)) {
case IFM_2500_SX:
break;
case IFM_1000_SX:
case IFM_1000_T:
bmcr = BRGPHY_S1000;
break;
case IFM_100_TX:
bmcr = BRGPHY_S100;
break;
case IFM_10_T:
default:
bmcr = BRGPHY_S10;
break;
}
if ((media & IFM_FDX) != 0) {
bmcr |= BRGPHY_BMCR_FDX;
gig = BRGPHY_1000CTL_AFD;
} else {
gig = BRGPHY_1000CTL_AHD;
}
/* Force loopback to disconnect PHY from Ethernet medium. */
brgphy_enable_loopback(sc);
PHY_WRITE(sc, BRGPHY_MII_1000CTL, 0);
PHY_WRITE(sc, BRGPHY_MII_ANAR, BRGPHY_SEL_TYPE);
if (IFM_SUBTYPE(media) != IFM_1000_T &&
IFM_SUBTYPE(media) != IFM_1000_SX) {
PHY_WRITE(sc, BRGPHY_MII_BMCR, bmcr);
return;
}
if (IFM_SUBTYPE(media) == IFM_1000_T) {
gig |= BRGPHY_1000CTL_MSE;
if ((media & IFM_ETH_MASTER) != 0)
gig |= BRGPHY_1000CTL_MSC;
}
PHY_WRITE(sc, BRGPHY_MII_1000CTL, gig);
PHY_WRITE(sc, BRGPHY_MII_BMCR,
bmcr | BRGPHY_BMCR_AUTOEN | BRGPHY_BMCR_STARTNEG);
}
开发者ID:AmirAbrams,项目名称:haiku,代码行数:49,代码来源:brgphy.c
示例11: ieee80211_media2rate
int
ieee80211_media2rate(uint64_t mword)
{
int i;
static const struct {
uint64_t subtype;
int rate;
} ieeerates[] = {
{ IFM_AUTO, -1 },
{ IFM_MANUAL, 0 },
{ IFM_NONE, 0 },
{ IFM_IEEE80211_DS1, 2 },
{ IFM_IEEE80211_DS2, 4 },
{ IFM_IEEE80211_DS5, 11 },
{ IFM_IEEE80211_DS11, 22 },
{ IFM_IEEE80211_DS22, 44 },
{ IFM_IEEE80211_OFDM6, 12 },
{ IFM_IEEE80211_OFDM9, 18 },
{ IFM_IEEE80211_OFDM12, 24 },
{ IFM_IEEE80211_OFDM18, 36 },
{ IFM_IEEE80211_OFDM24, 48 },
{ IFM_IEEE80211_OFDM36, 72 },
{ IFM_IEEE80211_OFDM48, 96 },
{ IFM_IEEE80211_OFDM54, 108 },
{ IFM_IEEE80211_OFDM72, 144 },
};
for (i = 0; i < nitems(ieeerates); i++) {
if (ieeerates[i].subtype == IFM_SUBTYPE(mword))
return ieeerates[i].rate;
}
return 0;
}
开发者ID:orumin,项目名称:openbsd-efivars,代码行数:32,代码来源:ieee80211.c
示例12: ieee80211_media2rate
int
ieee80211_media2rate(int mword)
{
#define N(a) (sizeof(a) / sizeof(a[0]))
int i;
static const struct {
int subtype;
int rate;
} ieeerates[] = {
{ IFM_AUTO, -1 },
{ IFM_MANUAL, 0 },
{ IFM_NONE, 0 },
{ IFM_IEEE80211_DS1, 2 },
{ IFM_IEEE80211_DS2, 4 },
{ IFM_IEEE80211_DS5, 11 },
{ IFM_IEEE80211_DS11, 22 },
{ IFM_IEEE80211_DS22, 44 },
{ IFM_IEEE80211_OFDM6, 12 },
{ IFM_IEEE80211_OFDM9, 18 },
{ IFM_IEEE80211_OFDM12, 24 },
{ IFM_IEEE80211_OFDM18, 36 },
{ IFM_IEEE80211_OFDM24, 48 },
{ IFM_IEEE80211_OFDM36, 72 },
{ IFM_IEEE80211_OFDM48, 96 },
{ IFM_IEEE80211_OFDM54, 108 },
{ IFM_IEEE80211_OFDM72, 144 },
};
for (i = 0; i < N(ieeerates); i++) {
if (ieeerates[i].subtype == IFM_SUBTYPE(mword))
return ieeerates[i].rate;
}
return 0;
#undef N
}
开发者ID:sofuture,项目名称:bitrig,代码行数:34,代码来源:ieee80211.c
示例13: axgbe_media_change
static int
axgbe_media_change(struct ifnet *ifp)
{
struct axgbe_softc *sc;
int cur_media;
sc = ifp->if_softc;
sx_xlock(&sc->prv.an_mutex);
cur_media = sc->media.ifm_cur->ifm_media;
switch (IFM_SUBTYPE(cur_media)) {
case IFM_10G_KR:
sc->prv.phy.speed = SPEED_10000;
sc->prv.phy.autoneg = AUTONEG_DISABLE;
break;
case IFM_2500_KX:
sc->prv.phy.speed = SPEED_2500;
sc->prv.phy.autoneg = AUTONEG_DISABLE;
break;
case IFM_1000_KX:
sc->prv.phy.speed = SPEED_1000;
sc->prv.phy.autoneg = AUTONEG_DISABLE;
break;
case IFM_AUTO:
sc->prv.phy.autoneg = AUTONEG_ENABLE;
break;
}
sx_xunlock(&sc->prv.an_mutex);
return (-sc->prv.phy_if.phy_config_aneg(&sc->prv));
}
开发者ID:2trill2spill,项目名称:freebsd,代码行数:32,代码来源:if_axgbe.c
示例14: tr_pcmcia_mediachange
static int
tr_pcmcia_mediachange(struct tr_softc *sc)
{
int setspeed = 0;
if (IFM_TYPE(sc->sc_media.ifm_media) != IFM_TOKEN)
return EINVAL;
switch (IFM_SUBTYPE(sc->sc_media.ifm_media)) {
case IFM_TOK_STP16:
case IFM_TOK_UTP16:
if ((sc->sc_init_status & RSP_16) == 0)
setspeed = 1;
break;
case IFM_TOK_STP4:
case IFM_TOK_UTP4:
if ((sc->sc_init_status & RSP_16) != 0)
setspeed = 1;
break;
}
if (setspeed != 0) {
tr_stop(sc);
if (sc->sc_enabled)
tr_pcmcia_disable(sc);
sc->sc_init_status ^= RSP_16; /* XXX 100 Mbit/s */
if (sc->sc_enabled)
tr_pcmcia_enable(sc);
}
/*
* XXX Handle Early Token Release !!!!
*/
return 0;
}
开发者ID:ryo,项目名称:netbsd-src,代码行数:34,代码来源:if_tr_pcmcia.c
示例15: tsec_mii_statchg
void
tsec_mii_statchg(struct device *self)
{
struct tsec_softc *sc = (void *)self;
uint32_t maccfg2, ecntrl;
ecntrl = tsec_read(sc, TSEC_ECNTRL);
maccfg2 = tsec_read(sc, TSEC_MACCFG2);
maccfg2 &= ~TSEC_MACCFG2_IF_MODE;
switch (IFM_SUBTYPE(sc->sc_mii.mii_media_active)) {
case IFM_1000_SX:
case IFM_1000_LX:
case IFM_1000_CX:
case IFM_1000_T:
maccfg2 |= TSEC_MACCFG2_IF_GMII;
break;
case IFM_100_TX:
ecntrl |= TSEC_ECNTRL_R100M;
maccfg2 |= TSEC_MACCFG2_IF_MII;
break;
case IFM_10_T:
ecntrl &= ~TSEC_ECNTRL_R100M;
maccfg2 |= TSEC_MACCFG2_IF_MII;
break;
}
if ((sc->sc_mii.mii_media_active & IFM_GMASK) == IFM_FDX)
maccfg2 |= TSEC_MACCFG2_FDX;
else
maccfg2 &= ~TSEC_MACCFG2_FDX;
tsec_write(sc, TSEC_MACCFG2, maccfg2);
tsec_write(sc, TSEC_ECNTRL, ecntrl);
}
开发者ID:bradla,项目名称:OpenBSD-Hammer2,代码行数:35,代码来源:if_tsec.c
示例16: ed_rtl_get_media
static void
ed_rtl_get_media(struct ifnet *ifp, struct ifmediareq *imr)
{
struct ed_softc *sc;
sc = ifp->if_softc;
imr->ifm_active = sc->ifmedia.ifm_cur->ifm_media;
if (IFM_SUBTYPE(imr->ifm_active) == IFM_AUTO) {
ED_LOCK(sc);
ed_nic_barrier(sc, ED_P0_CR, 1,
BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_PAGE_3 |
(ed_nic_inb(sc, ED_P0_CR) & (ED_CR_STA | ED_CR_STP)));
ed_nic_barrier(sc, ED_P0_CR, 1,
BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
switch (ed_nic_inb(sc, ED_RTL80X9_CONFIG0)
& (sc->chip_type == ED_CHIP_TYPE_RTL8029 ? ED_RTL80X9_CF0_BNC
: (ED_RTL80X9_CF0_AUI | ED_RTL80X9_CF0_BNC))) {
case ED_RTL80X9_CF0_BNC:
imr->ifm_active |= IFM_10_2;
break;
case ED_RTL80X9_CF0_AUI:
imr->ifm_active |= IFM_10_5;
break;
default:
imr->ifm_active |= IFM_10_T;
break;
}
ED_UNLOCK(sc);
}
imr->ifm_status = 0;
}
开发者ID:dcui,项目名称:FreeBSD-9.3_kernel,代码行数:35,代码来源:if_ed_rtl80x9.c
示例17: atphy_setmedia
static int
atphy_setmedia(struct mii_softc *sc, int media)
{
uint16_t anar;
anar = BMSR_MEDIA_TO_ANAR(sc->mii_capabilities) | ANAR_CSMA;
if ((IFM_SUBTYPE(media) == IFM_AUTO || (media & IFM_FDX) != 0) &&
((media & IFM_FLOW) != 0 ||
(sc->mii_flags & MIIF_FORCEPAUSE) != 0))
anar |= ANAR_PAUSE_TOWARDS;
PHY_WRITE(sc, MII_ANAR, anar);
if ((sc->mii_extcapabilities &
(EXTSR_1000TFDX | EXTSR_1000THDX)) != 0)
PHY_WRITE(sc, MII_100T2CR, GTCR_ADV_1000TFDX |
GTCR_ADV_1000THDX);
else if (sc->mii_mpd_model == MII_MODEL_xxATHEROS_F1) {
/*
* AR8132 has 10/100 PHY and the PHY uses the same
* model number of F1 gigabit PHY. The PHY has no
* ability to establish gigabit link so explicitly
* disable 1000baseT configuration for the PHY.
* Otherwise, there is a case that atphy(4) could
* not establish a link against gigabit link partner
* unless the link partner supports down-shifting.
*/
PHY_WRITE(sc, MII_100T2CR, 0);
}
PHY_WRITE(sc, MII_BMCR, BMCR_RESET | BMCR_AUTOEN | BMCR_STARTNEG);
return (EJUSTRETURN);
}
开发者ID:edgar-pek,项目名称:PerspicuOS,代码行数:31,代码来源:atphy.c
示例18: kr_link_task
static void
kr_link_task(void *arg, int pending)
{
struct kr_softc *sc;
struct mii_data *mii;
struct ifnet *ifp;
/* int lfdx, mfdx; */
sc = (struct kr_softc *)arg;
KR_LOCK(sc);
mii = device_get_softc(sc->kr_miibus);
ifp = sc->kr_ifp;
if (mii == NULL || ifp == NULL ||
(ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
KR_UNLOCK(sc);
return;
}
if (mii->mii_media_status & IFM_ACTIVE) {
if (IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE)
sc->kr_link_status = 1;
} else
sc->kr_link_status = 0;
KR_UNLOCK(sc);
}
开发者ID:edgar-pek,项目名称:PerspicuOS,代码行数:27,代码来源:if_kr.c
示例19: acphy_service
static int
acphy_service(struct mii_softc *sc, struct mii_data *mii, int cmd)
{
struct ifmedia_entry *ife = mii->mii_media.ifm_cur;
int reg;
/*
* If we're not selected, then do nothing, just isolate and power
* down, if changing media.
*/
if (IFM_INST(ife->ifm_media) != sc->mii_inst) {
if (cmd == MII_MEDIACHG) {
reg = PHY_READ(sc, MII_BMCR);
PHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO | BMCR_PDOWN);
}
return (0);
}
switch (cmd) {
case MII_POLLSTAT:
break;
case MII_MEDIACHG:
/*
* If the interface is not up, don't do anything.
*/
if ((mii->mii_ifp->if_flags & IFF_UP) == 0)
break;
mii_phy_set_media(sc);
break;
case MII_TICK:
/*
* Is the interface even up?
*/
if ((mii->mii_ifp->if_flags & IFF_UP) == 0)
return (0);
/*
* Only used for autonegotiation.
*/
if (IFM_SUBTYPE(ife->ifm_media) != IFM_AUTO)
break;
/*
* This PHY's autonegotiation doesn't need to be kicked.
*/
break;
}
/* Update the media status. */
acphy_status(sc);
/* Callback if something changed. */
mii_phy_update(sc, cmd);
return (0);
}
开发者ID:Gwenio,项目名称:DragonFlyBSD,代码行数:59,代码来源:acphy.c
示例20: pnphy_service
static int
pnphy_service(struct mii_softc *sc, struct mii_data *mii, int cmd)
{
struct ifmedia_entry *ife = mii->mii_media.ifm_cur;
switch (cmd) {
case MII_POLLSTAT:
break;
case MII_MEDIACHG:
/*
* If the interface is not up, don't do anything.
*/
if ((mii->mii_ifp->if_flags & IFF_UP) == 0)
break;
switch (IFM_SUBTYPE(ife->ifm_media)) {
case IFM_AUTO:
/* NWAY is busted on this chip */
case IFM_100_T4:
/*
* XXX Not supported as a manual setting right now.
*/
return (EINVAL);
case IFM_100_TX:
mii->mii_media_active = IFM_ETHER | IFM_100_TX;
if ((ife->ifm_media & IFM_GMASK) == IFM_FDX)
mii->mii_media_active |= IFM_FDX;
MIIBUS_STATCHG(sc->mii_dev);
return (0);
case IFM_10_T:
mii->mii_media_active = IFM_ETHER | IFM_10_T;
if ((ife->ifm_media & IFM_GMASK) == IFM_FDX)
mii->mii_media_active |= IFM_FDX;
MIIBUS_STATCHG(sc->mii_dev);
return (0);
default:
return (EINVAL);
}
break;
case MII_TICK:
/*
* Is the interface even up?
*/
if ((mii->mii_ifp->if_flags & IFF_UP) == 0)
return (0);
break;
}
/* Update the media status. */
pnphy_status(sc);
/* Callback if something changed. */
mii_phy_update(sc, cmd);
return (0);
}
开发者ID:BlueFireworks,项目名称:rtems-libbsd,代码行数:58,代码来源:pnphy.c
注:本文中的IFM_SUBTYPE函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论