void rge_chip_start(rge_t *rgep) { /* * Clear statistics */ bzero(&rgep->stats, sizeof (rge_stats_t)); DMA_ZERO(rgep->dma_area_stats); /* * Start transmit/receive */ rge_reg_set8(rgep, RT_COMMAND_REG, RT_COMMAND_RX_ENABLE | RT_COMMAND_TX_ENABLE); /* * Enable interrupt */ rgep->int_mask = RGE_INT_MASK; rge_reg_put16(rgep, INT_MASK_REG, rgep->int_mask); /* * All done! */ rgep->rge_chip_state = RGE_CHIP_RUNNING; }
void bge_init_kstats(bge_t *bgep, int instance) { kstat_t *ksp; BGE_TRACE(("bge_init_kstats($%p, %d)", (void *)bgep, instance)); if (bgep->chipid.statistic_type == BGE_STAT_BLK) { DMA_ZERO(bgep->statistics); bgep->bge_kstats[BGE_KSTAT_RAW] = ksp = kstat_create(BGE_DRIVER_NAME, instance, "raw_statistics", "net", KSTAT_TYPE_RAW, sizeof (bge_statistics_t), KSTAT_FLAG_VIRTUAL); if (ksp != NULL) { ksp->ks_data = DMA_VPTR(bgep->statistics); kstat_install(ksp); } bgep->bge_kstats[BGE_KSTAT_STATS] = bge_setup_named_kstat(bgep, instance, "statistics", bge_statistics, sizeof (bge_statistics), bge_statistics_update); } else { bgep->bge_kstats[BGE_KSTAT_STATS] = bge_setup_named_kstat(bgep, instance, "statistics", bge_stat_val, sizeof (bge_stat_val), bge_statistics_update); } bgep->bge_kstats[BGE_KSTAT_CHIPID] = bge_setup_named_kstat(bgep, instance, "chipid", bge_chipid, sizeof (bge_chipid), bge_chipid_update); bgep->bge_kstats[BGE_KSTAT_DRIVER] = bge_setup_named_kstat(bgep, instance, "driverinfo", bge_driverinfo, sizeof (bge_driverinfo), bge_driverinfo_update); if (bgep->chipid.flags & CHIP_FLAG_SERDES) bgep->bge_kstats[BGE_KSTAT_PHYS] = bge_setup_named_kstat(bgep, instance, "serdes", bge_serdes, sizeof (bge_serdes), bge_serdes_update); else bgep->bge_kstats[BGE_KSTAT_PHYS] = bge_setup_named_kstat(bgep, instance, "phydata", bge_phydata, sizeof (bge_phydata), bge_phydata_update); }