1225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier/* 2225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * Copyright (c) 2004, 2005 Topspin Communications. All rights reserved. 3225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. 4225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * Copyright (c) 2005, 2006, 2007 Cisco Systems. All rights reserved. 551a379d0c8f7a6db7c9e3c9c770d90a6d2d1ef9bJack Morgenstein * Copyright (c) 2005, 2006, 2007, 2008 Mellanox Technologies. All rights reserved. 6225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * Copyright (c) 2004 Voltaire, Inc. All rights reserved. 7225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * 8225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * This software is available to you under a choice of one of two 9225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * licenses. You may choose to be licensed under the terms of the GNU 10225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * General Public License (GPL) Version 2, available from the file 11225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * COPYING in the main directory of this source tree, or the 12225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * OpenIB.org BSD license below: 13225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * 14225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * Redistribution and use in source and binary forms, with or 15225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * without modification, are permitted provided that the following 16225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * conditions are met: 17225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * 18225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * - Redistributions of source code must retain the above 19225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * copyright notice, this list of conditions and the following 20225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * disclaimer. 21225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * 22225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * - Redistributions in binary form must reproduce the above 23225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * copyright notice, this list of conditions and the following 24225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * disclaimer in the documentation and/or other materials 25225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * provided with the distribution. 26225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * 27225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 28225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 29225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 30225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 31225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 32225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 33225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 34225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier * SOFTWARE. 35225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier */ 36225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 37225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier#ifndef MLX4_H 38225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier#define MLX4_H 39225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 40525f5f44c487201c91a11904516ee56dea93644eMichael S. Tsirkin#include <linux/mutex.h> 41225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier#include <linux/radix-tree.h> 42ee49bd9397cd2b8fe7a1962505d81c1d0a1366fcJack Morgenstein#include <linux/timer.h> 433142788b7967ccfd2f1813ee9e11aeb1e1cf7de2Thomas Gleixner#include <linux/semaphore.h> 4427bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilin#include <linux/workqueue.h> 45225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 46225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier#include <linux/mlx4/device.h> 4737608eea86a358ac6a18df0af55d4f77d08a1f30Roland Dreier#include <linux/mlx4/driver.h> 48225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier#include <linux/mlx4/doorbell.h> 49623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein#include <linux/mlx4/cmd.h> 50225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 51225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier#define DRV_NAME "mlx4_core" 52ab9c17a009ee8eb8c667f22dc0be0709effceab9Jack Morgenstein#define PFX DRV_NAME ": " 537d4b6bcce071fdff4426e695fd0a73786b7d93d5Yevgeny Petrilin#define DRV_VERSION "1.1" 547d4b6bcce071fdff4426e695fd0a73786b7d93d5Yevgeny Petrilin#define DRV_RELDATE "Dec, 2011" 55225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 56225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierenum { 57225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier MLX4_HCR_BASE = 0x80680, 58225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier MLX4_HCR_SIZE = 0x0001c, 59623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein MLX4_CLR_INT_SIZE = 0x00008, 60623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein MLX4_SLAVE_COMM_BASE = 0x0, 61623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein MLX4_COMM_PAGESIZE = 0x1000 62225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 63225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 64225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierenum { 650ec2c0f86d31ab36547307f133b0016006bdc6b5Eugenia Emantayev MLX4_MAX_MGM_ENTRY_SIZE = 0x1000, 660ec2c0f86d31ab36547307f133b0016006bdc6b5Eugenia Emantayev MLX4_MAX_QP_PER_MGM = 4 * (MLX4_MAX_MGM_ENTRY_SIZE / 16 - 2), 670ec2c0f86d31ab36547307f133b0016006bdc6b5Eugenia Emantayev MLX4_MTT_ENTRY_PER_SEG = 8, 68225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 69225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 70225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierenum { 71225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier MLX4_NUM_PDS = 1 << 15 72225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 73225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 74225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierenum { 75225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier MLX4_CMPT_TYPE_QP = 0, 76225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier MLX4_CMPT_TYPE_SRQ = 1, 77225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier MLX4_CMPT_TYPE_CQ = 2, 78225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier MLX4_CMPT_TYPE_EQ = 3, 79225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier MLX4_CMPT_NUM_TYPE 80225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 81225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 82225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierenum { 83225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier MLX4_CMPT_SHIFT = 24, 84225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier MLX4_NUM_CMPTS = MLX4_CMPT_NUM_TYPE << MLX4_CMPT_SHIFT 85225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 86225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 87623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinenum mlx4_mr_state { 88623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein MLX4_MR_DISABLED = 0, 89623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein MLX4_MR_EN_HW, 90623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein MLX4_MR_EN_SW 91623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein}; 92623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 93623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein#define MLX4_COMM_TIME 10000 94623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinenum { 95623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein MLX4_COMM_CMD_RESET, 96623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein MLX4_COMM_CMD_VHCR0, 97623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein MLX4_COMM_CMD_VHCR1, 98623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein MLX4_COMM_CMD_VHCR2, 99623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein MLX4_COMM_CMD_VHCR_EN, 100623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein MLX4_COMM_CMD_VHCR_POST, 101623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein MLX4_COMM_CMD_FLR = 254 102623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein}; 103623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 104623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein/*The flag indicates that the slave should delay the RESET cmd*/ 105623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein#define MLX4_DELAY_RESET_SLAVE 0xbbbbbbb 106623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein/*indicates how many retries will be done if we are in the middle of FLR*/ 107623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein#define NUM_OF_RESET_RETRIES 10 108623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein#define SLEEP_TIME_IN_RESET (2 * 1000) 109623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinenum mlx4_resource { 110623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein RES_QP, 111623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein RES_CQ, 112623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein RES_SRQ, 113623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein RES_XRCD, 114623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein RES_MPT, 115623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein RES_MTT, 116623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein RES_MAC, 117623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein RES_VLAN, 118623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein RES_EQ, 119623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein RES_COUNTER, 120623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein MLX4_NUM_OF_RESOURCE_TYPE 121623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein}; 122623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 123623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinenum mlx4_alloc_mode { 124623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein RES_OP_RESERVE, 125623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein RES_OP_RESERVE_AND_MAP, 126623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein RES_OP_MAP_ICM, 127623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein}; 128623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 129623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 130623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein/* 131623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein *Virtual HCR structures. 132623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein * mlx4_vhcr is the sw representation, in machine endianess 133623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein * 134623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein * mlx4_vhcr_cmd is the formalized structure, the one that is passed 135623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein * to FW to go through communication channel. 136623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein * It is big endian, and has the same structure as the physical HCR 137623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein * used by command interface 138623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein */ 139623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinstruct mlx4_vhcr { 140623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u64 in_param; 141623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u64 out_param; 142623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u32 in_modifier; 143623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u32 errno; 144623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u16 op; 145623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u16 token; 146623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 op_modifier; 147623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 e_bit; 148623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein}; 149623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 150623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinstruct mlx4_vhcr_cmd { 151623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein __be64 in_param; 152623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein __be32 in_modifier; 153623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein __be64 out_param; 154623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein __be16 token; 155623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u16 reserved; 156623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 status; 157623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 flags; 158623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein __be16 opcode; 159623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein}; 160623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 161623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinstruct mlx4_cmd_info { 162623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u16 opcode; 163623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein bool has_inbox; 164623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein bool has_outbox; 165623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein bool out_is_imm; 166623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein bool encode_slave_id; 167623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein int (*verify)(struct mlx4_dev *dev, int slave, struct mlx4_vhcr *vhcr, 168623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox); 169623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein int (*wrapper)(struct mlx4_dev *dev, int slave, struct mlx4_vhcr *vhcr, 170623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 171623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 172623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 173623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein}; 174623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 175225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier#ifdef CONFIG_MLX4_DEBUG 176225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierextern int mlx4_debug_level; 1777b0f5df4c88bac46fe749d36d905fc7ad0296587Roland Dreier#else /* CONFIG_MLX4_DEBUG */ 1787b0f5df4c88bac46fe749d36d905fc7ad0296587Roland Dreier#define mlx4_debug_level (0) 1797b0f5df4c88bac46fe749d36d905fc7ad0296587Roland Dreier#endif /* CONFIG_MLX4_DEBUG */ 180225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 181225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier#define mlx4_dbg(mdev, format, arg...) \ 1820a645e809759a4b9c876d3e9ca6c139784a97a38Joe Perchesdo { \ 1830a645e809759a4b9c876d3e9ca6c139784a97a38Joe Perches if (mlx4_debug_level) \ 1840a645e809759a4b9c876d3e9ca6c139784a97a38Joe Perches dev_printk(KERN_DEBUG, &mdev->pdev->dev, format, ##arg); \ 1850a645e809759a4b9c876d3e9ca6c139784a97a38Joe Perches} while (0) 186225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 187225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier#define mlx4_err(mdev, format, arg...) \ 1880a645e809759a4b9c876d3e9ca6c139784a97a38Joe Perches dev_err(&mdev->pdev->dev, format, ##arg) 189225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier#define mlx4_info(mdev, format, arg...) \ 1900a645e809759a4b9c876d3e9ca6c139784a97a38Joe Perches dev_info(&mdev->pdev->dev, format, ##arg) 191225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier#define mlx4_warn(mdev, format, arg...) \ 1920a645e809759a4b9c876d3e9ca6c139784a97a38Joe Perches dev_warn(&mdev->pdev->dev, format, ##arg) 193225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 1940ec2c0f86d31ab36547307f133b0016006bdc6b5Eugenia Emantayevextern int mlx4_log_num_mgm_entry_size; 1952b8fb2867ca2736a715a88067fd0ec2904777cbeMarcel Apfelbaumextern int log_mtts_per_seg; 1960ec2c0f86d31ab36547307f133b0016006bdc6b5Eugenia Emantayev 197623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein#define MLX4_MAX_NUM_SLAVES (MLX4_MAX_NUM_PF + MLX4_MAX_NUM_VF) 198623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein#define ALL_SLAVES 0xff 199623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 200225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_bitmap { 201225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u32 last; 202225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u32 top; 203225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u32 max; 20493fc9e1bb6507dde945c2eab68c93e1066ac3691Yevgeny Petrilin u32 reserved_top; 205225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u32 mask; 20642d1e017e2f040c3e3d62b6cfa3a26351a865d04Eli Cohen u32 avail; 207225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier spinlock_t lock; 208225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier unsigned long *table; 209225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 210225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 211225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_buddy { 212225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier unsigned long **bits; 213e4044cfc493338cd09870bd45dc646336bb66e9fRoland Dreier unsigned int *num_free; 214225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier int max_order; 215225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier spinlock_t lock; 216225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 217225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 218225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_icm; 219225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 220225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_icm_table { 221225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u64 virt; 222225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier int num_icm; 223225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier int num_obj; 224225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier int obj_size; 225225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier int lowmem; 2265b0bf5e25efea77103b0ac7c8057cd56c778ef41Jack Morgenstein int coherent; 227225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mutex mutex; 228225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_icm **icm; 229225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 230225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 231c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen/* 232c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen * Must be packed because mtt_seg is 64 bits but only aligned to 32 bits. 233c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen */ 234c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenstruct mlx4_mpt_entry { 235c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 flags; 236c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 qpn; 237c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 key; 238c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 pd_flags; 239c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be64 start; 240c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be64 length; 241c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 lkey; 242c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 win_cnt; 243c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 reserved1[3]; 244c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 mtt_rep; 2452b8fb2867ca2736a715a88067fd0ec2904777cbeMarcel Apfelbaum __be64 mtt_addr; 246c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 mtt_sz; 247c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 entity_size; 248c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 first_byte_offset; 249c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen} __packed; 250c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen 251c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen/* 252c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen * Must be packed because start is 64 bits but only aligned to 32 bits. 253c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen */ 254c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenstruct mlx4_eq_context { 255c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 flags; 256c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u16 reserved1[3]; 257c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be16 page_offset; 258c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 log_eq_size; 259c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 reserved2[4]; 260c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 eq_period; 261c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 reserved3; 262c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 eq_max_count; 263c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 reserved4[3]; 264c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 intr; 265c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 log_page_size; 266c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 reserved5[2]; 267c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 mtt_base_addr_h; 268c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 mtt_base_addr_l; 269c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u32 reserved6[2]; 270c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 consumer_index; 271c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 producer_index; 272c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u32 reserved7[4]; 273c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen}; 274c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen 275c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenstruct mlx4_cq_context { 276c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 flags; 277c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u16 reserved1[3]; 278c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be16 page_offset; 279c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 logsize_usrpage; 280c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be16 cq_period; 281c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be16 cq_max_count; 282c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 reserved2[3]; 283c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 comp_eqn; 284c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 log_page_size; 285c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 reserved3[2]; 286c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 mtt_base_addr_h; 287c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 mtt_base_addr_l; 288c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 last_notified_index; 289c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 solicit_producer_index; 290c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 consumer_index; 291c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 producer_index; 292c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u32 reserved4[2]; 293c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be64 db_rec_addr; 294c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen}; 295c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen 296c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenstruct mlx4_srq_context { 297c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 state_logsize_srqn; 298c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 logstride; 299c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 reserved1; 300c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be16 xrcd; 301c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 pg_offset_cqn; 302c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u32 reserved2; 303c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 log_page_size; 304c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 reserved3[2]; 305c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u8 mtt_base_addr_h; 306c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 mtt_base_addr_l; 307c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be32 pd; 308c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be16 limit_watermark; 309c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be16 wqe_cnt; 310c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u16 reserved4; 311c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be16 wqe_counter; 312c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen u32 reserved5; 313c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen __be64 db_rec_addr; 314c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen}; 315c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen 316623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinstruct mlx4_eqe { 317623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 reserved1; 318623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 type; 319623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 reserved2; 320623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 subtype; 321623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein union { 322623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u32 raw[6]; 323623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct { 324623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein __be32 cqn; 325623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein } __packed comp; 326623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct { 327623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u16 reserved1; 328623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein __be16 token; 329623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u32 reserved2; 330623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 reserved3[3]; 331623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 status; 332623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein __be64 out_param; 333623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein } __packed cmd; 334623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct { 335623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein __be32 qpn; 336623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein } __packed qp; 337623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct { 338623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein __be32 srqn; 339623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein } __packed srq; 340623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct { 341623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein __be32 cqn; 342623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u32 reserved1; 343623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 reserved2[3]; 344623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 syndrome; 345623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein } __packed cq_err; 346623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct { 347623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u32 reserved1[2]; 348623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein __be32 port; 349623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein } __packed port_change; 350623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct { 351623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein #define COMM_CHANNEL_BIT_ARRAY_SIZE 4 352623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u32 reserved; 353623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u32 bit_vec[COMM_CHANNEL_BIT_ARRAY_SIZE]; 354623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein } __packed comm_channel_arm; 355623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct { 356623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 port; 357623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 reserved[3]; 358623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein __be64 mac; 359623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein } __packed mac_update; 360623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct { 361623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 port; 362623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein } __packed sw_event; 363623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct { 364623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein __be32 slave_id; 365623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein } __packed flr_event; 3665984be90046fa978d94a5ec08bbf8f760cff2b30Jack Morgenstein struct { 3675984be90046fa978d94a5ec08bbf8f760cff2b30Jack Morgenstein __be16 current_temperature; 3685984be90046fa978d94a5ec08bbf8f760cff2b30Jack Morgenstein __be16 warning_threshold; 3695984be90046fa978d94a5ec08bbf8f760cff2b30Jack Morgenstein } __packed warming; 370623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein } event; 371623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 slave_id; 372623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 reserved3[2]; 373623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 owner; 374623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein} __packed; 375623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 376225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_eq { 377225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_dev *dev; 378225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier void __iomem *doorbell; 379225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier int eqn; 380225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u32 cons_index; 381225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u16 irq; 382225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u16 have_irq; 383225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier int nent; 384225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_buf_list *page_list; 385225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_mtt mtt; 386225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 387225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 388623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinstruct mlx4_slave_eqe { 389623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 type; 390623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 port; 391623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u32 param; 392623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein}; 393623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 394623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinstruct mlx4_slave_event_eq_info { 395803143fbda719106017309d551d082e4b4e7c8c3Marcel Apfelbaum int eqn; 396623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u16 token; 397623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein}; 398623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 399225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_profile { 400225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier int num_qp; 401225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier int rdmarc_per_qp; 402225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier int num_srq; 403225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier int num_cq; 404225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier int num_mcg; 405225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier int num_mpt; 406db5a7a65c05867cb6ff5cb6d556a0edfce631d2dRoland Dreier unsigned num_mtt; 407225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 408225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 409225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_fw { 410225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u64 clr_int_base; 411225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u64 catas_offset; 412623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u64 comm_base; 413225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_icm *fw_icm; 414225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_icm *aux_icm; 415225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u32 catas_size; 416225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u16 fw_pages; 417225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u8 clr_int_bar; 418225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u8 catas_bar; 419623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 comm_bar; 420623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein}; 421623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 422623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinstruct mlx4_comm { 423623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u32 slave_write; 424623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u32 slave_read; 425225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 426225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 427ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayevenum { 428ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev MLX4_MCAST_CONFIG = 0, 429ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev MLX4_MCAST_DISABLE = 1, 430ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev MLX4_MCAST_ENABLE = 2, 431ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev}; 432ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev 433623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein#define VLAN_FLTR_SIZE 128 434623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 435623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinstruct mlx4_vlan_fltr { 436623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein __be32 entry[VLAN_FLTR_SIZE]; 437623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein}; 438623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 439ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayevstruct mlx4_mcast_entry { 440ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev struct list_head list; 441ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u64 addr; 442ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev}; 443ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev 444b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilinstruct mlx4_promisc_qp { 445b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilin struct list_head list; 446b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilin u32 qpn; 447b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilin}; 448b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilin 449b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilinstruct mlx4_steer_index { 450b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilin struct list_head list; 451b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilin unsigned int index; 452b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilin struct list_head duplicates; 453b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilin}; 454b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilin 455803143fbda719106017309d551d082e4b4e7c8c3Marcel Apfelbaum#define MLX4_EVENT_TYPES_NUM 64 456803143fbda719106017309d551d082e4b4e7c8c3Marcel Apfelbaum 457623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinstruct mlx4_slave_state { 458623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 comm_toggle; 459623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 last_cmd; 460623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 init_port_mask; 461623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein bool active; 462623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 function; 463623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein dma_addr_t vhcr_dma; 464623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u16 mtu[MLX4_MAX_PORTS + 1]; 465623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein __be32 ib_cap_mask[MLX4_MAX_PORTS + 1]; 466623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_slave_eqe eq[MLX4_MFUNC_MAX_EQES]; 467623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct list_head mcast_filters[MLX4_MAX_PORTS + 1]; 468623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vlan_fltr *vlan_filter[MLX4_MAX_PORTS + 1]; 469803143fbda719106017309d551d082e4b4e7c8c3Marcel Apfelbaum /* event type to eq number lookup */ 470803143fbda719106017309d551d082e4b4e7c8c3Marcel Apfelbaum struct mlx4_slave_event_eq_info event_eq[MLX4_EVENT_TYPES_NUM]; 471623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u16 eq_pi; 472623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u16 eq_ci; 473623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein spinlock_t lock; 474623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein /*initialized via the kzalloc*/ 475623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 is_slave_going_down; 476623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u32 cookie; 477623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein}; 478623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 479623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinstruct slave_list { 480623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mutex mutex; 481623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct list_head res_list[MLX4_NUM_OF_RESOURCE_TYPE]; 482623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein}; 483623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 484623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinstruct mlx4_resource_tracker { 485623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein spinlock_t lock; 486623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein /* tree for each resources */ 487623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct radix_tree_root res_tree[MLX4_NUM_OF_RESOURCE_TYPE]; 488623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein /* num_of_slave's lists, one per slave */ 489623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct slave_list *slave_list; 490623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein}; 491623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 492623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein#define SLAVE_EVENT_EQ_SIZE 128 493623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinstruct mlx4_slave_event_eq { 494623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u32 eqn; 495623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u32 cons; 496623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u32 prod; 497623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_eqe event_eqe[SLAVE_EVENT_EQ_SIZE]; 498623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein}; 499623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 500623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinstruct mlx4_master_qp0_state { 501623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein int proxy_qp0_active; 502623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein int qp0_active; 503623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein int port_active; 504623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein}; 505623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 506623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinstruct mlx4_mfunc_master_ctx { 507623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_slave_state *slave_state; 508623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_master_qp0_state qp0_state[MLX4_MAX_PORTS + 1]; 509623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein int init_port_ref[MLX4_MAX_PORTS + 1]; 510623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u16 max_mtu[MLX4_MAX_PORTS + 1]; 511623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein int disable_mcast_ref[MLX4_MAX_PORTS + 1]; 512623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_resource_tracker res_tracker; 513623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct workqueue_struct *comm_wq; 514623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct work_struct comm_work; 515623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct work_struct slave_event_work; 516623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct work_struct slave_flr_event_work; 517623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein spinlock_t slave_state_lock; 518f5311ac109b21c9b47118655a5b6d887bcc686f8Jack Morgenstein __be32 comm_arm_bit_vector[4]; 519623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_eqe cmd_eqe; 520623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_slave_event_eq slave_eq; 521623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mutex gen_eqe_mutex[MLX4_MFUNC_MAX]; 522623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein}; 523623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 524623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinstruct mlx4_mfunc { 525623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_comm __iomem *comm; 526623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr_cmd *vhcr; 527623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein dma_addr_t vhcr_dma; 528623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 529623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_mfunc_master_ctx master; 530623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein}; 531623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 532225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_cmd { 533225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct pci_pool *pool; 534225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier void __iomem *hcr; 535225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mutex hcr_mutex; 536225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct semaphore poll_sem; 537225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct semaphore event_sem; 538623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct semaphore slave_sem; 539225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier int max_cmds; 540225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier spinlock_t context_lock; 541225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier int free_head; 542225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_cmd_context *context; 543225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u16 token_mask; 544225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u8 use_events; 545225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u8 toggle; 546623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein u8 comm_toggle; 547225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 548225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 549225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_uar_table { 550225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_bitmap bitmap; 551225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 552225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 553225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_mr_table { 554225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_bitmap mpt_bitmap; 555225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_buddy mtt_buddy; 556225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u64 mtt_base; 557225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u64 mpt_base; 558225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_icm_table mtt_table; 559225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_icm_table dmpt_table; 560225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 561225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 562225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_cq_table { 563225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_bitmap bitmap; 564225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier spinlock_t lock; 565225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct radix_tree_root tree; 566225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_icm_table table; 567225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_icm_table cmpt_table; 568225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 569225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 570225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_eq_table { 571225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_bitmap bitmap; 572b8dd786f9417e5885929bfe33a235c76a9c1c569Yevgeny Petrilin char *irq_names; 573225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier void __iomem *clr_int; 574b8dd786f9417e5885929bfe33a235c76a9c1c569Yevgeny Petrilin void __iomem **uar_map; 575225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u32 clr_mask; 576b8dd786f9417e5885929bfe33a235c76a9c1c569Yevgeny Petrilin struct mlx4_eq *eq; 577fa0681d2129732027355d6b7083dd8932b9b799dRoland Dreier struct mlx4_icm_table table; 578225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_icm_table cmpt_table; 579225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier int have_irq; 580225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u8 inta_pin; 581225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 582225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 583225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_srq_table { 584225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_bitmap bitmap; 585225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier spinlock_t lock; 586225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct radix_tree_root tree; 587225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_icm_table table; 588225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_icm_table cmpt_table; 589225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 590225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 591225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_qp_table { 592225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_bitmap bitmap; 593225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u32 rdmarc_base; 594225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier int rdmarc_shift; 595225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier spinlock_t lock; 596225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_icm_table qp_table; 597225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_icm_table auxc_table; 598225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_icm_table altc_table; 599225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_icm_table rdmarc_table; 600225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_icm_table cmpt_table; 601225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 602225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 603225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_mcg_table { 604225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mutex mutex; 605225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_bitmap bitmap; 606225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_icm_table table; 607225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 608225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 609225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_catas_err { 610225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier u32 __iomem *map; 611ee49bd9397cd2b8fe7a1962505d81c1d0a1366fcJack Morgenstein struct timer_list timer; 612ee49bd9397cd2b8fe7a1962505d81c1d0a1366fcJack Morgenstein struct list_head list; 613225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 614225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 6152a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin#define MLX4_MAX_MAC_NUM 128 6162a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin#define MLX4_MAC_TABLE_SIZE (MLX4_MAX_MAC_NUM << 3) 6172a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin 6182a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilinstruct mlx4_mac_table { 6192a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin __be64 entries[MLX4_MAX_MAC_NUM]; 6202a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin int refs[MLX4_MAX_MAC_NUM]; 6212a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin struct mutex mutex; 6222a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin int total; 6232a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin int max; 6242a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin}; 6252a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin 6262a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin#define MLX4_MAX_VLAN_NUM 128 6272a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin#define MLX4_VLAN_TABLE_SIZE (MLX4_MAX_VLAN_NUM << 2) 6282a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin 6292a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilinstruct mlx4_vlan_table { 6302a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin __be32 entries[MLX4_MAX_VLAN_NUM]; 6312a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin int refs[MLX4_MAX_VLAN_NUM]; 6322a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin struct mutex mutex; 6332a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin int total; 6342a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin int max; 6352a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin}; 6362a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin 637ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev#define SET_PORT_GEN_ALL_VALID 0x7 638ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev#define SET_PORT_PROMISC_SHIFT 31 639ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev#define SET_PORT_MC_PROMISC_SHIFT 30 640ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev 641ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayevenum { 642ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev MCAST_DIRECT_ONLY = 0, 643ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev MCAST_DIRECT = 1, 644ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev MCAST_DEFAULT = 2 645ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev}; 646ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev 647ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev 648ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayevstruct mlx4_set_port_general_context { 649ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u8 reserved[3]; 650ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u8 flags; 651ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u16 reserved2; 652ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev __be16 mtu; 653ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u8 pptx; 654ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u8 pfctx; 655ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u16 reserved3; 656ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u8 pprx; 657ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u8 pfcrx; 658ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u16 reserved4; 659ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev}; 660ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev 661ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayevstruct mlx4_set_port_rqp_calc_context { 662ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev __be32 base_qpn; 663ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u8 rererved; 664ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u8 n_mac; 665ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u8 n_vlan; 666ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u8 n_prio; 667ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u8 reserved2[3]; 668ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u8 mac_miss; 669ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u8 intra_no_vlan; 670ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u8 no_vlan; 671ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u8 intra_vlan_miss; 672ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u8 vlan_miss; 673ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u8 reserved3[3]; 674ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev u8 no_vlan_prio; 675ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev __be32 promisc; 676ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev __be32 mcast; 677ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev}; 678ffe455ad04681f3fc48eef595fe526a795f809a3Eugenia Emantayev 6791679200f91da6a054b06954c9bd3eeed29b6731fYevgeny Petrilinstruct mlx4_mac_entry { 6801679200f91da6a054b06954c9bd3eeed29b6731fYevgeny Petrilin u64 mac; 6811679200f91da6a054b06954c9bd3eeed29b6731fYevgeny Petrilin}; 6821679200f91da6a054b06954c9bd3eeed29b6731fYevgeny Petrilin 6832a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilinstruct mlx4_port_info { 6842a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin struct mlx4_dev *dev; 6852a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin int port; 6867ff93f8b7ecbc36e7ffc5c11a61643821c1bfee5Yevgeny Petrilin char dev_name[16]; 6877ff93f8b7ecbc36e7ffc5c11a61643821c1bfee5Yevgeny Petrilin struct device_attribute port_attr; 6887ff93f8b7ecbc36e7ffc5c11a61643821c1bfee5Yevgeny Petrilin enum mlx4_port_type tmp_type; 689096335b3f9830b90d13aee77252cf6f5f12a258cOr Gerlitz char dev_mtu_name[16]; 690096335b3f9830b90d13aee77252cf6f5f12a258cOr Gerlitz struct device_attribute port_mtu_attr; 6912a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin struct mlx4_mac_table mac_table; 6921679200f91da6a054b06954c9bd3eeed29b6731fYevgeny Petrilin struct radix_tree_root mac_tree; 6932a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin struct mlx4_vlan_table vlan_table; 6941679200f91da6a054b06954c9bd3eeed29b6731fYevgeny Petrilin int base_qpn; 6952a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin}; 6962a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin 69727bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilinstruct mlx4_sense { 69827bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilin struct mlx4_dev *dev; 69927bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilin u8 do_sense_port[MLX4_MAX_PORTS + 1]; 70027bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilin u8 sense_allowed[MLX4_MAX_PORTS + 1]; 70127bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilin struct delayed_work sense_poll; 70227bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilin}; 70327bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilin 7040b7ca5a928e2271bbc225e9e1ac1f22e9fbee54fYevgeny Petrilinstruct mlx4_msix_ctl { 7050b7ca5a928e2271bbc225e9e1ac1f22e9fbee54fYevgeny Petrilin u64 pool_bm; 706730c41d5ba583a9608300fc4e6cf236957cfe02aYevgeny Petrilin struct mutex pool_lock; 7070b7ca5a928e2271bbc225e9e1ac1f22e9fbee54fYevgeny Petrilin}; 7080b7ca5a928e2271bbc225e9e1ac1f22e9fbee54fYevgeny Petrilin 709b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilinstruct mlx4_steer { 710b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilin struct list_head promisc_qps[MLX4_NUM_STEERS]; 711b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilin struct list_head steer_entries[MLX4_NUM_STEERS]; 712b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilin}; 713b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilin 714225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_priv { 715225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_dev dev; 716225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 717225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct list_head dev_list; 718225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct list_head ctx_list; 719225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier spinlock_t ctx_lock; 720225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 7216296883ca4cd52dafb45f191d24102e28ded38f2Yevgeny Petrilin struct list_head pgdir_list; 7226296883ca4cd52dafb45f191d24102e28ded38f2Yevgeny Petrilin struct mutex pgdir_mutex; 7236296883ca4cd52dafb45f191d24102e28ded38f2Yevgeny Petrilin 724225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_fw fw; 725225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_cmd cmd; 726623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_mfunc mfunc; 727225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 728225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_bitmap pd_bitmap; 729012a8ff577f95211c6ffd3b77a94c34ebae009b6Sean Hefty struct mlx4_bitmap xrcd_bitmap; 730225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_uar_table uar_table; 731225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_mr_table mr_table; 732225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_cq_table cq_table; 733225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_eq_table eq_table; 734225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_srq_table srq_table; 735225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_qp_table qp_table; 736225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_mcg_table mcg_table; 737f2a3f6a32cf64db1495b5ced8625b9a80bde44e5Or Gerlitz struct mlx4_bitmap counters_bitmap; 738225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 739225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_catas_err catas_err; 740225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 741225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier void __iomem *clr_base; 742225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 743225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_uar driver_uar; 744225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier void __iomem *kar; 7452a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin struct mlx4_port_info port[MLX4_MAX_PORTS + 1]; 74627bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilin struct mlx4_sense sense; 7477ff93f8b7ecbc36e7ffc5c11a61643821c1bfee5Yevgeny Petrilin struct mutex port_mutex; 7480b7ca5a928e2271bbc225e9e1ac1f22e9fbee54fYevgeny Petrilin struct mlx4_msix_ctl msix_ctl; 749b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilin struct mlx4_steer *steer; 750c1b43dca137f2154845122417fba86d4bae67182Eli Cohen struct list_head bf_list; 751c1b43dca137f2154845122417fba86d4bae67182Eli Cohen struct mutex bf_mutex; 752c1b43dca137f2154845122417fba86d4bae67182Eli Cohen struct io_mapping *bf_mapping; 753ea51b377abcdf0f3fab0119879be373bda69afb1Jack Morgenstein int reserved_mtts; 754225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier}; 755225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 756225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstatic inline struct mlx4_priv *mlx4_priv(struct mlx4_dev *dev) 757225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier{ 758225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier return container_of(dev, struct mlx4_priv, dev); 759225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier} 760225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 76127bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilin#define MLX4_SENSE_RANGE (HZ * 3) 76227bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilin 76327bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilinextern struct workqueue_struct *mlx4_wq; 76427bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilin 765225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreieru32 mlx4_bitmap_alloc(struct mlx4_bitmap *bitmap); 766225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_bitmap_free(struct mlx4_bitmap *bitmap, u32 obj); 767a3cdcbfa8fb1fccfe48d359da86e99546610c562Yevgeny Petrilinu32 mlx4_bitmap_alloc_range(struct mlx4_bitmap *bitmap, int cnt, int align); 768a3cdcbfa8fb1fccfe48d359da86e99546610c562Yevgeny Petrilinvoid mlx4_bitmap_free_range(struct mlx4_bitmap *bitmap, u32 obj, int cnt); 76942d1e017e2f040c3e3d62b6cfa3a26351a865d04Eli Cohenu32 mlx4_bitmap_avail(struct mlx4_bitmap *bitmap); 77093fc9e1bb6507dde945c2eab68c93e1066ac3691Yevgeny Petrilinint mlx4_bitmap_init(struct mlx4_bitmap *bitmap, u32 num, u32 mask, 77193fc9e1bb6507dde945c2eab68c93e1066ac3691Yevgeny Petrilin u32 reserved_bot, u32 resetrved_top); 772225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_bitmap_cleanup(struct mlx4_bitmap *bitmap); 773225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 774225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierint mlx4_reset(struct mlx4_dev *dev); 775225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 776b8dd786f9417e5885929bfe33a235c76a9c1c569Yevgeny Petrilinint mlx4_alloc_eq_table(struct mlx4_dev *dev); 777b8dd786f9417e5885929bfe33a235c76a9c1c569Yevgeny Petrilinvoid mlx4_free_eq_table(struct mlx4_dev *dev); 778b8dd786f9417e5885929bfe33a235c76a9c1c569Yevgeny Petrilin 779225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierint mlx4_init_pd_table(struct mlx4_dev *dev); 780012a8ff577f95211c6ffd3b77a94c34ebae009b6Sean Heftyint mlx4_init_xrcd_table(struct mlx4_dev *dev); 781225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierint mlx4_init_uar_table(struct mlx4_dev *dev); 782225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierint mlx4_init_mr_table(struct mlx4_dev *dev); 783225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierint mlx4_init_eq_table(struct mlx4_dev *dev); 784225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierint mlx4_init_cq_table(struct mlx4_dev *dev); 785225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierint mlx4_init_qp_table(struct mlx4_dev *dev); 786225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierint mlx4_init_srq_table(struct mlx4_dev *dev); 787225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierint mlx4_init_mcg_table(struct mlx4_dev *dev); 788225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 789225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_cleanup_pd_table(struct mlx4_dev *dev); 790012a8ff577f95211c6ffd3b77a94c34ebae009b6Sean Heftyvoid mlx4_cleanup_xrcd_table(struct mlx4_dev *dev); 791225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_cleanup_uar_table(struct mlx4_dev *dev); 792225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_cleanup_mr_table(struct mlx4_dev *dev); 793225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_cleanup_eq_table(struct mlx4_dev *dev); 794225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_cleanup_cq_table(struct mlx4_dev *dev); 795225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_cleanup_qp_table(struct mlx4_dev *dev); 796225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_cleanup_srq_table(struct mlx4_dev *dev); 797225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_cleanup_mcg_table(struct mlx4_dev *dev); 798c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenint __mlx4_qp_alloc_icm(struct mlx4_dev *dev, int qpn); 799c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenvoid __mlx4_qp_free_icm(struct mlx4_dev *dev, int qpn); 800c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenint __mlx4_cq_alloc_icm(struct mlx4_dev *dev, int *cqn); 801c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenvoid __mlx4_cq_free_icm(struct mlx4_dev *dev, int cqn); 802c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenint __mlx4_srq_alloc_icm(struct mlx4_dev *dev, int *srqn); 803c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenvoid __mlx4_srq_free_icm(struct mlx4_dev *dev, int srqn); 804c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenint __mlx4_mr_reserve(struct mlx4_dev *dev); 805c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenvoid __mlx4_mr_release(struct mlx4_dev *dev, u32 index); 806c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenint __mlx4_mr_alloc_icm(struct mlx4_dev *dev, u32 index); 807c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenvoid __mlx4_mr_free_icm(struct mlx4_dev *dev, u32 index); 808c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenu32 __mlx4_alloc_mtt_range(struct mlx4_dev *dev, int order); 809c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenvoid __mlx4_free_mtt_range(struct mlx4_dev *dev, u32 first_seg, int order); 810225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 811623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_WRITE_MTT_wrapper(struct mlx4_dev *dev, int slave, 812623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 813623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 814623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 815623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 816623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_SYNC_TPT_wrapper(struct mlx4_dev *dev, int slave, 817623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 818623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 819623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 820623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 821623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_SW2HW_MPT_wrapper(struct mlx4_dev *dev, int slave, 822623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 823623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 824623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 825623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 826623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_HW2SW_MPT_wrapper(struct mlx4_dev *dev, int slave, 827623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 828623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 829623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 830623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 831623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_QUERY_MPT_wrapper(struct mlx4_dev *dev, int slave, 832623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 833623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 834623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 835623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 836623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_SW2HW_EQ_wrapper(struct mlx4_dev *dev, int slave, 837623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 838623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 839623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 840623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 841623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_DMA_wrapper(struct mlx4_dev *dev, int slave, 842623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 843623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 844623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 845623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 846c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenint __mlx4_qp_reserve_range(struct mlx4_dev *dev, int cnt, int align, 847c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen int *base); 848c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenvoid __mlx4_qp_release_range(struct mlx4_dev *dev, int base_qpn, int cnt); 849c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenint __mlx4_register_mac(struct mlx4_dev *dev, u8 port, u64 mac); 850c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenvoid __mlx4_unregister_mac(struct mlx4_dev *dev, u8 port, u64 mac); 851c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenint __mlx4_replace_mac(struct mlx4_dev *dev, u8 port, int qpn, u64 new_mac); 852c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenint __mlx4_write_mtt(struct mlx4_dev *dev, struct mlx4_mtt *mtt, 853c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen int start_index, int npages, u64 *page_list); 854623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 855ee49bd9397cd2b8fe7a1962505d81c1d0a1366fcJack Morgensteinvoid mlx4_start_catas_poll(struct mlx4_dev *dev); 856ee49bd9397cd2b8fe7a1962505d81c1d0a1366fcJack Morgensteinvoid mlx4_stop_catas_poll(struct mlx4_dev *dev); 85727bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilinvoid mlx4_catas_init(void); 858ee49bd9397cd2b8fe7a1962505d81c1d0a1366fcJack Morgensteinint mlx4_restart_one(struct pci_dev *pdev); 859225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierint mlx4_register_device(struct mlx4_dev *dev); 860225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_unregister_device(struct mlx4_dev *dev); 86137608eea86a358ac6a18df0af55d4f77d08a1f30Roland Dreiervoid mlx4_dispatch_event(struct mlx4_dev *dev, enum mlx4_dev_event type, int port); 862225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 863225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_dev_cap; 864225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierstruct mlx4_init_hca_param; 865225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 866225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreieru64 mlx4_make_profile(struct mlx4_dev *dev, 867225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_profile *request, 868225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_dev_cap *dev_cap, 869225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier struct mlx4_init_hca_param *init_hca); 870623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinvoid mlx4_master_comm_channel(struct work_struct *work); 871623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinvoid mlx4_gen_slave_eqe(struct work_struct *work); 872623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinvoid mlx4_master_handle_slave_flr(struct work_struct *work); 873623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 874623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_ALLOC_RES_wrapper(struct mlx4_dev *dev, int slave, 875623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 876623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 877623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 878623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 879623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_FREE_RES_wrapper(struct mlx4_dev *dev, int slave, 880623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 881623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 882623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 883623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 884623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_MAP_EQ_wrapper(struct mlx4_dev *dev, int slave, 885623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, struct mlx4_cmd_mailbox *inbox, 886623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 887623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 888623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_COMM_INT_wrapper(struct mlx4_dev *dev, int slave, 889623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 890623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 891623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 892623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 893623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_HW2SW_EQ_wrapper(struct mlx4_dev *dev, int slave, 894623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 895623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 896623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 897623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 898623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_QUERY_EQ_wrapper(struct mlx4_dev *dev, int slave, 899623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 900623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 901623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 902623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 903623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_SW2HW_CQ_wrapper(struct mlx4_dev *dev, int slave, 904623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 905623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 906623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 907623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 908623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_HW2SW_CQ_wrapper(struct mlx4_dev *dev, int slave, 909623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 910623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 911623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 912623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 913623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_QUERY_CQ_wrapper(struct mlx4_dev *dev, int slave, 914623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 915623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 916623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 917623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 918623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_MODIFY_CQ_wrapper(struct mlx4_dev *dev, int slave, 919623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 920623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 921623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 922623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 923623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_SW2HW_SRQ_wrapper(struct mlx4_dev *dev, int slave, 924623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 925623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 926623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 927623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 928623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_HW2SW_SRQ_wrapper(struct mlx4_dev *dev, int slave, 929623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 930623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 931623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 932623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 933623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_QUERY_SRQ_wrapper(struct mlx4_dev *dev, int slave, 934623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 935623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 936623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 937623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 938623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_ARM_SRQ_wrapper(struct mlx4_dev *dev, int slave, 939623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 940623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 941623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 942623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 943623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_GEN_QP_wrapper(struct mlx4_dev *dev, int slave, 944623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 945623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 946623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 947623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 948623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_RST2INIT_QP_wrapper(struct mlx4_dev *dev, int slave, 949623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 950623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 951623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 952623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 953623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_INIT2RTR_QP_wrapper(struct mlx4_dev *dev, int slave, 954623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 955623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 956623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 957623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 958623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_2RST_QP_wrapper(struct mlx4_dev *dev, int slave, 959623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 960623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 961623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 962623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 963623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 964623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_GEN_EQE(struct mlx4_dev *dev, int slave, struct mlx4_eqe *eqe); 965225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 966225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierint mlx4_cmd_init(struct mlx4_dev *dev); 967225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_cmd_cleanup(struct mlx4_dev *dev); 968ab9c17a009ee8eb8c667f22dc0be0709effceab9Jack Morgensteinint mlx4_multi_func_init(struct mlx4_dev *dev); 969ab9c17a009ee8eb8c667f22dc0be0709effceab9Jack Morgensteinvoid mlx4_multi_func_cleanup(struct mlx4_dev *dev); 970225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_cmd_event(struct mlx4_dev *dev, u16 token, u8 status, u64 out_param); 971225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreierint mlx4_cmd_use_events(struct mlx4_dev *dev); 972225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_cmd_use_polling(struct mlx4_dev *dev); 973225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 974ab9c17a009ee8eb8c667f22dc0be0709effceab9Jack Morgensteinint mlx4_comm_cmd(struct mlx4_dev *dev, u8 cmd, u16 param, 975ab9c17a009ee8eb8c667f22dc0be0709effceab9Jack Morgenstein unsigned long timeout); 976ab9c17a009ee8eb8c667f22dc0be0709effceab9Jack Morgenstein 977225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_cq_completion(struct mlx4_dev *dev, u32 cqn); 978225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_cq_event(struct mlx4_dev *dev, u32 cqn, int event_type); 979225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 980225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_qp_event(struct mlx4_dev *dev, u32 qpn, int event_type); 981225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 982225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_srq_event(struct mlx4_dev *dev, u32 srqn, int event_type); 983225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 984225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreiervoid mlx4_handle_catas_err(struct mlx4_dev *dev); 985225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier 986ab6dc30da55d262c54ae12e47e4a2e4372e39fbfYevgeny Petrilinint mlx4_SENSE_PORT(struct mlx4_dev *dev, int port, 987ab6dc30da55d262c54ae12e47e4a2e4372e39fbfYevgeny Petrilin enum mlx4_port_type *type); 98827bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilinvoid mlx4_do_sense_ports(struct mlx4_dev *dev, 98927bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilin enum mlx4_port_type *stype, 99027bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilin enum mlx4_port_type *defaults); 99127bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilinvoid mlx4_start_sense(struct mlx4_dev *dev); 99227bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilinvoid mlx4_stop_sense(struct mlx4_dev *dev); 99327bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilinvoid mlx4_sense_init(struct mlx4_dev *dev); 99427bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilinint mlx4_check_port_params(struct mlx4_dev *dev, 99527bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilin enum mlx4_port_type *port_type); 99627bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilinint mlx4_change_port_types(struct mlx4_dev *dev, 99727bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilin enum mlx4_port_type *port_types); 99827bf91d6a0d5a9c7224e8687754249bba67dd4cfYevgeny Petrilin 9992a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilinvoid mlx4_init_mac_table(struct mlx4_dev *dev, struct mlx4_mac_table *table); 10002a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilinvoid mlx4_init_vlan_table(struct mlx4_dev *dev, struct mlx4_vlan_table *table); 10012a2336f8228292b8197f4187e54b0748903e6645Yevgeny Petrilin 10027ff93f8b7ecbc36e7ffc5c11a61643821c1bfee5Yevgeny Petrilinint mlx4_SET_PORT(struct mlx4_dev *dev, u8 port); 1003623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein/* resource tracker functions*/ 1004623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_get_slave_from_resource_id(struct mlx4_dev *dev, 1005623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein enum mlx4_resource resource_type, 1006623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein int resource_id, int *slave); 1007623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinvoid mlx4_delete_all_resources_for_slave(struct mlx4_dev *dev, int slave_id); 1008623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_init_resource_tracker(struct mlx4_dev *dev); 1009623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 1010623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinvoid mlx4_free_resource_tracker(struct mlx4_dev *dev); 1011623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 1012623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_SET_PORT_wrapper(struct mlx4_dev *dev, int slave, 1013623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 1014623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 1015623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 1016623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 1017623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_INIT_PORT_wrapper(struct mlx4_dev *dev, int slave, 1018623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 1019623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 1020623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 1021623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 1022623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_CLOSE_PORT_wrapper(struct mlx4_dev *dev, int slave, 1023623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 1024623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 1025623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 1026623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 1027623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_QUERY_PORT_wrapper(struct mlx4_dev *dev, int slave, 1028623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 1029623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 1030623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 1031623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 10329a5aa622dd4cd22b5e0fe83e4a9c0c768d4e2deaJack Morgensteinint mlx4_get_port_ib_caps(struct mlx4_dev *dev, u8 port, __be32 *caps); 10337ff93f8b7ecbc36e7ffc5c11a61643821c1bfee5Yevgeny Petrilin 1034623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 1035623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_QP_ATTACH_wrapper(struct mlx4_dev *dev, int slave, 1036623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 1037623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 1038623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 1039623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 1040623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein 1041623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_PROMISC_wrapper(struct mlx4_dev *dev, int slave, 1042623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 1043623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 1044623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 1045623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 1046b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilinint mlx4_qp_detach_common(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16], 1047b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilin enum mlx4_protocol prot, enum mlx4_steer_type steer); 1048b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilinint mlx4_qp_attach_common(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16], 1049b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilin int block_mcast_loopback, enum mlx4_protocol prot, 1050b12d93d63c3217f0ec923ff938b12a744e242ffaYevgeny Petrilin enum mlx4_steer_type steer); 1051623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_SET_MCAST_FLTR_wrapper(struct mlx4_dev *dev, int slave, 1052623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 1053623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 1054623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 1055623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 1056623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_SET_VLAN_FLTR_wrapper(struct mlx4_dev *dev, int slave, 1057623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 1058623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 1059623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 1060623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 1061623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_common_set_vlan_fltr(struct mlx4_dev *dev, int function, 1062623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein int port, void *buf); 1063623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_common_dump_eth_stats(struct mlx4_dev *dev, int slave, u32 in_mod, 1064623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox); 1065623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_DUMP_ETH_STATS_wrapper(struct mlx4_dev *dev, int slave, 1066623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 1067623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 1068623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 1069623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 1070623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_PKEY_TABLE_wrapper(struct mlx4_dev *dev, int slave, 1071623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 1072623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 1073623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 1074623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 1075623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgensteinint mlx4_QUERY_IF_STAT_wrapper(struct mlx4_dev *dev, int slave, 1076623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_vhcr *vhcr, 1077623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *inbox, 1078623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_mailbox *outbox, 1079623ed84b1f9553bc962c2aca92f488aa6f27ecd1Jack Morgenstein struct mlx4_cmd_info *cmd); 1080f5311ac109b21c9b47118655a5b6d887bcc686f8Jack Morgenstein 10810ec2c0f86d31ab36547307f133b0016006bdc6b5Eugenia Emantayevint mlx4_get_mgm_entry_size(struct mlx4_dev *dev); 10820ec2c0f86d31ab36547307f133b0016006bdc6b5Eugenia Emantayevint mlx4_get_qp_per_mgm(struct mlx4_dev *dev); 10830ec2c0f86d31ab36547307f133b0016006bdc6b5Eugenia Emantayev 10845cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaumstatic inline void set_param_l(u64 *arg, u32 val) 10855cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaum{ 10865cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaum *((u32 *)arg) = val; 10875cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaum} 10885cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaum 10895cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaumstatic inline void set_param_h(u64 *arg, u32 val) 10905cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaum{ 10915cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaum *arg = (*arg & 0xffffffff) | ((u64) val << 32); 10925cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaum} 10935cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaum 10945cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaumstatic inline u32 get_param_l(u64 *arg) 10955cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaum{ 10965cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaum return (u32) (*arg & 0xffffffff); 10975cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaum} 10985cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaum 10995cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaumstatic inline u32 get_param_h(u64 *arg) 11005cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaum{ 11015cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaum return (u32)(*arg >> 32); 11025cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaum} 11035cc914f10851d2dc17005c7d26cdd70adcbecbcdMarcel Apfelbaum 1104c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohenstatic inline spinlock_t *mlx4_tlock(struct mlx4_dev *dev) 1105c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen{ 1106c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen return &mlx4_priv(dev)->mfunc.master.res_tracker.lock; 1107c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen} 1108c82e9aa0a8bcf7a1643ccb71678bab57f3cb4bc6Eli Cohen 1109f5311ac109b21c9b47118655a5b6d887bcc686f8Jack Morgenstein#define NOT_MASKED_PD_BITS 17 1110f5311ac109b21c9b47118655a5b6d887bcc686f8Jack Morgenstein 1111225c7b1feef1b41170f7037a5b10a65cd8a42c54Roland Dreier#endif /* MLX4_H */ 1112