Module Name:    src
Committed By:   tsutsui
Date:           Fri May 15 17:55:44 UTC 2009

Modified Files:
        src/sys/arch/hp700/dev: siop_sgc.c
        src/sys/arch/hp700/gsc: siop_gsc.c
        src/sys/dev/ic: esiop.c siop.c siop_common.c siopvar_common.h
        src/sys/dev/pci: esiop_pci.c siop_pci.c siop_pci_common.c

Log Message:
Split device_t/softc.

No crash on:
esiop0 at pci0 dev 11 function 0: Symbios Logic 53c875 (ultra-wide scsi)
siop0 at pci0 dev 9 function 0: Symbios Logic 53c810a (fast scsi)
siop0 at gsc0 hpa 0xf0830000 path 2/0/7 irq 3 ipl 6: NCR53C720 rev 2


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/hp700/dev/siop_sgc.c
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/hp700/gsc/siop_gsc.c
cvs rdiff -u -r1.45 -r1.46 src/sys/dev/ic/esiop.c
cvs rdiff -u -r1.90 -r1.91 src/sys/dev/ic/siop.c
cvs rdiff -u -r1.48 -r1.49 src/sys/dev/ic/siop_common.c
cvs rdiff -u -r1.36 -r1.37 src/sys/dev/ic/siopvar_common.h
cvs rdiff -u -r1.15 -r1.16 src/sys/dev/pci/esiop_pci.c
cvs rdiff -u -r1.24 -r1.25 src/sys/dev/pci/siop_pci.c
cvs rdiff -u -r1.29 -r1.30 src/sys/dev/pci/siop_pci_common.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/siop_sgc.c
diff -u src/sys/arch/hp700/dev/siop_sgc.c:1.3 src/sys/arch/hp700/dev/siop_sgc.c:1.4
--- src/sys/arch/hp700/dev/siop_sgc.c:1.3	Fri May  8 09:33:58 2009
+++ src/sys/arch/hp700/dev/siop_sgc.c	Fri May 15 17:55:44 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: siop_sgc.c,v 1.3 2009/05/08 09:33:58 skrll Exp $	*/
+/*	$NetBSD: siop_sgc.c,v 1.4 2009/05/15 17:55:44 tsutsui Exp $	*/
 
 /*	$OpenBSD: siop_sgc.c,v 1.1 2007/08/05 19:09:52 kettenis Exp $	*/
 
@@ -19,7 +19,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: siop_sgc.c,v 1.3 2009/05/08 09:33:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: siop_sgc.c,v 1.4 2009/05/15 17:55:44 tsutsui Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -46,8 +46,8 @@
 #define IO_II_PACKEN		0x10000000
 #define IO_II_PREFETCHEN	0x08000000
 
-int siop_sgc_match(struct device *, struct cfdata *, void *);
-void siop_sgc_attach(struct device *, struct device *, void *);
+int siop_sgc_match(device_t, cfdata_t, void *);
+void siop_sgc_attach(device_t, device_t, void *);
 int siop_sgc_intr(void *);
 void siop_sgc_reset(struct siop_common_softc *);
 
@@ -63,11 +63,11 @@
 	struct hppa_bus_space_tag sc_bustag;
 };
 
-CFATTACH_DECL(siop_gedoens, sizeof(struct siop_sgc_softc),
+CFATTACH_DECL_NEW(siop_gedoens, sizeof(struct siop_sgc_softc),
     siop_sgc_match, siop_sgc_attach, NULL, NULL);
 
 int
-siop_sgc_match(struct device *parent, struct cfdata *match, void *aux)
+siop_sgc_match(device_t parent, cfdata_t match, void *aux)
 {
 	struct confargs *ca = aux;
 
@@ -83,17 +83,18 @@
 }
 
 void
-siop_sgc_attach(struct device *parent, struct device *self, void *aux)
+siop_sgc_attach(device_t parent, device_t self, void *aux)
 {
-	struct siop_sgc_softc *sgc = (struct siop_sgc_softc *)self;
+	struct siop_sgc_softc *sgc = device_private(self);
 	struct siop_softc *sc = &sgc->sc_siop;
 	struct confargs *ca = aux;
 	volatile struct iomod *regs;
 
+	sc->sc_c.sc_dev = self;
 	sgc->sc_iot = ca->ca_iot;
 	if (bus_space_map(sgc->sc_iot, ca->ca_hpa,
 	    IOMOD_HPASIZE, 0, &sgc->sc_ioh)) {
-		printf(": can't map io space\n");
+		aprint_error(": can't map io space\n");
 		return;
 	}
 
@@ -128,12 +129,12 @@
 	regs->io_eim = cpu_gethpa(0) | (31 - ca->ca_irq);
 	regs->io_ii_rw |= IO_II_INTEN;
 
-	printf(": NCR53C720 rev %d\n", bus_space_read_1(sc->sc_c.sc_rt,
+	aprint_normal(": NCR53C720 rev %d\n", bus_space_read_1(sc->sc_c.sc_rt,
 	    sc->sc_c.sc_rh, SIOP_CTEST3) >> 4);
 
 	siop_attach(&sgc->sc_siop);
 
-	(void)hp700_intr_establish(&sc->sc_c.sc_dev, IPL_BIO,
+	(void)hp700_intr_establish(self, IPL_BIO,
 	    siop_intr, sc, &int_reg_cpu, ca->ca_irq);
 }
 

Index: src/sys/arch/hp700/gsc/siop_gsc.c
diff -u src/sys/arch/hp700/gsc/siop_gsc.c:1.9 src/sys/arch/hp700/gsc/siop_gsc.c:1.10
--- src/sys/arch/hp700/gsc/siop_gsc.c:1.9	Fri May  8 09:33:58 2009
+++ src/sys/arch/hp700/gsc/siop_gsc.c	Fri May 15 17:55:44 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: siop_gsc.c,v 1.9 2009/05/08 09:33:58 skrll Exp $	*/
+/*	$NetBSD: siop_gsc.c,v 1.10 2009/05/15 17:55:44 tsutsui Exp $	*/
 
 /*	$OpenBSD: siop_gsc.c,v 1.4 2007/08/23 21:01:22 kettenis Exp $	*/
 
@@ -19,7 +19,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: siop_gsc.c,v 1.9 2009/05/08 09:33:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: siop_gsc.c,v 1.10 2009/05/15 17:55:44 tsutsui Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -45,8 +45,8 @@
 #define	SIOP_GSC_RESET	0x0000
 #define	SIOP_GSC_OFFSET	0x0100
 
-int siop_gsc_match(struct device *, struct cfdata *, void *);
-void siop_gsc_attach(struct device *, struct device *, void *);
+int siop_gsc_match(device_t, cfdata_t, void *);
+void siop_gsc_attach(device_t, device_t, void *);
 int siop_gsc_intr(void *);
 void siop_gsc_reset(struct siop_common_softc *);
 
@@ -62,11 +62,11 @@
 	struct hppa_bus_space_tag sc_bustag;
 };
 
-CFATTACH_DECL(siop_gsc, sizeof(struct siop_gsc_softc),
+CFATTACH_DECL_NEW(siop_gsc, sizeof(struct siop_gsc_softc),
     siop_gsc_match, siop_gsc_attach, NULL, NULL);
 
 int
-siop_gsc_match(struct device *parent, struct cfdata *match, void *aux)
+siop_gsc_match(device_t parent, cfdata_t match, void *aux)
 {
 	struct gsc_attach_args *ga = aux;
 
@@ -78,16 +78,17 @@
 }
 
 void
-siop_gsc_attach(struct device *parent, struct device *self, void *aux)
+siop_gsc_attach(device_t parent, device_t self, void *aux)
 {
-	struct siop_gsc_softc *gsc = (struct siop_gsc_softc *)self;
+	struct siop_gsc_softc *gsc = device_private(self);
 	struct siop_softc *sc = &gsc->sc_siop;
 	struct gsc_attach_args *ga = aux;
 
+	sc->sc_c.sc_dev = self;
 	gsc->sc_iot = ga->ga_iot;
 	if (bus_space_map(gsc->sc_iot, ga->ga_hpa,
 	    IOMOD_HPASIZE, 0, &gsc->sc_ioh)) {
-		printf(": can't map io space\n");
+		aprint_error(": can't map io space\n");
 		return;
 	}
 
@@ -118,12 +119,12 @@
 	DELAY(1000);
 	siop_gsc_reset(&sc->sc_c);
 
-	printf(": NCR53C720 rev %d\n", bus_space_read_1(sc->sc_c.sc_rt,
+	aprint_normal(": NCR53C720 rev %d\n", bus_space_read_1(sc->sc_c.sc_rt,
 	    sc->sc_c.sc_rh, SIOP_CTEST3) >> 4);
 
 	siop_attach(sc);
 
-	(void)hp700_intr_establish(&sc->sc_c.sc_dev, IPL_BIO,
+	(void)hp700_intr_establish(self, IPL_BIO,
 	    siop_intr, sc, ga->ga_int_reg, ga->ga_irq);
 
 }

Index: src/sys/dev/ic/esiop.c
diff -u src/sys/dev/ic/esiop.c:1.45 src/sys/dev/ic/esiop.c:1.46
--- src/sys/dev/ic/esiop.c:1.45	Sun Mar 15 15:52:12 2009
+++ src/sys/dev/ic/esiop.c	Fri May 15 17:55:44 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: esiop.c,v 1.45 2009/03/15 15:52:12 cegger Exp $	*/
+/*	$NetBSD: esiop.c,v 1.46 2009/05/15 17:55:44 tsutsui Exp $	*/
 
 /*
  * Copyright (c) 2002 Manuel Bouyer.
@@ -33,7 +33,7 @@
 /* SYM53c7/8xx PCI-SCSI I/O Processors driver */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: esiop.c,v 1.45 2009/03/15 15:52:12 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: esiop.c,v 1.46 2009/05/15 17:55:44 tsutsui Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -161,7 +161,7 @@
 	TAILQ_INIT(&sc->tag_tblblk);
 	sc->sc_currschedslot = 0;
 #ifdef SIOP_DEBUG
-	aprint_debug_dev(&sc->sc_c.sc_dev, "script size = %d, PHY addr=0x%x, VIRT=%p\n",
+	aprint_debug_dev(sc->sc_c.sc_dev, "script size = %d, PHY addr=0x%x, VIRT=%p\n",
 	    (int)sizeof(esiop_script),
 	    (u_int32_t)sc->sc_c.sc_scriptaddr, sc->sc_c.sc_script);
 #endif
@@ -175,7 +175,7 @@
 	 */
 #ifdef DIAGNOSTIC
 	if (ESIOP_NTAG != A_ndone_slots) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "size of tag DSA table different from the done"
+		aprint_error_dev(sc->sc_c.sc_dev, "size of tag DSA table different from the done"
 		    " ring\n");
 		return;
 	}
@@ -183,7 +183,7 @@
 	esiop_moretagtbl(sc);
 	tagtbl_donering = TAILQ_FIRST(&sc->free_tagtbl);
 	if (tagtbl_donering == NULL) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "no memory for command done ring\n");
+		aprint_error_dev(sc->sc_c.sc_dev, "no memory for command done ring\n");
 		return;
 	}
 	TAILQ_REMOVE(&sc->free_tagtbl, tagtbl_donering, next);
@@ -201,7 +201,7 @@
 	esiop_dump_script(sc);
 #endif
 
-	config_found((struct device*)sc, &sc->sc_c.sc_chan, scsiprint);
+	config_found(sc->sc_c.sc_dev, &sc->sc_c.sc_chan, scsiprint);
 }
 
 void
@@ -387,7 +387,7 @@
 	    ((addr & 0xff000000) >> 16));
 #ifdef SIOP_DEBUG
 	printf("%s: target table offset %d free offset %d\n",
-	    device_xname(&sc->sc_c.sc_dev), sc->sc_target_table_offset,
+	    device_xname(sc->sc_c.sc_dev), sc->sc_target_table_offset,
 	    sc->sc_free_offset);
 #endif
 
@@ -538,7 +538,7 @@
 		}
 
 		if (dstat & ~(DSTAT_SIR | DSTAT_DFE | DSTAT_SSI)) {
-		printf("%s: DMA IRQ:", device_xname(&sc->sc_c.sc_dev));
+		printf("%s: DMA IRQ:", device_xname(sc->sc_c.sc_dev));
 		if (dstat & DSTAT_IID)
 			printf(" Illegal instruction");
 		if (dstat & DSTAT_BF)
@@ -590,7 +590,7 @@
 			if (esiop_cmd)
 				scsipi_printaddr(xs->xs_periph);
 			else
-				printf("%s:", device_xname(&sc->sc_c.sc_dev));
+				printf("%s:", device_xname(sc->sc_c.sc_dev));
 			printf("scsi gross error\n");
 			if (esiop_target)
 				esiop_target->target_c.flags &= ~TARF_DT;
@@ -656,10 +656,10 @@
 					CALL_SCRIPT(Ent_msgin);
 					return 1;
 				}
-				aprint_error_dev(&sc->sc_c.sc_dev, "unexpected phase mismatch %d\n",
+				aprint_error_dev(sc->sc_c.sc_dev, "unexpected phase mismatch %d\n",
 				    sstat1 & SSTAT1_PHASE_MASK);
 			} else {
-				aprint_error_dev(&sc->sc_c.sc_dev, "phase mismatch without command\n");
+				aprint_error_dev(sc->sc_c.sc_dev, "phase mismatch without command\n");
 			}
 			need_reset = 1;
 		}
@@ -668,7 +668,7 @@
 			if (esiop_cmd)
 				scsipi_printaddr(xs->xs_periph);
 			else
-				printf("%s:", device_xname(&sc->sc_c.sc_dev));
+				printf("%s:", device_xname(sc->sc_c.sc_dev));
 			printf("parity error\n");
 			if (esiop_target)
 				esiop_target->target_c.flags &= ~TARF_DT;
@@ -717,7 +717,7 @@
 				printf("%s: selection timeout without "
 				    "command, target %d (sdid 0x%x), "
 				    "slot %d\n",
-				    device_xname(&sc->sc_c.sc_dev), target,
+				    device_xname(sc->sc_c.sc_dev), target,
 				    bus_space_read_1(sc->sc_c.sc_rt,
 				    sc->sc_c.sc_rh, SIOP_SDID), slot);
 				need_reset = 1;
@@ -733,7 +733,7 @@
 				    htole32(SCSI_CHECK);
 				goto end;
 			}
