/** * Dump item header line 2. * * @buf: output buffer * @max: length of output buffer * @item_ptr: SMEM item pointer * @returns: Number of bytes written to output buffer */ static int smp2p_item_header2(char *buf, int max, struct smp2p_smem *item_ptr) { int i = 0; if (!item_ptr) { i += scnprintf(buf + i, max - i, "None"); return i; } i += scnprintf(buf + i, max - i, "Version: %08x Features: %08x", SMP2P_GET_VERSION(item_ptr->feature_version), SMP2P_GET_FEATURES(item_ptr->feature_version) ); return i; }
static void smp2p_ut_remotesubsys_ssr_ack(struct seq_file *s, uint32_t rpid, struct smp2p_interrupt_config *int_cfg) { int failed = 0; seq_printf(s, "Running %s\n", __func__); do { struct smp2p_smem *rhdr; struct smp2p_smem *lhdr; int negotiation_state; bool ssr_ack_enabled; uint32_t ssr_done_start; lhdr = smp2p_get_out_item(rpid, &negotiation_state); UT_ASSERT_PTR(NULL, !=, lhdr); UT_ASSERT_INT(SMP2P_EDGE_STATE_OPENED, ==, negotiation_state); rhdr = smp2p_get_in_item(rpid); UT_ASSERT_PTR(NULL, !=, rhdr); /* */ if (SMP2P_GET_FEATURES(rhdr->feature_version) & SMP2P_FEATURE_SSR_ACK) ssr_ack_enabled = true; else ssr_ack_enabled = false; ssr_done_start = SMP2P_GET_RESTART_DONE(rhdr->flags); UT_ASSERT_INT(ssr_done_start, ==, SMP2P_GET_RESTART_ACK(lhdr->flags)); /* */ seq_printf(s, "Restarting '%s'\n", int_cfg->name); subsystem_restart(int_cfg->name); msleep(10*1000); /* */ if (ssr_ack_enabled) { ssr_done_start ^= 1; UT_ASSERT_INT(ssr_done_start, ==, SMP2P_GET_RESTART_ACK(lhdr->flags)); UT_ASSERT_INT(ssr_done_start, ==, SMP2P_GET_RESTART_DONE(rhdr->flags)); UT_ASSERT_INT(0, ==, SMP2P_GET_RESTART_DONE(lhdr->flags)); seq_puts(s, "\tSSR ACK Enabled and Toggled\n"); } else { UT_ASSERT_INT(0, ==, SMP2P_GET_RESTART_DONE(lhdr->flags)); UT_ASSERT_INT(0, ==, SMP2P_GET_RESTART_ACK(lhdr->flags)); UT_ASSERT_INT(0, ==, SMP2P_GET_RESTART_DONE(rhdr->flags)); UT_ASSERT_INT(0, ==, SMP2P_GET_RESTART_ACK(rhdr->flags)); seq_puts(s, "\tSSR ACK Disabled\n"); } seq_puts(s, "\tOK\n"); } while (0);