[PATCH 1/3] efi_runtime: reuse the in-kernel time structure
Ivan Hu
ivan.hu at canonical.com
Wed Jul 6 09:51:46 UTC 2016
reuse the in-kernel time structure efi_time_t instead of making our own.
Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
---
efi_runtime/efi_runtime.c | 74 ++++++++++++-----------------------------------
efi_runtime/efi_runtime.h | 30 ++++---------------
2 files changed, 23 insertions(+), 81 deletions(-)
diff --git a/efi_runtime/efi_runtime.c b/efi_runtime/efi_runtime.c
index 115b1b5..4c83800 100644
--- a/efi_runtime/efi_runtime.c
+++ b/efi_runtime/efi_runtime.c
@@ -42,38 +42,6 @@ MODULE_LICENSE("GPL");
#define EFI_RUNTIME_ENABLED efi_enabled
#endif
-static void convert_from_efi_time(efi_time_t *eft, EFI_TIME *time)
-{
- memset(time, 0, sizeof(EFI_TIME));
- time->Year = eft->year;
- time->Month = eft->month;
- time->Day = eft->day;
- time->Hour = eft->hour;
- time->Minute = eft->minute;
- time->Second = eft->second;
- time->Pad1 = eft->pad1;
- time->Nanosecond = eft->nanosecond;
- time->TimeZone = eft->timezone;
- time->Daylight = eft->daylight;
- time->Pad2 = eft->pad2;
-}
-
-static void convert_to_efi_time(efi_time_t *eft, EFI_TIME *time)
-{
- memset(eft, 0, sizeof(*eft));
- eft->year = time->Year;
- eft->month = time->Month;
- eft->day = time->Day;
- eft->hour = time->Hour;
- eft->minute = time->Minute;
- eft->second = time->Second;
- eft->pad1 = time->Pad1;
- eft->nanosecond = time->Nanosecond;
- eft->timezone = time->TimeZone;
- eft->daylight = time->Daylight;
- eft->pad2 = time->Pad2;
-}
-
/*
* Count the bytes in 'str', including the terminating NULL.
*
@@ -332,13 +300,13 @@ static long efi_runtime_get_time(unsigned long arg)
struct efi_gettime gettime_local;
efi_status_t status;
efi_time_cap_t cap;
- efi_time_t eft;
+ efi_time_t efi_time;
gettime = (struct efi_gettime __user *)arg;
if (copy_from_user(&gettime_local, gettime, sizeof(gettime_local)))
return -EFAULT;
- status = efi.get_time(gettime_local.Time ? &eft : NULL,
+ status = efi.get_time(gettime_local.Time ? &efi_time : NULL,
gettime_local.Capabilities ? &cap : NULL);
if (put_user(status, gettime_local.status))
@@ -348,18 +316,18 @@ static long efi_runtime_get_time(unsigned long arg)
return -EINVAL;
}
if (gettime_local.Capabilities) {
- EFI_TIME_CAPABILITIES __user *cap_local;
+ efi_time_cap_t __user *cap_local;
- cap_local = (EFI_TIME_CAPABILITIES *)gettime_local.Capabilities;
+ cap_local = (efi_time_cap_t *)gettime_local.Capabilities;
if (put_user(cap.resolution,
- &(cap_local->Resolution)) ||
- put_user(cap.accuracy, &(cap_local->Accuracy)) ||
- put_user(cap.sets_to_zero,&(cap_local->SetsToZero)))
+ &(cap_local->resolution)) ||
+ put_user(cap.accuracy, &(cap_local->accuracy)) ||
+ put_user(cap.sets_to_zero,&(cap_local->sets_to_zero)))
return -EFAULT;
}
if (gettime_local.Time)
- return copy_to_user(gettime_local.Time, &eft,
- sizeof(EFI_TIME)) ? -EFAULT : 0;
+ return copy_to_user(gettime_local.Time, &efi_time,
+ sizeof(efi_time_t)) ? -EFAULT : 0;
return 0;
}
@@ -368,17 +336,15 @@ static long efi_runtime_set_time(unsigned long arg)
struct efi_settime __user *settime;
struct efi_settime settime_local;
efi_status_t status;
- EFI_TIME efi_time;
- efi_time_t eft;
+ efi_time_t efi_time;
settime = (struct efi_settime __user *)arg;
if (copy_from_user(&settime_local, settime, sizeof(settime_local)))
return -EFAULT;
if (copy_from_user(&efi_time, settime_local.Time,
- sizeof(EFI_TIME)))
+ sizeof(efi_time_t)))
return -EFAULT;
- convert_to_efi_time(&eft, &efi_time);
- status = efi.set_time(&eft);
+ status = efi.set_time(&efi_time);
if (put_user(status, settime_local.status))
return -EFAULT;
@@ -392,8 +358,7 @@ static long efi_runtime_get_waketime(unsigned long arg)
struct efi_getwakeuptime getwakeuptime_local;
unsigned char enabled, pending;
efi_status_t status;
- EFI_TIME efi_time;
- efi_time_t eft;
+ efi_time_t efi_time;
getwakeuptime = (struct efi_getwakeuptime __user *)arg;
if (copy_from_user(&getwakeuptime_local, getwakeuptime, sizeof(getwakeuptime_local)))
@@ -402,7 +367,7 @@ static long efi_runtime_get_waketime(unsigned long arg)
status = efi.get_wakeup_time(
getwakeuptime_local.Enabled ? (efi_bool_t *)&enabled : NULL,
getwakeuptime_local.Pending ? (efi_bool_t *)&pending : NULL,
- getwakeuptime_local.Time ? &eft : NULL);
+ getwakeuptime_local.Time ? &efi_time : NULL);
if (put_user(status, getwakeuptime_local.status))
return -EFAULT;
@@ -410,11 +375,10 @@ static long efi_runtime_get_waketime(unsigned long arg)
return -EINVAL;
if (getwakeuptime_local.Enabled && put_user(enabled, getwakeuptime_local.Enabled))
return -EFAULT;
- convert_from_efi_time(&eft, &efi_time);
if (getwakeuptime_local.Time)
return copy_to_user(getwakeuptime_local.Time, &efi_time,
- sizeof(EFI_TIME)) ? -EFAULT : 0;
+ sizeof(efi_time_t)) ? -EFAULT : 0;
return 0;
}
@@ -424,8 +388,7 @@ static long efi_runtime_set_waketime(unsigned long arg)
struct efi_setwakeuptime setwakeuptime_local;
unsigned char enabled;
efi_status_t status;
- EFI_TIME efi_time;
- efi_time_t eft;
+ efi_time_t efi_time;
setwakeuptime = (struct efi_setwakeuptime __user *)arg;
@@ -434,11 +397,10 @@ static long efi_runtime_set_waketime(unsigned long arg)
enabled = setwakeuptime_local.Enabled;
if (setwakeuptime_local.Time) {
- if (copy_from_user(&efi_time, setwakeuptime_local.Time, sizeof(EFI_TIME)))
+ if (copy_from_user(&efi_time, setwakeuptime_local.Time, sizeof(efi_time_t)))
return -EFAULT;
- convert_to_efi_time(&eft, &efi_time);
- status = efi.set_wakeup_time(enabled, &eft);
+ status = efi.set_wakeup_time(enabled, &efi_time);
} else {
status = efi.set_wakeup_time(enabled, NULL);
}
diff --git a/efi_runtime/efi_runtime.h b/efi_runtime/efi_runtime.h
index 092e842..b9177d4 100644
--- a/efi_runtime/efi_runtime.h
+++ b/efi_runtime/efi_runtime.h
@@ -30,26 +30,6 @@ typedef enum {
} EFI_RESET_TYPE;
typedef struct {
- uint16_t Year; /* 1900 â 9999 */
- uint8_t Month; /* 1 â 12 */
- uint8_t Day; /* 1 â 31 */
- uint8_t Hour; /* 0 â 23 */
- uint8_t Minute; /* 0 â 59 */
- uint8_t Second; /* 0 â 59 */
- uint8_t Pad1;
- uint32_t Nanosecond; /* 0 â 999,999,999 */
- int16_t TimeZone; /* -1440 to 1440 or 2047 */
- uint8_t Daylight;
- uint8_t Pad2;
-} __attribute__ ((packed)) EFI_TIME;
-
-typedef struct {
- uint32_t Resolution;
- uint32_t Accuracy;
- uint8_t SetsToZero;
-} __attribute__ ((packed)) EFI_TIME_CAPABILITIES;
-
-typedef struct {
efi_guid_t CapsuleGuid;
uint32_t HeaderSize;
uint32_t Flags;
@@ -90,26 +70,26 @@ struct efi_queryvariableinfo {
} __attribute__ ((packed));
struct efi_gettime {
- EFI_TIME *Time;
- EFI_TIME_CAPABILITIES *Capabilities;
+ efi_time_t *Time;
+ efi_time_cap_t *Capabilities;
uint64_t *status;
} __attribute__ ((packed));
struct efi_settime {
- EFI_TIME *Time;
+ efi_time_t *Time;
uint64_t *status;
} __attribute__ ((packed));
struct efi_getwakeuptime {
uint8_t *Enabled;
uint8_t *Pending;
- EFI_TIME *Time;
+ efi_time_t *Time;
uint64_t *status;
} __attribute__ ((packed));
struct efi_setwakeuptime {
uint8_t Enabled;
- EFI_TIME *Time;
+ efi_time_t *Time;
uint64_t *status;
} __attribute__ ((packed));
--
1.9.1
More information about the fwts-devel
mailing list