OpenBSD/sgi on octane2 - cpu1デバッグ用のcom1向け簡易putcの実装

実装つってもdev/ic/com.cのコピペな訳だが、printfが動いてないかもしれないって事でcom1へダイレクトに出力が行えるコードを実装しようとしてみた。

#define	COM_NPORTS	8
#define	COM_FREQ	1843200	/* 16-bit baud rate divisor */
int	combfreq = 22000000 / 3;
int	combrate = TTYDEF_SPEED;
bus_addr_t combaddr = 0x500000 + IOC3_UARTB_BASE;
bus_space_tag_t combiot = &sys_config.console_io;
bus_space_handle_t combioh;

void
cominit(bus_space_tag_t iot, bus_space_handle_t ioh, int rate, int frequency);

static void
combinit(void)
{
	if (bus_space_map(combiot, combaddr, COM_NPORTS, 0, &combioh))
		panic("comcninit: mapping failed");

	if (combfreq == 0)
		combfreq = COM_FREQ;

	cominit(combiot, combioh, combrate, combfreq);
}

static void
combputc(int c)
{
	com_common_putc(comconsiot, comconsioh, c);
}

static void
combputs(char *s)
{
	int c;
	while((c = *s++) != '\0')
		combputc(c);
}

動かしてみた。
・・・・何故かcom0へ出力されてる。
あんれー。

IOC3_UARTA_BASEをIOC3_UARTB_BASEへ書き換えればcom1へ出力し放題だぜ!と思ったが、そういう問題ではないのかもしれない。
ていうか、ハードウェアの仕様書が欲しい。くふう。
comのドライバは汎用的なコードを極力つかう努力が行われているのでかえって微妙に読みにくい。
どのパラメータで何をどうして結局ハードウェアレジスタのアドレスがいくつになってるのか良く分からない。

com1へシリアルケーブルを繋いで試そうとか思ったら、クロスケーブルがなかった。
買いに行かなくては。