+static int mips32_configure_ibs(struct target *target)
+{
+ struct mips32_common *mips32 = target_to_mips32(target);
+ struct mips_ejtag *ejtag_info = &mips32->ejtag_info;
+ int retval, i;
+ uint32_t bpinfo;
+
+ /* get number of inst breakpoints */
+ retval = target_read_u32(target, ejtag_info->ejtag_ibs_addr, &bpinfo);
+ if (retval != ERROR_OK)
+ return retval;
+
+ mips32->num_inst_bpoints = (bpinfo >> 24) & 0x0F;
+ mips32->num_inst_bpoints_avail = mips32->num_inst_bpoints;
+ mips32->inst_break_list = calloc(mips32->num_inst_bpoints,
+ sizeof(struct mips32_comparator));
+
+ for (i = 0; i < mips32->num_inst_bpoints; i++)
+ mips32->inst_break_list[i].reg_address =
+ ejtag_info->ejtag_iba0_addr +
+ (ejtag_info->ejtag_iba_step_size * i);
+
+ /* clear IBIS reg */
+ retval = target_write_u32(target, ejtag_info->ejtag_ibs_addr, 0);
+ return retval;
+}
+
+static int mips32_configure_dbs(struct target *target)
+{
+ struct mips32_common *mips32 = target_to_mips32(target);
+ struct mips_ejtag *ejtag_info = &mips32->ejtag_info;
+ int retval, i;
+ uint32_t bpinfo;
+
+ /* get number of data breakpoints */
+ retval = target_read_u32(target, ejtag_info->ejtag_dbs_addr, &bpinfo);
+ if (retval != ERROR_OK)
+ return retval;
+
+ mips32->num_data_bpoints = (bpinfo >> 24) & 0x0F;
+ mips32->num_data_bpoints_avail = mips32->num_data_bpoints;
+ mips32->data_break_list = calloc(mips32->num_data_bpoints,
+ sizeof(struct mips32_comparator));
+
+ for (i = 0; i < mips32->num_data_bpoints; i++)
+ mips32->data_break_list[i].reg_address =
+ ejtag_info->ejtag_dba0_addr +
+ (ejtag_info->ejtag_dba_step_size * i);
+
+ /* clear DBIS reg */
+ retval = target_write_u32(target, ejtag_info->ejtag_dbs_addr, 0);
+ return retval;
+}
+