114d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty/* 214d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty * QLogic qlcnic NIC Driver 314d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty * Copyright (c) 2009-2013 QLogic Corporation 414d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty * 514d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty * See LICENSE.qlcnic for copyright and licensing details. 614d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty */ 714d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty 814d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty#ifndef __QLCNIC_DCBX_H 914d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty#define __QLCNIC_DCBX_H 1014d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty 111de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty#define QLCNIC_DCB_STATE 0 121de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty#define QLCNIC_DCB_AEN_MODE 1 1314d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty 1414d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty#ifdef CONFIG_QLCNIC_DCB 151de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakrabortyint qlcnic_register_dcb(struct qlcnic_adapter *); 1614d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty#else 171de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakrabortystatic inline int qlcnic_register_dcb(struct qlcnic_adapter *adapter) 1814d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty{ return 0; } 1914d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty#endif 2014d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty 211de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakrabortystruct qlcnic_dcb; 221de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty 2314d385b9905920cc0136721316c185c45ee6e26cSucheta Chakrabortystruct qlcnic_dcb_ops { 241de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty int (*query_hw_capability) (struct qlcnic_dcb *, char *); 251de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty int (*get_hw_capability) (struct qlcnic_dcb *); 261de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty int (*query_cee_param) (struct qlcnic_dcb *, char *, u8); 271de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty void (*init_dcbnl_ops) (struct qlcnic_dcb *); 281de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty void (*aen_handler) (struct qlcnic_dcb *, void *); 291de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty int (*get_cee_cfg) (struct qlcnic_dcb *); 301de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty void (*get_info) (struct qlcnic_dcb *); 311de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty int (*attach) (struct qlcnic_dcb *); 321de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty void (*free) (struct qlcnic_dcb *); 3314d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty}; 3414d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty 3514d385b9905920cc0136721316c185c45ee6e26cSucheta Chakrabortystruct qlcnic_dcb { 36fb859ed6916faeae6b44027d2e0738836a11e8c1Sucheta Chakraborty struct qlcnic_dcb_mbx_params *param; 372d8ebcab86051f2cd7f207edb513995348b78213Sucheta Chakraborty struct qlcnic_adapter *adapter; 382d8ebcab86051f2cd7f207edb513995348b78213Sucheta Chakraborty struct delayed_work aen_work; 392d8ebcab86051f2cd7f207edb513995348b78213Sucheta Chakraborty struct workqueue_struct *wq; 40fb859ed6916faeae6b44027d2e0738836a11e8c1Sucheta Chakraborty struct qlcnic_dcb_ops *ops; 41fb859ed6916faeae6b44027d2e0738836a11e8c1Sucheta Chakraborty struct qlcnic_dcb_cfg *cfg; 421de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty unsigned long state; 4314d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty}; 441de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty 451de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakrabortystatic inline void qlcnic_clear_dcb_ops(struct qlcnic_dcb *dcb) 461de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty{ 471de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty kfree(dcb); 481de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty dcb = NULL; 491de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty} 501de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty 511de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakrabortystatic inline int qlcnic_dcb_get_hw_capability(struct qlcnic_dcb *dcb) 521de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty{ 531de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty if (dcb && dcb->ops->get_hw_capability) 541de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty return dcb->ops->get_hw_capability(dcb); 551de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty 561de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty return 0; 571de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty} 581de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty 591de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakrabortystatic inline void qlcnic_dcb_free(struct qlcnic_dcb *dcb) 601de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty{ 611de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty if (dcb && dcb->ops->free) 621de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty dcb->ops->free(dcb); 631de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty} 641de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty 651de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakrabortystatic inline int qlcnic_dcb_attach(struct qlcnic_dcb *dcb) 661de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty{ 671de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty if (dcb && dcb->ops->attach) 681de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty return dcb->ops->attach(dcb); 691de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty 701de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty return 0; 711de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty} 721de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty 731de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakrabortystatic inline int 741de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakrabortyqlcnic_dcb_query_hw_capability(struct qlcnic_dcb *dcb, char *buf) 751de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty{ 761de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty if (dcb && dcb->ops->query_hw_capability) 771de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty return dcb->ops->query_hw_capability(dcb, buf); 781de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty 791de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty return 0; 801de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty} 811de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty 821de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakrabortystatic inline void qlcnic_dcb_get_info(struct qlcnic_dcb *dcb) 831de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty{ 841de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty if (dcb && dcb->ops->get_info) 851de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty dcb->ops->get_info(dcb); 861de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty} 871de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty 881de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakrabortystatic inline int 891de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakrabortyqlcnic_dcb_query_cee_param(struct qlcnic_dcb *dcb, char *buf, u8 type) 901de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty{ 911de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty if (dcb && dcb->ops->query_cee_param) 921de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty return dcb->ops->query_cee_param(dcb, buf, type); 931de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty 941de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty return 0; 951de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty} 961de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty 971de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakrabortystatic inline int qlcnic_dcb_get_cee_cfg(struct qlcnic_dcb *dcb) 981de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty{ 991de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty if (dcb && dcb->ops->get_cee_cfg) 1001de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty return dcb->ops->get_cee_cfg(dcb); 1011de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty 1021de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty return 0; 1031de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty} 1041de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty 1051de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakrabortystatic inline void qlcnic_dcb_aen_handler(struct qlcnic_dcb *dcb, void *msg) 1061de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty{ 1071de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty if (dcb && dcb->ops->aen_handler) 1081de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty dcb->ops->aen_handler(dcb, msg); 1091de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty} 1101de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty 1111de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakrabortystatic inline void qlcnic_dcb_init_dcbnl_ops(struct qlcnic_dcb *dcb) 1121de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty{ 1131de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty if (dcb && dcb->ops->init_dcbnl_ops) 1141de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty dcb->ops->init_dcbnl_ops(dcb); 1151de899d3815fd945b0c2285a4e07fea8eaedf2aaSucheta Chakraborty} 1163c44bba1d270cb1620b4fe76786d0968118cb86bSucheta Chakraborty 1173c44bba1d270cb1620b4fe76786d0968118cb86bSucheta Chakrabortystatic inline void qlcnic_dcb_enable(struct qlcnic_dcb *dcb) 1183c44bba1d270cb1620b4fe76786d0968118cb86bSucheta Chakraborty{ 1193c44bba1d270cb1620b4fe76786d0968118cb86bSucheta Chakraborty if (dcb && qlcnic_dcb_attach(dcb)) 1203c44bba1d270cb1620b4fe76786d0968118cb86bSucheta Chakraborty qlcnic_clear_dcb_ops(dcb); 1213c44bba1d270cb1620b4fe76786d0968118cb86bSucheta Chakraborty} 12214d385b9905920cc0136721316c185c45ee6e26cSucheta Chakraborty#endif 123