196de2506SJakub Kicinski /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 296de2506SJakub Kicinski /* Copyright (C) 2015-2018 Netronome Systems, Inc. */ 3f01a2161SJakub Kicinski 4f01a2161SJakub Kicinski /* 5f01a2161SJakub Kicinski * nfp.h 6f01a2161SJakub Kicinski * Interface for NFP device access and query functions. 7f01a2161SJakub Kicinski */ 8f01a2161SJakub Kicinski 9f01a2161SJakub Kicinski #ifndef __NFP_H__ 10f01a2161SJakub Kicinski #define __NFP_H__ 11f01a2161SJakub Kicinski 12f01a2161SJakub Kicinski #include <linux/device.h> 13bd5ca062SJakub Kicinski #include <linux/types.h> 14f01a2161SJakub Kicinski 15f01a2161SJakub Kicinski #include "nfp_cpp.h" 16f01a2161SJakub Kicinski 1759a84748SJakub Kicinski /* Implemented in nfp_hwinfo.c */ 1859a84748SJakub Kicinski 199baa4885SJakub Kicinski struct nfp_hwinfo; 209baa4885SJakub Kicinski struct nfp_hwinfo *nfp_hwinfo_read(struct nfp_cpp *cpp); 219baa4885SJakub Kicinski const char *nfp_hwinfo_lookup(struct nfp_hwinfo *hwinfo, const char *lookup); 2224ff8455SCarl Heymann char *nfp_hwinfo_get_packed_strings(struct nfp_hwinfo *hwinfo); 2324ff8455SCarl Heymann u32 nfp_hwinfo_get_packed_str_size(struct nfp_hwinfo *hwinfo); 2459a84748SJakub Kicinski 25ce22f5a2SJakub Kicinski /* Implemented in nfp_nsp.c, low level functions */ 261a64821cSJakub Kicinski 271a64821cSJakub Kicinski struct nfp_nsp; 281a64821cSJakub Kicinski 2930a02921SJakub Kicinski struct nfp_cpp *nfp_nsp_cpp(struct nfp_nsp *state); 3030a02921SJakub Kicinski bool nfp_nsp_config_modified(struct nfp_nsp *state); 3130a02921SJakub Kicinski void nfp_nsp_config_set_modified(struct nfp_nsp *state, bool modified); 3230a02921SJakub Kicinski void *nfp_nsp_config_entries(struct nfp_nsp *state); 3330a02921SJakub Kicinski unsigned int nfp_nsp_config_idx(struct nfp_nsp *state); 3430a02921SJakub Kicinski void nfp_nsp_config_set_state(struct nfp_nsp *state, void *entries, 3530a02921SJakub Kicinski unsigned int idx); 3630a02921SJakub Kicinski void nfp_nsp_config_clear_state(struct nfp_nsp *state); 371a64821cSJakub Kicinski int nfp_nsp_read_eth_table(struct nfp_nsp *state, void *buf, unsigned int size); 381a64821cSJakub Kicinski int nfp_nsp_write_eth_table(struct nfp_nsp *state, 391a64821cSJakub Kicinski const void *buf, unsigned int size); 40010e2f9cSDavid Brunecz int nfp_nsp_read_identify(struct nfp_nsp *state, void *buf, unsigned int size); 41eefbde7eSDavid Brunecz int nfp_nsp_read_sensors(struct nfp_nsp *state, unsigned int sensor_mask, 42eefbde7eSDavid Brunecz void *buf, unsigned int size); 431a64821cSJakub Kicinski 44f01a2161SJakub Kicinski /* Implemented in nfp_resource.c */ 45f01a2161SJakub Kicinski 46f1ba63ecSJakub Kicinski /* All keys are CRC32-POSIX of the 8-byte identification string */ 47f01a2161SJakub Kicinski 48f01a2161SJakub Kicinski /* ARM/PCI vNIC Interfaces 0..3 */ 49f01a2161SJakub Kicinski #define NFP_RESOURCE_VNIC_PCI_0 "vnic.p0" 50f01a2161SJakub Kicinski #define NFP_RESOURCE_VNIC_PCI_1 "vnic.p1" 51f01a2161SJakub Kicinski #define NFP_RESOURCE_VNIC_PCI_2 "vnic.p2" 52f01a2161SJakub Kicinski #define NFP_RESOURCE_VNIC_PCI_3 "vnic.p3" 53f01a2161SJakub Kicinski 54f01a2161SJakub Kicinski /* NFP Hardware Info Database */ 55f01a2161SJakub Kicinski #define NFP_RESOURCE_NFP_HWINFO "nfp.info" 56f01a2161SJakub Kicinski 57f01a2161SJakub Kicinski /* Service Processor */ 58f01a2161SJakub Kicinski #define NFP_RESOURCE_NSP "nfp.sp" 59af623682SJakub Kicinski #define NFP_RESOURCE_NSP_DIAG "arm.diag" 60f01a2161SJakub Kicinski 61f01a2161SJakub Kicinski /* Netronone Flow Firmware Table */ 62f01a2161SJakub Kicinski #define NFP_RESOURCE_NFP_NFFW "nfp.nffw" 63f01a2161SJakub Kicinski 64f01a2161SJakub Kicinski /* MAC Statistics Accumulator */ 65f01a2161SJakub Kicinski #define NFP_RESOURCE_MAC_STATISTICS "mac.stat" 66f01a2161SJakub Kicinski 673e3e9fd8SJakub Kicinski int nfp_resource_table_init(struct nfp_cpp *cpp); 683e3e9fd8SJakub Kicinski 69f01a2161SJakub Kicinski struct nfp_resource * 70f01a2161SJakub Kicinski nfp_resource_acquire(struct nfp_cpp *cpp, const char *name); 71f01a2161SJakub Kicinski 72f01a2161SJakub Kicinski void nfp_resource_release(struct nfp_resource *res); 73f01a2161SJakub Kicinski 747dbd5b75SJakub Kicinski int nfp_resource_wait(struct nfp_cpp *cpp, const char *name, unsigned int secs); 757dbd5b75SJakub Kicinski 76f01a2161SJakub Kicinski u32 nfp_resource_cpp_id(struct nfp_resource *res); 77f01a2161SJakub Kicinski 78f01a2161SJakub Kicinski const char *nfp_resource_name(struct nfp_resource *res); 79f01a2161SJakub Kicinski 80f01a2161SJakub Kicinski u64 nfp_resource_address(struct nfp_resource *res); 81f01a2161SJakub Kicinski 82f01a2161SJakub Kicinski u64 nfp_resource_size(struct nfp_resource *res); 83f01a2161SJakub Kicinski 84f01a2161SJakub Kicinski #endif /* !__NFP_H__ */ 85