Petri Savolainen(psavol) replied on github web page:

include/odp/api/spec/comp.h
line 30
@@ -0,0 +1,873 @@
+/* Copyright (c) 2017, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:    BSD-3-Clause
+ */
+
+/**
+ * @file
+ *
+ * ODP Compression
+ */
+
+#ifndef ODP_API_COMP_H_
+#define ODP_API_COMP_H_
+
+#include <odp/visibility_begin.h>
+#include <odp/api/support.h>
+#include <odp/api/packet.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** @defgroup odp_compression ODP COMP
+ *  ODP Compression is an API set to do compression+hash or decompression+hash
+ *  operations on data. Hash is calculated on plaintext.
+ *
+ *  if opcode = ODP_COMP_COMPRESS, then it will apply hash and then compress,
+ *  if opcode = ODP_COMP_DECOMPRESS, then it will decompress and then apply
+ *  hash.


Comment:
E.g. move to odp_comp_op() documentation (in this file) and then refer to that 
from other comp operation functions. 

> Petri Savolainen(psavol) wrote:
> It looks like OUT_OF_SPACE causes too much controversity ATM. I would suggest 
> to make it a hard error at this point, merge API w/o out-of-space, then 
> rethink this particular item. Partially processed packets need additional 
> thought with respect to state being saved/passed back/etc.
>> Petri Savolainen(psavol) wrote:
>> Does the partially processed packet contain valid data or not == does 
>> application keep or discard the packet?
>> Shally > It will be a valid data and thus application is supposed to consume 
>> it. 
>> Is there any way for application to prepare large enough packet in advance?
>>  Shally > Its more of application dependent such as ipcomp it knows packet 
>> cannot go beyond a maximum length of IP Packet.
>> E.g. a per algo capability of worst case decompression ratio?
>> Shally > No. it is not guaranteed. Its more of data type property and 
>> algorithm capability. 
>> Should "pkt_out = INVALID" be supported? 
>> Shally > No. 
>> implementation allocates large enough packet.
>> Shally > we refrained from this approach as in such case implementation may 
>> end up eating whole of user pool. Better approach is pass back what ever is 
>> available at output. Now, application may consume it and reuse same packet 
>> for next o/p OR extend the packet by some length (say double it up).
>> Single packet handle should be defined as const.
>> Shally > It is const in API param list ... odp_comp_op(const odp_packet_t 
>> pkt_in....) .. what am i missing here?
>> There is out_data_range defined in both op_param_t and op_result_t. Which 
>> one is updated on output? 
>> Shally> One in op_result.
>> May be operation output comments should be removed from op_param_t 
>> documentation.
>> Shally > Yea. Did that already.
>> 
>> Please mark your approval to these.
>>> Petri Savolainen(psavol) wrote:
>>> ... with valid pkt_out and pkt_in being ODP_PACKET_INVALID...
>>> >> No. pkt_in too has to be valid and untouched. It is quite possible, that 
>>> >> algorithm may or may not consume full input from input buffer when it 
>>> >> hit out of buffer situation. Thus, none of the parameters except output 
>>> >> packet should be updated by application until fully process and that's 
>>> >> why description says " On seeing this situation,
>>>      * Implementation should maintain context of in-progress operation and
>>>      * application should call packet processing API again with valid
>>>      * output buffer but no other alteration to operation params
>>>      * (odp_comp_op_param_t)."
>>>> Petri Savolainen(psavol) wrote:
>>>> default values are implementation dependent. There's no standard what they 
>>>> could be set to. Example, one implementation may set default comp_alg to 
>>>> zlib and other to deflate or possibly any other to zlib+hash. So, we 
>>>> cannot document here what default values should be.
>>>>> Petri Savolainen(psavol) wrote:
>>>>> Can this return more than one hash_alg_capa (== digest_len) per hash_alg?
>>>>> >>No. ideally, an implementation should return only 1 single capability 
>>>>> >>per hash algorithm. I cannot think why a valid implementation would 
>>>>> >>return more than 1 capability according to capability structure we have 
>>>>> >>here. 
>>>>> This API signature has been retained to keep consistency with other 
>>>>> interface capability API. 
>>>>>> Petri Savolainen(psavol) wrote:
>>>>>> offset is not updated by spec as compression does not support 
>>>>>> auto-allocation of packet and starts data write at given offset only. 
>>>>>> For description, I rephrased it as below. 
>>>>>>  "       /** Output packet data range.
>>>>>>   *
>>>>>>   * out_data_range.offset = offset in output packet data buffer to start
>>>>>>   * write at,
>>>>>>   *
>>>>>>   * out_data_range.length = length of available space for output
>>>>>>   * from given offset.
>>>>>>   *
>>>>>>   */
>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>> Ok. 
>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>> "then we should document that the value is ignored."
>>>>>>>> >> Sorry, I didn't get that. You referring to which value to be 
>>>>>>>> >> ignored?
>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>> Did you refer to note starting here " * Please note, behavior could 
>>>>>>>>> be changed or enhanced........"? if yes, okay I will remove that 
>>>>>>>>> text. Please confirm.
>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>> accepted.
>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>> 1.comp_algo is always set. It should be e.g. ALG_NULL by default. 
>>>>>>>>>>> >> I am bit confused. Are you suggesting adding a description to 
>>>>>>>>>>> >> "comp ALG_NULL+hash"? We agreed in past that " user must use 
>>>>>>>>>>> >> crypto for standalone hashing and compression algo NULL is only 
>>>>>>>>>>> >> for testing purpose" and current description on usage of hash 
>>>>>>>>>>> >> and ALG_NULL abide that.  So, we can leave current description 
>>>>>>>>>>> >> as is.
>>>>>>>>>>> 2. What this means: "output should always contain data + hash" ? If 
>>>>>>>>>>> we enable hashing, hash is always calculated. It's not optional for 
>>>>>>>>>>> implementation to calculate it - right.
>>>>>>>>>>> >> I will rephrase it to "output *will* always contain data + 
>>>>>>>>>>> >> hash". 
>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>> " This should be specified at operation documentation" means which 
>>>>>>>>>>>> place? user guide Or ?
>>>>>>>>>>>> 
>>>>>>>>>>>> Do you mean I should remove this description from here? Or 
>>>>>>>>>>>> "+ *  if opcode = ODP_COMP_COMPRESS, then it will apply hash and 
>>>>>>>>>>>> then compress,
>>>>>>>>>>>>  + *  if opcode = ODP_COMP_DECOMPRESS, then it will decompress and 
>>>>>>>>>>>> then apply
>>>>>>>>>>>>  + *  hash."
>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>> First, async call can reuse sync call spec by saying: "... 
>>>>>>>>>>>>> processes packets otherwise identically to odp_comp_op(), but 
>>>>>>>>>>>>> outputs resulting packets as ODP_EVENT_PACKET events ...". Then 
>>>>>>>>>>>>> the remaining text can concentrate on what is unique on async vs 
>>>>>>>>>>>>> sync operation.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> I think OUT_OF_SPACE spec might need re-thinking:
>>>>>>>>>>>>> 1) user sees a partial packet (error on a received packet)
>>>>>>>>>>>>> 2) implementation waits that user calls op_enq() again
>>>>>>>>>>>>> 3) what input packet should be given on the new call? I think the 
>>>>>>>>>>>>> previous operation already consumed the input packet which 
>>>>>>>>>>>>> contains the input data for operation. Did implementation store 
>>>>>>>>>>>>> it?
>>>>>>>>>>>>> 4) how long implementation waits for new output packet to arrive 
>>>>>>>>>>>>> from user, what if user don't send new output packets.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Async spec (and also sync) spec would be more robust if 
>>>>>>>>>>>>> implementation would allocate output packets. 
>>>>>>>>>>>>>  
>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>> Application does not allocate buffers but packets.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Does the partially processed packet contain valid data or not == 
>>>>>>>>>>>>>> does application keep or discard the packet?
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Is there any way for application to prepare large enough packet 
>>>>>>>>>>>>>> in advance? E.g. a per algo capability of worst case 
>>>>>>>>>>>>>> decompression ratio? Should "pkt_out = INVALID" be supported? 
>>>>>>>>>>>>>> ==> implementation allocates large enough packet.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Single packet handle should **not** be defined as const.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> There is out_data_range defined in both op_param_t and 
>>>>>>>>>>>>>> op_result_t. Which one is updated on output? May be operation 
>>>>>>>>>>>>>> output comments should be removed from op_param_t documentation.
>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>> Simply say that:
>>>>>>>>>>>>>>> This operation does de/-compression in synchronous mode 
>>>>>>>>>>>>>>> (ODP_COMP_SYNC).
>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>> "implementation should update length of dictionary used at 
>>>>>>>>>>>>>>>> output."
>>>>>>>>>>>>>>>> This is too vague: either length is updated or it's not. In 
>>>>>>>>>>>>>>>> which cases the update would be done and what that would mean? 
>>>>>>>>>>>>>>>> Also, I assume that implementation copies the data, so that 
>>>>>>>>>>>>>>>> application is free to overwrite the memory after the call. 
>>>>>>>>>>>>>>>> That (copies data) should be mentioned also.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Is there a benefit on output param here, especially if it 
>>>>>>>>>>>>>>>> updates only the length and not the pointer. Maybe API would 
>>>>>>>>>>>>>>>> be cleaner, if also *dict is input only param (and thus 
>>>>>>>>>>>>>>>> const*). Function may return e.g. number of bytes copied/used.
>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>> This can be simply
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> odp_comp_session_t odp_comp_session_create(const 
>>>>>>>>>>>>>>>>> odp_comp_session_param_t *param)
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Extra error codes may be returned through odp_errno(). 
>>>>>>>>>>>>>>>>> Usually, we have not defined error codes, since it's 
>>>>>>>>>>>>>>>>> implementation defines what all things can possibly go wrong, 
>>>>>>>>>>>>>>>>> and typically application logic is just interested on success 
>>>>>>>>>>>>>>>>> vs fail - not so much why we failed.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> This function prototype is copy-paste from crypto API, but 
>>>>>>>>>>>>>>>>> all other APIs are the type I suggested above.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Note: const pointer for "param"
>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>> It would be good to define default values for 
>>>>>>>>>>>>>>>>>> odp_comp_session_param_t (at the type documentation). 
>>>>>>>>>>>>>>>>>> Otherwise, application needs to always set every param.
>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>> Can this return more than one hash_alg_capa (== digest_len) 
>>>>>>>>>>>>>>>>>>> per hash_alg? Currently, application cannot select digest 
>>>>>>>>>>>>>>>>>>> length. So, what application should do if this returns more 
>>>>>>>>>>>>>>>>>>> than one capa.
>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>> Is array of capabilities needed with comp algorithms? It 
>>>>>>>>>>>>>>>>>>>> would be needed if user would need to select between 
>>>>>>>>>>>>>>>>>>>> multiple discrete options - e.g. if only some dict_len 
>>>>>>>>>>>>>>>>>>>> values would make sense (1kB, 4kB, 16kB), but nothing in 
>>>>>>>>>>>>>>>>>>>> between.
>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>> "where length specifies,
>>>>>>>>>>>>>>>>>>>>> length of available packet buffer at input, and
>>>>>>>>>>>>>>>>>>>>> length of data written at output"
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> This specification should be clarified. "Input" refers 
>>>>>>>>>>>>>>>>>>>>> refers to out_data_range.length as operation input param 
>>>>>>>>>>>>>>>>>>>>> and  "output" refers to the same as operation output 
>>>>>>>>>>>>>>>>>>>>> parameter.
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> In addition to length, offset may be updated at operation 
>>>>>>>>>>>>>>>>>>>>> output (at least when new packet was allocated). That 
>>>>>>>>>>>>>>>>>>>>> should be mentioned also.
>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>> This last chuck: 
>>>>>>>>>>>>>>>>>>>>>> "In case of
>>>>>>>>>>>>>>>>>>>>>> ODP_COMP_ERR_OUT_OF_SPACE, application should keep on 
>>>>>>>>>>>>>>>>>>>>>> calling
>>>>>>>>>>>>>>>>>>>>>> odp_comp_xxx() API with more output buffer unless call 
>>>>>>>>>>>>>>>>>>>>>> returns
>>>>>>>>>>>>>>>>>>>>>> with ODP_COMP_ERR_NONE or other failure code except
>>>>>>>>>>>>>>>>>>>>>> ODP_COMP_ERR_OUT_OF_SPACE. "
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Documents operation return / error codes rather than 
>>>>>>>>>>>>>>>>>>>>>> "last" field usage. So, I'd remove it from here.
>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>> If only option for a stateless algorithm is true, then 
>>>>>>>>>>>>>>>>>>>>>>> we should document that the value is ignored.
>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>> Typo: "enques" -> enqueues"
>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>> Remove this block text since it's speculation of what 
>>>>>>>>>>>>>>>>>>>>>>>>> could be specified.
>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>> Typo: "... given as comp_alg" -> "... given as 
>>>>>>>>>>>>>>>>>>>>>>>>>> comp_algo"
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> There are two SHOULDs, but I think those are not 
>>>>>>>>>>>>>>>>>>>>>>>>>> needed:
>>>>>>>>>>>>>>>>>>>>>>>>>> 1) comp_algo is always set. It should be e.g. 
>>>>>>>>>>>>>>>>>>>>>>>>>> ALG_NULL by default. We have defined that NULL does 
>>>>>>>>>>>>>>>>>>>>>>>>>> not have hash capability. It would be also possible 
>>>>>>>>>>>>>>>>>>>>>>>>>> to leave NULL + hash to be implementation defined 
>>>>>>>>>>>>>>>>>>>>>>>>>> capability. When we say that ALG_NULL is only for 
>>>>>>>>>>>>>>>>>>>>>>>>>> test, it should be enough to discourage people from 
>>>>>>>>>>>>>>>>>>>>>>>>>> misusing this API for hashing.
>>>>>>>>>>>>>>>>>>>>>>>>>> 2) What this means: "output should always contain 
>>>>>>>>>>>>>>>>>>>>>>>>>> data + hash" ? If we enable hashing, hash is always 
>>>>>>>>>>>>>>>>>>>>>>>>>> calculated. It's not optional for implementation to 
>>>>>>>>>>>>>>>>>>>>>>>>>> calculate it - right.
>>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>> Field name should match the type == "hash_algos" 
>>>>>>>>>>>>>>>>>>>>>>>>>>> (many algorithms in a bit field). Underneath 
>>>>>>>>>>>>>>>>>>>>>>>>>>> "hash_algo" is used with enum odp_comp_hash_alg_t 
>>>>>>>>>>>>>>>>>>>>>>>>>>> (one algo).
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>> I did comment the same a month back:
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Is the data input only? If it is, then this should 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> be "const uint8_t *buf"
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> What is expected about the format of the data? 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Null terminated strings? If it's strings, then 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> e.g. "const char *str" would be better.
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Also the type documentation should be updated:
>>>>>>>>>>>>>>>>>>>>>>>>>>>> * This is not dictionary type, but pointer into 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> dictionary data - right?
>>>>>>>>>>>>>>>>>>>>>>>>>>>> * "Consists of pointer to byte buffer. length of 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> dictionary indicated by length parameter. ", this 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> needs clarification.  What is expected about the 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> data behind the pointer?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @psavol Hmm. I thought that the user should use 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> this value. And `odp_comp_level_t` should be 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> dropped from the spec.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> How this relates to odp_comp_level_t enumeration 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ? Shouldn't user use those levels and not a 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> number from 0 to this one ?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> This is description of how de/-compression 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> operation work. This should be specified at 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> operation documentation, and optimally only 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> there. Otherwise, we are in danger of this spec 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> getting deprecated (== in conflict with 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> operation documentation) without noticing. 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> True, all types need to be odp_ prefixed. Also 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> this type would be better to typedef and pull 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> out (from inside of algo_param_t) since it's 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> used in two places already.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> As a side note: it might be logical, we might 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> want to add `odp_support_t` field to notify 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> user if implementation supports stateful 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> compression. I can easily assume that there 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> might be implementations implementing only 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> stateless compression. 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> odp_comp_alg_deflate_param, please.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Please check the see list. It mentions 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> non-existing functions.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> no result here
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> s/Else/Otherwise/
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ... an error....
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ... with valid  pkt_out and pkt_in 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> being ODP_PACKET_INVALID...
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> It is an error to call this api when 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> session was created in ODP_COMP_ASYNC 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> mode.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> As said, single and multi versions 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> are possible, but not as proposed in 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> this patch. Both versions should have 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the same param structure and 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> specification. Only difference would 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> be pkt_in[] vs pkt_in, pkt_out[] vs 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> pkt_out, param[] vs. param ...
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Then I propose to add a new API like
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> odp_comp_compress_multi(const 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> odp_packet_t pkt_in[], odp_packet_t 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> pkt_out[], const 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> odp_comp_compress_param_t param[], 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> int num_pkt);
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> which takes of handling multiple 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> packets and retain current version 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> for single packet handling.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Shally
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @bala-manoharan 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Results for both sync and async 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> through result function:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> int 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> odp_comp_result(odp_comp_packet_result_t
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  *result, odp_packet_t packet);
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> OR have the results as output 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> parameter. Results function is 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> needed any way for the async 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> operation.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> int odp_comp_compress(const 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> odp_packet_t pkt_in[], 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> odp_packet_t pkt_out[], const 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> odp_comp_compress_param_t param[], 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> int num_pkt);
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Single packet version may be also 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> added, but is not necessary since 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> couple of additional if-clauses 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> does not significant overhead when 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> compare CPU cycles of the entire 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> comp operation.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> int 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> odp_comp_compress_single(odp_packet_t
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  pkt_in, odp_packet_t pkt_out, 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> const odp_comp_compress_param_t 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> param);
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> The two prototypes would be the 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> same except [] and num_pkt.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
https://github.com/Linaro/odp/pull/156#discussion_r137771361
updated_at 2017-09-08 11:49:54

Reply via email to