-			aprint_error_dev(&sc->sc_c.sc_dev, "unexpected disconnect without "
+			aprint_error_dev(sc->sc_c.sc_dev, "unexpected disconnect without "
 			    "command\n");
 			goto reset;
 		}
@@ -759,7 +759,7 @@
 			return 1;
 		}
 		/* Else it's an unhandled exception (for now). */
-		aprint_error_dev(&sc->sc_c.sc_dev, "unhandled scsi interrupt, sist=0x%x sstat1=0x%x "
+		aprint_error_dev(sc->sc_c.sc_dev, "unhandled scsi interrupt, sist=0x%x sstat1=0x%x "
 		    "DSA=0x%x DSP=0x%x\n", sist,
 		    bus_space_read_1(sc->sc_c.sc_rt, sc->sc_c.sc_rh,
 			SIOP_SSTAT1),
@@ -794,13 +794,13 @@
 		 */
 		if ((irqcode & 0x80) == 0) {
 			if (esiop_cmd == NULL) {
-				aprint_error_dev(&sc->sc_c.sc_dev,
+				aprint_error_dev(sc->sc_c.sc_dev,
 			"script interrupt (0x%x) with invalid DSA !!!\n",
 				    irqcode);
 				goto reset;
 			}
 			if (esiop_cmd->cmd_c.status != CMDST_ACTIVE) {
-				aprint_error_dev(&sc->sc_c.sc_dev, "command with invalid status "
+				aprint_error_dev(sc->sc_c.sc_dev, "command with invalid status "
 				    "(IRQ code 0x%x current status %d) !\n",
 				    irqcode, esiop_cmd->cmd_c.status);
 				xs = NULL;
@@ -845,7 +845,7 @@
 						scsipi_printaddr(xs->xs_periph);
 					else
 						printf("%s: ",
-						   device_xname(&sc->sc_c.sc_dev));
+						   device_xname(sc->sc_c.sc_dev));
 					printf("our reject message was "
 					    "rejected\n");
 					goto reset;
@@ -910,7 +910,7 @@
 					scsipi_printaddr(xs->xs_periph);
 				else
 					printf("%s: ",
-					    device_xname(&sc->sc_c.sc_dev));
+					    device_xname(sc->sc_c.sc_dev));
 				if (msg == MSG_EXTENDED) {
 					printf("scsi message reject, extended "
 					    "message sent was 0x%x\n", extmsg);
@@ -934,7 +934,7 @@
 			if (xs)
 				scsipi_printaddr(xs->xs_periph);
 			else
-				printf("%s: ", device_xname(&sc->sc_c.sc_dev));
+				printf("%s: ", device_xname(sc->sc_c.sc_dev));
 			printf("unhandled message 0x%x\n", msgin);
 			esiop_cmd->cmd_tables->msg_out[0] = MSG_MESSAGE_REJECT;
 			esiop_cmd->cmd_tables->t_msgout.count= htole32(1);
@@ -951,7 +951,7 @@
 #endif
 			if (esiop_cmd->cmd_tables->msg_in[1] >
 			    sizeof(esiop_cmd->cmd_tables->msg_in) - 2)
-				aprint_error_dev(&sc->sc_c.sc_dev, "extended message too big (%d)\n",
+				aprint_error_dev(sc->sc_c.sc_dev, "extended message too big (%d)\n",
 				    esiop_cmd->cmd_tables->msg_in[1]);
 			esiop_cmd->cmd_tables->t_extmsgdata.count =
 			    htole32(esiop_cmd->cmd_tables->msg_in[1] - 1);
@@ -1087,7 +1087,7 @@
 		case A_int_done:
 			if (xs == NULL) {
 				printf("%s: done without command\n",
-				    device_xname(&sc->sc_c.sc_dev));
+				    device_xname(sc->sc_c.sc_dev));
 				CALL_SCRIPT(Ent_script_sched);
 				return 1;
 			}
@@ -1173,7 +1173,7 @@
 		INCSTAT(esiop_stat_intr_qfull);
 #ifdef SIOP_DEBUG
 		printf("%s:%d:%d: queue full (tag %d)\n",
-		    device_xname(&sc->sc_c.sc_dev),
+		    device_xname(sc->sc_c.sc_dev),
 		    xs->xs_periph->periph_target,
 		    xs->xs_periph->periph_lun, esiop_cmd->cmd_c.tag);
 #endif
@@ -1377,12 +1377,12 @@
 
 #ifdef SIOP_DEBUG
 	printf("%s:%d:%d: tag message %d (%d) rejected (status %d)\n",
-	    device_xname(&sc->sc_c.sc_dev), target, lun, tag, esiop_cmd->cmd_c.tag,
+	    device_xname(sc->sc_c.sc_dev), target, lun, tag, esiop_cmd->cmd_c.tag,
 	    esiop_cmd->cmd_c.status);
 #endif
 
 	if (esiop_lun->active != NULL) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "untagged command already running for target %d "
+		aprint_error_dev(sc->sc_c.sc_dev, "untagged command already running for target %d "
 		    "lun %d (status %d)\n",
 		    target, lun, esiop_lun->active->cmd_c.status);
 		return -1;
@@ -1417,7 +1417,7 @@
 	 * scsi bus reset. reset the chip and restart
 	 * the queue. Need to clean up all active commands
 	 */
-	printf("%s: scsi bus reset\n", device_xname(&sc->sc_c.sc_dev));
+	printf("%s: scsi bus reset\n", device_xname(sc->sc_c.sc_dev));
 	/* stop, reset and restart the chip */
 	esiop_reset(sc);
 
@@ -1480,7 +1480,7 @@
 {
 	struct scsipi_xfer *xs;
 	struct scsipi_periph *periph;
-	struct esiop_softc *sc = (void *)chan->chan_adapter->adapt_dev;
+	struct esiop_softc *sc = device_private(chan->chan_adapter->adapt_dev);
 	struct esiop_cmd *esiop_cmd;
 	struct esiop_target *esiop_target;
 	int s, error, i;
@@ -1525,13 +1525,13 @@
 		if (esiop_target == NULL) {
 #ifdef SIOP_DEBUG
 			printf("%s: alloc siop_target for target %d\n",
-				device_xname(&sc->sc_c.sc_dev), target);
+				device_xname(sc->sc_c.sc_dev), target);
 #endif
 			sc->sc_c.targets[target] =
 			    malloc(sizeof(struct esiop_target),
 				M_DEVBUF, M_NOWAIT | M_ZERO);
 			if (sc->sc_c.targets[target] == NULL) {
-				aprint_error_dev(&sc->sc_c.sc_dev, "can't malloc memory for "
+				aprint_error_dev(sc->sc_c.sc_dev, "can't malloc memory for "
 				    "target %d\n", target);
 				xs->error = XS_RESOURCE_SHORTAGE;
 				scsipi_done(xs);
@@ -1556,7 +1556,7 @@
 			    malloc(sizeof(struct esiop_lun), M_DEVBUF,
 			    M_NOWAIT|M_ZERO);
 			if (esiop_target->esiop_lun[lun] == NULL) {
-				aprint_error_dev(&sc->sc_c.sc_dev, "can't alloc esiop_lun for "
+				aprint_error_dev(sc->sc_c.sc_dev, "can't alloc esiop_lun for "
 				    "target %d lun %d\n",
 				    target, lun);
 				xs->error = XS_RESOURCE_SHORTAGE;
@@ -1575,7 +1575,7 @@
 		    esiop_cmd->cmd_c.dmamap_cmd,
 		    xs->cmd, xs->cmdlen, NULL, BUS_DMA_NOWAIT);
 		if (error) {
-			aprint_error_dev(&sc->sc_c.sc_dev, "unable to load cmd DMA map: %d\n",
+			aprint_error_dev(sc->sc_c.sc_dev, "unable to load cmd DMA map: %d\n",
 			    error);
 			xs->error = XS_DRIVER_STUFFUP;
 			scsipi_done(xs);
@@ -1589,7 +1589,7 @@
 			    ((xs->xs_control & XS_CTL_DATA_IN) ?
 			     BUS_DMA_READ : BUS_DMA_WRITE));
 			if (error) {
-				aprint_error_dev(&sc->sc_c.sc_dev, "unable to load cmd DMA map: %d",
+				aprint_error_dev(sc->sc_c.sc_dev, "unable to load cmd DMA map: %d",
 				    error);
 				xs->error = XS_DRIVER_STUFFUP;
 				scsipi_done(xs);
@@ -1638,7 +1638,7 @@
 
 	case ADAPTER_REQ_GROW_RESOURCES:
 #ifdef SIOP_DEBUG
-		printf("%s grow resources (%d)\n", device_xname(&sc->sc_c.sc_dev),
+		printf("%s grow resources (%d)\n", device_xname(sc->sc_c.sc_dev),
 		    sc->sc_c.sc_adapt.adapt_openings);
 #endif
 		esiop_morecbd(sc);
@@ -1869,7 +1869,7 @@
 	/* allocate a new list head */
 	newcbd = malloc(sizeof(struct esiop_cbd), M_DEVBUF, M_NOWAIT|M_ZERO);
 	if (newcbd == NULL) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "can't allocate memory for command descriptors "
+		aprint_error_dev(sc->sc_c.sc_dev, "can't allocate memory for command descriptors "
 		    "head\n");
 		return;
 	}
@@ -1878,37 +1878,37 @@
 	newcbd->cmds = malloc(sizeof(struct esiop_cmd) * SIOP_NCMDPB,
 	    M_DEVBUF, M_NOWAIT|M_ZERO);
 	if (newcbd->cmds == NULL) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "can't allocate memory for command descriptors\n");
+		aprint_error_dev(sc->sc_c.sc_dev, "can't allocate memory for command descriptors\n");
 		goto bad3;
 	}
 	error = bus_dmamem_alloc(sc->sc_c.sc_dmat, PAGE_SIZE, PAGE_SIZE, 0,
 	    &seg, 1, &rseg, BUS_DMA_NOWAIT);
 	if (error) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "unable to allocate cbd DMA memory, error = %d\n",
+		aprint_error_dev(sc->sc_c.sc_dev, "unable to allocate cbd DMA memory, error = %d\n",
 		    error);
 		goto bad2;
 	}
 	error = bus_dmamem_map(sc->sc_c.sc_dmat, &seg, rseg, PAGE_SIZE,
 	    (void **)&newcbd->xfers, BUS_DMA_NOWAIT|BUS_DMA_COHERENT);
 	if (error) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "unable to map cbd DMA memory, error = %d\n",
+		aprint_error_dev(sc->sc_c.sc_dev, "unable to map cbd DMA memory, error = %d\n",
 		    error);
 		goto bad2;
 	}
 	error = bus_dmamap_create(sc->sc_c.sc_dmat, PAGE_SIZE, 1, PAGE_SIZE, 0,
 	    BUS_DMA_NOWAIT, &newcbd->xferdma);
 	if (error) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "unable to create cbd DMA map, error = %d\n", error);
+		aprint_error_dev(sc->sc_c.sc_dev, "unable to create cbd DMA map, error = %d\n", error);
 		goto bad1;
 	}
 	error = bus_dmamap_load(sc->sc_c.sc_dmat, newcbd->xferdma,
 	    newcbd->xfers, PAGE_SIZE, NULL, BUS_DMA_NOWAIT);
 	if (error) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "unable to load cbd DMA map, error = %d\n", error);
+		aprint_error_dev(sc->sc_c.sc_dev, "unable to load cbd DMA map, error = %d\n", error);
 		goto bad0;
 	}
 #ifdef DEBUG
-	printf("%s: alloc newcdb at PHY addr 0x%lx\n", device_xname(&sc->sc_c.sc_dev),
+	printf("%s: alloc newcdb at PHY addr 0x%lx\n", device_xname(sc->sc_c.sc_dev),
 	    (unsigned long)newcbd->xferdma->dm_segs[0].ds_addr);
 #endif
 	for (i = 0; i < SIOP_NCMDPB; i++) {
@@ -1916,7 +1916,7 @@
 		    MAXPHYS, 0, BUS_DMA_NOWAIT | BUS_DMA_ALLOCNOW,
 		    &newcbd->cmds[i].cmd_c.dmamap_data);
 		if (error) {
-			aprint_error_dev(&sc->sc_c.sc_dev, "unable to create data DMA map for cbd: "
+			aprint_error_dev(sc->sc_c.sc_dev, "unable to create data DMA map for cbd: "
 			    "error %d\n", error);
 			goto bad0;
 		}
@@ -1926,7 +1926,7 @@
 		    BUS_DMA_NOWAIT | BUS_DMA_ALLOCNOW,
 		    &newcbd->cmds[i].cmd_c.dmamap_cmd);
 		if (error) {
-			aprint_error_dev(&sc->sc_c.sc_dev, "unable to create cmd DMA map for cbd %d\n", error);
+			aprint_error_dev(sc->sc_c.sc_dev, "unable to create cmd DMA map for cbd %d\n", error);
 			goto bad0;
 		}
 		newcbd->cmds[i].cmd_c.siop_sc = &sc->sc_c;
@@ -1994,7 +1994,7 @@
 	newtblblk = malloc(sizeof(struct esiop_dsatblblk),
 	    M_DEVBUF, M_NOWAIT|M_ZERO);
 	if (newtblblk == NULL) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "can't allocate memory for tag DSA table block\n");
+		aprint_error_dev(sc->sc_c.sc_dev, "can't allocate memory for tag DSA table block\n");
 		return;
 	}
 
@@ -2002,36 +2002,36 @@
 	newtbls = malloc(sizeof(struct esiop_dsatbl) * ESIOP_NTPB,
 	    M_DEVBUF, M_NOWAIT|M_ZERO);
 	if (newtbls == NULL) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "can't allocate memory for command descriptors\n");
+		aprint_error_dev(sc->sc_c.sc_dev, "can't allocate memory for command descriptors\n");
 		goto bad3;
 	}
 	error = bus_dmamem_alloc(sc->sc_c.sc_dmat, PAGE_SIZE, PAGE_SIZE, 0,
 	    &seg, 1, &rseg, BUS_DMA_NOWAIT);
 	if (error) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "unable to allocate tbl DMA memory, error = %d\n", error);
