X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fmtd%2Fmaps%2Fsbc_gxx.c;h=4a1477f12ad049df0e1433724b763032c49f1e94;hb=27879d9d66f2dea19cfcd0e1df8358a33447f45b;hp=7a9cb1d453482647bba9aa48944d41dbc4fad4d1;hpb=a91482bdcc2e0f6035702e46f1b99043a0893346;p=linux-2.6.git diff --git a/drivers/mtd/maps/sbc_gxx.c b/drivers/mtd/maps/sbc_gxx.c index 7a9cb1d45..4a1477f12 100644 --- a/drivers/mtd/maps/sbc_gxx.c +++ b/drivers/mtd/maps/sbc_gxx.c @@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - $Id: sbc_gxx.c,v 1.29 2004/07/12 22:38:29 dwmw2 Exp $ + $Id: sbc_gxx.c,v 1.26 2003/05/26 08:50:36 dwmw2 Exp $ The SBC-MediaGX / SBC-GXx has up to 16 MiB of Intel StrataFlash (28F320/28F640) in x8 mode. @@ -114,12 +114,32 @@ static inline void sbc_gxx_page(struct map_info *map, unsigned long ofs) } -static map_word sbc_gxx_read8(struct map_info *map, unsigned long ofs) +static __u8 sbc_gxx_read8(struct map_info *map, unsigned long ofs) { - map_word ret; + __u8 ret; spin_lock(&sbc_gxx_spin); sbc_gxx_page(map, ofs); - ret.x[0] = readb(iomapadr + (ofs & WINDOW_MASK)); + ret = readb(iomapadr + (ofs & WINDOW_MASK)); + spin_unlock(&sbc_gxx_spin); + return ret; +} + +static __u16 sbc_gxx_read16(struct map_info *map, unsigned long ofs) +{ + __u16 ret; + spin_lock(&sbc_gxx_spin); + sbc_gxx_page(map, ofs); + ret = readw(iomapadr + (ofs & WINDOW_MASK)); + spin_unlock(&sbc_gxx_spin); + return ret; +} + +static __u32 sbc_gxx_read32(struct map_info *map, unsigned long ofs) +{ + __u32 ret; + spin_lock(&sbc_gxx_spin); + sbc_gxx_page(map, ofs); + ret = readl(iomapadr + (ofs & WINDOW_MASK)); spin_unlock(&sbc_gxx_spin); return ret; } @@ -141,11 +161,27 @@ static void sbc_gxx_copy_from(struct map_info *map, void *to, unsigned long from } } -static void sbc_gxx_write8(struct map_info *map, map_word d, unsigned long adr) +static void sbc_gxx_write8(struct map_info *map, __u8 d, unsigned long adr) +{ + spin_lock(&sbc_gxx_spin); + sbc_gxx_page(map, adr); + writeb(d, iomapadr + (adr & WINDOW_MASK)); + spin_unlock(&sbc_gxx_spin); +} + +static void sbc_gxx_write16(struct map_info *map, __u16 d, unsigned long adr) +{ + spin_lock(&sbc_gxx_spin); + sbc_gxx_page(map, adr); + writew(d, iomapadr + (adr & WINDOW_MASK)); + spin_unlock(&sbc_gxx_spin); +} + +static void sbc_gxx_write32(struct map_info *map, __u32 d, unsigned long adr) { spin_lock(&sbc_gxx_spin); sbc_gxx_page(map, adr); - writeb(d.x[0], iomapadr + (adr & WINDOW_MASK)); + writel(d, iomapadr + (adr & WINDOW_MASK)); spin_unlock(&sbc_gxx_spin); } @@ -172,10 +208,14 @@ static struct map_info sbc_gxx_map = { .size = MAX_SIZE_KiB*1024, /* this must be set to a maximum possible amount of flash so the cfi probe routines find all the chips */ - .bankwidth = 1, - .read = sbc_gxx_read8, + .buswidth = 1, + .read8 = sbc_gxx_read8, + .read16 = sbc_gxx_read16, + .read32 = sbc_gxx_read32, .copy_from = sbc_gxx_copy_from, - .write = sbc_gxx_write8, + .write8 = sbc_gxx_write8, + .write16 = sbc_gxx_write16, + .write32 = sbc_gxx_write32, .copy_to = sbc_gxx_copy_to };