$NetBSD: TODO,v 1.16 2001/08/28 15:17:47 tsutsui Exp $

To do list (not in any particular order).

    o	XXX at least 2000/06/07 version is already quite unstable
	on PICA and NEC Image RISCstation. (but almost OK on Magnum)
	Userland commands dumps	core randomly.
	This version is before _MIPS_PADDR_T_64BIT changes
	and MIPS3_TLB_WIRED_UPAGES changes.	

	"vm_page_zero_enable = FALSE" makes this problem disappeared.
	(vm_page_zero_enable = FALSE by default on all archs w/ UBC, now)

	currently, page zero in the idle loop is also disabled on
	untested platforms like DESKstation rPC44/Tyne and SNI for safety.

    o	XXX sudden hang up in a few minutes or dozens of minutes.
	2000 Mar 17 -current is OK. Mar 29 is NG.

    o	Move the RO and WIRED attribute from the pte to the pv table.
	This saves four instructions in the tlb miss handler.

    o   Boot. Standalone boot program instead of booting the kernel directly.

    o   Find out why bitmap load to S3-928 flashes screen. (X server)
	Know why (enable linear mode). Need S3 info.

    o   Can we have 32 double registers?

    o	64bit kernel/userland

    o	NEC RISCstation 2200 support

	-   VXL framebuffer
	-   VGA framebuffer or character generator
	-   oosiop

    o	repair DESKstation support

	-   requires bounce buffer bus_dma for Tyne
		XXX - too small bounce buffer size

    o	Olivetti M700 support

    o	NEC Express 5800/230 R10000 version support

    o	SNI RM200PCI support

    o	sysinst

    o	install notes

    o	www: diskless HOW-TO port-arc specific part.

    o	Xserver

	-   VXL		magnum, some RISCserver 2200
	-   vga/S3	pica, Image RISCstation - OpenBSD's?
	-   vga/cirrus	some RISCserver 2200
	-   vga/???	DESKstation Tyne, rPC44
	-   TGA		RISCserver 2250

    o	X clients
	probably pmax binary is good enough.

    o	remove inb/outb

    o	remove UADDR

    o	redesign interrupt handler framework.
	i/o bus devices should have sane IPL, but currently doesn't.

	also, current MIPS interrupt handler has overblocking and
	other problems as follows:

	-   SR_INT_IE should be enabled before calling hardclock().
	    Since this is not done currently, spllowersoftclock()
	    on hardclock() doesn't have effect, and softclock() is
	    handled with all interrupt disabled in this case.
		-> overblocking, possibly causes missing hardclock()

	-   MIPS3_CLKF_BASEPRI() doesn't work correctly,
	    when MIPS_INT_MASK_5 (== MIPS_INT_MASK_CLOCK) is disabled.
		-> micro optimization on hardclock() doesn't work.
		   but currently this may make hardclock() latency better
		   due to above SR_INT_IE problem.
	    s/MIPS_INT_MASK/MIPS3_INT_MASK/ makes this work, although tricky.

	-   if (ipending & INT_MASK_REAL_DEV) == 0,
	    softnet() and softclock() are handled with all interrupt disabled.
		-> overblocking, possibly causes missing hardclock()

	-   softclock() is handled with softnet() disabled.
		-> slightly overblocking

	-   `netisr' handling in netintr() implies potential race condition.
	    The access to `netisr' should be protected by splnet().
	    Currently this is not real problem due to above overblocking.

	    `ssir' handling on many mips ports has same problem.
	    It should be protected by splnet() or splserial() or splhigh()
	    (depends on the highest interrupt level which sets `ssir').
	    Since `ssir' is accessed not only by setsoftnet() but also
	    by setsoft(), setsoftnet() should protect `ssir' by splserial()
	    or something. (i.e. priority level which setsoft() will be called)
	    Probably, it is better to split `ssir' variable for each
	    priority level.
	    Also, _clearsoftintr() should be called before `ssir' access.
	    currently this is not real problem due to above overblocking.

	-   INT_MASK_REAL_DEV should be removed

	-   make CLKF_INTR() work.

	-   generic software interrupt

	-   major rework, possibly by software emulated spl.
		splserial()/splsoftserial()

    o	it is better to always disable MIPS_INT_MASK_CLOCK.
	those are the points which should be fixed:
	mips_idle: li t0, (MIPS_INT_MASK | MIPS_SR_INT_IE)
	machdep.c: curpcb->pcb_context[11] = MIPS_INT_MASK | MIPS_SR_INT_IE;
	spl0()
	splnone()

	-   MIPS_INT_MASK_CLOCK should be removed in someway

    o	fix kernel start address

    o	allocate PICA_TL_BASE dynamically

    o	fix mem_clusters[] usage.

    o	test and merge soren's clean up about proc0.p_addr.

    o	parse ARC BIOS configuration information and use it

    o	omit __SWAP_BROKEN in <mips/types.h>

    o	fix implementation of DELAY(), clean up clock implementation

    o	increase MAXPHYS to 64KB

    o	wscons / VXL framebuffer

    o	wscons / VGA framebuffer (merge bjy's driver)

    o	wscons / VGA character generator (fix initialization on RISCserver)

    o	asc.c scsi clock/NCR53CF94 handling clean up

    o	com_jazzio.c

	-   clock handling clean up (obtain from ARC firmware)
	-   fifo disabling may be only needed on some Magnum?

    o	intrcnt[] name cleanup, use evcnt

    o	oosiop (NCR 53c700 driver) by Urata-san
	for NEC RISCserver 2200, RISCstation 2200 and RISCstation 2250.

    o	audio driver

    o	use MI driver

	-   use MI ncr53c9x driver instead of home grown asc

	-   use MI bha driver instead of home grown btl

	-   make fd driver MI, and share it with i386
	    (contact christos about MI fd driver)

	-   make pccons MI, and share it with i386,
	    or simply eliminate pccons

    o	LKM support on MIPS

    o	and missing MI devices
		ses?, vcoda, ...

    o	bus_dmamap_sync: Hit_Invalidate and Hit_Write_Back cache operation

    o	clean up ALEAF/NLEAF/NON_LEAF/NNON_LEAF in userland.

    o	resolve "XXX"

Lots of other things.....
