Exemplo n.º 1
0
        public GaislerMIC(Machine machine, uint totalNumberCPUs = 1)
        {
            this.numberOfProcessors = totalNumberCPUs;
            if(totalNumberCPUs > maxNumberOfProcessors)
            {
                this.Log(LogLevel.Warning, "Registration with unsupported  number of CPUs, defaulting to maximum {0:X]", maxNumberOfProcessors);
                this.numberOfProcessors = maxNumberOfProcessors;
            }
            registers = new deviceRegisters();
            registers.MultiprocessorStatus |= (((numberOfProcessors-1) << 28) & 0xF0000000);
            // Set Broadcast Available bit in MultiprocessorStatus register if ncpu > 1
            if(this.numberOfProcessors > 1)
            {
                registers.MultiprocessorStatus |= (1u << 27);
            }
            irqs = new GPIO[numberOfProcessors];
            resets = new GPIO[numberOfProcessors];
            runs = new GPIO[numberOfProcessors];
            set_nmi_interrupt = new bool[numberOfProcessors];
            for(var i = 0; i < numberOfProcessors; i++)
            {
                irqs[i] = new GPIO();
                resets[i] = new GPIO();
                runs[i] = new GPIO();
                interrupts[i] = new Dictionary<int, int>();
                set_nmi_interrupt[i] = false;
            }

            Connections = new IGPIORedirector((int)numberOfProcessors, HandleIRQConnect);
            Reset();
        }
Exemplo n.º 2
0
        public GaislerMIC(Machine machine, uint totalNumberCPUs = 1)
        {
            this.numberOfProcessors = totalNumberCPUs;
            if (totalNumberCPUs > maxNumberOfProcessors)
            {
                this.Log(LogLevel.Warning, "Registration with unsupported  number of CPUs, defaulting to maximum {0:X]", maxNumberOfProcessors);
                this.numberOfProcessors = maxNumberOfProcessors;
            }
            registers = new deviceRegisters();
            registers.MultiprocessorStatus |= (((numberOfProcessors - 1) << 28) & 0xF0000000);
            // Set Broadcast Available bit in MultiprocessorStatus register if ncpu > 1
            if (this.numberOfProcessors > 1)
            {
                registers.MultiprocessorStatus |= (1u << 27);
            }
            irqs              = new GPIO[numberOfProcessors];
            resets            = new GPIO[numberOfProcessors];
            runs              = new GPIO[numberOfProcessors];
            set_nmi_interrupt = new bool[numberOfProcessors];
            for (var i = 0; i < numberOfProcessors; i++)
            {
                irqs[i]              = new GPIO();
                resets[i]            = new GPIO();
                runs[i]              = new GPIO();
                interrupts[i]        = new Dictionary <int, int>();
                set_nmi_interrupt[i] = false;
            }

            Connections = new IGPIORedirector((int)numberOfProcessors, HandleIRQConnect);
            Reset();
        }