+		aprint_error_dev(sc->sc_c.sc_dev, "unable to allocate tbl DMA memory, error = %d\n", error);
 		goto bad2;
 	}
 	error = bus_dmamem_map(sc->sc_c.sc_dmat, &seg, rseg, PAGE_SIZE,
 	    (void *)&tbls, BUS_DMA_NOWAIT|BUS_DMA_COHERENT);
 	if (error) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "unable to map tbls DMA memory, error = %d\n", error);
+		aprint_error_dev(sc->sc_c.sc_dev, "unable to map tbls DMA memory, error = %d\n", error);
 		goto bad2;
 	}
 	error = bus_dmamap_create(sc->sc_c.sc_dmat, PAGE_SIZE, 1, PAGE_SIZE, 0,
 	    BUS_DMA_NOWAIT, &newtblblk->blkmap);
 	if (error) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "unable to create tbl DMA map, error = %d\n", error);
+		aprint_error_dev(sc->sc_c.sc_dev, "unable to create tbl DMA map, error = %d\n", error);
 		goto bad1;
 	}
 	error = bus_dmamap_load(sc->sc_c.sc_dmat, newtblblk->blkmap,
 	    tbls, PAGE_SIZE, NULL, BUS_DMA_NOWAIT);
 	if (error) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "unable to load tbl DMA map, error = %d\n", error);
