esp-hal/esp-phy/src/common_adapter.rs
Simon Neuenhausen 8e29b925cb
Split out PHY init into esp-phy crate. (#3892)
* Minimal infrastructure

* Implemented dig reg backup.

* usb bbpll

* Removed default feature.

* OS adapter tweaks

* Fixed S2 and implemented PhyController

* Added manual deinit.

* Fixed linker scripts and migrated esp-radio to esp-phy

* Fixed warnings.

* Fixed NPL

* Tried fixing NPL again

* Fixed ieee802154

* Fixed reading chip version of S3.

* fmt

* Added changelog entry

* Added changelog for esp-radio

* Deleted chip specific common adapters.

* Added docs and unstable

* Migrated cal data load/store to esp-phy

* Fixed PHY cal CI error

* Removed instability

* Removed feature from esp-phy

* fmt

* Fixed esp-sync docs.

* Removed log with CONFIG

* Removed nonreentrantmutex from common adapter

* Disable reset for radio blocks where required.

* Fixed cfg_if for s2

* fmt

* Added bt_bb_v2_init_cmplx to phy_provides.x

* Added CHANGELOG

* Moved EXTERN and fixed comment.

* Fixed lint

* Fixed common adapter again.

* Docs and Readme.

* Fixed ref count.

* This time pls.

* Added MAC time update CB for esp-radio

* fixed field init

* Fixed inconsistency in metadata

* Removed useless changelog entry

* Fixed S2.

* Swaped addr_of for &raw mut

* Properly initialize NVS

* Fixed lint

* Fixed C6

* Fixed remaining issues

* Fixed CI

* Added link

* Updated esp-wifi-sys in esp-phy

* Address reviews

* Renamed PHY lock

* Moved syscon let in common_adapter

* Fmt

* Remove critical_section

* Don't steal when not necessary

* Added esp-phy changelog to workflow

* Add cargo metadata for esp-phy

* Added reference to #4015

* Refixed Cargo.toml

---------

Co-authored-by: Dániel Buga <bugadani@gmail.com>
2025-09-19 14:14:25 +00:00

78 lines
1.8 KiB
Rust

use esp_hal::ram;
/// **************************************************************************
/// Name: phy_enter_critical
///
/// Description:
/// Enter critical state
///
/// Input Parameters:
/// None
///
/// Returned Value:
/// CPU PS value
///
/// *************************************************************************
#[ram]
#[unsafe(no_mangle)]
unsafe extern "C" fn __esp_phy_enter_critical() -> u32 {
trace!("phy_enter_critical");
unsafe { crate::ESP_PHY_LOCK.acquire().inner() }
}
/// **************************************************************************
/// Name: phy_exit_critical
///
/// Description:
/// Exit from critical state
///
/// Input Parameters:
/// level - CPU PS value
///
/// Returned Value:
/// None
///
/// *************************************************************************
#[ram]
#[unsafe(no_mangle)]
unsafe extern "C" fn __esp_phy_exit_critical(level: u32) {
trace!("phy_exit_critical {}", level);
unsafe {
let token = esp_sync::RestoreState::new(level);
crate::ESP_PHY_LOCK.release(token);
}
}
/// **************************************************************************
/// Name: esp_dport_access_reg_read
///
/// Description:
/// Read regitser value safely in SMP
///
/// Input Parameters:
/// reg - Register address
///
/// Returned Value:
/// Register value
///
/// *************************************************************************
#[ram]
#[unsafe(no_mangle)]
unsafe extern "C" fn __esp_phy_esp_dport_access_reg_read(reg: u32) -> u32 {
unsafe {
// trace!("esp_dport_access_reg_read {:x} => {:x}", reg, res);
(reg as *mut u32).read_volatile()
}
}
#[ram]
#[unsafe(no_mangle)]
unsafe extern "C" fn __esp_phy_rtc_get_xtal() -> u32 {
use esp_hal::clock::Clock;
let xtal = esp_hal::clock::RtcClock::xtal_freq();
xtal.mhz()
}