int ps3_set_signal(u64 signal_group, u8 signal_bit, u16 sub_unit, u8 bus_word) { int ret; u64 lv1_signal_group; u64 bus_select; u64 signal_select; u64 attr1, attr2, attr3; if (signal_group == 0) return __ps3_set_signal(0, 0, 0, 0, 0, 0); lv1_signal_group = pm_signal_group_to_ps3_lv1_signal_group(signal_group); bus_select = pm_bus_word_to_ps3_lv1_bus_word(bus_word); switch (signal_group) { case PM_SIG_GROUP_SPU_TRIGGER: signal_select = 1; signal_select = signal_select << (63 - signal_bit); break; case PM_SIG_GROUP_SPU_EVENT: signal_select = 1; signal_select = (signal_select << (63 - signal_bit)) | 0x3; break; default: signal_select = 0; break; } /* * 0: physical object. * 1: logical object. * This parameter is only used for the PPE and SPE signals. */ attr1 = 1; /* * This parameter is used to specify the target physical/logical * PPE/SPE object. */ if (PM_SIG_GROUP_SPU <= signal_group && signal_group < PM_SIG_GROUP_MFC_MAX) attr2 = sub_unit; else attr2 = lpm_priv->pu_id; /* * This parameter is only used for setting the SPE signal. */ attr3 = 0; ret = __ps3_set_signal(lv1_signal_group, bus_select, signal_select, attr1, attr2, attr3); if (ret) dev_err(sbd_core(), "%s:%u: __ps3_set_signal failed: %d\n", __func__, __LINE__, ret); return ret; }
int ps3_set_signal(u64 signal_group, u8 signal_bit, u16 sub_unit, u8 bus_word) { int ret; u64 lv1_signal_group; u64 bus_select; u64 signal_select; u64 attr1, attr2, attr3; if (signal_group == 0) return __ps3_set_signal(0, 0, 0, 0, 0, 0); lv1_signal_group = pm_signal_group_to_ps3_lv1_signal_group(signal_group); bus_select = pm_bus_word_to_ps3_lv1_bus_word(bus_word); switch (signal_group) { case PM_SIG_GROUP_SPU_TRIGGER: signal_select = 1; signal_select = signal_select << (63 - signal_bit); break; case PM_SIG_GROUP_SPU_EVENT: signal_select = 1; signal_select = (signal_select << (63 - signal_bit)) | 0x3; break; default: signal_select = 0; break; } attr1 = 1; if (PM_SIG_GROUP_SPU <= signal_group && signal_group < PM_SIG_GROUP_MFC_MAX) attr2 = sub_unit; else attr2 = lpm_priv->pu_id; attr3 = 0; ret = __ps3_set_signal(lv1_signal_group, bus_select, signal_select, attr1, attr2, attr3); if (ret) dev_err(sbd_core(), "%s:%u: __ps3_set_signal failed: %d\n", __func__, __LINE__, ret); return ret; }