Ejemplo n.º 1
0
Archivo: bt459.c Proyecto: Prajna/mach
bt459_video_off(
	struct vstate	*vstate,
	user_info_t	*up)
{
	register bt459_padded_regmap_t	*regs = vstate->regs;
	unsigned char		*save;

	if (vstate->off)
		return;

	/* Yes, this is awful */
	save = (unsigned char *)up->dev_dep_2.gx.colormap;

	bt459_select_reg(regs, 0);
	*save++ = regs->addr_cmap;
	*save++ = regs->addr_cmap;
	*save++ = regs->addr_cmap;

	bt459_select_reg(regs, 0);
	regs->addr_cmap = 0;
	wbflush();
	regs->addr_cmap = 0;
	wbflush();
	regs->addr_cmap = 0;
	wbflush();

	bt459_write_reg( regs, BT459_REG_PRM, 0);
	bt459_write_reg( regs, BT459_REG_CCR, 0);

	vstate->off = 1;
}
Ejemplo n.º 2
0
static void ip32_machine_power_off(void)
{
	volatile unsigned char reg_a, xctrl_a, xctrl_b;

	disable_irq(MACEISA_RTC_IRQ);
	reg_a = CMOS_READ(RTC_REG_A);

	/* setup for kickstart & wake-up (DS12287 Ref. Man. p. 19) */
	reg_a &= ~DS_REGA_DV2;
	reg_a |= DS_REGA_DV1;

	CMOS_WRITE(reg_a | DS_REGA_DV0, RTC_REG_A);
	wbflush();
	xctrl_b = CMOS_READ(DS_B1_XCTRL4B)
		   | DS_XCTRL4B_ABE | DS_XCTRL4B_KFE;
	CMOS_WRITE(xctrl_b, DS_B1_XCTRL4B);
	xctrl_a = CMOS_READ(DS_B1_XCTRL4A) & ~DS_XCTRL4A_IFS;
	CMOS_WRITE(xctrl_a, DS_B1_XCTRL4A);
	wbflush();
	/* adios amigos... */
	CMOS_WRITE(xctrl_a | DS_XCTRL4A_PAB, DS_B1_XCTRL4A);
	CMOS_WRITE(reg_a, RTC_REG_A);
	wbflush();

	while(1) {
	  	printk(KERN_DEBUG "Power off!\n");
	}
}
Ejemplo n.º 3
0
Archivo: bt459.c Proyecto: Prajna/mach
bt459_video_on(
	struct vstate	*vstate,
	user_info_t	*up)
{
	register bt459_padded_regmap_t	*regs = vstate->regs;
	unsigned char		*save;

	if (!vstate->off)
		return;

	/* Like I said.. */
	save = (unsigned char *)up->dev_dep_2.gx.colormap;

	bt459_select_reg(regs, 0);
	regs->addr_cmap = *save++;
	wbflush();
	regs->addr_cmap = *save++;
	wbflush();
	regs->addr_cmap = *save++;
	wbflush();

	bt459_write_reg( regs, BT459_REG_PRM, 0xff);
	bt459_write_reg( regs, BT459_REG_CCR, 0xc0);

	vstate->off = 0;
}
Ejemplo n.º 4
0
void
mcclock_poweroff(void)
{
	uint8_t a, xctl_a, xctl_b;

	if (mace0 == NULL)
		return;

	(void)splhigh();
	a = ds1687_read(mace0, DS1687_CONTROLA);
	a &= ~DS1687_DV2;
	a |= DS1687_DV1;
	ds1687_write(mace0, DS1687_CONTROLA, a | DS1687_BANK1);
	wbflush();

	xctl_b = ds1687_read(mace0, DS1687_BANK1_XCTRL4B);
	xctl_b |= DS1687_X4B_ABE | DS1687_X4B_KIE;
	ds1687_write(mace0, DS1687_BANK1_XCTRL4B, xctl_b);

	xctl_a = ds1687_read(mace0, DS1687_BANK1_XCTRL4A);
	xctl_a &= ~(DS1687_X4A_RCF | DS1687_X4A_WAF | DS1687_X4A_KF);
	ds1687_write(mace0, DS1687_BANK1_XCTRL4A, xctl_a);
	wbflush();

	/* and down we go */
	ds1687_write(mace0, DS1687_BANK1_XCTRL4A, xctl_a | DS1687_X4A_PAB);
	ds1687_write(mace0, DS1687_CONTROLA, a);
	wbflush();
	for (;;)
		;
}
Ejemplo n.º 5
0
Archivo: devrtc.c Proyecto: 8l/inferno
static long
rtctime(void)
{
	struct RTCdev *dev;
	Rtc rtc;

	dev = nvr.rtc;
	dev->control |= RTCREAD;
	wbflush();
	rtc.sec = bcd2dec(dev->sec) & 0x7F;
	rtc.min = bcd2dec(dev->min & 0x7F);
	rtc.hour = bcd2dec(dev->hour & 0x3F);
	rtc.mday = bcd2dec(dev->mday & 0x3F);
	rtc.mon = bcd2dec(dev->mon & 0x3F);
	rtc.year = bcd2dec(dev->year);
	dev->control &= ~RTCREAD;
	wbflush();

	if (rtc.mon < 1 || rtc.mon > 12)
		return 0;
	/*
	 *  the world starts Jan 1 1970
	 */
	if(rtc.year < 70)
		rtc.year += 2000;
	else
		rtc.year += 1900;

	return rtc2sec(&rtc);
}
Ejemplo n.º 6
0
Archivo: bt459.c Proyecto: Prajna/mach
bt459_init_colormap(
	bt459_padded_regmap_t	*regs)
{
	register int    i;

	bt459_select_reg(regs, 0);
	regs->addr_cmap = 0;
	wbflush();
	regs->addr_cmap = 0;
	wbflush();
	regs->addr_cmap = 0;
	wbflush();

	regs->addr_cmap = 0xff;
	wbflush();
	regs->addr_cmap = 0xff;
	wbflush();
	regs->addr_cmap = 0xff;
	wbflush();

	bt459_select_reg(regs, 255);
	regs->addr_cmap = 0xff;
	wbflush();
	regs->addr_cmap = 0xff;
	wbflush();
	regs->addr_cmap = 0xff;
	wbflush();

}
Ejemplo n.º 7
0
/*
 * Initalize the memory system and I/O buses.
 */
