Module Name:    src
Committed By:   skrll
Date:           Tue Jan  4 10:42:34 UTC 2011

Modified Files:
        src/sys/arch/hp700/dev: apic.c astro.c lasi.c lcd.c mem.c pdc.c power.c
        src/sys/arch/hp700/gsc: oosiop_gsc.c osiop_gsc.c
        src/sys/arch/hp700/hp700: autoconf.c machdep.c mainbus.c
        src/sys/arch/hp700/include: autoconf.h pdc.h

Log Message:
Centralise the PDC procedure calls into one file and use a minimal set of
kernel data for PDC results.

Remove the filler components from the PDC structures as a result.

Other tidyups while here.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/hp700/dev/apic.c
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/hp700/dev/astro.c
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/hp700/dev/lasi.c
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/hp700/dev/lcd.c
cvs rdiff -u -r1.26 -r1.27 src/sys/arch/hp700/dev/mem.c
cvs rdiff -u -r1.36 -r1.37 src/sys/arch/hp700/dev/pdc.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/hp700/dev/power.c
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/hp700/gsc/oosiop_gsc.c
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/hp700/gsc/osiop_gsc.c
cvs rdiff -u -r1.34 -r1.35 src/sys/arch/hp700/hp700/autoconf.c
cvs rdiff -u -r1.94 -r1.95 src/sys/arch/hp700/hp700/machdep.c
cvs rdiff -u -r1.74 -r1.75 src/sys/arch/hp700/hp700/mainbus.c
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/hp700/include/autoconf.h
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/hp700/include/pdc.h

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/apic.c
diff -u src/sys/arch/hp700/dev/apic.c:1.8 src/sys/arch/hp700/dev/apic.c:1.9
--- src/sys/arch/hp700/dev/apic.c:1.8	Sun Dec  5 12:19:09 2010
+++ src/sys/arch/hp700/dev/apic.c	Tue Jan  4 10:42:33 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: apic.c,v 1.8 2010/12/05 12:19:09 skrll Exp $	*/
+/*	$NetBSD: apic.c,v 1.9 2011/01/04 10:42:33 skrll Exp $	*/
 
 /*	$OpenBSD: apic.c,v 1.7 2007/10/06 23:50:54 krw Exp $	*/
 
@@ -256,35 +256,24 @@
 	return (claimed);
 }
 
-/* Maximum number of supported interrupt routing entries. */
-#define MAX_INT_TBL_SZ	16
-
 void
 apic_get_int_tbl(struct elroy_softc *sc)
 {
-	static struct pdc_pat_io_num int_tbl_sz PDC_ALIGNMENT;
-	static struct pdc_pat_pci_rt int_tbl[MAX_INT_TBL_SZ] PDC_ALIGNMENT;
+	int nentries;
 	size_t size;
+	int err;
 
-	if (pdc_call((iodcio_t)pdc, 0, PDC_PCI_INDEX, PDC_PCI_GET_INT_TBL_SZ,
-	    &int_tbl_sz, 0, 0, 0, 0, 0))
+	err = pdcproc_pci_inttblsz(&nentries);
+	if (err)
 		return;
-
-	if (int_tbl_sz.num > MAX_INT_TBL_SZ)
-		panic("interrupt routing table too big (%d entries)",
-		    int_tbl_sz.num);
-
-	size = int_tbl_sz.num * sizeof(struct pdc_pat_pci_rt);
-	sc->sc_int_tbl_sz = int_tbl_sz.num;
+	
+	size = nentries * sizeof(struct pdc_pat_pci_rt);
+	sc->sc_int_tbl_sz = nentries;
 	sc->sc_int_tbl = malloc(size, M_DEVBUF, M_NOWAIT);
 	if (sc->sc_int_tbl == NULL)
 		return;
 
-	if (pdc_call((iodcio_t)pdc, 0, PDC_PCI_INDEX, PDC_PCI_GET_INT_TBL,
-	    &int_tbl_sz, 0, &int_tbl, 0, 0, 0))
-		return;
-
-	memcpy(sc->sc_int_tbl, int_tbl, size);
+	pdcproc_pci_gettable(nentries, size, sc->sc_int_tbl);
 }
 
 uint32_t

Index: src/sys/arch/hp700/dev/astro.c
diff -u src/sys/arch/hp700/dev/astro.c:1.11 src/sys/arch/hp700/dev/astro.c:1.12
--- src/sys/arch/hp700/dev/astro.c:1.11	Sat Dec 11 19:32:05 2010
+++ src/sys/arch/hp700/dev/astro.c	Tue Jan  4 10:42:33 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: astro.c,v 1.11 2010/12/11 19:32:05 skrll Exp $	*/
+/*	$NetBSD: astro.c,v 1.12 2011/01/04 10:42:33 skrll Exp $	*/
 
 /*	$OpenBSD: astro.c,v 1.8 2007/10/06 23:50:54 krw Exp $	*/
 
@@ -315,7 +315,7 @@
 	 */
 	pagezero_cookie = hp700_pagezero_map();
 	if (PAGE0->mem_cons.pz_class != PCL_DUPLEX)
-		pdc_call((iodcio_t)pdc, 0, PDC_IO, PDC_IO_RESET_DEVICES);
+		pdcproc_ioreset();
 	hp700_pagezero_unmap(pagezero_cookie);
 
 	/* Enable iova space. */

Index: src/sys/arch/hp700/dev/lasi.c
diff -u src/sys/arch/hp700/dev/lasi.c:1.17 src/sys/arch/hp700/dev/lasi.c:1.18
--- src/sys/arch/hp700/dev/lasi.c:1.17	Sat Dec 11 19:32:05 2010
+++ src/sys/arch/hp700/dev/lasi.c	Tue Jan  4 10:42:33 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: lasi.c,v 1.17 2010/12/11 19:32:05 skrll Exp $	*/
+/*	$NetBSD: lasi.c,v 1.18 2011/01/04 10:42:33 skrll Exp $	*/
 
 /*	$OpenBSD: lasi.c,v 1.4 2001/06/09 03:57:19 mickey Exp $	*/
 
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lasi.c,v 1.17 2010/12/11 19:32:05 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lasi.c,v 1.18 2011/01/04 10:42:33 skrll Exp $");
 
 #undef LASIDEBUG
 
@@ -96,7 +96,6 @@
 {
 	struct lasi_softc *sc = _sc;
 	hppa_hpa_t module_offset;
-	struct pdc_lan_station_id pdc_mac PDC_ALIGNMENT;
 
 	/*
 	 * Determine this module's interrupt bit.
@@ -119,10 +118,8 @@
 	 * If this is the Ethernet adapter, get its Ethernet address.
 	 */
 	if (module_offset == 0x7000) {
-		if (pdc_call((iodcio_t)pdc, 0, PDC_LAN_STATION_ID,
-		     PDC_LAN_STATION_ID_READ, &pdc_mac, ga->ga_hpa) == 0)
-			memcpy(ga->ga_ether_address, pdc_mac.addr,
-				sizeof(ga->ga_ether_address));
+		pdcproc_lan_station_id(ga->ga_ether_address,
+		    sizeof(ga->ga_ether_address), ga->ga_hpa);
 	}
 }
 

