~kris/9p

9hist

c47f810bb8411729eea2565ecd43c03ce7d705e6 — David du Colombier 25 years ago d2a38bf
Plan 9 from Bell Labs 2000-10-08
5 files changed, 125 insertions(+), 44 deletions(-)

M bitsy/clock.c
M bitsy/fns.h
M bitsy/io.h
M bitsy/main.c
M port/xalloc.c
M bitsy/clock.c => bitsy/clock.c +0 -3
@@ 76,11 76,8 @@ clockintr(Ureg*, void*)

	/* post interrupt 1/HZ secs from now */
	timerregs->osmr[0] = timerregs->oscr + ClockFreq/HZ;
	iprint("timer interrupt\n");

	m->ticks++;
	if(m->ticks >= 100)
		exit(0);
}

void

M bitsy/fns.h => bitsy/fns.h +3 -0
@@ 17,6 17,8 @@ void	idle(void);
#define	idlehands()			/* nothing to do in the runproc */
void	intrenable(int, void (*)(Ureg*, void*), void*, char*);
int	iprint(char*, ...);
void	irpower(int);
void	lcdpower(int);
void	mappedIvecEnable(void);
void	mappedIvecDisable(void);
void*	mapspecial(ulong, int);


@@ 33,6 35,7 @@ void	putdac(ulong);
void	putttb(ulong);
void	putpid(ulong);
void	reset(void);
void	rs232power(int);
Uart*	uartsetup(PhysUart*, void*, ulong, char*);
void	sa1100_uartsetup(void);
void	screeninit(void);

M bitsy/io.h => bitsy/io.h +66 -28
@@ 48,34 48,34 @@ enum
 */
enum
{
	PWR_ON_i=	1<<0,	/* power button */
	UP_IRQ_i=	1<<1,	/* microcontroller interrupts */
	LDD8_o=		1<<2,	/* LCD data 8-15 */
	LDD9_o=		1<<3,
	LDD10_o=	1<<4,
	LDD11_o=	1<<5,
	LDD12_o=	1<<6,
	LDD13_o=	1<<7,
	LDD14_o=	1<<8,
	LDD15_o=	1<<9,
	CARD_IND1_i=	1<<10,	/* card inserted in PCMCIA socket 1 */
	CARD_IRQ1_i=	1<<11,	/* PCMCIA socket 1 interrupt */
	CLK_SET0_o=	1<<12,	/* clock selects for audio codec */
	CLK_SET1_o=	1<<13,
	L3_SDA_io=	1<<14,	/* UDA1341 interface */
	L3_MODE_o=	1<<15,
	L3_SCLK_o=	1<<16,
	CARD_IND0_i=	1<<17,	/* card inserted in PCMCIA socket 0 */
	KEY_ACT_i=	1<<18,	/* hot key from cradle */
	SYS_CLK_i=	1<<19,	/* clock from codec */
	BAT_FAULT_i=	1<<20,	/* battery fault */
	CARD_IRQ0_i=	1<<21,	/* PCMCIA socket 0 interrupt */
	LOCK_i=		1<<22,	/* expansion pack lock/unlock */
	COM_DCD_i=	1<<23,	/* DCD from UART3 */
	OPT_IRQ_i=	1<<24,	/* expansion pack IRQ */
	COM_CTS_i=	1<<25,	/* CTS from UART3 */
	COM_RTS_oi=	1<<26,	/* RTS to UART3 */
	OPT_IND_i=	1<<27,	/* expansion pack inserted */
	GPIO_PWR_ON_i=		1<<0,	/* power button */
	GPIO_UP_IRQ_i=		1<<1,	/* microcontroller interrupts */
	GPIO_LDD8_o=		1<<2,	/* LCD data 8-15 */
	GPIO_LDD9_o=		1<<3,
	GPIO_LDD10_o=		1<<4,
	GPIO_LDD11_o=		1<<5,
	GPIO_LDD12_o=		1<<6,
	GPIO_LDD13_o=		1<<7,
	GPIO_LDD14_o=		1<<8,
	GPIO_LDD15_o=		1<<9,
	GPIO_CARD_IND1_i=	1<<10,	/* card inserted in PCMCIA socket 1 */
	GPIO_CARD_IRQ1_i=	1<<11,	/* PCMCIA socket 1 interrupt */
	GPIO_CLK_SET0_o=	1<<12,	/* clock selects for audio codec */
	GPIO_CLK_SET1_o=	1<<13,
	GPIO_L3_SDA_io=		1<<14,	/* UDA1341 interface */
	GPIO_L3_MODE_o=		1<<15,
	GPIO_L3_SCLK_o=		1<<16,
	GPIO_CARD_IND0_i=	1<<17,	/* card inserted in PCMCIA socket 0 */
	GPIO_KEY_ACT_i=		1<<18,	/* hot key from cradle */
	GPIO_SYS_CLK_i=		1<<19,	/* clock from codec */
	GPIO_BAT_FAULT_i=	1<<20,	/* battery fault */
	GPIO_CARD_IRQ0_i=	1<<21,	/* PCMCIA socket 0 interrupt */
	GPIO_LOCK_i=		1<<22,	/* expansion pack lock/unlock */
	GPIO_COM_DCD_i=		1<<23,	/* DCD from UART3 */
	GPIO_OPT_IRQ_i=		1<<24,	/* expansion pack IRQ */
	GPIO_COM_CTS_i=		1<<25,	/* CTS from UART3 */
	GPIO_COM_RTS_o=		1<<26,	/* RTS to UART3 */
	GPIO_OPT_IND_i=		1<<27,	/* expansion pack inserted */
};