void
dec_maxine_bus_reset()
{
    /*
     * Reset interrupts, clear any errors from newconf probes
     */

    *(volatile u_int*)MIPS_PHYS_TO_KSEG1(XINE_REG_TIMEOUT) = 0;
    wbflush();

    *(volatile u_int *)IOASIC_REG_INTR(ioasic_base) = 0;
    wbflush();
}
Ejemplo n.º 8
0
Archivo: bt459.c Proyecto: Prajna/mach
/*
 * Color map
 */
bt459_load_colormap_entry(
	bt459_padded_regmap_t	*regs,
	int			entry,
	color_map_t		*map)
{
	bt459_select_reg(regs, entry & 0xff);

	regs->addr_cmap = map->red;
	wbflush();
	regs->addr_cmap = map->green;
	wbflush();
	regs->addr_cmap = map->blue;
	wbflush();
}
Ejemplo n.º 9
0
void
dbau1550_reboot(void)
{
	PUT16(DBAU1550_SOFTWARE_RESET, 0);
	wbflush();
	delay(100000);	/* 100 msec */
}
Ejemplo n.º 10
0
inline void
au_himem_w_1(void *v, bus_space_handle_t h, bus_size_t o, uint8_t val)
{

	*(volatile uint8_t *)(h + o) = val;
	wbflush();
}
Ejemplo n.º 11
0
static void debounce(unsigned long data)
{
	volatile unsigned char reg_a,reg_c,xctrl_a;

	reg_c = CMOS_READ(RTC_INTR_FLAGS);
	CMOS_WRITE(reg_a | DS_REGA_DV0, RTC_REG_A);
	wbflush();
	xctrl_a = CMOS_READ(DS_B1_XCTRL4A);
	if( (xctrl_a & DS_XCTRL4A_IFS ) || ( reg_c & RTC_IRQF ) ) {
		/* Interrupt still being sent. */
		debounce_timer.expires = jiffies + 50;
		add_timer(&debounce_timer);

		/* clear interrupt source */
		CMOS_WRITE( xctrl_a & ~DS_XCTRL4A_IFS, DS_B1_XCTRL4A);
		CMOS_WRITE(reg_a & ~DS_REGA_DV0, RTC_REG_A);
		return;
	}
	CMOS_WRITE(reg_a & ~DS_REGA_DV0, RTC_REG_A);

	if (has_paniced)
		ArcReboot();

	enable_irq(MACEISA_RTC_IRQ);
}
Ejemplo n.º 12
0
static void
initialise_rda(struct sn_softc *sc)
{
	int		i;
	char 		*p_rda = 0;
	uint32_t	v_rda = 0;

	/* link the RDA's together into a circular list */
	for (i = 0; i < (sc->sc_nrda - 1); i++) {
		p_rda = (char *)sc->p_rda + (i * RXPKT_SIZE(sc));
		v_rda = sc->v_rda + ((i+1) * RXPKT_SIZE(sc));
		SWO(bitmode, p_rda, RXPKT_RLINK, LOWER(v_rda));
		SWO(bitmode, p_rda, RXPKT_INUSE, 1);
	}
	p_rda = (char *)sc->p_rda + ((sc->sc_nrda - 1) * RXPKT_SIZE(sc));
	SWO(bitmode, p_rda, RXPKT_RLINK, LOWER(sc->v_rda) | EOL);
	SWO(bitmode, p_rda, RXPKT_INUSE, 1);

	/* mark end of receive descriptor list */
	sc->sc_rdamark = sc->sc_nrda - 1;

	sc->sc_rxmark = 0;

	NIC_PUT(sc, SNR_URDA, UPPER(sc->v_rda));
	NIC_PUT(sc, SNR_CRDA, LOWER(sc->v_rda));
	wbflush();
}
Ejemplo n.º 13
0
/*
 * close down an interface and free its buffers
 * Called on final close of device, or if sninit() fails
 * part way through.
 */
