How does linux hardware offload work?


According to the document [1], I think I understand how the software offload works now. I want to know how linux hardware offload works. Let's consider one sample tcp NAT offload case. In the software offload path, flow offload entry is added into software flow table in the FORWARD chain if the tcp session is confirmed by Linux kernel contrack(In other words, tcp sync is sent from one end and the peer acks) . Where is the flow offload entry is added into hardware flow table in the hardware offload path? According to this Linux kernel hardware offload patch [2], seems entry is added in tc instead of FORWARD chain, right? If yes, Why? Does the tcp session also need to be confirmed by the contrack? Sorry, I'm not very familiar with tc. If someone can provide similar Fig to describe the tc and flow table interactions like Fig.1 in [1] , that would be best. I'm also trying to get one MTK 762x board to play hardware offload. Thanks a lot.