1 /**************************************************************************/ 2 /* */ 3 /* IBM eServer i/[Series Virtual Ethernet Device Driver */ 4 /* Copyright (C) 2003 Dave Larson (larson1@us.ibm.com), IBM Corp. */ 5 /* */ 6 /* This program is free software; you can redistribute it and/or modify */ 7 /* it under the terms of the GNU General Public License as published by */ 8 /* the Free Software Foundation; either version 2 of the License, or */ 9 /* (at your option) any later version. */ 10 /* */ 11 /* This program is distributed in the hope that it will be useful, */ 12 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ 13 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ 14 /* GNU General Public License for more details. */ 15 /* */ 16 /* You should have received a copy of the GNU General Public License */ 17 /* along with this program; if not, write to the Free Software */ 18 /* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 */ 19 /* USA */ 20 /* */ 21 /**************************************************************************/ 22 23 #ifndef _IBMVETH_H 24 #define _IBMVETH_H 25 26 #define IbmVethMaxSendFrags 6 27 28 /* constants for H_MULTICAST_CTRL */ 29 #define IbmVethMcastReceptionModifyBit 0x80000UL 30 #define IbmVethMcastReceptionEnableBit 0x20000UL 31 #define IbmVethMcastFilterModifyBit 0x40000UL 32 #define IbmVethMcastFilterEnableBit 0x10000UL 33 34 #define IbmVethMcastEnableRecv (IbmVethMcastReceptionModifyBit | IbmVethMcastReceptionEnableBit) 35 #define IbmVethMcastDisableRecv (IbmVethMcastReceptionModifyBit) 36 #define IbmVethMcastEnableFiltering (IbmVethMcastFilterModifyBit | IbmVethMcastFilterEnableBit) 37 #define IbmVethMcastDisableFiltering (IbmVethMcastFilterModifyBit) 38 #define IbmVethMcastAddFilter 0x1UL 39 #define IbmVethMcastRemoveFilter 0x2UL 40 #define IbmVethMcastClearFilterTable 0x3UL 41 42 /* constants for H_VIO_SIGNAL */ 43 #define IbmVethIntsDisabled 0x0UL 44 #define IbmVethIntsEnabled 0x1UL 45 46 /* hcall numbers */ 47 #define H_VIO_SIGNAL 0x104 48 #define H_REGISTER_LOGICAL_LAN 0x114 49 #define H_FREE_LOGICAL_LAN 0x118 50 #define H_ADD_LOGICAL_LAN_BUFFER 0x11C 51 #define H_SEND_LOGICAL_LAN 0x120 52 #define H_MULTICAST_CTRL 0x130 53 #define H_CHANGE_LOGICAL_LAN_MAC 0x14C 54 55 /* hcall macros */ 56 #define h_vio_signal(ua, mode) \ 57 plpar_hcall_norets(H_VIO_SIGNAL, ua, mode) 58 59 #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \ 60 plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac) 61 62 #define h_free_logical_lan(ua) \ 63 plpar_hcall_norets(H_FREE_LOGICAL_LAN, ua) 64 65 #define h_add_logical_lan_buffer(ua, buf) \ 66 plpar_hcall_norets(H_ADD_LOGICAL_LAN_BUFFER, ua, buf) 67 68 #define h_send_logical_lan(ua, buf1, buf2, buf3, buf4, buf5, buf6, correlator) \ 69 plpar_hcall_8arg_2ret(H_SEND_LOGICAL_LAN, ua, buf1, buf2, buf3, buf4, buf5, buf6, correlator, &correlator) 70 71 #define h_multicast_ctrl(ua, cmd, mac) \ 72 plpar_hcall_norets(H_MULTICAST_CTRL, ua, cmd, mac) 73 74 #define h_change_logical_lan_mac(ua, mac) \ 75 plpar_hcall_norets(H_CHANGE_LOGICAL_LAN_MAC, ua, mac) 76 77 #define IbmVethNumBufferPools 3 78 #define IbmVethPool0DftSize (1024 * 2) 79 #define IbmVethPool1DftSize (1024 * 4) 80 #define IbmVethPool2DftSize (1024 * 10) 81 #define IbmVethPool0DftCnt 256 82 #define IbmVethPool1DftCnt 256 83 #define IbmVethPool2DftCnt 256 84 85 struct ibmveth_buff_pool { 86 u32 size; 87 u32 index; 88 u32 buff_size; 89 u32 threshold; 90 atomic_t available; 91 u32 consumer_index; 92 u32 producer_index; 93 u16 *free_map; 94 dma_addr_t *dma_addr; 95 struct sk_buff **skbuff; 96 }; 97 98 struct ibmveth_rx_q { 99 u64 index; 100 u64 num_slots; 101 u64 toggle; 102 dma_addr_t queue_dma; 103 u32 queue_len; 104 struct ibmveth_rx_q_entry *queue_addr; 105 }; 106 107 struct ibmveth_adapter { 108 struct vio_dev *vdev; 109 struct net_device *netdev; 110 struct net_device_stats stats; 111 unsigned int mcastFilterSize; 112 unsigned long mac_addr; 113 unsigned long liobn; 114 void * buffer_list_addr; 115 void * filter_list_addr; 116 dma_addr_t buffer_list_dma; 117 dma_addr_t filter_list_dma; 118 struct ibmveth_buff_pool rx_buff_pool[IbmVethNumBufferPools]; 119 struct ibmveth_rx_q rx_queue; 120 /* helper tasks */ 121 struct tasklet_struct replenish_task; 122 /* adapter specific stats */ 123 u64 replenish_task_cycles; 124 u64 replenish_no_mem; 125 u64 replenish_add_buff_failure; 126 u64 replenish_add_buff_success; 127 u64 rx_invalid_buffer; 128 u64 rx_no_buffer; 129 u64 tx_multidesc_send; 130 u64 tx_linearized; 131 u64 tx_linearize_failed; 132 u64 tx_map_failed; 133 u64 tx_send_failed; 134 }; 135 136 struct ibmveth_buf_desc_fields { 137 u32 valid : 1; 138 u32 toggle : 1; 139 u32 reserved : 6; 140 u32 length : 24; 141 u32 address; 142 }; 143 144 union ibmveth_buf_desc { 145 u64 desc; 146 struct ibmveth_buf_desc_fields fields; 147 }; 148 149 struct ibmveth_rx_q_entry { 150 u16 toggle : 1; 151 u16 valid : 1; 152 u16 reserved : 14; 153 u16 offset; 154 u32 length; 155 u64 correlator; 156 }; 157 158 #endif /* _IBMVETH_H */ 159