PERFORCE change 115836 for review
Matt Jacob
mjacob at FreeBSD.org
Wed Mar 14 06:35:24 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=115836
Change 115836 by mjacob at mjexp on 2007/03/14 06:34:42
Pick up some useful changes for my p4 depot and avoid some
of the bge related breakage that caused my amd box to not
work.
Affected files ...
.. //depot/projects/mjexp/sys/dev/isp/isp.c#16 integrate
.. //depot/projects/mjexp/sys/dev/isp/isp_freebsd.c#13 integrate
.. //depot/projects/mjexp/sys/dev/isp/isp_freebsd.h#9 integrate
.. //depot/projects/mjexp/sys/dev/isp/isp_pci.c#17 integrate
.. //depot/projects/mjexp/sys/dev/isp/isp_sbus.c#7 integrate
Differences ...
==== //depot/projects/mjexp/sys/dev/isp/isp.c#16 (text+ko) ====
@@ -46,7 +46,7 @@
#endif
#ifdef __FreeBSD__
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/isp/isp.c,v 1.140 2007/03/10 02:39:53 mjacob Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/isp/isp.c,v 1.143 2007/03/14 05:58:07 mjacob Exp $");
#include <dev/isp/isp_freebsd.h>
#endif
#ifdef __OpenBSD__
@@ -2000,10 +2000,14 @@
icbp->icb_atioqlen);
return;
}
- icbp->icb_atioqaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_atioq_dma);
- icbp->icb_atioqaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_atioq_dma);
- icbp->icb_atioqaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_atioq_dma);
- icbp->icb_atioqaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_atioq_dma);
+ icbp->icb_atioqaddr[RQRSP_ADDR0015] =
+ DMA_WD0(isp->isp_atioq_dma);
+ icbp->icb_atioqaddr[RQRSP_ADDR1631] =
+ DMA_WD1(isp->isp_atioq_dma);
+ icbp->icb_atioqaddr[RQRSP_ADDR3247] =
+ DMA_WD2(isp->isp_atioq_dma);
+ icbp->icb_atioqaddr[RQRSP_ADDR4863] =
+ DMA_WD3(isp->isp_atioq_dma);
isp_prt(isp, ISP_LOGDEBUG0,
"isp_fibre_init_2400: atioq %04x%04x%04x%04x",
DMA_WD3(isp->isp_atioq_dma), DMA_WD2(isp->isp_atioq_dma),
@@ -3991,8 +3995,7 @@
isp_start(XS_T *xs)
{
ispsoftc_t *isp;
- uint32_t nxti, optr, handle, isr;
- uint16_t sema, mbox;
+ uint32_t nxti, optr, handle;
uint8_t local[QENTRY_LEN];
ispreq_t *reqp, *qep;
void *cdbp;
@@ -4257,11 +4260,6 @@
(long) XS_XFRLEN(xs));
ISP_ADD_REQUEST(isp, nxti);
isp->isp_nactive++;
- if (IS_23XX(isp) || IS_24XX(isp)) {
- if (ISP_READ_ISR(isp, &isr, &sema, &mbox)) {
- isp_intr(isp, isr, sema, mbox);
- }
- }
return (CMD_QUEUED);
}
@@ -4617,6 +4615,7 @@
ISP_WRITE(isp, isp->isp_atiooutrp, optr);
}
isp->isp_rspbsy = 0;
+ optr = isp->isp_residx;
}
#endif
@@ -4803,7 +4802,7 @@
isp_prt(isp, ISP_LOGERR, notresp,
etype, oop, optr, nlooked);
isp_print_bytes(isp,
- "Reqeonse Queue Entry", QENTRY_LEN, sp);
+ "Request Queue Entry", QENTRY_LEN, sp);
MEMZERO(hp, QENTRY_LEN); /* PERF */
continue;
}
@@ -7502,7 +7501,7 @@
{
int loops = 0;
const uint32_t base = 0x7ffe0000;
- uint32_t tmp;
+ uint32_t tmp = 0;
ISP_WRITE(isp, BIU2400_FLASH_ADDR, base | addr);
for (loops = 0; loops < 5000; loops++) {
==== //depot/projects/mjexp/sys/dev/isp/isp_freebsd.c#13 (text+ko) ====
@@ -28,7 +28,7 @@
* Platform (FreeBSD) dependent common attachment code for Qlogic adapters.
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/isp/isp_freebsd.c,v 1.135 2007/03/10 02:39:53 mjacob Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/isp/isp_freebsd.c,v 1.136 2007/03/12 04:54:30 mjacob Exp $");
#include <dev/isp/isp_freebsd.h>
#include <sys/unistd.h>
#include <sys/kthread.h>
@@ -39,6 +39,8 @@
#include <dev/isp/isp_ioctl.h>
#if __FreeBSD_version >= 500000
#include <sys/sysctl.h>
+#else
+#include <sys/devicestat.h>
#endif
#include <cam/cam_periph.h>
#include <cam/cam_xpt_periph.h>
@@ -2127,10 +2129,7 @@
}
-#if __FreeBSD_version >= 500000
-/*
- * Support functions for Found/Lost
- */
+#if __FreeBSD_version >= 600000
static void
isp_make_here(ispsoftc_t *isp, int tgt)
{
==== //depot/projects/mjexp/sys/dev/isp/isp_freebsd.h#9 (text+ko) ====
@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/isp/isp_freebsd.h,v 1.100 2007/02/23 23:13:46 mjacob Exp $ */
+/* $FreeBSD: src/sys/dev/isp/isp_freebsd.h,v 1.102 2007/03/13 06:46:08 mjacob Exp $ */
/*-
* Qlogic ISP SCSI Host Adapter FreeBSD Wrapper Definitions
*
@@ -140,6 +140,8 @@
struct isposinfo {
struct ispsoftc * next;
+ bus_space_tag_t bus_tag;
+ bus_space_handle_t bus_handle;
uint64_t default_port_wwn;
uint64_t default_node_wwn;
uint32_t default_id;
@@ -194,6 +196,8 @@
};
#define isp_lock isp_osinfo.lock
+#define isp_bus_tag isp_osinfo.bus_tag
+#define isp_bus_handle isp_osinfo.bus_handle
/*
* Locking macros...
@@ -251,6 +255,11 @@
bus_dmamap_sync(isp->isp_cdmat, isp->isp_cdmap, \
BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); \
break; \
+case SYNC_REG: \
+ bus_space_barrier(isp->isp_bus_tag, \
+ isp->isp_bus_handle, offset, size, \
+ BUS_SPACE_BARRIER_READ); \
+ break; \
default: \
break; \
}
@@ -349,6 +358,17 @@
#define ISP_NODEWWN(isp) FCPARAM(isp)->isp_wwnn_nvram
#define ISP_PORTWWN(isp) FCPARAM(isp)->isp_wwpn_nvram
+
+#if __FreeBSD_version < 500000
+#if _BYTE_ORDER == _LITTLE_ENDIAN
+#define bswap16 htobe16
+#define bswap32 htobe32
+#else
+#define bswap16 htole16
+#define bswap32 htole32
+#endif
+#endif
+
#if BYTE_ORDER == BIG_ENDIAN
#ifdef ISP_SBUS_SUPPORTED
#define ISP_IOXPUT_8(isp, s, d) *(d) = s
==== //depot/projects/mjexp/sys/dev/isp/isp_pci.c#17 (text+ko) ====
@@ -28,7 +28,7 @@
* FreeBSD Version.
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/isp/isp_pci.c,v 1.138 2007/03/10 02:39:53 mjacob Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/isp/isp_pci.c,v 1.140 2007/03/13 06:46:08 mjacob Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -335,8 +335,6 @@
ispsoftc_t pci_isp;
device_t pci_dev;
struct resource * pci_reg;
- bus_space_tag_t pci_st;
- bus_space_handle_t pci_sh;
void * ih;
int16_t pci_poff[_NREG_BLKS];
bus_dma_tag_t dmat;
@@ -435,7 +433,6 @@
static void
isp_get_generic_options(device_t dev, ispsoftc_t *isp)
{
- uint64_t wwn;
int bitmap, unit;
unit = device_get_unit(dev);
@@ -508,6 +505,9 @@
static void
isp_get_specific_options(device_t dev, ispsoftc_t *isp)
{
+ uint64_t wwn;
+ int bitmap;
+ int unit = device_get_unit(dev);
callout_handle_init(&isp->isp_osinfo.ldt);
callout_handle_init(&isp->isp_osinfo.gdt);
@@ -885,8 +885,8 @@
}
pcs->pci_dev = dev;
pcs->pci_reg = regs;
- pcs->pci_st = rman_get_bustag(regs);
- pcs->pci_sh = rman_get_bushandle(regs);
+ isp->isp_bus_tag = rman_get_bustag(regs);
+ isp->isp_bus_handle = rman_get_bushandle(regs);
pcs->pci_poff[BIU_BLOCK >> _BLK_REG_SHFT] = BIU_REGS_OFF;
pcs->pci_poff[MBOX_BLOCK >> _BLK_REG_SHFT] = PCI_MBOX_REGS_OFF;
@@ -1131,9 +1131,10 @@
* Make sure the Cache Line Size register is set sensibly.
*/
data = pci_read_config(dev, PCIR_CACHELNSZ, 1);
- if (data != linesz) {
- data = PCI_DFLT_LNSZ;
- isp_prt(isp, ISP_LOGCONFIG, "set PCI line size to %d", data);
+ if (data == 0 || (linesz != PCI_DFLT_LNSZ && data != linesz)) {
+ isp_prt(isp, ISP_LOGCONFIG, "set PCI line size to %d from %d",
+ linesz, data);
+ data = linesz;
pci_write_config(dev, PCIR_CACHELNSZ, data, 1);
}
@@ -1293,26 +1294,25 @@
(((struct isp_pcisoftc *)a)->pci_poff[((x) & _BLK_REG_MASK) >> \
_BLK_REG_SHFT] + ((x) & 0xfff))
-#define BXR2(pcs, off) \
- bus_space_read_2(pcs->pci_st, pcs->pci_sh, off)
-#define BXW2(pcs, off, v) \
- bus_space_write_2(pcs->pci_st, pcs->pci_sh, off, v)
-#define BXR4(pcs, off) \
- bus_space_read_4(pcs->pci_st, pcs->pci_sh, off)
-#define BXW4(pcs, off, v) \
- bus_space_write_4(pcs->pci_st, pcs->pci_sh, off, v)
+#define BXR2(isp, off) \
+ bus_space_read_2(isp->isp_bus_tag, isp->isp_bus_handle, off)
+#define BXW2(isp, off, v) \
+ bus_space_write_2(isp->isp_bus_tag, isp->isp_bus_handle, off, v)
+#define BXR4(isp, off) \
+ bus_space_read_4(isp->isp_bus_tag, isp->isp_bus_handle, off)
+#define BXW4(isp, off, v) \
+ bus_space_write_4(isp->isp_bus_tag, isp->isp_bus_handle, off, v)
static __inline int
isp_pci_rd_debounced(ispsoftc_t *isp, int off, uint16_t *rp)
{
- struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
uint32_t val0, val1;
int i = 0;
do {
- val0 = BXR2(pcs, IspVirt2Off(isp, off));
- val1 = BXR2(pcs, IspVirt2Off(isp, off));
+ val0 = BXR2(isp, IspVirt2Off(isp, off));
+ val1 = BXR2(isp, IspVirt2Off(isp, off));
} while (val0 != val1 && ++i < 1000);
if (val0 != val1) {
return (1);
@@ -1325,7 +1325,6 @@
isp_pci_rd_isr(ispsoftc_t *isp, uint32_t *isrp,
uint16_t *semap, uint16_t *mbp)
{
- struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
uint16_t isr, sema;
if (IS_2100(isp)) {
@@ -1336,8 +1335,8 @@
return (0);
}
} else {
- isr = BXR2(pcs, IspVirt2Off(isp, BIU_ISR));
- sema = BXR2(pcs, IspVirt2Off(isp, BIU_SEMA));
+ isr = BXR2(isp, IspVirt2Off(isp, BIU_ISR));
+ sema = BXR2(isp, IspVirt2Off(isp, BIU_SEMA));
}
isp_prt(isp, ISP_LOGDEBUG3, "ISR 0x%x SEMA 0x%x", isr, sema);
isr &= INT_PENDING_MASK(isp);
@@ -1352,7 +1351,7 @@
return (0);
}
} else {
- *mbp = BXR2(pcs, IspVirt2Off(isp, OUTMAILBOX0));
+ *mbp = BXR2(isp, IspVirt2Off(isp, OUTMAILBOX0));
}
}
return (1);
@@ -1362,15 +1361,14 @@
isp_pci_rd_isr_2300(ispsoftc_t *isp, uint32_t *isrp,
uint16_t *semap, uint16_t *mbox0p)
{
- struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
uint32_t hccr;
uint32_t r2hisr;
- if (!(BXR2(pcs, IspVirt2Off(isp, BIU_ISR) & BIU2100_ISR_RISC_INT))) {
+ if (!(BXR2(isp, IspVirt2Off(isp, BIU_ISR) & BIU2100_ISR_RISC_INT))) {
*isrp = 0;
return (0);
}
- r2hisr = BXR4(pcs, IspVirt2Off(pcs, BIU_R2HSTSLO));
+ r2hisr = BXR4(isp, IspVirt2Off(isp, BIU_R2HSTSLO));
isp_prt(isp, ISP_LOGDEBUG3, "RISC2HOST ISR 0x%x", r2hisr);
if ((r2hisr & BIU_R2HST_INTR) == 0) {
*isrp = 0;
@@ -1426,10 +1424,9 @@
isp_pci_rd_isr_2400(ispsoftc_t *isp, uint32_t *isrp,
uint16_t *semap, uint16_t *mbox0p)
{
- struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
uint32_t r2hisr;
- r2hisr = BXR4(pcs, IspVirt2Off(pcs, BIU2400_R2HSTSLO));
+ r2hisr = BXR4(isp, IspVirt2Off(isp, BIU2400_R2HSTSLO));
isp_prt(isp, ISP_LOGDEBUG3, "RISC2HOST ISR 0x%x", r2hisr);
if ((r2hisr & BIU2400_R2HST_INTR) == 0) {
*isrp = 0;
@@ -1462,21 +1459,22 @@
static uint32_t
isp_pci_rd_reg(ispsoftc_t *isp, int regoff)
{
- uint32_t rv;
- struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
+ uint16_t rv;
int oldconf = 0;
if ((regoff & _BLK_REG_MASK) == SXP_BLOCK) {
/*
* We will assume that someone has paused the RISC processor.
*/
- oldconf = BXR2(pcs, IspVirt2Off(isp, BIU_CONF1));
- BXW2(pcs, IspVirt2Off(isp, BIU_CONF1),
+ oldconf = BXR2(isp, IspVirt2Off(isp, BIU_CONF1));
+ BXW2(isp, IspVirt2Off(isp, BIU_CONF1),
oldconf | BIU_PCI_CONF1_SXP);
+ MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2);
}
- rv = BXR2(pcs, IspVirt2Off(isp, regoff));
+ rv = BXR2(isp, IspVirt2Off(isp, regoff));
if ((regoff & _BLK_REG_MASK) == SXP_BLOCK) {
- BXW2(pcs, IspVirt2Off(isp, BIU_CONF1), oldconf);
+ BXW2(isp, IspVirt2Off(isp, BIU_CONF1), oldconf);
+ MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2);
}
return (rv);
}
@@ -1484,38 +1482,30 @@
static void
isp_pci_wr_reg(ispsoftc_t *isp, int regoff, uint32_t val)
{
- struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
int oldconf = 0;
- volatile int junk;
if ((regoff & _BLK_REG_MASK) == SXP_BLOCK) {
/*
* We will assume that someone has paused the RISC processor.
*/
- oldconf = BXR2(pcs, IspVirt2Off(isp, BIU_CONF1));
- BXW2(pcs, IspVirt2Off(isp, BIU_CONF1),
+ oldconf = BXR2(isp, IspVirt2Off(isp, BIU_CONF1));
+ BXW2(isp, IspVirt2Off(isp, BIU_CONF1),
oldconf | BIU_PCI_CONF1_SXP);
- if (IS_2100(isp)) {
- junk = BXR2(pcs, IspVirt2Off(isp, BIU_CONF1));
- }
+ MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2);
}
- BXW2(pcs, IspVirt2Off(isp, regoff), val);
- if (IS_2100(isp)) {
- junk = BXR2(pcs, IspVirt2Off(isp, regoff));
- }
+ BXW2(isp, IspVirt2Off(isp, regoff), val);
+ MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, regoff), 2);
if ((regoff & _BLK_REG_MASK) == SXP_BLOCK) {
- BXW2(pcs, IspVirt2Off(isp, BIU_CONF1), oldconf);
- if (IS_2100(isp)) {
- junk = BXR2(pcs, IspVirt2Off(isp, BIU_CONF1));
- }
+ BXW2(isp, IspVirt2Off(isp, BIU_CONF1), oldconf);
+ MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2);
}
+
}
static uint32_t
isp_pci_rd_reg_1080(ispsoftc_t *isp, int regoff)
{
uint32_t rv, oc = 0;
- struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
if ((regoff & _BLK_REG_MASK) == SXP_BLOCK ||
(regoff & _BLK_REG_MASK) == (SXP_BLOCK|SXP_BANK1_SELECT)) {
@@ -1523,21 +1513,24 @@
/*
* We will assume that someone has paused the RISC processor.
*/
- oc = BXR2(pcs, IspVirt2Off(isp, BIU_CONF1));
+ oc = BXR2(isp, IspVirt2Off(isp, BIU_CONF1));
tc = oc & ~BIU_PCI1080_CONF1_DMA;
if (regoff & SXP_BANK1_SELECT)
tc |= BIU_PCI1080_CONF1_SXP1;
else
tc |= BIU_PCI1080_CONF1_SXP0;
- BXW2(pcs, IspVirt2Off(isp, BIU_CONF1), tc);
+ BXW2(isp, IspVirt2Off(isp, BIU_CONF1), tc);
+ MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2);
} else if ((regoff & _BLK_REG_MASK) == DMA_BLOCK) {
- oc = BXR2(pcs, IspVirt2Off(isp, BIU_CONF1));
- BXW2(pcs, IspVirt2Off(isp, BIU_CONF1),
+ oc = BXR2(isp, IspVirt2Off(isp, BIU_CONF1));
+ BXW2(isp, IspVirt2Off(isp, BIU_CONF1),
oc | BIU_PCI1080_CONF1_DMA);
+ MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2);
}
- rv = BXR2(pcs, IspVirt2Off(isp, regoff));
+ rv = BXR2(isp, IspVirt2Off(isp, regoff));
if (oc) {
- BXW2(pcs, IspVirt2Off(isp, BIU_CONF1), oc);
+ BXW2(isp, IspVirt2Off(isp, BIU_CONF1), oc);
+ MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2);
}
return (rv);
}
@@ -1545,9 +1538,7 @@
static void
isp_pci_wr_reg_1080(ispsoftc_t *isp, int regoff, uint32_t val)
{
- struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
int oc = 0;
- volatile int junk;
if ((regoff & _BLK_REG_MASK) == SXP_BLOCK ||
(regoff & _BLK_REG_MASK) == (SXP_BLOCK|SXP_BANK1_SELECT)) {
@@ -1555,32 +1546,31 @@
/*
* We will assume that someone has paused the RISC processor.
*/
- oc = BXR2(pcs, IspVirt2Off(isp, BIU_CONF1));
+ oc = BXR2(isp, IspVirt2Off(isp, BIU_CONF1));
tc = oc & ~BIU_PCI1080_CONF1_DMA;
if (regoff & SXP_BANK1_SELECT)
tc |= BIU_PCI1080_CONF1_SXP1;
else
tc |= BIU_PCI1080_CONF1_SXP0;
- BXW2(pcs, IspVirt2Off(isp, BIU_CONF1), tc);
- junk = BXR2(pcs, IspVirt2Off(isp, BIU_CONF1));
+ BXW2(isp, IspVirt2Off(isp, BIU_CONF1), tc);
+ MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2);
} else if ((regoff & _BLK_REG_MASK) == DMA_BLOCK) {
- oc = BXR2(pcs, IspVirt2Off(isp, BIU_CONF1));
- BXW2(pcs, IspVirt2Off(isp, BIU_CONF1),
+ oc = BXR2(isp, IspVirt2Off(isp, BIU_CONF1));
+ BXW2(isp, IspVirt2Off(isp, BIU_CONF1),
oc | BIU_PCI1080_CONF1_DMA);
- junk = BXR2(pcs, IspVirt2Off(isp, BIU_CONF1));
+ MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2);
}
- BXW2(pcs, IspVirt2Off(isp, regoff), val);
- junk = BXR2(pcs, IspVirt2Off(isp, regoff));
+ BXW2(isp, IspVirt2Off(isp, regoff), val);
+ MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, regoff), 2);
if (oc) {
- BXW2(pcs, IspVirt2Off(isp, BIU_CONF1), oc);
- junk = BXR2(pcs, IspVirt2Off(isp, BIU_CONF1));
+ BXW2(isp, IspVirt2Off(isp, BIU_CONF1), oc);
+ MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2);
}
}
static uint32_t
isp_pci_rd_reg_2400(ispsoftc_t *isp, int regoff)
{
- struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
uint32_t rv;
int block = regoff & _BLK_REG_MASK;
@@ -1588,7 +1578,7 @@
case BIU_BLOCK:
break;
case MBOX_BLOCK:
- return (BXR2(pcs, IspVirt2Off(pcs, regoff)));
+ return (BXR2(isp, IspVirt2Off(isp, regoff)));
case SXP_BLOCK:
isp_prt(isp, ISP_LOGWARN, "SXP_BLOCK read at 0x%x", regoff);
return (0xffffffff);
@@ -1622,13 +1612,13 @@
case BIU2400_GPIOD:
case BIU2400_GPIOE:
case BIU2400_HSEMA:
- rv = BXR4(pcs, IspVirt2Off(pcs, regoff));
+ rv = BXR4(isp, IspVirt2Off(isp, regoff));
break;
case BIU2400_R2HSTSLO:
- rv = BXR4(pcs, IspVirt2Off(pcs, regoff));
+ rv = BXR4(isp, IspVirt2Off(isp, regoff));
break;
case BIU2400_R2HSTSHI:
- rv = BXR4(pcs, IspVirt2Off(pcs, regoff)) >> 16;
+ rv = BXR4(isp, IspVirt2Off(isp, regoff)) >> 16;
break;
default:
isp_prt(isp, ISP_LOGERR,
@@ -1642,16 +1632,14 @@
static void
isp_pci_wr_reg_2400(ispsoftc_t *isp, int regoff, uint32_t val)
{
- struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
int block = regoff & _BLK_REG_MASK;
- volatile int junk;
switch (block) {
case BIU_BLOCK:
break;
case MBOX_BLOCK:
- BXW2(pcs, IspVirt2Off(pcs, regoff), val);
- junk = BXR2(pcs, IspVirt2Off(pcs, regoff));
+ BXW2(isp, IspVirt2Off(isp, regoff), val);
+ MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, regoff), 2);
return;
case SXP_BLOCK:
isp_prt(isp, ISP_LOGWARN, "SXP_BLOCK write at 0x%x", regoff);
@@ -1686,8 +1674,8 @@
case BIU2400_GPIOD:
case BIU2400_GPIOE:
case BIU2400_HSEMA:
- BXW4(pcs, IspVirt2Off(pcs, regoff), val);
- junk = BXR4(pcs, IspVirt2Off(pcs, regoff));
+ BXW4(isp, IspVirt2Off(isp, regoff), val);
+ MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, regoff), 4);
break;
default:
isp_prt(isp, ISP_LOGERR,
==== //depot/projects/mjexp/sys/dev/isp/isp_sbus.c#7 (text+ko) ====
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/isp/isp_sbus.c,v 1.29 2007/02/23 23:13:46 mjacob Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/isp/isp_sbus.c,v 1.30 2007/03/13 06:46:08 mjacob Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -89,8 +89,6 @@
ispsoftc_t sbus_isp;
device_t sbus_dev;
struct resource * sbus_reg;
- bus_space_tag_t sbus_st;
- bus_space_handle_t sbus_sh;
void * ih;
int16_t sbus_poff[_NREG_BLKS];
bus_dma_tag_t dmat;
@@ -194,9 +192,9 @@
}
sbs->sbus_dev = dev;
sbs->sbus_reg = regs;
- sbs->sbus_st = rman_get_bustag(regs);
- sbs->sbus_sh = rman_get_bushandle(regs);
sbs->sbus_mdvec = mdvec;
+ isp->isp_bus_tag = rman_get_bustag(regs);
+ isp->isp_bus_handle = rman_get_bushandle(regs);
sbs->sbus_poff[BIU_BLOCK >> _BLK_REG_SHFT] = BIU_REGS_OFF;
sbs->sbus_poff[MBOX_BLOCK >> _BLK_REG_SHFT] = SBUS_MBOX_REGS_OFF;
@@ -404,12 +402,11 @@
_BLK_REG_SHFT] + ((x) & 0xff))
#define BXR2(sbc, off) \
- bus_space_read_2(sbc->sbus_st, sbc->sbus_sh, off)
+ bus_space_read_2(isp->isp_bus_tag, isp->isp_bus_handle, off)
static int
isp_sbus_rd_isr(ispsoftc_t *isp, uint32_t *isrp, uint16_t *semap, uint16_t *mbp)
{
- struct isp_sbussoftc *sbc = (struct isp_sbussoftc *) isp;
uint16_t isr, sema;
isr = BXR2(sbc, IspVirt2Off(isp, BIU_ISR));
@@ -434,7 +431,7 @@
struct isp_sbussoftc *sbs = (struct isp_sbussoftc *) isp;
int offset = sbs->sbus_poff[(regoff & _BLK_REG_MASK) >> _BLK_REG_SHFT];
offset += (regoff & 0xff);
- rval = bus_space_read_2(sbs->sbus_st, sbs->sbus_sh, offset);
+ rval = bus_space_read_2(isp->isp_bus_tag, isp->isp_bus_handle, offset);
isp_prt(isp, ISP_LOGDEBUG3,
"isp_sbus_rd_reg(off %x) = %x", regoff, rval);
return (rval);
@@ -448,7 +445,8 @@
offset += (regoff & 0xff);
isp_prt(isp, ISP_LOGDEBUG3,
"isp_sbus_wr_reg(off %x) = %x", regoff, val);
- bus_space_write_2(sbs->sbus_st, sbs->sbus_sh, offset, val);
+ bus_space_write_2(isp->isp_bus_tag, isp->isp_bus_handle, offset, val);
+ MEMORYBARRIER(isp, SYNC_REG, offset, 2);
}
struct imush {
More information about the p4-projects
mailing list