blob: de9c3d65c059f213866fd5b61ca763a7c8c1f549 [file] [log] [blame]
Ronald G. Minnich5e5f75e2002-01-29 18:21:41 +00001extern int probe_jedec (struct flashchip * flash);
2extern int erase_jedec (struct flashchip * flash);
3extern int write_jedec (struct flashchip * flash, char * buf);
4
5extern __inline__ void toggle_ready_jedec (char * dst)
6{
7 unsigned int i = 0;
8 char tmp1, tmp2;
9
10 tmp1 = *dst & 0x40;
11
12 while (i++ < 0xFFFFFF) {
13 tmp2 = *dst & 0x40;
14 if (tmp1 == tmp2) {
15 break;
16 }
17 tmp1 = tmp2;
18 }
19}
20
21extern __inline__ void data_polling_jedec (char * dst, char data)
22{
23 unsigned int i = 0;
24 char tmp;
25
26 data &= 0x80;
27
28 while (i++ < 0xFFFFFF) {
29 tmp = *dst & 0x80;
30 if (tmp == data) {
31 break;
32 }
33 }
34}
35
36extern __inline__ void protect_jedec (char * bios)
37{
38 *(char *) (bios + 0x5555) = 0xAA;
39 *(char *) (bios + 0x2AAA) = 0x55;
40 *(char *) (bios + 0x5555) = 0xA0;
41
42 usleep(200);
43}
44
45extern __inline__ void write_page_jedec (char * bios, char * src, char * dst,
46 int page_size)
47{
48 int i;
49
50 *(char *) (bios + 0x5555) = 0xAA;
51 *(char *) (bios + 0x2AAA) = 0x55;
52 *(char *) (bios + 0x5555) = 0xA0;
53
54 for (i = 0; i < page_size; i++) {
55 /* transfer data from source to destination */
56 *dst++ = *src++;
57 }
58
59 usleep(100);
60 toggle_ready_jedec(dst-1);
61}