Esempio n. 1
0
File: smg.c Progetto: ryo/netbsd-src
int
smg_match(device_t parent, cfdata_t match, void *aux)
{
	struct vsbus_attach_args * const va = aux;
	volatile uint16_t *ccmd;
	volatile uint16_t *cfgtst;
	uint16_t tmp, tmp2;

	if (vax_boardtype == VAX_BTYP_49 || vax_boardtype == VAX_BTYP_53)
		return 0;

	ccmd = (uint16_t *)va->va_addr;
	cfgtst = (uint16_t *)vax_map_physmem(VS_CFGTST, 1);
	/*
	 * Try to find the cursor chip by testing the flip-flop.
	 * If nonexistent, no glass tty.
	 */
	ccmd[0] = CUR_CMD_HSHI|CUR_CMD_FOPB;
	DELAY(300000);
	tmp = cfgtst[0];
	ccmd[0] = CUR_CMD_TEST|CUR_CMD_HSHI;
	DELAY(300000);
	tmp2 = cfgtst[0];
	vax_unmap_physmem((vaddr_t)cfgtst, 1);

	if (tmp2 != tmp)
		return 20; /* Using periodic interrupt */
	else
		return 0;
}
Esempio n. 2
0
File: ubi.c Progetto: ryo/netbsd-src
void
ubi_attach(device_t parent, device_t self, void *aux)
{
	struct	sbi_attach_args sa;

	printf("\n");

        sa.sa_base = (bus_addr_t)NEX730;

#define NEXPAGES (sizeof(struct nexus) / VAX_NBPG)

#if 0
	/*
	 * Probe for memory, can be in the first 4 slots.
	 */

	for (sa.sa_nexnum = 0; sa.sa_nexnum < 4; sa.sa_nexnum++) {
		sa.sa_ioh = vax_map_physmem(NEX730 +
		    sizeof(struct nexus) * sa.sa_nexnum, NEXPAGES);
		if (badaddr((caddr_t)sa.sa_ioh, 4)) {
			vax_unmap_physmem((vaddr_t)sa.sa_ioh, NEXPAGES);
		} else {
			sa.sa_type = NEX_MEM16;
			config_found(self, (void*)&sa, ubi_print);
		}
	}
#endif

	/* VAX 730 fixed configuration */

	/* memory */
	sa.sa_nexnum = 0;
	sa.sa_ioh = vax_map_physmem((int)NEX730 +
	   sizeof(struct nexus) * sa.sa_nexnum, NEXPAGES);
	sa.sa_type = NEX_MEM16;
	config_found(self, (void*)&sa, ubi_print);

	printf("\n");

	/* generic UBA */
	sa.sa_nexnum = 3;
	sa.sa_ioh = vax_map_physmem((int)NEX730 +
	    sizeof(struct nexus) * sa.sa_nexnum, NEXPAGES);
	sa.sa_type = NEX_UBA0;
	config_found(self, (void*)&sa, ubi_print);
}
Esempio n. 3
0
static void
nmi_mainbus_attach(struct device *parent, struct device *self, void *aux)
{
	struct nmi_attach_args na;
	int nbia, *r = 0;

	printf("\n");

	/* One CPU is always found */
	na.slot = 20;
	config_found(self, (void *)&na, nmi_mainbus_print);

	/* Check for a second one */
	if (vax_boardtype == VAX_BTYP_8800) {
		na.slot = 21;
		config_found(self, (void *)&na, nmi_mainbus_print);
	}

	/* One memory adapter is also present */
	na.slot = 10;
	config_found(self, (void *)&na, nmi_mainbus_print);

	/* Enable BI interrupts */
	mtpr(NICTRL_DEV0|NICTRL_DEV1|NICTRL_MNF, PR_NICTRL);

	/* Search for NBIA/NBIB adapters */
	for (nbia = 0; nbia < 2; nbia++) {
		if (r)
			vax_unmap_physmem((vaddr_t)r, 1);
		r = (int *)vax_map_physmem(NBIA_REGS(nbia), 1);
		if (badaddr((caddr_t)r, 4))
			continue;
		na.slot = 2 * nbia;
		if (r[1] & 2)
			config_found(self, (void *)&na, nmi_mainbus_print);
		na.slot++;
		if (r[1] & 4)
			config_found(self, (void *)&na, nmi_mainbus_print);
	}
}
Esempio n. 4
0
void
ka410_conf()
{
	struct vs_cpu *ka410_cpu;

	ka410_cpu = (struct vs_cpu *)vax_map_physmem(VS_REGS, 1);

	switch (vax_cputype) {
	case VAX_TYP_UV2:
		ka410_cpu->vc_410mser = 1;
		printf("cpu: KA410\n");
		break;

	case VAX_TYP_CVAX:
		printf("cpu: KA41/42\n");
		ka410_cpu->vc_vdcorg = 0; /* XXX */
		ka410_cpu->vc_parctl = PARCTL_CPEN | PARCTL_DPEN ;
		printf("cpu: Enabling primary cache, ");
		mtpr(KA420_CADR_S2E|KA420_CADR_S1E|KA420_CADR_ISE|KA420_CADR_DSE, 
			PR_CADR);
		if (vax_confdata & KA420_CFG_CACHPR) {
			l2cache = (void *)vax_map_physmem(KA420_CH2_BASE,
			    (KA420_CH2_SIZE / VAX_NBPG));
			cacr = (void *)vax_map_physmem(KA420_CACR, 1);
			printf("secondary cache\n");
			ka41_cache_enable();
		} else
			printf("no secondary cache present\n");
	}
	/* Done with ka410_cpu - release it */
	vax_unmap_physmem((vaddr_t)ka410_cpu, 1);
	/*
	 * Setup parameters necessary to read time from clock chip.
	 */
	clk_adrshift = 1;       /* Addressed at long's... */
	clk_tweak = 2;          /* ...and shift two */
	clk_page = (short *)vax_map_physmem(KA420_WAT_BASE, 1);
}
Esempio n. 5
0
/*
 * Interface exists: make available by filling in network interface
 * record.  System will initialize the interface when it is ready
 * to accept packets.
 */
