blob: f71f180f621464e6a5006f79c2455dba6b0735a3 [file] [log] [blame]
Ronald G. Minnicheaab50b2003-09-12 22:41:53 +00001#ifndef __82802AB_H__
2#define __82802AB_H__ 1
3
Ollie Lho761bf1b2004-03-20 16:46:10 +00004extern int probe_82802ab(struct flashchip *flash);
5extern int erase_82802ab(struct flashchip *flash);
Ollie Lho184a4042005-11-26 21:55:36 +00006extern int write_82802ab(struct flashchip *flash, uint8_t *buf);
Ronald G. Minnich56439422002-09-06 16:58:14 +00007
Ollie Lho184a4042005-11-26 21:55:36 +00008extern __inline__ void toggle_ready_82802ab(volatile uint8_t *dst)
Ronald G. Minnich56439422002-09-06 16:58:14 +00009{
10 unsigned int i = 0;
Ollie Lho184a4042005-11-26 21:55:36 +000011 uint8_t tmp1, tmp2;
Ronald G. Minnich56439422002-09-06 16:58:14 +000012
13 tmp1 = *dst & 0x40;
14
15 while (i++ < 0xFFFFFF) {
16 tmp2 = *dst & 0x40;
17 if (tmp1 == tmp2) {
18 break;
19 }
20 tmp1 = tmp2;
21 }
22}
23
Uwe Hermann0b7afe62007-04-01 19:44:21 +000024extern __inline__ void data_polling_82802ab(volatile uint8_t *dst,
25 uint8_t data)
Ronald G. Minnich56439422002-09-06 16:58:14 +000026{
27 unsigned int i = 0;
Ollie Lho184a4042005-11-26 21:55:36 +000028 uint8_t tmp;
Ronald G. Minnich56439422002-09-06 16:58:14 +000029
30 data &= 0x80;
31
32 while (i++ < 0xFFFFFF) {
33 tmp = *dst & 0x80;
34 if (tmp == data) {
35 break;
36 }
37 }
38}
39
Ollie Lho184a4042005-11-26 21:55:36 +000040extern __inline__ void protect_82802ab(volatile uint8_t *bios)
Ronald G. Minnich56439422002-09-06 16:58:14 +000041{
Uwe Hermann0b7afe62007-04-01 19:44:21 +000042 *(volatile uint8_t *)(bios + 0x5555) = 0xAA;
43 *(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
44 *(volatile uint8_t *)(bios + 0x5555) = 0xA0;
Ronald G. Minnich56439422002-09-06 16:58:14 +000045
46 usleep(200);
47}
48
Ollie Lho761bf1b2004-03-20 16:46:10 +000049#endif /* !__82802AB_H__ */