addrspace.hh revision 11313
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