require "cfg.rb"
require "util.rb"


class MESI_CMP_directory_L2CacheController < CacheController
  attr :cache

  def initialize(obj_name, mach_type, cache)
    super(obj_name, mach_type, [cache])
    @cache = cache
  end
  def argv()
    vec = super()
    vec += " cache " + cache.obj_name
    vec += " l2_request_latency "+request_latency.to_s 
    vec += " l2_response_latency "+response_latency.to_s
    vec += " to_l1_latency "+to_L1_latency.to_s
    return vec
  end

end

class MESI_CMP_directory_L1CacheController < L1CacheController
  attr :icache, :dcache
  attr :num_l2_controllers

  def initialize(obj_name, mach_type, icache, dcache, sequencer, num_l2_controllers)
    super(obj_name, mach_type, [icache, dcache], sequencer)
    @icache = icache
    @dcache = dcache
    @num_l2_controllers = num_l2_controllers
  end

  def argv()
    num_select_bits = log_int(num_l2_controllers)
    num_block_bits = log_int(RubySystem.block_size_bytes)
    l2_select_low_bit = num_block_bits

    vec = super()
    vec += " icache " + @icache.obj_name
    vec += " dcache " + @dcache.obj_name   
    vec += " l1_request_latency "+l1_request_latency.to_s 
    vec += " l1_response_latency "+l1_response_latency.to_s
    vec += " to_l2_latency "+to_L2_latency.to_s
    vec += " l2_select_low_bit " + l2_select_low_bit.to_s
    vec += " l2_select_num_bits " + num_select_bits.to_s
    return vec
  end

end

class MESI_CMP_directory_DMAController < DMAController
  def initialize(obj_name, mach_type, dma_sequencer)
    super(obj_name, mach_type, dma_sequencer)
  end
  def argv()
    vec = super
    vec += " request_latency "+request_latency.to_s
    return vec
  end
end


class MESI_CMP_directory_DirectoryController < DirectoryController
  def initialize(obj_name, mach_type, directory, memory_control) 
    super(obj_name, mach_type, directory, memory_control)
  end
  def argv()
    vec = super()
    vec += " to_mem_ctrl_latency "+to_mem_ctrl_latency.to_s 
    vec += " directory_latency "+directory_latency.to_s
  end

end
require "defaults.rb"
