13c467bf3SSteve Lin /* Broadcom NetXtreme-C/E network driver.
23c467bf3SSteve Lin *
33c467bf3SSteve Lin * Copyright (c) 2017 Broadcom Limited
43c467bf3SSteve Lin *
53c467bf3SSteve Lin * This program is free software; you can redistribute it and/or modify
63c467bf3SSteve Lin * it under the terms of the GNU General Public License as published by
73c467bf3SSteve Lin * the Free Software Foundation.
83c467bf3SSteve Lin */
93c467bf3SSteve Lin
103c467bf3SSteve Lin #ifndef BNXT_DEVLINK_H
113c467bf3SSteve Lin #define BNXT_DEVLINK_H
123c467bf3SSteve Lin
133c467bf3SSteve Lin /* Struct to hold housekeeping info needed by devlink interface */
143c467bf3SSteve Lin struct bnxt_dl {
153c467bf3SSteve Lin struct bnxt *bp; /* back ptr to the controlling dev */
16892a662fSEdwin Peer bool remote_reset;
173c467bf3SSteve Lin };
183c467bf3SSteve Lin
bnxt_get_bp_from_dl(struct devlink * dl)193c467bf3SSteve Lin static inline struct bnxt *bnxt_get_bp_from_dl(struct devlink *dl)
203c467bf3SSteve Lin {
213c467bf3SSteve Lin return ((struct bnxt_dl *)devlink_priv(dl))->bp;
223c467bf3SSteve Lin }
233c467bf3SSteve Lin
bnxt_dl_remote_reload(struct bnxt * bp)248f6c5e4dSEdwin Peer static inline void bnxt_dl_remote_reload(struct bnxt *bp)
258f6c5e4dSEdwin Peer {
268f6c5e4dSEdwin Peer devlink_remote_reload_actions_performed(bp->dl, 0,
278f6c5e4dSEdwin Peer BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT) |
288f6c5e4dSEdwin Peer BIT(DEVLINK_RELOAD_ACTION_FW_ACTIVATE));
298f6c5e4dSEdwin Peer }
308f6c5e4dSEdwin Peer
bnxt_dl_get_remote_reset(struct devlink * dl)31892a662fSEdwin Peer static inline bool bnxt_dl_get_remote_reset(struct devlink *dl)
32892a662fSEdwin Peer {
33892a662fSEdwin Peer return ((struct bnxt_dl *)devlink_priv(dl))->remote_reset;
34892a662fSEdwin Peer }
35892a662fSEdwin Peer
bnxt_dl_set_remote_reset(struct devlink * dl,bool value)36892a662fSEdwin Peer static inline void bnxt_dl_set_remote_reset(struct devlink *dl, bool value)
37892a662fSEdwin Peer {
38892a662fSEdwin Peer ((struct bnxt_dl *)devlink_priv(dl))->remote_reset = value;
39892a662fSEdwin Peer }
40892a662fSEdwin Peer
41f399e849SVasundhara Volam #define NVM_OFF_MSIX_VEC_PER_PF_MAX 108
42f399e849SVasundhara Volam #define NVM_OFF_MSIX_VEC_PER_PF_MIN 114
437d859234SVasundhara Volam #define NVM_OFF_IGNORE_ARI 164
442dc0865eSVasundhara Volam #define NVM_OFF_DIS_GRE_VER_CHECK 171
456354b95eSVasundhara Volam #define NVM_OFF_ENABLE_SRIOV 401
469599e036SVasundhara Volam #define NVM_OFF_NVM_CFG_VER 602
479599e036SVasundhara Volam
48beb55fcfSEdwin Peer #define BNXT_NVM_CFG_VER_BITS 8
49beb55fcfSEdwin Peer #define BNXT_NVM_CFG_VER_BYTES 1
506354b95eSVasundhara Volam
519e68cb03SVasundhara Volam #define BNXT_MSIX_VEC_MAX 512
52f399e849SVasundhara Volam #define BNXT_MSIX_VEC_MIN_MAX 128
53f399e849SVasundhara Volam
546354b95eSVasundhara Volam enum bnxt_nvm_dir_type {
556354b95eSVasundhara Volam BNXT_NVM_SHARED_CFG = 40,
566354b95eSVasundhara Volam BNXT_NVM_PORT_CFG,
576354b95eSVasundhara Volam BNXT_NVM_FUNC_CFG,
586354b95eSVasundhara Volam };
596354b95eSVasundhara Volam
606354b95eSVasundhara Volam struct bnxt_dl_nvm_param {
616354b95eSVasundhara Volam u16 id;
626354b95eSVasundhara Volam u16 offset;
636354b95eSVasundhara Volam u16 dir_type;
64c329230cSVasundhara Volam u16 nvm_num_bits;
65c329230cSVasundhara Volam u8 dl_num_bytes;
666354b95eSVasundhara Volam };
676354b95eSVasundhara Volam
687154917aSVasundhara Volam enum bnxt_dl_version_type {
697154917aSVasundhara Volam BNXT_VERSION_FIXED,
707154917aSVasundhara Volam BNXT_VERSION_RUNNING,
717154917aSVasundhara Volam BNXT_VERSION_STORED,
727154917aSVasundhara Volam };
737154917aSVasundhara Volam
74aadb0b1aSEdwin Peer void bnxt_devlink_health_fw_report(struct bnxt *bp);
75aadb0b1aSEdwin Peer void bnxt_dl_health_fw_status_update(struct bnxt *bp, bool healthy);
76aadb0b1aSEdwin Peer void bnxt_dl_health_fw_recovery_done(struct bnxt *bp);
77937f188cSVasundhara Volam void bnxt_dl_fw_reporters_create(struct bnxt *bp);
78*f16a9169SEdwin Peer void bnxt_dl_fw_reporters_destroy(struct bnxt *bp);
793c467bf3SSteve Lin int bnxt_dl_register(struct bnxt *bp);
803c467bf3SSteve Lin void bnxt_dl_unregister(struct bnxt *bp);
813c467bf3SSteve Lin
823c467bf3SSteve Lin #endif /* BNXT_DEVLINK_H */
83