IWL_BIOS_TABLE_LOADER(wgds_table);
 IWL_BIOS_TABLE_LOADER(ppag_table);
 IWL_BIOS_TABLE_LOADER_DATA(tas_table, struct iwl_tas_data);
+IWL_BIOS_TABLE_LOADER_DATA(pwr_limit, u64);
+
 
 static const struct dmi_system_id dmi_ppag_approved_list[] = {
        { .ident = "HP",
 
        kfree(uefi_tas);
        return ret;
 }
+
+int iwl_uefi_get_pwr_limit(struct iwl_fw_runtime *fwrt,
+                          u64 *dflt_pwr_limit)
+{
+       struct uefi_cnv_var_splc *data;
+       int ret = 0;
+
+       data = iwl_uefi_get_verified_variable(fwrt->trans, IWL_UEFI_SPLC_NAME,
+                                             "SPLC", sizeof(*data), NULL);
+       if (IS_ERR(data))
+               return -EINVAL;
+
+       if (data->revision != IWL_UEFI_SPLC_REVISION) {
+               ret = -EINVAL;
+               IWL_DEBUG_RADIO(fwrt, "Unsupported UEFI SPLC revision:%d\n",
+                               data->revision);
+               goto out;
+       }
+       *dflt_pwr_limit = data->default_pwr_limit;
+out:
+       kfree(data);
+       return ret;
+}
 
 #define IWL_UEFI_WGDS_NAME             L"UefiCnvWlanWGDS"
 #define IWL_UEFI_PPAG_NAME             L"UefiCnvWlanPPAG"
 #define IWL_UEFI_WTAS_NAME             L"UefiCnvWlanWTAS"
+#define IWL_UEFI_SPLC_NAME             L"UefiCnvWlanSPLC"
+
 
 #define IWL_SGOM_MAP_SIZE              339
 #define IWL_UATS_MAP_SIZE              339
 #define IWL_UEFI_MIN_PPAG_REV          1
 #define IWL_UEFI_MAX_PPAG_REV          3
 #define IWL_UEFI_WTAS_REVISION         1
+#define IWL_UEFI_SPLC_REVISION         0
 
 struct pnvm_sku_package {
        u8 rev;
        u16 black_list[IWL_WTAS_BLACK_LIST_MAX];
 } __packed;
 
+/* struct uefi_cnv_var_splc - SPLC tabled as defined in UEFI
+ * @revision: the revision of the table
+ * @default_pwr_limit: The default maximum power per device
+ */
+struct uefi_cnv_var_splc {
+       u8 revision;
+       u32 default_pwr_limit;
+} __packed;
+
 /*
  * This is known to be broken on v4.19 and to work on v5.4.  Until we
  * figure out why this is the case and how to make it work, simply
 int iwl_uefi_get_ppag_table(struct iwl_fw_runtime *fwrt);
 int iwl_uefi_get_tas_table(struct iwl_fw_runtime *fwrt,
                           struct iwl_tas_data *data);
+int iwl_uefi_get_pwr_limit(struct iwl_fw_runtime *fwrt,
+                          u64 *dflt_pwr_limit);
 #else /* CONFIG_EFI */
 static inline void *iwl_uefi_get_pnvm(struct iwl_trans *trans, size_t *len)
 {
 {
        return -ENOENT;
 }
+
+static inline int iwl_uefi_get_pwr_limit(struct iwl_fw_runtime *fwrt,
+                                        u64 *dflt_pwr_limit)
+{
+       *dflt_pwr_limit = 0;
+       return 0;
+}
 #endif /* CONFIG_EFI */
 
 #if defined(CONFIG_EFI) && defined(CONFIG_ACPI)