^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright (c) 2008, Intel Corporation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Author: Lucy Liu <lucy.liu@intel.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #ifndef __NET_DCBNL_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #define __NET_DCBNL_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/dcbnl.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) struct dcb_app_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) int ifindex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) struct dcb_app app;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) struct list_head list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) u8 dcbx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) int dcb_setapp(struct net_device *, struct dcb_app *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) u8 dcb_getapp(struct net_device *, struct dcb_app *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) int dcb_ieee_setapp(struct net_device *, struct dcb_app *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) int dcb_ieee_delapp(struct net_device *, struct dcb_app *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) u8 dcb_ieee_getapp_mask(struct net_device *, struct dcb_app *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) struct dcb_ieee_app_prio_map {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) u64 map[IEEE_8021QAZ_MAX_TCS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) void dcb_ieee_getapp_prio_dscp_mask_map(const struct net_device *dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) struct dcb_ieee_app_prio_map *p_map);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) struct dcb_ieee_app_dscp_map {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) u8 map[64];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) void dcb_ieee_getapp_dscp_prio_mask_map(const struct net_device *dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) struct dcb_ieee_app_dscp_map *p_map);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) u8 dcb_ieee_getapp_default_prio_mask(const struct net_device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) int dcbnl_ieee_notify(struct net_device *dev, int event, int cmd,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) u32 seq, u32 pid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) int dcbnl_cee_notify(struct net_device *dev, int event, int cmd,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) u32 seq, u32 pid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) * Ops struct for the netlink callbacks. Used by DCB-enabled drivers through
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) * the netdevice struct.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) struct dcbnl_rtnl_ops {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) /* IEEE 802.1Qaz std */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) int (*ieee_getets) (struct net_device *, struct ieee_ets *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) int (*ieee_setets) (struct net_device *, struct ieee_ets *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) int (*ieee_getmaxrate) (struct net_device *, struct ieee_maxrate *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) int (*ieee_setmaxrate) (struct net_device *, struct ieee_maxrate *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) int (*ieee_getqcn) (struct net_device *, struct ieee_qcn *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) int (*ieee_setqcn) (struct net_device *, struct ieee_qcn *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) int (*ieee_getqcnstats) (struct net_device *, struct ieee_qcn_stats *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) int (*ieee_getpfc) (struct net_device *, struct ieee_pfc *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) int (*ieee_setpfc) (struct net_device *, struct ieee_pfc *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) int (*ieee_getapp) (struct net_device *, struct dcb_app *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) int (*ieee_setapp) (struct net_device *, struct dcb_app *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) int (*ieee_delapp) (struct net_device *, struct dcb_app *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) int (*ieee_peer_getets) (struct net_device *, struct ieee_ets *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) int (*ieee_peer_getpfc) (struct net_device *, struct ieee_pfc *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) /* CEE std */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) u8 (*getstate)(struct net_device *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) u8 (*setstate)(struct net_device *, u8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) void (*getpermhwaddr)(struct net_device *, u8 *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) void (*setpgtccfgtx)(struct net_device *, int, u8, u8, u8, u8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) void (*setpgbwgcfgtx)(struct net_device *, int, u8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) void (*setpgtccfgrx)(struct net_device *, int, u8, u8, u8, u8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) void (*setpgbwgcfgrx)(struct net_device *, int, u8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) void (*getpgtccfgtx)(struct net_device *, int, u8 *, u8 *, u8 *, u8 *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) void (*getpgbwgcfgtx)(struct net_device *, int, u8 *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) void (*getpgtccfgrx)(struct net_device *, int, u8 *, u8 *, u8 *, u8 *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) void (*getpgbwgcfgrx)(struct net_device *, int, u8 *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) void (*setpfccfg)(struct net_device *, int, u8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) void (*getpfccfg)(struct net_device *, int, u8 *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) u8 (*setall)(struct net_device *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) u8 (*getcap)(struct net_device *, int, u8 *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) int (*getnumtcs)(struct net_device *, int, u8 *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) int (*setnumtcs)(struct net_device *, int, u8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) u8 (*getpfcstate)(struct net_device *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) void (*setpfcstate)(struct net_device *, u8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) void (*getbcncfg)(struct net_device *, int, u32 *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) void (*setbcncfg)(struct net_device *, int, u32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) void (*getbcnrp)(struct net_device *, int, u8 *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) void (*setbcnrp)(struct net_device *, int, u8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) int (*setapp)(struct net_device *, u8, u16, u8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) int (*getapp)(struct net_device *, u8, u16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) u8 (*getfeatcfg)(struct net_device *, int, u8 *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) u8 (*setfeatcfg)(struct net_device *, int, u8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) /* DCBX configuration */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) u8 (*getdcbx)(struct net_device *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) u8 (*setdcbx)(struct net_device *, u8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) /* peer apps */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) int (*peer_getappinfo)(struct net_device *, struct dcb_peer_app_info *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) u16 *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) int (*peer_getapptable)(struct net_device *, struct dcb_app *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) /* CEE peer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) int (*cee_peer_getpg) (struct net_device *, struct cee_pg *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) int (*cee_peer_getpfc) (struct net_device *, struct cee_pfc *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) /* buffer settings */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) int (*dcbnl_getbuffer)(struct net_device *, struct dcbnl_buffer *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) int (*dcbnl_setbuffer)(struct net_device *, struct dcbnl_buffer *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) #endif /* __NET_DCBNL_H__ */