summaryrefslogtreecommitdiffstats
path: root/sys/dev/aac/aacvar.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/aac/aacvar.h')
-rw-r--r--sys/dev/aac/aacvar.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/sys/dev/aac/aacvar.h b/sys/dev/aac/aacvar.h
index 7c76d56..0353bcc 100644
--- a/sys/dev/aac/aacvar.h
+++ b/sys/dev/aac/aacvar.h
@@ -161,6 +161,11 @@ struct aac_command
* from host to controller */
#define AAC_CMD_COMPLETED (1<<3) /* command has been completed */
#define AAC_CMD_TIMEDOUT (1<<4) /* command taken too long */
+#define AAC_ON_AACQ_FREE (1<<5)
+#define AAC_ON_AACQ_READY (1<<6)
+#define AAC_ON_AACQ_BUSY (1<<7)
+#define AAC_ON_AACQ_COMPLETE (1<<8)
+#define AAC_ON_AACQ_MASK ((1<<5)|(1<<6)|(1<<7)|(1<<8))
void (* cm_complete)(struct aac_command *cm);
void *cm_private;
@@ -408,7 +413,13 @@ aac_enqueue_ ## name (struct aac_command *cm) \
int s; \
\
s = splbio(); \
+ if ((cm->cm_flags & AAC_ON_AACQ_MASK) != 0) { \
+ printf("command %p is on another queue, flags = %#x\n", \
+ cm, cm->cm_flags); \
+ panic("command is on another queue"); \
+ } \
TAILQ_INSERT_TAIL(&cm->cm_sc->aac_ ## name, cm, cm_link); \
+ cm->cm_flags |= AAC_ON_ ## index; \
AACQ_ADD(cm->cm_sc, index); \
splx(s); \
} \
@@ -418,7 +429,13 @@ aac_requeue_ ## name (struct aac_command *cm) \
int s; \
\
s = splbio(); \
+ if ((cm->cm_flags & AAC_ON_AACQ_MASK) != 0) { \
+ printf("command %p is on another queue, flags = %#x\n", \
+ cm, cm->cm_flags); \
+ panic("command is on another queue"); \
+ } \
TAILQ_INSERT_HEAD(&cm->cm_sc->aac_ ## name, cm, cm_link); \
+ cm->cm_flags |= AAC_ON_ ## index; \
AACQ_ADD(cm->cm_sc, index); \
splx(s); \
} \
@@ -430,7 +447,13 @@ aac_dequeue_ ## name (struct aac_softc *sc) \
\
s = splbio(); \
if ((cm = TAILQ_FIRST(&sc->aac_ ## name)) != NULL) { \
+ if ((cm->cm_flags & AAC_ON_ ## index) == 0) { \
+ printf("command %p not in queue, flags = %#x, bit = %#x\n",\
+ cm, cm->cm_flags, AAC_ON_ ## index); \
+ panic("command not in queue"); \
+ } \
TAILQ_REMOVE(&sc->aac_ ## name, cm, cm_link); \
+ cm->cm_flags &= ~AAC_ON_ ## index; \
AACQ_REMOVE(sc, index); \
} \
splx(s); \
@@ -442,7 +465,13 @@ aac_remove_ ## name (struct aac_command *cm) \
int s; \
\
s = splbio(); \
+ if ((cm->cm_flags & AAC_ON_ ## index) == 0) { \
+ printf("command %p not in queue, flags = %#x, bit = %#x\n", \
+ cm, cm->cm_flags, AAC_ON_ ## index); \
+ panic("command not in queue"); \
+ } \
TAILQ_REMOVE(&cm->cm_sc->aac_ ## name, cm, cm_link); \
+ cm->cm_flags &= ~AAC_ON_ ## index; \
AACQ_REMOVE(cm->cm_sc, index); \
splx(s); \
} \
OpenPOWER on IntegriCloud