1/* 2 * Copyright (c) 2013, 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 19#ifndef USNIC_VNIC_H_ 20#define USNIC_VNIC_H_ 21 22#include <linux/pci.h> 23 24#include "vnic_dev.h" 25 26/* =USNIC_VNIC_RES_TYPE= =VNIC_RES= =DESC= */ 27#define USNIC_VNIC_RES_TYPES \ 28 DEFINE_USNIC_VNIC_RES_AT(EOL, RES_TYPE_EOL, "EOL", 0) \ 29 DEFINE_USNIC_VNIC_RES(WQ, RES_TYPE_WQ, "WQ") \ 30 DEFINE_USNIC_VNIC_RES(RQ, RES_TYPE_RQ, "RQ") \ 31 DEFINE_USNIC_VNIC_RES(CQ, RES_TYPE_CQ, "CQ") \ 32 DEFINE_USNIC_VNIC_RES(INTR, RES_TYPE_INTR_CTRL, "INT") \ 33 DEFINE_USNIC_VNIC_RES(MAX, RES_TYPE_MAX, "MAX")\ 34 35#define DEFINE_USNIC_VNIC_RES_AT(usnic_vnic_res_t, vnic_res_type, desc, val) \ 36 USNIC_VNIC_RES_TYPE_##usnic_vnic_res_t = val, 37#define DEFINE_USNIC_VNIC_RES(usnic_vnic_res_t, vnic_res_type, desc) \ 38 USNIC_VNIC_RES_TYPE_##usnic_vnic_res_t, 39enum usnic_vnic_res_type { 40 USNIC_VNIC_RES_TYPES 41}; 42#undef DEFINE_USNIC_VNIC_RES 43#undef DEFINE_USNIC_VNIC_RES_AT 44 45struct usnic_vnic_res { 46 enum usnic_vnic_res_type type; 47 unsigned int vnic_idx; 48 struct usnic_vnic *vnic; 49 void __iomem *ctrl; 50 void *owner; 51}; 52 53struct usnic_vnic_res_chunk { 54 enum usnic_vnic_res_type type; 55 int cnt; 56 int free_cnt; 57 struct usnic_vnic_res **res; 58 struct usnic_vnic *vnic; 59}; 60 61struct usnic_vnic_res_desc { 62 enum usnic_vnic_res_type type; 63 uint16_t cnt; 64}; 65 66struct usnic_vnic_res_spec { 67 struct usnic_vnic_res_desc resources[USNIC_VNIC_RES_TYPE_MAX]; 68}; 69 70const char *usnic_vnic_res_type_to_str(enum usnic_vnic_res_type res_type); 71const char *usnic_vnic_pci_name(struct usnic_vnic *vnic); 72int usnic_vnic_dump(struct usnic_vnic *vnic, char *buf, int buf_sz, 73 void *hdr_obj, 74 int (*printtitle)(void *, char*, int), 75 int (*printcols)(char *, int), 76 int (*printrow)(void *, char *, int)); 77void usnic_vnic_res_spec_update(struct usnic_vnic_res_spec *spec, 78 enum usnic_vnic_res_type trgt_type, 79 u16 cnt); 80int usnic_vnic_res_spec_satisfied(const struct usnic_vnic_res_spec *min_spec, 81 struct usnic_vnic_res_spec *res_spec); 82int usnic_vnic_spec_dump(char *buf, int buf_sz, 83 struct usnic_vnic_res_spec *res_spec); 84int usnic_vnic_check_room(struct usnic_vnic *vnic, 85 struct usnic_vnic_res_spec *res_spec); 86int usnic_vnic_res_cnt(struct usnic_vnic *vnic, 87 enum usnic_vnic_res_type type); 88int usnic_vnic_res_free_cnt(struct usnic_vnic *vnic, 89 enum usnic_vnic_res_type type); 90struct usnic_vnic_res_chunk * 91usnic_vnic_get_resources(struct usnic_vnic *vnic, 92 enum usnic_vnic_res_type type, 93 int cnt, 94 void *owner); 95void usnic_vnic_put_resources(struct usnic_vnic_res_chunk *chunk); 96struct pci_dev *usnic_vnic_get_pdev(struct usnic_vnic *vnic); 97struct vnic_dev_bar *usnic_vnic_get_bar(struct usnic_vnic *vnic, 98 int bar_num); 99struct usnic_vnic *usnic_vnic_alloc(struct pci_dev *pdev); 100void usnic_vnic_free(struct usnic_vnic *vnic); 101u16 usnic_vnic_get_index(struct usnic_vnic *vnic); 102 103#endif /*!USNIC_VNIC_H_*/ 104