jobcontrol.hh revision 10915
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_JOBCONTROL_HH 2110915Sandreas.sandberg@arm.com#define _LIBNOMALIMODEL_JOBCONTROL_HH 2210915Sandreas.sandberg@arm.com 2310915Sandreas.sandberg@arm.com#include <vector> 2410915Sandreas.sandberg@arm.com 2510915Sandreas.sandberg@arm.com#include "gpublock.hh" 2610915Sandreas.sandberg@arm.com#include "jobslot.hh" 2710915Sandreas.sandberg@arm.com#include "types.hh" 2810915Sandreas.sandberg@arm.com 2910915Sandreas.sandberg@arm.comnamespace NoMali { 3010915Sandreas.sandberg@arm.com 3110915Sandreas.sandberg@arm.comclass GPU; 3210915Sandreas.sandberg@arm.com 3310915Sandreas.sandberg@arm.com/** 3410915Sandreas.sandberg@arm.com * Minimal GPU job control implementation. 3510915Sandreas.sandberg@arm.com * 3610915Sandreas.sandberg@arm.com * This class implements the job control block of a Midgard style 3710915Sandreas.sandberg@arm.com * GPU. The job control block mainly coordinates interrupt delivery 3810915Sandreas.sandberg@arm.com * and register mappings for the different job slots within the 3910915Sandreas.sandberg@arm.com * block. The actual job slots are implemented by the JobSlot class. 4010915Sandreas.sandberg@arm.com * 4110915Sandreas.sandberg@arm.com * @see JobSlot 4210915Sandreas.sandberg@arm.com */ 4310915Sandreas.sandberg@arm.comclass JobControl 4410915Sandreas.sandberg@arm.com : public GPUBlockInt 4510915Sandreas.sandberg@arm.com{ 4610915Sandreas.sandberg@arm.com public: 4710915Sandreas.sandberg@arm.com JobControl(GPU &_gpu); 4810915Sandreas.sandberg@arm.com virtual ~JobControl(); 4910915Sandreas.sandberg@arm.com 5010915Sandreas.sandberg@arm.com uint32_t readReg(RegAddr idx) override; 5110915Sandreas.sandberg@arm.com void writeReg(RegAddr idx, uint32_t value) override; 5210915Sandreas.sandberg@arm.com 5310915Sandreas.sandberg@arm.com uint32_t readRegRaw(RegAddr idx) override; 5410915Sandreas.sandberg@arm.com void writeRegRaw(RegAddr idx, uint32_t value) override; 5510915Sandreas.sandberg@arm.com 5610915Sandreas.sandberg@arm.com /** 5710915Sandreas.sandberg@arm.com * Signal job done. 5810915Sandreas.sandberg@arm.com * 5910915Sandreas.sandberg@arm.com * Calling this method raises the job done interrupt for a 6010915Sandreas.sandberg@arm.com * specific job slot. This is typically called from the job slot 6110915Sandreas.sandberg@arm.com * running the job chain. 6210915Sandreas.sandberg@arm.com * 6310915Sandreas.sandberg@arm.com * @param slot Job slot number. 6410915Sandreas.sandberg@arm.com */ 6510915Sandreas.sandberg@arm.com void jobDone(uint8_t slot); 6610915Sandreas.sandberg@arm.com /** 6710915Sandreas.sandberg@arm.com * Signal job failed. 6810915Sandreas.sandberg@arm.com * 6910915Sandreas.sandberg@arm.com * Calling this method raises the job failed interrupt for a 7010915Sandreas.sandberg@arm.com * specific job slot. This is typically called from the job slot 7110915Sandreas.sandberg@arm.com * running the job chain. 7210915Sandreas.sandberg@arm.com * 7310915Sandreas.sandberg@arm.com * @param slot Job slot number. 7410915Sandreas.sandberg@arm.com */ 7510915Sandreas.sandberg@arm.com void jobFailed(uint8_t slot); 7610915Sandreas.sandberg@arm.com 7710915Sandreas.sandberg@arm.com protected: 7810915Sandreas.sandberg@arm.com /** 7910915Sandreas.sandberg@arm.com * Update the state of the job slot state snapshot register. 8010915Sandreas.sandberg@arm.com * 8110915Sandreas.sandberg@arm.com * @param jobs Bit mask representing which job slots to update. 8210915Sandreas.sandberg@arm.com */ 8310915Sandreas.sandberg@arm.com void updateJsState(uint16_t jobs); 8410915Sandreas.sandberg@arm.com 8510915Sandreas.sandberg@arm.com void onInterrupt(int set) override; 8610915Sandreas.sandberg@arm.com 8710915Sandreas.sandberg@arm.com /** Job slots belonging to this job control block */ 8810915Sandreas.sandberg@arm.com std::vector<JobSlot> slots; 8910915Sandreas.sandberg@arm.com}; 9010915Sandreas.sandberg@arm.com 9110915Sandreas.sandberg@arm.com} 9210915Sandreas.sandberg@arm.com 9310915Sandreas.sandberg@arm.com#endif // _LIBNOMALIMODEL_JOBCONTROL_HH 94