|
@@ -72,33 +72,57 @@ struct arm_smccc_res {
|
|
};
|
|
};
|
|
|
|
|
|
/**
|
|
/**
|
|
- * arm_smccc_smc() - make SMC calls
|
|
|
|
|
|
+ * struct arm_smccc_quirk - Contains quirk information
|
|
|
|
+ * @id: quirk identification
|
|
|
|
+ * @state: quirk specific information
|
|
|
|
+ * @a6: Qualcomm quirk entry for returning post-smc call contents of a6
|
|
|
|
+ */
|
|
|
|
+struct arm_smccc_quirk {
|
|
|
|
+ int id;
|
|
|
|
+ union {
|
|
|
|
+ unsigned long a6;
|
|
|
|
+ } state;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * __arm_smccc_smc() - make SMC calls
|
|
* @a0-a7: arguments passed in registers 0 to 7
|
|
* @a0-a7: arguments passed in registers 0 to 7
|
|
* @res: result values from registers 0 to 3
|
|
* @res: result values from registers 0 to 3
|
|
|
|
+ * @quirk: points to an arm_smccc_quirk, or NULL when no quirks are required.
|
|
*
|
|
*
|
|
* This function is used to make SMC calls following SMC Calling Convention.
|
|
* This function is used to make SMC calls following SMC Calling Convention.
|
|
* The content of the supplied param are copied to registers 0 to 7 prior
|
|
* The content of the supplied param are copied to registers 0 to 7 prior
|
|
* to the SMC instruction. The return values are updated with the content
|
|
* to the SMC instruction. The return values are updated with the content
|
|
- * from register 0 to 3 on return from the SMC instruction.
|
|
|
|
|
|
+ * from register 0 to 3 on return from the SMC instruction. An optional
|
|
|
|
+ * quirk structure provides vendor specific behavior.
|
|
*/
|
|
*/
|
|
-asmlinkage void arm_smccc_smc(unsigned long a0, unsigned long a1,
|
|
|
|
|
|
+asmlinkage void __arm_smccc_smc(unsigned long a0, unsigned long a1,
|
|
unsigned long a2, unsigned long a3, unsigned long a4,
|
|
unsigned long a2, unsigned long a3, unsigned long a4,
|
|
unsigned long a5, unsigned long a6, unsigned long a7,
|
|
unsigned long a5, unsigned long a6, unsigned long a7,
|
|
- struct arm_smccc_res *res);
|
|
|
|
|
|
+ struct arm_smccc_res *res, struct arm_smccc_quirk *quirk);
|
|
|
|
|
|
/**
|
|
/**
|
|
- * arm_smccc_hvc() - make HVC calls
|
|
|
|
|
|
+ * __arm_smccc_hvc() - make HVC calls
|
|
* @a0-a7: arguments passed in registers 0 to 7
|
|
* @a0-a7: arguments passed in registers 0 to 7
|
|
* @res: result values from registers 0 to 3
|
|
* @res: result values from registers 0 to 3
|
|
*
|
|
*
|
|
* This function is used to make HVC calls following SMC Calling
|
|
* This function is used to make HVC calls following SMC Calling
|
|
* Convention. The content of the supplied param are copied to registers 0
|
|
* Convention. The content of the supplied param are copied to registers 0
|
|
* to 7 prior to the HVC instruction. The return values are updated with
|
|
* to 7 prior to the HVC instruction. The return values are updated with
|
|
- * the content from register 0 to 3 on return from the HVC instruction.
|
|
|
|
|
|
+ * the content from register 0 to 3 on return from the HVC instruction. An
|
|
|
|
+ * optional quirk structure provides vendor specific behavior.
|
|
*/
|
|
*/
|
|
-asmlinkage void arm_smccc_hvc(unsigned long a0, unsigned long a1,
|
|
|
|
|
|
+asmlinkage void __arm_smccc_hvc(unsigned long a0, unsigned long a1,
|
|
unsigned long a2, unsigned long a3, unsigned long a4,
|
|
unsigned long a2, unsigned long a3, unsigned long a4,
|
|
unsigned long a5, unsigned long a6, unsigned long a7,
|
|
unsigned long a5, unsigned long a6, unsigned long a7,
|
|
- struct arm_smccc_res *res);
|
|
|
|
|
|
+ struct arm_smccc_res *res, struct arm_smccc_quirk *quirk);
|
|
|
|
+
|
|
|
|
+#define arm_smccc_smc(...) __arm_smccc_smc(__VA_ARGS__, NULL)
|
|
|
|
+
|
|
|
|
+#define arm_smccc_smc_quirk(...) __arm_smccc_smc(__VA_ARGS__)
|
|
|
|
+
|
|
|
|
+#define arm_smccc_hvc(...) __arm_smccc_hvc(__VA_ARGS__, NULL)
|
|
|
|
+
|
|
|
|
+#define arm_smccc_hvc_quirk(...) __arm_smccc_hvc(__VA_ARGS__)
|
|
|
|
|
|
#endif /*__LINUX_ARM_SMCCC_H*/
|
|
#endif /*__LINUX_ARM_SMCCC_H*/
|