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