static int 
snstop(struct sn_softc *sc)
{
	struct mtd *mtd;
	int	s = splnet();

	/* stick chip in reset */
	NIC_PUT(sc, SNR_CR, CR_RST);
	wbflush();

	/* free all receive buffers (currently static so nothing to do) */

	/* free all pending transmit mbufs */
	while (sc->mtd_hw != sc->mtd_free) {
		mtd = &sc->mtda[sc->mtd_hw];
		if (mtd->mtd_mbuf)
			m_freem(mtd->mtd_mbuf);
		if (++sc->mtd_hw == NTDA) sc->mtd_hw = 0;
	}

	sc->sc_if.if_timer = 0;
	sc->sc_if.if_flags &= ~(IFF_RUNNING | IFF_UP);

	splx(s);
	return 0;
}
Ejemplo n.º 14
0
static void
initialise_rra(struct sn_softc *sc)
{
	int	i;
	u_int	v;
	int	bitmode = sc->bitmode;

	if (bitmode)
		NIC_PUT(sc, SNR_EOBC, RBASIZE(sc) / 2 - 2);
	else
		NIC_PUT(sc, SNR_EOBC, RBASIZE(sc) / 2 - 1);

	NIC_PUT(sc, SNR_URRA, UPPER(sc->v_rra[0]));
	NIC_PUT(sc, SNR_RSA, LOWER(sc->v_rra[0]));
	/* rea must point just past the end of the rra space */
	NIC_PUT(sc, SNR_REA, LOWER(sc->v_rea));
	NIC_PUT(sc, SNR_RRP, LOWER(sc->v_rra[0]));
	NIC_PUT(sc, SNR_RSC, 0);

	/* fill up SOME of the rra with buffers */
	for (i = 0; i < NRBA; i++) {
		v = SONIC_GETDMA(sc->rbuf[i]);
		SWO(bitmode, sc->p_rra[i], RXRSRC_PTRHI, UPPER(v));
		SWO(bitmode, sc->p_rra[i], RXRSRC_PTRLO, LOWER(v));
		SWO(bitmode, sc->p_rra[i], RXRSRC_WCHI, UPPER(PAGE_SIZE/2));
		SWO(bitmode, sc->p_rra[i], RXRSRC_WCLO, LOWER(PAGE_SIZE/2));
	}
	sc->sc_rramark = NRBA;
	NIC_PUT(sc, SNR_RWP, LOWER(sc->v_rra[sc->sc_rramark]));
	wbflush();
}
Ejemplo n.º 15
0
Archivo: bt459.c Proyecto: Prajna/mach
bt459_cursor_color(
	bt459_padded_regmap_t	*regs,
	color_map_t		*color)
{
	register int    i;

	bt459_select_reg_macro( regs, BT459_REG_CCOLOR_2);
	for (i = 0; i < 2; i++) {
		regs->addr_reg = color->red;
		wbflush();
		regs->addr_reg = color->green;
		wbflush();
		regs->addr_reg = color->blue;
		wbflush();
		color++;
	}
}
inline void
__BS(barrier)(void *v, bus_space_handle_t h, bus_size_t o, bus_size_t l, int f)
{

	/* XXX XXX XXX */
	if ((f & BUS_SPACE_BARRIER_WRITE) != 0)
		wbflush();
}
Ejemplo n.º 17
0
inline void
au_himem_barrier(void *cookie, bus_space_handle_t bsh, bus_size_t o,
    bus_size_t l, int f)
{

	if (f & BUS_SPACE_BARRIER_WRITE)
		wbflush();
}
Ejemplo n.º 18
0
inline void
au_himem_w_2(void *v, bus_space_handle_t h, bus_size_t o, uint16_t val)
{
	au_himem_cookie_t	*c = (au_himem_cookie_t *)v;

	*(volatile uint16_t *)(h + o) = c->c_swswap ? bswap16(val) : val;
	wbflush();
}
Ejemplo n.º 19
0
void rbtx4939_machine_restart(char *command)
{
	local_irq_disable();
	reg_wr08(rbtx4939_sreset_enable_ptr, 1);
	reg_wr08(rbtx4939_soft_reset_ptr, 1);
	wbflush();
	while (1) ;
}
Ejemplo n.º 20
0
inline void
au_himem_ws_8(void *v, bus_space_handle_t h, bus_size_t o, uint64_t val)
{
	au_himem_cookie_t	*c = (au_himem_cookie_t *)v;

	*(volatile uint64_t *)(h + o) = c->c_hwswap ? bswap64(val) : val;
	wbflush();
}
Ejemplo n.º 21
0
Archivo: bt459.c Proyecto: Prajna/mach
/*
 * Color map
 */
