Пример #1
0
int
getchar(void)
{
	unsigned char c = '\0';
	int i;

	for (;;) {
		i = apbus ? apcall_read(1, &c, 1) : rom_read(1, &c, 1);
		if (i == 1)
			break;
		if (i != -2 && i != 0)
			return -1;
	}
	return c;
}
Пример #2
0
/*
 * Receive a packet, including the ether header.
 * Return the total length received (or -1 on error).
 */
ssize_t
netif_get(struct iodesc *desc, void *pkt, size_t maxlen, time_t timo)
{
	struct romdev *pd;
	int tick0;
	ssize_t len;

	pd = (struct romdev *)desc->io_netif;

#ifdef NETIF_DEBUG
	if (netif_debug)
		printf("netif_get: pkt=0x%x, maxlen=%d, tmo=%d\n",
			   pkt, maxlen, timo);
#endif

	tick0 = getsecs();

	do {
		len = apcall_read(pd->fd, pkt, maxlen);
	} while ((len == 0) && ((getsecs() - tick0) < timo));

#ifdef NETIF_DEBUG
	if (netif_debug)
		printf("netif_get: received len=%d\n", len);
#endif

	if (len < 12)
		return -1;

#ifdef NETIF_DEBUG
	if (netif_debug) {
		struct ether_header *eh = pkt;

		printf("dst: %s ", ether_sprintf(eh->ether_dhost));
		printf("src: %s ", ether_sprintf(eh->ether_shost));
		printf("type: 0x%x\n", eh->ether_type & 0xFFFF);
	}
#endif

	return len;
}