1 /* 2 * Copyright (C) 2015-2017 Netronome Systems, Inc. 3 * 4 * This software is dual licensed under the GNU General License Version 2, 5 * June 1991 as shown in the file COPYING in the top-level directory of this 6 * source tree or the BSD 2-Clause License provided below. You have the 7 * option to license this software under the complete terms of either license. 8 * 9 * The BSD 2-Clause License: 10 * 11 * Redistribution and use in source and binary forms, with or 12 * without modification, are permitted provided that the following 13 * conditions are met: 14 * 15 * 1. Redistributions of source code must retain the above 16 * copyright notice, this list of conditions and the following 17 * disclaimer. 18 * 19 * 2. Redistributions in binary form must reproduce the above 20 * copyright notice, this list of conditions and the following 21 * disclaimer in the documentation and/or other materials 22 * provided with the distribution. 23 * 24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 28 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 29 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 30 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 31 * SOFTWARE. 32 */ 33 34 /* 35 * nfp.h 36 * Interface for NFP device access and query functions. 37 */ 38 39 #ifndef __NFP_H__ 40 #define __NFP_H__ 41 42 #include <linux/device.h> 43 #include <linux/types.h> 44 45 #include "nfp_cpp.h" 46 47 /* Implemented in nfp_hwinfo.c */ 48 49 struct nfp_hwinfo; 50 struct nfp_hwinfo *nfp_hwinfo_read(struct nfp_cpp *cpp); 51 const char *nfp_hwinfo_lookup(struct nfp_hwinfo *hwinfo, const char *lookup); 52 53 /* Implemented in nfp_nsp.c, low level functions */ 54 55 struct nfp_nsp; 56 57 struct nfp_cpp *nfp_nsp_cpp(struct nfp_nsp *state); 58 bool nfp_nsp_config_modified(struct nfp_nsp *state); 59 void nfp_nsp_config_set_modified(struct nfp_nsp *state, bool modified); 60 void *nfp_nsp_config_entries(struct nfp_nsp *state); 61 unsigned int nfp_nsp_config_idx(struct nfp_nsp *state); 62 void nfp_nsp_config_set_state(struct nfp_nsp *state, void *entries, 63 unsigned int idx); 64 void nfp_nsp_config_clear_state(struct nfp_nsp *state); 65 int nfp_nsp_read_eth_table(struct nfp_nsp *state, void *buf, unsigned int size); 66 int nfp_nsp_write_eth_table(struct nfp_nsp *state, 67 const void *buf, unsigned int size); 68 int nfp_nsp_read_identify(struct nfp_nsp *state, void *buf, unsigned int size); 69 int nfp_nsp_read_sensors(struct nfp_nsp *state, unsigned int sensor_mask, 70 void *buf, unsigned int size); 71 72 /* Implemented in nfp_resource.c */ 73 74 /* All keys are CRC32-POSIX of the 8-byte identification string */ 75 76 /* ARM/PCI vNIC Interfaces 0..3 */ 77 #define NFP_RESOURCE_VNIC_PCI_0 "vnic.p0" 78 #define NFP_RESOURCE_VNIC_PCI_1 "vnic.p1" 79 #define NFP_RESOURCE_VNIC_PCI_2 "vnic.p2" 80 #define NFP_RESOURCE_VNIC_PCI_3 "vnic.p3" 81 82 /* NFP Hardware Info Database */ 83 #define NFP_RESOURCE_NFP_HWINFO "nfp.info" 84 85 /* Service Processor */ 86 #define NFP_RESOURCE_NSP "nfp.sp" 87 #define NFP_RESOURCE_NSP_DIAG "arm.diag" 88 89 /* Netronone Flow Firmware Table */ 90 #define NFP_RESOURCE_NFP_NFFW "nfp.nffw" 91 92 /* MAC Statistics Accumulator */ 93 #define NFP_RESOURCE_MAC_STATISTICS "mac.stat" 94 95 struct nfp_resource * 96 nfp_resource_acquire(struct nfp_cpp *cpp, const char *name); 97 98 void nfp_resource_release(struct nfp_resource *res); 99 100 int nfp_resource_wait(struct nfp_cpp *cpp, const char *name, unsigned int secs); 101 102 u32 nfp_resource_cpp_id(struct nfp_resource *res); 103 104 const char *nfp_resource_name(struct nfp_resource *res); 105 106 u64 nfp_resource_address(struct nfp_resource *res); 107 108 u64 nfp_resource_size(struct nfp_resource *res); 109 110 #endif /* !__NFP_H__ */ 111