|
@@ -44,9 +44,10 @@
|
|
|
#define FW_FEATURE_XDABR (1UL<<18)
|
|
|
#define FW_FEATURE_MULTITCE (1UL<<19)
|
|
|
#define FW_FEATURE_SPLPAR (1UL<<20)
|
|
|
+#define FW_FEATURE_ISERIES (1UL<<21)
|
|
|
|
|
|
enum {
|
|
|
- FW_FEATURE_PSERIES = FW_FEATURE_PFT | FW_FEATURE_TCE |
|
|
|
+ FW_FEATURE_PSERIES_POSSIBLE = FW_FEATURE_PFT | FW_FEATURE_TCE |
|
|
|
FW_FEATURE_SPRG0 | FW_FEATURE_DABR | FW_FEATURE_COPY |
|
|
|
FW_FEATURE_ASR | FW_FEATURE_DEBUG | FW_FEATURE_TERM |
|
|
|
FW_FEATURE_PERF | FW_FEATURE_DUMP | FW_FEATURE_INTERRUPT |
|
|
@@ -54,11 +55,25 @@ enum {
|
|
|
FW_FEATURE_VIO | FW_FEATURE_RDMA | FW_FEATURE_LLAN |
|
|
|
FW_FEATURE_BULK | FW_FEATURE_XDABR | FW_FEATURE_MULTITCE |
|
|
|
FW_FEATURE_SPLPAR,
|
|
|
+ FW_FEATURE_PSERIES_ALWAYS = 0,
|
|
|
+ FW_FEATURE_ISERIES_POSSIBLE = FW_FEATURE_ISERIES,
|
|
|
+ FW_FEATURE_ISERIES_ALWAYS = FW_FEATURE_ISERIES,
|
|
|
FW_FEATURE_POSSIBLE =
|
|
|
#ifdef CONFIG_PPC_PSERIES
|
|
|
- FW_FEATURE_PSERIES |
|
|
|
+ FW_FEATURE_PSERIES_POSSIBLE |
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_PPC_ISERIES
|
|
|
+ FW_FEATURE_ISERIES_POSSIBLE |
|
|
|
#endif
|
|
|
0,
|
|
|
+ FW_FEATURE_ALWAYS =
|
|
|
+#ifdef CONFIG_PPC_PSERIES
|
|
|
+ FW_FEATURE_PSERIES_ALWAYS &
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_PPC_ISERIES
|
|
|
+ FW_FEATURE_ISERIES_ALWAYS &
|
|
|
+#endif
|
|
|
+ FW_FEATURE_POSSIBLE,
|
|
|
};
|
|
|
|
|
|
/* This is used to identify firmware features which are available
|
|
@@ -68,7 +83,8 @@ extern unsigned long ppc64_firmware_features;
|
|
|
|
|
|
static inline unsigned long firmware_has_feature(unsigned long feature)
|
|
|
{
|
|
|
- return ppc64_firmware_features & feature & FW_FEATURE_POSSIBLE;
|
|
|
+ return (FW_FEATURE_ALWAYS & feature) ||
|
|
|
+ (FW_FEATURE_POSSIBLE & ppc64_firmware_features & feature);
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_PPC_PSERIES
|