nes_mgt.h 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * Copyright (c) 2006 - 2011 Intel-NE, Inc. All rights reserved.
  3. *
  4. * This software is available to you under a choice of one of two
  5. * licenses. You may choose to be licensed under the terms of the GNU
  6. * General Public License (GPL) Version 2, available from the file
  7. * COPYING in the main directory of this source tree, or the
  8. * OpenIB.org BSD license below:
  9. *
  10. * Redistribution and use in source and binary forms, with or
  11. * without modification, are permitted provided that the following
  12. * conditions are met:
  13. *
  14. * - Redistributions of source code must retain the above
  15. * copyright notice, this list of conditions and the following
  16. * disclaimer.
  17. *
  18. * - Redistributions in binary form must reproduce the above
  19. * copyright notice, this list of conditions and the following
  20. * disclaimer in the documentation and/or other materials
  21. * provided with the distribution.
  22. *
  23. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  24. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  25. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  26. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  27. * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  28. * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  29. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  30. * SOFTWARE.
  31. */
  32. #ifndef __NES_MGT_H
  33. #define __NES_MGT_H
  34. #define MPA_FRAMING 6 /* length is 2 bytes, crc is 4 bytes */
  35. int nes_init_mgt_qp(struct nes_device *nesdev, struct net_device *netdev, struct nes_vnic *nesvnic);
  36. void nes_queue_mgt_skbs(struct sk_buff *skb, struct nes_vnic *nesvnic, struct nes_qp *nesqp);
  37. void nes_destroy_mgt(struct nes_vnic *nesvnic);
  38. void nes_destroy_pau_qp(struct nes_device *nesdev, struct nes_qp *nesqp);
  39. struct nes_hw_mgt {
  40. struct nes_hw_nic_rq_wqe *rq_vbase; /* virtual address of rq */
  41. dma_addr_t rq_pbase; /* PCI memory for host rings */
  42. struct sk_buff *rx_skb[NES_NIC_WQ_SIZE];
  43. u16 qp_id;
  44. u16 sq_head;
  45. u16 rq_head;
  46. u16 rq_tail;
  47. u16 rq_size;
  48. u8 replenishing_rq;
  49. u8 reserved;
  50. spinlock_t rq_lock;
  51. };
  52. struct nes_vnic_mgt {
  53. struct nes_vnic *nesvnic;
  54. struct nes_hw_mgt mgt;
  55. struct nes_hw_nic_cq mgt_cq;
  56. atomic_t rx_skbs_needed;
  57. struct timer_list rq_wqes_timer;
  58. atomic_t rx_skb_timer_running;
  59. };
  60. #define MAX_FPDU_FRAGS 4
  61. struct pau_fpdu_frag {
  62. struct sk_buff *skb;
  63. u64 physaddr;
  64. u32 frag_len;
  65. bool cmplt;
  66. };
  67. struct pau_fpdu_info {
  68. struct nes_qp *nesqp;
  69. struct nes_cqp_request *cqp_request;
  70. void *hdr_vbase;
  71. dma_addr_t hdr_pbase;
  72. int hdr_len;
  73. u16 data_len;
  74. u16 frag_cnt;
  75. struct pau_fpdu_frag frags[MAX_FPDU_FRAGS];
  76. };
  77. enum pau_qh_state {
  78. PAU_DEL_QH,
  79. PAU_ADD_LB_QH,
  80. PAU_READY
  81. };
  82. struct pau_qh_chg {
  83. struct nes_device *nesdev;
  84. struct nes_vnic *nesvnic;
  85. struct nes_qp *nesqp;
  86. };
  87. #endif /* __NES_MGT_H */