| 
									
										
										
										
											2011-09-25 20:34:00 -05:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2011-11-28 14:22:29 -06:00
										 |  |  | * Copyright (c) 2006 - 2011 Intel-NE, Inc.  All rights reserved. | 
					
						
							| 
									
										
										
										
											2011-09-25 20:34:00 -05:00
										 |  |  | * | 
					
						
							|  |  |  | * This software is available to you under a choice of one of two | 
					
						
							|  |  |  | * licenses.  You may choose to be licensed under the terms of the GNU | 
					
						
							|  |  |  | * General Public License (GPL) Version 2, available from the file | 
					
						
							|  |  |  | * COPYING in the main directory of this source tree, or the | 
					
						
							|  |  |  | * OpenIB.org BSD license below: | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | *     Redistribution and use in source and binary forms, with or | 
					
						
							|  |  |  | *     without modification, are permitted provided that the following | 
					
						
							|  |  |  | *     conditions are met: | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | *      - Redistributions of source code must retain the above | 
					
						
							|  |  |  | *        copyright notice, this list of conditions and the following | 
					
						
							|  |  |  | *        disclaimer. | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | *      - Redistributions in binary form must reproduce the above | 
					
						
							|  |  |  | *        copyright notice, this list of conditions and the following | 
					
						
							|  |  |  | *        disclaimer in the documentation and/or other materials | 
					
						
							|  |  |  | *        provided with the distribution. | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | 
					
						
							|  |  |  | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | 
					
						
							|  |  |  | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | 
					
						
							|  |  |  | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | 
					
						
							|  |  |  | * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | 
					
						
							|  |  |  | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | 
					
						
							|  |  |  | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 
					
						
							|  |  |  | * SOFTWARE. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef __NES_MGT_H
 | 
					
						
							|  |  |  | #define __NES_MGT_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define MPA_FRAMING 6	/* length is 2 bytes, crc is 4 bytes */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int nes_init_mgt_qp(struct nes_device *nesdev, struct net_device *netdev, struct nes_vnic *nesvnic); | 
					
						
							|  |  |  | void nes_queue_mgt_skbs(struct sk_buff *skb, struct nes_vnic *nesvnic, struct nes_qp *nesqp); | 
					
						
							|  |  |  | void nes_destroy_mgt(struct nes_vnic *nesvnic); | 
					
						
							|  |  |  | void nes_destroy_pau_qp(struct nes_device *nesdev, struct nes_qp *nesqp); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct nes_hw_mgt { | 
					
						
							|  |  |  | 	struct nes_hw_nic_rq_wqe *rq_vbase;	/* virtual address of rq */ | 
					
						
							|  |  |  | 	dma_addr_t rq_pbase;			/* PCI memory for host rings */ | 
					
						
							|  |  |  | 	struct sk_buff *rx_skb[NES_NIC_WQ_SIZE]; | 
					
						
							|  |  |  | 	u16 qp_id; | 
					
						
							|  |  |  | 	u16 sq_head; | 
					
						
							|  |  |  | 	u16 rq_head; | 
					
						
							|  |  |  | 	u16 rq_tail; | 
					
						
							|  |  |  | 	u16 rq_size; | 
					
						
							|  |  |  | 	u8 replenishing_rq; | 
					
						
							|  |  |  | 	u8 reserved; | 
					
						
							|  |  |  | 	spinlock_t rq_lock; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct nes_vnic_mgt { | 
					
						
							|  |  |  | 	struct nes_vnic        *nesvnic; | 
					
						
							|  |  |  | 	struct nes_hw_mgt      mgt; | 
					
						
							|  |  |  | 	struct nes_hw_nic_cq   mgt_cq; | 
					
						
							|  |  |  | 	atomic_t               rx_skbs_needed; | 
					
						
							|  |  |  | 	struct timer_list      rq_wqes_timer; | 
					
						
							|  |  |  | 	atomic_t               rx_skb_timer_running; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define MAX_FPDU_FRAGS 4
 | 
					
						
							|  |  |  | struct pau_fpdu_frag { | 
					
						
							|  |  |  | 	struct sk_buff         *skb; | 
					
						
							|  |  |  | 	u64                    physaddr; | 
					
						
							|  |  |  | 	u32                    frag_len; | 
					
						
							|  |  |  | 	bool                   cmplt; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct pau_fpdu_info { | 
					
						
							|  |  |  | 	struct nes_qp          *nesqp; | 
					
						
							|  |  |  | 	struct nes_cqp_request *cqp_request; | 
					
						
							|  |  |  | 	void                   *hdr_vbase; | 
					
						
							|  |  |  | 	dma_addr_t             hdr_pbase; | 
					
						
							|  |  |  | 	int                    hdr_len; | 
					
						
							|  |  |  | 	u16                    data_len; | 
					
						
							|  |  |  | 	u16                    frag_cnt; | 
					
						
							|  |  |  | 	struct pau_fpdu_frag   frags[MAX_FPDU_FRAGS]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum pau_qh_state { | 
					
						
							|  |  |  | 	PAU_DEL_QH, | 
					
						
							|  |  |  | 	PAU_ADD_LB_QH, | 
					
						
							|  |  |  | 	PAU_READY | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct pau_qh_chg { | 
					
						
							|  |  |  | 	struct nes_device *nesdev; | 
					
						
							|  |  |  | 	struct nes_vnic *nesvnic; | 
					
						
							|  |  |  | 	struct nes_qp *nesqp; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif          /* __NES_MGT_H */
 |