assembler: Some r15 fixes
[b43-tools.git] / assembler / initvals.c
index eb2634d20a213bd18efcb2f477b9712a6f95e137..5db74d149d7cb58246c8a13212ab67d60b9216cc 100644 (file)
@@ -189,6 +189,15 @@ static void assemble_write_shm(struct ivals_context *ctx,
        }
 }
 
+/* Template RAM write */
+static void assemble_write_tram(struct ivals_context *ctx,
+                               unsigned int offset,
+                               unsigned int value)
+{
+       assemble_write_mmio(ctx, 0x130, SIZE_32BIT, offset);
+       assemble_write_mmio(ctx, 0x134, SIZE_32BIT, value);
+}
+
 static void assemble_ival_section(struct ivals_context *ctx,
                                  const struct initvals_sect *sect)
 {
@@ -231,6 +240,10 @@ static void assemble_ival_section(struct ivals_context *ctx,
                                           op->args[0],
                                           SIZE_32BIT);
                        break;
+               case IVAL_W_TRAM:
+                       assemble_write_tram(ctx, op->args[1],
+                                           op->args[0]);
+                       break;
                }
        }
 }
@@ -276,15 +289,16 @@ static void emit_ival_section(struct ivals_context *ctx)
        struct initval_raw raw;
        struct fw_header hdr;
        unsigned int size;
+       unsigned int filesize = 0;
 
        memset(&hdr, 0, sizeof(hdr));
        hdr.type = FW_TYPE_IV;
        hdr.ver = FW_HDR_VER;
        hdr.size = cpu_to_be32(ctx->ivals_count);
 
-       fn_len = strlen(outfile_name) + 512;
+       fn_len = strlen(ctx->sect->name) + strlen(initvals_fn_extension ? : "") + 1;
        fn = xmalloc(fn_len);
-       snprintf(fn, fn_len, "%s.%s.initval", outfile_name, ctx->sect->name);
+       snprintf(fn, fn_len, "%s%s", ctx->sect->name, initvals_fn_extension ? : "");
        fd = fopen(fn, "w+");
        if (!fd) {
                fprintf(stderr, "Could not open initval output file \"%s\"\n", fn);
@@ -311,7 +325,14 @@ static void emit_ival_section(struct ivals_context *ctx)
                        fprintf(stderr, "Could not write initvals outfile\n");
                        exit(1);
                }
+               filesize += size;
        }
+
+       if (arg_print_sizes) {
+               printf("%s:  %d values (%u bytes)\n",
+                      fn, ctx->ivals_count, filesize);
+       }
+
        fclose(fd);
        free(fn);
 }