Message ID | 1444863741-27794-1-git-send-email-bill.fischofer@linaro.org |
---|---|
State | Accepted |
Commit | 02d6e357ca6021df74e3f9259ec30d38c29933ad |
Headers | show |
Both patches: Reviewed-by: Petri Savolainen <petri.savolainen@nokia.com> > -----Original Message----- > From: lng-odp [mailto:lng-odp-bounces@lists.linaro.org] On Behalf Of EXT > Bill Fischofer > Sent: Thursday, October 15, 2015 2:02 AM > To: lng-odp@lists.linaro.org > Subject: [lng-odp] [API-NEXT PATCHv3 1/2] api: config: replace defines with > apis > > 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 <bill.fischofer@linaro.org> > --- > include/odp/api/config.h | 63 ++++++----- > platform/linux-generic/include/odp/config.h | 167 > +++++++++++++++++++++++++++- > 2 files changed, 204 insertions(+), 26 deletions(-) > > diff --git a/include/odp/api/config.h b/include/odp/api/config.h > index 295b10d..9cdeb0e 100644 > --- a/include/odp/api/config.h > +++ b/include/odp/api/config.h > @@ -19,55 +19,65 @@ extern "C" { > #endif > > /** @defgroup odp_config ODP CONFIG > - * Macro for maximum number of resources in ODP. > + * Platform-specific configuration limits. > * @{ > */ > > /** > * 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); > > /** > * Maximum number of ordered locks per queue > + * @return The maximum number of ordered locks per queue supported by > + * this platform. > */ > -#define ODP_CONFIG_MAX_ORDERED_LOCKS_PER_QUEUE 2 > +int odp_config_max_ordered_locks_per_queue(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); > > /** > * Number of scheduling groups > + * @return Number of scheduling groups supported by this platofmr > */ > -#define ODP_CONFIG_SCHED_GRPS 16 > +int odp_config_sched_grps(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 > @@ -77,11 +87,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 > @@ -89,10 +97,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 > @@ -100,8 +109,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 > @@ -109,8 +120,10 @@ 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 > @@ -120,17 +133,17 @@ extern "C" { > * (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..a130e68 100644 > --- a/platform/linux-generic/include/odp/config.h > +++ b/platform/linux-generic/include/odp/config.h > @@ -1,4 +1,4 @@ > -/* Copyright (c) 2013, Linaro Limited > +/* Copyright (c) 2015, Linaro Limited > * All rights reserved. > * > * SPDX-License-Identifier: BSD-3-Clause > @@ -17,6 +17,171 @@ > extern "C" { > #endif > > +/** > + * 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 ordered locks per queue > + */ > +#define ODP_CONFIG_MAX_ORDERED_LOCKS_PER_QUEUE 2 > +static inline int odp_config_max_ordered_locks_per_queue(void) > +{ > + return ODP_CONFIG_MAX_ORDERED_LOCKS_PER_QUEUE; > +} > + > +/** > + * Number of scheduling priorities > + */ > +#define ODP_CONFIG_SCHED_PRIOS 8 > +static inline int odp_config_sched_prios(void) > +{ > + return ODP_CONFIG_SCHED_PRIOS; > +} > + > +/** > + * Number of scheduling groups > + */ > +#define ODP_CONFIG_SCHED_GRPS 16 > +static inline int odp_config_sched_grps(void) > +{ > + return ODP_CONFIG_SCHED_GRPS; > +} > + > +/** > + * 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 list > lng-odp@lists.linaro.org > https://lists.linaro.org/mailman/listinfo/lng-odp
Merged, Maxim. On 10/15/2015 09:47, Savolainen, Petri (Nokia - FI/Espoo) wrote: > Both patches: > > Reviewed-by: Petri Savolainen <petri.savolainen@nokia.com> > > >> -----Original Message----- >> From: lng-odp [mailto:lng-odp-bounces@lists.linaro.org] On Behalf Of EXT >> Bill Fischofer >> Sent: Thursday, October 15, 2015 2:02 AM >> To: lng-odp@lists.linaro.org >> Subject: [lng-odp] [API-NEXT PATCHv3 1/2] api: config: replace defines with >> apis >> >> 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 <bill.fischofer@linaro.org> >> --- >> include/odp/api/config.h | 63 ++++++----- >> platform/linux-generic/include/odp/config.h | 167 >> +++++++++++++++++++++++++++- >> 2 files changed, 204 insertions(+), 26 deletions(-) >> >> diff --git a/include/odp/api/config.h b/include/odp/api/config.h >> index 295b10d..9cdeb0e 100644 >> --- a/include/odp/api/config.h >> +++ b/include/odp/api/config.h >> @@ -19,55 +19,65 @@ extern "C" { >> #endif >> >> /** @defgroup odp_config ODP CONFIG >> - * Macro for maximum number of resources in ODP. >> + * Platform-specific configuration limits. >> * @{ >> */ >> >> /** >> * 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); >> >> /** >> * Maximum number of ordered locks per queue >> + * @return The maximum number of ordered locks per queue supported by >> + * this platform. >> */ >> -#define ODP_CONFIG_MAX_ORDERED_LOCKS_PER_QUEUE 2 >> +int odp_config_max_ordered_locks_per_queue(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); >> >> /** >> * Number of scheduling groups >> + * @return Number of scheduling groups supported by this platofmr >> */ >> -#define ODP_CONFIG_SCHED_GRPS 16 >> +int odp_config_sched_grps(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 >> @@ -77,11 +87,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 >> @@ -89,10 +97,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 >> @@ -100,8 +109,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 >> @@ -109,8 +120,10 @@ 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 >> @@ -120,17 +133,17 @@ extern "C" { >> * (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..a130e68 100644 >> --- a/platform/linux-generic/include/odp/config.h >> +++ b/platform/linux-generic/include/odp/config.h >> @@ -1,4 +1,4 @@ >> -/* Copyright (c) 2013, Linaro Limited >> +/* Copyright (c) 2015, Linaro Limited >> * All rights reserved. >> * >> * SPDX-License-Identifier: BSD-3-Clause >> @@ -17,6 +17,171 @@ >> extern "C" { >> #endif >> >> +/** >> + * 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 ordered locks per queue >> + */ >> +#define ODP_CONFIG_MAX_ORDERED_LOCKS_PER_QUEUE 2 >> +static inline int odp_config_max_ordered_locks_per_queue(void) >> +{ >> + return ODP_CONFIG_MAX_ORDERED_LOCKS_PER_QUEUE; >> +} >> + >> +/** >> + * Number of scheduling priorities >> + */ >> +#define ODP_CONFIG_SCHED_PRIOS 8 >> +static inline int odp_config_sched_prios(void) >> +{ >> + return ODP_CONFIG_SCHED_PRIOS; >> +} >> + >> +/** >> + * Number of scheduling groups >> + */ >> +#define ODP_CONFIG_SCHED_GRPS 16 >> +static inline int odp_config_sched_grps(void) >> +{ >> + return ODP_CONFIG_SCHED_GRPS; >> +} >> + >> +/** >> + * 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 list >> lng-odp@lists.linaro.org >> https://lists.linaro.org/mailman/listinfo/lng-odp > _______________________________________________ > lng-odp mailing list > lng-odp@lists.linaro.org > https://lists.linaro.org/mailman/listinfo/lng-odp
diff --git a/include/odp/api/config.h b/include/odp/api/config.h index 295b10d..9cdeb0e 100644 --- a/include/odp/api/config.h +++ b/include/odp/api/config.h @@ -19,55 +19,65 @@ extern "C" { #endif /** @defgroup odp_config ODP CONFIG - * Macro for maximum number of resources in ODP. + * Platform-specific configuration limits. * @{ */ /** * 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); /** * Maximum number of ordered locks per queue + * @return The maximum number of ordered locks per queue supported by + * this platform. */ -#define ODP_CONFIG_MAX_ORDERED_LOCKS_PER_QUEUE 2 +int odp_config_max_ordered_locks_per_queue(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); /** * Number of scheduling groups + * @return Number of scheduling groups supported by this platofmr */ -#define ODP_CONFIG_SCHED_GRPS 16 +int odp_config_sched_grps(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 @@ -77,11 +87,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 @@ -89,10 +97,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 @@ -100,8 +109,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 @@ -109,8 +120,10 @@ 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 @@ -120,17 +133,17 @@ extern "C" { * (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..a130e68 100644 --- a/platform/linux-generic/include/odp/config.h +++ b/platform/linux-generic/include/odp/config.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, Linaro Limited +/* Copyright (c) 2015, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -17,6 +17,171 @@ extern "C" { #endif +/** + * 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 ordered locks per queue + */ +#define ODP_CONFIG_MAX_ORDERED_LOCKS_PER_QUEUE 2 +static inline int odp_config_max_ordered_locks_per_queue(void) +{ + return ODP_CONFIG_MAX_ORDERED_LOCKS_PER_QUEUE; +} + +/** + * Number of scheduling priorities + */ +#define ODP_CONFIG_SCHED_PRIOS 8 +static inline int odp_config_sched_prios(void) +{ + return ODP_CONFIG_SCHED_PRIOS; +} + +/** + * Number of scheduling groups + */ +#define ODP_CONFIG_SCHED_GRPS 16 +static inline int odp_config_sched_grps(void) +{ + return ODP_CONFIG_SCHED_GRPS; +} + +/** + * 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
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 <bill.fischofer@linaro.org> --- include/odp/api/config.h | 63 ++++++----- platform/linux-generic/include/odp/config.h | 167 +++++++++++++++++++++++++++- 2 files changed, 204 insertions(+), 26 deletions(-)