Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: hwaccess.c

Issue 6877037: Revert MMIO space writes on shutdown as needed. (Closed) Base URL: ssh://gitrw.chromium.org:9222/flashrom.git@master
Patch Set: re-send to notice reviewer Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chipset_enable.c ('k') | ichspi.c » ('j') | nicintel_spi.c » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * This file is part of the flashrom project. 2 * This file is part of the flashrom project.
3 * 3 *
4 * Copyright (C) 2009,2010 Carl-Daniel Hailfinger 4 * Copyright (C) 2009,2010 Carl-Daniel Hailfinger
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or 8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version. 9 * (at your option) any later version.
10 * 10 *
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 191
192 uint16_t mmio_le_readw(void *addr) 192 uint16_t mmio_le_readw(void *addr)
193 { 193 {
194 return le_to_cpu16(mmio_readw(addr)); 194 return le_to_cpu16(mmio_readw(addr));
195 } 195 }
196 196
197 uint32_t mmio_le_readl(void *addr) 197 uint32_t mmio_le_readl(void *addr)
198 { 198 {
199 return le_to_cpu32(mmio_readl(addr)); 199 return le_to_cpu32(mmio_readl(addr));
200 } 200 }
201
202 enum mmio_write_type {
203 mmio_write_type_b,
204 mmio_write_type_w,
205 mmio_write_type_l,
206 };
207
208 struct undo_mmio_write_data {
209 void *addr;
210 int reg;
211 enum mmio_write_type type;
212 union {
213 uint8_t bdata;
214 uint16_t wdata;
215 uint32_t ldata;
216 };
217 };
218
219 void undo_mmio_write(void *p)
220 {
221 struct undo_mmio_write_data *data = p;
222 msg_pdbg("Restoring MMIO space at %p\n", data->addr);
223 switch (data->type) {
224 case mmio_write_type_b:
225 mmio_writeb(data->bdata, data->addr);
226 break;
227 case mmio_write_type_w:
228 mmio_writew(data->wdata, data->addr);
229 break;
230 case mmio_write_type_l:
231 mmio_writel(data->ldata, data->addr);
232 break;
233 }
234 /* p was allocated in register_undo_mmio_write. */
235 free(p);
236 }
237
238 #define register_undo_mmio_write(a, c) \
239 { \
240 struct undo_mmio_write_data *undo_mmio_write_data; \
241 undo_mmio_write_data = malloc(sizeof(struct undo_mmio_write_data)); \
242 undo_mmio_write_data->addr = a; \
243 undo_mmio_write_data->type = mmio_write_type_##c; \
244 undo_mmio_write_data->c##data = mmio_read##c(a); \
245 register_shutdown(undo_mmio_write, undo_mmio_write_data); \
246 }
247
248 #define register_undo_mmio_writeb(a) register_undo_mmio_write(a, b)
249 #define register_undo_mmio_writew(a) register_undo_mmio_write(a, w)
250 #define register_undo_mmio_writel(a) register_undo_mmio_write(a, l)
251
252 void rmmio_writeb(uint8_t val, void *addr)
253 {
254 register_undo_mmio_writeb(addr);
255 mmio_writeb(val, addr);
256 }
257
258 void rmmio_writew(uint16_t val, void *addr)
259 {
260 register_undo_mmio_writew(addr);
261 mmio_writew(val, addr);
262 }
263
264 void rmmio_writel(uint32_t val, void *addr)
265 {
266 register_undo_mmio_writel(addr);
267 mmio_writel(val, addr);
268 }
OLDNEW
« no previous file with comments | « chipset_enable.c ('k') | ichspi.c » ('j') | nicintel_spi.c » ('J')

Powered by Google App Engine
This is Rietveld 408576698