108 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * Applied Micro X-Gene SoC Ethernet v2 Driver4 *5 * Copyright (c) 2017, Applied Micro Circuits Corporation6 * Author(s): Iyappan Subramanian <isubramanian@apm.com>7 * Keyur Chudgar <kchudgar@apm.com>8 */9 10#ifndef __XGENE_ENET_V2_RING_H__11#define __XGENE_ENET_V2_RING_H__12 13#define XGENE_ENET_DESC_SIZE 6414#define XGENE_ENET_NUM_DESC 25615#define NUM_BUFS 816#define SLOT_EMPTY 0xfff17 18#define DMATXCTRL 0xa18019#define DMATXDESCL 0xa18420#define DMATXDESCH 0xa1a021#define DMATXSTATUS 0xa18822#define DMARXCTRL 0xa18c23#define DMARXDESCL 0xa19024#define DMARXDESCH 0xa1a425#define DMARXSTATUS 0xa19426#define DMAINTRMASK 0xa19827#define DMAINTERRUPT 0xa19c28 29#define D_POS 6230#define D_LEN 231#define E_POS 6332#define E_LEN 133#define PKT_ADDRL_POS 034#define PKT_ADDRL_LEN 3235#define PKT_ADDRH_POS 3236#define PKT_ADDRH_LEN 1037#define PKT_SIZE_POS 3238#define PKT_SIZE_LEN 1239#define NEXT_DESC_ADDRL_POS 040#define NEXT_DESC_ADDRL_LEN 3241#define NEXT_DESC_ADDRH_POS 4842#define NEXT_DESC_ADDRH_LEN 1043 44#define TXPKTCOUNT_POS 1645#define TXPKTCOUNT_LEN 846#define RXPKTCOUNT_POS 1647#define RXPKTCOUNT_LEN 848 49#define TX_PKT_SENT BIT(0)50#define TX_BUS_ERROR BIT(3)51#define RX_PKT_RCVD BIT(4)52#define RX_BUS_ERROR BIT(7)53#define RXSTATUS_RXPKTRCVD BIT(0)54 55struct xge_raw_desc {56 __le64 m0;57 __le64 m1;58 __le64 m2;59 __le64 m3;60 __le64 m4;61 __le64 m5;62 __le64 m6;63 __le64 m7;64};65 66struct pkt_info {67 struct sk_buff *skb;68 dma_addr_t dma_addr;69 void *pkt_buf;70};71 72/* software context of a descriptor ring */73struct xge_desc_ring {74 struct net_device *ndev;75 dma_addr_t dma_addr;76 u8 head;77 u8 tail;78 union {79 void *desc_addr;80 struct xge_raw_desc *raw_desc;81 };82 struct pkt_info (*pkt_info);83};84 85static inline u64 xge_set_desc_bits(int pos, int len, u64 val)86{87 return (val & ((1ULL << len) - 1)) << pos;88}89 90static inline u64 xge_get_desc_bits(int pos, int len, u64 src)91{92 return (src >> pos) & ((1ULL << len) - 1);93}94 95#define SET_BITS(field, val) \96 xge_set_desc_bits(field ## _POS, field ## _LEN, val)97 98#define GET_BITS(field, src) \99 xge_get_desc_bits(field ## _POS, field ## _LEN, src)100 101void xge_setup_desc(struct xge_desc_ring *ring);102void xge_update_tx_desc_addr(struct xge_pdata *pdata);103void xge_update_rx_desc_addr(struct xge_pdata *pdata);104void xge_intr_enable(struct xge_pdata *pdata);105void xge_intr_disable(struct xge_pdata *pdata);106 107#endif /* __XGENE_ENET_V2_RING_H__ */108