diff options
author | Takashi Sakamoto <o-takashi@sakamocchi.jp> | 2022-05-08 15:33:32 +0900 |
---|---|---|
committer | 坂本 貴史 <o-takashi@sakamocchi.jp> | 2022-05-08 15:36:32 +0900 |
commit | 62ed285e4b456b18d347995325f5a2bc7c400408 (patch) | |
tree | 12a747721e362bcbf6e9dcfea74a704603219c9e | |
parent | 3850166fe0931f3063a0667f69ad10e5682730e0 (diff) | |
download | libhinoko-62ed285e4b456b18d347995325f5a2bc7c400408.tar.gz |
cycle_timer: add helper functions to compute value of CYCLE_TIMER register
The layout of CYCLE_TIMER register is defined in IEEE 1394 specification.
This commit adds helper function for constant value.
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
-rw-r--r-- | src/cycle_timer.c | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/src/cycle_timer.c b/src/cycle_timer.c index e3bd80c..b50f023 100644 --- a/src/cycle_timer.c +++ b/src/cycle_timer.c @@ -65,18 +65,41 @@ void hinoko_cycle_timer_get_clock_id(HinokoCycleTimer *self, gint *clock_id) *clock_id = self->clk_id; } +#define IEEE1394_CYCLE_TIMER_SEC_MASK 0xfe000000 +#define IEEE1394_CYCLE_TIMER_SEC_SHIFT 25 +#define IEEE1394_CYCLE_TIMER_CYCLE_MASK 0x01fff000 +#define IEEE1394_CYCLE_TIMER_CYCLE_SHIFT 12 +#define IEEE1394_CYCLE_TIMER_OFFSET_MASK 0x00000fff + +static guint ieee1394_cycle_timer_to_sec(guint32 cycle_timer) +{ + return (cycle_timer & IEEE1394_CYCLE_TIMER_SEC_MASK) >> IEEE1394_CYCLE_TIMER_SEC_SHIFT; +} + +static guint ieee1394_cycle_timer_to_cycle(guint32 cycle_timer) +{ + return (cycle_timer & IEEE1394_CYCLE_TIMER_CYCLE_MASK) >> IEEE1394_CYCLE_TIMER_CYCLE_SHIFT; +} + +static guint ieee1394_cycle_timer_to_offset(guint32 cycle_timer) +{ + return cycle_timer & IEEE1394_CYCLE_TIMER_OFFSET_MASK; +} + /** * hinoko_cycle_timer_get_cycle_timer: * @self: A [struct@CycleTimer]. * @cycle_timer: (array fixed-size=3)(out caller-allocates): The value of cycle timer register of * 1394 OHCI, including three elements; second, cycle, and offset. * - * Get the value of cycle timer in 1394 OHCI controller. + * Get the value of cycle timer in 1394 OHCI controller. The first element of array expresses the + * value of sec field, up to 127. The second element of array expresses the value of cycle field, + * up to 7999. The third element of array expresses the value of offset field, up to 3071. */ void hinoko_cycle_timer_get_cycle_timer(HinokoCycleTimer *self, guint16 cycle_timer[3]) { - cycle_timer[0] = (self->cycle_timer & 0xfe000000) >> 25; - cycle_timer[1] = (self->cycle_timer & 0x01fff000) >> 12; - cycle_timer[2] = self->cycle_timer & 0x00000fff; + cycle_timer[0] = ieee1394_cycle_timer_to_sec(self->cycle_timer); + cycle_timer[1] = ieee1394_cycle_timer_to_cycle(self->cycle_timer); + cycle_timer[2] = ieee1394_cycle_timer_to_offset(self->cycle_timer); } |