Changeset 4606


Ignore:
Timestamp:
08/25/08 20:38:51 (5 years ago)
Author:
werner
Message:
  • added S3C24xx SPI register definitions
  • added "C" dump mode (experimental)
Location:
developers/werner/greg
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • developers/werner/greg/greg.c

    r4504 r4606  
    1515#include <stdlib.h> 
    1616#include <stdio.h> 
     17#include <string.h> 
    1718 
    1819#include "reg.h" 
     
    103104 
    104105 
     106static void dump_c_values(const char *reg_name, const struct field *field) 
     107{ 
     108        const char *name; 
     109        unsigned long long i; 
     110 
     111        if (field->value.type != vt_list) 
     112                return; 
     113        for (i = 0; i != 1 << field->bits; i++) { 
     114                name = field->value.u.list[i].name; 
     115                if (name) 
     116                        printf("#define %s_%s_%s %llu\n", 
     117                            reg_name, field->name, name, i); 
     118        } 
     119} 
     120 
     121 
     122static void dump_c(void) 
     123{ 
     124        const struct reg *reg; 
     125        const struct field *field; 
     126        int bits; 
     127 
     128        for (reg = regs; reg; reg = reg->next) { 
     129                printf("#define %s %s\n", reg->name, reg->id); 
     130                bits = 0; 
     131                for (field = reg->fields; field; field = field->next) { 
     132                        if (field->name) { 
     133                                printf("#define %s_%s %d\n", 
     134                                    reg->name, field->name, bits); 
     135                                dump_c_values(reg->name, field); 
     136                        } 
     137                        bits += field->bits; 
     138                } 
     139        } 
     140} 
     141 
     142 
    105143static void usage(const char *name) 
    106144{ 
    107145        fprintf(stderr, "usage: %s regdef-file [reg value ...]\n", name); 
     146        fprintf(stderr, "       %s regdef-file -d\n", name); 
    108147        exit(1); 
    109148} 
     
    114153        int i; 
    115154 
    116         if (argc < 2 || (argc & 1)) 
     155        if (argc < 2) 
    117156                usage(*argv); 
    118157        run_cpp_on_file(argv[1]); 
    119158        (void) yyparse(); 
     159        if (argc == 3 && !strcmp(argv[2], "-d")) { 
     160                dump_c(); 
     161                return 0; 
     162        } 
     163        if (argc & 1) 
     164                usage(*argv); 
    120165        for (i = 2; i != argc; i += 2) 
    121166                print(argv[i], strtoull(argv[i+1], NULL, 0)); 
    122167        return 0; 
    123          
    124168} 
Note: See TracChangeset for help on using the changeset viewer.