diff --git a/amd_spi100.c b/amd_spi100.c
index c37ed07..e011ed5 100644
--- a/amd_spi100.c
+++ b/amd_spi100.c
@@ -101,11 +101,11 @@
 	return 0;
 }
 
-static int spi100_send_command(const struct flashctx *const flash,
+static int spi100_send_command(const struct spi_master *const mst,
 			       const unsigned int writecnt, const unsigned int readcnt,
 			       const unsigned char *const writearr, unsigned char *const readarr)
 {
-	const struct spi100 *const spi100 = flash->mst.spi->data;
+	const struct spi100 *const spi100 = mst->data;
 
 	int ret = spi100_check_readwritecnt(writecnt, readcnt);
 	if (ret)
diff --git a/bitbang_spi.c b/bitbang_spi.c
index 33ea050..eb6988f 100644
--- a/bitbang_spi.c
+++ b/bitbang_spi.c
@@ -89,11 +89,11 @@
 	}
 }
 
-static int bitbang_spi_send_command(const struct flashctx *flash,
+static int bitbang_spi_send_command(const struct spi_master *,
 				    unsigned int writecnt, unsigned int readcnt,
 				    const unsigned char *writearr,
 				    unsigned char *readarr);
-static int bitbang_spi_send_multicommand(const struct flashctx *, struct spi_command *);
+static int bitbang_spi_send_multicommand(const struct spi_master *, struct spi_command *);
 static int bitbang_spi_shutdown(void *data);
 
 static const struct spi_master spi_master_bitbang = {
@@ -245,13 +245,13 @@
 	}
 }
 