Index: src/sys/arch/hp700/dev/lcd.c
diff -u src/sys/arch/hp700/dev/lcd.c:1.3 src/sys/arch/hp700/dev/lcd.c:1.4
--- src/sys/arch/hp700/dev/lcd.c:1.3	Fri Dec 24 15:29:08 2010
+++ src/sys/arch/hp700/dev/lcd.c	Tue Jan  4 10:42:33 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: lcd.c,v 1.3 2010/12/24 15:29:08 skrll Exp $	*/
+/*	$NetBSD: lcd.c,v 1.4 2011/01/04 10:42:33 skrll Exp $	*/
 /*	OpenBSD: lcd.c,v 1.2 2007/07/20 22:13:45 kettenis Exp 	*/
 
 /*
@@ -72,7 +72,7 @@
 {
 	struct lcd_softc *sc = device_private(self);
 	struct confargs *ca = aux;
-	struct pdc_chassis_lcd *pdc_lcd = (void *)ca->ca_pdc_iodc_read;
+	struct pdc_chassis_lcd *pdc_lcd = &ca->ca_pcl;
 	int i;
 
 	sc->sc_dv = self;

Index: src/sys/arch/hp700/dev/mem.c
diff -u src/sys/arch/hp700/dev/mem.c:1.26 src/sys/arch/hp700/dev/mem.c:1.27
--- src/sys/arch/hp700/dev/mem.c:1.26	Sun Dec 12 08:23:14 2010
+++ src/sys/arch/hp700/dev/mem.c	Tue Jan  4 10:42:33 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: mem.c,v 1.26 2010/12/12 08:23:14 skrll Exp $	*/
+/*	$NetBSD: mem.c,v 1.27 2011/01/04 10:42:33 skrll Exp $	*/
 
 /*	$OpenBSD: mem.c,v 1.30 2007/09/22 16:21:32 krw Exp $	*/
 /*
@@ -73,7 +73,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mem.c,v 1.26 2010/12/12 08:23:14 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mem.c,v 1.27 2011/01/04 10:42:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -182,7 +182,7 @@
 void
 memattach(device_t parent, device_t self, void *aux)
 {
-	struct pdc_iodc_minit pdc_minit PDC_ALIGNMENT;
+	struct pdc_iodc_minit pdc_minit;
 	struct confargs *ca = aux;
 	struct mem_softc *sc = device_private(self);
 	int err, pagezero_cookie;
@@ -255,8 +255,8 @@
 	} else
 		sc->sc_vp = NULL;
 
-	if ((err = pdc_call((iodcio_t)pdc, 0, PDC_IODC, PDC_IODC_NINIT,
-			    &pdc_minit, ca->ca_hpa, PAGE0->imm_spa_size)) < 0)
+	err = pdcproc_iodc_ninit(&pdc_minit, ca->ca_hpa, PAGE0->imm_spa_size);
+	if (err < 0)
 		pdc_minit.max_spa = PAGE0->imm_max_mem;
 
 	hp700_pagezero_unmap(pagezero_cookie);

Index: src/sys/arch/hp700/dev/pdc.c
diff -u src/sys/arch/hp700/dev/pdc.c:1.36 src/sys/arch/hp700/dev/pdc.c:1.37
--- src/sys/arch/hp700/dev/pdc.c:1.36	Wed Feb 10 20:45:35 2010
+++ src/sys/arch/hp700/dev/pdc.c	Tue Jan  4 10:42:33 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: pdc.c,v 1.36 2010/02/10 20:45:35 skrll Exp $	*/
+/*	$NetBSD: pdc.c,v 1.37 2011/01/04 10:42:33 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.36 2010/02/10 20:45:35 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pdc.c,v 1.37 2011/01/04 10:42:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -57,7 +57,10 @@
 } pdcsoftc_t;
 
 pdcio_t pdc;
-int pdcret[32] PDC_ALIGNMENT;
+
+static struct pdc_result pdcret1 PDC_ALIGNMENT;
+static struct pdc_result pdcret2 PDC_ALIGNMENT;
+
 char pdc_consbuf[IODC_MINIOSIZ] PDC_ALIGNMENT;
 iodcio_t pdc_cniodc, pdc_kbdiodc;
 pz_device_t *pz_kbd, *pz_cons;
@@ -96,8 +99,6 @@
 static int pdcgettod(todr_chip_handle_t, struct timeval *);
 static int pdcsettod(todr_chip_handle_t, struct timeval *);
 
-static struct pdc_tod tod PDC_ALIGNMENT;
-
 void
 pdc_init(void)
 {
@@ -121,9 +122,9 @@
 	/* 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,
-	      pdcret, pz_cons->pz_hpa, IODC_IO, cn_iodc, IODC_MAXSIZE)) < 0 ||
+	      &pdcret1, pz_cons->pz_hpa, IODC_IO, cn_iodc, IODC_MAXSIZE)) < 0 ||
 	    (err = pdc_call((iodcio_t)pdc, 0, PDC_IODC, PDC_IODC_READ,
-	      pdcret, pz_kbd->pz_hpa, IODC_IO, kbd_iodc, IODC_MAXSIZE)) < 0) {
+	      &pdcret1, pz_kbd->pz_hpa, IODC_IO, kbd_iodc, IODC_MAXSIZE)) < 0) {
 #ifdef DEBUG
 		printf("pdc_init: failed reading IODC (%d)\n", err);
 #endif
@@ -388,8 +389,8 @@
 	s = splhigh();
 	pagezero_cookie = hp700_pagezero_map();
 	err = pdc_call(pdc_kbdiodc, 0, pz_kbd->pz_hpa, IODC_IO_CONSIN,
-	    pz_kbd->pz_spa, pz_kbd->pz_layers, pdcret, 0, pdc_consbuf, 1, 0);
-	l = pdcret[0];
+	    pz_kbd->pz_spa, pz_kbd->pz_layers, &pdcret1, 0, pdc_consbuf, 1, 0);
+	l = pdcret1.result[0];
 	*cp = pdc_consbuf[0];
 	hp700_pagezero_unmap(pagezero_cookie);
 	splx(s);
@@ -422,7 +423,7 @@
 	pagezero_cookie = hp700_pagezero_map();
 	*pdc_consbuf = c;
 	err = pdc_call(pdc_cniodc, 0, pz_cons->pz_hpa, IODC_IO_CONSOUT,
-	    pz_cons->pz_spa, pz_cons->pz_layers, pdcret, 0, pdc_consbuf, 1, 0);
+	    pz_cons->pz_spa, pz_cons->pz_layers, &pdcret1, 0, pdc_consbuf, 1, 0);
 	hp700_pagezero_unmap(pagezero_cookie);
 	splx(s);
 
@@ -449,14 +450,15 @@
 static int
 pdcgettod(todr_chip_handle_t tch, struct timeval *tvp)
 {
+	struct pdc_tod *tod = (struct pdc_tod *)&pdcret1;
 	int error;
 
 	error = pdc_call((iodcio_t)pdc, 1, PDC_TOD, PDC_TOD_READ,
-	    &tod, 0, 0, 0, 0, 0);
+	    &pdcret1);
 
 	if (error == 0) {
-		tvp->tv_sec = tod.sec;
-		tvp->tv_usec = tod.usec;
+		tvp->tv_sec = tod->sec;
+		tvp->tv_usec = tod->usec;
 	}
 	return error;
 }
@@ -466,10 +468,447 @@
 {
 	int error;
 
-	tod.sec = tvp->tv_sec;
-	tod.usec = tvp->tv_usec;
-
 	error = pdc_call((iodcio_t)pdc, 1, PDC_TOD, PDC_TOD_WRITE,
-	    tod.sec, tod.usec);
+	    tvp->tv_sec, tvp->tv_usec);
+
 	return error;
 }
+
+
+int
+pdcproc_chassis_display(unsigned long disp)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_CHASSIS, PDC_CHASSIS_DISP, disp);
+	
+	return err;
+}
+
+int
+pdcproc_chassis_info(struct pdc_chassis_info *pci, struct pdc_chassis_lcd *pcl)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_CHASSIS, PDC_CHASSIS_INFO,
+	    &pdcret1, &pdcret2);
+	if (err < 0)
+		return err;
+
+	memcpy(pci, &pdcret1, sizeof(*pci));
+	memcpy(pcl, &pdcret2, sizeof(*pcl));
+	
+	return err;
+}
+
+int
+pdcproc_pim(int type, struct pdc_pim *pp, void **buf, size_t *sz)
+{
+	static char data[896] __attribute__((__aligned__(8)));
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_PIM, type, &pdcret1, data,
+	    sizeof(data));
+	if (err < 0)
+		return err;
+
+	memcpy(pp, &pdcret1, sizeof(*pp));
+	*buf = data;
+	*sz = sizeof(data);
+
+	return err;
+}
+
+int
+pdcproc_model_info(struct pdc_model *pm)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_MODEL, PDC_MODEL_INFO, &pdcret1);
+	if (err < 0)
+		return err;
+
+	memcpy(pm, &pdcret1, sizeof(*pm));
+
+	return err;
+}
+
+int
+pdcproc_model_cpuid(struct pdc_cpuid *pc)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_MODEL, PDC_MODEL_CPUID, &pdcret1);
+	if (err < 0)
+		return err;
+
+	memcpy(pc, &pdcret1, sizeof(*pc));
+
+	return err;
+}
+
+int
+pdcproc_cache(struct pdc_cache *pc)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_CACHE, PDC_CACHE_DFLT, &pdcret1);
+
+	if (err < 0)
+		return err;
+
+	memcpy(pc, &pdcret1, sizeof(*pc));
+
+	return err;
+}
+
+
+int
+pdcproc_cache_spidbits(struct pdc_spidb *pcs)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_CACHE, PDC_CACHE_GETSPIDB,
+            &pdcret1);
+
+	if (err < 0)
+		return err;
+
+	memcpy(pcs, &pdcret1, sizeof(*pcs));
+
+	return err;
+}
+
+int
+pdcproc_hpa_processor(hppa_hpa_t *hpa)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_HPA, PDC_HPA_DFLT, &pdcret1);
+	if (err < 0)
+		return err;
+
+	*hpa = pdcret1.result[0];
+
+	return err;
+}
+
+int
+pdcproc_coproc(struct pdc_coproc *pc)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_COPROC, PDC_COPROC_DFLT, &pdcret1);
+	if (err < 0)
+		return err;
+
+	memcpy(pc, &pdcret1, sizeof(*pc));
+
+	return err;
+}
+
+int
+pdcproc_iodc_read(hppa_hpa_t hpa, int command, int *actcnt,
+    struct pdc_iodc_read *buf1, size_t sz1, struct iodc_data *buf2,
+    size_t sz2)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_IODC, PDC_IODC_READ,
+	    &pdcret1, hpa, command, &pdcret2, sizeof(pdcret2));
+
+	if (err < 0)
+		return err;
+
+	if (actcnt != NULL) {
+		struct pdc_iodc_read *pir = (struct pdc_iodc_read *)&pdcret1;
+
+		*actcnt = pir->size;
+	}
+
+	memcpy(buf1, &pdcret1, sz1);
+	memcpy(buf2, &pdcret2, sz2);
+
+	return err;
+}
+
+int
+pdcproc_iodc_ninit(struct pdc_iodc_minit *pimi, hppa_hpa_t hpa, int sz)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_IODC, PDC_IODC_NINIT, &pdcret1,
+	    hpa, sz);
+
+	if (err < 0)
+		return err;
+
+	memcpy(pimi, &pdcret1, sizeof(*pimi));
+
+	return err;
+}
+
+int
+pdcproc_instr(unsigned int *mem)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_INSTR, PDC_INSTR_DFLT, &pdcret1);
+	if (err < 0)
+		return err;
+
+	memcpy(mem, &pdcret1, sizeof(*mem));
+
+	return err;
+}
+ 
+int
+pdcproc_block_tlb(struct pdc_btlb *pb)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_BLOCK_TLB, PDC_BTLB_DEFAULT,
+	    &pdcret1);
+	if (err < 0)
+		return err;
+
+	memcpy(pb, &pdcret1, sizeof(*pb));
+
+	return err;
+}
+
+int
+pdcproc_btlb_insert(pa_space_t sp, vaddr_t va, paddr_t pa, vsize_t sz,
+    u_int prot, int index)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_BLOCK_TLB, PDC_BTLB_INSERT, sp,
+	    va, pa, sz, prot, index);
+
+	return err;
+}
+
+int
+pdcproc_btlb_purge(pa_space_t sp, vaddr_t va, paddr_t pa, vsize_t sz)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_BLOCK_TLB, PDC_BTLB_PURGE, sp, va,
+	    pa, sz);
+
+	return err;
+}
+
+int
+pdcproc_btlb_purgeall(void)
+{
+	int err;
+
+	err =  pdc_call((iodcio_t)pdc, 0, PDC_BLOCK_TLB, PDC_BTLB_PURGE_ALL);
+
+	return err;
+}
+
+int pdcproc_tlb_info(struct pdc_hwtlb *ph)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_TLB, PDC_TLB_INFO, &pdcret1);
+	if (err < 0)
+		return err;
+
+	memcpy(ph, &pdcret1, sizeof(*ph));
+
+	return err;
+}
+
+int
+pdcproc_tlb_config(struct pdc_hwtlb *ph, unsigned long hpt,
+    unsigned long hptsize, unsigned long type)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_TLB, PDC_TLB_CONFIG, ph, hpt,
+	    hptsize, type);
+
+	return err;
+}
+
+int
+pdcproc_system_map_find_mod(struct pdc_system_map_find_mod *psm,
+    struct device_path *dev, int mod)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_SYSTEM_MAP,
+	    PDC_SYSTEM_MAP_FIND_MOD, &pdcret1, &pdcret2, mod);
+	if (err < 0)
+		return err;
+
+	memcpy(psm, &pdcret1, sizeof(*psm));
+	memcpy(dev, &pdcret2, sizeof(*dev));
+
+	return err;
+}
+
+int
+pdcproc_system_map_find_addr(struct pdc_system_map_find_addr *psm, int mod,
+    int addr)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_SYSTEM_MAP,
+	    PDC_SYSTEM_MAP_FIND_ADDR, &pdcret1, mod, addr);
+	if (err < 0)
+		return err;
+
+	memcpy(psm, &pdcret1, sizeof(*psm));
+
+	return err;
+	
+}
+
+int
+pdcproc_system_map_trans_path(struct pdc_memmap *pmm, struct device_path *dev)
+{
+	int err;
+
+	memcpy(&pdcret2, dev, sizeof(*dev));
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_SYSTEM_MAP,
+	    PDC_SYSTEM_MAP_TRANS_PATH, &pdcret1, &pdcret2);
+	if (err < 0)
+		return err;
+
+	memcpy(pmm, &pdcret1, sizeof(*pmm));
+
+	return err;
+}
+
+int
+pdcproc_soft_power_info(struct pdc_power_info *pspi)
+{
+	int err;
+	
+	err = pdc_call((iodcio_t)pdc, 0, PDC_SOFT_POWER, PDC_SOFT_POWER_INFO,
+	    &pdcret1, 0);
+	if (err < 0)
+		return err;
+
+	memcpy(pspi, &pdcret1, sizeof(*pspi));
+
+	return err;
+}
+
+int
+pdcproc_soft_power_enable(int action)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_SOFT_POWER, PDC_SOFT_POWER_ENABLE,
+	    &pdcret1, action);
+
+	return err;
+}
+
+int
+pdcproc_memmap(struct pdc_memmap *pmm, struct device_path *dev)
+{
+	int err;
+
+	memcpy(&pdcret2, dev, sizeof(*dev));
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_MEMMAP, PDC_MEMMAP_HPA, &pdcret1,
+	    &pdcret2);
+	if (err < 0)
+		return err;
+
+	memcpy(pmm, &pdcret1, sizeof(*pmm));
+
+	return err;
+}
+
+int
+pdcproc_ioclrerrors(void)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_IO, PDC_IO_READ_AND_CLEAR_ERRORS);
+
+	return err;
+}
+
+int
+pdcproc_ioreset(void)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_IO, PDC_IO_RESET_DEVICES);
+
+	return err;
+}
+
+int
+pdcproc_doreset(void)
+{
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_BROADCAST_RESET, PDC_DO_RESET);
+
+	return err;
+}
+
+int
+pdcproc_lan_station_id(char *addr, size_t sz, hppa_hpa_t hpa)
+{
+	struct pdc_lan_station_id *mac = (struct pdc_lan_station_id *)&pdcret1;
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_LAN_STATION_ID,
+	    PDC_LAN_STATION_ID_READ, &pdcret1, hpa);
+	if (err < 0)
+		return err;
+
+	memcpy(addr, mac->addr, sz);
+
+	return 0;
+}
+
+int
+pdcproc_pci_inttblsz(int *nentries)
+{
+	struct pdc_pat_io_num *ppio = (struct pdc_pat_io_num *)&pdcret1;
+	int err;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_PCI_INDEX, PDC_PCI_GET_INT_TBL_SZ,
+	    &pdcret1);
+
+	*nentries = ppio->num;
+
+	return err;
+}
+
+/* Maximum number of supported interrupt routing entries. */
+#define MAX_INT_TBL_SZ	16
+
+int
+pdcproc_pci_gettable(int nentries, size_t size, void *table)
+{
+	int err;
+	static struct pdc_pat_pci_rt int_tbl[MAX_INT_TBL_SZ] PDC_ALIGNMENT;
+
+	if (nentries > MAX_INT_TBL_SZ)
+		panic("interrupt routing table too big (%d entries)", nentries);
+
+	pdcret1.result[0] = nentries;
+
+	err = pdc_call((iodcio_t)pdc, 0, PDC_PCI_INDEX, PDC_PCI_GET_INT_TBL,
+	    &pdcret1, 0, &int_tbl);
+	if (err < 0)
+		return err;
+	    
+	memcpy(table, int_tbl, size);
+
+	return err;
+}

