diff options
author | sos <sos@FreeBSD.org> | 2002-08-18 12:20:33 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 2002-08-18 12:20:33 +0000 |
commit | 6da980591b6309b8a6764e2727a485f5d32023cb (patch) | |
tree | f643ddf5578f35bca199b39427fe8b8aac49fe32 /sys/dev/pst | |
parent | 0e0e2230b6cde1ee4eb206ae06221f6898357cb4 (diff) | |
download | FreeBSD-src-6da980591b6309b8a6764e2727a485f5d32023cb.zip FreeBSD-src-6da980591b6309b8a6764e2727a485f5d32023cb.tar.gz |
Fix args for contigmalloc, cosmetics.
Diffstat (limited to 'sys/dev/pst')
-rw-r--r-- | sys/dev/pst/pst-iop.c | 58 | ||||
-rw-r--r-- | sys/dev/pst/pst-iop.h | 95 | ||||
-rw-r--r-- | sys/dev/pst/pst-raid.c | 20 |
3 files changed, 88 insertions, 85 deletions
diff --git a/sys/dev/pst/pst-iop.c b/sys/dev/pst/pst-iop.c index 85a1b3b..bbc41a9 100644 --- a/sys/dev/pst/pst-iop.c +++ b/sys/dev/pst/pst-iop.c @@ -154,31 +154,32 @@ iop_intr(void *data) struct i2o_single_reply *reply; u_int32_t mfa; - if ((mfa = sc->reg->oqueue) == 0xffffffff) { - if ((mfa = sc->reg->oqueue) == 0xffffffff) { - printf("pstiop: no mfa on interrupt ?\n"); + /* we might get more than one finished request pr interrupt */ + while (1) { + if ((mfa = sc->reg->oqueue) == 0xffffffff) + if ((mfa = sc->reg->oqueue) == 0xffffffff) + return; + + reply = (struct i2o_single_reply *)(sc->obase + (mfa - sc->phys_obase)); + + /* if this is a event register reply, shout! */ + if (reply->function == I2O_UTIL_EVENT_REGISTER) { + struct i2o_util_event_reply_message *event = + (struct i2o_util_event_reply_message *)reply; + + printf("pstiop: EVENT!! idx=%08x data=%08x\n", + event->event_mask, event->event_data[0]); return; } - } - reply = (struct i2o_single_reply *)(sc->obase + (mfa - sc->phys_obase)); - - /* if this is a event register reply, shout! */ - if (reply->function == I2O_UTIL_EVENT_REGISTER) { - struct i2o_util_event_reply_message *event = - (struct i2o_util_event_reply_message *)reply; - printf("pstiop: EVENT!! idx=%08x data=%08x\n", - event->event_mask, event->event_data[0]); - return; + /* if reply is a failurenotice we need to free the original mfa */ + if (reply->message_flags & I2O_MESSAGE_FLAGS_FAIL) + iop_free_mfa(sc,((struct i2o_fault_reply *)(reply))->preserved_mfa); + + /* reply->initiator_context points to the service routine */ + ((void (*)(struct iop_softc *, u_int32_t, struct i2o_single_reply *)) + (reply->initiator_context))(sc, mfa, reply); } - - /* if reply is a failurenotice we need to free the original mfa */ - if (reply->message_flags & I2O_MESSAGE_FLAGS_FAIL) - iop_free_mfa(sc,((struct i2o_fault_reply *)(reply))->preserved_mfa); - - /* reply->initiator_context points to the service routine */ - ((void (*)(struct iop_softc *, u_int32_t, struct i2o_single_reply *)) - (reply->initiator_context))(sc, mfa, reply); } int @@ -186,7 +187,7 @@ iop_reset(struct iop_softc *sc) { struct i2o_exec_iop_reset_message *msg; int mfa, timeout = 5000; - u_int32_t reply = 0; + volatile u_int32_t reply = 0; mfa = iop_get_mfa(sc); msg = (struct i2o_exec_iop_reset_message *)(sc->ibase + mfa); @@ -209,8 +210,8 @@ iop_reset(struct iop_softc *sc) timeout = 10000; while ((mfa = sc->reg->iqueue) == 0xffffffff && --timeout) DELAY(1000); - iop_free_mfa(sc, mfa); + iop_free_mfa(sc, mfa); return reply; } @@ -219,12 +220,13 @@ iop_init_outqueue(struct iop_softc *sc) { struct i2o_exec_init_outqueue_message *msg; int i, mfa, timeout = 5000; - u_int32_t reply = 0; + volatile u_int32_t reply = 0; if (!(sc->obase = contigmalloc(I2O_IOP_OUTBOUND_FRAME_COUNT * I2O_IOP_OUTBOUND_FRAME_SIZE, M_PSTIOP, M_NOWAIT, - 0, 0xFFFFFFFF, sizeof(u_int32_t), 0))) { + 0x00010000, 0xFFFFFFFF, + sizeof(u_int32_t), 0))) { printf("pstiop: contigmalloc of outqueue buffers failed!\n"); return 0; } @@ -279,7 +281,7 @@ iop_get_lct(struct iop_softc *sc) #define ALLOCSIZE (PAGE_SIZE + (256 * sizeof(struct i2o_lct_entry))) if (!(reply = contigmalloc(ALLOCSIZE, M_PSTIOP, M_NOWAIT | M_ZERO, - 0, 0xFFFFFFFF, sizeof(u_int32_t), 0))) + 0x00010000, 0xFFFFFFFF, sizeof(u_int32_t), 0))) return 0; mfa = iop_get_mfa(sc); @@ -323,11 +325,11 @@ iop_get_util_params(struct iop_softc *sc, int target, int operation, int group) int mfa; if (!(param = contigmalloc(PAGE_SIZE, M_PSTIOP, M_NOWAIT | M_ZERO, - 0, 0xFFFFFFFF, sizeof(u_int32_t), 0))) + 0x00010000, 0xFFFFFFFF, sizeof(u_int32_t), 0))) return NULL; if (!(reply = contigmalloc(PAGE_SIZE, M_PSTIOP, M_NOWAIT | M_ZERO, - 0, 0xFFFFFFFF, sizeof(u_int32_t), 0))) + 0x00010000, 0xFFFFFFFF, sizeof(u_int32_t), 0))) return NULL; mfa = iop_get_mfa(sc); diff --git a/sys/dev/pst/pst-iop.h b/sys/dev/pst/pst-iop.h index c3cceff..f8a0eac 100644 --- a/sys/dev/pst/pst-iop.h +++ b/sys/dev/pst/pst-iop.h @@ -39,19 +39,19 @@ struct out_mfa_buf { }; struct iop_softc { - struct resource *r_mem; - struct resource *r_irq; - caddr_t ibase; - u_int32_t phys_ibase; - caddr_t obase; - u_int32_t phys_obase; - struct i2o_registers *reg; - struct i2o_status_get_reply *status; - int lct_count; - struct i2o_lct_entry *lct; - device_t dev; - void *handle; - struct intr_config_hook *iop_delayed_attach; + struct resource *r_mem; + struct resource *r_irq; + caddr_t ibase; + u_int32_t phys_ibase; + caddr_t obase; + u_int32_t phys_obase; + struct i2o_registers *reg; + struct i2o_status_get_reply *status; + int lct_count; + struct i2o_lct_entry *lct; + device_t dev; + void *handle; + struct intr_config_hook *iop_delayed_attach; }; /* structure at start of IOP shared mem */ @@ -70,10 +70,10 @@ struct i2o_registers { volatile u_int32_t oqueue_event; volatile u_int32_t oqueue_intr_status; volatile u_int32_t oqueue_intr_mask; -#define I2O_OUT_INTR_QUEUE 0x08 -#define I2O_OUT_INTR_BELL 0x04 -#define I2O_OUT_INTR_MSG1 0x02 -#define I2O_OUT_INTR_MSG0 0x01 +#define I2O_OUT_INTR_QUEUE 0x08 +#define I2O_OUT_INTR_BELL 0x04 +#define I2O_OUT_INTR_MSG1 0x02 +#define I2O_OUT_INTR_MSG0 0x01 volatile u_int64_t reserved2; volatile u_int32_t iqueue; @@ -86,41 +86,41 @@ struct i2o_registers { /* Scatter/Gather List management */ struct i2o_sgl { - u_int32_t count:24; -#define I2O_SGL_CNT_MASK 0xffffff - - u_int32_t flags:8; -#define I2O_SGL_SIMPLE 0x10 -#define I2O_SGL_PAGELIST 0x20 -#define I2O_SGL_CHAIN 0x30 -#define I2O_SGL_ATTRIBUTE 0x7c -#define I2O_SGL_BC0 0x01 -#define I2O_SGL_BC1 0x02 -#define I2O_SGL_DIR 0x04 -#define I2O_SGL_LA 0x08 -#define I2O_SGL_EOB 0x40 -#define I2O_SGL_END 0x80 - - u_int32_t phys_addr[1]; + u_int32_t count:24; +#define I2O_SGL_CNT_MASK 0xffffff + + u_int32_t flags:8; +#define I2O_SGL_SIMPLE 0x10 +#define I2O_SGL_PAGELIST 0x20 +#define I2O_SGL_CHAIN 0x30 +#define I2O_SGL_ATTRIBUTE 0x7c +#define I2O_SGL_BC0 0x01 +#define I2O_SGL_BC1 0x02 +#define I2O_SGL_DIR 0x04 +#define I2O_SGL_LA 0x08 +#define I2O_SGL_EOB 0x40 +#define I2O_SGL_END 0x80 + + u_int32_t phys_addr[1]; } __attribute__((packed)); #define I2O_SGL_MAX_SEGS ((I2O_IOP_OUTBOUND_FRAME_SIZE - (8 + 2)) + 1) /* i2o command codes */ -#define I2O_UTIL_NOP 0x00 -#define I2O_UTIL_PARAMS_GET 0x06 -#define I2O_UTIL_CLAIM 0x09 -#define I2O_UTIL_CONFIG_DIALOG 0x10 -#define I2O_UTIL_EVENT_REGISTER 0x13 -#define I2O_BSA_BLOCK_READ 0x30 -#define I2O_BSA_BLOCK_WRITE 0x31 -#define I2O_BSA_CACHE_FLUSH 0x37 -#define I2O_EXEC_STATUS_GET 0xa0 -#define I2O_EXEC_OUTBOUND_INIT 0xa1 -#define I2O_EXEC_LCT_NOTIFY 0xa2 -#define I2O_EXEC_SYSTAB_SET 0xa3 -#define I2O_EXEC_IOP_RESET 0xbd -#define I2O_EXEC_SYS_ENABLE 0xd1 +#define I2O_UTIL_NOP 0x00 +#define I2O_UTIL_PARAMS_GET 0x06 +#define I2O_UTIL_CLAIM 0x09 +#define I2O_UTIL_CONFIG_DIALOG 0x10 +#define I2O_UTIL_EVENT_REGISTER 0x13 +#define I2O_BSA_BLOCK_READ 0x30 +#define I2O_BSA_BLOCK_WRITE 0x31 +#define I2O_BSA_CACHE_FLUSH 0x37 +#define I2O_EXEC_STATUS_GET 0xa0 +#define I2O_EXEC_OUTBOUND_INIT 0xa1 +#define I2O_EXEC_LCT_NOTIFY 0xa2 +#define I2O_EXEC_SYSTAB_SET 0xa3 +#define I2O_EXEC_IOP_RESET 0xbd +#define I2O_EXEC_SYS_ENABLE 0xd1 /* basic message layout */ struct i2o_basic_message { @@ -132,6 +132,7 @@ struct i2o_basic_message { u_int32_t initiator_address:12; u_int32_t function:8; u_int32_t initiator_context; + u_int32_t transaction_context; } __attribute__((packed)); /* basic reply layout */ diff --git a/sys/dev/pst/pst-raid.c b/sys/dev/pst/pst-raid.c index 9964dd2..2382576 100644 --- a/sys/dev/pst/pst-raid.c +++ b/sys/dev/pst/pst-raid.c @@ -72,15 +72,15 @@ static struct cdevsw pst_cdevsw = { static struct cdevsw pstdisk_cdevsw; struct pst_softc { - struct iop_softc *iop; - struct i2o_lct_entry *lct; - struct i2o_bsa_device *info; - dev_t device; - struct devstat stats; - struct disk disk; - struct bio_queue_head queue; - struct mtx mtx; - int outstanding; + struct iop_softc *iop; + struct i2o_lct_entry *lct; + struct i2o_bsa_device *info; + dev_t device; + struct devstat stats; + struct disk disk; + struct bio_queue_head queue; + struct mtx mtx; + int outstanding; }; struct pst_request { @@ -254,7 +254,7 @@ pst_start(struct pst_softc *psc) request->timeout_handle.callout = NULL; else request->timeout_handle = - timeout((timeout_t*)pst_timeout, request, 20 * hz); + timeout((timeout_t*)pst_timeout, request, 10 * hz); bioq_remove(&psc->queue, bp); devstat_start_transaction(&psc->stats); if (pst_rw(request)) { |