aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxoviat <[email protected]>2023-05-27 15:05:23 -0500
committerxoviat <[email protected]>2023-05-27 15:05:23 -0500
commit37e104a6b380c3c7ec20346a44b11050476a6116 (patch)
treec7385bd0acc159c01b7cce9c63e3c273d480cd28
parent7e501855fc2ee98bef6be56244c4587610dbdc32 (diff)
stm32/ipcc: refactor tl_mbox
-rw-r--r--embassy-stm32/src/tl_mbox/ble.rs14
-rw-r--r--embassy-stm32/src/tl_mbox/channels.rs4
-rw-r--r--embassy-stm32/src/tl_mbox/evt.rs4
-rw-r--r--embassy-stm32/src/tl_mbox/mm.rs10
-rw-r--r--embassy-stm32/src/tl_mbox/mod.rs46
-rw-r--r--embassy-stm32/src/tl_mbox/shci.rs2
-rw-r--r--embassy-stm32/src/tl_mbox/sys.rs16
7 files changed, 51 insertions, 45 deletions
diff --git a/embassy-stm32/src/tl_mbox/ble.rs b/embassy-stm32/src/tl_mbox/ble.rs
index 5cc0bb200..062377999 100644
--- a/embassy-stm32/src/tl_mbox/ble.rs
+++ b/embassy-stm32/src/tl_mbox/ble.rs
@@ -1,5 +1,3 @@
1use core::mem::MaybeUninit;
2
3use embassy_futures::block_on; 1use embassy_futures::block_on;
4 2
5use super::cmd::CmdSerial; 3use super::cmd::CmdSerial;
@@ -10,17 +8,17 @@ use super::{
10 channels, BleTable, BLE_CMD_BUFFER, CS_BUFFER, EVT_QUEUE, HCI_ACL_DATA_BUFFER, TL_BLE_TABLE, TL_CHANNEL, 8 channels, BleTable, BLE_CMD_BUFFER, CS_BUFFER, EVT_QUEUE, HCI_ACL_DATA_BUFFER, TL_BLE_TABLE, TL_CHANNEL,
11 TL_REF_TABLE, 9 TL_REF_TABLE,
12}; 10};
13use crate::ipcc::Ipcc;
14use crate::tl_mbox::cmd::CmdPacket; 11use crate::tl_mbox::cmd::CmdPacket;
12use crate::tl_mbox::ipcc::Ipcc;
15 13
16pub struct Ble; 14pub struct Ble;
17 15
18impl Ble { 16impl Ble {
19 pub(crate) fn new() -> Self { 17 pub fn enable() {
20 unsafe { 18 unsafe {
21 LinkedListNode::init_head(EVT_QUEUE.as_mut_ptr()); 19 LinkedListNode::init_head(EVT_QUEUE.as_mut_ptr());
22 20
23 TL_BLE_TABLE = MaybeUninit::new(BleTable { 21 TL_BLE_TABLE.as_mut_ptr().write_volatile(BleTable {
24 pcmd_buffer: BLE_CMD_BUFFER.as_mut_ptr().cast(), 22 pcmd_buffer: BLE_CMD_BUFFER.as_mut_ptr().cast(),
25 pcs_buffer: CS_BUFFER.as_mut_ptr().cast(), 23 pcs_buffer: CS_BUFFER.as_mut_ptr().cast(),
26 pevt_queue: EVT_QUEUE.as_ptr().cast(), 24 pevt_queue: EVT_QUEUE.as_ptr().cast(),
@@ -29,11 +27,9 @@ impl Ble {
29 } 27 }
30 28
31 Ipcc::c1_set_rx_channel(channels::cpu2::IPCC_BLE_EVENT_CHANNEL, true); 29 Ipcc::c1_set_rx_channel(channels::cpu2::IPCC_BLE_EVENT_CHANNEL, true);
32
33 Ble
34 } 30 }
35 31
36 pub(crate) fn evt_handler() { 32 pub fn evt_handler() {
37 unsafe { 33 unsafe {
38 let mut node_ptr = core::ptr::null_mut(); 34 let mut node_ptr = core::ptr::null_mut();
39 let node_ptr_ptr: *mut _ = &mut node_ptr; 35 let node_ptr_ptr: *mut _ = &mut node_ptr;
@@ -51,7 +47,7 @@ impl Ble {
51 Ipcc::c1_clear_flag_channel(channels::cpu2::IPCC_BLE_EVENT_CHANNEL); 47 Ipcc::c1_clear_flag_channel(channels::cpu2::IPCC_BLE_EVENT_CHANNEL);
52 } 48 }
53 49
54 pub(crate) fn send_cmd(buf: &[u8]) { 50 pub fn send_cmd(buf: &[u8]) {
55 unsafe { 51 unsafe {
56 let pcmd_buffer: *mut CmdPacket = (*TL_REF_TABLE.assume_init().ble_table).pcmd_buffer; 52 let pcmd_buffer: *mut CmdPacket = (*TL_REF_TABLE.assume_init().ble_table).pcmd_buffer;
57 let pcmd_serial: *mut CmdSerial = &mut (*pcmd_buffer).cmd_serial; 53 let pcmd_serial: *mut CmdSerial = &mut (*pcmd_buffer).cmd_serial;
diff --git a/embassy-stm32/src/tl_mbox/channels.rs b/embassy-stm32/src/tl_mbox/channels.rs
index aaa6ce177..25a065ba4 100644
--- a/embassy-stm32/src/tl_mbox/channels.rs
+++ b/embassy-stm32/src/tl_mbox/channels.rs
@@ -50,7 +50,7 @@
50//! 50//!
51 51
52pub mod cpu1 { 52pub mod cpu1 {
53 use crate::ipcc::IpccChannel; 53 use crate::tl_mbox::ipcc::IpccChannel;
54 54
55 // Not used currently but reserved 55 // Not used currently but reserved
56 pub const IPCC_BLE_CMD_CHANNEL: IpccChannel = IpccChannel::Channel1; 56 pub const IPCC_BLE_CMD_CHANNEL: IpccChannel = IpccChannel::Channel1;
@@ -75,7 +75,7 @@ pub mod cpu1 {
75} 75}
76 76
77pub mod cpu2 { 77pub mod cpu2 {
78 use crate::ipcc::IpccChannel; 78 use crate::tl_mbox::ipcc::IpccChannel;
79 79
80 pub const IPCC_BLE_EVENT_CHANNEL: IpccChannel = IpccChannel::Channel1; 80 pub const IPCC_BLE_EVENT_CHANNEL: IpccChannel = IpccChannel::Channel1;
81 pub const IPCC_SYSTEM_EVENT_CHANNEL: IpccChannel = IpccChannel::Channel2; 81 pub const IPCC_SYSTEM_EVENT_CHANNEL: IpccChannel = IpccChannel::Channel2;
diff --git a/embassy-stm32/src/tl_mbox/evt.rs b/embassy-stm32/src/tl_mbox/evt.rs
index 04feb3e68..47a8b72fd 100644
--- a/embassy-stm32/src/tl_mbox/evt.rs
+++ b/embassy-stm32/src/tl_mbox/evt.rs
@@ -3,7 +3,7 @@ use core::mem::MaybeUninit;
3use super::cmd::{AclDataPacket, AclDataSerial}; 3use super::cmd::{AclDataPacket, AclDataSerial};
4use super::consts::TlPacketType; 4use super::consts::TlPacketType;
5use super::{PacketHeader, TL_EVT_HEADER_SIZE}; 5use super::{PacketHeader, TL_EVT_HEADER_SIZE};
6use crate::tl_mbox::mm; 6use crate::tl_mbox::mm::MemoryManager;
7 7
8/// the payload of [`Evt`] for a command status event 8/// the payload of [`Evt`] for a command status event
9#[derive(Copy, Clone)] 9#[derive(Copy, Clone)]
@@ -131,6 +131,6 @@ impl EvtBox {
131 131
132impl Drop for EvtBox { 132impl Drop for EvtBox {
133 fn drop(&mut self) { 133 fn drop(&mut self) {
134 mm::MemoryManager::evt_drop(self.ptr); 134 MemoryManager::evt_drop(self.ptr);
135 } 135 }
136} 136}
diff --git a/embassy-stm32/src/tl_mbox/mm.rs b/embassy-stm32/src/tl_mbox/mm.rs
index 6e0818cf1..e28a6aa0c 100644
--- a/embassy-stm32/src/tl_mbox/mm.rs
+++ b/embassy-stm32/src/tl_mbox/mm.rs
@@ -1,22 +1,20 @@
1use core::mem::MaybeUninit;
2
3use super::evt::EvtPacket; 1use super::evt::EvtPacket;
4use super::unsafe_linked_list::LinkedListNode; 2use super::unsafe_linked_list::LinkedListNode;
5use super::{ 3use super::{
6 channels, MemManagerTable, BLE_SPARE_EVT_BUF, EVT_POOL, FREE_BUFF_QUEUE, LOCAL_FREE_BUF_QUEUE, POOL_SIZE, 4 channels, MemManagerTable, BLE_SPARE_EVT_BUF, EVT_POOL, FREE_BUFF_QUEUE, LOCAL_FREE_BUF_QUEUE, POOL_SIZE,
7 SYS_SPARE_EVT_BUF, TL_MEM_MANAGER_TABLE, TL_REF_TABLE, 5 SYS_SPARE_EVT_BUF, TL_MEM_MANAGER_TABLE, TL_REF_TABLE,
8}; 6};
9use crate::ipcc::Ipcc; 7use crate::tl_mbox::ipcc::Ipcc;
10 8
11pub struct MemoryManager; 9pub struct MemoryManager;
12 10
13impl MemoryManager { 11impl MemoryManager {
14 pub fn new() -> Self { 12 pub fn enable() {
15 unsafe { 13 unsafe {
16 LinkedListNode::init_head(FREE_BUFF_QUEUE.as_mut_ptr()); 14 LinkedListNode::init_head(FREE_BUFF_QUEUE.as_mut_ptr());
17 LinkedListNode::init_head(LOCAL_FREE_BUF_QUEUE.as_mut_ptr()); 15 LinkedListNode::init_head(LOCAL_FREE_BUF_QUEUE.as_mut_ptr());
18 16
19 TL_MEM_MANAGER_TABLE = MaybeUninit::new(MemManagerTable { 17 TL_MEM_MANAGER_TABLE.as_mut_ptr().write_volatile(MemManagerTable {
20 spare_ble_buffer: BLE_SPARE_EVT_BUF.as_ptr().cast(), 18 spare_ble_buffer: BLE_SPARE_EVT_BUF.as_ptr().cast(),
21 spare_sys_buffer: SYS_SPARE_EVT_BUF.as_ptr().cast(), 19 spare_sys_buffer: SYS_SPARE_EVT_BUF.as_ptr().cast(),
22 ble_pool: EVT_POOL.as_ptr().cast(), 20 ble_pool: EVT_POOL.as_ptr().cast(),
@@ -26,8 +24,6 @@ impl MemoryManager {
26 traces_pool_size: 0, 24 traces_pool_size: 0,
27 }); 25 });
28 } 26 }
29
30 MemoryManager
31 } 27 }
32 28
33 pub fn evt_handler() { 29 pub fn evt_handler() {
diff --git a/embassy-stm32/src/tl_mbox/mod.rs b/embassy-stm32/src/tl_mbox/mod.rs
index 1c927efa0..616f7dc56 100644
--- a/embassy-stm32/src/tl_mbox/mod.rs
+++ b/embassy-stm32/src/tl_mbox/mod.rs
@@ -1,7 +1,9 @@
1use core::mem::MaybeUninit; 1use core::mem::MaybeUninit;
2 2
3use atomic_polyfill::{compiler_fence, Ordering};
3use bit_field::BitField; 4use bit_field::BitField;
4use embassy_cortex_m::interrupt::{Interrupt, InterruptExt}; 5use embassy_cortex_m::interrupt::{Interrupt, InterruptExt};
6use embassy_hal_common::{into_ref, Peripheral, PeripheralRef};
5use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; 7use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
6use embassy_sync::channel::Channel; 8use embassy_sync::channel::Channel;
7 9
@@ -13,13 +15,16 @@ use self::shci::{shci_ble_init, ShciBleInitCmdParam};
13use self::sys::Sys; 15use self::sys::Sys;
14use self::unsafe_linked_list::LinkedListNode; 16use self::unsafe_linked_list::LinkedListNode;
15use crate::interrupt; 17use crate::interrupt;
16use crate::ipcc::{Config, Ipcc}; 18use crate::peripherals::IPCC;
19pub use crate::tl_mbox::ipcc::Config;
20use crate::tl_mbox::ipcc::Ipcc;
17 21
18mod ble; 22mod ble;
19mod channels; 23mod channels;
20mod cmd; 24mod cmd;
21mod consts; 25mod consts;
22mod evt; 26mod evt;
27mod ipcc;
23mod mm; 28mod mm;
24mod shci; 29mod shci;
25mod sys; 30mod sys;
@@ -60,6 +65,8 @@ pub struct ReceiveInterruptHandler {}
60 65
61impl interrupt::Handler<interrupt::IPCC_C1_RX> for ReceiveInterruptHandler { 66impl interrupt::Handler<interrupt::IPCC_C1_RX> for ReceiveInterruptHandler {
62 unsafe fn on_interrupt() { 67 unsafe fn on_interrupt() {
68 // info!("ipcc rx interrupt");
69
63 if Ipcc::is_rx_pending(channels::cpu2::IPCC_SYSTEM_EVENT_CHANNEL) { 70 if Ipcc::is_rx_pending(channels::cpu2::IPCC_SYSTEM_EVENT_CHANNEL) {
64 sys::Sys::evt_handler(); 71 sys::Sys::evt_handler();
65 } else if Ipcc::is_rx_pending(channels::cpu2::IPCC_BLE_EVENT_CHANNEL) { 72 } else if Ipcc::is_rx_pending(channels::cpu2::IPCC_BLE_EVENT_CHANNEL) {
@@ -74,6 +81,8 @@ pub struct TransmitInterruptHandler {}
74 81
75impl interrupt::Handler<interrupt::IPCC_C1_TX> for TransmitInterruptHandler { 82impl interrupt::Handler<interrupt::IPCC_C1_TX> for TransmitInterruptHandler {
76 unsafe fn on_interrupt() { 83 unsafe fn on_interrupt() {
84 // info!("ipcc tx interrupt");
85
77 if Ipcc::is_tx_pending(channels::cpu1::IPCC_SYSTEM_CMD_RSP_CHANNEL) { 86 if Ipcc::is_tx_pending(channels::cpu1::IPCC_SYSTEM_CMD_RSP_CHANNEL) {
78 // TODO: handle this case 87 // TODO: handle this case
79 let _ = sys::Sys::cmd_evt_handler(); 88 let _ = sys::Sys::cmd_evt_handler();
@@ -307,21 +316,24 @@ static mut HCI_ACL_DATA_BUFFER: MaybeUninit<[u8; TL_PACKET_HEADER_SIZE + 5 + 251
307// TODO: get a better size, this is a placeholder 316// TODO: get a better size, this is a placeholder
308pub(crate) static TL_CHANNEL: Channel<CriticalSectionRawMutex, EvtBox, 5> = Channel::new(); 317pub(crate) static TL_CHANNEL: Channel<CriticalSectionRawMutex, EvtBox, 5> = Channel::new();
309 318
310pub struct TlMbox { 319pub struct TlMbox<'d> {
311 _sys: Sys, 320 _ipcc: PeripheralRef<'d, IPCC>,
312 _ble: Ble,
313 _mm: MemoryManager,
314} 321}
315 322
316impl TlMbox { 323impl<'d> TlMbox<'d> {
317 /// initializes low-level transport between CPU1 and BLE stack on CPU2 324 /// initializes low-level transport between CPU1 and BLE stack on CPU2
318 pub fn init( 325 pub fn new(
326 ipcc: impl Peripheral<P = IPCC> + 'd,
319 _irqs: impl interrupt::Binding<interrupt::IPCC_C1_RX, ReceiveInterruptHandler> 327 _irqs: impl interrupt::Binding<interrupt::IPCC_C1_RX, ReceiveInterruptHandler>
320 + interrupt::Binding<interrupt::IPCC_C1_TX, TransmitInterruptHandler>, 328 + interrupt::Binding<interrupt::IPCC_C1_TX, TransmitInterruptHandler>,
321 config: Config, 329 config: Config,
322 ) -> TlMbox { 330 ) -> Self {
331 into_ref!(ipcc);
332
323 unsafe { 333 unsafe {
324 TL_REF_TABLE = MaybeUninit::new(RefTable { 334 compiler_fence(Ordering::AcqRel);
335
336 TL_REF_TABLE.as_mut_ptr().write_volatile(RefTable {
325 device_info_table: TL_DEVICE_INFO_TABLE.as_ptr(), 337 device_info_table: TL_DEVICE_INFO_TABLE.as_ptr(),
326 ble_table: TL_BLE_TABLE.as_ptr(), 338 ble_table: TL_BLE_TABLE.as_ptr(),
327 thread_table: TL_THREAD_TABLE.as_ptr(), 339 thread_table: TL_THREAD_TABLE.as_ptr(),
@@ -334,6 +346,10 @@ impl TlMbox {
334 ble_lld_table: TL_BLE_LLD_TABLE.as_ptr(), 346 ble_lld_table: TL_BLE_LLD_TABLE.as_ptr(),
335 }); 347 });
336 348
349 // info!("TL_REF_TABLE addr: {:x}", TL_REF_TABLE.as_ptr() as usize);
350
351 compiler_fence(Ordering::AcqRel);
352
337 TL_SYS_TABLE = MaybeUninit::zeroed(); 353 TL_SYS_TABLE = MaybeUninit::zeroed();
338 TL_DEVICE_INFO_TABLE = MaybeUninit::zeroed(); 354 TL_DEVICE_INFO_TABLE = MaybeUninit::zeroed();
339 TL_BLE_TABLE = MaybeUninit::zeroed(); 355 TL_BLE_TABLE = MaybeUninit::zeroed();
@@ -352,13 +368,15 @@ impl TlMbox {
352 CS_BUFFER = MaybeUninit::zeroed(); 368 CS_BUFFER = MaybeUninit::zeroed();
353 BLE_CMD_BUFFER = MaybeUninit::zeroed(); 369 BLE_CMD_BUFFER = MaybeUninit::zeroed();
354 HCI_ACL_DATA_BUFFER = MaybeUninit::zeroed(); 370 HCI_ACL_DATA_BUFFER = MaybeUninit::zeroed();
371
372 compiler_fence(Ordering::AcqRel);
355 } 373 }
356 374
357 Ipcc::init(config); 375 Ipcc::enable(config);
358 376
359 let _sys = Sys::new(); 377 Sys::enable();
360 let _ble = Ble::new(); 378 Ble::enable();
361 let _mm = MemoryManager::new(); 379 MemoryManager::enable();
362 380
363 // enable interrupts 381 // enable interrupts
364 unsafe { crate::interrupt::IPCC_C1_RX::steal() }.unpend(); 382 unsafe { crate::interrupt::IPCC_C1_RX::steal() }.unpend();
@@ -367,7 +385,7 @@ impl TlMbox {
367 unsafe { crate::interrupt::IPCC_C1_RX::steal() }.enable(); 385 unsafe { crate::interrupt::IPCC_C1_RX::steal() }.enable();
368 unsafe { crate::interrupt::IPCC_C1_TX::steal() }.enable(); 386 unsafe { crate::interrupt::IPCC_C1_TX::steal() }.enable();
369 387
370 TlMbox { _sys, _ble, _mm } 388 Self { _ipcc: ipcc }
371 } 389 }
372 390
373 pub fn wireless_fw_info(&self) -> Option<WirelessFwInfoTable> { 391 pub fn wireless_fw_info(&self) -> Option<WirelessFwInfoTable> {
diff --git a/embassy-stm32/src/tl_mbox/shci.rs b/embassy-stm32/src/tl_mbox/shci.rs
index 3d7e994ae..6b5b2dd19 100644
--- a/embassy-stm32/src/tl_mbox/shci.rs
+++ b/embassy-stm32/src/tl_mbox/shci.rs
@@ -3,7 +3,7 @@
3use super::cmd::CmdPacket; 3use super::cmd::CmdPacket;
4use super::consts::TlPacketType; 4use super::consts::TlPacketType;
5use super::{channels, TL_CS_EVT_SIZE, TL_EVT_HEADER_SIZE, TL_PACKET_HEADER_SIZE, TL_SYS_TABLE}; 5use super::{channels, TL_CS_EVT_SIZE, TL_EVT_HEADER_SIZE, TL_PACKET_HEADER_SIZE, TL_SYS_TABLE};
6use crate::ipcc::Ipcc; 6use crate::tl_mbox::ipcc::Ipcc;
7 7
8const SCHI_OPCODE_BLE_INIT: u16 = 0xfc66; 8const SCHI_OPCODE_BLE_INIT: u16 = 0xfc66;
9pub const TL_BLE_EVT_CS_PACKET_SIZE: usize = TL_EVT_HEADER_SIZE + TL_CS_EVT_SIZE; 9pub const TL_BLE_EVT_CS_PACKET_SIZE: usize = TL_EVT_HEADER_SIZE + TL_CS_EVT_SIZE;
diff --git a/embassy-stm32/src/tl_mbox/sys.rs b/embassy-stm32/src/tl_mbox/sys.rs
index 79e257148..9685fb920 100644
--- a/embassy-stm32/src/tl_mbox/sys.rs
+++ b/embassy-stm32/src/tl_mbox/sys.rs
@@ -1,5 +1,3 @@
1use core::mem::MaybeUninit;
2
3use embassy_futures::block_on; 1use embassy_futures::block_on;
4 2
5use super::cmd::{CmdPacket, CmdSerial}; 3use super::cmd::{CmdPacket, CmdSerial};
@@ -7,27 +5,25 @@ use super::consts::TlPacketType;
7use super::evt::{CcEvt, EvtBox, EvtSerial}; 5use super::evt::{CcEvt, EvtBox, EvtSerial};
8use super::unsafe_linked_list::LinkedListNode; 6use super::unsafe_linked_list::LinkedListNode;
9use super::{channels, SysTable, SYSTEM_EVT_QUEUE, SYS_CMD_BUF, TL_CHANNEL, TL_REF_TABLE, TL_SYS_TABLE}; 7use super::{channels, SysTable, SYSTEM_EVT_QUEUE, SYS_CMD_BUF, TL_CHANNEL, TL_REF_TABLE, TL_SYS_TABLE};
10use crate::ipcc::Ipcc; 8use crate::tl_mbox::ipcc::Ipcc;
11 9
12pub struct Sys; 10pub struct Sys;
13 11
14impl Sys { 12impl Sys {
15 pub(crate) fn new() -> Self { 13 pub fn enable() {
16 unsafe { 14 unsafe {
17 LinkedListNode::init_head(SYSTEM_EVT_QUEUE.as_mut_ptr()); 15 LinkedListNode::init_head(SYSTEM_EVT_QUEUE.as_mut_ptr());
18 16
19 TL_SYS_TABLE = MaybeUninit::new(SysTable { 17 TL_SYS_TABLE.as_mut_ptr().write_volatile(SysTable {
20 pcmd_buffer: SYS_CMD_BUF.as_mut_ptr(), 18 pcmd_buffer: SYS_CMD_BUF.as_mut_ptr(),
21 sys_queue: SYSTEM_EVT_QUEUE.as_ptr(), 19 sys_queue: SYSTEM_EVT_QUEUE.as_ptr(),
22 }); 20 });
23 } 21 }
24 22
25 Ipcc::c1_set_rx_channel(channels::cpu2::IPCC_SYSTEM_EVENT_CHANNEL, true); 23 Ipcc::c1_set_rx_channel(channels::cpu2::IPCC_SYSTEM_EVENT_CHANNEL, true);
26
27 Sys
28 } 24 }
29 25
30 pub(crate) fn evt_handler() { 26 pub fn evt_handler() {
31 unsafe { 27 unsafe {
32 let mut node_ptr = core::ptr::null_mut(); 28 let mut node_ptr = core::ptr::null_mut();
33 let node_ptr_ptr: *mut _ = &mut node_ptr; 29 let node_ptr_ptr: *mut _ = &mut node_ptr;
@@ -46,7 +42,7 @@ impl Sys {
46 Ipcc::c1_clear_flag_channel(channels::cpu2::IPCC_SYSTEM_EVENT_CHANNEL); 42 Ipcc::c1_clear_flag_channel(channels::cpu2::IPCC_SYSTEM_EVENT_CHANNEL);
47 } 43 }
48 44
49 pub(crate) fn cmd_evt_handler() -> CcEvt { 45 pub fn cmd_evt_handler() -> CcEvt {
50 Ipcc::c1_set_tx_channel(channels::cpu1::IPCC_SYSTEM_CMD_RSP_CHANNEL, false); 46 Ipcc::c1_set_tx_channel(channels::cpu1::IPCC_SYSTEM_CMD_RSP_CHANNEL, false);
51 47
52 // ST's command response data structure is really convoluted. 48 // ST's command response data structure is really convoluted.
@@ -68,7 +64,7 @@ impl Sys {
68 } 64 }
69 65
70 #[allow(dead_code)] 66 #[allow(dead_code)]
71 pub(crate) fn send_cmd(buf: &[u8]) { 67 pub fn send_cmd(buf: &[u8]) {
72 unsafe { 68 unsafe {
73 // TODO: check this 69 // TODO: check this
74 let cmd_buffer = &mut *(*TL_REF_TABLE.assume_init().sys_table).pcmd_buffer; 70 let cmd_buffer = &mut *(*TL_REF_TABLE.assume_init().sys_table).pcmd_buffer;