Changeset 1433 for trunk


Ignore:
Timestamp:
09/08/11 02:00:29 (9 months ago)
Author:
hailfinger
Message:

Change programmer selection in cli and generic code

Bugfix: Do not accept multiple conflicting --programmer selections.
Restriction: Do not accept multiple --programmer selections even if

there is no conflict.

Unexport the programmer variable.
programmer_init requires the programmer as first parameter.
The default programmer selection is now part of cli_classic.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@…>
Acked-by: Stefan Tauner <stefan.tauner@…>

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/cli_classic.c

    r1417 r1433  
    3232#include "programmer.h" 
    3333 
     34#if CONFIG_INTERNAL == 1 
     35static enum programmer default_programmer = PROGRAMMER_INTERNAL; 
     36#elif CONFIG_DUMMY == 1 
     37static enum programmer default_programmer = PROGRAMMER_DUMMY; 
     38#else 
     39/* If neither internal nor dummy are selected, we must pick a sensible default. 
     40 * Since there is no reason to prefer a particular external programmer, we fail 
     41 * if more than one of them is selected. If only one is selected, it is clear 
     42 * that the user wants that one to become the default. 
     43 */ 
     44#if CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_FT2232_SPI+CONFIG_SERPROG+CONFIG_BUSPIRATE_SPI+CONFIG_DEDIPROG+CONFIG_RAYER_SPI+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV > 1 
     45#error Please enable either CONFIG_DUMMY or CONFIG_INTERNAL or disable support for all programmers except one. 
     46#endif 
     47static enum programmer default_programmer = 
     48#if CONFIG_NIC3COM == 1 
     49        PROGRAMMER_NIC3COM 
     50#endif 
     51#if CONFIG_NICREALTEK == 1 
     52        PROGRAMMER_NICREALTEK 
     53#endif 
     54#if CONFIG_NICNATSEMI == 1 
     55        PROGRAMMER_NICNATSEMI 
     56#endif 
     57#if CONFIG_GFXNVIDIA == 1 
     58        PROGRAMMER_GFXNVIDIA 
     59#endif 
     60#if CONFIG_DRKAISER == 1 
     61        PROGRAMMER_DRKAISER 
     62#endif 
     63#if CONFIG_SATASII == 1 
     64        PROGRAMMER_SATASII 
     65#endif 
     66#if CONFIG_ATAHPT == 1 
     67        PROGRAMMER_ATAHPT 
     68#endif 
     69#if CONFIG_FT2232_SPI == 1 
     70        PROGRAMMER_FT2232_SPI 
     71#endif 
     72#if CONFIG_SERPROG == 1 
     73        PROGRAMMER_SERPROG 
     74#endif 
     75#if CONFIG_BUSPIRATE_SPI == 1 
     76        PROGRAMMER_BUSPIRATE_SPI 
     77#endif 
     78#if CONFIG_DEDIPROG == 1 
     79        PROGRAMMER_DEDIPROG 
     80#endif 
     81#if CONFIG_RAYER_SPI == 1 
     82        PROGRAMMER_RAYER_SPI 
     83#endif 
     84#if CONFIG_NICINTEL == 1 
     85        PROGRAMMER_NICINTEL 
     86#endif 
     87#if CONFIG_NICINTEL_SPI == 1 
     88        PROGRAMMER_NICINTEL_SPI 
     89#endif 
     90#if CONFIG_OGP_SPI == 1 
     91        PROGRAMMER_OGP_SPI 
     92#endif 
     93#if CONFIG_SATAMV == 1 
     94        PROGRAMMER_SATAMV 
     95#endif 
     96#if CONFIG_LINUX_SPI == 1 
     97        PROGRAMMER_LINUX_SPI 
     98#endif 
     99; 
     100#endif 
     101 
    34102static void cli_classic_usage(const char *name) 
    35103{ 
     
    112180        int read_it = 0, write_it = 0, erase_it = 0, verify_it = 0; 
    113181        int dont_verify_it = 0, list_supported = 0, operation_specified = 0; 
     182        enum programmer prog = PROGRAMMER_INVALID; 
    114183        int ret = 0; 
    115184 
     
    259328                        break; 
    260329                case 'p': 
    261                         for (programmer = 0; programmer < PROGRAMMER_INVALID; programmer++) { 
    262                                 name = programmer_table[programmer].name; 
     330                        if (prog != PROGRAMMER_INVALID) { 
     331                                fprintf(stderr, "Error: --programmer specified " 
     332                                        "more than once. You can separate " 
     333                                        "multiple\nparameters for a programmer " 
     334                                        "with \",\". Please see the man page " 
     335                                        "for details.\n"); 
     336                                cli_classic_abort_usage(); 
     337                        } 
     338                        for (prog = 0; prog < PROGRAMMER_INVALID; prog++) { 
     339                                name = programmer_table[prog].name; 
    263340                                namelen = strlen(name); 
    264341                                if (strncmp(optarg, name, namelen) == 0) { 
     
    284361                                } 
    285362                        } 
    286                         if (programmer == PROGRAMMER_INVALID) { 
     363                        if (prog == PROGRAMMER_INVALID) { 
    287364                                fprintf(stderr, "Error: Unknown programmer " 
    288365                                        "%s.\n", optarg); 
     
    330407                print_supported_wiki(); 
    331408                exit(0); 
    332         } 
    333 #endif 
    334  
    335 #if CONFIG_INTERNAL == 1 
    336         if ((programmer != PROGRAMMER_INTERNAL) && (lb_part || lb_vendor)) { 
    337                 fprintf(stderr, "Error: --mainboard requires the internal " 
    338                                 "programmer. Aborting.\n"); 
    339                 cli_classic_abort_usage(); 
    340409        } 
    341410#endif 
     
    356425        } 
    357426 
     427        if (prog == PROGRAMMER_INVALID) 
     428                prog = default_programmer; 
     429 
     430#if CONFIG_INTERNAL == 1 
     431        if ((prog != PROGRAMMER_INTERNAL) && (lb_part || lb_vendor)) { 
     432                fprintf(stderr, "Error: --mainboard requires the internal " 
     433                                "programmer. Aborting.\n"); 
     434                cli_classic_abort_usage(); 
     435        } 
     436#endif 
     437 
    358438        /* FIXME: Delay calibration should happen in programmer code. */ 
    359439        myusec_calibrate_delay(); 
    360440 
    361         if (programmer_init(pparam)) { 
     441        if (programmer_init(prog, pparam)) { 
    362442                fprintf(stderr, "Error: Programmer initialization failed.\n"); 
    363443                ret = 1; 
  • trunk/flashrom.c

    r1427 r1433  
    4343int verbose = 0; 
    4444 
    45 #if CONFIG_INTERNAL == 1 
    46 enum programmer programmer = PROGRAMMER_INTERNAL; 
    47 #elif CONFIG_DUMMY == 1 
    48 enum programmer programmer = PROGRAMMER_DUMMY; 
    49 #else 
    50 /* If neither internal nor dummy are selected, we must pick a sensible default. 
    51  * Since there is no reason to prefer a particular external programmer, we fail 
    52  * if more than one of them is selected. If only one is selected, it is clear 
    53  * that the user wants that one to become the default. 
    54  */ 
    55 #if CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_FT2232_SPI+CONFIG_SERPROG+CONFIG_BUSPIRATE_SPI+CONFIG_DEDIPROG+CONFIG_RAYER_SPI+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV > 1 
    56 #error Please enable either CONFIG_DUMMY or CONFIG_INTERNAL or disable support for all programmers except one. 
    57 #endif 
    58 enum programmer programmer = 
    59 #if CONFIG_NIC3COM == 1 
    60         PROGRAMMER_NIC3COM 
    61 #endif 
    62 #if CONFIG_NICREALTEK == 1 
    63         PROGRAMMER_NICREALTEK 
    64 #endif 
    65 #if CONFIG_NICNATSEMI == 1 
    66         PROGRAMMER_NICNATSEMI 
    67 #endif 
    68 #if CONFIG_GFXNVIDIA == 1 
    69         PROGRAMMER_GFXNVIDIA 
    70 #endif 
    71 #if CONFIG_DRKAISER == 1 
    72         PROGRAMMER_DRKAISER 
    73 #endif 
    74 #if CONFIG_SATASII == 1 
    75         PROGRAMMER_SATASII 
    76 #endif 
    77 #if CONFIG_ATAHPT == 1 
    78         PROGRAMMER_ATAHPT 
    79 #endif 
    80 #if CONFIG_FT2232_SPI == 1 
    81         PROGRAMMER_FT2232_SPI 
    82 #endif 
    83 #if CONFIG_SERPROG == 1 
    84         PROGRAMMER_SERPROG 
    85 #endif 
    86 #if CONFIG_BUSPIRATE_SPI == 1 
    87         PROGRAMMER_BUSPIRATE_SPI 
    88 #endif 
    89 #if CONFIG_DEDIPROG == 1 
    90         PROGRAMMER_DEDIPROG 
    91 #endif 
    92 #if CONFIG_RAYER_SPI == 1 
    93         PROGRAMMER_RAYER_SPI 
    94 #endif 
    95 #if CONFIG_NICINTEL == 1 
    96         PROGRAMMER_NICINTEL 
    97 #endif 
    98 #if CONFIG_NICINTEL_SPI == 1 
    99         PROGRAMMER_NICINTEL_SPI 
    100 #endif 
    101 #if CONFIG_OGP_SPI == 1 
    102         PROGRAMMER_OGP_SPI 
    103 #endif 
    104 #if CONFIG_SATAMV == 1 
    105         PROGRAMMER_SATAMV 
    106 #endif 
    107 #if CONFIG_LINUX_SPI == 1 
    108         PROGRAMMER_LINUX_SPI 
    109 #endif 
    110 ; 
    111 #endif 
     45static enum programmer programmer = PROGRAMMER_INVALID; 
    11246 
    11347static char *programmer_param = NULL; 
     
    516450} 
    517451 
    518 int programmer_init(char *param) 
     452int programmer_init(enum programmer prog, char *param) 
    519453{ 
    520454        int ret; 
     455 
     456        if (prog >= PROGRAMMER_INVALID) { 
     457                msg_perr("Invalid programmer specified!\n"); 
     458                return -1; 
     459        } 
     460        programmer = prog; 
    521461        /* Initialize all programmer specific data. */ 
    522462        /* Default to unlimited decode sizes. */ 
  • trunk/it87spi.c

    r1413 r1433  
    130130        /* NOLDN, reg 0x24, mask out lowest bit (suspend) */ 
    131131        tmp = sio_read(port, 0x24) & 0xFE; 
    132         /* If IT87SPI was not explicitly selected, we want to check 
    133          * quickly if LPC->SPI translation is active. 
    134          */ 
    135         if ((programmer == PROGRAMMER_INTERNAL) && !(tmp & (0x0E))) { 
     132        /* Check if LPC->SPI translation is active. */ 
     133        if (!(tmp & 0x0e)) { 
    136134                msg_pdbg("No IT87* serial flash segment enabled.\n"); 
    137135                exit_conf_mode_ite(port); 
  • trunk/programmer.h

    r1427 r1433  
    8686}; 
    8787 
    88 extern enum programmer programmer; 
    89  
    9088struct programmer_entry { 
    9189        const char *vendor; 
     
    111109extern const struct programmer_entry programmer_table[]; 
    112110 
    113 int programmer_init(char *param); 
     111int programmer_init(enum programmer prog, char *param); 
    114112int programmer_shutdown(void); 
    115113 
Note: See TracChangeset for help on using the changeset viewer.