alx.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /*
  2. * Copyright (c) 2013 Johannes Berg <johannes@sipsolutions.net>
  3. *
  4. * This file is free software: you may copy, redistribute and/or modify it
  5. * under the terms of the GNU General Public License as published by the
  6. * Free Software Foundation, either version 2 of the License, or (at your
  7. * option) any later version.
  8. *
  9. * This file is distributed in the hope that it will be useful, but
  10. * WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. *
  17. * This file incorporates work covered by the following copyright and
  18. * permission notice:
  19. *
  20. * Copyright (c) 2012 Qualcomm Atheros, Inc.
  21. *
  22. * Permission to use, copy, modify, and/or distribute this software for any
  23. * purpose with or without fee is hereby granted, provided that the above
  24. * copyright notice and this permission notice appear in all copies.
  25. *
  26. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  27. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  28. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  29. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  30. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  31. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  32. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  33. */
  34. #ifndef _ALX_H_
  35. #define _ALX_H_
  36. #include <linux/types.h>
  37. #include <linux/etherdevice.h>
  38. #include <linux/dma-mapping.h>
  39. #include <linux/spinlock.h>
  40. #include "hw.h"
  41. #define ALX_WATCHDOG_TIME (5 * HZ)
  42. struct alx_buffer {
  43. struct sk_buff *skb;
  44. DEFINE_DMA_UNMAP_ADDR(dma);
  45. DEFINE_DMA_UNMAP_LEN(size);
  46. };
  47. struct alx_rx_queue {
  48. struct alx_rrd *rrd;
  49. dma_addr_t rrd_dma;
  50. struct alx_rfd *rfd;
  51. dma_addr_t rfd_dma;
  52. struct alx_buffer *bufs;
  53. u16 write_idx, read_idx;
  54. u16 rrd_read_idx;
  55. };
  56. #define ALX_RX_ALLOC_THRESH 32
  57. struct alx_tx_queue {
  58. struct alx_txd *tpd;
  59. dma_addr_t tpd_dma;
  60. struct alx_buffer *bufs;
  61. u16 write_idx, read_idx;
  62. };
  63. #define ALX_DEFAULT_TX_WORK 128
  64. enum alx_device_quirks {
  65. ALX_DEV_QUIRK_MSI_INTX_DISABLE_BUG = BIT(0),
  66. };
  67. struct alx_priv {
  68. struct net_device *dev;
  69. struct alx_hw hw;
  70. /* all descriptor memory */
  71. struct {
  72. dma_addr_t dma;
  73. void *virt;
  74. unsigned int size;
  75. } descmem;
  76. /* protect int_mask updates */
  77. spinlock_t irq_lock;
  78. u32 int_mask;
  79. unsigned int tx_ringsz;
  80. unsigned int rx_ringsz;
  81. unsigned int rxbuf_size;
  82. struct napi_struct napi;
  83. struct alx_tx_queue txq;
  84. struct alx_rx_queue rxq;
  85. struct work_struct link_check_wk;
  86. struct work_struct reset_wk;
  87. u16 msg_enable;
  88. bool msi;
  89. /* protects hw.stats */
  90. spinlock_t stats_lock;
  91. };
  92. extern const struct ethtool_ops alx_ethtool_ops;
  93. extern const char alx_drv_name[];
  94. #endif