Exemplo n.º 1
0
static int cmd_nand_erase(int argc, char *argv[])
{
	u32 start_block, block, blocks, total_blocks;
	int i, rval;

	total_blocks = flnand.blocks_per_bank * flnand.banks;

	if (argc != 3) {
		uart_putstr("nand_erase [block] [blocks]!\r\n");
		uart_putstr("Total blocks: ");
		uart_putdec(total_blocks);
		uart_putstr("\r\n");
		return -1;
	}

	putstr("erase nand blocks including any bad blocks...\r\n");
	putstr("press enter to start!\r\n");
	putstr("press any key to terminate!\r\n");
	rval = uart_wait_escape(0xffffffff);
	if (rval == 0)
		return -1;

	strtou32(argv[1], &start_block);
	strtou32(argv[2], &blocks);

	for (i = 0, block = start_block; i < blocks; i++, block++) {
		if (uart_poll())
			break;
		if (block >= total_blocks)
			break;

		rval = nand_erase_block(block);

		putchar('.');

		if ((i & 0xf) == 0xf) {
			putchar(' ');
			putdec(i);
			putchar('/');
			putdec(blocks);
			putstr(" (");
			putdec(i * 100 / blocks);
			putstr("%)\t\t\r");
		}

		if (rval < 0) {
			putstr("\r\nfailed at block ");
			putdec(block);
			putstr("\r\n");
		}
	}

	putstr("\r\ndone!\r\n");

	return 0;
}
Exemplo n.º 2
0
void Fib(int argc, char **argv) {
    int x,y,z;

    if (argc < 2) {
        usage(stderr);
        exit();
    }

    int N = strtou32(argv[1]);
    
    x = 1;           //MOV R1, #1
    y = 0;           //MOV R2, #0
    if (N < 2)       //CMP R0, #2
        x = N;       //MOVMI R1, R0; BMI #5
    else {
        N -= 2;
        do {
            z = y;       //MOV R3, R2
            y = x;       //MOV R2, R1
            x = y + z;   //ADD R1, R2, R3
            N--;         //SUBS R0, R0, 1
        } while (N >= 0);//BPL #-6
    }

    writei(stdout, x);
    writes(stdout, "\n");
    exit();
}
Exemplo n.º 3
0
static int cmd_hotboot(int argc, char *argv[])
{
	u32 pattern;

	if (argc != 2) {
		uart_putstr("pattern argument is required\r\n");
		return -1;
	}

	if (strtou32(argv[1], &pattern) < 0) {
		uart_putstr("invalid parameter!\r\n");
		return -2;
	}

	*((u32 *) &hotboot_pattern) = pattern;
	*((u32 *) &hotboot_valid) = 1;

	{
#if (!defined(CONFIG_NAND_NONE) || !defined(CONFIG_NOR_NONE))
		flpart_table_t ptb;
		flprog_get_part_table(&ptb);
		boot(ptb.dev.cmdline, 1);
#else
		boot(NULL, 1);
#endif
	}

	return 0;
}
Exemplo n.º 4
0
static rc_t get_int64_option( Args * args, const char * name, uint64_t def, uint64_t * value )
{
    const char * s;
    rc_t rc = get_str_option( args, name, &s );
    *value = def;
    if ( rc == 0 && s != NULL )
    {
        char *endp;
        *value = strtou32( s, &endp, 0 );
        if ( *endp != '\0' )
        {
            rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
            (void)PLOGERR( klogErr, ( klogErr, rc, "error converting string to integer option '$(t)'", "t=%s", name ) );
        }
        else if ( *value == 0 )
            *value = def;
    }
    return rc;
}
Exemplo n.º 5
0
static int cmd_exec(int argc, char *argv[])
{
	u32 addr;
	void (*jump_to_img)(void) = NULL;

	if (argc != 2 || strtou32(argv[1], &addr) < 0) {
		uart_putstr("address (eg. 0x");
		uart_puthex(DRAM_START_ADDR + 0x00100000);
		uart_putstr(") is required\r\n");
		return -1;
	}

	if (addr < (DRAM_START_ADDR + 0x00100000) ||
		addr > (DRAM_START_ADDR + DRAM_SIZE - 1)) {
		uart_putstr("address out of range!\r\n");
		return -1;
	}

	jump_to_img = (void *) addr;

	if (jump_to_img != 0x0) {
		uart_putstr("jumping to 0x");
		uart_puthex(addr);
		uart_putstr(" ...\r\n");

		_clean_flush_all_cache();
		_disable_icache();
		_disable_dcache();
		disable_interrupts();

		__asm__ __volatile__ ("nop");
		__asm__ __volatile__ ("nop");
		__asm__ __volatile__ ("nop");
		__asm__ __volatile__ ("nop");

		jump_to_img();
	}

	return 0;
}
Exemplo n.º 6
0
int
patts_get_db_version (uint32_t *out)
{
  int rc;
  char *result;
  json_t *meta_header, *metadata;

  rc = sqon_query (patts_get_db (), "SELECT version FROM Meta LIMIT 1",
		   &result, NULL);
  if (rc)
    return rc;

  meta_header = json_loads (result, 0, NULL);
  sqon_free (result);
  if (NULL == meta_header)
    return PATTS_UNEXPECTED;

  metadata = json_array_get (meta_header, 0);

  *out = strtou32 (json_string_value (json_object_get (metadata, "version")));
  json_decref (meta_header);

  return 0;
}
Exemplo n.º 7
0
static
rc_t KWGAEncFileHeaderRead (KWGAEncFile * self)
{
    KWGAEncFileHeader header;
    uint8_t * pb;
    size_t num_read;
    size_t tot_read;
    rc_t rc;

    assert (self);
    assert (sizeof (KWGAEncFileHeader) == 128);


    DEBUG_STS (("s: Enter '%p'\n", __func__, self));
    pb = (void*)&header;
    for (num_read = tot_read = 0; tot_read < sizeof header; )
    {
        rc = KFileRead (self->encrypted, (uint64_t)tot_read, pb, 
                        sizeof (header) - tot_read, &num_read);
        if (rc)
        {
            LOGERR (klogErr, rc, "Error reading the header for an encrypted file");
            return rc;
        }

        if (num_read == 0)
        {
            rc =  RC (rcFS, rcFile, rcReading, rcFile, rcInsufficient);
            LOGERR (klogErr, rc, "Header incomplete for an encrypted file");
            return rc;
        }
        tot_read += num_read;
        pb += num_read;
    }

    KWGAEncFileHeaderDecrypt (&header);

    if (memcmp (header.magic, ncbi_crypt_magic, sizeof ncbi_crypt_magic) != 0)
    {
        rc = RC (rcFS, rcFile, rcReading, rcHeader, rcCorrupt);
        LOGERR (klogErr, rc, "Header's magic bad for encrypted file");
        return rc;
    }

    /* so far unknown legal range */
    self->block_size = strtou32 (header.block_sz, NULL, KWGA_ENC_FILE_HEADER_RADIX);

    self->file_size = strtou64 (header.file_sz, NULL, KWGA_ENC_FILE_HEADER_RADIX);

    /* file format has limiting feature of a 32 bit timestamp */
    self->mtime = (KTime_t)strtol (header.mtime, NULL, KWGA_ENC_FILE_HEADER_RADIX);

    switch ((FER_ENCODING)header.fer_enc)
    {
    default:
        rc = RC (rcFS, rcFile, rcReading, rcHeader, rcOutofrange);
        LOGERR (klogErr, rc, "Enryption type code out of range");
        return rc;
    case fer_encDES:
    case fer_encBLF:
        rc = RC (rcFS, rcFile, rcReading, rcHeader, rcIncorrect);
        LOGERR (klogErr, rc, "Enryption type code not supported");
        return rc;
    case fer_encAES:
        break;
    }

    self->md5_here = (header.md5_here != 0);

    if (self->md5_here)
        memmove (self->md5, header.md5, sizeof (self->md5));

    memmove (self->md51, header.md51, sizeof (self->md51));

    return 0; /* yeah not really checking later errors am i? */
}
Exemplo n.º 8
0
static int do_fuse(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
	const char *op = argc >= 2 ? argv[1] : NULL;
	int confirmed = argc >= 3 && !strcmp(argv[2], "-y");
	u32 bank, word, cnt, val;
	int ret, i;

	argc -= 2 + confirmed;
	argv += 2 + confirmed;

	if (argc < 2 || strtou32(argv[0], 0, &bank) ||
			strtou32(argv[1], 0, &word))
		return CMD_RET_USAGE;

	if (!strcmp(op, "read")) {
		if (argc == 2)
			cnt = 1;
		else if (argc != 3 || strtou32(argv[2], 0, &cnt))
			return CMD_RET_USAGE;

		printf("Reading bank %u:\n", bank);
		for (i = 0; i < cnt; i++, word++) {
			if (!(i % 4))
				printf("\nWord 0x%.8x:", word);

			ret = fuse_read(bank, word, &val);
			if (ret)
				goto err;

			printf(" %.8x", val);
		}
		putc('\n');
	} else if (!strcmp(op, "sense")) {
		if (argc == 2)
			cnt = 1;
		else if (argc != 3 || strtou32(argv[2], 0, &cnt))
			return CMD_RET_USAGE;

		printf("Sensing bank %u:\n", bank);
		for (i = 0; i < cnt; i++, word++) {
			if (!(i % 4))
				printf("\nWord 0x%.8x:", word);

			ret = fuse_sense(bank, word, &val);
			if (ret)
				goto err;

			printf(" %.8x", val);
		}
		putc('\n');
	} else if (!strcmp(op, "prog")) {
		if (argc < 3)
			return CMD_RET_USAGE;

		for (i = 2; i < argc; i++, word++) {
			if (strtou32(argv[i], 16, &val))
				return CMD_RET_USAGE;

			printf("Programming bank %u word 0x%.8x to 0x%.8x...\n",
					bank, word, val);
			if (!confirmed && !confirm_prog())
				return CMD_RET_FAILURE;
			ret = fuse_prog(bank, word, val);
			if (ret)
				goto err;
		}
	} else if (!strcmp(op, "override")) {
		if (argc < 3)
			return CMD_RET_USAGE;

		for (i = 2; i < argc; i++, word++) {
			if (strtou32(argv[i], 16, &val))
				return CMD_RET_USAGE;

			printf("Overriding bank %u word 0x%.8x with "
					"0x%.8x...\n", bank, word, val);
			ret = fuse_override(bank, word, val);
			if (ret)
				goto err;
		}
	} else {
		return CMD_RET_USAGE;
	}

	return 0;

err:
	puts("ERROR\n");
	return ret;
}
Exemplo n.º 9
0
Arquivo: prec2.c Projeto: dusek/army
int main (int argc, char *argv[]) {
	int poradi, poradi_zpetne;
	int i;

	int * permutace;

	int digits = 0;
	int power_of_ten = 1;

	int permutace_len;
	int permutace_count;
	char * tail;

	if (argc == 1)
		permutace_len = 9;
	else if (argc == 2)
		permutace_len = (int) strtou32 (argv[1]);
	else {
		writes (stderr, "Pouziti: prec <delka permutace>\n");
        exit();
		return 1;
	}

	permutace_count = faktorial (permutace_len);

	/**
	 * Spocteme pocet cislic v desitkovem zapisu poctu permutaci,
	 * abychom mohli zarovnat vypis
	 */
	//while (permutace_count > power_of_ten) {
	//	power_of_ten *= 10;
	//	digits++;
	//}

	/**
	 * Test konzistence indexovani permutaci hrubou silou. 
	 *
	 * Projdeme vsechna poradi, dekodujeme permutaci, vytiskneme permutaci,
	 * permutaci zpet zakodujeme na poradi a porovname toto poradi
	 * s puvodnim. Jestli se lisi, tiskneme na konci radku "!!!FAIL!!!",
	 * jestli ne, tak "OK".
	 */
    permutace = (int *) 0x90000000;
	for (poradi = 1; poradi <= permutace_count; poradi++) {
		writes (stderr, "Permutace ");
        writei (stderr, poradi);
		writes (stderr, ": ");

  	    poradi_na_permutace (poradi, permutace, permutace_len);
		PRINT_INT_ARRAY (permutace, permutace_len, i);

		poradi_zpetne = permutace_na_poradi (permutace, permutace_len);
		if (poradi_zpetne == poradi)
			writes (stderr, " OK");
		else {
			writes (stderr, " FAILED, permutace_na_poradi vratila ");
            writei (stderr, poradi_zpetne);
        }
		writes (stderr, "\n");
	}
	
    exit();
	return 0;
}
Exemplo n.º 10
0
static int cmd_dump(int argc, char *argv[])
{
	u32	val;
	u32	_saddr;
	u32	_eaddr;
	u32	_caddr;
	u32	_taddr;
	int	num;
	int	count = 0;
	int	flag = 1;

	if (argc == 3 || argc == 5) {
		if (argc == 3)
			flag = 0;

		if (strcmp("8", argv[1]) == 0) {
			num = 1;
		} else if (strcmp("16", argv[1]) == 0) {
			num = 2;
		} else if (strcmp("32", argv[1]) == 0) {
			num = 4;
		} else {
			uart_putstr("2nd argument be [8|16|32]!\r\n");
			return -1;
		}

		/* Get start address */
		if (strtou32(argv[2], &_saddr) < 0) {
			uart_putstr("invalid start sddress!\r\n");
			return -2;
		}

		_taddr = _saddr & 0xf0000000;

		if (_taddr != AHB_BASE &&
		    _taddr != APB_BASE &&
		    _taddr != DRAM_START_ADDR) {
			uart_putstr("start address out of range!\r\n");
			return -3;
		}

		/* Check for '-' */
		if (flag == 1 && strcmp("-", argv[3]) != 0) {
			uart_putstr("syntax error!\r\n");
			return -4;
		}

		/* Get end address */
		if (flag == 1 && strtou32(argv[4], &_eaddr) < 0) {
			uart_putstr("invalid end address!\r\n");
			return -5;
		}

		if (flag == 0)
			_eaddr = _saddr + num - 1;

		/* Check end address range */
		_taddr = _eaddr & 0xf0000000;
		if (_taddr != AHB_BASE &&
		    _taddr != APB_BASE &&
		    _taddr != DRAM_START_ADDR) {
			uart_putstr("end address out of range!\r\n");
			return -6;
		}

		/* Check address range */
		if (_eaddr < _saddr) {
			uart_putstr("end address must be larger than ");
			uart_putstr("start address\r\n");
			return -7;
		}

		/* Dump memory */
		for (_caddr = _saddr; _caddr <= _eaddr; ) {
			if ((count % 16) == 0){
				if (count != 0)
					uart_putstr("\r\n");
				uart_putstr("0x");
				uart_puthex(_caddr);
				uart_putstr(" ");
			}
			if (num == 1) {
				val = readb(_caddr);
				uart_putbyte(val);
				uart_putstr(" ");
				_caddr += 1;
				count += 1;
			} else if (num == 2) {
				val = readb(_caddr);
				uart_putbyte(val);
				uart_putstr(" ");
				val = readb(_caddr + 1);
				uart_putbyte(val);
				uart_putstr(" ");
				_caddr += 2;
				count += 2;
			} else if (num == 4) {
				val = readb(_caddr);
				uart_putbyte(val);
				uart_putstr(" ");
				val = readb(_caddr + 1);
				uart_putbyte(val);
				uart_putstr(" ");
				val = readb(_caddr + 2);
				uart_putbyte(val);
				uart_putstr(" ");
				val = readb(_caddr + 3);
				uart_putbyte(val);
				uart_putstr(" ");
				_caddr += 4;
				count += 4;
			}
		}
		uart_putstr("\r\n");
	} else {
		uart_putstr("Type 'help dump' for help\r\n");
		return -8;
	}

	return 0;
}
Exemplo n.º 11
0
static int cmd_setmem(int argc, char *argv[])
{
    u32	val;
    u32	_saddr;
    u32	_eaddr;
    u32	_caddr;
    u32	_taddr;
    int	num;

    if (argc == 7) {
        if (strcmp("8", argv[1]) == 0) {
            num = 1;
        } else if (strcmp("16", argv[1]) == 0) {
            num = 2;
        } else if (strcmp("32", argv[1]) == 0) {
            num = 4;
        } else {
            uart_putstr("2nd argument must be [8|16|32]!\r\n");
            return -1;
        }

        /* Get starting address */
        if (strtou32(argv[2], &_saddr) < 0) {
            uart_putstr("invalid start address!\r\n");
            return -2;
        }

        /* Get start address range */
        _taddr = _saddr & 0xf0000000;
        if (_taddr != AHB_BASE &&
                _taddr != APB_BASE &&
                _taddr != DRAM_START_ADDR) {
            uart_putstr("start address out of range!\r\n");
            return -3;
        }

        /* Check for '-' */
        if (strcmp("-", argv[3]) != 0) {
            uart_putstr("syntax error!\r\n");
            return -4;
        }

        /* Get end address */
        if (strtou32(argv[4], &_eaddr) < 0) {
            uart_putstr("incorrect ending address\r\n");
            return -5;
        }

        /* Check end address range */
        _taddr = _eaddr & 0xf0000000;
        if (_taddr != AHB_BASE &&
                _taddr != APB_BASE &&
                _taddr != DRAM_START_ADDR) {
            uart_putstr("end address out of range!\r\n");
            return -6;
        }

        /* Check address range */
        if (_eaddr < _saddr) {
            uart_putstr("end address must be larger than ");
            uart_putstr("start address\r\n");
            return -7;
        }

        /* Check for ':' */
        if (strcmp(":", argv[5]) != 0) {
            uart_putstr("syntax error!\r\n");
            return -8;
        }

        /* Get pattern */
        if (strtou32(argv[6], &val) < 0) {
            uart_putstr("invalid pattern!\r\n");
            return -9;
        }

        /* Perform the set operation */
        for (_caddr = _saddr; _caddr <= _eaddr; ) {
            if (num == 1 && (val & 0xffffff00) == 0) {
                writeb(_caddr, val);
                _caddr += 1;
            } else if (num == 2 && (val & 0xffff0000) == 0) {
                writeb(_caddr, val);
                writeb(_caddr + 1, val >> 8);
                _caddr += 2;
            } else if (num == 4) {
                writeb(_caddr, val);
                writeb(_caddr + 1, val >> 8);
                writeb(_caddr + 2, val >> 16);
                writeb(_caddr + 3, val >> 24);
                _caddr += 4;
            }