OLD | NEW |
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) 2000 Silicon Integrated System Corporation | 4 * Copyright (C) 2000 Silicon Integrated System Corporation |
5 * Copyright (C) 2004 Tyan Corp <yhlu@tyan.com> | 5 * Copyright (C) 2004 Tyan Corp <yhlu@tyan.com> |
6 * Copyright (C) 2005-2008 coresystems GmbH | 6 * Copyright (C) 2005-2008 coresystems GmbH |
7 * Copyright (C) 2008,2009 Carl-Daniel Hailfinger | 7 * Copyright (C) 2008,2009 Carl-Daniel Hailfinger |
8 * | 8 * |
9 * This program is free software; you can redistribute it and/or modify | 9 * This program is free software; you can redistribute it and/or modify |
10 * it under the terms of the GNU General Public License as published by | 10 * it under the terms of the GNU General Public License as published by |
(...skipping 1298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1309 return 1; | 1309 return 1; |
1310 } | 1310 } |
1311 return 0; | 1311 return 0; |
1312 } | 1312 } |
1313 | 1313 |
1314 int read_flash_to_file(struct flashchip *flash, char *filename) | 1314 int read_flash_to_file(struct flashchip *flash, char *filename) |
1315 { | 1315 { |
1316 unsigned long size = flash->total_size * 1024; | 1316 unsigned long size = flash->total_size * 1024; |
1317 unsigned char *buf = calloc(size, sizeof(char)); | 1317 unsigned char *buf = calloc(size, sizeof(char)); |
1318 int ret = 0; | 1318 int ret = 0; |
| 1319 int i; |
1319 | 1320 |
1320 msg_cinfo("Reading flash... "); | 1321 msg_cinfo("Reading flash... "); |
1321 if (!buf) { | 1322 if (!buf) { |
1322 msg_gerr("Memory allocation failed!\n"); | 1323 msg_gerr("Memory allocation failed!\n"); |
1323 msg_cinfo("FAILED.\n"); | 1324 msg_cinfo("FAILED.\n"); |
1324 return 1; | 1325 return 1; |
1325 } | 1326 } |
| 1327 |
| 1328 /* To support partial read, fill buffer to all 0xFF at beginning to make |
| 1329 * debug easier. */ |
| 1330 memset(buf, 0xFF, size); |
| 1331 |
1326 if (!flash->read) { | 1332 if (!flash->read) { |
1327 msg_cerr("No read function available for this flash chip.\n"); | 1333 msg_cerr("No read function available for this flash chip.\n"); |
1328 ret = 1; | 1334 ret = 1; |
1329 goto out_free; | 1335 goto out_free; |
1330 } | 1336 } |
1331 » if (flash->read(flash, buf, 0, size)) { | 1337 |
| 1338 » /* First try to handle partial read case, rather than read the whole |
| 1339 » * flash, which is slow. */ |
| 1340 » ret = handle_partial_read(flash, buf, flash->read); |
| 1341 » if (ret < 0) { |
| 1342 » » msg_cerr("Partial read operation failed!\n"); |
| 1343 » » ret = 1; |
| 1344 » » goto out_free; |
| 1345 » } else if (ret > 0) { |
| 1346 » » /* Partial read has been handled, pass the whole flash read. */ |
| 1347 » } else if (flash->read(flash, buf, 0, size)) { |
1332 msg_cerr("Read operation failed!\n"); | 1348 msg_cerr("Read operation failed!\n"); |
1333 ret = 1; | 1349 ret = 1; |
1334 goto out_free; | 1350 goto out_free; |
1335 } | 1351 } |
1336 | 1352 |
1337 ret = write_buf_to_file(buf, flash->total_size * 1024, filename); | 1353 ret = write_buf_to_file(buf, flash->total_size * 1024, filename); |
1338 out_free: | 1354 out_free: |
1339 free(buf); | 1355 free(buf); |
1340 if (ret) | 1356 if (ret) |
1341 msg_cerr("FAILED."); | 1357 msg_cerr("FAILED."); |
(...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1980 out_nofree: | 1996 out_nofree: |
1981 chip_restore(); /* must be done before programmer_shutdown() */ | 1997 chip_restore(); /* must be done before programmer_shutdown() */ |
1982 /* | 1998 /* |
1983 * programmer_shutdown() call is moved to cli_mfg() in chromium os | 1999 * programmer_shutdown() call is moved to cli_mfg() in chromium os |
1984 * tree. This is because some operations, such as write protection, | 2000 * tree. This is because some operations, such as write protection, |
1985 * requires programmer_shutdown() but does not call doit(). | 2001 * requires programmer_shutdown() but does not call doit(). |
1986 */ | 2002 */ |
1987 // programmer_shutdown(); | 2003 // programmer_shutdown(); |
1988 return ret; | 2004 return ret; |
1989 } | 2005 } |
OLD | NEW |