void
ze_mainbus_attach(device_t parent, device_t self, void *aux)
{
	struct mainbus_attach_args * const ma = aux;
	struct ze_softc * const sc = device_private(self);
	const struct sgec_data * const sd = ze_find();
	const uint32_t *ea;
	size_t i;
	int error;

	sc->sc_dev = self;

	/*
	 * Map in SGEC registers.
	 */
	sc->sc_dmat = ma->ma_dmat;
	sc->sc_iot = ma->ma_iot;
	sc->sc_intvec = sd->sd_intvec;
	error = bus_space_map(sc->sc_iot, sd->sd_addr, PAGE_SIZE, 0,
	    &sc->sc_ioh);
	if (error) {
		aprint_error(": failed to map %#lx: %d\n", sd->sd_addr, error);
		return;
	}

	/*
	 * Map in, read and release ethernet rom address.
	 */
	ea = (uint32_t *)vax_map_physmem(sd->sd_rom, 1);
	for (i = 0; i < ETHER_ADDR_LEN; i++)
		sc->sc_enaddr[i] = (ea[i] >> sd->sd_romshift) & 0377;
	vax_unmap_physmem((vaddr_t)ea, 1);

	scb_vecalloc(sc->sc_intvec, (void (*)(void *)) sgec_intr, sc,
	    SCB_ISTACK, &sc->sc_intrcnt);

	sgec_attach(sc);
}
Esempio n. 6
0
void
ka410_conf(void)
{
	struct cpu_info * const ci = curcpu();
	struct vs_cpu *ka410_cpu;

	ka410_cpu = (struct vs_cpu *)vax_map_physmem(VS_REGS, 1);

	switch (vax_cputype) {
	case VAX_TYP_UV2:
		ka410_cpu->vc_410mser = 1;
		ci->ci_cpustr = "KA410, UV2";
		break;

	case VAX_TYP_CVAX:
		ka410_cpu->vc_vdcorg = 0; /* XXX */
		ka410_cpu->vc_parctl = PARCTL_CPEN | PARCTL_DPEN ;
mtpr(KA420_CADR_S2E|KA420_CADR_S1E|KA420_CADR_ISE|KA420_CADR_DSE, PR_CADR);
		if (vax_confdata & KA420_CFG_CACHPR) {
			l2cache = (void *)vax_map_physmem(KA420_CH2_BASE,
			    (KA420_CH2_SIZE / VAX_NBPG));
			cacr = (void *)vax_map_physmem(KA420_CACR, 1);
			ka41_cache_enable();
			ci->ci_cpustr =
			    "KA420, CVAX, 1KB L1 cache, 64KB L2 cache";
		} else {
			ci->ci_cpustr = "KA420, CVAX, 1KB L1 cache";
		}
	}
	/* Done with ka410_cpu - release it */
	vax_unmap_physmem((vaddr_t)ka410_cpu, 1);
	/*
	 * Setup parameters necessary to read time from clock chip.
	 */
	clk_adrshift = 1;       /* Addressed at long's... */
	clk_tweak = 2;          /* ...and shift two */
	clk_page = (short *)vax_map_physmem(KA420_WAT_BASE, 1);
}
Esempio n. 7
0
void
le_fwio_attach(struct device *parent, struct device *self, void *aux)
{
	struct fwio_attach_args *faa = (struct fwio_attach_args *)aux;
	struct le_fwio_softc *lsc = (struct le_fwio_softc *)self;
	struct lance_softc *sc = &lsc->sc_am7990.lsc;
	unsigned int vec;
	uint32_t *esar;
	int i;

	vec = faa->faa_vecbase + FBIC_DEVIRQ1 * 4;
	printf(" vec %d", vec);

	/*
	 * Map registers.
	 */

	lsc->sc_rdp = (volatile uint16_t *)
	    vax_map_physmem(faa->faa_base + FWIO_LANCE_REG_OFFSET, 1);
	lsc->sc_rap = lsc->sc_rdp + 2;

	/*
	 * Register access functions.
	 */

	sc->sc_rdcsr = le_fwio_rdcsr;
	sc->sc_wrcsr = le_fwio_wrcsr;

	/*
	 * Map buffers.
	 */

	sc->sc_mem = (void *)uvm_km_valloc(kernel_map, FWIO_LANCE_BUF_SIZE);
	if (sc->sc_mem == NULL) {
		vax_unmap_physmem(faa->faa_base + FWIO_LANCE_REG_OFFSET, 1);
		printf(": can't map buffers\n");
		return;
	}

	ioaccess((vaddr_t)sc->sc_mem, faa->faa_base +
	    FWIO_LANCE_BUF_OFFSET, FWIO_LANCE_BUF_SIZE >> VAX_PGSHIFT);

	sc->sc_addr = FWIO_LANCE_BUF_OFFSET;
	sc->sc_memsize = FWIO_LANCE_BUF_SIZE;
	sc->sc_conf3 = 0;

	sc->sc_copytodesc = lance_copytobuf_contig;
	sc->sc_copyfromdesc = lance_copyfrombuf_contig;
	sc->sc_copytobuf = lance_copytobuf_contig;
	sc->sc_copyfrombuf = lance_copyfrombuf_contig;
	sc->sc_zerobuf = lance_zerobuf_contig;

	/*
	 * Get the Ethernet address from the Station Address ROM.
	 */

	esar = (uint32_t *)vax_map_physmem(faa->faa_base + FWIO_ESAR_OFFSET, 1);
	for (i = 0; i < 6; i++)
		sc->sc_arpcom.ac_enaddr[i] =
		    (esar[i] & FWIO_ESAR_MASK) >> FWIO_ESAR_SHIFT;
	vax_unmap_physmem((vaddr_t)esar, 1);

	/*
	 * Register interrupt handler.
	 */

	if (mbus_intr_establish(vec, IPL_NET, le_fwio_intr, sc,
	    self->dv_xname) != 0) {
		vax_unmap_physmem(faa->faa_base + FWIO_LANCE_REG_OFFSET, 1);
		uvm_km_free(kernel_map, (vaddr_t)sc->sc_mem,
		    FWIO_LANCE_BUF_SIZE);
		printf(": can't establish interrupt\n");
		return;
	}

	/*
	 * Complete attachment.
	 */

	am7990_config(&lsc->sc_am7990);
}
Esempio n. 8
0
void
legss_attach(struct device *parent, struct device *self, void *aux)
{
    struct legss_softc *sc = (struct legss_softc *)self;
    struct legss_screen *scr;
    struct wsemuldisplaydev_attach_args aa;
    int console;
    vaddr_t tmp;
    extern struct consdev wsdisplay_cons;

    console = (vax_confdata & 0x60) != 0 && cn_tab == &wsdisplay_cons;
    if (console) {
        scr = &legss_consscr;
        sc->sc_nscreens = 1;
    } else {
        scr = malloc(sizeof(struct legss_screen), M_DEVBUF, M_NOWAIT);
        if (scr == NULL) {
            printf(": can not allocate memory\n");
            return;
        }

        tmp = vax_map_physmem(LEGSS_BASE + LEGSS_VRAM_OFFSET, 1);
        if (tmp == 0L) {
            printf(": can not probe depth\n");
            goto bad1;
        }
        scr->ss_depth = legss_probe_depth(tmp);
        vax_unmap_physmem(tmp, 1);

        if (scr->ss_depth == 0) {
            printf(": unrecognized depth\n");
            goto bad1;
        }

        scr->ss_vram = vax_map_physmem(LEGSS_BASE + LEGSS_VRAM_OFFSET,
                                       (LEGSS_VISHEIGHT * LEGSS_WIDTH * 32 / NBBY) / VAX_NBPG);
        if (scr->ss_vram == 0L) {
            printf(": can not map frame buffer\n");
            goto bad1;
        }

        if (legss_setup_screen(scr) != 0) {
            printf(": initialization failed\n");
            goto bad2;
        }
    }
    sc->sc_scr = scr;

    printf(": %dx%d %d plane color framebuffer\n",
           LEGSS_VISWIDTH, LEGSS_VISHEIGHT, scr->ss_depth);

    aa.console = console;
    aa.scrdata = &legss_screenlist;
    aa.accessops = &legss_accessops;
    aa.accesscookie = sc;
    aa.defaultscreens = 0;

    config_found(self, &aa, wsemuldisplaydevprint);

    return;

bad2:
    vax_unmap_physmem(scr->ss_vram,
                      (LEGSS_VISHEIGHT * LEGSS_WIDTH * 32 / NBBY) / VAX_NBPG);
bad1:
    free(scr, M_DEVBUF);
}