4 #include <osmocom/core/msgb.h>
6 #include <layer1/mframe_sched.h>
9 NOTE: Re-enabling interrupts causes an IRQ while processing the same IRQ.
10 Use local_firq_save and local_irq_restore instead!
12 /* When altering data structures used by L1 Sync part, we need to
13 * make sure to temporarily disable IRQ/FIQ to keep data consistent */
14 static inline void l1a_lock_sync(void)
16 arm_disable_interrupts();
19 static inline void l1a_unlock_sync(void)
21 arm_enable_interrupts();
25 /* safely enable a message into the L1S TX queue */
26 void l1a_txq_msgb_enq(struct llist_head *queue, struct msgb *msg);
27 void l1a_meas_msgb_set(struct msgb *msg);
29 /* safely count messages in the L1S TX queue */
30 int l1a_txq_msgb_count(struct llist_head *queue);
32 /* flush all pending msgb */
33 void l1a_txq_msgb_flush(struct llist_head *queue);
36 void l1a_rach_req(uint16_t offset, uint8_t combined, uint8_t ra);
38 /* schedule frequency change */
39 void l1a_freq_req(uint32_t fn_sched);
41 /* Enable a repeating multiframe task */
42 void l1a_mftask_enable(enum mframe_task task);
44 /* Disable a repeating multiframe task */
45 void l1a_mftask_disable(enum mframe_task task);
48 uint8_t l1a_tch_mode_set(uint8_t mode);
50 /* Execute pending L1A completions */
51 void l1a_compl_execute(void);
53 /* Initialize asynchronous part of Layer1 */