1.1 --- a/pkg/devices/lib/tcu/include/tcu-common.h Thu Feb 01 22:40:19 2024 +0100
1.2 +++ b/pkg/devices/lib/tcu/include/tcu-common.h Thu Feb 01 22:41:30 2024 +0100
1.3 @@ -36,13 +36,14 @@
1.4 {
1.5 protected:
1.6 uint8_t _channel;
1.7 + l4_cap_idx_t _irq;
1.8 Hw::Register_block<32> _regs;
1.9
1.10 uint32_t get_field(uint32_t reg, uint32_t mask, uint8_t shift);
1.11 void set_field(uint32_t reg, uint32_t mask, uint8_t shift, uint32_t value);
1.12
1.13 public:
1.14 - explicit Tcu_channel(l4_addr_t start, uint8_t channel);
1.15 + explicit Tcu_channel(l4_addr_t start, uint8_t channel, l4_cap_idx_t irq);
1.16
1.17 virtual void disable();
1.18 virtual void enable();
1.19 @@ -59,6 +60,18 @@
1.20 virtual void set_full_data_value(uint32_t value);
1.21 virtual uint32_t get_half_data_value();
1.22 virtual void set_half_data_value(uint32_t value);
1.23 +
1.24 + // Interrupt-related operations.
1.25 +
1.26 + virtual bool get_full_data_mask();
1.27 + virtual void set_full_data_mask(bool masked);
1.28 + virtual bool get_half_data_mask();
1.29 + virtual void set_half_data_mask(bool masked);
1.30 +
1.31 + virtual void ack_irq();
1.32 + virtual bool have_interrupt();
1.33 + virtual bool wait_for_irq();
1.34 + virtual bool wait_for_irq(unsigned int timeout);
1.35 };
1.36
1.37 // TCU device control.
1.38 @@ -70,12 +83,13 @@
1.39
1.40 virtual unsigned int num_channels() = 0;
1.41
1.42 - virtual Tcu_channel *_get_channel(l4_addr_t addr, uint8_t channel) = 0;
1.43 + virtual Tcu_channel *_get_channel(l4_addr_t addr, uint8_t channel,
1.44 + l4_cap_idx_t irq) = 0;
1.45
1.46 public:
1.47 explicit Tcu_chip(l4_addr_t start, l4_addr_t end);
1.48
1.49 - Tcu_channel *get_channel(uint8_t channel);
1.50 + Tcu_channel *get_channel(uint8_t channel, l4_cap_idx_t irq);
1.51 };
1.52
1.53 #endif /* __cplusplus */