diff options
Diffstat (limited to 'drivers/net/sfc/net_driver.h')
-rw-r--r-- | drivers/net/sfc/net_driver.h | 43 |
1 files changed, 37 insertions, 6 deletions
diff --git a/drivers/net/sfc/net_driver.h b/drivers/net/sfc/net_driver.h index 89c6e02c57d..eb3537529c9 100644 --- a/drivers/net/sfc/net_driver.h +++ b/drivers/net/sfc/net_driver.h | |||
@@ -909,18 +909,34 @@ struct efx_nic_type { | |||
909 | * | 909 | * |
910 | *************************************************************************/ | 910 | *************************************************************************/ |
911 | 911 | ||
912 | static inline struct efx_channel * | ||
913 | efx_get_channel(struct efx_nic *efx, unsigned index) | ||
914 | { | ||
915 | EFX_BUG_ON_PARANOID(index >= efx->n_channels); | ||
916 | return &efx->channel[index]; | ||
917 | } | ||
918 | |||
912 | /* Iterate over all used channels */ | 919 | /* Iterate over all used channels */ |
913 | #define efx_for_each_channel(_channel, _efx) \ | 920 | #define efx_for_each_channel(_channel, _efx) \ |
914 | for (_channel = &((_efx)->channel[0]); \ | 921 | for (_channel = &((_efx)->channel[0]); \ |
915 | _channel < &((_efx)->channel[(efx)->n_channels]); \ | 922 | _channel < &((_efx)->channel[(efx)->n_channels]); \ |
916 | _channel++) | 923 | _channel++) |
917 | 924 | ||
918 | /* Iterate over all used TX queues */ | 925 | static inline struct efx_tx_queue * |
919 | #define efx_for_each_tx_queue(_tx_queue, _efx) \ | 926 | efx_get_tx_queue(struct efx_nic *efx, unsigned index, unsigned type) |
920 | for (_tx_queue = &((_efx)->tx_queue[0]); \ | 927 | { |
921 | _tx_queue < &((_efx)->tx_queue[EFX_TXQ_TYPES * \ | 928 | EFX_BUG_ON_PARANOID(index >= efx->n_tx_channels || |
922 | (_efx)->n_tx_channels]); \ | 929 | type >= EFX_TXQ_TYPES); |
923 | _tx_queue++) | 930 | return &efx->tx_queue[index * EFX_TXQ_TYPES + type]; |
931 | } | ||
932 | |||
933 | static inline struct efx_tx_queue * | ||
934 | efx_channel_get_tx_queue(struct efx_channel *channel, unsigned type) | ||
935 | { | ||
936 | struct efx_tx_queue *tx_queue = channel->tx_queue; | ||
937 | EFX_BUG_ON_PARANOID(type >= EFX_TXQ_TYPES); | ||
938 | return tx_queue ? tx_queue + type : NULL; | ||
939 | } | ||
924 | 940 | ||
925 | /* Iterate over all TX queues belonging to a channel */ | 941 | /* Iterate over all TX queues belonging to a channel */ |
926 | #define efx_for_each_channel_tx_queue(_tx_queue, _channel) \ | 942 | #define efx_for_each_channel_tx_queue(_tx_queue, _channel) \ |
@@ -928,12 +944,27 @@ struct efx_nic_type { | |||
928 | _tx_queue && _tx_queue < (_channel)->tx_queue + EFX_TXQ_TYPES; \ | 944 | _tx_queue && _tx_queue < (_channel)->tx_queue + EFX_TXQ_TYPES; \ |
929 | _tx_queue++) | 945 | _tx_queue++) |
930 | 946 | ||
947 | static inline struct efx_rx_queue * | ||
948 | efx_get_rx_queue(struct efx_nic *efx, unsigned index) | ||
949 | { | ||
950 | EFX_BUG_ON_PARANOID(index >= efx->n_rx_channels); | ||
951 | return &efx->rx_queue[index]; | ||
952 | } | ||
953 | |||
931 | /* Iterate over all used RX queues */ | 954 | /* Iterate over all used RX queues */ |
932 | #define efx_for_each_rx_queue(_rx_queue, _efx) \ | 955 | #define efx_for_each_rx_queue(_rx_queue, _efx) \ |
933 | for (_rx_queue = &((_efx)->rx_queue[0]); \ | 956 | for (_rx_queue = &((_efx)->rx_queue[0]); \ |
934 | _rx_queue < &((_efx)->rx_queue[(_efx)->n_rx_channels]); \ | 957 | _rx_queue < &((_efx)->rx_queue[(_efx)->n_rx_channels]); \ |
935 | _rx_queue++) | 958 | _rx_queue++) |
936 | 959 | ||
960 | static inline struct efx_rx_queue * | ||
961 | efx_channel_get_rx_queue(struct efx_channel *channel) | ||
962 | { | ||
963 | struct efx_rx_queue *rx_queue = | ||
964 | &channel->efx->rx_queue[channel->channel]; | ||
965 | return rx_queue->channel == channel ? rx_queue : NULL; | ||
966 | } | ||
967 | |||
937 | /* Iterate over all RX queues belonging to a channel */ | 968 | /* Iterate over all RX queues belonging to a channel */ |
938 | #define efx_for_each_channel_rx_queue(_rx_queue, _channel) \ | 969 | #define efx_for_each_channel_rx_queue(_rx_queue, _channel) \ |
939 | for (_rx_queue = &((_channel)->efx->rx_queue[(_channel)->channel]); \ | 970 | for (_rx_queue = &((_channel)->efx->rx_queue[(_channel)->channel]); \ |