Ejemplo n.º 1
0
static int
dcons_init_port(int port, int offset, int size)
{
	int osize;
	struct dcons_softc *dc;

	dc = &sc[port];

	osize = size * 3 / 4;

	dc->o.size = osize;
	dc->i.size = size - osize;
	dc->o.buf = (char *)dcons_buf + offset;
	dc->i.buf = dc->o.buf + osize;
	dc->o.gen = dc->i.gen = 0;
	dc->o.pos = dc->i.pos = 0;
	dc->o.ptr = &dcons_buf->optr[port];
	dc->i.ptr = &dcons_buf->iptr[port];
	dc->brk_state = STATE0;
	dcons_buf->osize[port] = htonl(osize);
	dcons_buf->isize[port] = htonl(size - osize);
	dcons_buf->ooffset[port] = htonl(offset);
	dcons_buf->ioffset[port] = htonl(offset + osize);
	dcons_buf->optr[port] = DCONS_MAKE_PTR(&dc->o);
	dcons_buf->iptr[port] = DCONS_MAKE_PTR(&dc->i);

	return(0);
}
Ejemplo n.º 2
0
void
dcons_putc(struct dcons_softc *dc, int c)
{
	struct dcons_ch *ch;

	ch = &dc->o;

	ch->buf[ch->pos] = c;
	ch->pos ++;
	if (ch->pos >= ch->size) {
		ch->gen = DCONS_NEXT_GEN(ch->gen);
		ch->pos = 0;
	}
	*ch->ptr = DCONS_MAKE_PTR(ch);
}
Ejemplo n.º 3
0
static void
dcons_putc(struct dcons_softc *dc, int c)
{
	struct dcons_ch *ch;

	ch = &dc->o;

	ch->buf[ch->pos] = c;
	ch->pos ++;
	if (ch->pos >= ch->size) {
		ch->gen = DCONS_NEXT_GEN(ch->gen);
		ch->pos = 0;
	}
	*ch->ptr = DCONS_MAKE_PTR(ch);
	if (dcons_dma_tag != NULL)
		bus_dmamap_sync(dcons_dma_tag, dcons_dma_map,
						BUS_DMASYNC_PREWRITE);
}