mirror of https://github.com/ipxe/ipxe.git
[netdevice] Notify upper-layer drivers when RX processing is (un)frozen
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/17/head
parent
24bbaf6a38
commit
87465258ab
|
@ -658,6 +658,8 @@ netdev_rx_frozen ( struct net_device *netdev ) {
|
||||||
return ( netdev->state & NETDEV_RX_FROZEN );
|
return ( netdev->state & NETDEV_RX_FROZEN );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern void netdev_rx_freeze ( struct net_device *netdev );
|
||||||
|
extern void netdev_rx_unfreeze ( struct net_device *netdev );
|
||||||
extern void netdev_link_err ( struct net_device *netdev, int rc );
|
extern void netdev_link_err ( struct net_device *netdev, int rc );
|
||||||
extern void netdev_link_down ( struct net_device *netdev );
|
extern void netdev_link_down ( struct net_device *netdev );
|
||||||
extern int netdev_tx ( struct net_device *netdev, struct io_buffer *iobuf );
|
extern int netdev_tx ( struct net_device *netdev, struct io_buffer *iobuf );
|
||||||
|
@ -733,24 +735,4 @@ netdev_link_up ( struct net_device *netdev ) {
|
||||||
netdev_link_err ( netdev, 0 );
|
netdev_link_err ( netdev, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Freeze network device receive queue processing
|
|
||||||
*
|
|
||||||
* @v netdev Network device
|
|
||||||
*/
|
|
||||||
static inline __attribute__ (( always_inline )) void
|
|
||||||
netdev_rx_freeze ( struct net_device *netdev ) {
|
|
||||||
netdev->state |= NETDEV_RX_FROZEN;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unfreeze network device receive queue processing
|
|
||||||
*
|
|
||||||
* @v netdev Network device
|
|
||||||
*/
|
|
||||||
static inline __attribute__ (( always_inline )) void
|
|
||||||
netdev_rx_unfreeze ( struct net_device *netdev ) {
|
|
||||||
netdev->state &= ~NETDEV_RX_FROZEN;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* _IPXE_NETDEVICE_H */
|
#endif /* _IPXE_NETDEVICE_H */
|
||||||
|
|
|
@ -108,6 +108,34 @@ static void netdev_notify ( struct net_device *netdev ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Freeze network device receive queue processing
|
||||||
|
*
|
||||||
|
* @v netdev Network device
|
||||||
|
*/
|
||||||
|
void netdev_rx_freeze ( struct net_device *netdev ) {
|
||||||
|
|
||||||
|
/* Mark receive queue processing as frozen */
|
||||||
|
netdev->state |= NETDEV_RX_FROZEN;
|
||||||
|
|
||||||
|
/* Notify drivers of change */
|
||||||
|
netdev_notify ( netdev );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unfreeze network device receive queue processing
|
||||||
|
*
|
||||||
|
* @v netdev Network device
|
||||||
|
*/
|
||||||
|
void netdev_rx_unfreeze ( struct net_device *netdev ) {
|
||||||
|
|
||||||
|
/* Mark receive queue processing as not frozen */
|
||||||
|
netdev->state &= ~NETDEV_RX_FROZEN;
|
||||||
|
|
||||||
|
/* Notify drivers of change */
|
||||||
|
netdev_notify ( netdev );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mark network device as having a specific link state
|
* Mark network device as having a specific link state
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue