|  | /* | 
|  | * Copyright (c) 2013 Johannes Berg <johannes@sipsolutions.net> | 
|  | * | 
|  | *  This file is free software: you may copy, redistribute and/or modify it | 
|  | *  under the terms of the GNU General Public License as published by the | 
|  | *  Free Software Foundation, either version 2 of the License, or (at your | 
|  | *  option) any later version. | 
|  | * | 
|  | *  This file is distributed in the hope that it will be useful, but | 
|  | *  WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|  | *  General Public License for more details. | 
|  | * | 
|  | *  You should have received a copy of the GNU General Public License | 
|  | *  along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
|  | * | 
|  | * This file incorporates work covered by the following copyright and | 
|  | * permission notice: | 
|  | * | 
|  | * Copyright (c) 2012 Qualcomm Atheros, Inc. | 
|  | * | 
|  | * Permission to use, copy, modify, and/or distribute this software for any | 
|  | * purpose with or without fee is hereby granted, provided that the above | 
|  | * copyright notice and this permission notice appear in all copies. | 
|  | * | 
|  | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | 
|  | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | 
|  | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | 
|  | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | 
|  | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | 
|  | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | 
|  | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 
|  | */ | 
|  |  | 
|  | #ifndef _ALX_H_ | 
|  | #define _ALX_H_ | 
|  |  | 
|  | #include <linux/types.h> | 
|  | #include <linux/etherdevice.h> | 
|  | #include <linux/dma-mapping.h> | 
|  | #include <linux/spinlock.h> | 
|  | #include "hw.h" | 
|  |  | 
|  | #define ALX_WATCHDOG_TIME   (5 * HZ) | 
|  |  | 
|  | struct alx_buffer { | 
|  | struct sk_buff *skb; | 
|  | DEFINE_DMA_UNMAP_ADDR(dma); | 
|  | DEFINE_DMA_UNMAP_LEN(size); | 
|  | }; | 
|  |  | 
|  | struct alx_rx_queue { | 
|  | struct net_device *netdev; | 
|  | struct device *dev; | 
|  | struct alx_napi *np; | 
|  |  | 
|  | struct alx_rrd *rrd; | 
|  | dma_addr_t rrd_dma; | 
|  |  | 
|  | struct alx_rfd *rfd; | 
|  | dma_addr_t rfd_dma; | 
|  |  | 
|  | struct alx_buffer *bufs; | 
|  |  | 
|  | u16 count; | 
|  | u16 write_idx, read_idx; | 
|  | u16 rrd_read_idx; | 
|  | u16 queue_idx; | 
|  | }; | 
|  | #define ALX_RX_ALLOC_THRESH	32 | 
|  |  | 
|  | struct alx_tx_queue { | 
|  | struct net_device *netdev; | 
|  | struct device *dev; | 
|  |  | 
|  | struct alx_txd *tpd; | 
|  | dma_addr_t tpd_dma; | 
|  |  | 
|  | struct alx_buffer *bufs; | 
|  |  | 
|  | u16 count; | 
|  | u16 write_idx, read_idx; | 
|  | u16 queue_idx; | 
|  | u16 p_reg, c_reg; | 
|  | }; | 
|  |  | 
|  | #define ALX_DEFAULT_TX_WORK 128 | 
|  |  | 
|  | enum alx_device_quirks { | 
|  | ALX_DEV_QUIRK_MSI_INTX_DISABLE_BUG = BIT(0), | 
|  | }; | 
|  |  | 
|  | struct alx_napi { | 
|  | struct napi_struct	napi; | 
|  | struct alx_priv		*alx; | 
|  | struct alx_rx_queue	*rxq; | 
|  | struct alx_tx_queue	*txq; | 
|  | int			vec_idx; | 
|  | u32			vec_mask; | 
|  | char			irq_lbl[IFNAMSIZ + 8]; | 
|  | }; | 
|  |  | 
|  | #define ALX_MAX_NAPIS 8 | 
|  |  | 
|  | struct alx_priv { | 
|  | struct net_device *dev; | 
|  |  | 
|  | struct alx_hw hw; | 
|  |  | 
|  | /* msi-x vectors */ | 
|  | int num_vec; | 
|  |  | 
|  | /* all descriptor memory */ | 
|  | struct { | 
|  | dma_addr_t dma; | 
|  | void *virt; | 
|  | unsigned int size; | 
|  | } descmem; | 
|  |  | 
|  | struct alx_napi *qnapi[ALX_MAX_NAPIS]; | 
|  | int num_txq; | 
|  | int num_rxq; | 
|  | int num_napi; | 
|  |  | 
|  | /* protect int_mask updates */ | 
|  | spinlock_t irq_lock; | 
|  | u32 int_mask; | 
|  |  | 
|  | unsigned int tx_ringsz; | 
|  | unsigned int rx_ringsz; | 
|  | unsigned int rxbuf_size; | 
|  |  | 
|  | struct work_struct link_check_wk; | 
|  | struct work_struct reset_wk; | 
|  |  | 
|  | u16 msg_enable; | 
|  |  | 
|  | /* protects hw.stats */ | 
|  | spinlock_t stats_lock; | 
|  |  | 
|  | struct mutex mtx; | 
|  | }; | 
|  |  | 
|  | extern const struct ethtool_ops alx_ethtool_ops; | 
|  |  | 
|  | #endif |