Branch data Line data Source code
1 : : /* 2 : : * Copyright 2014 Cisco Systems, Inc. All rights reserved. 3 : : * 4 : : * This program is free software; you may redistribute it and/or modify 5 : : * it under the terms of the GNU General Public License as published by 6 : : * the Free Software Foundation; version 2 of the License. 7 : : * 8 : : * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 9 : : * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 10 : : * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 11 : : * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 12 : : * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 13 : : * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 14 : : * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 15 : : * SOFTWARE. 16 : : */ 17 : : 18 : : #ifndef _VNIC_CQ_FW_H_ 19 : : #define _VNIC_CQ_FW_H_ 20 : : 21 : : #include "snic_fwint.h" 22 : : 23 : : static inline unsigned int 24 : 0 : vnic_cq_fw_service(struct vnic_cq *cq, 25 : : int (*q_service)(struct vnic_dev *vdev, 26 : : unsigned int index, 27 : : struct snic_fw_req *desc), 28 : : unsigned int work_to_do) 29 : : 30 : : { 31 : 0 : struct snic_fw_req *desc; 32 : 0 : unsigned int work_done = 0; 33 : 0 : u8 color; 34 : : 35 : 0 : desc = (struct snic_fw_req *)((u8 *)cq->ring.descs + 36 : 0 : cq->ring.desc_size * cq->to_clean); 37 : 0 : snic_color_dec(desc, &color); 38 : : 39 [ # # ]: 0 : while (color != cq->last_color) { 40 : : 41 [ # # ]: 0 : if ((*q_service)(cq->vdev, cq->index, desc)) 42 : : break; 43 : : 44 : 0 : cq->to_clean++; 45 [ # # ]: 0 : if (cq->to_clean == cq->ring.desc_count) { 46 : 0 : cq->to_clean = 0; 47 : 0 : cq->last_color = cq->last_color ? 0 : 1; 48 : : } 49 : : 50 : 0 : desc = (struct snic_fw_req *)((u8 *)cq->ring.descs + 51 : 0 : cq->ring.desc_size * cq->to_clean); 52 : 0 : snic_color_dec(desc, &color); 53 : : 54 : 0 : work_done++; 55 [ # # ]: 0 : if (work_done >= work_to_do) 56 : : break; 57 : : } 58 : : 59 : 0 : return work_done; 60 : : } 61 : : 62 : : #endif /* _VNIC_CQ_FW_H_ */