diff options
| author | Lv Zheng <lv.zheng@intel.com> | 2014-07-07 22:07:46 -0400 |
|---|---|---|
| committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2014-07-08 08:22:27 -0400 |
| commit | dcaff16df2750a400db1983754542f2cc6bf4e93 (patch) | |
| tree | 3f2f141e7f9dfa89ac4577933357db10bd34f8d6 /tools | |
| parent | 135610f792addb71af7be0e00aa7486429bf7a37 (diff) | |
ACPICA: acpidump: Replace file IOs with new APIs to improve portability
The new APIs are enabled to offer a portable layer to access files:
1. acpi_os_XXX_file_XXX: Wrapper of fopen/fclose/fread/fwrite
2. acpi_os_printf: Wrapper of printf
3. acpi_log_error: Wrapper of fprintf(stderr)
This patch deploys such mechanisms to acpidump to improve the portability
of this tool. Lv Zheng.
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/power/acpi/tools/acpidump/acpidump.h | 2 | ||||
| -rw-r--r-- | tools/power/acpi/tools/acpidump/apdump.c | 65 | ||||
| -rw-r--r-- | tools/power/acpi/tools/acpidump/apfiles.c | 47 | ||||
| -rw-r--r-- | tools/power/acpi/tools/acpidump/apmain.c | 27 |
4 files changed, 69 insertions, 72 deletions
diff --git a/tools/power/acpi/tools/acpidump/acpidump.h b/tools/power/acpi/tools/acpidump/acpidump.h index 8efc84824308..a2d37d610639 100644 --- a/tools/power/acpi/tools/acpidump/acpidump.h +++ b/tools/power/acpi/tools/acpidump/acpidump.h | |||
| @@ -68,7 +68,7 @@ EXTERN u8 INIT_GLOBAL(gbl_verbose_mode, FALSE); | |||
| 68 | EXTERN u8 INIT_GLOBAL(gbl_binary_mode, FALSE); | 68 | EXTERN u8 INIT_GLOBAL(gbl_binary_mode, FALSE); |
| 69 | EXTERN u8 INIT_GLOBAL(gbl_dump_customized_tables, FALSE); | 69 | EXTERN u8 INIT_GLOBAL(gbl_dump_customized_tables, FALSE); |
| 70 | EXTERN u8 INIT_GLOBAL(gbl_do_not_dump_xsdt, FALSE); | 70 | EXTERN u8 INIT_GLOBAL(gbl_do_not_dump_xsdt, FALSE); |
| 71 | EXTERN FILE INIT_GLOBAL(*gbl_output_file, NULL); | 71 | EXTERN ACPI_FILE INIT_GLOBAL(gbl_output_file, NULL); |
| 72 | EXTERN char INIT_GLOBAL(*gbl_output_filename, NULL); | 72 | EXTERN char INIT_GLOBAL(*gbl_output_filename, NULL); |
| 73 | EXTERN u64 INIT_GLOBAL(gbl_rsdp_base, 0); | 73 | EXTERN u64 INIT_GLOBAL(gbl_rsdp_base, 0); |
| 74 | 74 | ||
diff --git a/tools/power/acpi/tools/acpidump/apdump.c b/tools/power/acpi/tools/acpidump/apdump.c index ccb6262829d6..34fa5f25be39 100644 --- a/tools/power/acpi/tools/acpidump/apdump.c +++ b/tools/power/acpi/tools/acpidump/apdump.c | |||
| @@ -69,17 +69,16 @@ u8 ap_is_valid_header(struct acpi_table_header *table) | |||
| 69 | /* Make sure signature is all ASCII and a valid ACPI name */ | 69 | /* Make sure signature is all ASCII and a valid ACPI name */ |
| 70 | 70 | ||
| 71 | if (!acpi_ut_valid_acpi_name(table->signature)) { | 71 | if (!acpi_ut_valid_acpi_name(table->signature)) { |
| 72 | fprintf(stderr, | 72 | acpi_log_error("Table signature (0x%8.8X) is invalid\n", |
| 73 | "Table signature (0x%8.8X) is invalid\n", | 73 | *(u32 *)table->signature); |
| 74 | *(u32 *)table->signature); | ||
| 75 | return (FALSE); | 74 | return (FALSE); |
| 76 | } | 75 | } |
| 77 | 76 | ||
| 78 | /* Check for minimum table length */ | 77 | /* Check for minimum table length */ |
| 79 | 78 | ||
| 80 | if (table->length < sizeof(struct acpi_table_header)) { | 79 | if (table->length < sizeof(struct acpi_table_header)) { |
| 81 | fprintf(stderr, "Table length (0x%8.8X) is invalid\n", | 80 | acpi_log_error("Table length (0x%8.8X) is invalid\n", |
| 82 | table->length); | 81 | table->length); |
| 83 | return (FALSE); | 82 | return (FALSE); |
| 84 | } | 83 | } |
| 85 | } | 84 | } |
| @@ -116,8 +115,8 @@ u8 ap_is_valid_checksum(struct acpi_table_header *table) | |||
| 116 | } | 115 | } |
| 117 | 116 | ||
| 118 | if (ACPI_FAILURE(status)) { | 117 | if (ACPI_FAILURE(status)) { |
| 119 | fprintf(stderr, "%4.4s: Warning: wrong checksum in table\n", | 118 | acpi_log_error("%4.4s: Warning: wrong checksum in table\n", |
| 120 | table->signature); | 119 | table->signature); |
| 121 | } | 120 | } |
| 122 | 121 | ||
| 123 | return (AE_OK); | 122 | return (AE_OK); |
| @@ -196,12 +195,12 @@ ap_dump_table_buffer(struct acpi_table_header *table, | |||
| 196 | * Note: simplest to just always emit a 64-bit address. acpi_xtract | 195 | * Note: simplest to just always emit a 64-bit address. acpi_xtract |
| 197 | * utility can handle this. | 196 | * utility can handle this. |
| 198 | */ | 197 | */ |
| 199 | printf("%4.4s @ 0x%8.8X%8.8X\n", table->signature, | 198 | acpi_os_printf("%4.4s @ 0x%8.8X%8.8X\n", table->signature, |
| 200 | ACPI_FORMAT_UINT64(address)); | 199 | ACPI_FORMAT_UINT64(address)); |
| 201 | 200 | ||
| 202 | acpi_ut_dump_buffer(ACPI_CAST_PTR(u8, table), table_length, | 201 | acpi_ut_dump_buffer(ACPI_CAST_PTR(u8, table), table_length, |
| 203 | DB_BYTE_DISPLAY, 0); | 202 | DB_BYTE_DISPLAY, 0); |
| 204 | printf("\n"); | 203 | acpi_os_printf("\n"); |
| 205 | return (0); | 204 | return (0); |
| 206 | } | 205 | } |
| 207 | 206 | ||
| @@ -239,14 +238,14 @@ int ap_dump_all_tables(void) | |||
| 239 | if (status == AE_LIMIT) { | 238 | if (status == AE_LIMIT) { |
| 240 | return (0); | 239 | return (0); |
| 241 | } else if (i == 0) { | 240 | } else if (i == 0) { |
| 242 | fprintf(stderr, | 241 | acpi_log_error |
| 243 | "Could not get ACPI tables, %s\n", | 242 | ("Could not get ACPI tables, %s\n", |
| 244 | acpi_format_exception(status)); | 243 | acpi_format_exception(status)); |
| 245 | return (-1); | 244 | return (-1); |
| 246 | } else { | 245 | } else { |
| 247 | fprintf(stderr, | 246 | acpi_log_error |
| 248 | "Could not get ACPI table at index %u, %s\n", | 247 | ("Could not get ACPI table at index %u, %s\n", |
| 249 | i, acpi_format_exception(status)); | 248 | i, acpi_format_exception(status)); |
| 250 | continue; | 249 | continue; |
| 251 | } | 250 | } |
| 252 | } | 251 | } |
| @@ -288,17 +287,17 @@ int ap_dump_table_by_address(char *ascii_address) | |||
| 288 | 287 | ||
| 289 | status = acpi_ut_strtoul64(ascii_address, 0, &long_address); | 288 | status = acpi_ut_strtoul64(ascii_address, 0, &long_address); |
| 290 | if (ACPI_FAILURE(status)) { | 289 | if (ACPI_FAILURE(status)) { |
| 291 | fprintf(stderr, "%s: Could not convert to a physical address\n", | 290 | acpi_log_error("%s: Could not convert to a physical address\n", |
| 292 | ascii_address); | 291 | ascii_address); |
| 293 | return (-1); | 292 | return (-1); |
| 294 | } | 293 | } |
| 295 | 294 | ||
| 296 | address = (acpi_physical_address) long_address; | 295 | address = (acpi_physical_address) long_address; |
| 297 | status = acpi_os_get_table_by_address(address, &table); | 296 | status = acpi_os_get_table_by_address(address, &table); |
| 298 | if (ACPI_FAILURE(status)) { | 297 | if (ACPI_FAILURE(status)) { |
| 299 | fprintf(stderr, "Could not get table at 0x%8.8X%8.8X, %s\n", | 298 | acpi_log_error("Could not get table at 0x%8.8X%8.8X, %s\n", |
| 300 | ACPI_FORMAT_UINT64(address), | 299 | ACPI_FORMAT_UINT64(address), |
| 301 | acpi_format_exception(status)); | 300 | acpi_format_exception(status)); |
| 302 | return (-1); | 301 | return (-1); |
| 303 | } | 302 | } |
| 304 | 303 | ||
| @@ -330,9 +329,9 @@ int ap_dump_table_by_name(char *signature) | |||
| 330 | int table_status; | 329 | int table_status; |
| 331 | 330 | ||
| 332 | if (ACPI_STRLEN(signature) != ACPI_NAME_SIZE) { | 331 | if (ACPI_STRLEN(signature) != ACPI_NAME_SIZE) { |
| 333 | fprintf(stderr, | 332 | acpi_log_error |
| 334 | "Invalid table signature [%s]: must be exactly 4 characters\n", | 333 | ("Invalid table signature [%s]: must be exactly 4 characters\n", |
| 335 | signature); | 334 | signature); |
| 336 | return (-1); | 335 | return (-1); |
| 337 | } | 336 | } |
| 338 | 337 | ||
| @@ -362,9 +361,9 @@ int ap_dump_table_by_name(char *signature) | |||
| 362 | return (0); | 361 | return (0); |
| 363 | } | 362 | } |
| 364 | 363 | ||
| 365 | fprintf(stderr, | 364 | acpi_log_error |
| 366 | "Could not get ACPI table with signature [%s], %s\n", | 365 | ("Could not get ACPI table with signature [%s], %s\n", |
| 367 | local_signature, acpi_format_exception(status)); | 366 | local_signature, acpi_format_exception(status)); |
| 368 | return (-1); | 367 | return (-1); |
| 369 | } | 368 | } |
| 370 | 369 | ||
| @@ -409,16 +408,16 @@ int ap_dump_table_from_file(char *pathname) | |||
| 409 | /* File must be at least as long as the table length */ | 408 | /* File must be at least as long as the table length */ |
| 410 | 409 | ||
| 411 | if (table->length > file_size) { | 410 | if (table->length > file_size) { |
| 412 | fprintf(stderr, | 411 | acpi_log_error |
| 413 | "Table length (0x%X) is too large for input file (0x%X) %s\n", | 412 | ("Table length (0x%X) is too large for input file (0x%X) %s\n", |
| 414 | table->length, file_size, pathname); | 413 | table->length, file_size, pathname); |
| 415 | goto exit; | 414 | goto exit; |
| 416 | } | 415 | } |
| 417 | 416 | ||
| 418 | if (gbl_verbose_mode) { | 417 | if (gbl_verbose_mode) { |
| 419 | fprintf(stderr, | 418 | acpi_log_error |
| 420 | "Input file: %s contains table [%4.4s], 0x%X (%u) bytes\n", | 419 | ("Input file: %s contains table [%4.4s], 0x%X (%u) bytes\n", |
| 421 | pathname, table->signature, file_size, file_size); | 420 | pathname, table->signature, file_size, file_size); |
| 422 | } | 421 | } |
| 423 | 422 | ||
| 424 | table_status = ap_dump_table_buffer(table, 0, 0); | 423 | table_status = ap_dump_table_buffer(table, 0, 0); |
diff --git a/tools/power/acpi/tools/acpidump/apfiles.c b/tools/power/acpi/tools/acpidump/apfiles.c index 1d12b9d3d44e..5699ca1d0922 100644 --- a/tools/power/acpi/tools/acpidump/apfiles.c +++ b/tools/power/acpi/tools/acpidump/apfiles.c | |||
| @@ -65,8 +65,7 @@ int ap_open_output_file(char *pathname) | |||
| 65 | /* If file exists, prompt for overwrite */ | 65 | /* If file exists, prompt for overwrite */ |
| 66 | 66 | ||
| 67 | if (!stat(pathname, &stat_info)) { | 67 | if (!stat(pathname, &stat_info)) { |
| 68 | fprintf(stderr, | 68 | acpi_log_error("Target path already exists, overwrite? [y|n] "); |
| 69 | "Target path already exists, overwrite? [y|n] "); | ||
| 70 | 69 | ||
| 71 | if (getchar() != 'y') { | 70 | if (getchar() != 'y') { |
| 72 | return (-1); | 71 | return (-1); |
| @@ -106,7 +105,7 @@ int ap_write_to_binary_file(struct acpi_table_header *table, u32 instance) | |||
| 106 | { | 105 | { |
| 107 | char filename[ACPI_NAME_SIZE + 16]; | 106 | char filename[ACPI_NAME_SIZE + 16]; |
| 108 | char instance_str[16]; | 107 | char instance_str[16]; |
| 109 | FILE *file; | 108 | ACPI_FILE file; |
| 110 | size_t actual; | 109 | size_t actual; |
| 111 | u32 table_length; | 110 | u32 table_length; |
| 112 | 111 | ||
| @@ -138,28 +137,29 @@ int ap_write_to_binary_file(struct acpi_table_header *table, u32 instance) | |||
| 138 | ACPI_STRCAT(filename, ACPI_TABLE_FILE_SUFFIX); | 137 | ACPI_STRCAT(filename, ACPI_TABLE_FILE_SUFFIX); |
| 139 | 138 | ||
| 140 | if (gbl_verbose_mode) { | 139 | if (gbl_verbose_mode) { |
| 141 | fprintf(stderr, | 140 | acpi_log_error |
| 142 | "Writing [%4.4s] to binary file: %s 0x%X (%u) bytes\n", | 141 | ("Writing [%4.4s] to binary file: %s 0x%X (%u) bytes\n", |
| 143 | table->signature, filename, table->length, | 142 | table->signature, filename, table->length, table->length); |
| 144 | table->length); | ||
| 145 | } | 143 | } |
| 146 | 144 | ||
| 147 | /* Open the file and dump the entire table in binary mode */ | 145 | /* Open the file and dump the entire table in binary mode */ |
| 148 | 146 | ||
| 149 | file = fopen(filename, "wb"); | 147 | file = acpi_os_open_file(filename, |
| 148 | ACPI_FILE_WRITING | ACPI_FILE_BINARY); | ||
| 150 | if (!file) { | 149 | if (!file) { |
| 151 | perror("Could not open output file"); | 150 | acpi_log_error("Could not open output file: %s\n", filename); |
| 152 | return (-1); | 151 | return (-1); |
| 153 | } | 152 | } |
| 154 | 153 | ||
| 155 | actual = fwrite(table, 1, table_length, file); | 154 | actual = acpi_os_write_file(file, table, 1, table_length); |
| 156 | if (actual != table_length) { | 155 | if (actual != table_length) { |
| 157 | perror("Error writing binary output file"); | 156 | acpi_log_error("Error writing binary output file: %s\n", |
| 158 | fclose(file); | 157 | filename); |
| 158 | acpi_os_close_file(file); | ||
| 159 | return (-1); | 159 | return (-1); |
| 160 | } | 160 | } |
| 161 | 161 | ||
| 162 | fclose(file); | 162 | acpi_os_close_file(file); |
| 163 | return (0); | 163 | return (0); |
| 164 | } | 164 | } |
| 165 | 165 | ||
| @@ -180,15 +180,16 @@ struct acpi_table_header *ap_get_table_from_file(char *pathname, | |||
| 180 | u32 *out_file_size) | 180 | u32 *out_file_size) |
| 181 | { | 181 | { |
| 182 | struct acpi_table_header *buffer = NULL; | 182 | struct acpi_table_header *buffer = NULL; |
| 183 | FILE *file; | 183 | ACPI_FILE file; |
| 184 | u32 file_size; | 184 | u32 file_size; |
| 185 | size_t actual; | 185 | size_t actual; |
| 186 | 186 | ||
| 187 | /* Must use binary mode */ | 187 | /* Must use binary mode */ |
| 188 | 188 | ||
| 189 | file = fopen(pathname, "rb"); | 189 | file = |
| 190 | acpi_os_open_file(pathname, ACPI_FILE_READING | ACPI_FILE_BINARY); | ||
| 190 | if (!file) { | 191 | if (!file) { |
| 191 | perror("Could not open input file"); | 192 | acpi_log_error("Could not open input file: %s\n", pathname); |
| 192 | return (NULL); | 193 | return (NULL); |
| 193 | } | 194 | } |
| 194 | 195 | ||
| @@ -196,8 +197,7 @@ struct acpi_table_header *ap_get_table_from_file(char *pathname, | |||
| 196 | 197 | ||
| 197 | file_size = cm_get_file_size(file); | 198 | file_size = cm_get_file_size(file); |
| 198 | if (file_size == ACPI_UINT32_MAX) { | 199 | if (file_size == ACPI_UINT32_MAX) { |
| 199 | fprintf(stderr, | 200 | acpi_log_error("Could not get input file size: %s\n", pathname); |
| 200 | "Could not get input file size: %s\n", pathname); | ||
| 201 | goto cleanup; | 201 | goto cleanup; |
| 202 | } | 202 | } |
| 203 | 203 | ||
| @@ -205,17 +205,16 @@ struct acpi_table_header *ap_get_table_from_file(char *pathname, | |||
| 205 | 205 | ||
| 206 | buffer = ACPI_ALLOCATE_ZEROED(file_size); | 206 | buffer = ACPI_ALLOCATE_ZEROED(file_size); |
| 207 | if (!buffer) { | 207 | if (!buffer) { |
| 208 | fprintf(stderr, | 208 | acpi_log_error("Could not allocate file buffer of size: %u\n", |
| 209 | "Could not allocate file buffer of size: %u\n", | 209 | file_size); |
| 210 | file_size); | ||
| 211 | goto cleanup; | 210 | goto cleanup; |
| 212 | } | 211 | } |
| 213 | 212 | ||
| 214 | /* Read the entire file */ | 213 | /* Read the entire file */ |
| 215 | 214 | ||
| 216 | actual = fread(buffer, 1, file_size, file); | 215 | actual = acpi_os_read_file(file, buffer, 1, file_size); |
| 217 | if (actual != file_size) { | 216 | if (actual != file_size) { |
| 218 | fprintf(stderr, "Could not read input file: %s\n", pathname); | 217 | acpi_log_error("Could not read input file: %s\n", pathname); |
| 219 | ACPI_FREE(buffer); | 218 | ACPI_FREE(buffer); |
| 220 | buffer = NULL; | 219 | buffer = NULL; |
| 221 | goto cleanup; | 220 | goto cleanup; |
| @@ -224,6 +223,6 @@ struct acpi_table_header *ap_get_table_from_file(char *pathname, | |||
| 224 | *out_file_size = file_size; | 223 | *out_file_size = file_size; |
| 225 | 224 | ||
| 226 | cleanup: | 225 | cleanup: |
| 227 | fclose(file); | 226 | acpi_os_close_file(file); |
| 228 | return (buffer); | 227 | return (buffer); |
| 229 | } | 228 | } |
diff --git a/tools/power/acpi/tools/acpidump/apmain.c b/tools/power/acpi/tools/acpidump/apmain.c index 55fd44d5f2e8..63f7bc9fdf29 100644 --- a/tools/power/acpi/tools/acpidump/apmain.c +++ b/tools/power/acpi/tools/acpidump/apmain.c | |||
| @@ -140,8 +140,8 @@ static int ap_insert_action(char *argument, u32 to_be_done) | |||
| 140 | 140 | ||
| 141 | current_action++; | 141 | current_action++; |
| 142 | if (current_action > AP_MAX_ACTIONS) { | 142 | if (current_action > AP_MAX_ACTIONS) { |
| 143 | fprintf(stderr, "Too many table options (max %u)\n", | 143 | acpi_log_error("Too many table options (max %u)\n", |
| 144 | AP_MAX_ACTIONS); | 144 | AP_MAX_ACTIONS); |
| 145 | return (-1); | 145 | return (-1); |
| 146 | } | 146 | } |
| 147 | 147 | ||
| @@ -203,9 +203,9 @@ static int ap_do_options(int argc, char **argv) | |||
| 203 | acpi_ut_strtoul64(acpi_gbl_optarg, 0, | 203 | acpi_ut_strtoul64(acpi_gbl_optarg, 0, |
| 204 | &gbl_rsdp_base); | 204 | &gbl_rsdp_base); |
| 205 | if (ACPI_FAILURE(status)) { | 205 | if (ACPI_FAILURE(status)) { |
| 206 | fprintf(stderr, | 206 | acpi_log_error |
| 207 | "%s: Could not convert to a physical address\n", | 207 | ("%s: Could not convert to a physical address\n", |
| 208 | acpi_gbl_optarg); | 208 | acpi_gbl_optarg); |
| 209 | return (-1); | 209 | return (-1); |
| 210 | } | 210 | } |
| 211 | continue; | 211 | continue; |
| @@ -226,13 +226,13 @@ static int ap_do_options(int argc, char **argv) | |||
| 226 | 226 | ||
| 227 | case 'v': /* Revision/version */ | 227 | case 'v': /* Revision/version */ |
| 228 | 228 | ||
| 229 | printf(ACPI_COMMON_SIGNON(AP_UTILITY_NAME)); | 229 | acpi_os_printf(ACPI_COMMON_SIGNON(AP_UTILITY_NAME)); |
| 230 | return (1); | 230 | return (1); |
| 231 | 231 | ||
| 232 | case 'z': /* Verbose mode */ | 232 | case 'z': /* Verbose mode */ |
| 233 | 233 | ||
| 234 | gbl_verbose_mode = TRUE; | 234 | gbl_verbose_mode = TRUE; |
| 235 | fprintf(stderr, ACPI_COMMON_SIGNON(AP_UTILITY_NAME)); | 235 | acpi_log_error(ACPI_COMMON_SIGNON(AP_UTILITY_NAME)); |
| 236 | continue; | 236 | continue; |
| 237 | 237 | ||
| 238 | /* | 238 | /* |
| @@ -338,9 +338,8 @@ int ACPI_SYSTEM_XFACE main(int argc, char *argv[]) | |||
| 338 | 338 | ||
| 339 | default: | 339 | default: |
| 340 | 340 | ||
| 341 | fprintf(stderr, | 341 | acpi_log_error("Internal error, invalid action: 0x%X\n", |
| 342 | "Internal error, invalid action: 0x%X\n", | 342 | action->to_be_done); |
| 343 | action->to_be_done); | ||
| 344 | return (-1); | 343 | return (-1); |
| 345 | } | 344 | } |
| 346 | 345 | ||
| @@ -355,12 +354,12 @@ int ACPI_SYSTEM_XFACE main(int argc, char *argv[]) | |||
| 355 | /* Summary for the output file */ | 354 | /* Summary for the output file */ |
| 356 | 355 | ||
| 357 | file_size = cm_get_file_size(gbl_output_file); | 356 | file_size = cm_get_file_size(gbl_output_file); |
| 358 | fprintf(stderr, | 357 | acpi_log_error |
| 359 | "Output file %s contains 0x%X (%u) bytes\n\n", | 358 | ("Output file %s contains 0x%X (%u) bytes\n\n", |
| 360 | gbl_output_filename, file_size, file_size); | 359 | gbl_output_filename, file_size, file_size); |
| 361 | } | 360 | } |
| 362 | 361 | ||
| 363 | fclose(gbl_output_file); | 362 | acpi_os_close_file(gbl_output_file); |
| 364 | } | 363 | } |
| 365 | 364 | ||
| 366 | return (status); | 365 | return (status); |
