diff --git a/tools/speclib.c b/tools/speclib.c index e7aa56b8edb89d6e4007ee59b6a08dc265c2158b..f6b6ef11010593ae9dc5f0b37c18f9bdae008af3 100644 --- a/tools/speclib.c +++ b/tools/speclib.c @@ -270,9 +270,20 @@ static char *load_binary_file(const char *filename, size_t *size) return buf; } -int spec_load_bitstream(void *card, const char *filename) +int spec_load_bitstream_buffer(void *card, void *buf, size_t size) { struct spec_private *p = (struct spec_private *) card; + int rv; + + rv = loader_low_level(0, p->bar4, buf, size); + waitdone_low_level(0, p->bar4); + gpiofix_low_level(0, p->bar4); + + return rv; +} + +int spec_load_bitstream(void *card, const char *filename) +{ char *buf; size_t size; int rv; @@ -281,9 +292,7 @@ int spec_load_bitstream(void *card, const char *filename) if(!buf) return -1; - rv = loader_low_level(0, p->bar4, buf, size); - waitdone_low_level(0, p->bar4); - gpiofix_low_level(0, p->bar4); + rv = spec_load_bitstream_buffer(card, buf, size); free(buf); return rv; diff --git a/tools/speclib.h b/tools/speclib.h index a78b72f4b6ddc59fa253c9ccf2284e4e891a8325..87fec46ceca89dd62de8e03c90a7f698b794e71b 100644 --- a/tools/speclib.h +++ b/tools/speclib.h @@ -20,6 +20,10 @@ void spec_close(void *card); Returns 0 on success. */ int spec_load_bitstream(void *card, const char *filename); +/* Load the FPGA bitstram into car [card] from a given buffer [buf] + of size [size] */ +int spec_load_bitstream_buffer(void *card, void *buf, size_t size); + /* Loads the WRC LM32 firmware into card [card] from file [filename]. starting at address [base_addr]. Returns 0 on success. WARNING: using improper base address/FPGA firmware will freeze the computer. */