Index: src/sys/arch/hp700/dev/power.c
diff -u src/sys/arch/hp700/dev/power.c:1.5 src/sys/arch/hp700/dev/power.c:1.6
--- src/sys/arch/hp700/dev/power.c:1.5	Sun Dec 12 08:23:14 2010
+++ src/sys/arch/hp700/dev/power.c	Tue Jan  4 10:42:33 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: power.c,v 1.5 2010/12/12 08:23:14 skrll Exp $	*/
+/*	$NetBSD: power.c,v 1.6 2011/01/04 10:42:33 skrll Exp $	*/
 
 /*
  * Copyright (c) 2004 Jochen Kunz.
@@ -100,7 +100,7 @@
 CFATTACH_DECL_NEW(power, sizeof(struct power_softc),
     powermatch, powerattach, NULL, NULL);
 
-static struct pdc_power_info pdc_power_info PDC_ALIGNMENT;
+static struct pdc_power_info pdc_power_info;
 static bool pswitch_on;			/* power switch */
 static int pwr_sw_control;
 static const char *pwr_sw_control_str[] = {"disabled", "enabled", "locked"};
@@ -132,14 +132,15 @@
 {
 	struct power_softc *sc = device_private(self);
 	struct confargs *ca = aux;
+	int err;
 
 	sc->sc_dev = self;
 	sc->sc_kicker = NULL;
 
-	if (!pdc_call((iodcio_t)pdc, 0, PDC_SOFT_POWER,
-	    PDC_SOFT_POWER_INFO, &pdc_power_info, 0)) {
+	err = pdcproc_soft_power_info(&pdc_power_info);
+
+	if (!err)
 		ca->ca_hpa = pdc_power_info.addr;
-	}
 
 	switch (cpu_modelno) {
 	case HPPA_BOARD_HP712_60:
@@ -248,9 +249,8 @@
 {
 	int error;
 
-	if ((error = pdc_call((iodcio_t)pdc, 0, PDC_SOFT_POWER,
-	    PDC_SOFT_POWER_ENABLE, &pdc_power_info,
-	    on == HPPA_COLD_HOT)))
+	error = pdcproc_soft_power_enable(on == HPPA_COLD_HOT);
+	if (error)
 		aprint_error("PDC_SOFT_POWER_ENABLE failed (%d)\n", error);
 }
 

Index: src/sys/arch/hp700/gsc/oosiop_gsc.c
diff -u src/sys/arch/hp700/gsc/oosiop_gsc.c:1.10 src/sys/arch/hp700/gsc/oosiop_gsc.c:1.11
--- src/sys/arch/hp700/gsc/oosiop_gsc.c:1.10	Sat Dec 11 19:32:06 2010
+++ src/sys/arch/hp700/gsc/oosiop_gsc.c	Tue Jan  4 10:42:33 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: oosiop_gsc.c,v 1.10 2010/12/11 19:32:06 skrll Exp $	*/
+/*	$NetBSD: oosiop_gsc.c,v 1.11 2011/01/04 10:42:33 skrll Exp $	*/
 
 /*
  * Copyright (c) 2001 Matt Fredette.  All rights reserved.
@@ -80,7 +80,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: oosiop_gsc.c,v 1.10 2010/12/11 19:32:06 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: oosiop_gsc.c,v 1.11 2011/01/04 10:42:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -156,7 +156,7 @@
 		return;
 	}
 
-	sc->sc_freq = ga->ga_ca.ca_pdc_iodc_read->filler2[14];
+	sc->sc_freq = ga->ga_ca.ca_pir.filler2[14];
 	if (sc->sc_freq == 0)
 		sc->sc_freq = 50000000;
 

Index: src/sys/arch/hp700/gsc/osiop_gsc.c
diff -u src/sys/arch/hp700/gsc/osiop_gsc.c:1.17 src/sys/arch/hp700/gsc/osiop_gsc.c:1.18
--- src/sys/arch/hp700/gsc/osiop_gsc.c:1.17	Sat Dec 11 19:32:06 2010
+++ src/sys/arch/hp700/gsc/osiop_gsc.c	Tue Jan  4 10:42:33 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: osiop_gsc.c,v 1.17 2010/12/11 19:32:06 skrll Exp $	*/
+/*	$NetBSD: osiop_gsc.c,v 1.18 2011/01/04 10:42:33 skrll Exp $	*/
 
 /*
  * Copyright (c) 2001 Matt Fredette.  All rights reserved.
@@ -80,7 +80,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: osiop_gsc.c,v 1.17 2010/12/11 19:32:06 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: osiop_gsc.c,v 1.18 2011/01/04 10:42:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -156,7 +156,7 @@
 		return;
 	}
 
-	sc->sc_clock_freq = ga->ga_ca.ca_pdc_iodc_read->filler2[14] / 1000000;
+	sc->sc_clock_freq = ga->ga_ca.ca_pir.filler2[14] / 1000000;
 	if (!sc->sc_clock_freq)
 		sc->sc_clock_freq = 50;
 

Index: src/sys/arch/hp700/hp700/autoconf.c
diff -u src/sys/arch/hp700/hp700/autoconf.c:1.34 src/sys/arch/hp700/hp700/autoconf.c:1.35
--- src/sys/arch/hp700/hp700/autoconf.c:1.34	Sat Nov 13 07:58:55 2010
+++ src/sys/arch/hp700/hp700/autoconf.c	Tue Jan  4 10:42:34 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: autoconf.c,v 1.34 2010/11/13 07:58:55 skrll Exp $	*/
+/*	$NetBSD: autoconf.c,v 1.35 2011/01/04 10:42:34 skrll Exp $	*/
 
 /*	$OpenBSD: autoconf.c,v 1.15 2001/06/25 00:43:10 mickey Exp $	*/
 
@@ -86,7 +86,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.34 2010/11/13 07:58:55 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.35 2011/01/04 10:42:34 skrll Exp $");
 
 #include "opt_kgdb.h"
 #include "opt_useleds.h"
@@ -105,6 +105,7 @@
 #include <sys/kgdb.h>
 #endif
 
+#include <machine/pdc.h>
 #include <machine/iomod.h>
 #include <machine/autoconf.h>
 
@@ -457,10 +458,9 @@
 /*static struct device fakerdrootdev = { DV_DISK, {}, NULL, 0, "rd0", NULL };*/
 #endif
 
-static struct pdc_memmap pdc_memmap PDC_ALIGNMENT;
-static struct pdc_iodc_read pdc_iodc_read PDC_ALIGNMENT;
-static struct pdc_system_map_find_mod pdc_find_mod PDC_ALIGNMENT;
-static struct pdc_system_map_find_addr pdc_find_addr PDC_ALIGNMENT;
+static struct pdc_memmap pdc_memmap;
+static struct pdc_system_map_find_mod pdc_find_mod;
+static struct pdc_system_map_find_addr pdc_find_addr;
 
 void
 pdc_scanbus(device_t self, struct confargs *ca,
@@ -489,18 +489,17 @@
 		if (ca->ca_hpabase) {
 			nca.ca_hpa = ca->ca_hpabase + IOMOD_HPASIZE * i;
 			nca.ca_dp.dp_mod = i;
-		} else if ((error = pdc_call((iodcio_t)pdc, 0, PDC_MEMMAP,
-		    PDC_MEMMAP_HPA, &pdc_memmap, &nca.ca_dp)) == 0)
+		} else if ((error = pdcproc_memmap(&pdc_memmap,
+		    &nca.ca_dp)) == 0)
 			nca.ca_hpa = pdc_memmap.hpa;
-		else if ((error = pdc_call((iodcio_t)pdc, 0, PDC_SYSTEM_MAP,
-		    PDC_SYSTEM_MAP_TRANS_PATH, &pdc_memmap, &nca.ca_dp)) == 0) {
+		else if ((error = pdcproc_system_map_trans_path(&pdc_memmap,
+		    &nca.ca_dp)) == 0) {
 			struct device_path path;
 			int im, ia;
 
 			nca.ca_hpa = pdc_memmap.hpa;
 
-			for (im = 0; !(error = pdc_call((iodcio_t)pdc, 0,
-			    PDC_SYSTEM_MAP, PDC_SYSTEM_MAP_FIND_MOD,
+			for (im = 0; !(error = pdcproc_system_map_find_mod(
 			    &pdc_find_mod, &path, im)) &&
 			    pdc_find_mod.hpa != nca.ca_hpa; im++)
 				;
@@ -510,18 +509,21 @@
 
 			if (!error && pdc_find_mod.naddrs) {
 				nca.ca_naddrs = pdc_find_mod.naddrs;
-				if (nca.ca_naddrs > 16) {
-					nca.ca_naddrs = 16;
+				if (nca.ca_naddrs > HP700_MAXIOADDRS) {
+					nca.ca_naddrs = HP700_MAXIOADDRS;
 					aprint_error("WARNING: "
 					    "too many (%d) addrs\n",
 					    pdc_find_mod.naddrs);
 				}
 
 				aprint_verbose(">> ADDRS: ");
-				for (ia = 0; !(error = pdc_call((iodcio_t)pdc,
-				    0, PDC_SYSTEM_MAP, PDC_SYSTEM_MAP_FIND_ADDR,
-				    &pdc_find_addr, im, ia + 1)) && ia < nca.ca_naddrs; ia++) {
-					nca.ca_addrs[ia].addr = pdc_find_addr.hpa;
+				for (ia = 0; ia < nca.ca_naddrs; ia++) {
+					error = pdcproc_system_map_find_addr(
+					    &pdc_find_addr, im, ia + 1);
+					if (error)
+						break;
+					nca.ca_addrs[ia].addr =
+					    pdc_find_addr.hpa;
 					nca.ca_addrs[ia].size =
 					    pdc_find_addr.size << PGSHIFT;
 
@@ -539,8 +541,8 @@
 		aprint_verbose(">> HPA 0x%lx[0x%x]\n", nca.ca_hpa,
 		    nca.ca_hpasz);
 
-		if ((error = pdc_call((iodcio_t)pdc, 0, PDC_IODC,
-		    PDC_IODC_READ, &pdc_iodc_read, nca.ca_hpa, IODC_DATA,
+		if ((error = pdcproc_iodc_read(nca.ca_hpa, IODC_DATA, NULL,
+		    &nca.ca_pir, sizeof(nca.ca_pir),
 		    &nca.ca_type, sizeof(nca.ca_type))) < 0) {
 			aprint_verbose(">> iodc_data error %d\n", error);
 			continue;
@@ -557,7 +559,6 @@
 		    nca.ca_type.iodc_type, nca.ca_type.iodc_sv_model);
 
 		nca.ca_irq = HP700CF_IRQ_UNDEF;
-		nca.ca_pdc_iodc_read = &pdc_iodc_read;
 		nca.ca_name = hppa_mod_info(nca.ca_type.iodc_type,
 		    nca.ca_type.iodc_sv_model);
 

Index: src/sys/arch/hp700/hp700/machdep.c
diff -u src/sys/arch/hp700/hp700/machdep.c:1.94 src/sys/arch/hp700/hp700/machdep.c:1.95
--- src/sys/arch/hp700/hp700/machdep.c:1.94	Sun Dec 12 08:54:25 2010
+++ src/sys/arch/hp700/hp700/machdep.c	Tue Jan  4 10:42:34 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.94 2010/12/12 08:54:25 skrll Exp $	*/
+/*	$NetBSD: machdep.c,v 1.95 2011/01/04 10:42:34 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.94 2010/12/12 08:54:25 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.95 2011/01/04 10:42:34 skrll Exp $");
 
 #include "opt_cputype.h"
 #include "opt_ddb.h"
@@ -162,9 +162,9 @@
 /*
  * CPU params (should be the same for all cpus in the system)
  */
-struct pdc_cache pdc_cache PDC_ALIGNMENT;
-struct pdc_btlb pdc_btlb PDC_ALIGNMENT;
-struct pdc_model pdc_model PDC_ALIGNMENT;
+struct pdc_cache pdc_cache;
+struct pdc_btlb pdc_btlb;
+struct pdc_model pdc_model;
 
 int usebtlb;
 
@@ -279,12 +279,12 @@
 /*
  * wide used hardware params
  */
-struct pdc_hwtlb pdc_hwtlb PDC_ALIGNMENT;
-struct pdc_coproc pdc_coproc PDC_ALIGNMENT;
-struct pdc_coherence pdc_coherence PDC_ALIGNMENT;
-struct pdc_spidb pdc_spidbits PDC_ALIGNMENT;
-struct pdc_pim pdc_pim PDC_ALIGNMENT;
-struct pdc_model pdc_model PDC_ALIGNMENT;
+struct pdc_hwtlb pdc_hwtlb;
+struct pdc_coproc pdc_coproc;
+struct pdc_coherence pdc_coherence;
+struct pdc_spidb pdc_spidbits;
+struct pdc_pim pdc_pim;
+struct pdc_model pdc_model;
 
 /*
  * Debugger info.
@@ -447,8 +447,8 @@
 	delay_init();	/* calculate CPU clock ratio */
 
 	/* cache parameters */
-	if ((error = pdc_call((iodcio_t)pdc, 0, PDC_CACHE, PDC_CACHE_DFLT,
-	    &pdc_cache)) < 0) {
+	error = pdcproc_cache(&pdc_cache);
+	if (error < 0) {
 #ifdef DEBUG
 		printf("WARNING: PDC_CACHE error %d\n", error);
 #endif
@@ -459,23 +459,14 @@
 	icache_line_mask = pdc_cache.ic_conf.cc_line * 16 - 1;
 	icache_stride = pdc_cache.ic_stride;
 
-	/* cache coherence params (pbably available for 8k only) */
-	error = pdc_call((iodcio_t)pdc, 0, PDC_CACHE, PDC_CACHE_SETCS,
-	    &pdc_coherence, 1, 1, 1, 1);
-#ifdef DEBUG
-	printf ("PDC_CACHE_SETCS: %d, %d, %d, %d (%d)\n",
-	    pdc_coherence.ia_cst, pdc_coherence.da_cst,
-	    pdc_coherence.ita_cst, pdc_coherence.dta_cst, error);
-#endif
-	error = pdc_call((iodcio_t)pdc, 0, PDC_CACHE, PDC_CACHE_GETSPIDB,
-	    &pdc_spidbits, 0, 0, 0, 0);
+	error = pdcproc_cache_spidbits(&pdc_spidbits);
 #ifdef DEBUG
 	printf("SPID bits: 0x%x, error = %d\n", pdc_spidbits.spidbits, error);
 #endif
 
 	/* Calculate the OS_HPMC handler checksums. */
 	p = &os_hpmc;
-	if (pdc_call((iodcio_t)pdc, 0, PDC_INSTR, PDC_INSTR_DFLT, p))
+	if (pdcproc_instr(p))
 		*p = 0x08000240;
 	p[7] = ((char *) &os_hpmc_cont_end) - ((char *) &os_hpmc_cont);
 	p[6] = (u_int) &os_hpmc_cont;
@@ -564,8 +555,7 @@
 	printf("%s: PDC_CHASSIS\n", __func__);
 #endif
 	/* they say PDC_COPROC might turn fault light on */
-	pdc_call((iodcio_t)pdc, 0, PDC_CHASSIS, PDC_CHASSIS_DISP,
-	    PDC_OSTAT(PDC_OSTAT_RUN) | 0xCEC0);
+	pdcproc_chassis_display(PDC_OSTAT(PDC_OSTAT_RUN) | 0xCEC0);
 
 #ifdef DEBUG
 	printf("%s: intr bootstrap\n", __func__);
@@ -637,7 +627,7 @@
 	extern u_int trap_ep_T_ITLBMISS[];
 	extern u_int trap_ep_T_ITLBMISSNA[];
 
-	struct pdc_cpuid pdc_cpuid PDC_ALIGNMENT;
+	struct pdc_cpuid pdc_cpuid;
 	const struct hppa_cpu_info *p = NULL;
 	const char *model;
 	u_int cpu_version, cpu_features;
@@ -650,8 +640,8 @@
 	cpu_version = 0;
 
 	/* identify system type */
-	if ((error = pdc_call((iodcio_t)pdc, 0, PDC_MODEL, PDC_MODEL_INFO,
-	    &pdc_model)) < 0) {
+	error = pdcproc_model_info(&pdc_model);
+	if (error < 0) {
 #ifdef DEBUG
 		printf("WARNING: PDC_MODEL_INFO error %d\n", error);
 #endif
@@ -670,8 +660,8 @@
 #endif
 
 	memset(&pdc_cpuid, 0, sizeof(pdc_cpuid));
-	if ((error = pdc_call((iodcio_t)pdc, 0, PDC_MODEL, PDC_MODEL_CPUID,
-	   &pdc_cpuid, 0, 0, 0, 0)) < 0) {
+	error = pdcproc_model_cpuid(&pdc_cpuid);
+	if (error < 0) {
 #ifdef DEBUG
 		printf("WARNING: PDC_MODEL_CPUID error %d. "
 		    "Using cpu_modelno based cpu_type.\n", error);
@@ -695,8 +685,8 @@
 
 	/* locate coprocessors and SFUs */
 	memset(&pdc_coproc, 0, sizeof(pdc_coproc));
-	if ((error = pdc_call((iodcio_t)pdc, 0, PDC_COPROC, PDC_COPROC_DFLT,
-	    &pdc_coproc, 0, 0, 0, 0)) < 0) { /* XXXNH 0,0,0,0 ???*/
+	error = pdcproc_coproc(&pdc_coproc);
+	if (error < 0) {
 		printf("WARNING: PDC_COPROC error %d\n", error);
 		pdc_coproc.ccr_enable = 0;
 	} else {
@@ -723,8 +713,8 @@
 	} else {
 
 		/* BTLB params */
-		if ((error = pdc_call((iodcio_t)pdc, 0, PDC_BLOCK_TLB,
-		    PDC_BTLB_DEFAULT, &pdc_btlb)) < 0) {
+		error = pdcproc_block_tlb(&pdc_btlb);
+		if (error < 0) {
 #ifdef DEBUG
 			printf("WARNING: PDC_BTLB error %d\n", error);
 #endif
@@ -744,8 +734,7 @@
 			    pdc_btlb.vinfo.num_c);
 #endif /* BTLBDEBUG */
 			/* purge TLBs and caches */
-			if (pdc_call((iodcio_t)pdc, 0, PDC_BLOCK_TLB,
-			    PDC_BTLB_PURGE_ALL) < 0)
+			if (pdcproc_btlb_purgeall() < 0)
 				printf("WARNING: BTLB purge failed\n");
 
 			hppa_btlb_size_min = pdc_btlb.min_size;
@@ -762,7 +751,7 @@
 	}
 	usebtlb = 0;
 
-	error = pdc_call((iodcio_t)pdc, 0, PDC_TLB, PDC_TLB_INFO, &pdc_hwtlb);
+	error = pdcproc_tlb_info(&pdc_hwtlb);
 	if (error == 0 && pdc_hwtlb.min_size != 0 && pdc_hwtlb.max_size != 0) {
 		cpu_features |= HPPA_FTRS_HVT;
 		if (pmap_hptsize > pdc_hwtlb.max_size)
@@ -1050,8 +1039,7 @@
 hpti_g(vaddr_t hpt, vsize_t hptsize)
 {
 
-	return pdc_call((iodcio_t)pdc, 0, PDC_TLB, PDC_TLB_CONFIG,
-	    &pdc_hwtlb, hpt, hptsize, PDC_TLB_CURRPDE);
+	return pdcproc_tlb_config(&pdc_hwtlb, hpt, hptsize, PDC_TLB_CURRPDE);
 }
 
 int
@@ -1065,8 +1053,8 @@
 {
 	int error;
 
-	if ((error = pdc_call((iodcio_t)pdc, 0, PDC_BLOCK_TLB, PDC_BTLB_INSERT,
-	    sp, va, pa, sz, prot, i)) < 0) {
+	error = pdcproc_btlb_insert(sp, va, pa, sz, prot, i);
+	if (error < 0) {
 #ifdef BTLBDEBUG
 		printf("WARNING: BTLB insert failed (%d)\n", error);
 #endif
@@ -1118,13 +1106,14 @@
 #endif
 
 	/* Insert this mapping. */
-	if ((error = pdc_call((iodcio_t)pdc, 0, PDC_BLOCK_TLB, PDC_BTLB_INSERT,
+	error = pdcproc_btlb_insert(
 		btlb_slot->btlb_slot_va_space,
 		btlb_slot->btlb_slot_va_frame,
 		btlb_slot->btlb_slot_pa_frame,
 		btlb_slot->btlb_slot_frames,
 		btlb_slot->btlb_slot_tlbprot,
-		btlb_slot->btlb_slot_number)) < 0) {
+		btlb_slot->btlb_slot_number);
+	if (error < 0) {
 #ifdef BTLBDEBUG
 		printf("WARNING: BTLB insert failed (%d)\n", error);
 #endif
@@ -1330,12 +1319,12 @@
 		if (btlb_slot->btlb_slot_frames != 0 &&
 		    btlb_slot->btlb_slot_va_space == space &&
 		    btlb_slot->btlb_slot_va_frame == va) {
-			if ((error = pdc_call((iodcio_t)pdc, 0,
-				PDC_BLOCK_TLB, PDC_BTLB_PURGE,
+			error = pdcproc_btlb_purge(
 				btlb_slot->btlb_slot_va_space,
 				btlb_slot->btlb_slot_va_frame,
 				btlb_slot->btlb_slot_number,
-				btlb_slot->btlb_slot_frames)) < 0) {
+				btlb_slot->btlb_slot_frames);
+			if (error < 0) {
 #ifdef BTLBDEBUG
 				printf("WARNING: BTLB purge failed (%d)\n",
 					error);
@@ -1446,7 +1435,7 @@
 		    :: "r" (CMD_RESET), "r" (LBCAST_ADDR + iomod_command));
 
 		/* ask firmware to reset */
-		pdc_call((iodcio_t)pdc, 0, PDC_BROADCAST_RESET, PDC_DO_RESET);
+		pdcproc_doreset();
 		/* forcably reset module if that fails */
 		__asm __volatile("stwas %0, 0(%1)"
 		    :: "r" (CMD_RESET), "r" (HPPA_LBCAST + iomod_command));
@@ -1481,7 +1470,6 @@
  * an LPMC, or a TOC.  The check type is passed in as a trap
  * type, one of T_HPMC, T_LPMC, or T_INTERRUPT (for TOC).
  */
-static char pim_data_buffer[896] __attribute__((__aligned__(8)));
 static char in_check = 0;
 
 #define	PIM_WORD(name, word, bits)			\
@@ -1493,7 +1481,7 @@
 
 
 static inline void
-hppa_pim_dump(int check_type)
+hppa_pim_dump(int check_type, void *data, size_t size)
 {
 	struct hp700_pim_hpmc *hpmc;
 	struct hp700_pim_lpmc *lpmc;
@@ -1509,16 +1497,16 @@
 	checks = NULL;
 	switch (check_type) {
 	case T_HPMC:
-		hpmc = (struct hp700_pim_hpmc *) pim_data_buffer;
+		hpmc = (struct hp700_pim_hpmc *) data;
 		regs = &hpmc->pim_hpmc_regs;
 		checks = &hpmc->pim_hpmc_checks;
 		break;
 	case T_LPMC:
-		lpmc = (struct hp700_pim_lpmc *) pim_data_buffer;
+		lpmc = (struct hp700_pim_lpmc *) data;
 		checks = &lpmc->pim_lpmc_checks;
 		break;
 	case T_INTERRUPT:
-		toc = (struct hp700_pim_toc *) pim_data_buffer;
+		toc = (struct hp700_pim_toc *) data;
 		regs = &toc->pim_toc_regs;
 		break;
 	default:
@@ -1585,7 +1573,7 @@
 }
 
 static inline void
-hppa_pim64_dump(int check_type)
+hppa_pim64_dump(int check_type, void *data, size_t size)
 {
 	struct hp700_pim64_hpmc *hpmc;
 	struct hp700_pim64_lpmc *lpmc;
@@ -1601,16 +1589,16 @@
 	checks = NULL;
 	switch (check_type) {
 	case T_HPMC:
-		hpmc = (struct hp700_pim64_hpmc *) pim_data_buffer;
+		hpmc = (struct hp700_pim64_hpmc *) data;
 		regs = &hpmc->pim_hpmc_regs;
 		checks = &hpmc->pim_hpmc_checks;
 		break;
 	case T_LPMC:
-		lpmc = (struct hp700_pim64_lpmc *) pim_data_buffer;
+		lpmc = (struct hp700_pim64_lpmc *) data;
 		checks = &lpmc->pim_lpmc_checks;
 		break;
 	case T_INTERRUPT:
-		toc = (struct hp700_pim64_toc *) pim_data_buffer;
+		toc = (struct hp700_pim64_toc *) data;
 		regs = &toc->pim_toc_regs;
 		break;
 	default:
@@ -1686,6 +1674,8 @@
 	int pdc_pim_type;
 	const char *name;
 	int pimerror, error;
+	void *data;
+	size_t size;
 
 	/* Do an fcacheall(). */
 	fcacheall();
@@ -1709,10 +1699,9 @@
 		/* NOTREACHED */
 	}
 
-	pimerror = pdc_call((iodcio_t)pdc, 0, PDC_PIM, pdc_pim_type,
-	    &pdc_pim, pim_data_buffer, sizeof(pim_data_buffer));
+	pimerror = pdcproc_pim(pdc_pim_type, &pdc_pim, &data, &size);
 
-	KASSERT(pdc_pim.count <= sizeof(pim_data_buffer));
+	KASSERT(pdc_pim.count <= size);
 
 	/*
 	 * Reset IO and log errors.
@@ -1721,7 +1710,7 @@
 	 * if we take a HPMC interrupt. This PDC procedure may not be
 	 * implemented by some machines.
 	 */
-	error = pdc_call((iodcio_t)pdc, 0, PDC_IO, 0, 0, 0, 0);
+	error = pdcproc_ioclrerrors();
 	if (error != PDC_ERR_OK && error != PDC_ERR_NOPROC)
 		/* This seems futile if we can't print to the console. */
 		panic("PDC_IO failed");
@@ -1732,9 +1721,9 @@
 		printf(" - WARNING: could not transfer PIM info (%d)", pimerror);
 	} else {
 		if (hppa_cpu_ispa20_p())
-			hppa_pim64_dump(check_type);
+			hppa_pim64_dump(check_type, data, size);
 		else
-			hppa_pim_dump(check_type);
+			hppa_pim_dump(check_type, data, size);
 	}
 
 	printf("\n");

Index: src/sys/arch/hp700/hp700/mainbus.c
diff -u src/sys/arch/hp700/hp700/mainbus.c:1.74 src/sys/arch/hp700/hp700/mainbus.c:1.75
--- src/sys/arch/hp700/hp700/mainbus.c:1.74	Sun Dec 12 08:23:14 2010
+++ src/sys/arch/hp700/hp700/mainbus.c	Tue Jan  4 10:42:34 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: mainbus.c,v 1.74 2010/12/12 08:23:14 skrll Exp $	*/
+/*	$NetBSD: mainbus.c,v 1.75 2011/01/04 10:42:34 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.74 2010/12/12 08:23:14 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.75 2011/01/04 10:42:34 skrll Exp $");
 
 #include "locators.h"
 #include "power.h"
@@ -83,10 +83,8 @@
 #include <hp700/hp700/intr.h>
 #include <hp700/dev/cpudevs.h>
 
-static struct pdc_hpa pdc_hpa PDC_ALIGNMENT;
 #if NLCD > 0
-static struct pdc_chassis_info pdc_chassis_info PDC_ALIGNMENT;
-static struct pdc_chassis_lcd pdc_chassis_lcd PDC_ALIGNMENT;
+static struct pdc_chassis_info pdc_chassis_info;
 #endif
 
 #ifdef MBUSDEBUG
@@ -1360,13 +1358,16 @@
 	struct confargs nca;
 	bus_space_handle_t ioh;
 	hppa_hpa_t hpabase;
+	hppa_hpa_t prochpa;
+	int err;
 
 	sc->sc_dv = self;
-
 	mb_attached = 1;
 
 	/* fetch the "default" cpu hpa */
-	if (pdc_call((iodcio_t)pdc, 0, PDC_HPA, PDC_HPA_DFLT, &pdc_hpa) < 0)
+
+	err =  pdcproc_hpa_processor(&prochpa);
+	if (err < 0)
 		panic("mbattach: PDC_HPA failed");
 
 	/*
@@ -1375,20 +1376,23 @@
 	 * end of the address space.
 	 */
 	/*
-	 * XXX fredette - this may be a copout, or it may
- 	 * be a great idea.  I'm not sure which yet.
+	 * XXX fredette - this may be a copout, or it may be a great idea.  I'm
+	 * not sure which yet.
 	 */
-	if (bus_space_map(&hppa_bustag, pdc_hpa.hpa, 0 - pdc_hpa.hpa, 0, &ioh))
-		panic("mbattach: can't map mainbus IO space");
+
+	/* map all the way till the end of the memory */
+	if (bus_space_map(&hppa_bustag, prochpa, (~0LU - prochpa + 1),
+	    0, &ioh))
+		panic("%s: cannot map mainbus IO space", __func__);
 
 	/*
 	 * Local-Broadcast the HPA to all modules on the bus
 	 */
-	((struct iomod *)(pdc_hpa.hpa & HPPA_FLEX_MASK))[FPA_IOMOD].io_flex =
-		(void *)((pdc_hpa.hpa & HPPA_FLEX_MASK) | DMA_ENABLE);
+	((struct iomod *)(prochpa & HPPA_FLEX_MASK))[FPA_IOMOD].io_flex =
+		(void *)((prochpa & HPPA_FLEX_MASK) | DMA_ENABLE);
 
-	sc->sc_hpa = pdc_hpa.hpa;
-	aprint_normal(" [flex %lx]\n", pdc_hpa.hpa & HPPA_FLEX_MASK);
+	sc->sc_hpa = prochpa;
+	aprint_normal(" [flex %lx]\n", prochpa & HPPA_FLEX_MASK);
 
 	/* PDC first */
 	memset(&nca, 0, sizeof(nca));
@@ -1408,18 +1412,16 @@
 #endif
 
 #if NLCD > 0
-	if (!pdc_call((iodcio_t)pdc, 0, PDC_CHASSIS, PDC_CHASSIS_INFO,
-	    &pdc_chassis_info, &pdc_chassis_lcd, sizeof(pdc_chassis_lcd)) &&
-	    pdc_chassis_lcd.enabled) {
-		memset(&nca, 0, sizeof(nca));
+	memset(&nca, 0, sizeof(nca));
+	err = pdcproc_chassis_info(&pdc_chassis_info, &nca.ca_pcl);
+	if (!err && nca.ca_pcl.enabled) {
 		nca.ca_name = "lcd";
 		nca.ca_dp.dp_bc[0] = nca.ca_dp.dp_bc[1] = nca.ca_dp.dp_bc[2] = 
 		nca.ca_dp.dp_bc[3] = nca.ca_dp.dp_bc[4] = nca.ca_dp.dp_bc[5] = -1;
 		nca.ca_dp.dp_mod = -1;
 		nca.ca_irq = -1;
 		nca.ca_iot = &hppa_bustag;
-		nca.ca_hpa = pdc_chassis_lcd.cmd_addr;
-		nca.ca_pdc_iodc_read = (void *)&pdc_chassis_lcd;
+		nca.ca_hpa = nca.ca_pcl.cmd_addr;
 
 		config_found(self, &nca, mbprint);
 	}

Index: src/sys/arch/hp700/include/autoconf.h
diff -u src/sys/arch/hp700/include/autoconf.h:1.14 src/sys/arch/hp700/include/autoconf.h:1.15
--- src/sys/arch/hp700/include/autoconf.h:1.14	Mon Jan  3 19:20:11 2011
+++ src/sys/arch/hp700/include/autoconf.h	Tue Jan  4 10:42:34 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: autoconf.h,v 1.14 2011/01/03 19:20:11 skrll Exp $	*/
+/*	$NetBSD: autoconf.h,v 1.15 2011/01/04 10:42:34 skrll Exp $	*/
 
 /*	$OpenBSD: autoconf.h,v 1.10 2001/05/05 22:33:42 art Exp $	*/
 
@@ -33,14 +33,23 @@
 #include <machine/bus.h>
 #include <machine/pdc.h>
 
+/* 16 should be enough for anyone */
+#define	HP700_MAXIOADDRS	16
+
 struct confargs {
-	struct iodc_data ca_type PDC_ALIGNMENT;	/* iodc-specific type descrition */
+	struct iodc_data ca_type;	/* iodc-specific type descrition */
 	struct device_path ca_dp;	/* device_path as found by pdc_scan */
-	struct pdc_iodc_read *ca_pdc_iodc_read;
+	union {
+		struct pdc_iodc_read uca_pir;
+		struct pdc_chassis_lcd uca_pcl;
+	} ca_u;
+#define	ca_pir ca_u.uca_pir
+#define	ca_pcl ca_u.uca_pcl
+
 	struct {
 		hppa_hpa_t addr;
 		u_int   size;
-	}		ca_addrs[16];	/* 16 is ought to be enough */
+	}		ca_addrs[HP700_MAXIOADDRS];
 	const char	*ca_name;	/* device name/description */
 	bus_space_tag_t	ca_iot;		/* io tag */
 	int		ca_mod;		/* module number on the bus */

Index: src/sys/arch/hp700/include/pdc.h
diff -u src/sys/arch/hp700/include/pdc.h:1.16 src/sys/arch/hp700/include/pdc.h:1.17
--- src/sys/arch/hp700/include/pdc.h:1.16	Sun Dec 12 08:23:15 2010
+++ src/sys/arch/hp700/include/pdc.h	Tue Jan  4 10:42:34 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: pdc.h,v 1.16 2010/12/12 08:23:15 skrll Exp $	*/
+/*	$NetBSD: pdc.h,v 1.17 2011/01/04 10:42:34 skrll Exp $	*/
 
 /*	$OpenBSD: pdc.h,v 1.35 2007/07/15 20:03:48 kettenis Exp $	*/
 
@@ -335,13 +335,15 @@
 #define	PZL_ENCODE(bits, parity, speed) \
 	(((bits) - 5) & 0x03) | (((parity) & 0x3) << 3) | \
 	(((speed) & 0x0f) << 6)
+};
 
+struct pdc_result {	/* general result buffer */
+	u_int	result[32];
 };
 
 struct pdc_pim {	/* PDC_PIM */
 	u_int	count;		/* actual (HPMC, LPMC) or total (SIZE) count */
 	u_int	archsize;	/* size of architected regions (see "pim.h") */
-	u_int	filler[30];
 };
 
 struct pdc_model {	/* PDC_MODEL */
@@ -362,22 +364,18 @@
 	u_int	arch_rev;	/* architecture revision */
 	u_int	pot_key;	/* potential key */
 	u_int	curr_key;	/* current key */
-	int	filler1;
-	u_int	filler2[22];
 };
 
 struct pdc_cpuid {	/* PDC_MODEL, PDC_CPUID */
 	u_int	reserved : 20;
 	u_int	version  :  7;	/* CPU version */
 	u_int	revision :  5;	/* CPU revision */
-	u_int	filler[31];
 };
 
 struct pdc_getbootopts {	/* PDC_MODEL_GETBOOTOPTS */
 	u_int	cur_test;	/* current enabled tests */
 	u_int	sup_test;	/* supported tests */
 	u_int	def_test;	/* default enabled tests */
-	u_int	filler[29];
 };
 
 struct cache_cf {	/* PDC_CACHE (for "struct pdc_cache") */
@@ -448,14 +446,12 @@
 	u_int	dt_off_stride;	/* offset incr per off_count iteration (flush)*/
 	u_int	dt_off_count;	/* number of dt_loop iterations/space (flush) */
 	u_int	dt_loop;	/* number of PDTLBE's per off_stride (flush) */
-	u_int	filler[2];
 };
 
 struct pdc_spidb {	/* PDC_CACHE, PDC_CACHE_GETSPIDB */
 	u_int	spidR1   : 4;
 	u_int	spidbits : 12;
 	u_int	spidR2   : 16;
-	u_int	filler[31];
 };
 
 struct pdc_cst {
@@ -473,13 +469,10 @@
 #define	ita_cst ita.cst
 	struct pdc_cst	dta;
 #define	dta_cst dta.cst
-	u_int	filler[28];
 };
 
 struct pdc_hpa {	/* PDC_HPA */
 	hppa_hpa_t hpa;	/* HPA of processor */
-	int	filler1;
-	u_int	filler2[30];
 };
 
 struct pdc_coproc {	/* PDC_COPROC */
@@ -488,13 +481,11 @@
 	u_int	pad[15];
 	u_int	fpu_revision;
 	u_int	fpu_model;
-	u_int	filler2[13];
 };
 
 struct pdc_tod {	/* PDC_TOD, PDC_TOD_READ */
 	u_int	sec;		/* elapsed time since 00:00:00 GMT, 1/1/70 */
 	u_int	usec;		/* accurate to microseconds */
-	u_int	filler2[30];
 };
 
 struct pdc_itimer {	/* PDC_TOD_ITIMER */
@@ -502,7 +493,6 @@
 	u_int	calib1;
 	u_int	tod_acc;	/* TOD accuracy in 1e-9 part */
 	u_int	cr_acc;		/* itmr accuracy in 1e-9 parts */
-	u_int	filler[28];
 };
 
 struct pdc_nvm {	/* PDC_NVM */
@@ -517,8 +507,6 @@
 
 struct pdc_instr {	/* PDC_INSTR */
 	u_int	instr;		/* instruction that invokes PDC mchk entry pt */
-	int	filler1;
-	u_int	filler2[30];
 };
 
 struct pdc_iodc_read {	/* PDC_IODC, PDC_IODC_READ */
@@ -532,7 +520,6 @@
 	u_int	max_spa;	/* size of SPA (in bytes) > max_mem+map_mem */
 	u_int	max_mem;	/* size of "implemented" memory (in bytes) */
 	u_int	map_mem;	/* size of "mappable-only" memory (in bytes) */
-	u_int	filler[28];
 };
 
 struct btlb_info {		/* for "struct pdc_btlb" (PDC_BTLB) */
@@ -547,24 +534,20 @@
 	u_int	max_size;	/* Max size in pages */
 	struct btlb_info finfo;	/* Fixed range info */
 	struct btlb_info vinfo; /* Variable range info */
-	u_int 	filler[28];
 };
 
 struct pdc_hwtlb {	/* PDC_TLB */
 	u_int	min_size;	/* What do these mean? */
 	u_int	max_size;
-	u_int	filler[30];
 };
 
 struct pdc_power_info {		/* PDC_SOFT_POWER_INFO */
 	u_int	addr;		/* power register address */
-	u_int	filler[31];
 };
 
 struct pdc_pat_cell_id {	/* PDC_PAT_CELL_GETID */
 	u_long	id;		/* cell id */
 	u_long	loc;		/* cell location */
-	u_long	filler[14];
 };
 
 struct pdc_pat_cell_module {	/* PDC_PAT_CELL_MODULE */
@@ -581,7 +564,6 @@
 
 struct pdc_pat_io_num {	/* PDC_PAT_IO */
 	u_int	num;
-	u_int	filler[31];
 };
 
 struct pdc_pat_pci_rt {	/* PDC_PAT_IO_GET_PCI_RT */
@@ -599,7 +581,6 @@
 struct pdc_memmap {	/* PDC_MEMMAP */
 	u_int	hpa;		/* HPA for module */
 	u_int	morepages;	/* additional IO pages */
-	u_int	filler[30];
 };
 
 struct pdc_system_map_find_mod {	/* PDC_SYSTEM_MAP_FIND_MOD */
@@ -607,19 +588,15 @@
 	u_int	size;		/* pages */
 	u_int	naddrs;
 	u_int	mod_index;
-	u_int	filler[28];
 };
 
 struct pdc_system_map_find_addr {	/* PDC_SYSTEM_MAP_FIND_ADDR */
 	u_int	hpa;
 	u_int	size;		/* pages */
-	u_int	filler[30];
 };
 
 struct pdc_lan_station_id {	/* PDC_LAN_STATION_ID */
 	uint8_t	addr[6];
-	uint8_t	filler1[2];
-	u_int	filler2[30];
 };
 
 /*
@@ -665,7 +642,6 @@
 struct pdc_chassis_info {
 	u_int	size;
 	u_int	max_size;
-	u_int	filler[30];
 };
 
 struct pdc_chassis_lcd {
@@ -678,7 +654,6 @@
 	uint8_t	enabled;
 	uint8_t	heartbeat[3];
 	uint8_t disk[3];
-	u_int	filler[25];
 };
 
 /*
@@ -788,6 +763,57 @@
 int pdccngetc(dev_t);
 void pdccnputc(dev_t, int);
 void pdccnpollc(dev_t, int);
+
+int pdcproc_chassis_display(unsigned long);
+int pdcproc_chassis_info(struct pdc_chassis_info *, struct pdc_chassis_lcd *);
+
+int pdcproc_pim(int, struct pdc_pim *, void **, size_t *);
+
+int pdcproc_model_info(struct pdc_model *);
+int pdcproc_model_cpuid(struct pdc_cpuid *);
+
+int pdcproc_cache(struct pdc_cache *);
+int pdcproc_cache_coherence(struct pdc_coherence *);
+int pdcproc_cache_spidbits(struct pdc_spidb *);
+
+int pdcproc_hpa_processor(hppa_hpa_t *);
+
+int pdcproc_coproc(struct pdc_coproc *);
+
+int pdcproc_iodc_read(hppa_hpa_t, int, int *, struct pdc_iodc_read *, size_t,
+    struct iodc_data *, size_t);
+int pdcproc_iodc_ninit(struct pdc_iodc_minit *, hppa_hpa_t, int);
+
+int pdcproc_instr(unsigned int *);
+
+int pdcproc_block_tlb(struct pdc_btlb *);
+int pdcproc_btlb_insert(pa_space_t, vaddr_t, paddr_t, vsize_t, u_int, int);
+int pdcproc_btlb_purge(pa_space_t, vaddr_t, paddr_t, vsize_t);
+int pdcproc_btlb_purgeall(void);
+
+int pdcproc_tlb_info(struct pdc_hwtlb *);
+int pdcproc_tlb_config(struct pdc_hwtlb *, vaddr_t, vsize_t, unsigned long);
+
+int pdcproc_system_map_find_mod(struct pdc_system_map_find_mod *,
+    struct device_path *, int);
+int pdcproc_system_map_find_addr(struct pdc_system_map_find_addr *, int, int);
+int pdcproc_system_map_trans_path(struct pdc_memmap *, struct device_path *);
+
+int pdcproc_soft_power_enable(int);
+int pdcproc_soft_power_info(struct pdc_power_info *);
+
+int pdcproc_memmap(struct pdc_memmap *, struct device_path *);
+
+int pdcproc_ioclrerrors(void);
+int pdcproc_ioreset(void);
+
+int pdcproc_doreset(void);
+
+int pdcproc_lan_station_id(char *, size_t, hppa_hpa_t);
+
+int pdcproc_pci_inttblsz(int *);
+int pdcproc_pci_gettable(int, size_t, void *);
+
 #endif
 
 #endif	/* !(_LOCORE) */

Reply via email to