111313Sandreas.sandberg@arm.com/*
211313Sandreas.sandberg@arm.com * Copyright (c) 2016 ARM Limited
311313Sandreas.sandberg@arm.com * All rights reserved
411313Sandreas.sandberg@arm.com *
511313Sandreas.sandberg@arm.com * Licensed under the Apache License, Version 2.0 (the "License");
611313Sandreas.sandberg@arm.com * you may not use this file except in compliance with the License.
711313Sandreas.sandberg@arm.com * You may obtain a copy of the License at
811313Sandreas.sandberg@arm.com *
911313Sandreas.sandberg@arm.com *     http://www.apache.org/licenses/LICENSE-2.0
1011313Sandreas.sandberg@arm.com *
1111313Sandreas.sandberg@arm.com * Unless required by applicable law or agreed to in writing, software
1211313Sandreas.sandberg@arm.com * distributed under the License is distributed on an "AS IS" BASIS,
1311313Sandreas.sandberg@arm.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1411313Sandreas.sandberg@arm.com * See the License for the specific language governing permissions and
1511313Sandreas.sandberg@arm.com * limitations under the License.
1611313Sandreas.sandberg@arm.com *
1711313Sandreas.sandberg@arm.com * Authors: Andreas Sandberg
1811313Sandreas.sandberg@arm.com */
1911313Sandreas.sandberg@arm.com
2011313Sandreas.sandberg@arm.com#ifndef _LIBNOMALIMODEL_ADDRSPACE_HH
2111313Sandreas.sandberg@arm.com#define _LIBNOMALIMODEL_ADDRSPACE_HH
2211313Sandreas.sandberg@arm.com
2311313Sandreas.sandberg@arm.com#include <vector>
2411313Sandreas.sandberg@arm.com
2511313Sandreas.sandberg@arm.com#include "gpublock.hh"
2611313Sandreas.sandberg@arm.com#include "types.hh"
2711313Sandreas.sandberg@arm.com
2811313Sandreas.sandberg@arm.comnamespace NoMali {
2911313Sandreas.sandberg@arm.com
3011313Sandreas.sandberg@arm.comclass GPU;
3111313Sandreas.sandberg@arm.com
3211313Sandreas.sandberg@arm.comclass MMU;
3311313Sandreas.sandberg@arm.com
3411313Sandreas.sandberg@arm.com/**
3511313Sandreas.sandberg@arm.com * Midgard job slot implementation.
3611313Sandreas.sandberg@arm.com *
3711313Sandreas.sandberg@arm.com * A job slot is a part of a JobControl block that controls the state
3811313Sandreas.sandberg@arm.com * of one out of 16 active jobs. Each slot can contain one running job
3911313Sandreas.sandberg@arm.com * and a pending job.
4011313Sandreas.sandberg@arm.com */
4111313Sandreas.sandberg@arm.comclass AddrSpace
4211313Sandreas.sandberg@arm.com    : public GPUBlock
4311313Sandreas.sandberg@arm.com{
4411313Sandreas.sandberg@arm.com  public:
4511313Sandreas.sandberg@arm.com    AddrSpace(GPU &_gpu, MMU &_mmu, uint8_t slot_id);
4611313Sandreas.sandberg@arm.com    AddrSpace(AddrSpace &&rhs);
4711313Sandreas.sandberg@arm.com    virtual ~AddrSpace();
4811313Sandreas.sandberg@arm.com
4911313Sandreas.sandberg@arm.com    void writeReg(RegAddr idx, uint32_t value) override;
5011313Sandreas.sandberg@arm.com
5111313Sandreas.sandberg@arm.com  protected:
5211313Sandreas.sandberg@arm.com    /**
5311313Sandreas.sandberg@arm.com     * @{
5411313Sandreas.sandberg@arm.com     * @name Address Space Control
5511313Sandreas.sandberg@arm.com     */
5611313Sandreas.sandberg@arm.com
5711313Sandreas.sandberg@arm.com
5811313Sandreas.sandberg@arm.com    /** @} */
5911313Sandreas.sandberg@arm.com
6011313Sandreas.sandberg@arm.com    /**
6111313Sandreas.sandberg@arm.com     * @{
6211313Sandreas.sandberg@arm.com     * @name Job slot commands
6311313Sandreas.sandberg@arm.com     */
6411313Sandreas.sandberg@arm.com
6511313Sandreas.sandberg@arm.com    /**
6611313Sandreas.sandberg@arm.com     * Address space command dispatcher.
6711313Sandreas.sandberg@arm.com     *
6811313Sandreas.sandberg@arm.com     * This method is called whenever there is a write to the
6911313Sandreas.sandberg@arm.com     * ASn_COMMAND register. The method uses a lookup table to call
7011313Sandreas.sandberg@arm.com     * the right command handling method.
7111313Sandreas.sandberg@arm.com     *
7211313Sandreas.sandberg@arm.com     * @param cmd Command number (see the Midgard architecture
7311313Sandreas.sandberg@arm.com     * specification)
7411313Sandreas.sandberg@arm.com     */
7511313Sandreas.sandberg@arm.com    void asCommand(uint32_t cmd);
7611313Sandreas.sandberg@arm.com
7711313Sandreas.sandberg@arm.com    /**
7811313Sandreas.sandberg@arm.com     * Command handler for No-ops.
7911313Sandreas.sandberg@arm.com     *
8011313Sandreas.sandberg@arm.com     * @param cmd Command number (see the Midgard architecture
8111313Sandreas.sandberg@arm.com     * specification)
8211313Sandreas.sandberg@arm.com     */
8311313Sandreas.sandberg@arm.com    void cmdNop(uint32_t cmd);
8411313Sandreas.sandberg@arm.com
8511313Sandreas.sandberg@arm.com    void cmdUpdate(uint32_t cmd);
8611313Sandreas.sandberg@arm.com    void cmdLock(uint32_t cmd);
8711313Sandreas.sandberg@arm.com    void cmdUnlock(uint32_t cmd);
8811313Sandreas.sandberg@arm.com    void cmdFlushPT(uint32_t cmd);
8911313Sandreas.sandberg@arm.com    void cmdFlushMem(uint32_t cmd);
9011313Sandreas.sandberg@arm.com
9111313Sandreas.sandberg@arm.com    /** @} */
9211313Sandreas.sandberg@arm.com
9311313Sandreas.sandberg@arm.com    /** Address space ID */
9411313Sandreas.sandberg@arm.com    const uint8_t id;
9511313Sandreas.sandberg@arm.com
9611313Sandreas.sandberg@arm.com    /** Parent MMU block */
9711313Sandreas.sandberg@arm.com    MMU &mmu;
9811313Sandreas.sandberg@arm.com
9911313Sandreas.sandberg@arm.com  private:
10011313Sandreas.sandberg@arm.com    typedef void (AddrSpace::*cmd_t)(uint32_t);
10111313Sandreas.sandberg@arm.com
10211313Sandreas.sandberg@arm.com    /**
10311313Sandreas.sandberg@arm.com     * Mapping between command IDs and command handling methods.
10411313Sandreas.sandberg@arm.com     *
10511313Sandreas.sandberg@arm.com     * @note The order of this vector <i>MUST</i> correspond to the
10611313Sandreas.sandberg@arm.com     * address space command IDs in the Midgard architecture
10711313Sandreas.sandberg@arm.com     * specification.
10811313Sandreas.sandberg@arm.com     */
10911313Sandreas.sandberg@arm.com    static const std::vector<cmd_t> cmds;
11011313Sandreas.sandberg@arm.com};
11111313Sandreas.sandberg@arm.com
11211313Sandreas.sandberg@arm.com}
11311313Sandreas.sandberg@arm.com
11411313Sandreas.sandberg@arm.com#endif // _LIBNOMALIMODEL_ADDRSPACE_HH
115