+		aprint_error_dev(sc->sc_c.sc_dev, "unable to load tbl DMA map, error = %d\n", error);
 		goto bad0;
 	}
 #ifdef DEBUG
 	printf("%s: alloc new tag DSA table at PHY addr 0x%lx\n",
-	    device_xname(&sc->sc_c.sc_dev),
+	    device_xname(sc->sc_c.sc_dev),
 	    (unsigned long)newtblblk->blkmap->dm_segs[0].ds_addr);
 #endif
 	for (i = 0; i < ESIOP_NTPB; i++) {
@@ -2106,7 +2106,7 @@
 	struct esiop_target *esiop_target;
 #ifdef SIOP_DEBUG
 		printf("%s:%d:%d: free lun sw entry\n",
-		    device_xname(&sc->sc_c.sc_dev), target, lun);
+		    device_xname(sc->sc_c.sc_dev), target, lun);
 #endif
 	if (sc->sc_c.targets[target] == NULL)
 		return;
@@ -2128,7 +2128,7 @@
 	sc->sc_free_offset += sc->sc_c.sc_chan.chan_nluns * 2 + 2;
 #ifdef SIOP_DEBUG
 	printf("%s: lun table for target %d offset %d free offset %d\n",
-	    device_xname(&sc->sc_c.sc_dev), target, esiop_target->lun_table_offset,
+	    device_xname(sc->sc_c.sc_dev), target, esiop_target->lun_table_offset,
 	    sc->sc_free_offset);
 #endif
 	/* first 32 bytes are ID (for select) */

Index: src/sys/dev/ic/siop.c
diff -u src/sys/dev/ic/siop.c:1.90 src/sys/dev/ic/siop.c:1.91
--- src/sys/dev/ic/siop.c:1.90	Sun Mar 15 17:24:43 2009
+++ src/sys/dev/ic/siop.c	Fri May 15 17:55:44 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: siop.c,v 1.90 2009/03/15 17:24:43 cegger Exp $	*/
+/*	$NetBSD: siop.c,v 1.91 2009/05/15 17:55:44 tsutsui Exp $	*/
 
 /*
  * Copyright (c) 2000 Manuel Bouyer.
@@ -33,7 +33,7 @@
 /* SYM53c7/8xx PCI-SCSI I/O Processors driver */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: siop.c,v 1.90 2009/03/15 17:24:43 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: siop.c,v 1.91 2009/05/15 17:55:44 tsutsui Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -162,7 +162,7 @@
 	sc->sc_currschedslot = 0;
 #ifdef SIOP_DEBUG
 	printf("%s: script size = %d, PHY addr=0x%x, VIRT=%p\n",
-	    device_xname(&sc->sc_c.sc_dev), (int)sizeof(siop_script),
+	    device_xname(sc->sc_c.sc_dev), (int)sizeof(siop_script),
 	    (u_int32_t)sc->sc_c.sc_scriptaddr, sc->sc_c.sc_script);
 #endif
 
@@ -179,7 +179,7 @@
 	siop_dump_script(sc);
 #endif
 
-	config_found((struct device*)sc, &sc->sc_c.sc_chan, scsiprint);
+	config_found(sc->sc_c.sc_dev, &sc->sc_c.sc_chan, scsiprint);
 }
 
 void
@@ -254,7 +254,7 @@
 	while((lunsw = TAILQ_FIRST(&sc->lunsw_list)) != NULL) {
 #ifdef SIOP_DEBUG
 		printf("%s: free lunsw at offset %d\n",
-			device_xname(&sc->sc_c.sc_dev), lunsw->lunsw_off);
+			device_xname(sc->sc_c.sc_dev), lunsw->lunsw_off);
 #endif
 		TAILQ_REMOVE(&sc->lunsw_list, lunsw, next);
 		free(lunsw, M_DEVBUF);
@@ -267,13 +267,13 @@
 			continue;
 #ifdef SIOP_DEBUG
 		printf("%s: restore sw for target %d\n",
-			device_xname(&sc->sc_c.sc_dev), i);
+			device_xname(sc->sc_c.sc_dev), i);
 #endif
 		target = (struct siop_target *)sc->sc_c.targets[i];
 		free(target->lunsw, M_DEVBUF);
 		target->lunsw = siop_get_lunsw(sc);
 		if (target->lunsw == NULL) {
-			aprint_error_dev(&sc->sc_c.sc_dev, "can't alloc lunsw for target %d\n", i);
+			aprint_error_dev(sc->sc_c.sc_dev, "can't alloc lunsw for target %d\n", i);
 			break;
 		}
 		siop_add_reselsw(sc, i);
@@ -427,7 +427,7 @@
 			    siop_ctoh32(&sc->sc_c,
 				siop_cmd->cmd_tables->status));
 		else
-			aprint_error_dev(&sc->sc_c.sc_dev, "current DSA invalid\n");
+			aprint_error_dev(sc->sc_c.sc_dev, "current DSA invalid\n");
 		need_reset = 1;
 		}
 	}
@@ -461,7 +461,7 @@
 			if (siop_cmd)
 				scsipi_printaddr(xs->xs_periph);
 			else
-				printf("%s:", device_xname(&sc->sc_c.sc_dev));
+				printf("%s:", device_xname(sc->sc_c.sc_dev));
 			printf("scsi gross error\n");
 			goto reset;
 		}
@@ -512,10 +512,10 @@
 					CALL_SCRIPT(Ent_msgin);
 					return 1;
 				}
-				aprint_error_dev(&sc->sc_c.sc_dev, "unexpected phase mismatch %d\n",
+				aprint_error_dev(sc->sc_c.sc_dev, "unexpected phase mismatch %d\n",
 				    sstat1 & SSTAT1_PHASE_MASK);
 			} else {
-				aprint_error_dev(&sc->sc_c.sc_dev, "phase mismatch without command\n");
+				aprint_error_dev(sc->sc_c.sc_dev, "phase mismatch without command\n");
 			}
 			need_reset = 1;
 		}
