]> git.karo-electronics.de Git - karo-tx-uboot.git/blobdiff - include/net.h
dm: eth: Provide a way for drivers to manage packet buffers
[karo-tx-uboot.git] / include / net.h
index aeec4e93387017afb76c365635dc126de631bfdb..ef9de3cad14bce2844b4f4647e0b665ab832665d 100644 (file)
@@ -97,7 +97,12 @@ struct eth_pdata {
  * send: Send the bytes passed in "packet" as a packet on the wire
  * recv: Check if the hardware received a packet. If so, set the pointer to the
  *      packet buffer in the packetp parameter. If not, return an error or 0 to
- *      indicate that the hardware receive FIFO is empty
+ *      indicate that the hardware receive FIFO is empty. If 0 is returned, the
+ *      network stack will not process the empty packet, but free_pkt() will be
+ *      called if supplied
+ * free_pkt: Give the driver an opportunity to manage its packet buffer memory
+ *          when the network stack is finished processing it. This will only be
+ *          called when no error was returned from recv - optional
  * stop: Stop the hardware from looking for packets - may be called even if
  *      state == PASSIVE
  * mcast: Join or leave a multicast group (for TFTP) - optional
@@ -113,6 +118,7 @@ struct eth_ops {
        int (*start)(struct udevice *dev);
        int (*send)(struct udevice *dev, void *packet, int length);
        int (*recv)(struct udevice *dev, uchar **packetp);
+       int (*free_pkt)(struct udevice *dev, uchar *packet, int length);
        void (*stop)(struct udevice *dev);
 #ifdef CONFIG_MCAST_TFTP
        int (*mcast)(struct udevice *dev, const u8 *enetaddr, int join);
@@ -543,7 +549,7 @@ int NetLoop(enum proto_t);
 void   NetStop(void);
 
 /* Load failed.         Start again. */
-void   NetStartAgain(void);
+int    NetStartAgain(void);
 
 /* Get size of the ethernet header when we send */
 int    NetEthHdrSize(void);
@@ -613,6 +619,7 @@ static inline void net_set_state(enum net_loop_state state)
 /* Transmit a packet */
 static inline void NetSendPacket(uchar *pkt, int len)
 {
+       /* Currently no way to return errors from eth_send() */
        (void) eth_send(pkt, len);
 }