コード例 #1
0
int debug_uart_init(struct mem_map *mem, physaddr_t base, size_t len)
{
	struct region *r;
	struct uart *u;
	const char *sock = getenv("OLDLAND_UART_SOCK");

	u = malloc(sizeof(*u));
	assert(u);

	if (!sock) {
		u->fd = open("uart_tx.txt", O_WRONLY | O_CREAT | O_NONBLOCK,
			     0600);
		assert(u->fd >= 0);
	} else {
		struct sockaddr_un addr;
		int len;

		u->fd = socket(AF_UNIX, SOCK_STREAM, 0);
		assert(u->fd >= 0);

		addr.sun_family = AF_UNIX;
		strncpy(addr.sun_path, sock, sizeof(addr.sun_path));
		addr.sun_path[sizeof(addr.sun_path) - 1] = '\0';
		len = strlen(addr.sun_path) + sizeof(addr.sun_family);
		if (connect(u->fd, (struct sockaddr *)&addr, len) < 0)
			die("failed to connect to uart socket %s\n", sock);
	}

	r = mem_map_region_add(mem, base, len, &uart_io_ops, u);
	assert(r != NULL);

	return 0;
}
コード例 #2
0
ファイル: memory.c プロジェクト: 8l/oldland-cpu
int ram_init(struct mem_map *mem, physaddr_t base, size_t len,
	     const char *init_contents)
{
	struct region *r;
	void *ram;

	assert(mem != NULL);

	ram = mmap(NULL, len, PROT_READ | PROT_WRITE,
		   MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
	assert(ram != MAP_FAILED);
	r = mem_map_region_add(mem, base, len, &ram_io_ops, ram,
			       MEM_MAPF_CACHEABLE);
	assert(r != NULL);

	if (init_contents) {
		ssize_t br;
		int fd = open(init_contents, O_RDONLY);
		assert(fd >= 0);

		br = read(fd, ram, len);
		assert(br >= 0);
		debug("read %zd bytes into RAM @%08x from %s\n", br, base,
		      init_contents);
		close(fd);
	}

	return 0;
}
コード例 #3
0
ファイル: memory.c プロジェクト: 8l/oldland-cpu
int sdram_ctrl_init(struct mem_map *mem, physaddr_t base, size_t len)
{
	struct region *r = mem_map_region_add(mem, base, len, &sdram_ctrl_ops,
					      NULL, 0);
	assert(r != NULL);

	return 0;
}
コード例 #4
0
ファイル: memory.c プロジェクト: 8l/oldland-cpu
int rom_init(struct mem_map *mem, physaddr_t base, size_t len,
	     const char *filename)
{
	void *rom;
	struct region *r;
	int fd = open(filename, O_RDONLY);

	assert(fd >= 0);
	rom = mmap(NULL, len, PROT_READ, MAP_PRIVATE, fd, 0);
	assert(rom != MAP_FAILED);
	r = mem_map_region_add(mem, base, len, &rom_io_ops, rom,
			       MEM_MAPF_CACHEABLE);
	assert(r != NULL);

	return 0;
}
コード例 #5
0
ファイル: spimaster.c プロジェクト: 8l/oldland-cpu
struct spimaster *spimaster_init(struct mem_map *mem, physaddr_t base,
				 struct spislave **slaves, size_t nr_slaves)
{
	struct region *r;
	struct spimaster *master;

	master = calloc(1, sizeof(*master));
	assert(master);

	master->slaves = slaves;
	master->nr_slaves = nr_slaves;
	assert(nr_slaves <= sizeof(unsigned int) * 8);

	r = mem_map_region_add(mem, base, 16384, &spimaster_ops, master, 0);
	assert(r);

	return master;
}