[PATCH 1/9] iosys-map: add new accessor interfaces and use them internally.

Thomas Zimmermann tzimmermann at suse.de
Thu May 22 14:00:15 UTC 2025


Hi

Am 22.05.25 um 15:34 schrieb Lucas De Marchi:
[...]
>>
>> We should encourage users to the other helpers for interacting with 
>> iosys-map structures instead of decoding them manually. OTOH there 
>> are cases where decoding them by hand is clearly better. I'd suggest 
>> to prefix the new helpers with __ so mark them an internal/special.
>
> From the other patches there are quite a few cases that would be using
> "internal"  API. From those there are just a few cases in which we'd
> have a direct translation to existing API... so I wouldn't make this
> internal when they are clearly needed externally.

FTR I'm fine with either.

Best regards
Thomas

>
> Lucas De Marchi
>
>>
>> Best regards
>> Thomas
>>
>>>  /**
>>>   * IOSYS_MAP_INIT_VADDR - Initializes struct iosys_map to an 
>>> address in system memory
>>>   * @vaddr_:    A system-memory address
>>> @@ -234,9 +249,9 @@ static inline bool iosys_map_is_equal(const 
>>> struct iosys_map *lhs,
>>>   */
>>>  static inline bool iosys_map_is_null(const struct iosys_map *map)
>>>  {
>>> -    if (map->is_iomem)
>>> -        return !map->vaddr_iomem;
>>> -    return !map->vaddr;
>>> +    if (iosys_map_is_iomem(map))
>>> +        return !iosys_map_ioptr(map);
>>> +    return !iosys_map_ptr(map);
>>>  }
>>>  /**
>>> @@ -286,10 +301,10 @@ static inline void iosys_map_clear(struct 
>>> iosys_map *map)
>>>  static inline void iosys_map_memcpy_to(struct iosys_map *dst, 
>>> size_t dst_offset,
>>>                         const void *src, size_t len)
>>>  {
>>> -    if (dst->is_iomem)
>>> -        memcpy_toio(dst->vaddr_iomem + dst_offset, src, len);
>>> +    if (iosys_map_is_iomem(dst))
>>> +        memcpy_toio(iosys_map_ioptr(dst) + dst_offset, src, len);
>>>      else
>>> -        memcpy(dst->vaddr + dst_offset, src, len);
>>> +        memcpy(iosys_map_ptr(dst) + dst_offset, src, len);
>>>  }
>>>  /**
>>> @@ -306,10 +321,10 @@ static inline void iosys_map_memcpy_to(struct 
>>> iosys_map *dst, size_t dst_offset,
>>>  static inline void iosys_map_memcpy_from(void *dst, const struct 
>>> iosys_map *src,
>>>                       size_t src_offset, size_t len)
>>>  {
>>> -    if (src->is_iomem)
>>> -        memcpy_fromio(dst, src->vaddr_iomem + src_offset, len);
>>> +    if (iosys_map_is_iomem(src))
>>> +        memcpy_fromio(dst, iosys_map_ioptr(src) + src_offset, len);
>>>      else
>>> -        memcpy(dst, src->vaddr + src_offset, len);
>>> +        memcpy(dst, iosys_map_ptr(src) + src_offset, len);
>>>  }
>>>  /**
>>> @@ -322,7 +337,7 @@ static inline void iosys_map_memcpy_from(void 
>>> *dst, const struct iosys_map *src,
>>>   */
>>>  static inline void iosys_map_incr(struct iosys_map *map, size_t incr)
>>>  {
>>> -    if (map->is_iomem)
>>> +    if (iosys_map_is_iomem(map))
>>>          map->vaddr_iomem += incr;
>>>      else
>>>          map->vaddr += incr;
>>> @@ -341,10 +356,10 @@ static inline void iosys_map_incr(struct 
>>> iosys_map *map, size_t incr)
>>>  static inline void iosys_map_memset(struct iosys_map *dst, size_t 
>>> offset,
>>>                      int value, size_t len)
>>>  {
>>> -    if (dst->is_iomem)
>>> -        memset_io(dst->vaddr_iomem + offset, value, len);
>>> +    if (iosys_map_is_iomem(dst))
>>> +        memset_io(iosys_map_ioptr(dst) + offset, value, len);
>>>      else
>>> -        memset(dst->vaddr + offset, value, len);
>>> +        memset(iosys_map_ptr(dst) + offset, value, len);
>>>  }
>>>  #ifdef CONFIG_64BIT
>>> @@ -393,10 +408,10 @@ static inline void iosys_map_memset(struct 
>>> iosys_map *dst, size_t offset,
>>>   */
>>>  #define iosys_map_rd(map__, offset__, type__) ({                    \
>>>      type__ val_;                                    \
>>> -    if ((map__)->is_iomem) {                            \
>>> -        __iosys_map_rd_io(val_, (map__)->vaddr_iomem + (offset__), 
>>> type__);    \
>>> +    if (iosys_map_is_iomem(map__)) {                        \
>>> +        __iosys_map_rd_io(val_, iosys_map_ioptr(map__) + 
>>> (offset__), type__);    \
>>>      } else {                                    \
>>> -        __iosys_map_rd_sys(val_, (map__)->vaddr + (offset__), 
>>> type__);        \
>>> +        __iosys_map_rd_sys(val_, iosys_map_ptr(map__) + (offset__), 
>>> type__);    \
>>>      }                                        \
>>>      val_;                                        \
>>>  })
>>> @@ -415,10 +430,10 @@ static inline void iosys_map_memset(struct 
>>> iosys_map *dst, size_t offset,
>>>   */
>>>  #define iosys_map_wr(map__, offset__, type__, val__) 
>>> ({                    \
>>>      type__ val_ = (val__);                                \
>>> -    if ((map__)->is_iomem) {                            \
>>> -        __iosys_map_wr_io(val_, (map__)->vaddr_iomem + (offset__), 
>>> type__);    \
>>> +    if (iosys_map_is_iomem(map__)) {                        \
>>> +        __iosys_map_wr_io(val_, iosys_map_ioptr(map__) + 
>>> (offset__), type__);    \
>>>      } else {                                    \
>>> -        __iosys_map_wr_sys(val_, (map__)->vaddr + (offset__), 
>>> type__);        \
>>> +        __iosys_map_wr_sys(val_, iosys_map_ptr(map__) + (offset__), 
>>> type__);    \
>>>      }                                        \
>>>  })
>>
>> -- 
>> -- 
>> Thomas Zimmermann
>> Graphics Driver Developer
>> SUSE Software Solutions Germany GmbH
>> Frankenstrasse 146, 90461 Nuernberg, Germany
>> GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
>> HRB 36809 (AG Nuernberg)
>>

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)



More information about the dri-devel mailing list