Well, we want to encourage applications to make use of the APIs rather than
the #defines since that provides a more flexible interface and is more
consistent with the rest of ODP.  I originally thought to rename the
#defines from ODP_CONFIG_xxx to _ODP_CONFIG_xxx to emphasize that the
#defines are intended for internal rather than external use, however a
number of our examples reference them directly for things like array
dimensioning.

Worth discussing this further.  Any others have input to this?

On Tue, Jul 21, 2015 at 11:57 AM, Nicolas Morey-Chaisemartin <
[email protected]> wrote:

>  They currently do not need to edit include/odp/api/config.h.
> I ran into the issue yesterday and realized that you can override those
> settings from platform/<name>/include/odp/config.h already.
> Because users are supposed to include odp/<name>.h which in turn includes
> odp/api/<name.h>, it is quite simple to override global settings this way.
>
> I'm not against this patch although it's a bit of shame that every
> platform will have to duplicate all the file (including static inline
> functions) to change the define value.
>
> Nicolas
>
> On 07/21/2015 06:51 PM, Bill Fischofer wrote:
>
> The problem is twofold:
>
>  1. include/odp/api/ is supposed to contain pubic APIs that each platform
> implements.  As such, having linux-generic #defines in the config.h file in
> this location is inconsistent.  So this patch introduces actual APIs that
> are platform independent.  So odp_config_pools() tells you the number of
> pools on this platform.
>
>  2. At the same time, some programs use the #defines directly to do
> things like dimension arrays, so these #defines (as well as the
> implementations of the public config APIs now live in
> platform/<name>/include/odp/config.h
>
>  So no change for applications, however now each platform can easily
> define their own limits without having to edit the include/odp/api/config.h
> file.
>
> On Tue, Jul 21, 2015 at 11:45 AM, Nicolas Morey-Chaisemartin <
> <[email protected]>[email protected]> wrote:
>
>>  Just for my information, why do we need this?
>>
>>
>> On 07/21/2015 06:42 PM, Bill Fischofer wrote:
>>
>>  Please ignore this.  Resubmitting with proper API-NEXT tag.
>>
>> On Tue, Jul 21, 2015 at 11:40 AM, Bill Fischofer <
>> <[email protected]>[email protected]> wrote:
>>
>>> Move platform-specific #defines for limits from the public API to
>>> the platform directory and add public APIs for each of them.
>>>
>>> Signed-off-by: Bill Fischofer < <[email protected]>
>>> [email protected]>
>>>
>>> ---
>>>  include/odp/api/config.h                    |  61 ++++++-----
>>>  platform/linux-generic/include/odp/config.h | 156
>>> ++++++++++++++++++++++++++++
>>>  2 files changed, 192 insertions(+), 25 deletions(-)
>>>
>>> diff --git a/include/odp/api/config.h b/include/odp/api/config.h
>>> index b5c8fdd..a57c76b 100644
>>> --- a/include/odp/api/config.h
>>> +++ b/include/odp/api/config.h
>>> @@ -19,50 +19,58 @@ extern "C" {
>>>  #endif
>>>
>>>  /** @defgroup odp_config ODP CONFIG
>>> - *  Macro for maximum number of resources in ODP.
>>> + *  Platform-specific configuration limits.
>>>   *  @{
>>>   */
>>>
>>>  /**
>>>   * Maximum number of threads
>>> + * @return The maximum number of threads supported by this platform
>>>   */
>>> -#define ODP_CONFIG_MAX_THREADS  128
>>> +int odp_config_max_threads(void);
>>>
>>>  /**
>>>   * Maximum number of pools
>>> + * @return The maximum number of pools supported by this platform
>>>   */
>>> -#define ODP_CONFIG_POOLS        16
>>> +int odp_config_pools(void);
>>>
>>>  /**
>>>   * Maximum number of queues
>>> + * @return The maximum number of queues supported by this platform
>>>   */
>>> -#define ODP_CONFIG_QUEUES       1024
>>> +int odp_config_queues(void);
>>>
>>>  /**
>>>   * Number of scheduling priorities
>>> + * @return The number of scheduling priorities supported by this
>>> platform
>>>   */
>>> -#define ODP_CONFIG_SCHED_PRIOS  8
>>> +int odp_config_sched_prios(void);
>>>
>>>  /**
>>>   * Maximum number of packet IO resources
>>> + * @return The maximum number of packet I/O resources supported by this
>>> + * platform
>>>   */
>>> -#define ODP_CONFIG_PKTIO_ENTRIES 64
>>> +int odp_config_pktio_entries(void);
>>>
>>>  /**
>>>   * Minimum buffer alignment
>>>   *
>>> - * This defines the minimum supported buffer alignment. Requests for
>>> values
>>> - * below this will be rounded up to this value.
>>> + * @return The minimum buffer alignment supported by this platform
>>> + * @note Requests for values below this will be rounded up to this
>>> value.
>>>   */
>>> -#define ODP_CONFIG_BUFFER_ALIGN_MIN 16
>>> +int odp_config_buffer_align_min(void);
>>>
>>>  /**
>>>   * Maximum buffer alignment
>>>   *
>>>   * This defines the maximum supported buffer alignment. Requests for
>>> values
>>>   * above this will fail.
>>> + *
>>> + * @return The maximum buffer alignment supported by this platform
>>>   */
>>> -#define ODP_CONFIG_BUFFER_ALIGN_MAX (4*1024)
>>> +int odp_config_buffer_align_max(void);
>>>
>>>  /**
>>>   * Default packet headroom
>>> @@ -72,11 +80,9 @@ extern "C" {
>>>   * allocated packets. Implementations may reserve a larger than minimum
>>> headroom
>>>   * size e.g. due to HW or a protocol specific alignment requirement.
>>>   *
>>> - * @internal In linux-generic implementation:
>>> - * The default value (66) allows a 1500-byte packet to be received into
>>> a single
>>> - * segment with Ethernet offset alignment and room for some header
>>> expansion.
>>> + * @return Default packet headroom in bytes
>>>   */
>>> -#define ODP_CONFIG_PACKET_HEADROOM 66
>>> +int odp_config_packet_headroom(void);
>>>
>>>  /**
>>>   * Default packet tailroom
>>> @@ -84,10 +90,11 @@ extern "C" {
>>>   * This defines the minimum number of tailroom bytes that newly created
>>> packets
>>>   * have by default. The default apply to both ODP packet input and user
>>>   * allocated packets. Implementations are free to add to this as desired
>>> - * without restriction. Note that most implementations will
>>> automatically
>>> - * consider any unused portion of the last segment of a packet as
>>> tailroom
>>> + * without restriction.
>>> + *
>>> + * @return The default packet tailroom in bytes
>>>   */
>>> -#define ODP_CONFIG_PACKET_TAILROOM 0
>>> +int odp_config_packet_tailroom(void);
>>>
>>>  /**
>>>   * Minimum packet segment length
>>> @@ -95,8 +102,10 @@ extern "C" {
>>>   * This defines the minimum packet segment buffer length in bytes. The
>>> user
>>>   * defined segment length (seg_len in odp_pool_param_t) will be rounded
>>> up into
>>>   * this value.
>>> + *
>>> + * @return The minimum packet seg_len supported by this platform
>>>   */
>>> -#define ODP_CONFIG_PACKET_SEG_LEN_MIN (1598)
>>> +int odp_config_packet_seg_len_min(void);
>>>
>>>  /**
>>>   * Maximum packet segment length
>>> @@ -104,28 +113,30 @@ extern "C" {
>>>   * This defines the maximum packet segment buffer length in bytes. The
>>> user
>>>   * defined segment length (seg_len in odp_pool_param_t) must not be
>>> larger than
>>>   * this.
>>> + *
>>> + * @return The maximum packet seg_len supported by this platform
>>>   */
>>> -#define ODP_CONFIG_PACKET_SEG_LEN_MAX (64*1024)
>>> +int odp_config_packet_seg_len_max(void);
>>>
>>>  /**
>>>   * Maximum packet buffer length
>>>   *
>>>   * This defines the maximum number of bytes that can be stored into a
>>> packet
>>> - * (maximum return value of odp_packet_buf_len()). Attempts to allocate
>>> + * (maximum return value of odp_packet_buf_len(void)). Attempts to
>>> allocate
>>>   * (including default head- and tailrooms) or extend packets to sizes
>>> larger
>>>   * than this limit will fail.
>>>   *
>>> - * @internal In linux-generic implementation:
>>> - * - The value MUST be an integral number of segments
>>> - * - The value SHOULD be large enough to accommodate jumbo packets (9K)
>>> + * @return The maximum packet buffer length supported by this platform
>>>   */
>>> -#define ODP_CONFIG_PACKET_BUF_LEN_MAX (ODP_CONFIG_PACKET_SEG_LEN_MIN*6)
>>> +int odp_config_packet_buf_len_max(void);
>>>
>>>  /** Maximum number of shared memory blocks.
>>>   *
>>>   * This the the number of separate SHM areas that can be reserved
>>> concurrently
>>> + *
>>> + * @return The maximum number of shm areas supported by this platform
>>>   */
>>> -#define ODP_CONFIG_SHM_BLOCKS (ODP_CONFIG_POOLS + 48)
>>> +int odp_config_shm_blocks(void);
>>>
>>>  /**
>>>   * @}
>>> diff --git a/platform/linux-generic/include/odp/config.h
>>> b/platform/linux-generic/include/odp/config.h
>>> index 6fecd38..016397e 100644
>>> --- a/platform/linux-generic/include/odp/config.h
>>> +++ b/platform/linux-generic/include/odp/config.h
>>> @@ -17,6 +17,162 @@
>>>  extern "C" {
>>>  #endif
>>>
>>> +/**
>>> + * Maximum number of threads
>>> + */
>>> +#define ODP_CONFIG_MAX_THREADS 128
>>> +static inline int odp_config_max_threads(void)
>>> +{
>>> +       return ODP_CONFIG_MAX_THREADS;
>>> +}
>>> +
>>> +/**
>>> + * Maximum number of pools
>>> + */
>>> +#define ODP_CONFIG_POOLS 16
>>> +static inline int odp_config_pools(void)
>>> +{
>>> +       return ODP_CONFIG_POOLS;
>>> +}
>>> +
>>> +/**
>>> + * Maximum number of queues
>>> + */
>>> +#define ODP_CONFIG_QUEUES 1024
>>> +static inline int odp_config_queues(void)
>>> +{
>>> +       return ODP_CONFIG_QUEUES;
>>> +}
>>> +
>>> +/**
>>> + * Number of scheduling priorities
>>> + */
>>> +#define ODP_CONFIG_SCHED_PRIOS 8
>>> +static inline int odp_config_sched_prios(void)
>>> +{
>>> +       return ODP_CONFIG_SCHED_PRIOS;
>>> +}
>>> +
>>> +/**
>>> + * Maximum number of packet IO resources
>>> + */
>>> +#define ODP_CONFIG_PKTIO_ENTRIES 64
>>> +static inline int odp_config_pktio_entries(void)
>>> +{
>>> +       return ODP_CONFIG_PKTIO_ENTRIES;
>>> +}
>>> +
>>> +/**
>>> + * Minimum buffer alignment
>>> + *
>>> + * This defines the minimum supported buffer alignment. Requests for
>>> values
>>> + * below this will be rounded up to this value.
>>> + */
>>> +#define ODP_CONFIG_BUFFER_ALIGN_MIN 16
>>> +static inline int odp_config_buffer_align_min(void)
>>> +{
>>> +       return ODP_CONFIG_BUFFER_ALIGN_MIN;
>>> +}
>>> +
>>> +/**
>>> + * Maximum buffer alignment
>>> + *
>>> + * This defines the maximum supported buffer alignment. Requests for
>>> values
>>> + * above this will fail.
>>> + */
>>> +#define ODP_CONFIG_BUFFER_ALIGN_MAX (4*1024)
>>> +static inline int odp_config_buffer_align_max(void)
>>> +{
>>> +       return ODP_CONFIG_BUFFER_ALIGN_MAX;
>>> +}
>>> +
>>> +/**
>>> + * Default packet headroom
>>> + *
>>> + * This defines the minimum number of headroom bytes that newly created
>>> packets
>>> + * have by default. The default apply to both ODP packet input and user
>>> + * allocated packets. Implementations may reserve a larger than minimum
>>> headroom
>>> + * size e.g. due to HW or a protocol specific alignment requirement.
>>> + *
>>> + * @internal In linux-generic implementation:
>>> + * The default value (66) allows a 1500-byte packet to be received into
>>> a single
>>> + * segment with Ethernet offset alignment and room for some header
>>> expansion.
>>> + */
>>> +#define ODP_CONFIG_PACKET_HEADROOM 66
>>> +static inline int odp_config_packet_headroom(void)
>>> +{
>>> +       return ODP_CONFIG_PACKET_HEADROOM;
>>> +}
>>> +
>>> +/**
>>> + * Default packet tailroom
>>> + *
>>> + * This defines the minimum number of tailroom bytes that newly created
>>> packets
>>> + * have by default. The default apply to both ODP packet input and user
>>> + * allocated packets. Implementations are free to add to this as desired
>>> + * without restriction. Note that most implementations will
>>> automatically
>>> + * consider any unused portion of the last segment of a packet as
>>> tailroom
>>> + */
>>> +#define ODP_CONFIG_PACKET_TAILROOM 0
>>> +static inline int odp_config_packet_tailroom(void)
>>> +{
>>> +       return ODP_CONFIG_PACKET_TAILROOM;
>>> +}
>>> +
>>> +/**
>>> + * Minimum packet segment length
>>> + *
>>> + * This defines the minimum packet segment buffer length in bytes. The
>>> user
>>> + * defined segment length (seg_len in odp_pool_param_t) will be rounded
>>> up into
>>> + * this value.
>>> + */
>>> +#define ODP_CONFIG_PACKET_SEG_LEN_MIN 1598
>>> +static inline int odp_config_packet_seg_len_min(void)
>>> +{
>>> +       return ODP_CONFIG_PACKET_SEG_LEN_MIN;
>>> +}
>>> +
>>> +/**
>>> + * Maximum packet segment length
>>> + *
>>> + * This defines the maximum packet segment buffer length in bytes. The
>>> user
>>> + * defined segment length (seg_len in odp_pool_param_t) must not be
>>> larger than
>>> + * this.
>>> + */
>>> +#define ODP_CONFIG_PACKET_SEG_LEN_MAX (64*1024)
>>> +static inline int odp_config_packet_seg_len_max(void)
>>> +{
>>> +       return ODP_CONFIG_PACKET_SEG_LEN_MAX;
>>> +}
>>> +
>>> +/**
>>> + * Maximum packet buffer length
>>> + *
>>> + * This defines the maximum number of bytes that can be stored into a
>>> packet
>>> + * (maximum return value of odp_packet_buf_len(void)). Attempts to
>>> allocate
>>> + * (including default head- and tailrooms) or extend packets to sizes
>>> larger
>>> + * than this limit will fail.
>>> + *
>>> + * @internal In linux-generic implementation:
>>> + * - The value MUST be an integral number of segments
>>> + * - The value SHOULD be large enough to accommodate jumbo packets (9K)
>>> + */
>>> +#define ODP_CONFIG_PACKET_BUF_LEN_MAX (ODP_CONFIG_PACKET_SEG_LEN_MIN*6)
>>> +static inline int odp_config_packet_buf_len_max(void)
>>> +{
>>> +       return ODP_CONFIG_PACKET_BUF_LEN_MAX;
>>> +}
>>> +
>>> +/** Maximum number of shared memory blocks.
>>> + *
>>> + * This the the number of separate SHM areas that can be reserved
>>> concurrently
>>> + */
>>> +#define ODP_CONFIG_SHM_BLOCKS (ODP_CONFIG_POOLS + 48)
>>> +static inline int odp_config_shm_blocks(void)
>>> +{
>>> +       return ODP_CONFIG_SHM_BLOCKS;
>>> +}
>>> +
>>>  #include <odp/api/config.h>
>>>
>>>  #ifdef __cplusplus
>>> --
>>> 2.1.4
>>>
>>>
>>
>>
>>  _______________________________________________
>> lng-odp mailing 
>> [email protected]https://lists.linaro.org/mailman/listinfo/lng-odp
>>
>>
>>
>> _______________________________________________
>> lng-odp mailing list
>> [email protected]
>> https://lists.linaro.org/mailman/listinfo/lng-odp
>>
>>
>
>
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to