Lines Matching defs:slave
136 static int mlx4_master_process_vhcr(struct mlx4_dev *dev, int slave,
318 /* check if the slave is trying to boot in the middle of
813 int slave, u64 slave_addr,
820 (slave & ~0x7f) | (size & 0xff)) {
822 slave_addr, master_addr, slave, size);
827 in_param = (u64) slave | slave_addr;
831 out_param = (u64) slave | slave_addr;
891 static int mlx4_MAD_IFC_wrapper(struct mlx4_dev *dev, int slave,
912 port = mlx4_slave_convert_port(dev, slave, slave_port);
938 pidx = priv->virt2phys_pkey[slave][port - 1][vidx];
946 /*get the slave specific caps:*/
953 if (!err && slave != mlx4_master_func_num(dev)) {
956 *state = (*state & 0xf0) | vf_port_state(dev, port, slave);
957 slave_cap_mask = priv->mfunc.master.slave_state[slave].ib_cap_mask[port];
963 __be64 guid = mlx4_get_admin_guid(dev, slave,
969 if (slave == 0 && guid == 0) {
983 data, slave, port);
997 slave_node_guid = mlx4_get_slave_node_guid(dev, slave);
1008 if (slave != mlx4_master_func_num(dev) &&
1009 !mlx4_vf_smi_enabled(dev, slave, port)) {
1012 mlx4_err(dev, "Unprivileged slave %d is trying to execute a Subnet MGMT MAD, class 0x%x, method 0x%x, view=%s for attr 0x%x. Rejecting\n",
1013 slave, smp->mgmt_class, smp->method,
1025 static int mlx4_CMD_EPERM_wrapper(struct mlx4_dev *dev, int slave,
1034 int mlx4_DMA_wrapper(struct mlx4_dev *dev, int slave,
1048 in_param |= slave;
1661 static int mlx4_master_process_vhcr(struct mlx4_dev *dev, int slave,
1683 ret = mlx4_ACCESS_MEM(dev, priv->mfunc.vhcr_dma, slave,
1684 priv->mfunc.master.slave_state[slave].vhcr_dma,
1714 mlx4_err(dev, "Unknown command:0x%x accepted from slave:%d\n",
1715 vhcr->op, slave);
1730 ret = mlx4_ACCESS_MEM(dev, inbox->dma, slave,
1744 if (cmd->verify && cmd->verify(dev, slave, vhcr, inbox)) {
1745 mlx4_warn(dev, "Command:0x%x from slave: %d failed protection checks for resource_id:%d\n",
1746 vhcr->op, slave, vhcr->in_modifier);
1763 err = cmd->wrapper(dev, slave, vhcr, inbox, outbox,
1790 "Unable to allocate counter for slave %d (%d)\n",
1791 slave, err);
1793 mlx4_warn(dev, "vhcr command:0x%x slave:%d failed with error:%d, status %d\n",
1794 vhcr->op, slave, vhcr->errno, err);
1803 ret = mlx4_ACCESS_MEM(dev, outbox->dma, slave,
1809 * slave, as it is now in undefined state */
1820 ret = mlx4_ACCESS_MEM(dev, priv->mfunc.vhcr_dma, slave,
1821 priv->mfunc.master.slave_state[slave].vhcr_dma,
1829 mlx4_GEN_EQE(dev, slave, &priv->mfunc.master.cmd_eqe))
1830 mlx4_warn(dev, "Failed to generate command completion eqe for slave %d\n",
1831 slave);
1842 int slave, int port)
1851 vp_oper = &priv->mfunc.master.vf_oper[slave].vport[port];
1852 vp_admin = &priv->mfunc.master.vf_admin[slave].vport[port];
1861 if (!(priv->mfunc.master.slave_state[slave].active &&
1870 mlx4_dbg(dev, "updating immediately admin params slave %d port %d\n",
1871 slave, port);
1888 "No vlan resources slave %d, port %d\n",
1889 slave, port);
1897 "alloc vlan %d idx %d slave %d port %d\n",
1899 admin_vlan_ix, slave, port);
1922 /* iterate over QPs owned by this slave, using UPDATE_QP */
1924 work->slave = slave;
1995 static int mlx4_master_activate_admin_state(struct mlx4_priv *priv, int slave)
2001 &priv->mfunc.master.slave_state[slave];
2003 &priv->dev, slave);
2012 priv->mfunc.master.vf_oper[slave].smi_enabled[port] =
2013 priv->mfunc.master.vf_admin[slave].enable_smi[port];
2014 vp_oper = &priv->mfunc.master.vf_oper[slave].vport[port];
2015 vp_admin = &priv->mfunc.master.vf_admin[slave].vport[port];
2037 "No vlan resources slave %d, port %d\n",
2038 slave, port);
2041 mlx4_dbg(&priv->dev, "alloc vlan %d idx %d slave %d port %d\n",
2043 vp_oper->vlan_idx, slave, port);
2053 "No mac resources slave %d, port %d\n",
2054 slave, port);
2057 mlx4_dbg(&priv->dev, "alloc mac %llx idx %d slave %d port %d\n",
2058 vp_oper->state.mac, vp_oper->mac_idx, slave, port);
2064 static void mlx4_master_deactivate_admin_state(struct mlx4_priv *priv, int slave)
2069 &priv->dev, slave);
2079 priv->mfunc.master.vf_oper[slave].smi_enabled[port] =
2081 vp_oper = &priv->mfunc.master.vf_oper[slave].vport[port];
2095 static void mlx4_master_do_cmd(struct mlx4_dev *dev, int slave, u8 cmd,
2105 slave_state[slave].comm_toggle ^= 1;
2106 reply = (u32) slave_state[slave].comm_toggle << 31;
2107 if (toggle != slave_state[slave].comm_toggle) {
2108 mlx4_warn(dev, "Incorrect toggle %d from slave %d. *** MASTER STATE COMPROMISED ***\n",
2109 toggle, slave);
2113 mlx4_warn(dev, "Received reset from slave:%d\n", slave);
2114 slave_state[slave].active = false;
2115 slave_state[slave].old_vlan_api = false;
2116 slave_state[slave].vst_qinq_supported = false;
2117 mlx4_master_deactivate_admin_state(priv, slave);
2119 slave_state[slave].event_eq[i].eqn = -1;
2120 slave_state[slave].event_eq[i].token = 0;
2123 if so return "retry" status to the slave*/
2124 if (MLX4_COMM_CMD_FLR == slave_state[slave].last_cmd)
2127 mlx4_dispatch_event(dev, MLX4_DEV_EVENT_SLAVE_SHUTDOWN, slave);
2134 /*command from slave in the middle of FLR*/
2136 MLX4_COMM_CMD_FLR == slave_state[slave].last_cmd) {
2137 mlx4_warn(dev, "slave:%d is Trying to run cmd(0x%x) in the middle of FLR\n",
2138 slave, cmd);
2144 if (slave_state[slave].last_cmd != MLX4_COMM_CMD_RESET)
2146 slave_state[slave].vhcr_dma = ((u64) param) << 48;
2147 priv->mfunc.master.slave_state[slave].cookie = 0;
2150 if (slave_state[slave].last_cmd != MLX4_COMM_CMD_VHCR0)
2152 slave_state[slave].vhcr_dma |= ((u64) param) << 32;
2155 if (slave_state[slave].last_cmd != MLX4_COMM_CMD_VHCR1)
2157 slave_state[slave].vhcr_dma |= ((u64) param) << 16;
2160 if (slave_state[slave].last_cmd != MLX4_COMM_CMD_VHCR2)
2162 slave_state[slave].vhcr_dma |= param;
2163 if (mlx4_master_activate_admin_state(priv, slave))
2165 slave_state[slave].active = true;
2166 mlx4_dispatch_event(dev, MLX4_DEV_EVENT_SLAVE_INIT, slave);
2169 if ((slave_state[slave].last_cmd != MLX4_COMM_CMD_VHCR_EN) &&
2170 (slave_state[slave].last_cmd != MLX4_COMM_CMD_VHCR_POST)) {
2171 mlx4_warn(dev, "slave:%d is out of sync, cmd=0x%x, last command=0x%x, reset is needed\n",
2172 slave, cmd, slave_state[slave].last_cmd);
2177 if (mlx4_master_process_vhcr(dev, slave, NULL)) {
2178 mlx4_err(dev, "Failed processing vhcr for slave:%d, resetting slave\n",
2179 slave);
2186 mlx4_warn(dev, "Bad comm cmd:%d from slave:%d\n", cmd, slave);
2190 if (!slave_state[slave].is_slave_going_down)
2191 slave_state[slave].last_cmd = cmd;
2196 mlx4_warn(dev, "Slave is going down aborting command(%d) executing from slave:%d\n",
2197 cmd, slave);
2201 &priv->mfunc.comm[slave].slave_read);
2206 /* cleanup any slave resources */
2208 mlx4_delete_all_resources_for_slave(dev, slave);
2211 mlx4_warn(dev, "Turn on internal error to force reset, slave=%d, cmd=0x%x\n",
2212 slave, cmd);
2213 /* Turn on internal error letting slave reset itself immeditaly,
2220 if (!slave_state[slave].is_slave_going_down)
2221 slave_state[slave].last_cmd = MLX4_COMM_CMD_RESET;
2223 /*with slave in the middle of flr, no need to clean resources again.*/
2225 memset(&slave_state[slave].event_eq, 0,
2228 &priv->mfunc.comm[slave].slave_read);
2247 int i, j, slave;
2260 slave = (i * 32) + j;
2262 &mfunc->comm[slave].slave_write));
2263 slt = swab32(readl(&mfunc->comm[slave].slave_read))
2267 if (master->slave_state[slave].comm_toggle
2269 pr_info("slave %d out of sync. read toggle %d, state toggle %d. Resynching.\n",
2270 slave, slt,
2271 master->slave_state[slave].comm_toggle);
2272 master->slave_state[slave].comm_toggle =
2275 mlx4_master_do_cmd(dev, slave,
2552 int slave;
2565 for (slave = 0; slave < dev->num_slaves; slave++) {
2566 slave_read = swab32(readl(&priv->mfunc.comm[slave].slave_read));
2569 &priv->mfunc.comm[slave].slave_read);
2739 int mlx4_get_vf_indx(struct mlx4_dev *dev, int slave)
2741 if (slave < 1 || slave > dev->persist->num_vfs) {
2743 "Bad slave number:%d (number of activated slaves: %lu)\n",
2744 slave, dev->num_slaves);
2747 return slave - 1;
2769 struct mlx4_active_ports mlx4_get_active_ports(struct mlx4_dev *dev, int slave)
2776 if (slave == 0) {
2781 vf = mlx4_get_vf_indx(dev, slave);
2786 min((int)dev->dev_vfs[mlx4_get_vf_indx(dev, slave)].n_ports,
2793 int mlx4_slave_convert_port(struct mlx4_dev *dev, int slave, int port)
2796 struct mlx4_active_ports actv_ports = mlx4_get_active_ports(dev, slave);
2810 int mlx4_phys_to_slave_port(struct mlx4_dev *dev, int slave, int port)
2812 struct mlx4_active_ports actv_ports = mlx4_get_active_ports(dev, slave);
2864 static int mlx4_slaves_closest_port(struct mlx4_dev *dev, int slave, int port)
2866 struct mlx4_active_ports actv_ports = mlx4_get_active_ports(dev, slave);
2880 static int mlx4_set_vport_qos(struct mlx4_priv *priv, int slave, int port,
2892 if (slave > port_qos->num_of_qos_vfs) {
2917 err = mlx4_SET_VPORT_QOS_set(dev, port, slave, vpp_qos);
2919 mlx4_info(dev, "Failed to set Vport %d QoS values\n", slave);
2981 int slave;
2989 slave = mlx4_get_slave_indx(dev, vf);
2990 if (slave < 0)
2993 port = mlx4_slaves_closest_port(dev, slave, port);
2994 s_info = &priv->mfunc.master.vf_admin[slave].vport[port];
3016 int slave;
3037 slave = mlx4_get_slave_indx(dev, vf);
3038 if (slave < 0)
3041 slave_state = &priv->mfunc.master.slave_state[slave];
3047 port = mlx4_slaves_closest_port(dev, slave, port);
3048 vf_admin = &priv->mfunc.master.vf_admin[slave].vport[port];
3049 vf_oper = &priv->mfunc.master.vf_oper[slave].vport[port];
3066 vf_admin->qos_vport = slave;
3073 mlx4_master_immediate_activate_vlan_qos(priv, slave, port))
3085 int slave;
3098 slave = mlx4_get_slave_indx(dev, vf);
3099 if (slave < 0)
3102 port = mlx4_slaves_closest_port(dev, slave, port);
3103 vf_admin = &priv->mfunc.master.vf_admin[slave].vport[port];
3105 err = mlx4_set_vport_qos(priv, slave, port, max_tx_rate);
3134 vf_admin->qos_vport = max_tx_rate ? slave : MLX4_VPP_DEFAULT_VPORT;
3136 if (priv->mfunc.master.slave_state[slave].active &&
3138 mlx4_master_immediate_activate_vlan_qos(priv, slave, port);
3148 bool mlx4_get_slave_default_vlan(struct mlx4_dev *dev, int port, int slave,
3155 port = mlx4_slaves_closest_port(dev, slave, port);
3156 vp_oper = &priv->mfunc.master.vf_oper[slave].vport[port];
3173 int slave;
3180 slave = mlx4_get_slave_indx(dev, vf);
3181 if (slave < 0)
3184 port = mlx4_slaves_closest_port(dev, slave, port);
3185 s_info = &priv->mfunc.master.vf_admin[slave].vport[port];
3203 int slave;
3208 slave = mlx4_get_slave_indx(dev, vf);
3209 if (slave < 0)
3212 s_info = &priv->mfunc.master.vf_admin[slave].vport[port];
3244 int slave;
3247 slave = mlx4_get_slave_indx(dev, vf);
3248 if (slave < 0)
3251 port = mlx4_slaves_closest_port(dev, slave, port);
3270 mlx4_warn(dev, "unknown value for link_state %02x on slave %d port %d\n",
3271 link_state, slave, port);
3274 s_info = &priv->mfunc.master.vf_admin[slave].vport[port];
3278 mlx4_gen_port_state_change_eqe(dev, slave, port, link_stat_event);
3280 if (mlx4_master_immediate_activate_vlan_qos(priv, slave, port))
3348 int slave;
3357 slave = mlx4_get_slave_indx(dev, vf_idx);
3358 if (slave < 0)
3361 port = mlx4_slaves_closest_port(dev, slave, port);
3362 err = mlx4_calc_vf_counters(dev, slave, port, &tmp_vf_stats);
3374 int mlx4_vf_smi_enabled(struct mlx4_dev *dev, int slave, int port)
3378 if (slave < 1 || slave >= dev->num_slaves ||
3382 return priv->mfunc.master.vf_oper[slave].smi_enabled[port] ==
3387 int mlx4_vf_get_enable_smi_admin(struct mlx4_dev *dev, int slave, int port)
3391 if (slave == mlx4_master_func_num(dev))
3394 if (slave < 1 || slave >= dev->num_slaves ||
3398 return priv->mfunc.master.vf_admin[slave].enable_smi[port] ==
3403 int mlx4_vf_set_enable_smi_admin(struct mlx4_dev *dev, int slave, int port,
3408 &priv->dev, slave);
3414 if (slave == mlx4_master_func_num(dev))
3417 if (slave < 1 || slave >= dev->num_slaves ||
3427 priv->mfunc.master.vf_admin[slave].enable_smi[port] = enabled;