text: // Copyright 2004-present Facebook. All Rights Reserved.
  
  #pragma once
  
  #include "fboss/agent/FbossError.h"
  #include "fboss/agent/hw/switch_asics/BroadcomAsic.h"
  
  namespace facebook::fboss {
  
  class Tomahawk3Asic : public BroadcomAsic {
   public:
    bool isSupported(Feature) const override;
    AsicType getAsicType() const override {
      return AsicType::ASIC_TYPE_TOMAHAWK3;
    }
    cfg::PortSpeed getMaxPortSpeed() const override {
      return cfg::PortSpeed::FOURHUNDREDG;
    }
    std::set<cfg::StreamType> getQueueStreamTypes(bool cpu) const override {
      if (cpu) {
        return {cfg::StreamType::MULTICAST};
      } else {
        return {cfg::StreamType::UNICAST};
      }
    }
    int getDefaultNumPortQueues(cfg::StreamType streamType, bool cpu)
        const override;
    uint32_t getMaxLabelStackDepth() const override {
      return 9;
    }
    uint64_t getMMUSizeBytes() const override {
      return 64 * 1024 * 1024;
    }
    uint64_t getDefaultReservedBytes(cfg::StreamType /*streamType*/, bool cpu)
        const override {
      return cpu ? 1778 : 0;
    }
    cfg::MMUScalingFactor getDefaultScalingFactor(
        cfg::StreamType /*streamType*/,
        bool /*cpu*/) const override {
      return cfg::MMUScalingFactor::TWO;
    }
    int getMaxNumLogicalPorts() const override {
      return 160;
    }
    uint16_t getMirrorTruncateSize() const override {
      return 254;
    }
    uint32_t getMaxWideEcmpSize() const override {
      return 512;
    }
  };
  
  } // namespace facebook::fboss
  