blob: 7c93ad2574e5eac6821f3e0e26b634eec62909c9 [file] [log] [blame] [edit]
/*
* Copyright 2018 The Hafnium Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include "hf/arch/cpu.h"
/* TODO: Fix alignment such that `cpu` structs are in different cache lines. */
struct cpu {
/** CPU identifier. Doesn't have to be contiguous. */
cpu_id_t id;
/** Pointer to bottom of the stack. */
void *stack_bottom;
/** See api.c for the partial ordering on locks. */
struct spinlock lock;
/** Determines whether the CPU is currently on. */
bool is_on;
};
void cpu_module_init(const cpu_id_t *cpu_ids, size_t count);
size_t cpu_index(struct cpu *c);
bool cpu_on(struct cpu *c, ipaddr_t entry, uintreg_t arg);
void cpu_off(struct cpu *c);
struct cpu *cpu_find(cpu_id_t id);
uint8_t *cpu_get_buffer(struct cpu *c);
uint32_t cpu_get_buffer_size(struct cpu *c);