coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
svc.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include "svc.h"
4 
5 #include <assert.h>
6 #include <bl_uapp/bl_syscall_public.h>
7 #include <psp_verstage.h>
8 #include <stddef.h>
9 
10 void svc_exit(uint32_t status)
11 {
12  uint32_t unused = 0;
13  SVC_CALL0(SVC_EXIT, unused);
14 }
15 
16 void svc_debug_print(const char *string)
17 {
18  uint32_t unused = 0;
19  SVC_CALL1(SVC_DEBUG_PRINT, (uint32_t)string, unused);
20 }
21 
23  uint32_t dword1, uint32_t dword2, uint32_t dword3)
24 {
25  uint32_t unused = 0;
26  SVC_CALL4(SVC_DEBUG_PRINT_EX, dword0, dword1, dword2, dword3, unused);
27 }
28 
30 {
31  uint32_t retval = 0;
32  SVC_CALL1(SVC_GET_BOOT_MODE, boot_mode, retval);
33  return retval;
34 }
35 
37 {
38  uint32_t unused = 0;
39  SVC_CALL1(SVC_DELAY_IN_MICRO_SECONDS, delay, unused);
40 }
41 
42 uint32_t svc_get_spi_rom_info(struct spirom_info *spi_rom_info)
43 {
44  uint32_t retval = 0;
45  SVC_CALL1(SVC_GET_SPI_INFO, (uint32_t)spi_rom_info, retval);
46  return retval;
47 }
48 
49 uint32_t svc_map_fch_dev(enum fch_io_device io_device,
50  uint32_t arg1, uint32_t arg2, void **io_device_axi_addr)
51 {
52  uint32_t retval = 0;
53  assert(io_device < FCH_IO_DEVICE_END);
54  SVC_CALL4(SVC_MAP_FCH_IO_DEVICE, io_device, arg1, arg2,
55  (uint32_t)io_device_axi_addr, retval);
56  return retval;
57 }
58 
59 uint32_t svc_unmap_fch_dev(enum fch_io_device io_device, void *io_device_axi_addr)
60 {
61  uint32_t retval = 0;
62  assert(io_device < FCH_IO_DEVICE_END);
63  SVC_CALL2(SVC_UNMAP_FCH_IO_DEVICE, (uint32_t)io_device,
64  (uint32_t)io_device_axi_addr, retval);
65  return retval;
66 }
67 
68 uint32_t svc_map_spi_rom(void *spi_rom_addr,
69  uint32_t size, void **spi_rom_axi_addr)
70 {
71  uint32_t retval = 0;
72  SVC_CALL3(SVC_MAP_SPIROM_DEVICE, spi_rom_addr, size,
73  (uint32_t)spi_rom_axi_addr, retval);
74  return retval;
75 }
76 
77 uint32_t svc_unmap_spi_rom(void *spi_rom_addr)
78 {
79  uint32_t retval = 0;
80  SVC_CALL1(SVC_UNMAP_SPIROM_DEVICE, (uint32_t)spi_rom_addr, retval);
81  return retval;
82 }
83 
85  uint32_t *bios_dir_offset)
86 {
87  uint32_t retval = 0;
88  SVC_CALL2(SVC_UPDATE_PSP_BIOS_DIR, (uint32_t)psp_dir_offset,
89  (uint32_t)bios_dir_offset, retval);
90  return retval;
91 }
92 
94 {
95  uint32_t retval = 0;
96  SVC_CALL2(SVC_COPY_DATA_FROM_UAPP, (uint32_t)address, size, retval);
97  return retval;
98 }
99 
100 uint32_t svc_read_timer_val(enum psp_timer_type type, uint64_t *counter_value)
101 {
102  unsigned int retval = 0;
103  assert(type < PSP_TIMER_TYPE_MAX);
104  SVC_CALL2(SVC_READ_TIMER_VAL, type, counter_value, retval);
105  return retval;
106 }
107 
109 {
110  unsigned int retval = 0;
111  assert(reset_type < RESET_TYPE_MAX);
112  SVC_CALL1(SVC_RESET_SYSTEM, reset_type, retval);
113  return retval;
114 }
115 
116 uint32_t svc_crypto_sha(struct sha_generic_data *sha_op, enum sha_operation_mode sha_mode)
117 {
118  uint32_t retval = 0;
119  SVC_CALL2(SVC_SHA, sha_op, sha_mode, retval);
120  return retval;
121 }
122 
123 uint32_t svc_modexp(struct mod_exp_params *mod_exp_param)
124 {
125  uint32_t retval = 0;
126  SVC_CALL1(SVC_MODEXP, mod_exp_param, retval);
127  return retval;
128 }
129 
130 uint32_t svc_ccp_dma(uint32_t spi_rom_offset, void *dest, uint32_t size)
131 {
132  uint32_t retval = 0;
133  SVC_CALL3(SVC_CCP_DMA, spi_rom_offset, dest, size, retval);
134  return retval;
135 }
136 
137 uint32_t svc_set_platform_boot_mode(enum chrome_platform_boot_mode boot_mode)
138 {
139  uint32_t retval = 0;
140  SVC_CALL1(SVC_SET_PLATFORM_BOOT_MODE, (uint32_t)boot_mode, retval);
141  return retval;
142 }
143 
145 {
146  uint32_t retval = 0;
147  SVC_CALL1(SVC_WRITE_POSTCODE, postcode, retval);
148  return retval;
149 }
reset_type
Definition: acpi_fm350gl.c:31
#define assert(statement)
Definition: assert.h:74
void svc_delay_in_usec(uint32_t delay)
Definition: svc.c:36
uint32_t svc_ccp_dma(uint32_t spi_rom_offset, void *dest, uint32_t size)
Definition: svc.c:130
uint32_t svc_crypto_sha(struct sha_generic_data *sha_op, enum sha_operation_mode sha_mode)
Definition: svc.c:116
uint32_t svc_get_spi_rom_info(struct spirom_info *spi_rom_info)
Definition: svc.c:42
uint32_t svc_modexp(struct mod_exp_params *mod_exp_param)
Definition: svc.c:123
uint32_t svc_read_timer_val(enum psp_timer_type type, uint64_t *counter_value)
Definition: svc.c:100
uint32_t svc_update_psp_bios_dir(uint32_t *psp_dir_offset, uint32_t *bios_dir_offset)
Definition: svc.c:84
uint32_t svc_set_platform_boot_mode(enum chrome_platform_boot_mode boot_mode)
Definition: svc.c:137
uint32_t svc_unmap_spi_rom(void *spi_rom_addr)
Definition: svc.c:77
uint32_t svc_reset_system(enum reset_type reset_type)
Definition: svc.c:108
uint32_t svc_write_postcode(uint32_t postcode)
Definition: svc.c:144
void svc_debug_print(const char *string)
Definition: svc.c:16
uint32_t svc_map_fch_dev(enum fch_io_device io_device, uint32_t arg1, uint32_t arg2, void **io_device_axi_addr)
Definition: svc.c:49
void svc_debug_print_ex(uint32_t dword0, uint32_t dword1, uint32_t dword2, uint32_t dword3)
Definition: svc.c:22
uint32_t svc_unmap_fch_dev(enum fch_io_device io_device, void *io_device_axi_addr)
Definition: svc.c:59
void svc_exit(uint32_t status)
Definition: svc.c:10
uint32_t svc_get_boot_mode(uint32_t *boot_mode)
Definition: svc.c:29
uint32_t svc_map_spi_rom(void *spi_rom_addr, uint32_t size, void **spi_rom_axi_addr)
Definition: svc.c:68
uint32_t svc_save_uapp_data(void *address, uint32_t size)
Definition: svc.c:93
#define SVC_CALL4(SVC_ID, R0, R1, R2, R3, Ret)
Definition: svc.h:6
#define SVC_CALL2(SVC_ID, R0, R1, Ret)
Definition: svc.h:30
#define SVC_CALL3(SVC_ID, R0, R1, R2, Ret)
Definition: svc.h:19
#define SVC_CALL1(SVC_ID, R0, Ret)
Definition: svc.h:40
#define SVC_CALL0(SVC_ID, Ret)
Definition: svc.h:49
void delay(unsigned int secs)
Definition: delay.c:8
uint64_t address
Definition: fw_cfg_if.h:0
unsigned int type
Definition: edid.c:57
unsigned int uint32_t
Definition: stdint.h:14
unsigned long long uint64_t
Definition: stdint.h:17
static struct sha_generic_data sha_op
Definition: vboot_crypto.c:14