110915Sandreas.sandberg@arm.com/*
210915Sandreas.sandberg@arm.com * Copyright (c) 2014-2015 ARM Limited
310915Sandreas.sandberg@arm.com * All rights reserved
410915Sandreas.sandberg@arm.com *
510915Sandreas.sandberg@arm.com * Licensed under the Apache License, Version 2.0 (the "License");
610915Sandreas.sandberg@arm.com * you may not use this file except in compliance with the License.
710915Sandreas.sandberg@arm.com * You may obtain a copy of the License at
810915Sandreas.sandberg@arm.com *
910915Sandreas.sandberg@arm.com *     http://www.apache.org/licenses/LICENSE-2.0
1010915Sandreas.sandberg@arm.com *
1110915Sandreas.sandberg@arm.com * Unless required by applicable law or agreed to in writing, software
1210915Sandreas.sandberg@arm.com * distributed under the License is distributed on an "AS IS" BASIS,
1310915Sandreas.sandberg@arm.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1410915Sandreas.sandberg@arm.com * See the License for the specific language governing permissions and
1510915Sandreas.sandberg@arm.com * limitations under the License.
1610915Sandreas.sandberg@arm.com *
1710915Sandreas.sandberg@arm.com * Authors: Andreas Sandberg
1810915Sandreas.sandberg@arm.com */
1910915Sandreas.sandberg@arm.com
2010915Sandreas.sandberg@arm.com#ifndef _LIBNOMALIMODEL_MALI_MIDGARD_HH
2110915Sandreas.sandberg@arm.com#define _LIBNOMALIMODEL_MALI_MIDGARD_HH
2210915Sandreas.sandberg@arm.com
2310915Sandreas.sandberg@arm.com#include "gpu.hh"
2410915Sandreas.sandberg@arm.com
2510915Sandreas.sandberg@arm.com#include "gpucontrol.hh"
2610915Sandreas.sandberg@arm.com#include "jobcontrol.hh"
2710915Sandreas.sandberg@arm.com#include "mmu.hh"
2810915Sandreas.sandberg@arm.com
2910915Sandreas.sandberg@arm.comnamespace NoMali {
3010915Sandreas.sandberg@arm.com
3110915Sandreas.sandberg@arm.com/**
3210915Sandreas.sandberg@arm.com * Base class for Midgard based GPUs
3310915Sandreas.sandberg@arm.com */
3410915Sandreas.sandberg@arm.comclass MaliMidgard
3510915Sandreas.sandberg@arm.com    : public GPU
3610915Sandreas.sandberg@arm.com{
3710915Sandreas.sandberg@arm.com  public:
3810915Sandreas.sandberg@arm.com    MaliMidgard(unsigned gpuType,
3910915Sandreas.sandberg@arm.com                unsigned major, unsigned minor, unsigned status);
4010915Sandreas.sandberg@arm.com    MaliMidgard(uint32_t gpuId);
4110915Sandreas.sandberg@arm.com    virtual ~MaliMidgard();
4210915Sandreas.sandberg@arm.com
4310915Sandreas.sandberg@arm.com
4410915Sandreas.sandberg@arm.com  protected:
4510915Sandreas.sandberg@arm.com    class GPUControlSpec
4610915Sandreas.sandberg@arm.com        : public GPUControl
4710915Sandreas.sandberg@arm.com    {
4810915Sandreas.sandberg@arm.com      public:
4910915Sandreas.sandberg@arm.com        GPUControlSpec(MaliMidgard &_gpu)
5010915Sandreas.sandberg@arm.com            : GPUControl(_gpu), midgard(_gpu) {}
5110915Sandreas.sandberg@arm.com
5210915Sandreas.sandberg@arm.com        void reset() override;
5310915Sandreas.sandberg@arm.com
5410915Sandreas.sandberg@arm.com      private:
5510915Sandreas.sandberg@arm.com        MaliMidgard &midgard;
5610915Sandreas.sandberg@arm.com    };
5710915Sandreas.sandberg@arm.com
5810915Sandreas.sandberg@arm.com    virtual void setupControlIdRegisters(RegVector &regs);
5910915Sandreas.sandberg@arm.com
6010915Sandreas.sandberg@arm.com    GPUControlSpec gpuControl;
6110915Sandreas.sandberg@arm.com    JobControl jobControl;
6210915Sandreas.sandberg@arm.com    MMU mmu;
6310915Sandreas.sandberg@arm.com
6410915Sandreas.sandberg@arm.com  private:
6510915Sandreas.sandberg@arm.com    const uint32_t gpuId;
6610915Sandreas.sandberg@arm.com};
6710915Sandreas.sandberg@arm.com
6810915Sandreas.sandberg@arm.com}
6910915Sandreas.sandberg@arm.com
7010915Sandreas.sandberg@arm.com#endif // _LIBNOMALIMODEL_MALI_MIDGARD_HH
71