+* struct napi\\_struct
+* netif\\_napi\\_add(dev, napi, poll\\_func, weight)
+* napi\\_enable: called in open
+* napi\\_disable: called in stop - awaits completion
+* napi\\_schedule
+ - napi\\_schedule\\_prep
+ - \\_\\_napi\\_schedule
+* napi\\_complete: called in poll when all is done
+* Use netif\\_receive\\_skb instead of netif\\_rx
+
+# NAPI step by step
+
+* In the interrupt handler:
+ - Checks that the interrupt received is RX
+ - Call napi\\_schedule\\_prep to check that napi isn't already scheduled
+ - Disable RX
+ - Call \\_\\_napi\\_schedule
+
+# Weight and Budget
+
+* The weight is the start budget for the interface, usually 16
+* The poll function must not dequeue more frames than the budget
+* It must call napi\\_complete if and only if it has exhausted the hardware
+ queues with less than the budget
+* It must return the number of entries in the queue processed
+