Newer
Older
/*
* A tool to program our soft-core (LM32) within the SPEC.
*/
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
Tomasz Wlostowski
committed
#include <getopt.h>
#include "speclib.h"
int main(int argc, char **argv)
{
int bus = -1, dev_fn = -1, c;
Tomasz Wlostowski
committed
uint32_t lm32_base = 0x80000;
void *card;
Tomasz Wlostowski
committed
while ((c = getopt (argc, argv, "b:d:c:")) != -1)
{
switch(c)
{
case 'b':
sscanf(optarg, "%i", &bus);
break;
case 'd':
sscanf(optarg, "%i", &dev_fn);
break;
case 'c':
sscanf(optarg, "%i", &lm32_base);
break;
default:
fprintf(stderr,
"Use: \"%s [-b bus] [-d devfn] "
"[-c lm32 base address] <lm32_program.bin>\"\n",
argv[0]);
Tomasz Wlostowski
committed
fprintf(stderr,
"By default, the first available SPEC is used "
"and the LM32 is assumed at 0x%x.\n",
lm32_base);
Tomasz Wlostowski
committed
exit(1);
}
Tomasz Wlostowski
committed
if (optind >= argc) {
fprintf(stderr, "%s: Expected binary name after options.\n",
argv[0]);
card = spec_open(bus, dev_fn);
if(!card)
Tomasz Wlostowski
committed
{
fprintf(stderr, "%s: Can't detect a SPEC card under the given "
Grzegorz Daniluk
committed
"adress.\nMake sure a SPEC card is present in your PC, "
"the driver is loaded and you run the program as root.\n", argv[0]);
if(spec_load_lm32(card, argv[optind], lm32_base) < 0)
{
fprintf(stderr, "%s: Loader failure.\n", argv[0]);
spec_close(card);