/** 2M = MTD SIZE mtd->erase_size = 512 mtd->erasesize_shift = 9 : every erase block = 512 Byte mtd->write_size = 512 : this is a flash param , flash support size of every writing ctx->bounce : temp buffer, and must larger than mtd->write_size */ static struct mtd_info *map_ram_probe(struct map_info *map) { struct mtd_info *mtd; /* Check the first byte is RAM */ #if 0 map_write8(map, 0x55, 0); if (map_read8(map, 0) != 0x55) return NULL; map_write8(map, 0xAA, 0); if (map_read8(map, 0) != 0xAA) return NULL; /* Check the last byte is RAM */ map_write8(map, 0x55, map->size-1); if (map_read8(map, map->size-1) != 0x55) return NULL; map_write8(map, 0xAA, map->size-1); if (map_read8(map, map->size-1) != 0xAA) return NULL; #endif /* OK. It seems to be RAM. */ mtd = kzalloc(sizeof(*mtd), GFP_KERNEL); if (!mtd) return NULL; map->fldrv = &mapram_chipdrv; mtd->priv = map; mtd->name = map->name; mtd->type = MTD_RAM; mtd->size = map->size; mtd->erase = mapram_erase; mtd->get_unmapped_area = mapram_unmapped_area; mtd->read = mapram_read; mtd->write = mapram_write; #ifdef CONFIG_HUAWEI_KERNEL mtd->panic_write= mapram_write; #endif mtd->sync = mapram_nop; mtd->flags = MTD_CAP_RAM; #ifdef CONFIG_HUAWEI_KERNEL mtd->writesize = 512; mtd->block_isbad = mapram_block_isbad; mtd->erasesize = 512; #endif while(mtd->size & (mtd->erasesize - 1)) mtd->erasesize >>= 1; __module_get(THIS_MODULE); return mtd; }
static struct mtd_info *map_ram_probe(struct map_info *map) { struct mtd_info *mtd; /* Check the first byte is RAM */ #if 0 map_write8(map, 0x55, 0); if (map_read8(map, 0) != 0x55) return NULL; map_write8(map, 0xAA, 0); if (map_read8(map, 0) != 0xAA) return NULL; /* Check the last byte is RAM */ map_write8(map, 0x55, map->size-1); if (map_read8(map, map->size-1) != 0x55) return NULL; map_write8(map, 0xAA, map->size-1); if (map_read8(map, map->size-1) != 0xAA) return NULL; #endif /* OK. It seems to be RAM. */ mtd = kmalloc(sizeof(*mtd), GFP_KERNEL); if (!mtd) return NULL; memset(mtd, 0, sizeof(*mtd)); map->fldrv = &mapram_chipdrv; mtd->priv = map; mtd->name = map->name; mtd->type = MTD_RAM; mtd->size = map->size; mtd->erase = mapram_erase; mtd->read = mapram_read; mtd->write = mapram_write; mtd->sync = mapram_nop; mtd->flags = MTD_CAP_RAM; mtd->writesize = 1; mtd->erasesize = PAGE_SIZE; while(mtd->size & (mtd->erasesize - 1)) mtd->erasesize >>= 1; __module_get(THIS_MODULE); return mtd; }
static struct mtd_info *map_ram_probe(struct map_info *map) { struct mtd_info *mtd; #if 0 map_write8(map, 0x55, 0); if (map_read8(map, 0) != 0x55) return NULL; map_write8(map, 0xAA, 0); if (map_read8(map, 0) != 0xAA) return NULL; map_write8(map, 0x55, map->size-1); if (map_read8(map, map->size-1) != 0x55) return NULL; map_write8(map, 0xAA, map->size-1); if (map_read8(map, map->size-1) != 0xAA) return NULL; #endif mtd = kzalloc(sizeof(*mtd), GFP_KERNEL); if (!mtd) return NULL; map->fldrv = &mapram_chipdrv; mtd->priv = map; mtd->name = map->name; mtd->type = MTD_RAM; mtd->size = map->size; mtd->_erase = mapram_erase; mtd->_get_unmapped_area = mapram_unmapped_area; mtd->_read = mapram_read; mtd->_write = mapram_write; mtd->_sync = mapram_nop; mtd->flags = MTD_CAP_RAM; mtd->writesize = 1; mtd->erasesize = PAGE_SIZE; while(mtd->size & (mtd->erasesize - 1)) mtd->erasesize >>= 1; __module_get(THIS_MODULE); return mtd; }