Changeset 1459


Ignore:
Timestamp:
11/04/11 22:35:26 (7 months ago)
Author:
hailfinger
Message:

Add opaque programmer registration infrastructure

An opaque programmer does not allow direct flash access and only offers
abstract probe/read/erase/write methods.
Due to that, opaque programmers need their own infrastructure and
registration framework.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@…>
Acked-by: Michael Karcher <flashrom@…>

Location:
trunk
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Makefile

    r1443 r1459  
    243243        sst28sf040.o m29f400bt.o 82802ab.o pm49fl00x.o \ 
    244244        sst49lfxxxc.o sst_fwhub.o flashchips.o spi.o spi25.o sharplhf00l04.o \ 
    245         a25.o at25.o 
     245        a25.o at25.o opaque.o 
    246246 
    247247LIB_OBJS = layout.o 
  • trunk/chipdrivers.h

    r1450 r1459  
    5858int spi_write_chunked(struct flashchip *flash, uint8_t *buf, int start, int len, int chunksize); 
    5959int spi_aai_write(struct flashchip *flash, uint8_t *buf, int start, int len); 
     60 
     61/* opaque.c */ 
     62int probe_opaque(struct flashchip *flash); 
     63int read_opaque(struct flashchip *flash, uint8_t *buf, int start, int len); 
     64int write_opaque(struct flashchip *flash, uint8_t *buf, int start, int len); 
     65int erase_opaque(struct flashchip *flash, unsigned int blockaddr, unsigned int blocklen); 
    6066 
    6167/* a25.c */ 
  • trunk/flash.h

    r1450 r1459  
    6363        BUS_FWH         = 1 << 2, 
    6464        BUS_SPI         = 1 << 3, 
     65        BUS_PROG        = 1 << 4, 
    6566        BUS_NONSPI      = BUS_PARALLEL | BUS_LPC | BUS_FWH, 
    66         BUS_UNKNOWN     = BUS_PARALLEL | BUS_LPC | BUS_FWH | BUS_SPI, 
    6767}; 
    6868 
  • trunk/flashchips.c

    r1454 r1459  
    88758875 
    88768876        { 
     8877                .vendor         = "Programmer", 
     8878                .name           = "Opaque flash chip", 
     8879                .bustype        = BUS_PROG, 
     8880                .manufacture_id = PROGMANUF_ID, 
     8881                .model_id       = PROGDEV_ID, 
     8882                .total_size     = 0, 
     8883                .page_size      = 256, 
     8884                /* probe is assumed to work, rest will be filled in by probe */ 
     8885                .tested         = TEST_OK_PROBE, 
     8886                .probe          = probe_opaque, 
     8887                /* eraseblock sizes will be set by the probing function */ 
     8888                .block_erasers  = 
     8889                { 
     8890                        { 
     8891                                .block_erase = erase_opaque, 
     8892                        } 
     8893                }, 
     8894                .write          = write_opaque, 
     8895                .read           = read_opaque, 
     8896        }, 
     8897 
     8898        { 
    88778899                .vendor         = "AMIC", 
    88788900                .name           = "unknown AMIC SPI chip", 
  • trunk/flashchips.h

    r1439 r1459  
    647647#define WINBOND_W49V002FA       0x32 
    648648 
     649#define PROGMANUF_ID            0xFFFE  /* dummy ID for opaque chips behind a programmer */ 
     650#define PROGDEV_ID              0x01    /* dummy ID for opaque chips behind a programmer */ 
     651 
    649652#endif /* !FLASHCHIPS_H */ 
  • trunk/print.c

    r1458 r1459  
    3333{ 
    3434        char *ret = calloc(1, 1); 
    35         if (bustype == BUS_UNKNOWN) { 
    36                 ret = strcat_realloc(ret, "Unknown, "); 
    3735        /* 
    3836         * FIXME: Once all chipsets and flash chips have been updated, NONSPI 
    3937         * will cease to exist and should be eliminated here as well. 
    4038         */ 
    41         } else if (bustype == BUS_NONSPI) { 
     39        if (bustype == BUS_NONSPI) { 
    4240                ret = strcat_realloc(ret, "Non-SPI, "); 
    4341        } else { 
     
    5048                if (bustype & BUS_SPI) 
    5149                        ret = strcat_realloc(ret, "SPI, "); 
     50                if (bustype & BUS_PROG) 
     51                        ret = strcat_realloc(ret, "Programmer-specific, "); 
    5252                if (bustype == BUS_NONE) 
    5353                        ret = strcat_realloc(ret, "None, "); 
  • trunk/programmer.h

    r1456 r1459  
    2424#ifndef __PROGRAMMER_H__ 
    2525#define __PROGRAMMER_H__ 1 
     26 
     27#include "flash.h"      /* for chipaddr and flashchip */ 
    2628 
    2729enum programmer { 
     
    602604#endif 
    603605 
     606/* opaque.c */ 
     607struct opaque_programmer { 
     608        int max_data_read; 
     609        int max_data_write; 
     610        /* Specific functions for this programmer */ 
     611        int (*probe) (struct flashchip *flash); 
     612        int (*read) (struct flashchip *flash, uint8_t *buf, int start, int len); 
     613        int (*write) (struct flashchip *flash, uint8_t *buf, int start, int len); 
     614        int (*erase) (struct flashchip *flash, unsigned int blockaddr, unsigned int blocklen); 
     615}; 
     616extern const struct opaque_programmer *opaque_programmer; 
     617void register_opaque_programmer(const struct opaque_programmer *pgm); 
     618 
    604619/* serprog.c */ 
    605620#if CONFIG_SERPROG == 1 
Note: See TracChangeset for help on using the changeset viewer.