-static int bitbang_spi_send_command(const struct flashctx *flash,
+static int bitbang_spi_send_command(const struct spi_master *mst,
 				    unsigned int writecnt, unsigned int readcnt,
 				    const unsigned char *writearr,
 				    unsigned char *readarr)
 {
 	unsigned int i;
-	const struct bitbang_spi_master_data *data = flash->mst.spi->data;
+	const struct bitbang_spi_master_data *data = mst->data;
 	const struct bitbang_spi_master *master = data->mst;
 
 	/* FIXME: Run bitbang_spi_request_bus here or in programmer init?
@@ -275,9 +275,9 @@
 	return 0;
 }
 
-static int bitbang_spi_send_multicommand(const struct flashctx *flash, struct spi_command *cmds)
+static int bitbang_spi_send_multicommand(const struct spi_master *mst, struct spi_command *cmds)
 {
-	const struct bitbang_spi_master_data *const bbs = flash->mst.spi->data;
+	const struct bitbang_spi_master_data *const bbs = mst->data;
 	int ret = 0;
 
 	bitbang_spi_request_bus(bbs->mst, bbs->spi_data);
diff --git a/buspirate_spi.c b/buspirate_spi.c
index d12c100..9d2d3f5 100644
--- a/buspirate_spi.c
+++ b/buspirate_spi.c
@@ -131,9 +131,9 @@
 	return ret;
 }
 
-static int buspirate_spi_send_command_v1(const struct flashctx *flash, unsigned int writecnt, unsigned int readcnt,
+static int buspirate_spi_send_command_v1(const struct spi_master *, unsigned int writecnt, unsigned int readcnt,
 					 const unsigned char *writearr, unsigned char *readarr);
-static int buspirate_spi_send_command_v2(const struct flashctx *flash, unsigned int writecnt, unsigned int readcnt,
+static int buspirate_spi_send_command_v2(const struct spi_master *, unsigned int writecnt, unsigned int readcnt,
 					 const unsigned char *writearr, unsigned char *readarr);
 static int buspirate_spi_shutdown(void *data);
 
@@ -614,10 +614,11 @@
 	return ret;
 }
 
-static int buspirate_spi_send_command_v1(const struct flashctx *flash, unsigned int writecnt, unsigned int readcnt,
+static int buspirate_spi_send_command_v1(const struct spi_master *mst,
+					 unsigned int writecnt, unsigned int readcnt,
 					 const unsigned char *writearr, unsigned char *readarr)
 {
-	struct bp_spi_data *bp_data = flash->mst.spi->data;
+	struct bp_spi_data *bp_data = mst->data;
 	unsigned int i = 0;
 	int ret = 0;
 
@@ -670,10 +671,11 @@
 	return ret;
 }
 
-static int buspirate_spi_send_command_v2(const struct flashctx *flash, unsigned int writecnt, unsigned int readcnt,
+static int buspirate_spi_send_command_v2(const struct spi_master *mst,
+					 unsigned int writecnt, unsigned int readcnt,
 					 const unsigned char *writearr, unsigned char *readarr)
 {
-	struct bp_spi_data *bp_data = flash->mst.spi->data;
+	struct bp_spi_data *bp_data = mst->data;
 	int i = 0, ret = 0;
 
 	if (writecnt > 4096 || readcnt > 4096 || (readcnt + writecnt) > 4096)
diff --git a/ch341a_spi.c b/ch341a_spi.c
index 00c2cc7..b031caa 100644
--- a/ch341a_spi.c
+++ b/ch341a_spi.c
@@ -335,7 +335,9 @@
 	stored_delay_us += usecs;
 }
 
-static int ch341a_spi_spi_send_command(const struct flashctx *flash, unsigned int writecnt, unsigned int readcnt, const unsigned char *writearr, unsigned char *readarr)
+static int ch341a_spi_spi_send_command(const struct spi_master *mst,
+				       unsigned int writecnt, unsigned int readcnt,
+				       const unsigned char *writearr, unsigned char *readarr)
 {
 	if (handle == NULL)
 		return -1;
diff --git a/ch347_spi.c b/ch347_spi.c
index 7772fe0..cd334da 100644
--- a/ch347_spi.c
+++ b/ch347_spi.c
@@ -176,10 +176,10 @@
 	return 0;
 }
 
-static int ch347_spi_send_command(const struct flashctx *flash, unsigned int writecnt,
+static int ch347_spi_send_command(const struct spi_master *mst, unsigned int writecnt,
 		unsigned int readcnt, const unsigned char *writearr, unsigned char *readarr)
 {
-	struct ch347_spi_data *ch347_data = flash->mst.spi->data;
+	struct ch347_spi_data *ch347_data = mst->data;
 	int ret = 0;
 
 	ch347_cs_control(ch347_data, CH347_CS_ASSERT | CH347_CS_CHANGE, CH347_CS_IGNORE);
diff --git a/dediprog.c b/dediprog.c
index af9e449..c114f7b 100644
--- a/dediprog.c
+++ b/dediprog.c
@@ -841,21 +841,21 @@
 	return dediprog_spi_write_chunked(flash, buf, start, len, WRITE_MODE_2B_AAI);
 }
 
-static int dediprog_spi_send_command(const struct flashctx *flash,
+static int dediprog_spi_send_command(const struct spi_master *mst,
 				     unsigned int writecnt,
 				     unsigned int readcnt,
 				     const unsigned char *writearr,
 				     unsigned char *readarr)
 {
-	struct dediprog_data *const dp_data = flash->mst.spi->data;
+	struct dediprog_data *dp_data = mst->data;
 	int ret;
 
 	msg_pspew("%s, writecnt=%i, readcnt=%i\n", __func__, writecnt, readcnt);
-	if (writecnt > flash->mst.spi->max_data_write + 5) {
+	if (writecnt > mst->max_data_write + 5) {
 		msg_perr("Invalid writecnt=%i, aborting.\n", writecnt);
 		return 1;
 	}
-	if (readcnt > flash->mst.spi->max_data_read) {
+	if (readcnt > mst->max_data_read) {
 		msg_perr("Invalid readcnt=%i, aborting.\n", readcnt);
 		return 1;
 	}
diff --git a/digilent_spi.c b/digilent_spi.c
index ee4d497..9ca0329 100644
--- a/digilent_spi.c
+++ b/digilent_spi.c
@@ -257,7 +257,7 @@
 	return 0;
 }
 
-static int digilent_spi_send_command(const struct flashctx *flash, unsigned int writecnt, unsigned int readcnt,
+static int digilent_spi_send_command(const struct spi_master *mst, unsigned int writecnt, unsigned int readcnt,
 				     const unsigned char *writearr, unsigned char *readarr)
 {
 	int ret;
diff --git a/dirtyjtag_spi.c b/dirtyjtag_spi.c
index e648cfa..c3c768e 100644
--- a/dirtyjtag_spi.c
+++ b/dirtyjtag_spi.c
@@ -170,11 +170,11 @@
 	return dirtyjtag_send(context, tms_reset_buffer, sizeof(tms_reset_buffer));
 }
 
-static int dirtyjtag_djtag1_spi_send_command(const struct flashctx *flash,
+static int dirtyjtag_djtag1_spi_send_command(const struct spi_master *mst,
 					     unsigned int writecnt, unsigned int readcnt,
 					     const unsigned char *writearr, unsigned char *readarr)
 {
-	struct dirtyjtag_spi_data *context = flash->mst.spi->data;
+	struct dirtyjtag_spi_data *context = mst->data;
 	const size_t max_xfer_size = 30; // max transfer size in DJTAG1
 	size_t len = writecnt + readcnt;
 	size_t num_xfer = (len + max_xfer_size - 1 ) / max_xfer_size; // ceil(len/max_xfer_size)
@@ -220,11 +220,11 @@
 	return -1;
 }
 
-static int dirtyjtag_djtag2_spi_send_command(const struct flashctx *flash,
+static int dirtyjtag_djtag2_spi_send_command(const struct spi_master *mst,
 					     unsigned int writecnt, unsigned int readcnt,
 					     const unsigned char *writearr, unsigned char *readarr)
 {
-	struct dirtyjtag_spi_data *const context = flash->mst.spi->data;
+	struct dirtyjtag_spi_data *const context = mst->data;
 	const size_t max_xfer_size = 62; /* max transfer size in DJTAG2 */
 	uint8_t transfer_buffer[2 + max_xfer_size]; /* 1B command + 1B len + payload */
 	size_t i;
diff --git a/dummyflasher.c b/dummyflasher.c
index 948dc0b..a1e15b0 100644
--- a/dummyflasher.c
+++ b/dummyflasher.c
@@ -100,7 +100,7 @@
 
 
 
-static int dummy_spi_send_command(const struct flashctx *flash, unsigned int writecnt, unsigned int readcnt,
+static int dummy_spi_send_command(const struct spi_master *, unsigned int writecnt, unsigned int readcnt,
 				  const unsigned char *writearr, unsigned char *readarr);
 static int dummy_spi_write_256(struct flashctx *flash, const uint8_t *buf,
 			       unsigned int start, unsigned int len);
@@ -1143,13 +1143,12 @@
 	return 0;
 }
 
-static int dummy_spi_send_command(const struct flashctx *flash, unsigned int writecnt,
-				  unsigned int readcnt,
-				  const unsigned char *writearr,
-				  unsigned char *readarr)
+static int dummy_spi_send_command(const struct spi_master *mst,
+				  unsigned int writecnt, unsigned int readcnt,
+				  const unsigned char *writearr, unsigned char *readarr)
 {
 	unsigned int i;
-	struct emu_data *emu_data = flash->mst.spi->data;
+	struct emu_data *emu_data = mst->data;
 	if (!emu_data) {
 		msg_perr("No data in flash context!\n");
 		return 1;
diff --git a/ft2232_spi.c b/ft2232_spi.c
index a82153d..6c6d49b 100644
--- a/ft2232_spi.c
+++ b/ft2232_spi.c
@@ -214,9 +214,9 @@
 }
 
 /* Returns 0 upon success, a negative number upon errors. */
-static int ft2232_spi_send_multicommand(const struct flashctx *flash, struct spi_command *cmds)
+static int ft2232_spi_send_multicommand(const struct spi_master *mst, struct spi_command *cmds)
 {
-	struct ft2232_data *spi_data = flash->mst.spi->data;
+	struct ft2232_data *spi_data = mst->data;
 	struct ftdi_context *ftdic = &spi_data->ftdi_context;
 	static unsigned char buf[FTDI_HW_BUFFER_SIZE];
 	size_t i = 0;
diff --git a/ft4222_spi.c b/ft4222_spi.c
index 46fa698..9709154 100644
--- a/ft4222_spi.c
+++ b/ft4222_spi.c
@@ -484,11 +484,11 @@
 }
 
 static int ft4222_spi_send_command(
-		const struct flashctx *const flash,
+		const struct spi_master *const mst,
 		const unsigned int writecnt, const unsigned int readcnt,
 		const unsigned char *const writearr, unsigned char *const readarr)
 {
-	struct ft4222 *const ft4222 = flash->mst.spi->data;
+	struct ft4222 *const ft4222 = mst->data;
 	int ret, poll_ret;
 
 	ret = ft4222_spi_set_io_lines(ft4222, 1);
@@ -606,14 +606,14 @@
 	return ret ? ret : poll_ret;
 }
 
-static int ft4222_spi_send_multicommand(const struct flashctx *flash, struct spi_command *cmds)
+static int ft4222_spi_send_multicommand(const struct spi_master *mst, struct spi_command *cmds)
 {
-	struct ft4222 *const ft4222 = flash->mst.spi->data;
+	struct ft4222 *const ft4222 = mst->data;
 
 	for (; !spi_is_empty(cmds); ++cmds) {
 		int ret;
 		if (cmds->io_mode == SINGLE_IO_1_1_1) {
-			ret = ft4222_spi_send_command(flash, spi_write_len(cmds),
+			ret = ft4222_spi_send_command(mst, spi_write_len(cmds),
 					spi_read_len(cmds), cmds->writearr, cmds->readarr);
 		} else {
 			ret = ft4222_spi_send_multi_io(ft4222, cmds);
diff --git a/ichspi.c b/ichspi.c
index 0a32778..36e1dce 100644
--- a/ichspi.c
+++ b/ichspi.c
@@ -294,7 +294,7 @@
 static int find_preop(OPCODES *op, uint8_t preop);
 static int generate_opcodes(OPCODES * op);
 static int program_opcodes(OPCODES *op, int enable_undo);
-static int run_opcode(const struct flashctx *flash, OPCODE op, uint32_t offset,
+static int run_opcode(const struct spi_master *, OPCODE op, uint32_t offset,
 		      uint8_t datalength, uint8_t * data);
 
 /* for pairing opcodes with their required preop */
@@ -1013,11 +1013,11 @@
 	return 0;
 }
 
-static int run_opcode(const struct flashctx *flash, OPCODE op, uint32_t offset,
+static int run_opcode(const struct spi_master *spi, OPCODE op, uint32_t offset,
 		      uint8_t datalength, uint8_t * data)
 {
 	/* max_data_read == max_data_write for all Intel/VIA SPI masters */
-	uint8_t maxlength = flash->mst.spi->max_data_read;
+	uint8_t maxlength = spi->max_data_read;
 
 	if (ich_generation == CHIPSET_ICH_UNKNOWN) {
 		msg_perr("%s: unsupported chipset\n", __func__);
@@ -1037,10 +1037,9 @@
 		return ich9_run_opcode(op, offset, datalength, data);
 }
 
-static int ich_spi_send_command(const struct flashctx *flash, unsigned int writecnt,
-				unsigned int readcnt,
-				const unsigned char *writearr,
-				unsigned char *readarr)
+static int ich_spi_send_command(const struct spi_master *spi,
+				unsigned int writecnt, unsigned int readcnt,
+				const unsigned char *writearr, unsigned char *readarr)
 {
 	int result;
 	int opcode_index = -1;
@@ -1140,7 +1139,7 @@
 		}
 	}
 
-	result = run_opcode(flash, *opcode, addr, count, data);
+	result = run_opcode(spi, *opcode, addr, count, data);
 	if (result) {
 		msg_pdbg("Running OPCODE 0x%02x failed ", opcode->opcode);
 		if ((opcode->spi_type == SPI_OPCODE_TYPE_WRITE_WITH_ADDRESS) ||
@@ -1437,8 +1436,7 @@
 	return 0;
 }
 
-static int ich_spi_send_multicommand(const struct flashctx *flash,
-				     struct spi_command *cmds)
+static int ich_spi_send_multicommand(const struct spi_master *spi, struct spi_command *cmds)
 {
 	int ret = 0;
 	int i;
@@ -1489,7 +1487,7 @@
 			 * preoppos matched, this is a normal opcode.
 			 */
 		}
-		ret = ich_spi_send_command(flash, spi_write_len(cmds), spi_read_len(cmds),
+		ret = ich_spi_send_command(spi, spi_write_len(cmds), spi_read_len(cmds),
 					   cmds->writearr, cmds->readarr);
 		/* Reset the type of all opcodes to non-atomic. */
 		for (i = 0; i < 8; i++)
diff --git a/include/programmer.h b/include/programmer.h
index df5f51f..5cef491 100644
--- a/include/programmer.h
+++ b/include/programmer.h
@@ -311,9 +311,9 @@
 	uint32_t features;
 	unsigned int max_data_read; // (Ideally,) maximum data read size in one go (excluding opcode+address).
 	unsigned int max_data_write; // (Ideally,) maximum data write size in one go (excluding opcode+address).
-	int (*command)(const struct flashctx *flash, unsigned int writecnt, unsigned int readcnt,
+	int (*command)(const struct spi_master *, unsigned int writecnt, unsigned int readcnt,
 		   const unsigned char *writearr, unsigned char *readarr);
-	int (*multicommand)(const struct flashctx *flash, struct spi_command *cmds);
+	int (*multicommand)(const struct spi_master *, struct spi_command *cmds);
 
 	/* Optimized functions for this master */
 	int (*read)(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len);
@@ -324,9 +324,9 @@
 	void *data;
 };
 
-int default_spi_send_command(const struct flashctx *flash, unsigned int writecnt, unsigned int readcnt,
+int default_spi_send_command(const struct spi_master *, unsigned int writecnt, unsigned int readcnt,
 			     const unsigned char *writearr, unsigned char *readarr);
-int default_spi_send_multicommand(const struct flashctx *flash, struct spi_command *cmds);
+int default_spi_send_multicommand(const struct spi_master *, struct spi_command *cmds);
 int default_spi_read(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len);
 int default_spi_write_256(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len);
 int default_spi_write_aai(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len);
diff --git a/it87spi.c b/it87spi.c
index 70b1a8f..127270a 100644
--- a/it87spi.c
+++ b/it87spi.c
@@ -100,7 +100,7 @@
 	return;
 }
 
-static int it8716f_spi_send_command(const struct flashctx *flash,
+static int it8716f_spi_send_command(const struct spi_master *,
 				    unsigned int writecnt, unsigned int readcnt,
 				    const unsigned char *writearr,
 				    unsigned char *readarr);
@@ -274,7 +274,7 @@
  * commands with the address in inverse wire order. That's why the register
  * ordering in case 4 and 5 may seem strange.
  */
-static int it8716f_spi_send_command(const struct flashctx *flash,
+static int it8716f_spi_send_command(const struct spi_master *mst,
 				    unsigned int writecnt, unsigned int readcnt,
 				    const unsigned char *writearr,
 				    unsigned char *readarr)
diff --git a/jlink_spi.c b/jlink_spi.c
index 7534cbb..5ba40d5 100644
--- a/jlink_spi.c
+++ b/jlink_spi.c
@@ -104,12 +104,13 @@
 	return true;
 }
 
-static int jlink_spi_send_command(const struct flashctx *flash, unsigned int writecnt, unsigned int readcnt,
+static int jlink_spi_send_command(
+		const struct spi_master *mst, unsigned int writecnt, unsigned int readcnt,
 		const unsigned char *writearr, unsigned char *readarr)
 {
 	uint32_t length;
 	uint8_t *buffer;
-	struct jlink_spi_data *jlink_data = flash->mst.spi->data;
+	struct jlink_spi_data *jlink_data = mst->data;
 
 	length = writecnt + readcnt;
 
diff --git a/linux_spi.c b/linux_spi.c
index bf8d7f2..dda3808 100644
--- a/linux_spi.c
+++ b/linux_spi.c
@@ -50,10 +50,9 @@
 };
 
 static int linux_spi_shutdown(void *data);
-static int linux_spi_send_command(const struct flashctx *flash, unsigned int writecnt,
-				  unsigned int readcnt,
-				  const unsigned char *txbuf,
-				  unsigned char *rxbuf);
+static int linux_spi_send_command(
+		const struct spi_master *, unsigned int writecnt, unsigned int readcnt,
+		const unsigned char *txbuf, unsigned char *rxbuf);
 
 static const struct spi_master spi_master_linux = {
 	.features	= SPI_MASTER_4BA,
@@ -203,12 +202,11 @@
 	return 0;
 }
 
-static int linux_spi_send_command(const struct flashctx *flash, unsigned int writecnt,
-				  unsigned int readcnt,
-				  const unsigned char *txbuf,
-				  unsigned char *rxbuf)
+static int linux_spi_send_command(
+		const struct spi_master *mst, unsigned int writecnt, unsigned int readcnt,
+		const unsigned char *txbuf, unsigned char *rxbuf)
 {
-	struct linux_spi_data *spi_data = flash->mst.spi->data;
+	struct linux_spi_data *spi_data = mst->data;
 	int iocontrol_code;
 	struct spi_ioc_transfer msg[2] = {
 		{
diff --git a/mstarddc_spi.c b/mstarddc_spi.c
index b9ee23f..c55d743 100644
--- a/mstarddc_spi.c
+++ b/mstarddc_spi.c
@@ -149,11 +149,9 @@
 }
 
 /* Returns 0 upon success, a negative number upon errors. */
-static int mstarddc_spi_send_command(const struct flashctx *flash,
-				     unsigned int writecnt,
-				     unsigned int readcnt,
-				     const unsigned char *writearr,
-				     unsigned char *readarr)
+static int mstarddc_spi_send_command(
+		const struct spi_master *mst, unsigned int writecnt, unsigned int readcnt,
+		const unsigned char *writearr, unsigned char *readarr)
 {
 	int ret = 0;
 	uint8_t *cmd = malloc((writecnt + 1) * sizeof(uint8_t));
diff --git a/ni845x_spi.c b/ni845x_spi.c
index 177c799..21d39a8 100644
--- a/ni845x_spi.c
+++ b/ni845x_spi.c
@@ -567,7 +567,7 @@
 	return 0;
 }
 
-static int ni845x_spi_transmit(const struct flashctx *flash,
+static int ni845x_spi_transmit(const struct spi_master *mst,
 			       unsigned int write_cnt,
 			       unsigned int read_cnt,
 			       const unsigned char *write_arr,
diff --git a/pickit2_spi.c b/pickit2_spi.c
index 9a0691e..43126cc 100644
--- a/pickit2_spi.c
+++ b/pickit2_spi.c
@@ -198,11 +198,11 @@
 	return 0;
 }
 
-static int pickit2_spi_send_command(const struct flashctx *flash, unsigned int writecnt, unsigned int readcnt,
-				     const unsigned char *writearr, unsigned char *readarr)
+static int pickit2_spi_send_command(const struct spi_master *mst, unsigned int writecnt, unsigned int readcnt,
+				    const unsigned char *writearr, unsigned char *readarr)
 {
 	const unsigned int total_packetsize = writecnt + readcnt + 20;
-	struct pickit2_spi_data *pickit2_data = flash->mst.spi->data;
+	struct pickit2_spi_data *pickit2_data = mst->data;
 
 	/* Maximum number of bytes per transaction (including command overhead) is 64. Lets play it safe
 	 * and always assume the worst case scenario of 20 bytes command overhead.
diff --git a/sb600spi.c b/sb600spi.c
index 37da989..0a8bc31 100644
--- a/sb600spi.c
+++ b/sb600spi.c
@@ -56,9 +56,9 @@
 #define FIFO_SIZE_OLD		8
 #define FIFO_SIZE_YANGTZE	71
 
-static int sb600_spi_send_command(const struct flashctx *flash, unsigned int writecnt, unsigned int readcnt,
+static int sb600_spi_send_command(const struct spi_master *, unsigned int writecnt, unsigned int readcnt,
 				  const unsigned char *writearr, unsigned char *readarr);
-static int spi100_spi_send_command(const struct flashctx *flash, unsigned int writecnt, unsigned int readcnt,
+static int spi100_spi_send_command(const struct spi_master *, unsigned int writecnt, unsigned int readcnt,
 				  const unsigned char *writearr, unsigned char *readarr);
 
 static struct spi_master spi_master_sb600 = {
@@ -191,16 +191,16 @@
 }
 
 /* Check the number of bytes to be transmitted and extract opcode. */
-static int check_readwritecnt(const struct flashctx *flash, unsigned int writecnt, unsigned int readcnt)
+static int check_readwritecnt(const struct spi_master *spi, unsigned int writecnt, unsigned int readcnt)
 {
-	unsigned int maxwritecnt = flash->mst.spi->max_data_write + 3;
+	unsigned int maxwritecnt = spi->max_data_write + 3;
 	if (writecnt > maxwritecnt) {
 		msg_pinfo("%s: SPI controller can not send %d bytes, it is limited to %d bytes\n",
 			  __func__, writecnt, maxwritecnt);
 		return SPI_INVALID_LENGTH;
 	}
 
-	unsigned int maxreadcnt = flash->mst.spi->max_data_read;
+	unsigned int maxreadcnt = spi->max_data_read;
 	if (readcnt > maxreadcnt) {
 		msg_pinfo("%s: SPI controller can not receive %d bytes, it is limited to %d bytes\n",
 			  __func__, readcnt, maxreadcnt);
@@ -218,10 +218,8 @@
 	msg_pspew("done\n");
 }
 
-static int sb600_spi_send_command(const struct flashctx *flash, unsigned int writecnt,
-				  unsigned int readcnt,
-				  const unsigned char *writearr,
-				  unsigned char *readarr)
+static int sb600_spi_send_command(const struct spi_master *spi, unsigned int writecnt, unsigned int readcnt,
+				  const unsigned char *writearr, unsigned char *readarr)
 {
 	/* First byte is cmd which can not be sent through the FIFO. */
 	unsigned char cmd = *writearr++;
@@ -229,7 +227,7 @@
 	msg_pspew("%s, cmd=0x%02x, writecnt=%d, readcnt=%d\n", __func__, cmd, writecnt, readcnt);
 	mmio_writeb(cmd, sb600_spibar + 0);
 
-	int ret = check_readwritecnt(flash, writecnt, readcnt);
+	int ret = check_readwritecnt(spi, writecnt, readcnt);
 	if (ret != 0)
 		return ret;
 
@@ -304,10 +302,8 @@
 	return 0;
 }
 
-static int spi100_spi_send_command(const struct flashctx *flash, unsigned int writecnt,
-				  unsigned int readcnt,
-				  const unsigned char *writearr,
-				  unsigned char *readarr)
+static int spi100_spi_send_command(const struct spi_master *spi, unsigned int writecnt, unsigned int readcnt,
+				   const unsigned char *writearr, unsigned char *readarr)
 {
 	/* First byte is cmd which can not be sent through the buffer. */
 	unsigned char cmd = *writearr++;
@@ -315,7 +311,7 @@
 	msg_pspew("%s, cmd=0x%02x, writecnt=%d, readcnt=%d\n", __func__, cmd, writecnt, readcnt);
 	mmio_writeb(cmd, sb600_spibar + 0);
 
-	int ret = check_readwritecnt(flash, writecnt, readcnt);
+	int ret = check_readwritecnt(spi, writecnt, readcnt);
 	if (ret != 0)
 		return ret;
 
diff --git a/serprog.c b/serprog.c
index 6cf87f0..257562a 100644
--- a/serprog.c
+++ b/serprog.c
@@ -356,7 +356,7 @@
 	return 0;
 }
 
-static int serprog_spi_send_command(const struct flashctx *flash,
+static int serprog_spi_send_command(const struct spi_master *,
 				    unsigned int writecnt, unsigned int readcnt,
 				    const unsigned char *writearr,
 				    unsigned char *readarr);
@@ -989,7 +989,7 @@
 	sp_prev_was_write = 0;
 }
 
-static int serprog_spi_send_command(const struct flashctx *flash,
+static int serprog_spi_send_command(const struct spi_master *mst,
 				    unsigned int writecnt, unsigned int readcnt,
 				    const unsigned char *writearr,
 				    unsigned char *readarr)
diff --git a/spi.c b/spi.c
index 42a6a96..9f8fb89 100644
--- a/spi.c
+++ b/spi.c
@@ -28,7 +28,7 @@
 #include "spi.h"
 
 static int spi_send_wrapped_command(
-		const struct flashctx *flash, enum io_mode io_mode,
+		const struct spi_master *mst, enum io_mode io_mode,
 		unsigned int writecnt, unsigned int readcnt,
 		const unsigned char *writearr, unsigned char *readarr)
 {
@@ -44,7 +44,7 @@
 		NULL_SPI_CMD
 	};
 
-	return spi_send_multicommand(flash, cmd);
+	return mst->multicommand(mst, cmd);
 }
 
 int spi_send_command(const struct flashctx *flash, unsigned int writecnt,
@@ -52,34 +52,31 @@
 		     unsigned char *readarr)
 {
 	if (spi_current_io_mode(flash) != SINGLE_IO_1_1_1)
-		return spi_send_wrapped_command(flash, spi_current_io_mode(flash),
+		return spi_send_wrapped_command(flash->mst.spi, spi_current_io_mode(flash),
 						writecnt, readcnt, writearr, readarr);
 
-	return flash->mst.spi->command(flash, writecnt, readcnt, writearr,
-				       readarr);
+	return flash->mst.spi->command(flash->mst.spi, writecnt, readcnt, writearr, readarr);
 }
 
 int spi_send_multicommand(const struct flashctx *flash, struct spi_command *cmds)
 {
-	return flash->mst.spi->multicommand(flash, cmds);
+	return flash->mst.spi->multicommand(flash->mst.spi, cmds);
 }
 
-int default_spi_send_command(const struct flashctx *flash, unsigned int writecnt,
-			     unsigned int readcnt,
-			     const unsigned char *writearr,
-			     unsigned char *readarr)
+int default_spi_send_command(const struct spi_master *mst,
+			     unsigned int writecnt, unsigned int readcnt,
+			     const unsigned char *writearr, unsigned char *readarr)
 {
-	return spi_send_wrapped_command(flash, SINGLE_IO_1_1_1, writecnt, readcnt, writearr, readarr);
+	return spi_send_wrapped_command(mst, SINGLE_IO_1_1_1, writecnt, readcnt, writearr, readarr);
 }
 
-int default_spi_send_multicommand(const struct flashctx *flash,
-				  struct spi_command *cmds)
+int default_spi_send_multicommand(const struct spi_master *mst, struct spi_command *cmds)
 {
 	int result = 0;
 	for (; !spi_is_empty(cmds) && !result; cmds++) {
 		if (cmds->io_mode != SINGLE_IO_1_1_1)
 			return SPI_FLASHPROG_BUG;
-		result = spi_send_command(flash,
+		result = mst->command(mst,
 				spi_write_len(cmds), spi_read_len(cmds),
 				cmds->writearr, cmds->readarr);
 	}
diff --git a/stlinkv3_spi.c b/stlinkv3_spi.c
index b1c7457..50910ae 100644
--- a/stlinkv3_spi.c
+++ b/stlinkv3_spi.c
@@ -317,7 +317,7 @@
 	return 0;
 }
 
-static int stlinkv3_spi_transmit(const struct flashctx *flash,
+static int stlinkv3_spi_transmit(const struct spi_master *mst,
 				 unsigned int write_cnt,
 				 unsigned int read_cnt,
 				 const unsigned char *write_arr,
diff --git a/usbblaster_spi.c b/usbblaster_spi.c
index 5464c11..a003d5e 100644
--- a/usbblaster_spi.c
+++ b/usbblaster_spi.c
@@ -174,7 +174,8 @@
 }
 
 /* Returns 0 upon success, a negative number upon errors. */
-static int usbblaster_spi_send_command(const struct flashctx *flash, unsigned int writecnt, unsigned int readcnt,
+static int usbblaster_spi_send_command(const struct spi_master *mst,
+				       unsigned int writecnt, unsigned int readcnt,
 				       const unsigned char *writearr, unsigned char *readarr)
 {
 	uint8_t cmd;
diff --git a/wbsio_spi.c b/wbsio_spi.c
index 2b36d16..a37116b 100644
--- a/wbsio_spi.c
+++ b/wbsio_spi.c
@@ -59,10 +59,9 @@
 	return flashport;
 }
 
-static int wbsio_spi_send_command(const struct flashctx *flash, unsigned int writecnt,
-				  unsigned int readcnt,
-				  const unsigned char *writearr,
-				  unsigned char *readarr);
+static int wbsio_spi_send_command(const struct spi_master *,
+				  unsigned int writecnt, unsigned int readcnt,
+				  const unsigned char *writearr, unsigned char *readarr);
 static int wbsio_spi_read(struct flashctx *flash, uint8_t *buf,
 			  unsigned int start, unsigned int len);
 
@@ -117,10 +116,9 @@
  * Would one more byte of RAM in the chip (to get all 24 bits) really make
  * such a big difference?
  */
-static int wbsio_spi_send_command(const struct flashctx *flash, unsigned int writecnt,
-				  unsigned int readcnt,
-				  const unsigned char *writearr,
-				  unsigned char *readarr)
+static int wbsio_spi_send_command(const struct spi_master *mst,
+				  unsigned int writecnt, unsigned int readcnt,
+				  const unsigned char *writearr, unsigned char *readarr)
 {
 	unsigned int i;
 	uint8_t mode = 0;
