diff options
Diffstat (limited to 'package/base-files/src')
| -rw-r--r-- | package/base-files/src/adam2patcher.c | 59 | ||||
| -rw-r--r-- | package/base-files/src/jffs2root.c | 133 | ||||
| -rw-r--r-- | package/base-files/src/mtd.h | 304 | 
3 files changed, 0 insertions, 496 deletions
diff --git a/package/base-files/src/adam2patcher.c b/package/base-files/src/adam2patcher.c deleted file mode 100644 index 25a78074a..000000000 --- a/package/base-files/src/adam2patcher.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * patcher.c - ADAM2 patcher for Netgear DG834 (and compatible) - * - * Copyright (C) 2006 Felix Fietkau - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <stddef.h> -#include <unistd.h> -#include <fcntl.h> -#include <stdint.h> -#include <sys/mman.h> -#include <sys/stat.h> -#include <string.h> - -#include <sys/ioctl.h> - -int main(int argc, char **argv) -{ -	int fd; -	char *ptr; -	uint32_t *i; - -	if (argc != 2) { -		fprintf(stderr, "Usage: %s <filename>\n", argv[0]); -		exit(1); -	} - -	if (((fd = open(argv[1], O_RDWR)) < 0) -			|| ((ptr = mmap(0, 128 * 1024, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0)) == (void *) (-1))) { -		fprintf(stderr, "Can't open file\n"); -		exit(1); -	} - -	i = (uint32_t *) &ptr[0x3944]; -	if (*i == 0x0c000944) { -		fprintf(stderr, "Unpatched ADAM2 detected. Patching... "); -		*i = 0x00000000; -		msync(i, sizeof(*i), MS_SYNC|MS_INVALIDATE); -		fprintf(stderr, "done!\n"); -	} else if (*i == 0x00000000) { -		fprintf(stderr, "Patched ADAM2 detected.\n"); -	} else { -		fprintf(stderr, "Unknown ADAM2 detected. Can't patch!\n"); -	} - -	close(fd);		 -} diff --git a/package/base-files/src/jffs2root.c b/package/base-files/src/jffs2root.c deleted file mode 100644 index 3562eb462..000000000 --- a/package/base-files/src/jffs2root.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * jffs2root.c - * - * Copyright (C) 2005 Mike Baker  - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. - * - * $Id$ - * - */ - -#include <stdio.h> -#include <stdlib.h> -#include <stddef.h> -#include <unistd.h> -#include <fcntl.h> -#include <sys/mman.h> -#include <sys/stat.h> -#include <string.h> - -#include <sys/ioctl.h> -#include "mtd.h" - -#define FILENAME "/dev/mtdblock/1" - -struct trx_header { -	unsigned magic;		/* "HDR0" */ -	unsigned len;		/* Length of file including header */ -	unsigned crc32;		/* 32-bit CRC from flag_version to end of file */ -	unsigned flag_version;	/* 0:15 flags, 16:31 version */ -	unsigned offsets[3];	/* Offsets of partitions from start of header */ -}; - -unsigned long *crc32; - -void init_crc32() -{ -	unsigned long crc; -	unsigned long poly = 0xEDB88320L; -	int n, bit; -	if ((crc32 = (unsigned long *) malloc(256 * sizeof(unsigned long))) == (void *)-1) { -		perror("malloc"); -		exit(1); -	} -	for (n = 0; n < 256; n++) { -	crc = (unsigned long) n; -	for (bit = 0; bit < 8; bit++) -		crc = (crc & 1) ? (poly ^ (crc >> 1)) : (crc >> 1); -	crc32[n] = crc; -	} -} - -unsigned int crc32buf(char *buf, size_t len) -{ -	unsigned int crc = 0xFFFFFFFF; -	for (; len; len--, buf++) -	crc = crc32[(crc ^ *buf) & 0xff] ^ (crc >> 8); -	return crc; -} - -int main(int argc, char **argv) -{ -	int fd; -	struct mtd_info_user mtdInfo; -	unsigned long len; -	struct trx_header *ptr; -	char *buf; -	 -	if (((fd = open(FILENAME, O_RDWR))	< 0) -			|| ((len = lseek(fd, 0, SEEK_END)) < 0) -			|| ((ptr = (struct trx_header *) mmap(0, len, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0)) == (void *) (-1)) -			|| (ptr->magic != 0x30524448)) { -		printf("Error reading trx info\n"); -		exit(-1); -	} -	close (fd); - -	if (((fd = open("/dev/mtd/1", O_RDWR))	< 0) -			|| (ioctl(fd, MEMGETINFO, &mtdInfo))) { -		fprintf(stderr, "Could not get MTD device info from %s\n", FILENAME); -		close(fd); -		exit(1); -	} -	close(fd); - -	if (argc > 1 && !strcmp(argv[1],"--move")) { -		if (ptr->offsets[2] >= ptr->len) { -			printf("Partition already moved outside trx\n"); -		} else { -			init_crc32(); -			ptr->offsets[2] +=	(mtdInfo.erasesize - 1); -			ptr->offsets[2] &= ~(mtdInfo.erasesize - 1); -			ptr->len = ptr->offsets[2]; -			ptr->crc32 = crc32buf((void *) &(ptr->flag_version), ptr->len - offsetof(struct trx_header, flag_version)); -			msync(ptr,sizeof(struct trx_header),MS_SYNC|MS_INVALIDATE); -			printf("Partition moved; please reboot\n"); -		} -	} else if (argc > 1 && !strcmp(argv[1], "--clean")) { -		buf = (char *) ptr; -		if (buf[ptr->offsets[1] - 1] == 0) { -			init_crc32(); -			buf[ptr->offsets[1] - 1] = 1; -			ptr->crc32 = crc32buf((void *) &(ptr->flag_version), ptr->len - offsetof(struct trx_header, flag_version)); -			msync(ptr,sizeof(struct trx_header),MS_SYNC|MS_INVALIDATE); -			printf("Partition marked as clean\n"); -		} -	} else { -		int x; -		printf(" erase: 0x%08x\n",mtdInfo.erasesize); -		printf("=== trx ===\n"); -		printf("mapped: 0x%08x\n", (unsigned)ptr); -		printf(" magic: 0x%08x\n", ptr->magic); -		printf("	 len: 0x%08x\n", ptr->len); -		printf("	 crc: 0x%08x\n", ptr->crc32); -		for (x = 0; x < 3; x++) -			printf(" offset[%d]: 0x%08x\n", x, ptr->offsets[x]); -	} - -	munmap((void *) ptr, len); -	return 0; -} diff --git a/package/base-files/src/mtd.h b/package/base-files/src/mtd.h deleted file mode 100644 index 8b83afd57..000000000 --- a/package/base-files/src/mtd.h +++ /dev/null @@ -1,304 +0,0 @@ - -/* $Id: mtd.h,v 1.38 2003/01/12 16:30:19 spse Exp $ */ - -#ifndef __MTD_MTD_H__ -#define __MTD_MTD_H__ - -#ifdef __KERNEL__ - -#include <linux/config.h> -#include <linux/version.h> -#include <linux/types.h> -#include <linux/mtd/compatmac.h> -#include <linux/notifier.h> -#include <linux/module.h> -#include <linux/uio.h> - -#endif /* __KERNEL__ */ - -struct erase_info_user { -	u_int32_t start; -	u_int32_t length; -}; - -struct mtd_oob_buf { -	u_int32_t start; -	u_int32_t length; -	unsigned char *ptr; -}; - - -#define MTD_CHAR_MAJOR 90 -#define MTD_BLOCK_MAJOR 31 -#define MAX_MTD_DEVICES 16 - - - -#define MTD_ABSENT		0 -#define MTD_RAM			1 -#define MTD_ROM			2 -#define MTD_NORFLASH		3 -#define MTD_NANDFLASH		4 -#define MTD_PEROM		5 -#define MTD_OTHER		14 -#define MTD_UNKNOWN		15 - - - -#define MTD_CLEAR_BITS		1       // Bits can be cleared (flash) -#define MTD_SET_BITS		2       // Bits can be set -#define MTD_ERASEABLE		4       // Has an erase function -#define MTD_WRITEB_WRITEABLE	8       // Direct IO is possible -#define MTD_VOLATILE		16      // Set for RAMs -#define MTD_XIP			32	// eXecute-In-Place possible -#define MTD_OOB			64	// Out-of-band data (NAND flash) -#define MTD_ECC			128	// Device capable of automatic ECC - -// Some common devices / combinations of capabilities -#define MTD_CAP_ROM		0 -#define MTD_CAP_RAM		(MTD_CLEAR_BITS|MTD_SET_BITS|MTD_WRITEB_WRITEABLE) -#define MTD_CAP_NORFLASH        (MTD_CLEAR_BITS|MTD_ERASEABLE) -#define MTD_CAP_NANDFLASH       (MTD_CLEAR_BITS|MTD_ERASEABLE|MTD_OOB) -#define MTD_WRITEABLE		(MTD_CLEAR_BITS|MTD_SET_BITS) - - -// Types of automatic ECC/Checksum available -#define MTD_ECC_NONE		0 	// No automatic ECC available -#define MTD_ECC_RS_DiskOnChip	1	// Automatic ECC on DiskOnChip -#define MTD_ECC_SW		2	// SW ECC for Toshiba & Samsung devices - -struct mtd_info_user { -	u_char type; -	u_int32_t flags; -	u_int32_t size;	 // Total size of the MTD -	u_int32_t erasesize; -	u_int32_t oobblock;  // Size of OOB blocks (e.g. 512) -	u_int32_t oobsize;   // Amount of OOB data per block (e.g. 16) -	u_int32_t ecctype; -	u_int32_t eccsize; -}; - -struct region_info_user { -	u_int32_t offset;		/* At which this region starts,  -					 * from the beginning of the MTD */ -	u_int32_t erasesize;		/* For this region */ -	u_int32_t numblocks;		/* Number of blocks in this region */ -	u_int32_t regionindex; -}; - -#define MEMGETINFO              _IOR('M', 1, struct mtd_info_user) -#define MEMERASE                _IOW('M', 2, struct erase_info_user) -#define MEMWRITEOOB             _IOWR('M', 3, struct mtd_oob_buf) -#define MEMREADOOB              _IOWR('M', 4, struct mtd_oob_buf) -#define MEMLOCK                 _IOW('M', 5, struct erase_info_user) -#define MEMUNLOCK               _IOW('M', 6, struct erase_info_user) -#define MEMGETREGIONCOUNT	_IOR('M', 7, int) -#define MEMGETREGIONINFO	_IOWR('M', 8, struct region_info_user) -#define	MEMREADDATA             _IOWR('M', 9, struct mtd_oob_buf) -#define	MEMWRITEDATA            _IOWR('M', 10, struct mtd_oob_buf) - -#ifndef __KERNEL__ - -typedef struct mtd_info_user mtd_info_t; -typedef struct erase_info_user erase_info_t; -typedef struct region_info_user region_info_t; - -	/* User-space ioctl definitions */ - - -#else /* __KERNEL__ */ - - -#define MTD_ERASE_PENDING      	0x01 -#define MTD_ERASING		0x02 -#define MTD_ERASE_SUSPEND	0x04 -#define MTD_ERASE_DONE          0x08 -#define MTD_ERASE_FAILED        0x10 - -struct erase_info { -	struct mtd_info *mtd; -	u_int32_t addr; -	u_int32_t len; -	u_long time; -	u_long retries; -	u_int dev; -	u_int cell; -	void (*callback) (struct erase_info *self); -	u_long priv; -	u_char state; -	struct erase_info *next; -}; - -struct mtd_erase_region_info { -	u_int32_t offset;			/* At which this region starts, from the beginning of the MTD */ -	u_int32_t erasesize;		/* For this region */ -	u_int32_t numblocks;		/* Number of blocks of erasesize in this region */ -}; - -struct mtd_info { -	u_char type; -	u_int32_t flags; -	u_int32_t size;	 // Total size of the MTD - -	/* "Major" erase size for the device. Naïve users may take this -	 * to be the only erase size available, or may use the more detailed -	 * information below if they desire -	 */ -	u_int32_t erasesize; - -	u_int32_t oobblock;  // Size of OOB blocks (e.g. 512) -	u_int32_t oobsize;   // Amount of OOB data per block (e.g. 16) -	u_int32_t ecctype; -	u_int32_t eccsize; - -	// Kernel-only stuff starts here. -	char *name; -	int index; - -	/* Data for variable erase regions. If numeraseregions is zero, -	 * it means that the whole device has erasesize as given above.  -	 */ -	int numeraseregions; -	struct mtd_erase_region_info *eraseregions;  - -	/* This really shouldn't be here. It can go away in 2.5 */ -	u_int32_t bank_size; - -	struct module *module; -	int (*erase) (struct mtd_info *mtd, struct erase_info *instr); - -	/* This stuff for eXecute-In-Place */ -	int (*point) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char **mtdbuf); - -	/* We probably shouldn't allow XIP if the unpoint isn't a NULL */ -	void (*unpoint) (struct mtd_info *mtd, u_char * addr, loff_t from, size_t len); - - -	int (*read) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); -	int (*write) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf); - -	int (*read_ecc) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf, u_char *eccbuf, int oobsel); -	int (*write_ecc) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf, u_char *eccbuf, int oobsel); - -	int (*read_oob) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); -	int (*write_oob) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf); - -	/*  -	 * Methods to access the protection register area, present in some  -	 * flash devices. The user data is one time programmable but the -	 * factory data is read only.  -	 */ -	int (*read_user_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); - -	int (*read_fact_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); - -	/* This function is not yet implemented */ -	int (*write_user_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); - -	/* iovec-based read/write methods. We need these especially for NAND flash, -	   with its limited number of write cycles per erase. -	   NB: The 'count' parameter is the number of _vectors_, each of  -	   which contains an (ofs, len) tuple. -	*/ -	int (*readv) (struct mtd_info *mtd, struct iovec *vecs, unsigned long count, loff_t from, size_t *retlen); -	int (*readv_ecc) (struct mtd_info *mtd, struct iovec *vecs, unsigned long count, loff_t from,  -		size_t *retlen, u_char *eccbuf, int oobsel); -	int (*writev) (struct mtd_info *mtd, const struct iovec *vecs, unsigned long count, loff_t to, size_t *retlen); -	int (*writev_ecc) (struct mtd_info *mtd, const struct iovec *vecs, unsigned long count, loff_t to,  -		size_t *retlen, u_char *eccbuf, int oobsel); - -	/* Sync */ -	void (*sync) (struct mtd_info *mtd); - -	/* Chip-supported device locking */ -	int (*lock) (struct mtd_info *mtd, loff_t ofs, size_t len); -	int (*unlock) (struct mtd_info *mtd, loff_t ofs, size_t len); - -	/* Power Management functions */ -	int (*suspend) (struct mtd_info *mtd); -	void (*resume) (struct mtd_info *mtd); - -	struct notifier_block reboot_notifier; - -	void *priv; -}; - - -	/* Kernel-side ioctl definitions */ - -extern int add_mtd_device(struct mtd_info *mtd); -extern int del_mtd_device (struct mtd_info *mtd); - -extern struct mtd_info *__get_mtd_device(struct mtd_info *mtd, int num); - -static inline struct mtd_info *get_mtd_device(struct mtd_info *mtd, int num) -{ -	struct mtd_info *ret; -	 -	ret = __get_mtd_device(mtd, num); - -	if (ret && ret->module && !try_inc_mod_count(ret->module)) -		return NULL; - -	return ret; -} - -static inline void put_mtd_device(struct mtd_info *mtd) -{ -       if (mtd->module) -	       __MOD_DEC_USE_COUNT(mtd->module); -} - - -struct mtd_notifier { -	void (*add)(struct mtd_info *mtd); -	void (*remove)(struct mtd_info *mtd); -	struct mtd_notifier *next; -}; - - -extern void register_mtd_user (struct mtd_notifier *new); -extern int unregister_mtd_user (struct mtd_notifier *old); - -int default_mtd_writev(struct mtd_info *mtd, const struct iovec *vecs, -		       unsigned long count, loff_t to, size_t *retlen); - -int default_mtd_readv(struct mtd_info *mtd, struct iovec *vecs, -		      unsigned long count, loff_t from, size_t *retlen); - -#ifndef MTDC -#define MTD_ERASE(mtd, args...) (*(mtd->erase))(mtd, args) -#define MTD_POINT(mtd, a,b,c,d) (*(mtd->point))(mtd, a,b,c, (u_char **)(d)) -#define MTD_UNPOINT(mtd, arg) (*(mtd->unpoint))(mtd, (u_char *)arg) -#define MTD_READ(mtd, args...) (*(mtd->read))(mtd, args) -#define MTD_WRITE(mtd, args...) (*(mtd->write))(mtd, args) -#define MTD_READV(mtd, args...) (*(mtd->readv))(mtd, args) -#define MTD_WRITEV(mtd, args...) (*(mtd->writev))(mtd, args) -#define MTD_READECC(mtd, args...) (*(mtd->read_ecc))(mtd, args) -#define MTD_WRITEECC(mtd, args...) (*(mtd->write_ecc))(mtd, args) -#define MTD_READOOB(mtd, args...) (*(mtd->read_oob))(mtd, args) -#define MTD_WRITEOOB(mtd, args...) (*(mtd->write_oob))(mtd, args) -#define MTD_SYNC(mtd) do { if (mtd->sync) (*(mtd->sync))(mtd);  } while (0)  -#endif /* MTDC */ - -/* - * Debugging macro and defines - */ -#define MTD_DEBUG_LEVEL0	(0)	/* Quiet   */ -#define MTD_DEBUG_LEVEL1	(1)	/* Audible */ -#define MTD_DEBUG_LEVEL2	(2)	/* Loud    */ -#define MTD_DEBUG_LEVEL3	(3)	/* Noisy   */ - -#ifdef CONFIG_MTD_DEBUG -#define DEBUG(n, args...)				\ - 	do {						\ -		if (n <= CONFIG_MTD_DEBUG_VERBOSE)	\ -			printk(KERN_INFO args);		\ -	} while(0) -#else /* CONFIG_MTD_DEBUG */ -#define DEBUG(n, args...) -#endif /* CONFIG_MTD_DEBUG */ - -#endif /* __KERNEL__ */ - -#endif /* __MTD_MTD_H__ */  | 
