Thanks, now it is more clear for me. About your points:
iggarpe wrote:1- mac_lld_release_receive_descriptor conceptually is meant to release the accessor, not the buffers themselves (which were the entities the accessor was used to get). The accessor contains state information to walk the frame data which is no longer necessary once the pbuf chain has been built in low_level_input (in lwipthread.c). It makes no sense to pass that information upwards to the application level, and then downwards again when the application calls pbuf_free.
This is purely a conceptual construct, you can see as well the descriptor as the object that encapsulates everything related to a frame, including buffers.
iggarpe wrote:2- If the accessor is meant to live outside of low_level_input function (in lwipthread.c), it must be allocated from a heap, pool or something (and not on the stack as it's done now) and then somehow attach it to the pbuf chain (to the WHOLE pbuf chain, not a single, concrete pbuf).
Agreed, this pool can be implemented in lwupthread, there is no need for the driver to handle the pool so it does not impact us in this moment.
iggarpe wrote:3- The lwIP pbuf deallocation callback mechanism (look for PBUF_FLAG_IS_CUSTOM in pbuf_free function in pbuf.c) works on a per pbuf basis. It will make a call for each pbuf in a chain, and each pbuf contains a just one buffer. So the natural way to use this mechanism forces the use of a per-buffer release function.
This is how lwIP see things, it knows buffers because it handles the lists by itself. I want to create a general driver model not one that caters to lwIP only. If we have to use two list-like structures is because lwip uses pbuf chains and the driver has its own lists mechanism. A more rational approach would be to let the driver handle lists in the manner more appropriate for the underlying HW architecture. I still think we should have a more rational TCP stack at some point. lwIP wants to cover too many scenarios IMHO.
iggarpe wrote:- Add a deallocation callback to the pbuf structure.
- Add an opaque void * argument to the pbuf structure, to be passed to the callback above.
- Modify pbuf_free to call this deallocation callback passing the opaque argument.
- Add a MACDriver pointer to the MACReceiveDescriptor structure.
I agree, we need a mechanism to associate a callback only to the last element of a pbuf chain and release the descriptor there. Handling buffers one by one is not really necessary, it is just how lwIP does things.
iggarpe wrote:I'm also a big fan of code simplicity, but in this case I would definitely say the extra functionality is well worth it. Then again, this opinion is biased by the fact that I do need the functionality

Let me know if you'd rather stick to the one-frame-per-buffer model. I'm certainly going though more trouble than strictly necessary just to make a worthy contribution, so if it's not going to be, I might as well take a few dirty shortcuts and get over with it ASAP.
Lets put things this way. The contributions you are working on:
1) STM32 MAC driver fixes (done, it is much better now after all the bugs you found).
2) MAC driver model enhancements to support a generic copy-less scenario (done, now the driver supports copy-less operations).
3) lwIP copy-less implementation (in progress and, IMO, this is huge).
4) Multi buffer implementation for STM32 (in progress or done).
I have problems only with points 2 and 4:
2) I want a simple, rational API that is not dictated by the lwIP way to see things.
4) I am in doubt not because I don't see the advantages but for another reason: It would be harder for me to maintain. No matter how well done it is once something is part of the trunk I have to answer questions and fix bugs so I prefer to keep things as simple as possible.
I think you should finish it and then offer it as an alternative implementation, this is why I think it should be a drop-in replacement for the current implementation. If somebody want the functionality it must be as simple as replacing the files, everything else should be transparent.
In perspective the two driver could be merged and the multi-buffer mode would become a configuration option, I have to build confidence first because the mentioned maintenance issues. Currently I am spending more time handling tickets and support than writing code...
Just to be clear, I really appreciate what you are trying to do, we are now in a much better position with the whole networking layer and it is going to be even better.
Giovanni