diff --git a/82802ab.c b/82802ab.c
index 53930ee..dc6ffbe 100644
--- a/82802ab.c
+++ b/82802ab.c
@@ -30,6 +30,46 @@
 #include "82802ab.h"
 #include "debug.h"
 
+void toggle_ready_82802ab(volatile uint8_t *dst)
+{
+	unsigned int i = 0;
+	uint8_t tmp1, tmp2;
+
+	tmp1 = *dst & 0x40;
+
+	while (i++ < 0xFFFFFF) {
+		tmp2 = *dst & 0x40;
+		if (tmp1 == tmp2) {
+			break;
+		}
+		tmp1 = tmp2;
+	}
+}
+
+void data_polling_82802ab(volatile uint8_t *dst, uint8_t data)
+{
+	unsigned int i = 0;
+	uint8_t tmp;
+
+	data &= 0x80;
+
+	while (i++ < 0xFFFFFF) {
+		tmp = *dst & 0x80;
+		if (tmp == data) {
+			break;
+		}
+	}
+}
+
+void protect_82802ab(volatile uint8_t *bios)
+{
+	*(volatile uint8_t *)(bios + 0x5555) = 0xAA;
+	*(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
+	*(volatile uint8_t *)(bios + 0x5555) = 0xA0;
+
+	usleep(200);
+}
+
 // I need that Berkeley bit-map printer
 void print_82802ab_status(uint8_t status)
 {
diff --git a/82802ab.h b/82802ab.h
index f71f180..cc7eb50 100644
--- a/82802ab.h
+++ b/82802ab.h
@@ -5,45 +5,4 @@
 extern int erase_82802ab(struct flashchip *flash);
 extern int write_82802ab(struct flashchip *flash, uint8_t *buf);
 
-extern __inline__ void toggle_ready_82802ab(volatile uint8_t *dst)
-{
-	unsigned int i = 0;
-	uint8_t tmp1, tmp2;
-
-	tmp1 = *dst & 0x40;
-
-	while (i++ < 0xFFFFFF) {
-		tmp2 = *dst & 0x40;
-		if (tmp1 == tmp2) {
-			break;
-		}
-		tmp1 = tmp2;
-	}
-}
-
-extern __inline__ void data_polling_82802ab(volatile uint8_t *dst,
-					    uint8_t data)
-{
-	unsigned int i = 0;
-	uint8_t tmp;
-
-	data &= 0x80;
-
-	while (i++ < 0xFFFFFF) {
-		tmp = *dst & 0x80;
-		if (tmp == data) {
-			break;
-		}
-	}
-}
-
-extern __inline__ void protect_82802ab(volatile uint8_t *bios)
-{
-	*(volatile uint8_t *)(bios + 0x5555) = 0xAA;
-	*(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
-	*(volatile uint8_t *)(bios + 0x5555) = 0xA0;
-
-	usleep(200);
-}
-
 #endif				/* !__82802AB_H__ */
diff --git a/jedec.c b/jedec.c
index c4afadf..0c34e17 100644
--- a/jedec.c
+++ b/jedec.c
@@ -33,6 +33,58 @@
 
 #define MAX_REFLASH_TRIES 0x10
 
+void toggle_ready_jedec(volatile uint8_t *dst)
+{
+	unsigned int i = 0;
+	uint8_t tmp1, tmp2;
+
+	tmp1 = *dst & 0x40;
+
+	while (i++ < 0xFFFFFFF) {
+		tmp2 = *dst & 0x40;
+		if (tmp1 == tmp2) {
+			break;
+		}
+		tmp1 = tmp2;
+	}
+}
+
+void data_polling_jedec(volatile uint8_t *dst, uint8_t data)
+{
+	unsigned int i = 0;
+	uint8_t tmp;
+
+	data &= 0x80;
+
+	while (i++ < 0xFFFFFFF) {
+		tmp = *dst & 0x80;
+		if (tmp == data) {
+			break;
+		}
+	}
+}
+
+void unprotect_jedec(volatile uint8_t *bios)
+{
+	*(volatile uint8_t *)(bios + 0x5555) = 0xAA;
+	*(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
+	*(volatile uint8_t *)(bios + 0x5555) = 0x80;
+	*(volatile uint8_t *)(bios + 0x5555) = 0xAA;
+	*(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
+	*(volatile uint8_t *)(bios + 0x5555) = 0x20;
+
+	usleep(200);
+}
+
+void protect_jedec(volatile uint8_t *bios)
+{
+	*(volatile uint8_t *)(bios + 0x5555) = 0xAA;
+	*(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
+	*(volatile uint8_t *)(bios + 0x5555) = 0xA0;
+
+	usleep(200);
+}
+
 int probe_jedec(struct flashchip *flash)
 {
 	volatile uint8_t *bios = flash->virtual_memory;
diff --git a/jedec.h b/jedec.h
index c5c5c64..53135a5 100644
--- a/jedec.h
+++ b/jedec.h
@@ -1,8 +1,12 @@
 #ifndef __JEDEC_H__
 #define __JEDEC_H__ 1
+
+extern void toggle_ready_jedec(volatile uint8_t *dst);
+extern void data_polling_jedec(volatile uint8_t *dst, uint8_t data);
+extern void unprotect_jedec(volatile uint8_t *bios);
+extern void protect_jedec(volatile uint8_t *bios);
 int write_byte_program_jedec(volatile uint8_t *bios, uint8_t *src,
 			     volatile uint8_t *dst);
-
 extern int probe_jedec(struct flashchip *flash);
 extern int erase_chip_jedec(struct flashchip *flash);
 extern int write_jedec(struct flashchip *flash, uint8_t *buf);
@@ -11,56 +15,4 @@
 extern int write_sector_jedec(volatile uint8_t *bios, uint8_t *src,
 			      volatile uint8_t *dst, unsigned int page_size);
 
-extern __inline__ void toggle_ready_jedec(volatile uint8_t *dst)
-{
-	unsigned int i = 0;
-	uint8_t tmp1, tmp2;
-
-	tmp1 = *dst & 0x40;
-
-	while (i++ < 0xFFFFFFF) {
-		tmp2 = *dst & 0x40;
-		if (tmp1 == tmp2) {
-			break;
-		}
-		tmp1 = tmp2;
-	}
-}
-
-extern __inline__ void data_polling_jedec(volatile uint8_t *dst, uint8_t data)
-{
-	unsigned int i = 0;
-	uint8_t tmp;
-
-	data &= 0x80;
-
-	while (i++ < 0xFFFFFFF) {
-		tmp = *dst & 0x80;
-		if (tmp == data) {
-			break;
-		}
-	}
-}
-
-extern __inline__ void unprotect_jedec(volatile uint8_t *bios)
-{
-	*(volatile uint8_t *)(bios + 0x5555) = 0xAA;
-	*(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
-	*(volatile uint8_t *)(bios + 0x5555) = 0x80;
-	*(volatile uint8_t *)(bios + 0x5555) = 0xAA;
-	*(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
-	*(volatile uint8_t *)(bios + 0x5555) = 0x20;
-
-	usleep(200);
-}
-
-extern __inline__ void protect_jedec(volatile uint8_t *bios)
-{
-	*(volatile uint8_t *)(bios + 0x5555) = 0xAA;
-	*(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
-	*(volatile uint8_t *)(bios + 0x5555) = 0xA0;
-
-	usleep(200);
-}
-
 #endif				/* !__JEDEC_H__ */
diff --git a/m29f400bt.c b/m29f400bt.c
index 86f9f96..809f33c 100644
--- a/m29f400bt.c
+++ b/m29f400bt.c
@@ -27,6 +27,69 @@
 #include "m29f400bt.h"
 #include "debug.h"
 
+void toggle_ready_m29f400bt(volatile uint8_t *dst)
+{
+	unsigned int i = 0;
+	uint8_t tmp1, tmp2;
+
+	tmp1 = *dst & 0x40;
+
+	while (i++ < 0xFFFFFF) {
+		tmp2 = *dst & 0x40;
+		if (tmp1 == tmp2) {
+			break;
+		}
+		tmp1 = tmp2;
+	}
+}
+
+void data_polling_m29f400bt(volatile uint8_t *dst, uint8_t data)
+{
+	unsigned int i = 0;
+	uint8_t tmp;
+
+	data &= 0x80;
+
+	while (i++ < 0xFFFFFF) {
+		tmp = *dst & 0x80;
+		if (tmp == data) {
+			break;
+		}
+	}
+}
+
+void protect_m29f400bt(volatile uint8_t *bios)
+{
+	*(volatile uint8_t *)(bios + 0xAAA) = 0xAA;
+	*(volatile uint8_t *)(bios + 0x555) = 0x55;
+	*(volatile uint8_t *)(bios + 0xAAA) = 0xA0;
+
+	usleep(200);
+}
+
+void write_page_m29f400bt(volatile uint8_t *bios, uint8_t *src,
+			  volatile uint8_t *dst, int page_size)
+{
+	int i;
+
+	for (i = 0; i < page_size; i++) {
+		*(volatile uint8_t *)(bios + 0xAAA) = 0xAA;
+		*(volatile uint8_t *)(bios + 0x555) = 0x55;
+		*(volatile uint8_t *)(bios + 0xAAA) = 0xA0;
+
+		/* transfer data from source to destination */
+		*dst = *src;
+		//*(volatile char *) (bios) = 0xF0;
+		//usleep(5);
+		toggle_ready_m29f400bt(dst);
+		printf
+		    ("Value in the flash at address %p = %#x, want %#x\n",
+		     (uint8_t *) (dst - bios), *dst, *src);
+		dst++;
+		src++;
+	}
+}
+
 int probe_m29f400bt(struct flashchip *flash)
 {
 	volatile uint8_t *bios = flash->virtual_memory;
diff --git a/m29f400bt.h b/m29f400bt.h
index 965f731..04589bb 100644
--- a/m29f400bt.h
+++ b/m29f400bt.h
@@ -10,71 +10,10 @@
 extern int write_m29f400bt(struct flashchip *flash, uint8_t *buf);
 extern int write_linuxbios_m29f400bt(struct flashchip *flash, uint8_t *buf);
 
-extern __inline__ void toggle_ready_m29f400bt(volatile uint8_t *dst)
-{
-	unsigned int i = 0;
-	uint8_t tmp1, tmp2;
-
-	tmp1 = *dst & 0x40;
-
-	while (i++ < 0xFFFFFF) {
-		tmp2 = *dst & 0x40;
-		if (tmp1 == tmp2) {
-			break;
-		}
-		tmp1 = tmp2;
-	}
-}
-
-extern __inline__ void data_polling_m29f400bt(volatile uint8_t *dst,
-					      uint8_t data)
-{
-	unsigned int i = 0;
-	uint8_t tmp;
-
-	data &= 0x80;
-
-	while (i++ < 0xFFFFFF) {
-		tmp = *dst & 0x80;
-		if (tmp == data) {
-			break;
-		}
-	}
-}
-
-extern __inline__ void protect_m29f400bt(volatile uint8_t *bios)
-{
-	*(volatile uint8_t *)(bios + 0xAAA) = 0xAA;
-	*(volatile uint8_t *)(bios + 0x555) = 0x55;
-	*(volatile uint8_t *)(bios + 0xAAA) = 0xA0;
-
-	usleep(200);
-}
-
-extern __inline__ void write_page_m29f400bt(volatile uint8_t *bios,
-					    uint8_t *src,
-					    volatile uint8_t *dst,
-					    int page_size)
-{
-	int i;
-
-	for (i = 0; i < page_size; i++) {
-		*(volatile uint8_t *)(bios + 0xAAA) = 0xAA;
-		*(volatile uint8_t *)(bios + 0x555) = 0x55;
-		*(volatile uint8_t *)(bios + 0xAAA) = 0xA0;
-
-		/* transfer data from source to destination */
-		*dst = *src;
-		//*(volatile char *) (bios) = 0xF0;
-		//usleep(5);
-		toggle_ready_m29f400bt(dst);
-		printf
-		    ("Value in the flash at address %p = %#x, want %#x\n",
-		     (uint8_t *) (dst - bios), *dst, *src);
-		dst++;
-		src++;
-	}
-
-}
+extern void toggle_ready_m29f400bt(volatile uint8_t *dst);
+extern void data_polling_m29f400bt(volatile uint8_t *dst, uint8_t data);
+extern void protect_m29f400bt(volatile uint8_t *bios);
+extern void write_page_m29f400bt(volatile uint8_t *bios, uint8_t *src,
+				 volatile uint8_t *dst, int page_size);
 
 #endif				/* !__M29F400BT_H__ */
diff --git a/sharplhf00l04.c b/sharplhf00l04.c
index 61021d3..660142d 100644
--- a/sharplhf00l04.c
+++ b/sharplhf00l04.c
@@ -29,6 +29,46 @@
 #include "sharplhf00l04.h"
 #include "debug.h"
 
+void toggle_ready_lhf00l04(volatile uint8_t *dst)
+{
+	unsigned int i = 0;
+	uint8_t tmp1, tmp2;
+
+	tmp1 = *dst & 0x40;
+
+	while (i++ < 0xFFFFFF) {
+		tmp2 = *dst & 0x40;
+		if (tmp1 == tmp2) {
+			break;
+		}
+		tmp1 = tmp2;
+	}
+}
+
+void data_polling_lhf00l04(volatile uint8_t *dst, uint8_t data)
+{
+	unsigned int i = 0;
+	uint8_t tmp;
+
+	data &= 0x80;
+
+	while (i++ < 0xFFFFFF) {
+		tmp = *dst & 0x80;
+		if (tmp == data) {
+			break;
+		}
+	}
+}
+
+void protect_lhf00l04(volatile uint8_t *bios)
+{
+	*(volatile uint8_t *)(bios + 0x5555) = 0xAA;
+	*(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
+	*(volatile uint8_t *)(bios + 0x5555) = 0xA0;
+
+	usleep(200);
+}
+
 // I need that Berkeley bit-map printer
 void print_lhf00l04_status(uint8_t status)
 {
diff --git a/sharplhf00l04.h b/sharplhf00l04.h
index e2352a0..b76b4ae 100644
--- a/sharplhf00l04.h
+++ b/sharplhf00l04.h
@@ -4,45 +4,8 @@
 extern int probe_lhf00l04(struct flashchip *flash);
 extern int erase_lhf00l04(struct flashchip *flash);
 extern int write_lhf00l04(struct flashchip *flash, uint8_t *buf);
-extern __inline__ void toggle_ready_lhf00l04(volatile uint8_t *dst)
-{
-	unsigned int i = 0;
-	uint8_t tmp1, tmp2;
-
-	tmp1 = *dst & 0x40;
-
-	while (i++ < 0xFFFFFF) {
-		tmp2 = *dst & 0x40;
-		if (tmp1 == tmp2) {
-			break;
-		}
-		tmp1 = tmp2;
-	}
-}
-
-extern __inline__ void data_polling_lhf00l04(volatile uint8_t *dst,
-					     uint8_t data)
-{
-	unsigned int i = 0;
-	uint8_t tmp;
-
-	data &= 0x80;
-
-	while (i++ < 0xFFFFFF) {
-		tmp = *dst & 0x80;
-		if (tmp == data) {
-			break;
-		}
-	}
-}
-
-extern __inline__ void protect_lhf00l04(volatile uint8_t *bios)
-{
-	*(volatile uint8_t *)(bios + 0x5555) = 0xAA;
-	*(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
-	*(volatile uint8_t *)(bios + 0x5555) = 0xA0;
-
-	usleep(200);
-}
+extern void toggle_ready_lhf00l04(volatile uint8_t *dst);
+extern void data_polling_lhf00l04(volatile uint8_t *dst, uint8_t data);
+extern void protect_lhf00l04(volatile uint8_t *bios);
 
 #endif				/* !__SHARPLHF00L04_H__ */
