123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- /*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2013 The ChromiumOS Authors
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
- #define LOG_REGBYTES 3
- #define REGBYTES (1 << LOG_REGBYTES)
- #define STORE sd
- #define HLS_SIZE 64
- #define MENTRY_FRAME_SIZE HLS_SIZE
- #define TOHOST_CMD(dev, cmd, payload) \
- (((uint64_t)(dev) << 56) | ((uint64_t)(cmd) << 48) | (uint64_t)(payload))
- #define FROMHOST_DEV(fromhost_value) ((uint64_t)(fromhost_value) >> 56)
- #define FROMHOST_CMD(fromhost_value) ((uint64_t)(fromhost_value) << 8 >> 56)
- #define FROMHOST_DATA(fromhost_value) ((uint64_t)(fromhost_value) << 16 >> 16)
- typedef struct {
- unsigned long base;
- unsigned long size;
- unsigned long node_id;
- } memory_block_info;
- typedef struct {
- unsigned long dev;
- unsigned long cmd;
- unsigned long data;
- unsigned long sbi_private_data;
- } sbi_device_message;
- typedef struct {
- sbi_device_message* device_request_queue_head;
- unsigned long device_request_queue_size;
- sbi_device_message* device_response_queue_head;
- sbi_device_message* device_response_queue_tail;
- int hart_id;
- int ipi_pending;
- } hls_t;
- #define MACHINE_STACK_TOP() ({ \
- register uintptr_t sp __asm__ ("sp"); \
- (void*)((sp + RISCV_PGSIZE) & -RISCV_PGSIZE); })
- // hart-local storage, at top of stack
- #define HLS() ((hls_t*)(MACHINE_STACK_TOP() - HLS_SIZE))
- #define OTHER_HLS(id) ((hls_t*)((void*)HLS() + RISCV_PGSIZE * ((id) - HLS()->hart_id)))
- #define MACHINE_STACK_SIZE RISCV_PGSIZE
- uintptr_t translate_address(uintptr_t vAddr);
- uintptr_t mcall_query_memory(uintptr_t id, memory_block_info *p);
- uintptr_t mcall_hart_id(void);
- uintptr_t htif_interrupt(uintptr_t mcause, uintptr_t* regs);
- uintptr_t mcall_console_putchar(uint8_t ch);
- void testPrint(void);
- uintptr_t mcall_dev_req(sbi_device_message *m);
- uintptr_t mcall_dev_resp(void);
- uintptr_t mcall_set_timer(unsigned long long when);
- uintptr_t mcall_clear_ipi(void);
- uintptr_t mcall_send_ipi(uintptr_t recipient);
- uintptr_t mcall_shutdown(void);
- void hls_init(uint32_t hart_id); // need to call this before launching linux
|