summaryrefslogtreecommitdiff
path: root/sys/dev/ic/ami.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/ic/ami.c')
-rw-r--r--sys/dev/ic/ami.c133
1 files changed, 69 insertions, 64 deletions
diff --git a/sys/dev/ic/ami.c b/sys/dev/ic/ami.c
index e76b6b08f6e..502385936e5 100644
--- a/sys/dev/ic/ami.c
+++ b/sys/dev/ic/ami.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ami.c,v 1.104 2005/12/11 03:32:07 dlg Exp $ */
+/* $OpenBSD: ami.c,v 1.105 2005/12/13 12:13:58 dlg Exp $ */
/*
* Copyright (c) 2001 Michael Shalayeff
@@ -182,8 +182,8 @@ ami_write_inbound_db(struct ami_softc *sc, u_int32_t v)
{
AMI_DPRINTF(AMI_D_CMD, ("awi %x ", v));
- bus_space_write_4(sc->iot, sc->ioh, AMI_QIDB, v);
- bus_space_barrier(sc->iot, sc->ioh,
+ bus_space_write_4(sc->sc_iot, sc->sc_ioh, AMI_QIDB, v);
+ bus_space_barrier(sc->sc_iot, sc->sc_ioh,
AMI_QIDB, 4, BUS_SPACE_BARRIER_WRITE);
}
@@ -192,9 +192,9 @@ ami_read_inbound_db(struct ami_softc *sc)
{
u_int32_t rv;
- bus_space_barrier(sc->iot, sc->ioh,
+ bus_space_barrier(sc->sc_iot, sc->sc_ioh,
AMI_QIDB, 4, BUS_SPACE_BARRIER_READ);
- rv = bus_space_read_4(sc->iot, sc->ioh, AMI_QIDB);
+ rv = bus_space_read_4(sc->sc_iot, sc->sc_ioh, AMI_QIDB);
AMI_DPRINTF(AMI_D_CMD, ("ari %x ", rv));
return (rv);
@@ -205,8 +205,8 @@ ami_write_outbound_db(struct ami_softc *sc, u_int32_t v)
{
AMI_DPRINTF(AMI_D_CMD, ("awo %x ", v));
- bus_space_write_4(sc->iot, sc->ioh, AMI_QODB, v);
- bus_space_barrier(sc->iot, sc->ioh,
+ bus_space_write_4(sc->sc_iot, sc->sc_ioh, AMI_QODB, v);
+ bus_space_barrier(sc->sc_iot, sc->sc_ioh,
AMI_QODB, 4, BUS_SPACE_BARRIER_WRITE);
}
@@ -215,9 +215,9 @@ ami_read_outbound_db(struct ami_softc *sc)
{
u_int32_t rv;
- bus_space_barrier(sc->iot, sc->ioh,
+ bus_space_barrier(sc->sc_iot, sc->sc_ioh,
AMI_QODB, 4, BUS_SPACE_BARRIER_READ);
- rv = bus_space_read_4(sc->iot, sc->ioh, AMI_QODB);
+ rv = bus_space_read_4(sc->sc_iot, sc->sc_ioh, AMI_QODB);
AMI_DPRINTF(AMI_D_CMD, ("aro %x ", rv));
return (rv);
@@ -236,19 +236,19 @@ ami_allocmem(struct ami_softc *sc, size_t size)
memset(am, 0, sizeof(struct ami_mem));
am->am_size = size;
- if (bus_dmamap_create(sc->dmat, size, 1, size, 0,
+ if (bus_dmamap_create(sc->sc_dmat, size, 1, size, 0,
BUS_DMA_NOWAIT | BUS_DMA_ALLOCNOW, &am->am_map) != 0)
goto amfree;
- if (bus_dmamem_alloc(sc->dmat, size, PAGE_SIZE, 0, &am->am_seg, 1,
+ if (bus_dmamem_alloc(sc->sc_dmat, size, PAGE_SIZE, 0, &am->am_seg, 1,
&nsegs, BUS_DMA_NOWAIT) != 0)
goto destroy;
- if (bus_dmamem_map(sc->dmat, &am->am_seg, nsegs, size, &am->am_kva,
+ if (bus_dmamem_map(sc->sc_dmat, &am->am_seg, nsegs, size, &am->am_kva,
BUS_DMA_NOWAIT) != 0)
goto free;
- if (bus_dmamap_load(sc->dmat, am->am_map, am->am_kva, size, NULL,
+ if (bus_dmamap_load(sc->sc_dmat, am->am_map, am->am_kva, size, NULL,
BUS_DMA_NOWAIT) != 0)
goto unmap;
@@ -256,11 +256,11 @@ ami_allocmem(struct ami_softc *sc, size_t size)
return (am);
unmap:
- bus_dmamem_unmap(sc->dmat, am->am_kva, size);
+ bus_dmamem_unmap(sc->sc_dmat, am->am_kva, size);
free:
- bus_dmamem_free(sc->dmat, &am->am_seg, 1);
+ bus_dmamem_free(sc->sc_dmat, &am->am_seg, 1);
destroy:
- bus_dmamap_destroy(sc->dmat, am->am_map);
+ bus_dmamap_destroy(sc->sc_dmat, am->am_map);
amfree:
free(am, M_DEVBUF);
@@ -270,10 +270,10 @@ amfree:
void
ami_freemem(struct ami_softc *sc, struct ami_mem *am)
{
- bus_dmamap_unload(sc->dmat, am->am_map);
- bus_dmamem_unmap(sc->dmat, am->am_kva, am->am_size);
- bus_dmamem_free(sc->dmat, &am->am_seg, 1);
- bus_dmamap_destroy(sc->dmat, am->am_map);
+ bus_dmamap_unload(sc->sc_dmat, am->am_map);
+ bus_dmamem_unmap(sc->sc_dmat, am->am_kva, am->am_size);
+ bus_dmamem_free(sc->sc_dmat, &am->am_seg, 1);
+ bus_dmamap_destroy(sc->sc_dmat, am->am_map);
free(am, M_DEVBUF);
}
@@ -335,9 +335,9 @@ ami_attach(struct ami_softc *sc)
ccb = &sc->sc_ccbs[i];
mem = &ccbmem[i];
- error = bus_dmamap_create(sc->dmat, AMI_MAXFER, AMI_MAXOFFSETS,
- AMI_MAXFER, 0, BUS_DMA_NOWAIT | BUS_DMA_ALLOCNOW,
- &ccb->ccb_dmamap);
+ error = bus_dmamap_create(sc->sc_dmat, AMI_MAXFER,
+ AMI_MAXOFFSETS, AMI_MAXFER, 0,
+ BUS_DMA_NOWAIT | BUS_DMA_ALLOCNOW, &ccb->ccb_dmamap);
if (error) {
printf(": cannot create ccb dmamap (%d)\n", error);
goto destroy;
@@ -615,7 +615,7 @@ ami_attach(struct ami_softc *sc)
destroy:
for (ccb = &sc->sc_ccbs[AMI_MAXCMDS - 1]; ccb > sc->sc_ccbs; ccb--)
if (ccb->ccb_dmamap)
- bus_dmamap_destroy(sc->dmat, ccb->ccb_dmamap);
+ bus_dmamap_destroy(sc->sc_dmat, ccb->ccb_dmamap);
ami_freemem(sc, sc->sc_ccbmem_am);
free_mbox:
@@ -650,7 +650,7 @@ ami_quartz_exec(struct ami_softc *sc, struct ami_iocmd *cmd)
}
memcpy((struct ami_iocmd *)sc->sc_mbox, cmd, 16);
- bus_dmamap_sync(sc->dmat, AMIMEM_MAP(sc->sc_mbox_am), 0,
+ bus_dmamap_sync(sc->sc_dmat, AMIMEM_MAP(sc->sc_mbox_am), 0,
sizeof(struct ami_iocmd), BUS_DMASYNC_PREWRITE|BUS_DMASYNC_PREREAD);
sc->sc_mbox->acc_busy = 1;
@@ -684,21 +684,21 @@ ami_quartz_done(struct ami_softc *sc, struct ami_iocmd *mbox)
*/
i = 0;
while ((nstat = sc->sc_mbox->acc_nstat) == 0xff) {
- bus_dmamap_sync(sc->dmat, AMIMEM_MAP(sc->sc_mbox_am), 0,
+ bus_dmamap_sync(sc->sc_dmat, AMIMEM_MAP(sc->sc_mbox_am), 0,
sizeof(struct ami_iocmd), BUS_DMASYNC_POSTREAD);
delay(1);
if (i++ > 1000000)
return (0); /* nothing to do */
}
sc->sc_mbox->acc_nstat = 0xff;
- bus_dmamap_sync(sc->dmat, AMIMEM_MAP(sc->sc_mbox_am), 0,
+ bus_dmamap_sync(sc->sc_dmat, AMIMEM_MAP(sc->sc_mbox_am), 0,
sizeof(struct ami_iocmd), BUS_DMASYNC_POSTWRITE);
/* wait until fw wrote out all completions */
i = 0;
AMI_DPRINTF(AMI_D_CMD, ("aqd %d ", nstat));
for (n = 0; n < nstat; n++) {
- bus_dmamap_sync(sc->dmat, AMIMEM_MAP(sc->sc_mbox_am), 0,
+ bus_dmamap_sync(sc->sc_dmat, AMIMEM_MAP(sc->sc_mbox_am), 0,
sizeof(struct ami_iocmd), BUS_DMASYNC_PREREAD);
while ((completed[n] = sc->sc_mbox->acc_cmplidl[n]) ==
0xff) {
@@ -707,7 +707,7 @@ ami_quartz_done(struct ami_softc *sc, struct ami_iocmd *mbox)
return (0); /* nothing to do */
}
sc->sc_mbox->acc_cmplidl[n] = 0xff;
- bus_dmamap_sync(sc->dmat, AMIMEM_MAP(sc->sc_mbox_am), 0,
+ bus_dmamap_sync(sc->sc_dmat, AMIMEM_MAP(sc->sc_mbox_am), 0,
sizeof(struct ami_iocmd), BUS_DMASYNC_POSTWRITE);
}
@@ -718,7 +718,7 @@ ami_quartz_done(struct ami_softc *sc, struct ami_iocmd *mbox)
sc->sc_mbox->acc_status = 0xff;
/* copy mailbox to temporary one and fixup other changed values */
- bus_dmamap_sync(sc->dmat, AMIMEM_MAP(sc->sc_mbox_am), 0, 16,
+ bus_dmamap_sync(sc->sc_dmat, AMIMEM_MAP(sc->sc_mbox_am), 0, 16,
BUS_DMASYNC_POSTWRITE);
memcpy(mbox, (struct ami_iocmd *)sc->sc_mbox, 16);
mbox->acc_nstat = nstat;
@@ -753,7 +753,7 @@ ami_quartz_poll(struct ami_softc *sc, struct ami_iocmd *cmd)
}
memcpy((struct ami_iocmd *)sc->sc_mbox, cmd, 16);
- bus_dmamap_sync(sc->dmat, AMIMEM_MAP(sc->sc_mbox_am), 0, 16,
+ bus_dmamap_sync(sc->sc_dmat, AMIMEM_MAP(sc->sc_mbox_am), 0, 16,
BUS_DMASYNC_PREWRITE|BUS_DMASYNC_PREREAD);
sc->sc_mbox->acc_id = 0xfe;
@@ -851,13 +851,13 @@ ami_schwartz_init(struct ami_softc *sc)
{
u_int32_t a = (u_int32_t)sc->sc_mbox_pa;
- bus_space_write_4(sc->iot, sc->ioh, AMI_SMBADDR, a);
+ bus_space_write_4(sc->sc_iot, sc->sc_ioh, AMI_SMBADDR, a);
/* XXX 40bit address ??? */
- bus_space_write_1(sc->iot, sc->ioh, AMI_SMBENA, 0);
+ bus_space_write_1(sc->sc_iot, sc->sc_ioh, AMI_SMBENA, 0);
- bus_space_write_1(sc->iot, sc->ioh, AMI_SCMD, AMI_SCMD_ACK);
- bus_space_write_1(sc->iot, sc->ioh, AMI_SIEM, AMI_SEIM_ENA |
- bus_space_read_1(sc->iot, sc->ioh, AMI_SIEM));
+ bus_space_write_1(sc->sc_iot, sc->sc_ioh, AMI_SCMD, AMI_SCMD_ACK);
+ bus_space_write_1(sc->sc_iot, sc->sc_ioh, AMI_SIEM, AMI_SEIM_ENA |
+ bus_space_read_1(sc->sc_iot, sc->sc_ioh, AMI_SIEM));
return (0);
}
@@ -865,7 +865,8 @@ ami_schwartz_init(struct ami_softc *sc)
int
ami_schwartz_exec(struct ami_softc *sc, struct ami_iocmd *cmd)
{
- if (bus_space_read_1(sc->iot, sc->ioh, AMI_SMBSTAT) & AMI_SMBST_BUSY) {
+ if (bus_space_read_1(sc->sc_iot, sc->sc_ioh, AMI_SMBSTAT) &
+ AMI_SMBST_BUSY) {
AMI_DPRINTF(AMI_D_CMD, ("mbox_busy "));
return (EBUSY);
}
@@ -875,7 +876,7 @@ ami_schwartz_exec(struct ami_softc *sc, struct ami_iocmd *cmd)
sc->sc_mbox->acc_poll = 0;
sc->sc_mbox->acc_ack = 0;
- bus_space_write_1(sc->iot, sc->ioh, AMI_SCMD, AMI_SCMD_EXEC);
+ bus_space_write_1(sc->sc_iot, sc->sc_ioh, AMI_SCMD, AMI_SCMD_EXEC);
return (0);
}
@@ -889,17 +890,19 @@ ami_schwartz_done(struct ami_softc *sc, struct ami_iocmd *mbox)
if (sc->sc_mbox->acc_busy)
return (0);
#endif
- if (bus_space_read_1(sc->iot, sc->ioh, AMI_SMBSTAT) & AMI_SMBST_BUSY)
+ if (bus_space_read_1(sc->sc_iot, sc->sc_ioh, AMI_SMBSTAT) &
+ AMI_SMBST_BUSY)
return (0);
- stat = bus_space_read_1(sc->iot, sc->ioh, AMI_ISTAT);
+ stat = bus_space_read_1(sc->sc_iot, sc->sc_ioh, AMI_ISTAT);
if (stat & AMI_ISTAT_PEND) {
- bus_space_write_1(sc->iot, sc->ioh, AMI_ISTAT, stat);
+ bus_space_write_1(sc->sc_iot, sc->sc_ioh, AMI_ISTAT, stat);
*mbox = *sc->sc_mbox;
AMI_DPRINTF(AMI_D_CMD, ("asd %d ", mbox->acc_nstat));
- bus_space_write_1(sc->iot, sc->ioh, AMI_SCMD, AMI_SCMD_ACK);
+ bus_space_write_1(sc->sc_iot, sc->sc_ioh, AMI_SCMD,
+ AMI_SCMD_ACK);
return (1);
}
@@ -918,7 +921,7 @@ ami_schwartz_poll(struct ami_softc *sc, struct ami_iocmd *mbox)
return (1); /* fail */
for (i = 0; i < AMI_MAX_POLLWAIT; i++) {
- if (!(bus_space_read_1(sc->iot, sc->ioh, AMI_SMBSTAT) &
+ if (!(bus_space_read_1(sc->sc_iot, sc->sc_ioh, AMI_SMBSTAT) &
AMI_SMBST_BUSY))
break;
delay(1);
@@ -929,18 +932,18 @@ ami_schwartz_poll(struct ami_softc *sc, struct ami_iocmd *mbox)
}
memcpy((struct ami_iocmd *)sc->sc_mbox, mbox, 16);
- bus_dmamap_sync(sc->dmat, AMIMEM_MAP(sc->sc_mbox_am), 0, 16,
+ bus_dmamap_sync(sc->sc_dmat, AMIMEM_MAP(sc->sc_mbox_am), 0, 16,
BUS_DMASYNC_PREWRITE|BUS_DMASYNC_PREREAD);
sc->sc_mbox->acc_busy = 1;
sc->sc_mbox->acc_poll = 0;
sc->sc_mbox->acc_ack = 0;
/* send command to firmware */
- bus_space_write_1(sc->iot, sc->ioh, AMI_SCMD, AMI_SCMD_EXEC);
+ bus_space_write_1(sc->sc_iot, sc->sc_ioh, AMI_SCMD, AMI_SCMD_EXEC);
/* wait until no longer busy */
for (i = 0; i < AMI_MAX_POLLWAIT; i++) {
- if (!(bus_space_read_1(sc->iot, sc->ioh, AMI_SMBSTAT) &
+ if (!(bus_space_read_1(sc->sc_iot, sc->sc_ioh, AMI_SMBSTAT) &
AMI_SMBST_BUSY))
break;
delay(1);
@@ -954,7 +957,7 @@ ami_schwartz_poll(struct ami_softc *sc, struct ami_iocmd *mbox)
/* wait for interrupt bit */
for (i = 0; i < AMI_MAX_POLLWAIT; i++) {
- status = bus_space_read_1(sc->iot, sc->ioh, AMI_ISTAT);
+ status = bus_space_read_1(sc->sc_iot, sc->sc_ioh, AMI_ISTAT);
if (status & AMI_ISTAT_PEND)
break;
delay(1);
@@ -967,16 +970,16 @@ ami_schwartz_poll(struct ami_softc *sc, struct ami_iocmd *mbox)
}
/* write ststus back to firmware */
- bus_space_write_1(sc->iot, sc->ioh, AMI_ISTAT, status);
+ bus_space_write_1(sc->sc_iot, sc->sc_ioh, AMI_ISTAT, status);
/* copy mailbox and status back */
- bus_dmamap_sync(sc->dmat, AMIMEM_MAP(sc->sc_mbox_am), 0,
+ bus_dmamap_sync(sc->sc_dmat, AMIMEM_MAP(sc->sc_mbox_am), 0,
sizeof(struct ami_iocmd), BUS_DMASYNC_PREREAD);
*mbox = *sc->sc_mbox;
rv = sc->sc_mbox->acc_status;
/* ack interrupt */
- bus_space_write_1(sc->iot, sc->ioh, AMI_SCMD, AMI_SCMD_ACK);
+ bus_space_write_1(sc->sc_iot, sc->sc_ioh, AMI_SCMD, AMI_SCMD_ACK);
return (rv);
}
@@ -992,7 +995,7 @@ ami_cmd(struct ami_ccb *ccb, int flags, int wait)
struct ami_iocmd *cmd = &ccb->ccb_cmd;
bus_dma_segment_t *sgd;
- error = bus_dmamap_load(sc->dmat, dmap, ccb->ccb_data,
+ error = bus_dmamap_load(sc->sc_dmat, dmap, ccb->ccb_data,
ccb->ccb_len, NULL, flags);
if (error) {
if (error == EFBIG)
@@ -1044,11 +1047,11 @@ ami_cmd(struct ami_ccb *ccb, int flags, int wait)
}
AMI_DPRINTF(AMI_D_DMA, ("> "));
- bus_dmamap_sync(sc->dmat, AMIMEM_MAP(sc->sc_ccbmem_am),
+ bus_dmamap_sync(sc->sc_dmat, AMIMEM_MAP(sc->sc_ccbmem_am),
ccb->ccb_offset, sizeof(struct ami_ccbmem),
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
- bus_dmamap_sync(sc->dmat, dmap, 0, dmap->dm_mapsize,
+ bus_dmamap_sync(sc->sc_dmat, dmap, 0, dmap->dm_mapsize,
(ccb->ccb_dir == AMI_CCB_IN) ?
BUS_DMASYNC_PREREAD : BUS_DMASYNC_PREWRITE);
} else
@@ -1063,16 +1066,17 @@ ami_cmd(struct ami_ccb *ccb, int flags, int wait)
AMI_DPRINTF(AMI_D_MISC, ("pf "));
#endif
if (ccb->ccb_data) {
- bus_dmamap_sync(sc->dmat, ccb->ccb_dmamap, 0,
+ bus_dmamap_sync(sc->sc_dmat, ccb->ccb_dmamap, 0,
ccb->ccb_dmamap->dm_mapsize,
(ccb->ccb_dir == AMI_CCB_IN) ?
BUS_DMASYNC_POSTREAD : BUS_DMASYNC_POSTWRITE);
- bus_dmamap_sync(sc->dmat, AMIMEM_MAP(sc->sc_ccbmem_am),
+ bus_dmamap_sync(sc->sc_dmat,
+ AMIMEM_MAP(sc->sc_ccbmem_am),
ccb->ccb_offset, sizeof(struct ami_ccbmem),
BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
- bus_dmamap_unload(sc->dmat, dmap);
+ bus_dmamap_unload(sc->sc_dmat, dmap);
}
if (ccb->ccb_wakeup)
ccb->ccb_wakeup = 0;
@@ -1082,16 +1086,17 @@ ami_cmd(struct ami_ccb *ccb, int flags, int wait)
AMI_DPRINTF(AMI_D_DMA, ("error=%d ", error));
__asm __volatile(".globl _bpamierr\n_bpamierr:");
if (ccb->ccb_data) {
- bus_dmamap_sync(sc->dmat, ccb->ccb_dmamap, 0,
+ bus_dmamap_sync(sc->sc_dmat, ccb->ccb_dmamap, 0,
ccb->ccb_dmamap->dm_mapsize,
(ccb->ccb_dir == AMI_CCB_IN) ?
BUS_DMASYNC_POSTREAD : BUS_DMASYNC_POSTWRITE);
- bus_dmamap_sync(sc->dmat, AMIMEM_MAP(sc->sc_ccbmem_am),
+ bus_dmamap_sync(sc->sc_dmat,
+ AMIMEM_MAP(sc->sc_ccbmem_am),
ccb->ccb_offset, sizeof(struct ami_ccbmem),
BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
- bus_dmamap_unload(sc->dmat, dmap);
+ bus_dmamap_unload(sc->sc_dmat, dmap);
}
ami_put_ccb(ccb);
}
@@ -1193,12 +1198,12 @@ ami_stimeout(void *v)
AMI_DPRINTF(AMI_D_CMD, ("timeout(%d) ", cmd->acc_id));
if (xs->cmd->opcode != PREVENT_ALLOW &&
xs->cmd->opcode != SYNCHRONIZE_CACHE) {
- bus_dmamap_sync(sc->dmat, ccb->ccb_dmamap, 0,
+ bus_dmamap_sync(sc->sc_dmat, ccb->ccb_dmamap, 0,
ccb->ccb_dmamap->dm_mapsize,
(xs->flags & SCSI_DATA_IN) ?
BUS_DMASYNC_POSTREAD :
BUS_DMASYNC_POSTWRITE);
- bus_dmamap_unload(sc->dmat, ccb->ccb_dmamap);
+ bus_dmamap_unload(sc->sc_dmat, ccb->ccb_dmamap);
}
TAILQ_REMOVE(&sc->sc_ccbq, ccb, ccb_link);
ami_put_ccb(ccb);
@@ -1233,16 +1238,16 @@ ami_done(struct ami_softc *sc, int idx)
TAILQ_REMOVE(&sc->sc_ccbq, ccb, ccb_link);
if (ccb->ccb_data != NULL) {
- bus_dmamap_sync(sc->dmat, ccb->ccb_dmamap, 0,
+ bus_dmamap_sync(sc->sc_dmat, ccb->ccb_dmamap, 0,
ccb->ccb_dmamap->dm_mapsize,
(ccb->ccb_dir == AMI_CCB_IN) ?
BUS_DMASYNC_POSTREAD : BUS_DMASYNC_POSTWRITE);
- bus_dmamap_sync(sc->dmat, AMIMEM_MAP(sc->sc_ccbmem_am),
+ bus_dmamap_sync(sc->sc_dmat, AMIMEM_MAP(sc->sc_ccbmem_am),
ccb->ccb_offset, sizeof(struct ami_ccbmem),
BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
- bus_dmamap_unload(sc->dmat, ccb->ccb_dmamap);
+ bus_dmamap_unload(sc->sc_dmat, ccb->ccb_dmamap);
}
if (ccb->ccb_wakeup) {