This source file includes following definitions.
- qed_iov_is_valid_vfid
- qed_iov_get_next_active_vf
- qed_iov_bulletin_set_udp_ports
- qed_iov_hw_info
- qed_iov_alloc
- qed_iov_setup
- qed_iov_free
- qed_iov_free_hw_info
- qed_iov_mark_vf_flr
- qed_iov_wq_stop
- qed_iov_wq_start
- qed_schedule_iov
- qed_vf_start_iov_wq
- qed_sriov_disable
- qed_inform_vf_link_state
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 
  25 
  26 
  27 
  28 
  29 
  30 
  31 
  32 
  33 #ifndef _QED_SRIOV_H
  34 #define _QED_SRIOV_H
  35 #include <linux/types.h>
  36 #include "qed_vf.h"
  37 
  38 #define QED_ETH_VF_NUM_MAC_FILTERS 1
  39 #define QED_ETH_VF_NUM_VLAN_FILTERS 2
  40 #define QED_VF_ARRAY_LENGTH (3)
  41 
  42 #ifdef CONFIG_QED_SRIOV
  43 #define IS_VF(cdev)             ((cdev)->b_is_vf)
  44 #define IS_PF(cdev)             (!((cdev)->b_is_vf))
  45 #define IS_PF_SRIOV(p_hwfn)     (!!((p_hwfn)->cdev->p_iov_info))
  46 #else
  47 #define IS_VF(cdev)             (0)
  48 #define IS_PF(cdev)             (1)
  49 #define IS_PF_SRIOV(p_hwfn)     (0)
  50 #endif
  51 #define IS_PF_SRIOV_ALLOC(p_hwfn)       (!!((p_hwfn)->pf_iov_info))
  52 
  53 #define QED_MAX_VF_CHAINS_PER_PF 16
  54 
  55 #define QED_ETH_MAX_VF_NUM_VLAN_FILTERS \
  56         (MAX_NUM_VFS * QED_ETH_VF_NUM_VLAN_FILTERS)
  57 
  58 enum qed_iov_vport_update_flag {
  59         QED_IOV_VP_UPDATE_ACTIVATE,
  60         QED_IOV_VP_UPDATE_VLAN_STRIP,
  61         QED_IOV_VP_UPDATE_TX_SWITCH,
  62         QED_IOV_VP_UPDATE_MCAST,
  63         QED_IOV_VP_UPDATE_ACCEPT_PARAM,
  64         QED_IOV_VP_UPDATE_RSS,
  65         QED_IOV_VP_UPDATE_ACCEPT_ANY_VLAN,
  66         QED_IOV_VP_UPDATE_SGE_TPA,
  67         QED_IOV_VP_UPDATE_MAX,
  68 };
  69 
  70 struct qed_public_vf_info {
  71         
  72 
  73 
  74         u8 forced_mac[ETH_ALEN];
  75         u16 forced_vlan;
  76         u8 mac[ETH_ALEN];
  77 
  78         
  79         int link_state;
  80 
  81         
  82         int tx_rate;
  83 
  84         
  85 
  86 
  87         bool is_trusted_configured;
  88         bool is_trusted_request;
  89         u8 rx_accept_mode;
  90         u8 tx_accept_mode;
  91 };
  92 
  93 struct qed_iov_vf_init_params {
  94         u16 rel_vf_id;
  95 
  96         
  97 
  98 
  99 
 100         u16 num_queues;
 101 
 102         
 103 
 104 
 105 
 106         u16 req_rx_queue[QED_MAX_VF_CHAINS_PER_PF];
 107         u16 req_tx_queue[QED_MAX_VF_CHAINS_PER_PF];
 108 };
 109 
 110 
 111 
 112 
 113 struct qed_hw_sriov_info {
 114         int pos;                
 115         int nres;               
 116         u32 cap;                
 117         u16 ctrl;               
 118         u16 total_vfs;          
 119         u16 num_vfs;            
 120         u16 initial_vfs;        
 121         u16 nr_virtfn;          
 122         u16 offset;             
 123         u16 stride;             
 124         u16 vf_device_id;       
 125         u32 pgsz;               
 126         u8 link;                
 127 
 128         u32 first_vf_in_pf;
 129 };
 130 
 131 
 132 
 133 
 134 struct qed_iov_vf_mbx {
 135         union vfpf_tlvs *req_virt;
 136         dma_addr_t req_phys;
 137         union pfvf_tlvs *reply_virt;
 138         dma_addr_t reply_phys;
 139 
 140         
 141         dma_addr_t pending_req;
 142 
 143         
 144         bool b_pending_msg;
 145 
 146         u8 *offset;
 147 
 148         
 149         struct vfpf_first_tlv first_tlv;
 150 };
 151 
 152 #define QED_IOV_LEGACY_QID_RX (0)
 153 #define QED_IOV_LEGACY_QID_TX (1)
 154 #define QED_IOV_QID_INVALID (0xFE)
 155 
 156 struct qed_vf_queue_cid {
 157         bool b_is_tx;
 158         struct qed_queue_cid *p_cid;
 159 };
 160 
 161 
 162 struct qed_vf_queue {
 163         u16 fw_rx_qid;
 164         u16 fw_tx_qid;
 165 
 166         struct qed_vf_queue_cid cids[MAX_QUEUES_PER_QZONE];
 167 };
 168 
 169 enum vf_state {
 170         VF_FREE = 0,            
 171         VF_ACQUIRED,            
 172         VF_ENABLED,             
 173         VF_RESET,               
 174         VF_STOPPED              
 175 };
 176 
 177 struct qed_vf_vlan_shadow {
 178         bool used;
 179         u16 vid;
 180 };
 181 
 182 struct qed_vf_shadow_config {
 183         
 184         struct qed_vf_vlan_shadow vlans[QED_ETH_VF_NUM_VLAN_FILTERS + 1];
 185 
 186         
 187         u8 macs[QED_ETH_VF_NUM_MAC_FILTERS][ETH_ALEN];
 188         u8 inner_vlan_removal;
 189 };
 190 
 191 
 192 struct qed_vf_info {
 193         struct qed_iov_vf_mbx vf_mbx;
 194         enum vf_state state;
 195         bool b_init;
 196         bool b_malicious;
 197         u8 to_disable;
 198 
 199         struct qed_bulletin bulletin;
 200         dma_addr_t vf_bulletin;
 201 
 202         
 203         struct vfpf_acquire_tlv acquire;
 204 
 205         u32 concrete_fid;
 206         u16 opaque_fid;
 207         u16 mtu;
 208 
 209         u8 vport_id;
 210         u8 relative_vf_id;
 211         u8 abs_vf_id;
 212 #define QED_VF_ABS_ID(p_hwfn, p_vf)     (QED_PATH_ID(p_hwfn) ?                \
 213                                          (p_vf)->abs_vf_id + MAX_NUM_VFS_BB : \
 214                                          (p_vf)->abs_vf_id)
 215 
 216         u8 vport_instance;
 217         u8 num_rxqs;
 218         u8 num_txqs;
 219 
 220         u16 rx_coal;
 221         u16 tx_coal;
 222 
 223         u8 num_sbs;
 224 
 225         u8 num_mac_filters;
 226         u8 num_vlan_filters;
 227 
 228         struct qed_vf_queue vf_queues[QED_MAX_VF_CHAINS_PER_PF];
 229         u16 igu_sbs[QED_MAX_VF_CHAINS_PER_PF];
 230         u8 num_active_rxqs;
 231         struct qed_public_vf_info p_vf_info;
 232         bool spoof_chk;
 233         bool req_spoofchk_val;
 234 
 235         
 236         struct qed_vf_shadow_config shadow_config;
 237 
 238         
 239 
 240 
 241         u64 configured_features;
 242 #define QED_IOV_CONFIGURED_FEATURES_MASK        ((1 << MAC_ADDR_FORCED) | \
 243                                                  (1 << VLAN_ADDR_FORCED))
 244 };
 245 
 246 
 247 
 248 
 249 struct qed_pf_iov {
 250         struct qed_vf_info vfs_array[MAX_NUM_VFS];
 251         u64 pending_flr[QED_VF_ARRAY_LENGTH];
 252 
 253         
 254         void *mbx_msg_virt_addr;
 255         dma_addr_t mbx_msg_phys_addr;
 256         u32 mbx_msg_size;
 257         void *mbx_reply_virt_addr;
 258         dma_addr_t mbx_reply_phys_addr;
 259         u32 mbx_reply_size;
 260         void *p_bulletins;
 261         dma_addr_t bulletins_phys;
 262         u32 bulletins_size;
 263 };
 264 
 265 enum qed_iov_wq_flag {
 266         QED_IOV_WQ_MSG_FLAG,
 267         QED_IOV_WQ_SET_UNICAST_FILTER_FLAG,
 268         QED_IOV_WQ_BULLETIN_UPDATE_FLAG,
 269         QED_IOV_WQ_STOP_WQ_FLAG,
 270         QED_IOV_WQ_FLR_FLAG,
 271         QED_IOV_WQ_TRUST_FLAG,
 272         QED_IOV_WQ_VF_FORCE_LINK_QUERY_FLAG,
 273 };
 274 
 275 #ifdef CONFIG_QED_SRIOV
 276 
 277 
 278 
 279 
 280 
 281 
 282 
 283 
 284 
 285 
 286 
 287 
 288 
 289 bool qed_iov_is_valid_vfid(struct qed_hwfn *p_hwfn,
 290                            int rel_vf_id,
 291                            bool b_enabled_only, bool b_non_malicious);
 292 
 293 
 294 
 295 
 296 
 297 
 298 
 299 
 300 
 301 u16 qed_iov_get_next_active_vf(struct qed_hwfn *p_hwfn, u16 rel_vf_id);
 302 
 303 void qed_iov_bulletin_set_udp_ports(struct qed_hwfn *p_hwfn,
 304                                     int vfid, u16 vxlan_port, u16 geneve_port);
 305 
 306 
 307 
 308 
 309 
 310 
 311 
 312 
 313 
 314 int qed_iov_hw_info(struct qed_hwfn *p_hwfn);
 315 
 316 
 317 
 318 
 319 
 320 
 321 
 322 
 323 
 324 
 325 
 326 void *qed_add_tlv(struct qed_hwfn *p_hwfn, u8 **offset, u16 type, u16 length);
 327 
 328 
 329 
 330 
 331 
 332 
 333 
 334 void qed_dp_tlv_list(struct qed_hwfn *p_hwfn, void *tlvs_list);
 335 
 336 
 337 
 338 
 339 
 340 
 341 
 342 
 343 int qed_iov_alloc(struct qed_hwfn *p_hwfn);
 344 
 345 
 346 
 347 
 348 
 349 
 350 void qed_iov_setup(struct qed_hwfn *p_hwfn);
 351 
 352 
 353 
 354 
 355 
 356 
 357 void qed_iov_free(struct qed_hwfn *p_hwfn);
 358 
 359 
 360 
 361 
 362 
 363 
 364 void qed_iov_free_hw_info(struct qed_dev *cdev);
 365 
 366 
 367 
 368 
 369 
 370 
 371 
 372 
 373 
 374 bool qed_iov_mark_vf_flr(struct qed_hwfn *p_hwfn, u32 *disabled_vfs);
 375 
 376 
 377 
 378 
 379 
 380 
 381 
 382 
 383 
 384 
 385 void *qed_iov_search_list_tlvs(struct qed_hwfn *p_hwfn,
 386                                void *p_tlvs_list, u16 req_type);
 387 
 388 void qed_iov_wq_stop(struct qed_dev *cdev, bool schedule_first);
 389 int qed_iov_wq_start(struct qed_dev *cdev);
 390 
 391 void qed_schedule_iov(struct qed_hwfn *hwfn, enum qed_iov_wq_flag flag);
 392 void qed_vf_start_iov_wq(struct qed_dev *cdev);
 393 int qed_sriov_disable(struct qed_dev *cdev, bool pci_enabled);
 394 void qed_inform_vf_link_state(struct qed_hwfn *hwfn);
 395 #else
 396 static inline bool
 397 qed_iov_is_valid_vfid(struct qed_hwfn *p_hwfn,
 398                       int rel_vf_id, bool b_enabled_only, bool b_non_malicious)
 399 {
 400         return false;
 401 }
 402 
 403 static inline u16 qed_iov_get_next_active_vf(struct qed_hwfn *p_hwfn,
 404                                              u16 rel_vf_id)
 405 {
 406         return MAX_NUM_VFS;
 407 }
 408 
 409 static inline void
 410 qed_iov_bulletin_set_udp_ports(struct qed_hwfn *p_hwfn, int vfid,
 411                                u16 vxlan_port, u16 geneve_port)
 412 {
 413 }
 414 
 415 static inline int qed_iov_hw_info(struct qed_hwfn *p_hwfn)
 416 {
 417         return 0;
 418 }
 419 
 420 static inline int qed_iov_alloc(struct qed_hwfn *p_hwfn)
 421 {
 422         return 0;
 423 }
 424 
 425 static inline void qed_iov_setup(struct qed_hwfn *p_hwfn)
 426 {
 427 }
 428 
 429 static inline void qed_iov_free(struct qed_hwfn *p_hwfn)
 430 {
 431 }
 432 
 433 static inline void qed_iov_free_hw_info(struct qed_dev *cdev)
 434 {
 435 }
 436 
 437 static inline bool qed_iov_mark_vf_flr(struct qed_hwfn *p_hwfn,
 438                                        u32 *disabled_vfs)
 439 {
 440         return false;
 441 }
 442 
 443 static inline void qed_iov_wq_stop(struct qed_dev *cdev, bool schedule_first)
 444 {
 445 }
 446 
 447 static inline int qed_iov_wq_start(struct qed_dev *cdev)
 448 {
 449         return 0;
 450 }
 451 
 452 static inline void qed_schedule_iov(struct qed_hwfn *hwfn,
 453                                     enum qed_iov_wq_flag flag)
 454 {
 455 }
 456 
 457 static inline void qed_vf_start_iov_wq(struct qed_dev *cdev)
 458 {
 459 }
 460 
 461 static inline int qed_sriov_disable(struct qed_dev *cdev, bool pci_enabled)
 462 {
 463         return 0;
 464 }
 465 
 466 static inline void qed_inform_vf_link_state(struct qed_hwfn *hwfn)
 467 {
 468 }
 469 #endif
 470 
 471 #define qed_for_each_vf(_p_hwfn, _i)                      \
 472         for (_i = qed_iov_get_next_active_vf(_p_hwfn, 0); \
 473              _i < MAX_NUM_VFS;                            \
 474              _i = qed_iov_get_next_active_vf(_p_hwfn, _i + 1))
 475 
 476 #endif