x86/vRTC: move and tidy convert_hour() and {to,from}_bcd()

This is to avoid the need for forward declarations, which in turn
addresses a violation of MISRA C:2012 Rule 8.3 ("All declarations of an
object or function shall use the same names and type qualifiers").

While doing so,
- drop inline (leaving the decision to the compiler),
- add const,
- add unsigned,
- correct style.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
This commit is contained in:
Jan Beulich committed 2023-07-21 08:31:09 +02:00
1 parent cd50483537
commit 60576722d0
1 file changed
+34 -33
+34 -33
View File
@@ -58,8 +58,6 @@ enum rtc_mode {
static void rtc_copy_date(RTCState *s);
static void rtc_set_time(RTCState *s);
static inline int from_bcd(RTCState *s, int a);
static inline int convert_hour(RTCState *s, int hour);
static void rtc_update_irq(RTCState *s)
{
@@ -246,6 +244,40 @@ static void cf_check rtc_update_timer2(void *opaque)
spin_unlock(&s->lock);
}
static unsigned int to_bcd(const RTCState *s, unsigned int a)
{
if ( s->hw.cmos_data[RTC_REG_B] & RTC_DM_BINARY )
return a;
return ((a / 10) << 4) | (a % 10);
}
static unsigned int from_bcd(const RTCState *s, unsigned int a)
{
if ( s->hw.cmos_data[RTC_REG_B] & RTC_DM_BINARY )
return a;
return ((a >> 4) * 10) + (a & 0x0f);
}
/*
* Hours in 12 hour mode are in 1-12 range, not 0-11. So we need convert it
* before use.
*/
static unsigned int convert_hour(const RTCState *s, unsigned int raw)
{
unsigned int hour = from_bcd(s, raw & 0x7f);
if ( !(s->hw.cmos_data[RTC_REG_B] & RTC_24H) )
{
hour %= 12;
if ( raw & 0x80 )
hour += 12;
}
return hour;
}
/* handle alarm timer */
static void alarm_timer_update(RTCState *s)
{
@@ -541,37 +573,6 @@ static int rtc_ioport_write(void *opaque, uint32_t addr, uint32_t data)
return 1;
}
static inline int to_bcd(RTCState *s, int a)
{
if ( s->hw.cmos_data[RTC_REG_B] & RTC_DM_BINARY )
return a;
else
return ((a / 10) << 4) | (a % 10);
}
static inline int from_bcd(RTCState *s, int a)
{
if ( s->hw.cmos_data[RTC_REG_B] & RTC_DM_BINARY )
return a;
else
return ((a >> 4) * 10) + (a & 0x0f);
}
/* Hours in 12 hour mode are in 1-12 range, not 0-11.
* So we need convert it before using it*/
static inline int convert_hour(RTCState *s, int raw)
{
int hour = from_bcd(s, raw & 0x7f);
if (!(s->hw.cmos_data[RTC_REG_B] & RTC_24H))
{
hour %= 12;
if (raw & 0x80)
hour += 12;
}
return hour;
}
static void rtc_set_time(RTCState *s)
{
struct tm *tm = &s->current_tm;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.