0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #ifndef _EMAC_HW_H_
0016 #define _EMAC_HW_H_
0017
0018
0019 #define EMAC_EMAC_WRAPPER_CSR1 0x000000
0020 #define EMAC_EMAC_WRAPPER_CSR2 0x000004
0021 #define EMAC_EMAC_WRAPPER_TX_TS_LO 0x000104
0022 #define EMAC_EMAC_WRAPPER_TX_TS_HI 0x000108
0023 #define EMAC_EMAC_WRAPPER_TX_TS_INX 0x00010c
0024
0025
0026 enum emac_dma_order {
0027 emac_dma_ord_in = 1,
0028 emac_dma_ord_enh = 2,
0029 emac_dma_ord_out = 4
0030 };
0031
0032 enum emac_dma_req_block {
0033 emac_dma_req_128 = 0,
0034 emac_dma_req_256 = 1,
0035 emac_dma_req_512 = 2,
0036 emac_dma_req_1024 = 3,
0037 emac_dma_req_2048 = 4,
0038 emac_dma_req_4096 = 5
0039 };
0040
0041
0042 #define BITS_GET(val, lo, hi) ((le32_to_cpu(val) & GENMASK((hi), (lo))) >> lo)
0043 #define BITS_SET(val, lo, hi, new_val) \
0044 val = cpu_to_le32((le32_to_cpu(val) & (~GENMASK((hi), (lo)))) | \
0045 (((new_val) << (lo)) & GENMASK((hi), (lo))))
0046
0047
0048 struct emac_rrd {
0049 u32 word[6];
0050
0051
0052 #define RRD_NOR(rrd) BITS_GET((rrd)->word[0], 16, 19)
0053
0054 #define RRD_SI(rrd) BITS_GET((rrd)->word[0], 20, 31)
0055
0056 #define RRD_CVALN_TAG(rrd) BITS_GET((rrd)->word[2], 0, 15)
0057
0058 #define RRD_PKT_SIZE(rrd) BITS_GET((rrd)->word[3], 0, 13)
0059
0060 #define RRD_L4F(rrd) BITS_GET((rrd)->word[3], 14, 14)
0061
0062 #define RRD_CVTAG(rrd) BITS_GET((rrd)->word[3], 16, 16)
0063
0064
0065
0066 #define RRD_UPDT(rrd) BITS_GET((rrd)->word[3], 31, 31)
0067 #define RRD_UPDT_SET(rrd, val) BITS_SET((rrd)->word[3], 31, 31, val)
0068
0069 #define RRD_TS_LOW(rrd) BITS_GET((rrd)->word[4], 0, 29)
0070
0071 #define RRD_TS_HI(rrd) le32_to_cpu((rrd)->word[5])
0072 };
0073
0074
0075 struct emac_tpd {
0076 u32 word[4];
0077
0078
0079 #define TPD_BUF_LEN_SET(tpd, val) BITS_SET((tpd)->word[0], 0, 15, val)
0080
0081 #define TPD_CSX_SET(tpd, val) BITS_SET((tpd)->word[1], 8, 8, val)
0082
0083 #define TPD_LSO(tpd) BITS_GET((tpd)->word[1], 12, 12)
0084 #define TPD_LSO_SET(tpd, val) BITS_SET((tpd)->word[1], 12, 12, val)
0085
0086
0087
0088
0089 #define TPD_LSOV_SET(tpd, val) BITS_SET((tpd)->word[1], 13, 13, val)
0090
0091
0092
0093 #define TPD_IPV4_SET(tpd, val) BITS_SET((tpd)->word[1], 16, 16, val)
0094
0095
0096
0097 #define TPD_TYP_SET(tpd, val) BITS_SET((tpd)->word[1], 17, 17, val)
0098
0099 #define TPD_BUFFER_ADDR_L_SET(tpd, val) ((tpd)->word[2] = cpu_to_le32(val))
0100
0101
0102
0103 #define TPD_CVLAN_TAG_SET(tpd, val) BITS_SET((tpd)->word[3], 0, 15, val)
0104
0105
0106 #define TPD_INSTC_SET(tpd, val) BITS_SET((tpd)->word[3], 17, 17, val)
0107
0108
0109
0110
0111 #define TPD_BUFFER_ADDR_H_SET(tpd, val) BITS_SET((tpd)->word[3], 18, 31, val)
0112
0113
0114
0115 #define TPD_PAYLOAD_OFFSET_SET(tpd, val) BITS_SET((tpd)->word[1], 0, 7, val)
0116
0117
0118
0119 #define TPD_CXSUM_OFFSET_SET(tpd, val) BITS_SET((tpd)->word[1], 18, 25, val)
0120
0121
0122 #define TPD_TCPHDR_OFFSET_SET(tpd, val) BITS_SET((tpd)->word[1], 0, 7, val)
0123
0124
0125 #define TPD_MSS_SET(tpd, val) BITS_SET((tpd)->word[1], 18, 30, val)
0126
0127 #define TPD_PKT_LEN_SET(tpd, val) ((tpd)->word[2] = cpu_to_le32(val))
0128 };
0129
0130
0131
0132
0133 struct emac_ring_header {
0134 void *v_addr;
0135 dma_addr_t dma_addr;
0136 size_t size;
0137 size_t used;
0138 };
0139
0140
0141
0142
0143 struct emac_buffer {
0144 struct sk_buff *skb;
0145 u16 length;
0146 dma_addr_t dma_addr;
0147 };
0148
0149
0150 struct emac_rfd_ring {
0151 struct emac_buffer *rfbuff;
0152 u32 *v_addr;
0153 dma_addr_t dma_addr;
0154 size_t size;
0155 unsigned int count;
0156 unsigned int produce_idx;
0157 unsigned int process_idx;
0158 unsigned int consume_idx;
0159 };
0160
0161
0162 struct emac_rrd_ring {
0163 u32 *v_addr;
0164 dma_addr_t dma_addr;
0165 size_t size;
0166 unsigned int count;
0167 unsigned int produce_idx;
0168 unsigned int consume_idx;
0169 };
0170
0171
0172 struct emac_rx_queue {
0173 struct net_device *netdev;
0174 struct emac_rrd_ring rrd;
0175 struct emac_rfd_ring rfd;
0176 struct napi_struct napi;
0177 struct emac_irq *irq;
0178
0179 u32 intr;
0180 u32 produce_mask;
0181 u32 process_mask;
0182 u32 consume_mask;
0183
0184 u16 produce_reg;
0185 u16 process_reg;
0186 u16 consume_reg;
0187
0188 u8 produce_shift;
0189 u8 process_shft;
0190 u8 consume_shift;
0191 };
0192
0193
0194 struct emac_tpd_ring {
0195 struct emac_buffer *tpbuff;
0196 u32 *v_addr;
0197 dma_addr_t dma_addr;
0198
0199 size_t size;
0200 unsigned int count;
0201 unsigned int produce_idx;
0202 unsigned int consume_idx;
0203 unsigned int last_produce_idx;
0204 };
0205
0206
0207 struct emac_tx_queue {
0208 struct emac_tpd_ring tpd;
0209
0210 u32 produce_mask;
0211 u32 consume_mask;
0212
0213 u16 max_packets;
0214 u16 produce_reg;
0215 u16 consume_reg;
0216
0217 u8 produce_shift;
0218 u8 consume_shift;
0219 };
0220
0221 struct emac_adapter;
0222
0223 int emac_mac_up(struct emac_adapter *adpt);
0224 void emac_mac_down(struct emac_adapter *adpt);
0225 void emac_mac_reset(struct emac_adapter *adpt);
0226 void emac_mac_stop(struct emac_adapter *adpt);
0227 void emac_mac_mode_config(struct emac_adapter *adpt);
0228 void emac_mac_rx_process(struct emac_adapter *adpt, struct emac_rx_queue *rx_q,
0229 int *num_pkts, int max_pkts);
0230 netdev_tx_t emac_mac_tx_buf_send(struct emac_adapter *adpt,
0231 struct emac_tx_queue *tx_q,
0232 struct sk_buff *skb);
0233 void emac_mac_tx_process(struct emac_adapter *adpt, struct emac_tx_queue *tx_q);
0234 void emac_mac_rx_tx_ring_init_all(struct platform_device *pdev,
0235 struct emac_adapter *adpt);
0236 int emac_mac_rx_tx_rings_alloc_all(struct emac_adapter *adpt);
0237 void emac_mac_rx_tx_rings_free_all(struct emac_adapter *adpt);
0238 void emac_mac_multicast_addr_clear(struct emac_adapter *adpt);
0239 void emac_mac_multicast_addr_set(struct emac_adapter *adpt, u8 *addr);
0240
0241 #endif