spapr_nvram.c (3b35d4542c8537a9269f6372df531ced6c960084) spapr_nvram.c (a9262f551eba44d4d0f9e396d7124c059a93e204)
1/*
2 * QEMU sPAPR NVRAM emulation
3 *
4 * Copyright (C) 2012 David Gibson, IBM Corporation.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights

--- 116 unchanged lines hidden (view full) ---

125 rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);
126 return;
127 }
128
129 membuf = cpu_physical_memory_map(buffer, &len, false);
130
131 ret = 0;
132 if (nvram->blk) {
1/*
2 * QEMU sPAPR NVRAM emulation
3 *
4 * Copyright (C) 2012 David Gibson, IBM Corporation.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights

--- 116 unchanged lines hidden (view full) ---

125 rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);
126 return;
127 }
128
129 membuf = cpu_physical_memory_map(buffer, &len, false);
130
131 ret = 0;
132 if (nvram->blk) {
133 ret = blk_pwrite(nvram->blk, offset, membuf, len, 0);
133 ret = blk_pwrite(nvram->blk, offset, len, membuf, 0);
134 }
135
136 assert(nvram->buf);
137 memcpy(nvram->buf + offset, membuf, len);
138
139 cpu_physical_memory_unmap(membuf, len, 0, len);
140
141 rtas_st(rets, 0, (ret < 0) ? RTAS_OUT_HW_ERROR : RTAS_OUT_SUCCESS);

--- 32 unchanged lines hidden (view full) ---

174 error_setg(errp,
175 "spapr-nvram must be between %" PRId64
176 " and %" PRId64 " bytes in size",
177 MIN_NVRAM_SIZE, MAX_NVRAM_SIZE);
178 return;
179 }
180
181 if (nvram->blk) {
134 }
135
136 assert(nvram->buf);
137 memcpy(nvram->buf + offset, membuf, len);
138
139 cpu_physical_memory_unmap(membuf, len, 0, len);
140
141 rtas_st(rets, 0, (ret < 0) ? RTAS_OUT_HW_ERROR : RTAS_OUT_SUCCESS);

--- 32 unchanged lines hidden (view full) ---

174 error_setg(errp,
175 "spapr-nvram must be between %" PRId64
176 " and %" PRId64 " bytes in size",
177 MIN_NVRAM_SIZE, MAX_NVRAM_SIZE);
178 return;
179 }
180
181 if (nvram->blk) {
182 ret = blk_pread(nvram->blk, 0, nvram->buf, nvram->size, 0);
182 ret = blk_pread(nvram->blk, 0, nvram->size, nvram->buf, 0);
183
184 if (ret < 0) {
185 error_setg(errp, "can't read spapr-nvram contents");
186 return;
187 }
188 } else if (nb_prom_envs > 0) {
189 /* Create a system partition to pass the -prom-env variables */
190 chrp_nvram_create_system_partition(nvram->buf, MIN_NVRAM_SIZE / 4,

--- 28 unchanged lines hidden (view full) ---

219{
220 SpaprNvram *nvram = opaque;
221
222 /* This is called after bdrv_activate_all. */
223
224 qemu_del_vm_change_state_handler(nvram->vmstate);
225 nvram->vmstate = NULL;
226
183
184 if (ret < 0) {
185 error_setg(errp, "can't read spapr-nvram contents");
186 return;
187 }
188 } else if (nb_prom_envs > 0) {
189 /* Create a system partition to pass the -prom-env variables */
190 chrp_nvram_create_system_partition(nvram->buf, MIN_NVRAM_SIZE / 4,

--- 28 unchanged lines hidden (view full) ---

219{
220 SpaprNvram *nvram = opaque;
221
222 /* This is called after bdrv_activate_all. */
223
224 qemu_del_vm_change_state_handler(nvram->vmstate);
225 nvram->vmstate = NULL;
226
227 blk_pwrite(nvram->blk, 0, nvram->buf, nvram->size, 0);
227 blk_pwrite(nvram->blk, 0, nvram->size, nvram->buf, 0);
228}
229
230static int spapr_nvram_post_load(void *opaque, int version_id)
231{
232 SpaprNvram *nvram = VIO_SPAPR_NVRAM(opaque);
233
234 if (nvram->blk) {
235 nvram->vmstate = qemu_add_vm_change_state_handler(postload_update_cb,

--- 55 unchanged lines hidden ---
228}
229
230static int spapr_nvram_post_load(void *opaque, int version_id)
231{
232 SpaprNvram *nvram = VIO_SPAPR_NVRAM(opaque);
233
234 if (nvram->blk) {
235 nvram->vmstate = qemu_add_vm_change_state_handler(postload_update_cb,

--- 55 unchanged lines hidden ---