Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/aacraid/aacraid.c
Show First 20 Lines • Show All 893 Lines • ▼ Show 20 Lines | if (sc->msi_enabled) { | ||||
if (bellbits & AAC_DB_RESPONSE_SENT_NS) { | if (bellbits & AAC_DB_RESPONSE_SENT_NS) { | ||||
bellbits = AAC_DB_RESPONSE_SENT_NS; | bellbits = AAC_DB_RESPONSE_SENT_NS; | ||||
AAC_MEM0_SETREG4(sc, AAC_SRC_ODBR_C, bellbits); | AAC_MEM0_SETREG4(sc, AAC_SRC_ODBR_C, bellbits); | ||||
} else { | } else { | ||||
bellbits_shifted = (bellbits >> AAC_SRC_ODR_SHIFT); | bellbits_shifted = (bellbits >> AAC_SRC_ODR_SHIFT); | ||||
AAC_MEM0_SETREG4(sc, AAC_SRC_ODBR_C, bellbits); | AAC_MEM0_SETREG4(sc, AAC_SRC_ODBR_C, bellbits); | ||||
if (bellbits_shifted & AAC_DB_AIF_PENDING) | if (bellbits_shifted & AAC_DB_AIF_PENDING) | ||||
mode |= AAC_INT_MODE_AIF; | mode |= AAC_INT_MODE_AIF; | ||||
else if (bellbits_shifted & AAC_DB_SYNC_COMMAND) | if (bellbits_shifted & AAC_DB_SYNC_COMMAND) | ||||
mode |= AAC_INT_MODE_SYNC; | mode |= AAC_INT_MODE_SYNC; | ||||
} | } | ||||
/* ODR readback, Prep #238630 */ | /* ODR readback, Prep #238630 */ | ||||
AAC_MEM0_GETREG4(sc, AAC_SRC_ODBR_R); | AAC_MEM0_GETREG4(sc, AAC_SRC_ODBR_R); | ||||
} | } | ||||
if (mode & AAC_INT_MODE_SYNC) { | if (mode & AAC_INT_MODE_SYNC) { | ||||
if (sc->aac_sync_cm) { | if (sc->aac_sync_cm) { | ||||
cm = sc->aac_sync_cm; | cm = sc->aac_sync_cm; | ||||
aac_unmap_command(cm); | aac_unmap_command(cm); | ||||
cm->cm_flags |= AAC_CMD_COMPLETED; | cm->cm_flags |= AAC_CMD_COMPLETED; | ||||
aac_fib_header_toh(&cm->cm_fib->Header); | aac_fib_header_toh(&cm->cm_fib->Header); | ||||
/* is there a completion handler? */ | /* is there a completion handler? */ | ||||
if (cm->cm_complete != NULL) { | if (cm->cm_complete != NULL) { | ||||
cm->cm_complete(cm); | cm->cm_complete(cm); | ||||
} else { | } else { | ||||
/* assume that someone is sleeping on this command */ | /* assume that someone is sleeping on this command */ | ||||
wakeup(cm); | wakeup(cm); | ||||
} | } | ||||
sc->flags &= ~AAC_QUEUE_FRZN; | sc->flags &= ~AAC_QUEUE_FRZN; | ||||
sc->aac_sync_cm = NULL; | sc->aac_sync_cm = NULL; | ||||
} | } | ||||
if (mode & AAC_INT_MODE_INTX) | |||||
mode &= ~AAC_INT_MODE_SYNC; | |||||
else | |||||
mode = 0; | mode = 0; | ||||
} | } | ||||
if (mode & AAC_INT_MODE_AIF) { | if (mode & AAC_INT_MODE_AIF) { | ||||
if (mode & AAC_INT_MODE_INTX) { | if (mode & AAC_INT_MODE_INTX) { | ||||
aac_request_aif(sc); | aac_request_aif(sc); | ||||
mode = 0; | mode = 0; | ||||
} | } | ||||
} | } | ||||
if (sc->flags & AAC_FLAGS_SYNC_MODE) | |||||
mode = 0; | |||||
if (mode) { | if (mode) { | ||||
/* handle async. status */ | /* handle async. status */ | ||||
index = sc->aac_host_rrq_idx[vector_no]; | index = sc->aac_host_rrq_idx[vector_no]; | ||||
for (;;) { | for (;;) { | ||||
isFastResponse = isAif = noMoreAif = 0; | isFastResponse = isAif = noMoreAif = 0; | ||||
/* remove toggle bit (31) */ | /* remove toggle bit (31) */ | ||||
handle = (le32toh(sc->aac_common->ac_host_rrq[index]) & | handle = (le32toh(sc->aac_common->ac_host_rrq[index]) & | ||||
▲ Show 20 Lines • Show All 2,985 Lines • Show Last 20 Lines |