void emac_update_hardware_stats(struct prueth_emac *emac)
{ struct prueth *prueth = emac->prueth; int slice = prueth_emac_slice(emac);
u32 base = stats_base[slice];
u32 tx_pkt_cnt = 0;
u32 val, reg; int i;
spin_lock(&prueth->stats_lock);
for (i = 0; i < ARRAY_SIZE(icssg_all_miig_stats); i++) { /* In MII mode TX lines are swapped inside ICSSG, so read Tx stats *fromslice1forport0andslice0forport1togetaccurateTx *statsforagivenport
*/ if (emac->phy_if == PHY_INTERFACE_MODE_MII &&
icssg_all_miig_stats[i].offset >= ICSSG_TX_PACKET_OFFSET &&
icssg_all_miig_stats[i].offset <= ICSSG_TX_BYTE_OFFSET)
base = stats_base[slice ^ 1];
regmap_read(prueth->miig_rt,
base + icssg_all_miig_stats[i].offset,
&val);
regmap_write(prueth->miig_rt,
base + icssg_all_miig_stats[i].offset,
val);
if (icssg_all_miig_stats[i].offset == ICSSG_TX_PACKET_OFFSET)
tx_pkt_cnt = val;
int emac_get_stat_by_name(struct prueth_emac *emac, char *stat_name)
{ int i;
for (i = 0; i < ARRAY_SIZE(icssg_all_miig_stats); i++) { if (!strcmp(icssg_all_miig_stats[i].name, stat_name)) return emac->stats[icssg_all_miig_stats[i].offset / sizeof(u32)];
}
if (emac->prueth->pa_stats) { for (i = 0; i < ARRAY_SIZE(icssg_all_pa_stats); i++) { if (!strcmp(icssg_all_pa_stats[i].name, stat_name)) return emac->pa_stats[i];
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.