#include "cmdif_priv.h"
#include "mt25218.h"
-/*
- * cmd_sys_dis
- */
-static int cmd_sys_dis(void)
-{
- return 0;
-}
-
/*
* cmd_write_mgm
*/
return rc;
}
+
+/*
+ * cmd_unmap_icm_aux
+ */
+static int cmd_unmap_icm_aux(void)
+{
+ int rc;
+ command_fields_t cmd_desc;
+
+ memset(&cmd_desc, 0, sizeof cmd_desc);
+
+ cmd_desc.opcode = MEMFREE_CMD_UNMAP_ICM_AUX;
+
+ rc = cmd_invoke(&cmd_desc);
+
+ return rc;
+}
+
/*
* cmd_map_icm
*/
return rc;
}
+
+
+/*
+ * cmd_unmap_icm
+ */
+static int cmd_unmap_icm(struct map_icm_st *map_icm_p)
+{
+ int rc;
+ command_fields_t cmd_desc;
+ __u32 iprm[2];
+
+ memset(&cmd_desc, 0, sizeof cmd_desc);
+
+ cmd_desc.opcode = MEMFREE_CMD_UNMAP_ICM;
+ iprm[0] = map_icm_p->vpm_arr[0].va_h;
+ iprm[1] = map_icm_p->vpm_arr[0].va_l;
+ cmd_desc.in_param = iprm;
+ cmd_desc.in_trans = TRANS_IMMEDIATE;
+ cmd_desc.input_modifier = 1 << map_icm_p->vpm_arr[0].log2_size;
+
+ rc = cmd_invoke(&cmd_desc);
+
+ return rc;
+}
+
/*
* cmd_query_dev_lim
*/
ret = 1;
}
- if (!fw_fatal) {
- rc = cmd_sys_dis();
- if (rc) {
- eprintf("");
- ret = 1;
- }
+ rc = unset_hca();
+ if (rc) {
+ eprintf("");
+ ret = 1;
}
return ret;
return ret;
}
+
+static int unset_hca(void)
+{
+ int rc = 0;
+
+ if (!fw_fatal) {
+ rc = cmd_sys_dis();
+ if (rc)
+ eprintf("");
+ }
+
+ return rc;
+}
+
static void *get_inprm_buf(void)
{
return dev_buffers_p->inprm_buf;
static struct device_buffers_st *dev_buffers_p;
static struct device_ib_data_st dev_ib_data;
+
+
+struct map_icm_st icm_map_obj;
+
static int gw_write_cr(__u32 addr, __u32 data)
{
writel(htonl(data), memfree_pci_dev.cr_space + addr);
eprintf("");
goto undo_map_fa;
}
+ icm_map_obj = map_obj;
+
phys_mem.offset += (1 << (map_obj.vpm_arr[0].log2_size + 12));
init_hca.log_max_uars = log_max_uars;
return ret;
}
+
+static int unset_hca(void)
+{
+ int rc, ret = 0;
+
+ rc = cmd_unmap_icm(&icm_map_obj);
+ if (rc)
+ eprintf("");
+ ret |= rc;
+
+
+ rc = cmd_unmap_icm_aux();
+ if (rc)
+ eprintf("");
+ ret |= rc;
+
+ rc = cmd_unmap_fa();
+ if (rc)
+ eprintf("");
+ ret |= rc;
+
+ return ret;
+}
+
static void *get_inprm_buf(void)
{
return dev_buffers_p->inprm_buf;
#define MEMFREE_CMD_RUN_FW 0xff6
#define MEMFREE_CMD_SET_ICM_SIZE 0xffd
#define MEMFREE_CMD_MAP_ICM_AUX 0xffc
+#define MEMFREE_CMD_UNMAP_ICM_AUX 0xffb
#define MEMFREE_CMD_MAP_ICM 0xffa
+#define MEMFREE_CMD_UNMAP_ICM 0xff9
#define MEMFREE_CMD_QUERY_DEV_LIM 0x003
/*