patch-2.4.22 linux-2.4.22/drivers/scsi/aic7xxx/aicasm/aicasm.c
Next file: linux-2.4.22/drivers/scsi/aic7xxx/aicasm/aicasm.h
Previous file: linux-2.4.22/drivers/scsi/aic7xxx/aicasm/Makefile
Back to the patch index
Back to the overall index
- Lines: 221
- Date:
2003-08-25 04:44:42.000000000 -0700
- Orig file:
linux-2.4.21/drivers/scsi/aic7xxx/aicasm/aicasm.c
- Orig date:
2003-06-13 07:51:36.000000000 -0700
diff -urN linux-2.4.21/drivers/scsi/aic7xxx/aicasm/aicasm.c linux-2.4.22/drivers/scsi/aic7xxx/aicasm/aicasm.c
@@ -2,7 +2,7 @@
* Aic7xxx SCSI host adapter firmware asssembler
*
* Copyright (c) 1997, 1998, 2000, 2001 Justin T. Gibbs.
- * Copyright (c) 2001 Adaptec Inc.
+ * Copyright (c) 2001, 2002 Adaptec Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -37,9 +37,9 @@
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*
- * $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm.c#16 $
+ * $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm.c#22 $
*
- * $FreeBSD: src/sys/dev/aic7xxx/aicasm/aicasm.c,v 1.28.2.5 2002/04/29 19:36:36 gibbs Exp $
+ * $FreeBSD$
*/
#include <sys/types.h>
#include <sys/mman.h>
@@ -85,12 +85,15 @@
struct path_list search_path;
int includes_search_curdir;
char *appname;
+char *stock_include_file;
FILE *ofile;
char *ofilename;
char *regfilename;
FILE *regfile;
char *listfilename;
FILE *listfile;
+char *regdiagfilename;
+FILE *regdiagfile;
int src_mode;
int dst_mode;
@@ -140,7 +143,7 @@
yydebug = 0;
mmdebug = 0;
#endif
- while ((ch = getopt(argc, argv, "d:l:n:o:r:I:O:")) != -1) {
+ while ((ch = getopt(argc, argv, "d:i:l:n:o:p:r:I:")) != -1) {
switch(ch) {
case 'd':
#if DEBUG
@@ -160,6 +163,9 @@
"information", EX_SOFTWARE);
#endif
break;
+ case 'i':
+ stock_include_file = optarg;
+ break;
case 'l':
/* Create a program listing */
if ((listfile = fopen(optarg, "w")) == NULL) {
@@ -184,6 +190,14 @@
}
ofilename = optarg;
break;
+ case 'p':
+ /* Create Register Diagnostic "printing" Functions */
+ if ((regdiagfile = fopen(optarg, "w")) == NULL) {
+ perror(optarg);
+ stop(NULL, EX_CANTCREAT);
+ }
+ regdiagfilename = optarg;
+ break;
case 'r':
if ((regfile = fopen(optarg, "w")) == NULL) {
perror(optarg);
@@ -245,6 +259,14 @@
/* NOTREACHED */
}
+ if (regdiagfile != NULL
+ && (regfile == NULL || stock_include_file == NULL)) {
+ fprintf(stderr,
+ "%s: The -p option requires the -r and -i options.\n",
+ appname);
+ usage();
+ /* NOTREACHED */
+ }
symtable_open();
inputfilename = *argv;
include_file(*argv, SOURCE_FILE);
@@ -271,9 +293,8 @@
if (ofile != NULL)
output_code();
- if (regfile != NULL) {
- symtable_dump(regfile);
- }
+ if (regfile != NULL)
+ symtable_dump(regfile, regdiagfile);
if (listfile != NULL)
output_listing(inputfilename);
}
@@ -288,10 +309,10 @@
{
(void)fprintf(stderr,
-"usage: %-16s [-nostdinc] [-I-] [-I directory] [-o output_file]
- [-r register_output_file] [-l program_list_file]
- input_file\n",
- appname);
+"usage: %-16s [-nostdinc] [-I-] [-I directory] [-o output_file]\n"
+" [-r register_output_file [-p register_diag_file -i includefile]]\n"
+" [-l program_list_file]\n"
+" input_file\n", appname);
exit(EX_USAGE);
}
@@ -335,11 +356,11 @@
instrcount = 0;
fprintf(ofile,
-"/*
- * DO NOT EDIT - This file is automatically generated
- * from the following source files:
- *
-%s */\n", versions);
+"/*\n"
+" * DO NOT EDIT - This file is automatically generated\n"
+" * from the following source files:\n"
+" *\n"
+"%s */\n", versions);
fprintf(ofile, "static uint8_t seqprog[] = {\n");
for (cur_instr = STAILQ_FIRST(&seq_program);
@@ -370,49 +391,54 @@
/*
* Output patch information. Patch functions first.
*/
+ fprintf(ofile,
+"typedef int %spatch_func_t (%s);\n", prefix, patch_arg_list);
+
for (cur_node = SLIST_FIRST(&patch_functions);
cur_node != NULL;
cur_node = SLIST_NEXT(cur_node,links)) {
fprintf(ofile,
-"static int aic_patch%d_func(%s);
-
-static int
-aic_patch%d_func(%s)
-{
- return (%s);
-}\n\n",
+"static %spatch_func_t %spatch%d_func;\n"
+"\n"
+"static int\n"
+"%spatch%d_func(%s)\n"
+"{\n"
+" return (%s);\n"
+"}\n\n",
+ prefix,
+ prefix,
cur_node->symbol->info.condinfo->func_num,
- patch_arg_list,
+ prefix,
cur_node->symbol->info.condinfo->func_num,
patch_arg_list,
cur_node->symbol->name);
}
fprintf(ofile,
-"typedef int patch_func_t (%s);
-static struct patch {
- patch_func_t *patch_func;
- uint32_t begin :10,
- skip_instr :10,
- skip_patch :12;
-} patches[] = {\n", patch_arg_list);
+"static struct patch {\n"
+" %spatch_func_t *patch_func;\n"
+" uint32_t begin :10,\n"
+" skip_instr :10,\n"
+" skip_patch :12;\n"
+"} patches[] = {\n", prefix);
for (cur_patch = STAILQ_FIRST(&patches);
cur_patch != NULL;
cur_patch = STAILQ_NEXT(cur_patch,links)) {
- fprintf(ofile, "%s\t{ aic_patch%d_func, %d, %d, %d }",
+ fprintf(ofile, "%s\t{ %spatch%d_func, %d, %d, %d }",
cur_patch == STAILQ_FIRST(&patches) ? "" : ",\n",
+ prefix,
cur_patch->patch_func, cur_patch->begin,
cur_patch->skip_instr, cur_patch->skip_patch);
}
- fprintf(ofile, "\n};\n");
+ fprintf(ofile, "\n};\n\n");
fprintf(ofile,
-"static struct cs {
- u_int16_t begin;
- u_int16_t end;
-} critical_sections[] = {\n");
+"static struct cs {\n"
+" uint16_t begin;\n"
+" uint16_t end;\n"
+"} critical_sections[] = {\n");
for (cs = TAILQ_FIRST(&cs_tailq);
cs != NULL;
@@ -422,11 +448,11 @@
cs->begin_addr, cs->end_addr);
}
- fprintf(ofile, "\n};\n");
+ fprintf(ofile, "\n};\n\n");
fprintf(ofile,
-"static const int num_critical_sections = sizeof(critical_sections)
- / sizeof(*critical_sections);\n");
+"static const int num_critical_sections = sizeof(critical_sections)\n"
+" / sizeof(*critical_sections);\n");
fprintf(stderr, "%s: %d instructions used\n", appname, instrcount);
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)