@@ -524,7 +524,7 @@
 			if (siop_cmd)
 				scsipi_printaddr(xs->xs_periph);
 			else
-				printf("%s:", device_xname(&sc->sc_c.sc_dev));
+				printf("%s:", device_xname(sc->sc_c.sc_dev));
 			printf("parity error\n");
 			goto reset;
 		}
@@ -536,7 +536,7 @@
 				freetarget = 1;
 				goto end;
 			} else {
-				aprint_error_dev(&sc->sc_c.sc_dev, "selection timeout without "
+				aprint_error_dev(sc->sc_c.sc_dev, "selection timeout without "
 				    "command\n");
 				need_reset = 1;
 			}
@@ -551,7 +551,7 @@
 				    siop_htoc32(&sc->sc_c, SCSI_CHECK);
 				goto end;
 			}
-			aprint_error_dev(&sc->sc_c.sc_dev, "unexpected disconnect without "
+			aprint_error_dev(sc->sc_c.sc_dev, "unexpected disconnect without "
 			    "command\n");
 			goto reset;
 		}
@@ -577,7 +577,7 @@
 			return 1;
 		}
 		/* Else it's an unhandled exception (for now). */
-		aprint_error_dev(&sc->sc_c.sc_dev, "unhandled scsi interrupt, sist=0x%x sstat1=0x%x "
+		aprint_error_dev(sc->sc_c.sc_dev, "unhandled scsi interrupt, sist=0x%x sstat1=0x%x "
 		    "DSA=0x%x DSP=0x%x\n", sist,
 		    bus_space_read_1(sc->sc_c.sc_rt, sc->sc_c.sc_rh,
 			SIOP_SSTAT1),
@@ -612,13 +612,13 @@
 		 */
 		if ((irqcode & 0x80) == 0) {
 			if (siop_cmd == NULL) {
-				aprint_error_dev(&sc->sc_c.sc_dev, 
+				aprint_error_dev(sc->sc_c.sc_dev, 
 			"script interrupt (0x%x) with invalid DSA !!!\n",
 				    irqcode);
 				goto reset;
 			}
 			if (siop_cmd->cmd_c.status != CMDST_ACTIVE) {
-				aprint_error_dev(&sc->sc_c.sc_dev, "command with invalid status "
+				aprint_error_dev(sc->sc_c.sc_dev, "command with invalid status "
 				    "(IRQ code 0x%x current status %d) !\n",
 				    irqcode, siop_cmd->cmd_c.status);
 				xs = NULL;
@@ -636,7 +636,7 @@
 				goto reset;
 			}
 		case A_int_reseltarg:
-			aprint_error_dev(&sc->sc_c.sc_dev, "reselect with invalid target\n");
+			aprint_error_dev(sc->sc_c.sc_dev, "reselect with invalid target\n");
 			goto reset;
 		case A_int_resellun:
 			INCSTAT(siop_stat_intr_lunresel);
@@ -650,20 +650,20 @@
 			    (struct siop_target *)sc->sc_c.targets[target];
 			if (siop_target == NULL) {
 				printf("%s: reselect with invalid target %d\n",
-				    device_xname(&sc->sc_c.sc_dev), target);
+				    device_xname(sc->sc_c.sc_dev), target);
 				goto reset;
 			}
 			siop_lun = siop_target->siop_lun[lun];
 			if (siop_lun == NULL) {
 				printf("%s: target %d reselect with invalid "
-				    "lun %d\n", device_xname(&sc->sc_c.sc_dev),
+				    "lun %d\n", device_xname(sc->sc_c.sc_dev),
 				    target, lun);
 				goto reset;
 			}
 			if (siop_lun->siop_tag[tag].active == NULL) {
 				printf("%s: target %d lun %d tag %d reselect "
 				    "without command\n",
-				    device_xname(&sc->sc_c.sc_dev),
+				    device_xname(sc->sc_c.sc_dev),
 				    target, lun, tag);
 				goto reset;
 			}
@@ -676,7 +676,7 @@
 			return 1;
 		case A_int_reseltag:
 			printf("%s: reselect with invalid tag\n",
-				device_xname(&sc->sc_c.sc_dev));
+				device_xname(sc->sc_c.sc_dev));
 			goto reset;
 		case A_int_msgin:
 		{
@@ -705,7 +705,7 @@
 						scsipi_printaddr(xs->xs_periph);
 					else
 						printf("%s: ",
-						   device_xname(&sc->sc_c.sc_dev));
+						   device_xname(sc->sc_c.sc_dev));
 					printf("our reject message was "
 					    "rejected\n");
 					goto reset;
@@ -757,7 +757,7 @@
 					scsipi_printaddr(xs->xs_periph);
 				else
 					printf("%s: ",
-					    device_xname(&sc->sc_c.sc_dev));
+					    device_xname(sc->sc_c.sc_dev));
 				if (msg == MSG_EXTENDED) {
 					printf("scsi message reject, extended "
 					    "message sent was 0x%x\n", extmsg);
@@ -781,7 +781,7 @@
 			if (xs)
 				scsipi_printaddr(xs->xs_periph);
 			else
-				printf("%s: ", device_xname(&sc->sc_c.sc_dev));
+				printf("%s: ", device_xname(sc->sc_c.sc_dev));
 			printf("unhandled message 0x%x\n",
 			    siop_cmd->cmd_tables->msg_in[0]);
 			siop_cmd->cmd_tables->msg_out[0] = MSG_MESSAGE_REJECT;
@@ -800,7 +800,7 @@
 #endif
 			if (siop_cmd->cmd_tables->msg_in[1] >
 			    sizeof(siop_cmd->cmd_tables->msg_in) - 2)
-				aprint_error_dev(&sc->sc_c.sc_dev, "extended message too big (%d)\n",
+				aprint_error_dev(sc->sc_c.sc_dev, "extended message too big (%d)\n",
 				    siop_cmd->cmd_tables->msg_in[1]);
 			siop_cmd->cmd_tables->t_extmsgdata.count =
 			    siop_htoc32(&sc->sc_c,
@@ -926,7 +926,7 @@
 		case A_int_done:
 			if (xs == NULL) {
 				printf("%s: done without command, DSA=0x%lx\n",
-				    device_xname(&sc->sc_c.sc_dev),
+				    device_xname(sc->sc_c.sc_dev),
 				    (u_long)siop_cmd->cmd_c.dsa);
 				siop_cmd->cmd_c.status = CMDST_FREE;
 				CALL_SCRIPT(Ent_script_sched);
@@ -1018,7 +1018,7 @@
 		INCSTAT(siop_stat_intr_qfull);
 #ifdef SIOP_DEBUG
 		printf("%s:%d:%d: queue full (tag %d)\n",
-		    device_xname(&sc->sc_c.sc_dev),
+		    device_xname(sc->sc_c.sc_dev),
 		    xs->xs_periph->periph_target,
 		    xs->xs_periph->periph_lun, siop_cmd->cmd_c.tag);
 #endif
@@ -1123,13 +1123,13 @@
 
 #ifdef SIOP_DEBUG
 	printf("%s:%d:%d: tag message %d (%d) rejected (status %d)\n",
-	    device_xname(&sc->sc_c.sc_dev), target, lun, tag, siop_cmd->cmd_c.tag,
+	    device_xname(sc->sc_c.sc_dev), target, lun, tag, siop_cmd->cmd_c.tag,
 	    siop_cmd->cmd_c.status);
 #endif
 
 	if (siop_lun->siop_tag[0].active != NULL) {
 		printf("%s: untagged command already running for target %d "
-		    "lun %d (status %d)\n", device_xname(&sc->sc_c.sc_dev),
+		    "lun %d (status %d)\n", device_xname(sc->sc_c.sc_dev),
 		    target, lun, siop_lun->siop_tag[0].active->cmd_c.status);
 		return -1;
 	}
@@ -1165,7 +1165,7 @@
 	 * scsi bus reset. reset the chip and restart
 	 * the queue. Need to clean up all active commands
 	 */
-	printf("%s: scsi bus reset\n", device_xname(&sc->sc_c.sc_dev));
+	printf("%s: scsi bus reset\n", device_xname(sc->sc_c.sc_dev));
 	/* stop, reset and restart the chip */
 	siop_reset(sc);
 	if (sc->sc_flags & SCF_CHAN_NOSLOT) {
@@ -1219,7 +1219,7 @@
 {
 	struct scsipi_xfer *xs;
 	struct scsipi_periph *periph;
-	struct siop_softc *sc = (void *)chan->chan_adapter->adapt_dev;
+	struct siop_softc *sc = device_private(chan->chan_adapter->adapt_dev);
 	struct siop_cmd *siop_cmd;
 	struct siop_target *siop_target;
 	int s, error, i;
@@ -1253,13 +1253,13 @@
 		if (siop_target == NULL) {
 #ifdef SIOP_DEBUG
 			printf("%s: alloc siop_target for target %d\n",
-				device_xname(&sc->sc_c.sc_dev), target);
+				device_xname(sc->sc_c.sc_dev), target);
 #endif
 			sc->sc_c.targets[target] =
 			    malloc(sizeof(struct siop_target),
 				M_DEVBUF, M_NOWAIT|M_ZERO);
 			if (sc->sc_c.targets[target] == NULL) {
-				aprint_error_dev(&sc->sc_c.sc_dev, "can't malloc memory for "
+				aprint_error_dev(sc->sc_c.sc_dev, "can't malloc memory for "
 				    "target %d\n", target);
 				xs->error = XS_RESOURCE_SHORTAGE;
 				scsipi_done(xs);
@@ -1278,7 +1278,7 @@
 			/* get a lun switch script */
 			siop_target->lunsw = siop_get_lunsw(sc);
 			if (siop_target->lunsw == NULL) {
-				aprint_error_dev(&sc->sc_c.sc_dev, "can't alloc lunsw for target %d\n",
+				aprint_error_dev(sc->sc_c.sc_dev, "can't alloc lunsw for target %d\n",
 				    target);
 				xs->error = XS_RESOURCE_SHORTAGE;
 				scsipi_done(xs);
@@ -1294,7 +1294,7 @@
 			    malloc(sizeof(struct siop_lun), M_DEVBUF,
 			    M_NOWAIT|M_ZERO);
 			if (siop_target->siop_lun[lun] == NULL) {
-				aprint_error_dev(&sc->sc_c.sc_dev, "can't alloc siop_lun for "
+				aprint_error_dev(sc->sc_c.sc_dev, "can't alloc siop_lun for "
 				    "target %d lun %d\n",
 				    target, lun);
 				xs->error = XS_RESOURCE_SHORTAGE;
@@ -1313,7 +1313,7 @@
 		    siop_cmd->cmd_c.dmamap_cmd,
 		    xs->cmd, xs->cmdlen, NULL, BUS_DMA_NOWAIT);
 		if (error) {
-			aprint_error_dev(&sc->sc_c.sc_dev, "unable to load cmd DMA map: %d\n",
+			aprint_error_dev(sc->sc_c.sc_dev, "unable to load cmd DMA map: %d\n",
 			    error);
 			xs->error = XS_DRIVER_STUFFUP;
 			scsipi_done(xs);
@@ -1327,7 +1327,7 @@
 			    ((xs->xs_control & XS_CTL_DATA_IN) ?
 			     BUS_DMA_READ : BUS_DMA_WRITE));
 			if (error) {
-				aprint_error_dev(&sc->sc_c.sc_dev, "unable to load cmd DMA map: %d",
+				aprint_error_dev(sc->sc_c.sc_dev, "unable to load cmd DMA map: %d",
 				    error);
 				xs->error = XS_DRIVER_STUFFUP;
 				scsipi_done(xs);
@@ -1369,7 +1369,7 @@
 
 	case ADAPTER_REQ_GROW_RESOURCES:
 #ifdef SIOP_DEBUG
-		printf("%s grow resources (%d)\n", device_xname(&sc->sc_c.sc_dev),
+		printf("%s grow resources (%d)\n", device_xname(sc->sc_c.sc_dev),
 		    sc->sc_c.sc_adapt.adapt_openings);
 #endif
 		siop_morecbd(sc);
@@ -1602,7 +1602,7 @@
 	/* allocate a new list head */
 	newcbd = malloc(sizeof(struct siop_cbd), M_DEVBUF, M_NOWAIT|M_ZERO);
 	if (newcbd == NULL) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "can't allocate memory for command descriptors head\n");
+		aprint_error_dev(sc->sc_c.sc_dev, "can't allocate memory for command descriptors head\n");
 		return;
 	}
 
@@ -1610,39 +1610,39 @@
 	newcbd->cmds = malloc(sizeof(struct siop_cmd) * SIOP_NCMDPB,
 	    M_DEVBUF, M_NOWAIT|M_ZERO);
 	if (newcbd->cmds == NULL) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "can't allocate memory for command descriptors\n");
+		aprint_error_dev(sc->sc_c.sc_dev, "can't allocate memory for command descriptors\n");
 		goto bad3;
 	}
 	error = bus_dmamem_alloc(sc->sc_c.sc_dmat, PAGE_SIZE, PAGE_SIZE, 0, &seg,
 	    1, &rseg, BUS_DMA_NOWAIT);
 	if (error) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "unable to allocate cbd DMA memory, error = %d\n",
+		aprint_error_dev(sc->sc_c.sc_dev, "unable to allocate cbd DMA memory, error = %d\n",
 		    error);
 		goto bad2;
 	}
 	error = bus_dmamem_map(sc->sc_c.sc_dmat, &seg, rseg, PAGE_SIZE,
 	    (void **)&newcbd->xfers, BUS_DMA_NOWAIT|BUS_DMA_COHERENT);
 	if (error) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "unable to map cbd DMA memory, error = %d\n",
+		aprint_error_dev(sc->sc_c.sc_dev, "unable to map cbd DMA memory, error = %d\n",
 		    error);
 		goto bad2;
 	}
 	error = bus_dmamap_create(sc->sc_c.sc_dmat, PAGE_SIZE, 1, PAGE_SIZE, 0,
 	    BUS_DMA_NOWAIT, &newcbd->xferdma);
 	if (error) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "unable to create cbd DMA map, error = %d\n",
+		aprint_error_dev(sc->sc_c.sc_dev, "unable to create cbd DMA map, error = %d\n",
 		    error);
 		goto bad1;
 	}
 	error = bus_dmamap_load(sc->sc_c.sc_dmat, newcbd->xferdma, newcbd->xfers,
 	    PAGE_SIZE, NULL, BUS_DMA_NOWAIT);
 	if (error) {
-		aprint_error_dev(&sc->sc_c.sc_dev, "unable to load cbd DMA map, error = %d\n",
+		aprint_error_dev(sc->sc_c.sc_dev, "unable to load cbd DMA map, error = %d\n",
 		    error);
 		goto bad0;
 	}
 #ifdef DEBUG
-	printf("%s: alloc newcdb at PHY addr 0x%lx\n", device_xname(&sc->sc_c.sc_dev),
+	printf("%s: alloc newcdb at PHY addr 0x%lx\n", device_xname(sc->sc_c.sc_dev),
 	    (unsigned long)newcbd->xferdma->dm_segs[0].ds_addr);
 #endif
 	off = (sc->sc_c.features & SF_CHIP_BE) ? 3 : 0;
@@ -1651,7 +1651,7 @@
 		    MAXPHYS, 0, BUS_DMA_NOWAIT | BUS_DMA_ALLOCNOW,
 		    &newcbd->cmds[i].cmd_c.dmamap_data);
 		if (error) {
-			aprint_error_dev(&sc->sc_c.sc_dev, "unable to create data DMA map for cbd: "
+			aprint_error_dev(sc->sc_c.sc_dev, "unable to create data DMA map for cbd: "
 			    "error %d\n", error);
 			goto bad0;
 		}
@@ -1661,7 +1661,7 @@
 		    BUS_DMA_NOWAIT | BUS_DMA_ALLOCNOW,
 		    &newcbd->cmds[i].cmd_c.dmamap_cmd);
 		if (error) {
-			aprint_error_dev(&sc->sc_c.sc_dev, "unable to create cmd DMA map for cbd %d\n", error);
+			aprint_error_dev(sc->sc_c.sc_dev, "unable to create cmd DMA map for cbd %d\n", error);
 			goto bad0;
 		}
 		newcbd->cmds[i].cmd_c.siop_sc = &sc->sc_c;
@@ -1872,7 +1872,7 @@
 		 * with this case
 		 */
 #ifdef DEBUG
-		aprint_error_dev(&sc->sc_c.sc_dev, "%d:%d: can't allocate a lun sw slot\n", target, lun);
+		aprint_error_dev(sc->sc_c.sc_dev, "%d:%d: can't allocate a lun sw slot\n", target, lun);
 #endif
 		return;
 	}
@@ -1895,13 +1895,13 @@
 		 * We can hold 13 tagged-queuing capable devices in the 4k RAM.
 		 */
 #ifdef DEBUG
-		aprint_error_dev(&sc->sc_c.sc_dev, "%d:%d: not enough memory for a lun sw slot\n", target, lun);
+		aprint_error_dev(sc->sc_c.sc_dev, "%d:%d: not enough memory for a lun sw slot\n", target, lun);
 #endif
 		return;
 	}
 #ifdef SIOP_DEBUG
 	printf("%s:%d:%d: allocate lun sw entry\n",
-	    device_xname(&sc->sc_c.sc_dev), target, lun);
+	    device_xname(sc->sc_c.sc_dev), target, lun);
 #endif
 	/* INT int_resellun */
 	siop_script_write(sc, sc->script_free_lo, 0x98080000);
@@ -1955,7 +1955,7 @@
 
 #ifdef SIOP_DEBUG
 	printf("%s:%d:%d: free lun sw entry\n",
-	    device_xname(&sc->sc_c.sc_dev), target, lun);
+	    device_xname(sc->sc_c.sc_dev), target, lun);
 #endif
 	if (sc->sc_c.targets[target] == NULL)
 		return;
@@ -1970,7 +1970,7 @@
 	}
 #ifdef SIOP_DEBUG
 	printf("%s: free siop_target for target %d lun %d lunsw offset %d\n",
-	    device_xname(&sc->sc_c.sc_dev), target, lun,
+	    device_xname(sc->sc_c.sc_dev), target, lun,
 	    siop_target->lunsw->lunsw_off);
 #endif
 	/*

Index: src/sys/dev/ic/siop_common.c
diff -u src/sys/dev/ic/siop_common.c:1.48 src/sys/dev/ic/siop_common.c:1.49
--- src/sys/dev/ic/siop_common.c:1.48	Sat Mar 14 21:04:20 2009
+++ src/sys/dev/ic/siop_common.c	Fri May 15 17:55:44 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: siop_common.c,v 1.48 2009/03/14 21:04:20 dsl Exp $	*/
+/*	$NetBSD: siop_common.c,v 1.49 2009/05/15 17:55:44 tsutsui Exp $	*/
 
 /*
  * Copyright (c) 2000, 2002 Manuel Bouyer.
@@ -33,7 +33,7 @@
 /* SYM53c7/8xx PCI-SCSI I/O Processors driver */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: siop_common.c,v 1.48 2009/03/14 21:04:20 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: siop_common.c,v 1.49 2009/05/15 17:55:44 tsutsui Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -77,7 +77,7 @@
 		error = bus_dmamem_alloc(sc->sc_dmat, PAGE_SIZE,
 		    PAGE_SIZE, 0, &seg, 1, &rseg, BUS_DMA_NOWAIT);
 		if (error) {
-			aprint_error_dev(&sc->sc_dev, 
+			aprint_error_dev(sc->sc_dev, 
 			    "unable to allocate script DMA memory, "
 			    "error = %d\n", error);
 			return error;
@@ -86,21 +86,21 @@
 		    (void **)&sc->sc_script,
 		    BUS_DMA_NOWAIT|BUS_DMA_COHERENT);
 		if (error) {
-			aprint_error_dev(&sc->sc_dev, "unable to map script DMA memory, "
+			aprint_error_dev(sc->sc_dev, "unable to map script DMA memory, "
 			    "error = %d\n", error);
 			return error;
 		}
 		error = bus_dmamap_create(sc->sc_dmat, PAGE_SIZE, 1,
 		    PAGE_SIZE, 0, BUS_DMA_NOWAIT, &sc->sc_scriptdma);
 		if (error) {
-			aprint_error_dev(&sc->sc_dev, "unable to create script DMA map, "
+			aprint_error_dev(sc->sc_dev, "unable to create script DMA map, "
 			    "error = %d\n", error);
 			return error;
 		}
 		error = bus_dmamap_load(sc->sc_dmat, sc->sc_scriptdma,
 		    sc->sc_script, PAGE_SIZE, NULL, BUS_DMA_NOWAIT);
 		if (error) {
-			aprint_error_dev(&sc->sc_dev, "unable to load script DMA map, "
+			aprint_error_dev(sc->sc_dev, "unable to load script DMA map, "
 			    "error = %d\n", error);
 			return error;
 		}
@@ -109,7 +109,7 @@
 		sc->ram_size = PAGE_SIZE;
 	}
 
-	sc->sc_adapt.adapt_dev = &sc->sc_dev;
+	sc->sc_adapt.adapt_dev = sc->sc_dev;
 	sc->sc_adapt.adapt_nchannels = 1;
 	sc->sc_adapt.adapt_openings = 0;
 	sc->sc_adapt.adapt_ioctl = siop_ioctl;
@@ -368,7 +368,7 @@
 			siop_target->offset = siop_target->period = 0;
 			siop_update_xfer_mode(sc, target);
 			printf("%s: rejecting invalid wide negotiation from "
-			    "target %d (%d)\n", device_xname(&sc->sc_dev), target,
+			    "target %d (%d)\n", device_xname(sc->sc_dev), target,
 			    tables->msg_in[3]);
 			tables->t_msgout.count = siop_htoc32(sc, 1);
 			tables->msg_out[0] = MSG_MESSAGE_REJECT;
@@ -426,7 +426,7 @@
 	int i;
 
 #ifdef DEBUG_NEG
-	printf("%s: answer on ppr negotiation:", device_xname(&sc->sc_dev));
+	printf("%s: answer on ppr negotiation:", device_xname(sc->sc_dev));
 	for (i = 0; i < 8; i++)
 		printf(" 0x%x", tables->msg_in[i]);
 	printf("\n");
@@ -440,7 +440,7 @@
 		if (options != MSG_EXT_PPR_DT) {
 			/* should't happen */
 			printf("%s: ppr negotiation for target %d: "
-			    "no DT option\n", device_xname(&sc->sc_dev), target);
+			    "no DT option\n", device_xname(sc->sc_dev), target);
 			siop_target->status = TARST_ASYNC;
 			siop_target->flags &= ~(TARF_DT | TARF_ISDT);
 			siop_target->offset = 0;
@@ -452,7 +452,7 @@
 		    sync > sc->dt_maxsync) {
 			printf("%s: ppr negotiation for target %d: "
 			    "offset (%d) or sync (%d) out of range\n",
-			    device_xname(&sc->sc_dev), target, offset, sync);
+			    device_xname(sc->sc_dev), target, offset, sync);
 			/* should not happen */
 			siop_target->offset = 0;
 			siop_target->period = 0;
@@ -474,7 +474,7 @@
 			if ((siop_target->flags & TARF_ISDT) == 0) {
 				printf("%s: ppr negotiation for target %d: "
 				    "sync (%d) incompatible with adapter\n",
-				    device_xname(&sc->sc_dev), target, sync);
+				    device_xname(sc->sc_dev), target, sync);
 				/*
 				 * we didn't find it in our table, do async
 				 * send reject msg, start SDTR/WDTR neg
@@ -489,7 +489,7 @@
 		if (tables->msg_in[6] != 1) {
 			printf("%s: ppr negotiation for target %d: "
 			    "transfer width (%d) incompatible with dt\n",
-			    device_xname(&sc->sc_dev), target, tables->msg_in[6]);
+			    device_xname(sc->sc_dev), target, tables->msg_in[6]);
 			/* DT mode can only be done with wide transfers */
 			siop_target->status = TARST_ASYNC;
 			goto reject;
@@ -515,7 +515,7 @@
 	} else {
 		/* target initiated PPR negotiation, shouldn't happen */
 		printf("%s: rejecting invalid PPR negotiation from "
-		    "target %d\n", device_xname(&sc->sc_dev), target);
+		    "target %d\n", device_xname(sc->sc_dev), target);
 reject:
 		tables->t_msgout.count = siop_htoc32(sc, 1);
 		tables->msg_out[0] = MSG_MESSAGE_REJECT;
@@ -704,7 +704,9 @@
 siop_ioctl(struct scsipi_channel *chan, u_long cmd, void *arg,
     int flag, struct proc *p)
 {
-	struct siop_common_softc *sc = (void *)chan->chan_adapter->adapt_dev;
+	struct siop_common_softc *sc;
+
+	sc = device_private(chan->chan_adapter->adapt_dev);
 
 	switch (cmd) {
 	case SCBUSIORESET:
@@ -738,7 +740,7 @@
 
 	offset = bus_space_read_1(sc->sc_rt, sc->sc_rh, SIOP_SCRATCHA + 1);
 	if (offset >= SIOP_NSG) {
-		aprint_error_dev(&sc->sc_dev, "bad offset in siop_sdp (%d)\n",
+		aprint_error_dev(sc->sc_dev, "bad offset in siop_sdp (%d)\n",
 		    offset);
 		return;
 	}
@@ -976,31 +978,31 @@
 		switch(sc->mode) {
 		case STEST4_MODE_DIF:
 			printf("%s: switching to differential mode\n",
-			    device_xname(&sc->sc_dev));
+			    device_xname(sc->sc_dev));
 			bus_space_write_1(sc->sc_rt, sc->sc_rh, SIOP_STEST2,
 			    stest2 | STEST2_DIF);
 			break;
 		case STEST4_MODE_SE:
 			printf("%s: switching to single-ended mode\n",
-			    device_xname(&sc->sc_dev));
+			    device_xname(sc->sc_dev));
 			bus_space_write_1(sc->sc_rt, sc->sc_rh, SIOP_STEST2,
 			    stest2 & ~STEST2_DIF);
 			break;
 		case STEST4_MODE_LVD:
 			printf("%s: switching to LVD mode\n",
-			    device_xname(&sc->sc_dev));
+			    device_xname(sc->sc_dev));
 			bus_space_write_1(sc->sc_rt, sc->sc_rh, SIOP_STEST2,
 			    stest2 & ~STEST2_DIF);
 			break;
 		default:
-			aprint_error_dev(&sc->sc_dev, "invalid SCSI mode 0x%x\n",
+			aprint_error_dev(sc->sc_dev, "invalid SCSI mode 0x%x\n",
 			    sc->mode);
 			return 0;
 		}
 		return 1;
 	}
 	printf("%s: timeout waiting for DIFFSENSE to stabilise\n",
-	    device_xname(&sc->sc_dev));
+	    device_xname(sc->sc_dev));
 	return 0;
 }
 

Index: src/sys/dev/ic/siopvar_common.h
diff -u src/sys/dev/ic/siopvar_common.h:1.36 src/sys/dev/ic/siopvar_common.h:1.37
--- src/sys/dev/ic/siopvar_common.h:1.36	Wed Jun 11 02:09:16 2008
+++ src/sys/dev/ic/siopvar_common.h	Fri May 15 17:55:44 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: siopvar_common.h,v 1.36 2008/06/11 02:09:16 kiyohara Exp $	*/
+/*	$NetBSD: siopvar_common.h,v 1.37 2009/05/15 17:55:44 tsutsui Exp $	*/
 
 /*
  * Copyright (c) 2000 Manuel Bouyer.
@@ -129,7 +129,7 @@
 
 /* Driver internal state */
 struct siop_common_softc {
-	struct device sc_dev;
+	device_t sc_dev;
 	struct scsipi_channel sc_chan;
 	struct scsipi_adapter sc_adapt;
 	int features;			/* chip's features */

Index: src/sys/dev/pci/esiop_pci.c
diff -u src/sys/dev/pci/esiop_pci.c:1.15 src/sys/dev/pci/esiop_pci.c:1.16
--- src/sys/dev/pci/esiop_pci.c:1.15	Tue May 12 08:23:00 2009
+++ src/sys/dev/pci/esiop_pci.c	Fri May 15 17:55:44 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: esiop_pci.c,v 1.15 2009/05/12 08:23:00 cegger Exp $	*/
+/*	$NetBSD: esiop_pci.c,v 1.16 2009/05/15 17:55:44 tsutsui Exp $	*/
 
 /*
  * Copyright (c) 2002 Manuel Bouyer.
@@ -32,7 +32,7 @@
 /* SYM53c8xx PCI-SCSI I/O Processors driver: PCI front-end */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: esiop_pci.c,v 1.15 2009/05/12 08:23:00 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: esiop_pci.c,v 1.16 2009/05/15 17:55:44 tsutsui Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -80,6 +80,7 @@
 	struct pci_attach_args *pa = aux;
 	struct esiop_pci_softc *sc = device_private(self);
 
+	sc->esiop.sc_c.sc_dev = self;
 	if (siop_pci_attach_common(&sc->esiop_pci, &sc->esiop.sc_c,
 	    pa, esiop_intr) == 0)
 		return;
@@ -88,5 +89,5 @@
 }
 
 
-CFATTACH_DECL(esiop_pci, sizeof(struct esiop_pci_softc),
+CFATTACH_DECL_NEW(esiop_pci, sizeof(struct esiop_pci_softc),
     esiop_pci_match, esiop_pci_attach, NULL, NULL);

Index: src/sys/dev/pci/siop_pci.c
diff -u src/sys/dev/pci/siop_pci.c:1.24 src/sys/dev/pci/siop_pci.c:1.25
--- src/sys/dev/pci/siop_pci.c:1.24	Tue May 12 08:23:01 2009
+++ src/sys/dev/pci/siop_pci.c	Fri May 15 17:55:44 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: siop_pci.c,v 1.24 2009/05/12 08:23:01 cegger Exp $	*/
+/*	$NetBSD: siop_pci.c,v 1.25 2009/05/15 17:55:44 tsutsui Exp $	*/
 
 /*
  * Copyright (c) 2000 Manuel Bouyer.
@@ -32,7 +32,7 @@
 /* SYM53c8xx PCI-SCSI I/O Processors driver: PCI front-end */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: siop_pci.c,v 1.24 2009/05/12 08:23:01 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: siop_pci.c,v 1.25 2009/05/15 17:55:44 tsutsui Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -75,6 +75,7 @@
 	struct pci_attach_args *pa = aux;
 	struct siop_pci_softc *sc = device_private(self);
 
+	sc->siop.sc_c.sc_dev = self;
 	if (siop_pci_attach_common(&sc->siop_pci, &sc->siop.sc_c,
 	    pa, siop_intr) == 0)
 		return;
@@ -82,5 +83,5 @@
 	siop_attach(&sc->siop);
 }
 
-CFATTACH_DECL(siop_pci, sizeof(struct siop_pci_softc),
+CFATTACH_DECL_NEW(siop_pci, sizeof(struct siop_pci_softc),
     siop_pci_match, siop_pci_attach, NULL, NULL);

Index: src/sys/dev/pci/siop_pci_common.c
diff -u src/sys/dev/pci/siop_pci_common.c:1.29 src/sys/dev/pci/siop_pci_common.c:1.30
--- src/sys/dev/pci/siop_pci_common.c:1.29	Fri Feb 13 21:12:14 2009
+++ src/sys/dev/pci/siop_pci_common.c	Fri May 15 17:55:44 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: siop_pci_common.c,v 1.29 2009/02/13 21:12:14 bouyer Exp $	*/
+/*	$NetBSD: siop_pci_common.c,v 1.30 2009/05/15 17:55:44 tsutsui Exp $	*/
 
 /*
  * Copyright (c) 2000 Manuel Bouyer.
@@ -32,7 +32,7 @@
 /* SYM53c8xx PCI-SCSI I/O Processors driver: PCI front-end */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: siop_pci_common.c,v 1.29 2009/02/13 21:12:14 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: siop_pci_common.c,v 1.30 2009/05/15 17:55:44 tsutsui Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -260,7 +260,7 @@
 #ifdef SIOP_SYMLED    /* XXX Should be a devprop! */
 	siop_sc->features |= SF_CHIP_LED0;
 #endif
-	dict = device_properties(&siop_sc->sc_dev);
+	dict = device_properties(siop_sc->sc_dev);
 	if (prop_dictionary_get_bool(dict, "use_pciclock", &use_pciclock))
 		if (use_pciclock)
 			siop_sc->features |= SF_CHIP_USEPCIC;
@@ -299,7 +299,7 @@
 		siop_sc->sc_rh = ioh;
 		siop_sc->sc_raddr = ioaddr;
 	} else {
-		aprint_error_dev(&siop_sc->sc_dev, "unable to map device registers\n");
+		aprint_error_dev(siop_sc->sc_dev, "unable to map device registers\n");
 		return 0;
 	}
 
@@ -313,32 +313,32 @@
 			bar = 0x1c;
 			break;
 		default:
-			aprint_error_dev(&siop_sc->sc_dev, "invalid memory type %d\n",
+			aprint_error_dev(siop_sc->sc_dev, "invalid memory type %d\n",
 			    memtype);
 			return 0;
 		}
 		if (pci_mapreg_map(pa, bar, memtype, 0,
                     &siop_sc->sc_ramt, &siop_sc->sc_ramh,
 		    &siop_sc->sc_scriptaddr, NULL) == 0) {
-			aprint_normal_dev(&siop_sc->sc_dev, "using on-board RAM\n");
+			aprint_normal_dev(siop_sc->sc_dev, "using on-board RAM\n");
 		} else {
-			aprint_error_dev(&siop_sc->sc_dev, "can't map on-board RAM\n");
+			aprint_error_dev(siop_sc->sc_dev, "can't map on-board RAM\n");
 			siop_sc->features &= ~SF_CHIP_RAM;
 		}
 	}
 
 	if (pci_intr_map(pa, &intrhandle) != 0) {
-		aprint_error_dev(&siop_sc->sc_dev, "couldn't map interrupt\n");
+		aprint_error_dev(siop_sc->sc_dev, "couldn't map interrupt\n");
 		return 0;
 	}
 	intrstr = pci_intr_string(pa->pa_pc, intrhandle);
 	pci_sc->sc_ih = pci_intr_establish(pa->pa_pc, intrhandle, IPL_BIO,
 	    intr, siop_sc);
 	if (pci_sc->sc_ih != NULL) {
-		aprint_normal_dev(&siop_sc->sc_dev, "interrupting at %s\n",
+		aprint_normal_dev(siop_sc->sc_dev, "interrupting at %s\n",
 		    intrstr ? intrstr : "unknown interrupt");
 	} else {
-		aprint_error_dev(&siop_sc->sc_dev, "couldn't establish interrupt");
+		aprint_error_dev(siop_sc->sc_dev, "couldn't establish interrupt");
 		if (intrstr != NULL)
 			aprint_normal(" at %s", intrstr);
 		aprint_normal("\n");

Reply via email to