Module Name: src Committed By: skrll Date: Sun Feb 5 21:46:37 UTC 2012
Modified Files: src/sys/arch/hp700/dev: pdc.c Log Message: Delay some things to attach time - pdc_init is too early. Minor tidyup while I'm here. OK riz@ To generate a diff of this commit: cvs rdiff -u -r1.40 -r1.41 src/sys/arch/hp700/dev/pdc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/hp700/dev/pdc.c diff -u src/sys/arch/hp700/dev/pdc.c:1.40 src/sys/arch/hp700/dev/pdc.c:1.41 --- src/sys/arch/hp700/dev/pdc.c:1.40 Sat Oct 1 15:51:17 2011 +++ src/sys/arch/hp700/dev/pdc.c Sun Feb 5 21:46:37 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: pdc.c,v 1.40 2011/10/01 15:51:17 chs Exp $ */ +/* $NetBSD: pdc.c,v 1.41 2012/02/05 21:46:37 skrll Exp $ */ /* $OpenBSD: pdc.c,v 1.14 2001/04/29 21:05:43 mickey Exp $ */ @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pdc.c,v 1.40 2011/10/01 15:51:17 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pdc.c,v 1.41 2012/02/05 21:46:37 skrll Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -63,8 +63,8 @@ enum pdc_type pdc_type; static struct pdc_result pdcret1 PDC_ALIGNMENT; static struct pdc_result pdcret2 PDC_ALIGNMENT; +static char pdc_consbuf[IODC_MINIOSIZ] PDC_ALIGNMENT; -char pdc_consbuf[IODC_MINIOSIZ] PDC_ALIGNMENT; iodcio_t pdc_cniodc, pdc_kbdiodc; pz_device_t *pz_kbd, *pz_cons; @@ -105,10 +105,6 @@ static int pdcsettod(todr_chip_handle_t, void pdc_init(void) { - static struct todr_chip_handle todr = { - .todr_settime = pdcsettod, - .todr_gettime = pdcgettod, - }; static int kbd_iodc[IODC_MAXSIZE/sizeof(int)]; static int cn_iodc[IODC_MAXSIZE/sizeof(int)]; int err; @@ -116,12 +112,11 @@ pdc_init(void) pagezero_cookie = hp700_pagezero_map(); - /* - * locore has updated pdc with (pdcio_t)PAGE0->mem_pdc - */ pz_kbd = &PAGE0->mem_kbd; pz_cons = &PAGE0->mem_cons; + pdc = (pdcio_t)PAGE0->mem_pdc; + /* XXX should we reset the console/kbd here? well, /boot did that for us anyway */ if ((err = pdc_call((iodcio_t)pdc, 0, PDC_IODC, PDC_IODC_READ, @@ -133,19 +128,13 @@ pdc_init(void) #endif } + hp700_pagezero_unmap(pagezero_cookie); + pdc_cniodc = (iodcio_t)cn_iodc; pdc_kbdiodc = (iodcio_t)kbd_iodc; /* XXX make pdc current console */ cn_tab = &constab[0]; - - cn_init_magic(&pdc_cnm_state); - cn_set_magic("+++++"); - - hp700_pagezero_unmap(pagezero_cookie); - - /* attach the TOD clock */ - todr_attach(&todr); } void @@ -235,13 +224,22 @@ pdcmatch(device_t parent, cfdata_t cf, v void pdcattach(device_t parent, device_t self, void *aux) { + static struct todr_chip_handle todr = { + .todr_settime = pdcsettod, + .todr_gettime = pdcgettod, + }; struct pdc_softc *sc = device_private(self); sc->sc_dv = self; pdc_attached = 1; - if (!pdc) - pdc_init(); + KASSERT(pdc != NULL); + + cn_init_magic(&pdc_cnm_state); + cn_set_magic("+++++"); + + /* attach the TOD clock */ + todr_attach(&todr); aprint_normal("\n");