drivers/net/wireless/mediatek/mt76/mt792x_acpi_sar.c
Source file repositories/reference/linux-study-clean/drivers/net/wireless/mediatek/mt76/mt792x_acpi_sar.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/wireless/mediatek/mt76/mt792x_acpi_sar.c- Extension
.c- Size
- 10970 bytes
- Lines
- 487
- Domain
- Driver Families
- Bucket
- drivers/net
- Inferred role
- Driver Families: exported/initcall integration point
- Status
- integration implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/acpi.hmt792x.h
Detected Declarations
function mt792x_acpi_readfunction mt792x_asar_acpi_read_mtclfunction mt792x_asar_acpi_read_mtdsfunction mt792x_asar_acpi_read_mtgsfunction mt792x_asar_acpi_read_mtfgfunction mt792x_init_acpi_sarfunction mt792x_asar_get_geo_pwrfunction mt792x_asar_range_pwrfunction mt792x_init_acpi_sar_powerfunction mt792x_acpi_get_flagsfunction mt792x_acpi_get_mtcl_map_v3function mt792x_acpi_get_mtcl_mapfunction mt792x_acpi_parse_mtcl_tbl_v3function mt792x_acpi_parse_mtcl_tblfunction mt792x_acpi_get_mtcl_confexport mt792x_init_acpi_sarexport mt792x_init_acpi_sar_powerexport mt792x_acpi_get_flagsexport mt792x_acpi_get_mtcl_conf
Annotated Snippet
if (!*tbl) {
ret = -ENOMEM;
goto free;
}
}
if (len)
*len = sar_root->package.count;
for (i = 0; i < sar_root->package.count; i++) {
union acpi_object *sar_unit = &sar_root->package.elements[i];
if (sar_unit->type != ACPI_TYPE_INTEGER)
break;
*(*tbl + i) = (u8)sar_unit->integer.value;
}
ret = i == sar_root->package.count ? 0 : -EINVAL;
free:
kfree(sar_root);
return ret;
}
/* MTCL : Country List Table for 6G band */
/* MTCL : Country List Table for 6G band and 11BE */
static int
mt792x_asar_acpi_read_mtcl(struct mt792x_dev *dev, u8 **table, u8 *version)
{
int len, ret;
ret = mt792x_acpi_read(dev, MT792x_ACPI_MTCL, table, &len);
if (ret)
return ret;
if (len == sizeof(struct mt792x_asar_cl))
*version = ((struct mt792x_asar_cl *)*table)->version;
else if (len == sizeof(struct mt792x_asar_cl_v3))
*version = ((struct mt792x_asar_cl_v3 *)*table)->version;
else
return -EINVAL;
return ret;
}
/* MTDS : Dynamic SAR Power Table */
static int
mt792x_asar_acpi_read_mtds(struct mt792x_dev *dev, u8 **table, u8 version)
{
int len, ret, sarlen, prelen, tblcnt;
bool enable;
ret = mt792x_acpi_read(dev, MT792x_ACPI_MTDS, table, &len);
if (ret)
return ret;
/* Table content validation */
switch (version) {
case 1:
enable = ((struct mt792x_asar_dyn *)*table)->enable;
sarlen = sizeof(struct mt792x_asar_dyn_limit);
prelen = sizeof(struct mt792x_asar_dyn);
break;
case 2:
enable = ((struct mt792x_asar_dyn_v2 *)*table)->enable;
sarlen = sizeof(struct mt792x_asar_dyn_limit_v2);
prelen = sizeof(struct mt792x_asar_dyn_v2);
break;
default:
return -EINVAL;
}
tblcnt = (len - prelen) / sarlen;
if (!enable ||
tblcnt > MT792x_ASAR_MAX_DYN || tblcnt < MT792x_ASAR_MIN_DYN)
return -EINVAL;
return 0;
}
/* MTGS : Geo SAR Power Table */
static int
mt792x_asar_acpi_read_mtgs(struct mt792x_dev *dev, u8 **table, u8 version)
{
int len, ret, sarlen, prelen, tblcnt;
ret = mt792x_acpi_read(dev, MT792x_ACPI_MTGS, table, &len);
if (ret)
return ret;
Annotation
- Immediate include surface: `linux/acpi.h`, `mt792x.h`.
- Detected declarations: `function mt792x_acpi_read`, `function mt792x_asar_acpi_read_mtcl`, `function mt792x_asar_acpi_read_mtds`, `function mt792x_asar_acpi_read_mtgs`, `function mt792x_asar_acpi_read_mtfg`, `function mt792x_init_acpi_sar`, `function mt792x_asar_get_geo_pwr`, `function mt792x_asar_range_pwr`, `function mt792x_init_acpi_sar_power`, `function mt792x_acpi_get_flags`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: integration implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.