enum


@@ 164,3 164,41 @@ struct Uart

	Rendez	r;
};

/* general purpose I/O lines control registers */
typedef struct GPIOregs GPIOregs;
struct GPIOregs
{
	ulong	level;		/* 1 == high */
	ulong	direction;	/* 1 == output */
	ulong	set;		/* a 1 sets the bit, 0 leaves it alone */
	ulong	clear;		/* a 1 clears the bit, 0 leaves it alone */
	ulong	rising;		/* rising edge detect enable */
	ulong	falling;	/* falling edge detect enable */
	ulong	edgestatus;	/* writing a 1 bit clears */
	ulong	altfunc;	/* turn on alternate function for any set bits */
};

extern GPIOregs *gpioregs;

/* extra general purpose I/O bits, output only */
enum
{
	EGPIO_prog_flash=	1<<0,
	EGPIO_pcmcia_reset=	1<<1,
	EGPIO_exppack_reset=	1<<2,
	EGPIO_codec_reset=	1<<3,
	EGPIO_exp_nvram_power=	1<<4,
	EGPIO_exp_full_power=	1<<5,
	EGPIO_lcd_3v=		1<<6,
	EGPIO_rs232_power=	1<<7,
	EGPIO_lcd_ic_power=	1<<8,
	EGPIO_ir_power=		1<<9,
	EGPIO_audio_power=	1<<10,
	EGPIO_audio_ic_power=	1<<11,
	EGPIO_audio_mute=	1<<12,
	EGPIO_fir=		1<<13,	/* not set is sir */
	EGPIO_lcd_5v=		1<<14,
	EGPIO_lcd_9v=		1<<15,
};
extern ulong *egpioreg;

M bitsy/main.c => bitsy/main.c +55 -11
@@ 11,6 11,8 @@
Mach *m;
Conf conf;

static void	gpioinit(void);

void
main(void)
{


@@ 20,26 22,18 @@ main(void)
	/* point to Mach structure */
	m = (Mach*)MACHADDR;

	rs232power(1);
	iprint("bitsy kernel\n");
	confinit();
	iprint("%d pages %lux(%lud) %lux(%lud)\n", conf.npage, conf.base0, conf.npage0, conf.base1, conf.npage1);
	xinit();
	iprint("after xinit\n");
	iprint("testing 2 second delay\n");
	delay(2000);
	iprint("done\n");
	mmuinit();
	sa1100_uartsetup();
	iprint("after mmuinit\n");
	gpioinit();
	trapinit();
	iprint("after trapinit\n");
	clockinit();
	iprint("after clockinit\n");
trapdump("before spllo");
	spllo();
	iprint("after spllo\n");
	delay(10000);
trapdump("after delay");
	delay(1000);
	exit(1);
}



@@ 187,3 181,53 @@ confinit(void)
	conf.copymode = 0;		/* copy on write */
}

GPIOregs *gpioregs;
ulong *egpioreg;

static void
gpioinit(void)
{
	gpioregs = mapspecial(GPIOREGS, 32);
	gpioregs->direction = 
		GPIO_LDD8_o|GPIO_LDD9_o|GPIO_LDD10_o|GPIO_LDD11_o
		|GPIO_LDD12_o|GPIO_LDD13_o|GPIO_LDD14_o|GPIO_LDD15_o
		|GPIO_CLK_SET0_o|GPIO_CLK_SET1_o
		|GPIO_L3_SDA_io|GPIO_L3_MODE_o|GPIO_L3_SCLK_o
		|GPIO_COM_RTS_o;
	gpioregs->rising = 0;
	gpioregs->falling = 0;

	egpioreg = mapspecial(EGPIOREGS, 4);
}

static ulong egpiosticky;

void
rs232power(int on)
{
	if(on)
		egpiosticky |= EGPIO_rs232_power;
	else
		egpiosticky &= ~EGPIO_rs232_power;
	*egpioreg = egpiosticky;
}

void
irpower(int on)
{
	if(on)
		egpiosticky |= EGPIO_ir_power;
	else
		egpiosticky &= ~EGPIO_ir_power;
	*egpioreg = egpiosticky;
}

void
lcdpower(int on)
{
	if(on)
		egpiosticky |= EGPIO_lcd_3v|EGPIO_lcd_ic_power|EGPIO_lcd_5v|EGPIO_lcd_9v;
	else
		egpiosticky &= ~(EGPIO_lcd_3v|EGPIO_lcd_ic_power|EGPIO_lcd_5v|EGPIO_lcd_9v);
	*egpioreg = egpiosticky;
}

M port/xalloc.c => port/xalloc.c +1 -2
@@ 81,7 81,6 @@ xinit(void)
	conf.base1 = (ulong)KADDR(conf.base1);
	conf.npage0 = (ulong)KADDR(conf.npage0);
	conf.npage1 = (ulong)KADDR(conf.npage1);
iprint("xinit returning\n");
}

void*


@@ 219,7 218,7 @@ xhole(ulong addr, ulong size)

	if(xlists.flist == nil) {
		iunlock(&xlists);
		iprint("xfree: no free holes, leaked %lud bytes\n", size);
		print("xfree: no free holes, leaked %lud bytes\n", size);
		return;
	}