bt459_load_colormap_entry(
	bt459_padded_regmap_t	*regs,
	int			entry,
	color_map_t		*map)
{
	bt459_select_reg(regs, entry & 0xff);

	regs->addr_cmap = map->red;
	wbflush();
	regs->addr_cmap = map->green;
	wbflush();
	regs->addr_cmap = map->blue;
	wbflush();
}

bt459_init_colormap(
	bt459_padded_regmap_t	*regs)
{
	register int    i;

	bt459_select_reg(regs, 0);
	regs->addr_cmap = 0;
	wbflush();
	regs->addr_cmap = 0;
	wbflush();
	regs->addr_cmap = 0;
	wbflush();

	regs->addr_cmap = 0xff;
	wbflush();
	regs->addr_cmap = 0xff;
	wbflush();
	regs->addr_cmap = 0xff;
	wbflush();

	bt459_select_reg(regs, 255);
	regs->addr_cmap = 0xff;
	wbflush();
	regs->addr_cmap = 0xff;
	wbflush();
	regs->addr_cmap = 0xff;
	wbflush();

}

#if	1/*debug*/
bt459_print_colormap(
	bt459_padded_regmap_t	*regs)
{
	register int    i;

	for (i = 0; i < 256; i++) {
		register unsigned char red, green, blue;

		bt459_select_reg(regs, i);
		red   = regs->addr_cmap; wbflush();
		green = regs->addr_cmap; wbflush();
		blue  = regs->addr_cmap; wbflush();
		printf("%x->[x%x x%x x%x]\n", i,
			red, green, blue);

	}
}
Ejemplo n.º 22
0
Archivo: devrtc.c Proyecto: 8l/inferno
static void
setrtc(Rtc *rtc)
{
	struct RTCdev *dev;

	dev = nvr.rtc;
	dev->control |= RTCWRITE;
	wbflush();
	dev->year = dec2bcd(rtc->year % 100);
	dev->mon = dec2bcd(rtc->mon);
	dev->mday = dec2bcd(rtc->mday);
	dev->hour = dec2bcd(rtc->hour);
	dev->min = dec2bcd(rtc->min);
	dev->sec = dec2bcd(rtc->sec);
	wbflush();
	dev->control &= ~RTCWRITE;
	wbflush();
}
Ejemplo n.º 23
0
void
dbau1550_poweroff(void)
{
	printf("\n- poweroff -\n");
	PUT16(DBAU1550_SOFTWARE_RESET,
	    DBAU1550_SOFTWARE_RESET_PWROFF | DBAU1550_SOFTWARE_RESET_RESET);
	wbflush();
	delay(100000);	/* 100 msec */
}
Ejemplo n.º 24
0
inline uint64_t
au_himem_rs_8(void *v, bus_space_handle_t h, bus_size_t o)
{
	uint64_t		val;
	au_himem_cookie_t	*c = (au_himem_cookie_t *)v;

	wbflush();
	val = (*(volatile uint64_t *)(h + o));
	return (c->c_hwswap ? bswap64(val) : val);
}
Ejemplo n.º 25
0
Archivo: bt459.c Proyecto: Prajna/mach
void 
bt459_write_reg(
	bt459_padded_regmap_t	*regs,
	int			regno,
	unsigned char		val)
{
	bt459_select_reg_macro( regs, regno );
	regs->addr_reg = val;
	wbflush();
}
Ejemplo n.º 26
0
void
dec_3min_os_init()
{
	ioasic_base = MIPS_PHYS_TO_KSEG1(KMIN_SYS_ASIC);
	mips_hardware_intr = dec_3min_intr;
	tc_enable_interrupt = dec_3min_enable_intr;
	kmin_tc3_imask = (KMIN_INTR_CLOCK | KMIN_INTR_PSWARN |
		KMIN_INTR_TIMEOUT);

	/*
	 * All the baseboard interrupts come through the I/O ASIC
	 * (at INT_MASK_3), so  it has to be turned off for all the spls.
	 * Since we don't know what kinds of devices are in the
	 * turbochannel option slots, just block them all.
	 */
	Mach_splbio = cpu_spl3;
	Mach_splnet = cpu_spl3;
	Mach_spltty = cpu_spl3;
	Mach_splimp = cpu_spl3;
	Mach_splclock = cpu_spl3;
	Mach_splstatclock = cpu_spl3;
	mcclock_addr = (volatile struct chiptime *)
		MIPS_PHYS_TO_KSEG1(KMIN_SYS_CLOCK);
	dec_3min_mcclock_cpuspeed(mcclock_addr, MIPS_INT_MASK_3);

	/*
	 * Initialize interrupts.
	 */
	*(u_int *)IOASIC_REG_IMSK(ioasic_base) = KMIN_IM0;
	*(u_int *)IOASIC_REG_INTR(ioasic_base) = 0;

	/* clear any memory errors from probes */

	*(volatile u_int *)MIPS_PHYS_TO_KSEG1(KMIN_REG_TIMEOUT) = 0;
	wbflush();

	/*
	 * The kmin memory hardware seems to wrap  memory addresses
	 * with 4Mbyte SIMMs, which causes the physmem computation
	 * to lose.  Find out how big the SIMMS are and set
	 * max_	physmem accordingly.
	 */
	physmem_boardmax = KMIN_PHYS_MEMORY_END + 1;
	if ((*(int*)(MIPS_PHYS_TO_KSEG1(KMIN_REG_MSR)) &
	     KMIN_MSR_SIZE_16Mb) == 0)
		physmem_boardmax = physmem_boardmax >> 2;
	physmem_boardmax = MIPS_PHYS_TO_KSEG1(physmem_boardmax);

	* (volatile u_int *)MIPS_PHYS_TO_KSEG1(KMIN_REG_IMSK) =
	  kmin_tc3_imask |
	  (KMIN_IM0 & ~(KN03_INTR_TC_0|KN03_INTR_TC_1|KN03_INTR_TC_2));
}
Ejemplo n.º 27
0
static void 
camdump(struct sn_softc *sc)
{
	int	i;

	printf("CAM entries:\n");
	NIC_PUT(sc, SNR_CR, CR_RST);
	wbflush();

	for (i = 0; i < 16; i++) {
		ushort  ap2, ap1, ap0;
		NIC_PUT(sc, SNR_CEP, i);
		wbflush();
		ap2 = NIC_GET(sc, SNR_CAP2);
		ap1 = NIC_GET(sc, SNR_CAP1);
		ap0 = NIC_GET(sc, SNR_CAP0);
		printf("%d: ap2=0x%x ap1=0x%x ap0=0x%x\n", i, ap2, ap1, ap0);
	}
	printf("CAM enable 0x%x\n", NIC_GET(sc, SNR_CEP));

	NIC_PUT(sc, SNR_CR, 0);
	wbflush();
}
Ejemplo n.º 28
0
Archivo: irq.c Proyecto: 1x23/unifi-gpl
int
toshiba_rbtx4938_irq_nested(int sw_irq)
{
	u8 level3;

	level3 = reg_rd08(TOSHIBA_RBTX4938_IOC_INTR_STAT) & 0xff;
	if (level3) {
		/* must use fls so onboard ATA has priority */
		sw_irq = TOSHIBA_RBTX4938_IRQ_IOC_BEG + fls(level3) - 1;
	}

	wbflush();
	return sw_irq;
}
Ejemplo n.º 29
0
void __init arch_init_irq(void)
{
	extern void tx4927_irq_init(void);

	tx4927_irq_init();
	toshiba_rbtx4927_irq_ioc_init();
#ifdef CONFIG_TOSHIBA_FPCIB0
	if (tx4927_using_backplane)
		init_i8259_irqs();
#endif
	/* Onboard 10M Ether: High Active */
	set_irq_type(RBTX4927_RTL_8019_IRQ, IRQF_TRIGGER_HIGH);

	wbflush();
}
void __init arch_init_irq(void)
{
	extern void tx4927_irq_init(void);

	tx4927_irq_init();
	toshiba_rbtx4927_irq_ioc_init();
#ifdef CONFIG_TOSHIBA_FPCIB0
	{
		if (tx4927_using_backplane) {
			toshiba_rbtx4927_irq_isa_init();
		}
	}
#endif

	wbflush();
}