示例#1
0
static int
dcons_drv_init(int stage)
{
	int size, size0, offset;

	if (drv_init)
		return(drv_init);

	drv_init = -1;

	dcons_bufsize = DCONS_BUF_SIZE;

#ifndef KLD_MODULE
	if (stage == 0) /* XXX or cold */
		/*
		 * DCONS_FORCE_CONSOLE == 1 and statically linked.
		 * called from cninit(). can't use contigmalloc yet .
		 */
		dcons_buf = (struct dcons_buf *) bssbuf;
	else
#endif
		/*
		 * DCONS_FORCE_CONSOLE == 0 or kernel module case.
		 * if the module is loaded after boot,
		 * dcons_buf could be non-continuous.
		 */ 
		dcons_buf = (struct dcons_buf *) contigmalloc(dcons_bufsize,
			M_DEVBUF, 0, 0x10000, 0xffffffff, PAGE_SIZE, 0ul);

	offset = DCONS_HEADER_SIZE;
	size = (dcons_bufsize - offset);
	size0 = size * 3 / 4;

	dcons_init_port(0, offset, size0);
	offset += size0;
	dcons_init_port(1, offset, size - size0);
	dcons_buf->version = htonl(DCONS_VERSION);
	dcons_buf->magic = ntohl(DCONS_MAGIC);

#if DDB && DCONS_FORCE_GDB
#if CONS_NODEV
	gdbconsdev.cn_arg = (void *)&sc[DCONS_GDB];
#if __FreeBSD_version >= 501109
	sprintf(gdbconsdev.cn_name, "dgdb");
#endif
	gdb_arg = &gdbconsdev;
#else
	gdbdev = makedev(CDEV_MAJOR, DCONS_GDB);
#endif
	gdb_getc = dcons_cngetc;
	gdb_putc = dcons_cnputc;
#endif
	drv_init = 1;

	return 0;
}
示例#2
0
文件: dcons.c 项目: 2asoft/freebsd
void
dcons_init(struct dcons_buf *buf, int size, struct dcons_softc *sc)
{
	int size0, size1, offset;

	offset = DCONS_HEADER_SIZE;
	size0 = (size - offset);
	size1 = size0 * 3 / 4;		/* console port buffer */

	dcons_init_port(0, offset, size1, buf, sc);
	offset += size1;
	dcons_init_port(1, offset, size0 - size1, buf, sc);
	buf->version = htonl(DCONS_VERSION);
	buf->magic = ntohl(DCONS_MAGIC);
}