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]> 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]> 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]>
>> ---
>>  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