[PATCH 2/6] efi_runtime: redefine all uint*_t types by following the header efi.h

Colin Ian King colin.king at canonical.com
Fri Aug 19 07:46:34 UTC 2016


On 19/08/16 08:34, ivanhu wrote:
> 
> 
> On 2016年08月19日 15:17, Colin Ian King wrote:
>> On 19/08/16 03:57, Ivan Hu wrote:
>>> Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
>>> ---
>>>   efi_runtime/efi_runtime.c | 42 +++++++++++++++++---------------
>>>   efi_runtime/efi_runtime.h | 62
>>> +++++++++++++++++++++++------------------------
>>>   2 files changed, 54 insertions(+), 50 deletions(-)
>>>
>>> diff --git a/efi_runtime/efi_runtime.c b/efi_runtime/efi_runtime.c
>>> index daf8625..46baedf 100644
>>> --- a/efi_runtime/efi_runtime.c
>>> +++ b/efi_runtime/efi_runtime.c
>>> @@ -47,16 +47,16 @@ MODULE_LICENSE("GPL");
>>>    * Note this function returns the number of *bytes*, not the number of
>>>    * ucs2 characters.
>>>    */
>>> -static inline size_t user_ucs2_strsize(uint16_t  __user *str)
>>> +static inline size_t user_ucs2_strsize(efi_char16_t  __user *str)
>>>   {
>>> -    uint16_t *s = str, c;
>>> +    efi_char16_t *s = str, c;
>>>       size_t len;
>>>         if (!str)
>>>           return 0;
>>>         /* Include terminating NULL */
>>> -    len = sizeof(uint16_t);
>>> +    len = sizeof(efi_char16_t);
>>>         if (get_user(c, s++)) {
>>>           /* Can't read userspace memory for size */
>>> @@ -68,7 +68,7 @@ static inline size_t user_ucs2_strsize(uint16_t 
>>> __user *str)
>>>               /* Can't read userspace memory for size */
>>>               return 0;
>>>           }
>>> -        len += sizeof(uint16_t);
>>> +        len += sizeof(efi_char16_t);
>>>       }
>>>       return len;
>>>   }
>>> @@ -77,9 +77,10 @@ static inline size_t user_ucs2_strsize(uint16_t 
>>> __user *str)
>>>    * Allocate a buffer and copy a ucs2 string from user space into it.
>>>    */
>>>   static inline int
>>> -copy_ucs2_from_user_len(uint16_t **dst, uint16_t __user *src, size_t
>>> len)
>>> +copy_ucs2_from_user_len(efi_char16_t **dst, efi_char16_t __user *src,
>>> +            size_t len)
>>>   {
>>> -    uint16_t *buf;
>>> +    efi_char16_t *buf;
>>>         if (!src) {
>>>           *dst = NULL;
>>> @@ -109,7 +110,8 @@ copy_ucs2_from_user_len(uint16_t **dst, uint16_t
>>> __user *src, size_t len)
>>>    *
>>>    * Just a wrap for user_ucs2_strsize
>>>    */
>>> -static inline int get_ucs2_strsize_from_user(uint16_t __user *src,
>>> size_t *len)
>>> +static inline int
>>> +get_ucs2_strsize_from_user(efi_char16_t __user *src, size_t *len)
>>>   {
>>>       if (!access_ok(VERIFY_READ, src, 1))
>>>           return -EFAULT;
>>> @@ -133,7 +135,8 @@ static inline int
>>> get_ucs2_strsize_from_user(uint16_t __user *src, size_t *len)
>>>    *
>>>    * It is the caller's responsibility to free 'dst'.
>>>    */
>>> -static inline int copy_ucs2_from_user(uint16_t **dst, uint16_t
>>> __user *src)
>>> +static inline int
>>> +copy_ucs2_from_user(efi_char16_t **dst, efi_char16_t __user *src)
>>>   {
>>>       size_t len;
>>>   @@ -156,7 +159,7 @@ static inline int copy_ucs2_from_user(uint16_t
>>> **dst, uint16_t __user *src)
>>>    * 'len' specifies the number of bytes to copy.
>>>    */
>>>   static inline int
>>> -copy_ucs2_to_user_len(uint16_t __user *dst, uint16_t *src, size_t len)
>>> +copy_ucs2_to_user_len(efi_char16_t __user *dst, efi_char16_t *src,
>>> size_t len)
>>>   {
>>>       if (!src)
>>>           return 0;
>>> @@ -174,8 +177,8 @@ static long efi_runtime_get_variable(unsigned
>>> long arg)
>>>       unsigned long datasize, prev_datasize, *dz;
>>>       efi_guid_t vendor_guid, *vd = NULL;
>>>       efi_status_t status;
>>> -    uint16_t *name = NULL;
>>> -    uint32_t attr, *at;
>>> +    efi_char16_t *name = NULL;
>>> +    u32 attr, *at;
>>>       void *data = NULL;
>>>       int rv = 0;
>>>   @@ -251,7 +254,7 @@ static long efi_runtime_set_variable(unsigned
>>> long arg)
>>>       struct efi_setvariable setvariable_local;
>>>       efi_guid_t vendor_guid;
>>>       efi_status_t status;
>>> -    uint16_t *name = NULL;
>>> +    efi_char16_t *name = NULL;
>>>       void *data;
>>>       int rv;
>>>   @@ -265,7 +268,8 @@ static long efi_runtime_set_variable(unsigned
>>> long arg)
>>>           return -EFAULT;
>>>         if (setvariable_local.variable_name) {
>>> -        rv = copy_ucs2_from_user(&name,
>>> setvariable_local.variable_name);
>>> +        rv = copy_ucs2_from_user(&name,
>>> +                    setvariable_local.variable_name);
>>>           if (rv)
>>>               return rv;
>>>       }
>>> @@ -356,7 +360,7 @@ static long efi_runtime_get_waketime(unsigned
>>> long arg)
>>>   {
>>>       struct efi_getwakeuptime __user *getwakeuptime;
>>>       struct efi_getwakeuptime getwakeuptime_local;
>>> -    unsigned char enabled, pending;
>>> +    efi_bool_t enabled, pending;
>>>       efi_status_t status;
>>>       efi_time_t efi_time;
>>>   @@ -388,7 +392,7 @@ static long efi_runtime_set_waketime(unsigned
>>> long arg)
>>>   {
>>>       struct efi_setwakeuptime __user *setwakeuptime;
>>>       struct efi_setwakeuptime setwakeuptime_local;
>>> -    unsigned char enabled;
>>> +    efi_bool_t enabled;
>>>       efi_status_t status;
>>>       efi_time_t efi_time;
>>>   @@ -423,7 +427,7 @@ static long
>>> efi_runtime_get_nextvariablename(unsigned long arg)
>>>       efi_status_t status;
>>>       efi_guid_t *vd = NULL;
>>>       efi_guid_t vendor_guid;
>>> -    uint16_t *name = NULL;
>>> +    efi_char16_t *name = NULL;
>>>       int rv;
>>>         getnextvariablename = (struct efi_getnextvariablename
>>> @@ -509,7 +513,7 @@ static long
>>> efi_runtime_get_nexthighmonocount(unsigned long arg)
>>>       struct efi_getnexthighmonotoniccount __user
>>> *getnexthighmonotoniccount;
>>>       struct efi_getnexthighmonotoniccount
>>> getnexthighmonotoniccount_local;
>>>       efi_status_t status;
>>> -    uint32_t count;
>>> +    u32 count;
>>>         getnexthighmonotoniccount = (struct
>>>               efi_getnexthighmonotoniccount __user *)arg;
>>> @@ -542,7 +546,7 @@ static long
>>> efi_runtime_query_variableinfo(unsigned long arg)
>>>       struct efi_queryvariableinfo __user *queryvariableinfo;
>>>       struct efi_queryvariableinfo queryvariableinfo_local;
>>>       efi_status_t status;
>>> -    uint64_t max_storage, remaining, max_size;
>>> +    u64 max_storage, remaining, max_size;
>>>         queryvariableinfo = (struct efi_queryvariableinfo __user *)arg;
>>>   @@ -578,7 +582,7 @@ static long
>>> efi_runtime_query_capsulecaps(unsigned long arg)
>>>       struct efi_querycapsulecapabilities caps;
>>>       efi_capsule_header_t *capsules;
>>>       efi_status_t status;
>>> -    uint64_t max_size;
>>> +    u64 max_size;
>>>       int i, reset_type;
>>>       int rv;
>>>   diff --git a/efi_runtime/efi_runtime.h b/efi_runtime/efi_runtime.h
>>> index 9167688..b3da40e 100644
>>> --- a/efi_runtime/efi_runtime.h
>>> +++ b/efi_runtime/efi_runtime.h
>>> @@ -25,73 +25,73 @@
>>>   #include <linux/efi.h>
>>>     struct efi_getvariable {
>>> -    uint16_t    *variable_name;
>>> +    efi_char16_t    *variable_name;
>>>       efi_guid_t    *vendor_guid;
>>> -    uint32_t    *attributes;
>>> -    uint64_t    *data_size;
>>> +    u32        *attributes;
>>> +    unsigned long    *data_size;
>> I know UEFI is currently just 64 bit support, so unsigned longs are 64
>> bits in this case, but why aren't we using u64 instead? Any reason?
> Just simply follow the type defined on efi.h
> 
> typedef efi_status_t efi_get_variable_t (efi_char16_t *name, efi_guid_t
> *vendor, u32 *attr,
>                      unsigned long *data_size, void *data);

Ah, thanks for the clarification. That makes sense.

>>
>>>       void        *data;
>>> -    uint64_t    *status;
>>> +    efi_status_t    *status;
>>>   } __packed;
>>>     struct efi_setvariable {
>>> -    uint16_t    *variable_name;
>>> +    efi_char16_t    *variable_name;
>>>       efi_guid_t    *vendor_guid;
>>> -    uint32_t    attributes;
>>> -    uint64_t    data_size;
>>> +    u32        attributes;
>>> +    unsigned long    data_size;
>>>       void        *data;
>>> -    uint64_t    *status;
>>> +    efi_status_t    *status;
>>>   } __packed;
>>>     struct efi_getnextvariablename {
>>> -    uint64_t    *variable_name_size;
>>> -    uint16_t    *variable_name;
>>> +    unsigned long    *variable_name_size;
>>> +    efi_char16_t    *variable_name;
>>>       efi_guid_t    *vendor_guid;
>>> -    uint64_t    *status;
>>> +    efi_status_t    *status;
>>>   } __packed;
>>>     struct efi_queryvariableinfo {
>>> -    uint32_t    attributes;
>>> -    uint64_t    *maximum_variable_storage_size;
>>> -    uint64_t    *remaining_variable_storage_size;
>>> -    uint64_t    *maximum_variable_size;
>>> -    uint64_t    *status;
>>> +    u32        attributes;
>>> +    u64        *maximum_variable_storage_size;
>>> +    u64        *remaining_variable_storage_size;
>>> +    u64        *maximum_variable_size;
>>> +    efi_status_t    *status;
>>>   } __packed;
>>>     struct efi_gettime {
>>> -    efi_time_t        *time;
>>> -    efi_time_cap_t        *capabilities;
>>> -    uint64_t        *status;
>>> +    efi_time_t    *time;
>>> +    efi_time_cap_t    *capabilities;
>>> +    efi_status_t    *status;
>>>   } __packed;
>>>     struct efi_settime {
>>> -    efi_time_t        *time;
>>> -    uint64_t        *status;
>>> +    efi_time_t    *time;
>>> +    efi_status_t    *status;
>>>   } __packed;
>>>     struct efi_getwakeuptime {
>>> -    uint8_t        *enabled;
>>> -    uint8_t        *pending;
>>> +    efi_bool_t    *enabled;
>>> +    efi_bool_t    *pending;
>>>       efi_time_t    *time;
>>> -    uint64_t    *status;
>>> +    efi_status_t    *status;
>>>   } __packed;
>>>     struct efi_setwakeuptime {
>>> -    uint8_t        enabled;
>>> +    efi_bool_t    enabled;
>>>       efi_time_t    *time;
>>> -    uint64_t    *status;
>>> +    efi_status_t    *status;
>>>   } __packed;
>>>     struct efi_getnexthighmonotoniccount {
>>> -    uint32_t    *high_count;
>>> -    uint64_t    *status;
>>> +    u32        *high_count;
>>> +    efi_status_t    *status;
>>>   } __packed;
>>>     struct efi_querycapsulecapabilities {
>>>       efi_capsule_header_t    **capsule_header_array;
>>> -    uint64_t        capsule_count;
>>> -    uint64_t        *maximum_capsule_size;
>>> +    unsigned long        capsule_count;
>>> +    u64            *maximum_capsule_size;
>>>       int            *reset_type;
>>> -    uint64_t        *status;
>>> +    efi_status_t        *status;
>>>   } __packed;
>>>     /* ioctl calls that are permitted to the /dev/efi_runtime
>>> interface. */
>>>
> 




More information about the fwts-devel mailing list