-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
net: stmmac: Switch stmmac_desc_ops to generic HW Interface Helpers
Switch stmmac_desc_ops to generic Hardware Interface Helpers instead of using hard-coded callbacks. This makes the code more readable and more flexible. No functional change. Signed-off-by: Jose Abreu <joabreu@synopsys.com> Cc: David S. Miller <davem@davemloft.net> Cc: Joao Pinto <jpinto@synopsys.com> Cc: Giuseppe Cavallaro <peppe.cavallaro@st.com> Cc: Alexandre Torgue <alexandre.torgue@st.com> Signed-off-by: David S. Miller <davem@davemloft.net>
- Loading branch information
Jose Abreu
authored and
David S. Miller
committed
Apr 16, 2018
1 parent
309c446
commit 42de047
Showing
8 changed files
with
195 additions
and
136 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
// SPDX-License-Identifier: (GPL-2.0 OR MIT) | ||
// Copyright (c) 2018 Synopsys, Inc. and/or its affiliates. | ||
// stmmac HW Interface Callbacks | ||
|
||
#ifndef __STMMAC_HWIF_H__ | ||
#define __STMMAC_HWIF_H__ | ||
|
||
#define stmmac_do_void_callback(__priv, __module, __cname, __arg0, __args...) \ | ||
({ \ | ||
int __result = -EINVAL; \ | ||
if ((__priv)->hw->__module->__cname) { \ | ||
(__priv)->hw->__module->__cname((__arg0), ##__args); \ | ||
__result = 0; \ | ||
} \ | ||
__result; \ | ||
}) | ||
#define stmmac_do_callback(__priv, __module, __cname, __arg0, __args...) \ | ||
({ \ | ||
int __result = -EINVAL; \ | ||
if ((__priv)->hw->__module->__cname) \ | ||
__result = (__priv)->hw->__module->__cname((__arg0), ##__args); \ | ||
__result; \ | ||
}) | ||
|
||
struct stmmac_extra_stats; | ||
struct stmmac_safety_stats; | ||
struct dma_desc; | ||
struct dma_extended_desc; | ||
|
||
/* Descriptors helpers */ | ||
struct stmmac_desc_ops { | ||
/* DMA RX descriptor ring initialization */ | ||
void (*init_rx_desc)(struct dma_desc *p, int disable_rx_ic, int mode, | ||
int end); | ||
/* DMA TX descriptor ring initialization */ | ||
void (*init_tx_desc)(struct dma_desc *p, int mode, int end); | ||
/* Invoked by the xmit function to prepare the tx descriptor */ | ||
void (*prepare_tx_desc)(struct dma_desc *p, int is_fs, int len, | ||
bool csum_flag, int mode, bool tx_own, bool ls, | ||
unsigned int tot_pkt_len); | ||
void (*prepare_tso_tx_desc)(struct dma_desc *p, int is_fs, int len1, | ||
int len2, bool tx_own, bool ls, unsigned int tcphdrlen, | ||
unsigned int tcppayloadlen); | ||
/* Set/get the owner of the descriptor */ | ||
void (*set_tx_owner)(struct dma_desc *p); | ||
int (*get_tx_owner)(struct dma_desc *p); | ||
/* Clean the tx descriptor as soon as the tx irq is received */ | ||
void (*release_tx_desc)(struct dma_desc *p, int mode); | ||
/* Clear interrupt on tx frame completion. When this bit is | ||
* set an interrupt happens as soon as the frame is transmitted */ | ||
void (*set_tx_ic)(struct dma_desc *p); | ||
/* Last tx segment reports the transmit status */ | ||
int (*get_tx_ls)(struct dma_desc *p); | ||
/* Return the transmit status looking at the TDES1 */ | ||
int (*tx_status)(void *data, struct stmmac_extra_stats *x, | ||
struct dma_desc *p, void __iomem *ioaddr); | ||
/* Get the buffer size from the descriptor */ | ||
int (*get_tx_len)(struct dma_desc *p); | ||
/* Handle extra events on specific interrupts hw dependent */ | ||
void (*set_rx_owner)(struct dma_desc *p); | ||
/* Get the receive frame size */ | ||
int (*get_rx_frame_len)(struct dma_desc *p, int rx_coe_type); | ||
/* Return the reception status looking at the RDES1 */ | ||
int (*rx_status)(void *data, struct stmmac_extra_stats *x, | ||
struct dma_desc *p); | ||
void (*rx_extended_status)(void *data, struct stmmac_extra_stats *x, | ||
struct dma_extended_desc *p); | ||
/* Set tx timestamp enable bit */ | ||
void (*enable_tx_timestamp) (struct dma_desc *p); | ||
/* get tx timestamp status */ | ||
int (*get_tx_timestamp_status) (struct dma_desc *p); | ||
/* get timestamp value */ | ||
void (*get_timestamp)(void *desc, u32 ats, u64 *ts); | ||
/* get rx timestamp status */ | ||
int (*get_rx_timestamp_status)(void *desc, void *next_desc, u32 ats); | ||
/* Display ring */ | ||
void (*display_ring)(void *head, unsigned int size, bool rx); | ||
/* set MSS via context descriptor */ | ||
void (*set_mss)(struct dma_desc *p, unsigned int mss); | ||
}; | ||
|
||
#define stmmac_init_rx_desc(__priv, __args...) \ | ||
stmmac_do_void_callback(__priv, desc, init_rx_desc, __args) | ||
#define stmmac_init_tx_desc(__priv, __args...) \ | ||
stmmac_do_void_callback(__priv, desc, init_tx_desc, __args) | ||
#define stmmac_prepare_tx_desc(__priv, __args...) \ | ||
stmmac_do_void_callback(__priv, desc, prepare_tx_desc, __args) | ||
#define stmmac_prepare_tso_tx_desc(__priv, __args...) \ | ||
stmmac_do_void_callback(__priv, desc, prepare_tso_tx_desc, __args) | ||
#define stmmac_set_tx_owner(__priv, __args...) \ | ||
stmmac_do_void_callback(__priv, desc, set_tx_owner, __args) | ||
#define stmmac_get_tx_owner(__priv, __args...) \ | ||
stmmac_do_callback(__priv, desc, get_tx_owner, __args) | ||
#define stmmac_release_tx_desc(__priv, __args...) \ | ||
stmmac_do_void_callback(__priv, desc, release_tx_desc, __args) | ||
#define stmmac_set_tx_ic(__priv, __args...) \ | ||
stmmac_do_void_callback(__priv, desc, set_tx_ic, __args) | ||
#define stmmac_get_tx_ls(__priv, __args...) \ | ||
stmmac_do_callback(__priv, desc, get_tx_ls, __args) | ||
#define stmmac_tx_status(__priv, __args...) \ | ||
stmmac_do_callback(__priv, desc, tx_status, __args) | ||
#define stmmac_get_tx_len(__priv, __args...) \ | ||
stmmac_do_callback(__priv, desc, get_tx_len, __args) | ||
#define stmmac_set_rx_owner(__priv, __args...) \ | ||
stmmac_do_void_callback(__priv, desc, set_rx_owner, __args) | ||
#define stmmac_get_rx_frame_len(__priv, __args...) \ | ||
stmmac_do_callback(__priv, desc, get_rx_frame_len, __args) | ||
#define stmmac_rx_status(__priv, __args...) \ | ||
stmmac_do_callback(__priv, desc, rx_status, __args) | ||
#define stmmac_rx_extended_status(__priv, __args...) \ | ||
stmmac_do_void_callback(__priv, desc, rx_extended_status, __args) | ||
#define stmmac_enable_tx_timestamp(__priv, __args...) \ | ||
stmmac_do_void_callback(__priv, desc, enable_tx_timestamp, __args) | ||
#define stmmac_get_tx_timestamp_status(__priv, __args...) \ | ||
stmmac_do_callback(__priv, desc, get_tx_timestamp_status, __args) | ||
#define stmmac_get_timestamp(__priv, __args...) \ | ||
stmmac_do_void_callback(__priv, desc, get_timestamp, __args) | ||
#define stmmac_get_rx_timestamp_status(__priv, __args...) \ | ||
stmmac_do_callback(__priv, desc, get_rx_timestamp_status, __args) | ||
#define stmmac_display_ring(__priv, __args...) \ | ||
stmmac_do_void_callback(__priv, desc, display_ring, __args) | ||
#define stmmac_set_mss(__priv, __args...) \ | ||
stmmac_do_void_callback(__priv, desc, set_mss, __args) | ||
|
||
#endif /* __STMMAC_HWIF_H__ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.