static void malo_hal_fw_reset(struct malo_hal *mh) { if (malo_hal_read4(mh, MALO_REG_INT_CODE) == 0xffffffff) { device_printf(mh->mh_dev, "%s: device not present!\n", __func__); return; } malo_hal_write4(mh, MALO_REG_H2A_INTERRUPT_EVENTS, MALO_ISR_RESET); mh->mh_flags &= ~MHF_FWHANG; }
static int malo_hal_waitfor(struct malo_hal *mh, uint32_t val) { int i; for (i = 0; i < MALO_FW_MAX_NUM_CHECKS; i++) { DELAY(MALO_FW_CHECK_USECS); if (malo_hal_read4(mh, MALO_REG_INT_CODE) == val) return 0; } return -1; }
static void malo_hal_send_cmd(struct malo_hal *mh) { uint32_t dummy; bus_dmamap_sync(mh->mh_dmat, mh->mh_dmamap, BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); malo_hal_write4(mh, MALO_REG_GEN_PTR, mh->mh_cmdaddr); dummy = malo_hal_read4(mh, MALO_REG_INT_CODE); malo_hal_write4(mh, MALO_REG_H2A_INTERRUPT_EVENTS, MALO_H2ARIC_BIT_DOOR_BELL); }