Merge branch 'for-next/64bit'
This commit is contained in:
commit
a3251562db
|
@ -84,7 +84,7 @@ static int do_fuse_sense(void __iomem *reg_base, unsigned int bank,
|
|||
}
|
||||
|
||||
static ssize_t imx_iim_cdev_read(struct cdev *cdev, void *buf, size_t count,
|
||||
ulong offset, ulong flags)
|
||||
loff_t offset, ulong flags)
|
||||
{
|
||||
ulong size, i;
|
||||
struct iim_priv *priv = cdev->priv;
|
||||
|
@ -94,7 +94,7 @@ static ssize_t imx_iim_cdev_read(struct cdev *cdev, void *buf, size_t count,
|
|||
if ((sense_param = dev_get_param(cdev->dev, "explicit_sense_enable")))
|
||||
explicit_sense = simple_strtoul(sense_param, NULL, 0);
|
||||
|
||||
size = min((ulong)count, priv->banksize - offset);
|
||||
size = min((loff_t)count, priv->banksize - offset);
|
||||
if (explicit_sense) {
|
||||
for (i = 0; i < size; i++) {
|
||||
int row_val;
|
||||
|
@ -176,7 +176,7 @@ out:
|
|||
#endif /* CONFIG_IMX_IIM_FUSE_BLOW */
|
||||
|
||||
static ssize_t imx_iim_cdev_write(struct cdev *cdev, const void *buf, size_t count,
|
||||
ulong offset, ulong flags)
|
||||
loff_t offset, ulong flags)
|
||||
{
|
||||
ulong size, i;
|
||||
struct iim_priv *priv = cdev->priv;
|
||||
|
@ -186,7 +186,7 @@ static ssize_t imx_iim_cdev_write(struct cdev *cdev, const void *buf, size_t cou
|
|||
if ((write_param = dev_get_param(cdev->dev, "permanent_write_enable")))
|
||||
blow_enable = simple_strtoul(write_param, NULL, 0);
|
||||
|
||||
size = min((ulong)count, priv->banksize - offset);
|
||||
size = min((loff_t)count, priv->banksize - offset);
|
||||
#ifdef CONFIG_IMX_IIM_FUSE_BLOW
|
||||
if (blow_enable) {
|
||||
for (i = 0; i < size; i++) {
|
||||
|
|
|
@ -40,11 +40,11 @@ struct ocotp_priv {
|
|||
};
|
||||
|
||||
static ssize_t mxs_ocotp_cdev_read(struct cdev *cdev, void *buf, size_t count,
|
||||
ulong offset, ulong flags)
|
||||
loff_t offset, ulong flags)
|
||||
{
|
||||
struct ocotp_priv *priv = cdev->priv;
|
||||
void __iomem *base = priv->base;
|
||||
size_t size = min((ulong)count, cdev->size - offset);
|
||||
size_t size = min((loff_t)count, cdev->size - offset);
|
||||
uint64_t start;
|
||||
int i;
|
||||
|
||||
|
|
|
@ -268,7 +268,10 @@ static __inline__ int find_next_zero_bit(void *addr, int size, int offset)
|
|||
return result + ffz(tmp);
|
||||
}
|
||||
|
||||
#include <asm-generic/bitops/__ffs.h>
|
||||
#include <asm-generic/bitops/__fls.h>
|
||||
#include <asm-generic/bitops/ffs.h>
|
||||
#include <asm-generic/bitops/fls.h>
|
||||
#include <asm-generic/bitops/hweight.h>
|
||||
|
||||
static __inline__ int ext2_set_bit(int nr, volatile void *addr)
|
||||
|
|
|
@ -8,6 +8,7 @@ obj-y += smulsi3_highpart.o
|
|||
obj-y += umodsi3.o
|
||||
obj-y += lshrdi3.o
|
||||
obj-y += ashldi3.o
|
||||
obj-y += ashrdi3.o
|
||||
obj-y += divsi3.o
|
||||
obj-y += modsi3.o
|
||||
obj-y += cpu.o
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* Copyright 2004-2009 Analog Devices Inc.
|
||||
*
|
||||
* Licensed under the GPL-2 or later.
|
||||
*/
|
||||
|
||||
#include "gcclib.h"
|
||||
|
||||
#ifdef CONFIG_ARITHMETIC_OPS_L1
|
||||
DItype __ashrdi3(DItype u, word_type b)__attribute__((l1_text));
|
||||
#endif
|
||||
|
||||
DItype __ashrdi3(DItype u, word_type b)
|
||||
{
|
||||
DIunion w;
|
||||
word_type bm;
|
||||
DIunion uu;
|
||||
|
||||
if (b == 0)
|
||||
return u;
|
||||
|
||||
uu.ll = u;
|
||||
|
||||
bm = (sizeof(SItype) * BITS_PER_UNIT) - b;
|
||||
if (bm <= 0) {
|
||||
/* w.s.high = 1..1 or 0..0 */
|
||||
w.s.high = uu.s.high >> (sizeof(SItype) * BITS_PER_UNIT - 1);
|
||||
w.s.low = uu.s.high >> -bm;
|
||||
} else {
|
||||
USItype carries = (USItype) uu.s.high << bm;
|
||||
w.s.high = uu.s.high >> b;
|
||||
w.s.low = ((USItype) uu.s.low >> b) | carries;
|
||||
}
|
||||
|
||||
return w.ll;
|
||||
}
|
|
@ -28,5 +28,8 @@
|
|||
#define _ASM_MIPS_BITOPS_H_
|
||||
|
||||
#include <asm-generic/bitops/__ffs.h>
|
||||
#include <asm-generic/bitops/__fls.h>
|
||||
#include <asm-generic/bitops/ffs.h>
|
||||
#include <asm-generic/bitops/fls.h>
|
||||
|
||||
#endif /* _ASM_MIPS_BITOPS_H_ */
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
#ifndef _ASM_BITOPS_H
|
||||
#define _ASM_BITOPS_H
|
||||
|
||||
#include <asm-generic/bitops/__ffs.h>
|
||||
#include <asm-generic/bitops/__fls.h>
|
||||
#include <asm-generic/bitops/ffs.h>
|
||||
#include <asm-generic/bitops/fls.h>
|
||||
|
||||
#endif /* _ASM_BITOPS_H */
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
CPPFLAGS += -D__OR1K__ -ffixed-r10 -mhard-mul -mhard-div
|
||||
|
||||
LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
|
||||
|
||||
board-$(CONFIG_GENERIC) := generic
|
||||
|
||||
KALLSYMS += --symbol-prefix=_
|
||||
|
@ -18,4 +20,6 @@ common-y += $(BOARD)
|
|||
common-y += arch/openrisc/lib/
|
||||
common-y += arch/openrisc/cpu/
|
||||
|
||||
common-y += $(LIBGCC)
|
||||
|
||||
lds-y += arch/openrisc/cpu/barebox.lds
|
||||
|
|
|
@ -34,7 +34,7 @@ struct hf_priv {
|
|||
struct hf_platform_data *pdata;
|
||||
};
|
||||
|
||||
static ssize_t hf_read(struct cdev *cdev, void *buf, size_t count, ulong offset, ulong flags)
|
||||
static ssize_t hf_read(struct cdev *cdev, void *buf, size_t count, loff_t offset, ulong flags)
|
||||
{
|
||||
struct hf_platform_data *hf = cdev->priv;
|
||||
int fd = hf->fd;
|
||||
|
@ -45,7 +45,7 @@ static ssize_t hf_read(struct cdev *cdev, void *buf, size_t count, ulong offset,
|
|||
return linux_read(fd, buf, count);
|
||||
}
|
||||
|
||||
static ssize_t hf_write(struct cdev *cdev, const void *buf, size_t count, ulong offset, ulong flags)
|
||||
static ssize_t hf_write(struct cdev *cdev, const void *buf, size_t count, loff_t offset, ulong flags)
|
||||
{
|
||||
struct hf_platform_data *hf = cdev->priv;
|
||||
int fd = hf->fd;
|
||||
|
|
|
@ -27,6 +27,11 @@
|
|||
#ifndef _ASM_X86_BITOPS_H_
|
||||
#define _ASM_X86_BITOPS_H_
|
||||
|
||||
/* nothing special yet */
|
||||
#define BITS_PER_LONG 32
|
||||
|
||||
#include <asm-generic/bitops/__fls.h>
|
||||
#include <asm-generic/bitops/__ffs.h>
|
||||
#include <asm-generic/bitops/fls.h>
|
||||
#include <asm-generic/bitops/ffs.h>
|
||||
|
||||
#endif /* _ASM_X86_BITOPS_H_ */
|
||||
|
|
|
@ -84,8 +84,8 @@ out:
|
|||
|
||||
static int do_crc(int argc, char *argv[])
|
||||
{
|
||||
ulong start = 0, size = ~0, total = 0;
|
||||
ulong crc = 0, vcrc = 0;
|
||||
loff_t start = 0, size = ~0;
|
||||
ulong crc = 0, vcrc = 0, total = 0;
|
||||
char *filename = "/dev/mem";
|
||||
#ifdef CONFIG_CMD_CRC_CMP
|
||||
char *vfilename = NULL;
|
||||
|
|
|
@ -51,7 +51,7 @@ static int do_digest(char *algorithm, int argc, char *argv[])
|
|||
argv++;
|
||||
while (*argv) {
|
||||
char *filename = "/dev/mem";
|
||||
ulong start = 0, size = ~0;
|
||||
loff_t start = 0, size = ~0;
|
||||
|
||||
/* arguments are either file, file+area or area */
|
||||
if (parse_area_spec(*argv, &start, &size)) {
|
||||
|
@ -66,7 +66,7 @@ static int do_digest(char *algorithm, int argc, char *argv[])
|
|||
for (i = 0; i < d->length; i++)
|
||||
printf("%02x", hash[i]);
|
||||
|
||||
printf(" %s\t0x%08lx ... 0x%08lx\n", filename, start, start + size);
|
||||
printf(" %s\t0x%08llx ... 0x%08llx\n", filename, start, start + size);
|
||||
|
||||
argv++;
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ static int do_flerase(int argc, char *argv[])
|
|||
int fd;
|
||||
char *filename = NULL;
|
||||
struct stat s;
|
||||
unsigned long start = 0, size = ~0;
|
||||
loff_t start = 0, size = ~0;
|
||||
int ret = 0;
|
||||
|
||||
if (argc == 1)
|
||||
|
@ -109,7 +109,7 @@ static int do_protect(int argc, char *argv[])
|
|||
char *filename = NULL;
|
||||
struct stat s;
|
||||
int prot = 1;
|
||||
unsigned long start = 0, size = ~0;
|
||||
loff_t start = 0, size = ~0;
|
||||
int ret = 0, err;
|
||||
|
||||
if (argc == 1)
|
||||
|
|
|
@ -35,7 +35,7 @@ static void ls_one(const char *path, struct stat *s)
|
|||
unsigned int namelen = strlen(path);
|
||||
|
||||
mkmodestr(s->st_mode, modestr);
|
||||
printf("%s %10lu %*.*s\n", modestr, s->st_size, namelen, namelen, path);
|
||||
printf("%s %10llu %*.*s\n", modestr, s->st_size, namelen, namelen, path);
|
||||
}
|
||||
|
||||
int ls(const char *path, ulong flags)
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
#define PRINTF(fmt,args...)
|
||||
#endif
|
||||
|
||||
#define RW_BUF_SIZE (ulong)4096
|
||||
#define RW_BUF_SIZE 4096
|
||||
static char *rw_buf;
|
||||
|
||||
static char *DEVMEM = "/dev/mem";
|
||||
|
@ -55,7 +55,7 @@ static char *DEVMEM = "/dev/mem";
|
|||
*/
|
||||
#define DISP_LINE_LEN 16
|
||||
|
||||
int memory_display(char *addr, ulong offs, ulong nbytes, int size)
|
||||
int memory_display(char *addr, loff_t offs, ulong nbytes, int size)
|
||||
{
|
||||
ulong linebytes, i;
|
||||
u_char *cp;
|
||||
|
@ -72,7 +72,7 @@ int memory_display(char *addr, ulong offs, ulong nbytes, int size)
|
|||
u_char *ucp = (u_char *)linebuf;
|
||||
uint count = 52;
|
||||
|
||||
printf("%08lx:", offs);
|
||||
printf("%08llx:", offs);
|
||||
linebytes = (nbytes > DISP_LINE_LEN) ? DISP_LINE_LEN : nbytes;
|
||||
|
||||
for (i = 0; i < linebytes; i += size) {
|
||||
|
@ -108,7 +108,7 @@ int memory_display(char *addr, ulong offs, ulong nbytes, int size)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int open_and_lseek(const char *filename, int mode, off_t pos)
|
||||
static int open_and_lseek(const char *filename, int mode, loff_t pos)
|
||||
{
|
||||
int fd, ret;
|
||||
|
||||
|
@ -163,7 +163,7 @@ static int mem_parse_options(int argc, char *argv[], char *optstr, int *mode,
|
|||
|
||||
static int do_mem_md(int argc, char *argv[])
|
||||
{
|
||||
ulong start = 0, size = 0x100;
|
||||
loff_t start = 0, size = 0x100;
|
||||
int r, now;
|
||||
int ret = 0;
|
||||
int fd;
|
||||
|
@ -187,7 +187,7 @@ static int do_mem_md(int argc, char *argv[])
|
|||
return 1;
|
||||
|
||||
do {
|
||||
now = min(size, RW_BUF_SIZE);
|
||||
now = min(size, (loff_t)RW_BUF_SIZE);
|
||||
r = read(fd, rw_buf, now);
|
||||
if (r < 0) {
|
||||
perror("read");
|
||||
|
@ -240,7 +240,7 @@ static int do_mem_mw(int argc, char *argv[])
|
|||
int fd;
|
||||
char *filename = DEVMEM;
|
||||
int mode = O_RWSIZE_4;
|
||||
ulong adr;
|
||||
loff_t adr;
|
||||
|
||||
if (mem_parse_options(argc, argv, "bwld:", &mode, NULL, &filename) < 0)
|
||||
return 1;
|
||||
|
@ -248,7 +248,7 @@ static int do_mem_mw(int argc, char *argv[])
|
|||
if (optind + 1 >= argc)
|
||||
return COMMAND_ERROR_USAGE;
|
||||
|
||||
adr = strtoul_suffix(argv[optind++], NULL, 0);
|
||||
adr = strtoull_suffix(argv[optind++], NULL, 0);
|
||||
|
||||
fd = open_and_lseek(filename, mode | O_WRONLY, adr);
|
||||
if (fd < 0)
|
||||
|
@ -300,7 +300,7 @@ BAREBOX_CMD_END
|
|||
|
||||
static int do_mem_cmp(int argc, char *argv[])
|
||||
{
|
||||
ulong addr1, addr2, count = ~0;
|
||||
loff_t addr1, addr2, count = ~0;
|
||||
int mode = O_RWSIZE_1;
|
||||
char *sourcefile = DEVMEM;
|
||||
char *destfile = DEVMEM;
|
||||
|
@ -316,8 +316,8 @@ static int do_mem_cmp(int argc, char *argv[])
|
|||
if (optind + 2 > argc)
|
||||
return COMMAND_ERROR_USAGE;
|
||||
|
||||
addr1 = strtoul_suffix(argv[optind], NULL, 0);
|
||||
addr2 = strtoul_suffix(argv[optind + 1], NULL, 0);
|
||||
addr1 = strtoull_suffix(argv[optind], NULL, 0);
|
||||
addr2 = strtoull_suffix(argv[optind + 1], NULL, 0);
|
||||
|
||||
if (optind + 2 == argc) {
|
||||
if (sourcefile == DEVMEM) {
|
||||
|
@ -330,7 +330,7 @@ static int do_mem_cmp(int argc, char *argv[])
|
|||
}
|
||||
count = statbuf.st_size - addr1;
|
||||
} else {
|
||||
count = strtoul_suffix(argv[optind + 2], NULL, 0);
|
||||
count = strtoull_suffix(argv[optind + 2], NULL, 0);
|
||||
}
|
||||
|
||||
sourcefd = open_and_lseek(sourcefile, mode | O_RDONLY, addr1);
|
||||
|
@ -348,7 +348,7 @@ static int do_mem_cmp(int argc, char *argv[])
|
|||
while (count > 0) {
|
||||
int now, r1, r2, i;
|
||||
|
||||
now = min(RW_BUF_SIZE, count);
|
||||
now = min((loff_t)RW_BUF_SIZE, count);
|
||||
|
||||
r1 = read(sourcefd, rw_buf, now);
|
||||
if (r1 < 0) {
|
||||
|
@ -409,8 +409,7 @@ BAREBOX_CMD_END
|
|||
|
||||
static int do_mem_cp(int argc, char *argv[])
|
||||
{
|
||||
ulong count;
|
||||
ulong dest, src;
|
||||
loff_t count, dest, src;
|
||||
char *sourcefile = DEVMEM;
|
||||
char *destfile = DEVMEM;
|
||||
int sourcefd, destfd;
|
||||
|
@ -424,8 +423,8 @@ static int do_mem_cp(int argc, char *argv[])
|
|||
if (optind + 2 > argc)
|
||||
return COMMAND_ERROR_USAGE;
|
||||
|
||||
src = strtoul_suffix(argv[optind], NULL, 0);
|
||||
dest = strtoul_suffix(argv[optind + 1], NULL, 0);
|
||||
src = strtoull_suffix(argv[optind], NULL, 0);
|
||||
dest = strtoull_suffix(argv[optind + 1], NULL, 0);
|
||||
|
||||
if (optind + 2 == argc) {
|
||||
if (sourcefile == DEVMEM) {
|
||||
|
@ -438,7 +437,7 @@ static int do_mem_cp(int argc, char *argv[])
|
|||
}
|
||||
count = statbuf.st_size - src;
|
||||
} else {
|
||||
count = strtoul_suffix(argv[optind + 2], NULL, 0);
|
||||
count = strtoull_suffix(argv[optind + 2], NULL, 0);
|
||||
}
|
||||
|
||||
sourcefd = open_and_lseek(sourcefile, mode | O_RDONLY, src);
|
||||
|
@ -454,7 +453,7 @@ static int do_mem_cp(int argc, char *argv[])
|
|||
while (count > 0) {
|
||||
int now, r, w, tmp;
|
||||
|
||||
now = min(RW_BUF_SIZE, count);
|
||||
now = min((loff_t)RW_BUF_SIZE, count);
|
||||
|
||||
r = read(sourcefd, rw_buf, now);
|
||||
if (r < 0) {
|
||||
|
@ -516,7 +515,7 @@ BAREBOX_CMD_END
|
|||
|
||||
static int do_memset(int argc, char *argv[])
|
||||
{
|
||||
ulong s, c, n;
|
||||
loff_t s, c, n;
|
||||
int fd;
|
||||
char *buf;
|
||||
int mode = O_RWSIZE_1;
|
||||
|
@ -529,9 +528,9 @@ static int do_memset(int argc, char *argv[])
|
|||
if (optind + 3 > argc)
|
||||
return COMMAND_ERROR_USAGE;
|
||||
|
||||
s = strtoul_suffix(argv[optind], NULL, 0);
|
||||
c = strtoul_suffix(argv[optind + 1], NULL, 0);
|
||||
n = strtoul_suffix(argv[optind + 2], NULL, 0);
|
||||
s = strtoull_suffix(argv[optind], NULL, 0);
|
||||
c = strtoull_suffix(argv[optind + 1], NULL, 0);
|
||||
n = strtoull_suffix(argv[optind + 2], NULL, 0);
|
||||
|
||||
fd = open_and_lseek(file, mode | O_WRONLY, s);
|
||||
if (fd < 0)
|
||||
|
@ -543,7 +542,7 @@ static int do_memset(int argc, char *argv[])
|
|||
while (n > 0) {
|
||||
int now;
|
||||
|
||||
now = min(RW_BUF_SIZE, n);
|
||||
now = min((loff_t)RW_BUF_SIZE, n);
|
||||
|
||||
ret = write(fd, buf, now);
|
||||
if (ret < 0) {
|
||||
|
@ -624,7 +623,7 @@ static int mem_init(void)
|
|||
|
||||
device_initcall(mem_init);
|
||||
|
||||
static ssize_t zero_read(struct cdev *cdev, void *buf, size_t count, ulong offset, ulong flags)
|
||||
static ssize_t zero_read(struct cdev *cdev, void *buf, size_t count, loff_t offset, ulong flags)
|
||||
{
|
||||
memset(buf, 0, count);
|
||||
return count;
|
||||
|
|
|
@ -179,7 +179,7 @@ static void *block_get(struct block_device *blk, int block)
|
|||
}
|
||||
|
||||
static ssize_t block_read(struct cdev *cdev, void *buf, size_t count,
|
||||
unsigned long offset, unsigned long flags)
|
||||
loff_t offset, unsigned long flags)
|
||||
{
|
||||
struct block_device *blk = cdev->priv;
|
||||
unsigned long mask = BLOCKSIZE(blk) - 1;
|
||||
|
@ -256,7 +256,7 @@ static int block_put(struct block_device *blk, const void *buf, int block)
|
|||
}
|
||||
|
||||
static ssize_t block_write(struct cdev *cdev, const void *buf, size_t count,
|
||||
unsigned long offset, ulong flags)
|
||||
loff_t offset, ulong flags)
|
||||
{
|
||||
struct block_device *blk = cdev->priv;
|
||||
unsigned long mask = BLOCKSIZE(blk) - 1;
|
||||
|
@ -338,7 +338,7 @@ static struct file_operations block_ops = {
|
|||
|
||||
int blockdevice_register(struct block_device *blk)
|
||||
{
|
||||
size_t size = blk->num_blocks * BLOCKSIZE(blk);
|
||||
loff_t size = (loff_t)blk->num_blocks * BLOCKSIZE(blk);
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
|
|
|
@ -42,23 +42,6 @@ struct partition_desc {
|
|||
struct partition parts[8];
|
||||
};
|
||||
|
||||
/**
|
||||
* Reject values which cannot be used in Barebox
|
||||
* @param val Value to be check
|
||||
* @return 0 if value can be used in Barebox, -EINVAL if not
|
||||
*
|
||||
* @note this routine can be removed when Barebox uses file offsets larger
|
||||
* than 32 bit
|
||||
*/
|
||||
static int check_offset_value(uint64_t val)
|
||||
{
|
||||
#if 1 /* until Barebox can handle 64 bit offsets */
|
||||
if (val > (__INT_MAX__ / SECTOR_SIZE))
|
||||
return -EINVAL;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Guess the size of the disk, based on the partition table entries
|
||||
* @param dev device to create partitions for
|
||||
|
@ -76,12 +59,6 @@ static int disk_guess_size(struct device_d *dev, struct partition_entry *table)
|
|||
size += get_unaligned(&table[i].partition_size);
|
||||
}
|
||||
}
|
||||
/* limit disk sector counts we can't handle due to 32 bit limits */
|
||||
if (check_offset_value(size) != 0) {
|
||||
dev_warn(dev, "Warning: Sector count limited due to 31 bit"
|
||||
"contraints\n");
|
||||
size = __INT_MAX__ / SECTOR_SIZE;
|
||||
}
|
||||
|
||||
return (int)size;
|
||||
}
|
||||
|
@ -126,12 +103,6 @@ static void __maybe_unused try_dos_partition(struct block_device *blk,
|
|||
pentry.first_sec = get_unaligned(&table[i].partition_start);
|
||||
pentry.size = get_unaligned(&table[i].partition_size);
|
||||
|
||||
/* do we have to ignore this partition due to limitations? */
|
||||
if (check_offset_value(pentry.first_sec) != 0)
|
||||
continue;
|
||||
if (check_offset_value(pentry.size) != 0)
|
||||
continue;
|
||||
|
||||
if (pentry.first_sec != 0) {
|
||||
pd->parts[pd->used_entries].first_sec = pentry.first_sec;
|
||||
pd->parts[pd->used_entries].size = pentry.size;
|
||||
|
|
|
@ -231,7 +231,7 @@ static void __maybe_unused ata_dump_id(uint16_t *id)
|
|||
*/
|
||||
static void ata_fix_endianess(uint16_t *buf, unsigned wds)
|
||||
{
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
#ifdef __BIG_ENDIAN
|
||||
unsigned u;
|
||||
|
||||
for (u = 0; u < wds; u++)
|
||||
|
|
|
@ -339,7 +339,7 @@ static int do_devinfo_subtree(struct device_d *dev, int depth)
|
|||
list_for_each_entry(cdev, &dev->cdevs, devices_list) {
|
||||
for (i = 0; i < depth + 1; i++)
|
||||
printf(" ");
|
||||
printf("`---- 0x%08lx-0x%08lx: /dev/%s\n",
|
||||
printf("`---- 0x%08llx-0x%08llx: /dev/%s\n",
|
||||
cdev->offset,
|
||||
cdev->offset + cdev->size - 1,
|
||||
cdev->name);
|
||||
|
|
|
@ -67,7 +67,7 @@ struct at25_data {
|
|||
static ssize_t at25_ee_read(struct cdev *cdev,
|
||||
void *buf,
|
||||
size_t count,
|
||||
ulong offset,
|
||||
loff_t offset,
|
||||
ulong flags)
|
||||
{
|
||||
u8 command[EE_MAXADDRLEN + 1];
|
||||
|
@ -117,7 +117,7 @@ static ssize_t at25_ee_read(struct cdev *cdev,
|
|||
*/
|
||||
status = spi_sync(at25->spi, &m);
|
||||
dev_dbg(at25->cdev.dev,
|
||||
"read %d bytes at %lu --> %d\n",
|
||||
"read %d bytes at %llu --> %d\n",
|
||||
count, offset, (int) status);
|
||||
|
||||
return status ? status : count;
|
||||
|
@ -126,7 +126,7 @@ static ssize_t at25_ee_read(struct cdev *cdev,
|
|||
static ssize_t at25_ee_write(struct cdev *cdev,
|
||||
const void *buf,
|
||||
size_t count,
|
||||
ulong off,
|
||||
loff_t off,
|
||||
ulong flags)
|
||||
{
|
||||
ssize_t status = 0;
|
||||
|
@ -232,7 +232,7 @@ static ssize_t at25_ee_write(struct cdev *cdev,
|
|||
return written ? written : status;
|
||||
}
|
||||
|
||||
static off_t at25_ee_lseek(struct cdev *cdev, off_t off)
|
||||
static loff_t at25_ee_lseek(struct cdev *cdev, loff_t off)
|
||||
{
|
||||
return off;
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ static u32 lp_read_reg(struct lp_priv *lp, int reg)
|
|||
return buf;
|
||||
}
|
||||
|
||||
static ssize_t lp_read(struct cdev *cdev, void *_buf, size_t count, ulong offset, ulong flags)
|
||||
static ssize_t lp_read(struct cdev *cdev, void *_buf, size_t count, loff_t offset, ulong flags)
|
||||
{
|
||||
struct lp_priv *priv = to_lp_priv(cdev);
|
||||
int i = count;
|
||||
|
|
|
@ -160,7 +160,7 @@ int mc13xxx_set_bits(struct mc13xxx *mc13xxx, u8 reg, u32 mask, u32 val)
|
|||
}
|
||||
EXPORT_SYMBOL(mc13xxx_set_bits);
|
||||
|
||||
static ssize_t mc_read(struct cdev *cdev, void *_buf, size_t count, ulong offset, ulong flags)
|
||||
static ssize_t mc_read(struct cdev *cdev, void *_buf, size_t count, loff_t offset, ulong flags)
|
||||
{
|
||||
struct mc13xxx *priv = to_mc13xxx(cdev);
|
||||
u32 *buf = _buf;
|
||||
|
@ -181,7 +181,7 @@ static ssize_t mc_read(struct cdev *cdev, void *_buf, size_t count, ulong offset
|
|||
return count;
|
||||
}
|
||||
|
||||
static ssize_t mc_write(struct cdev *cdev, const void *_buf, size_t count, ulong offset, ulong flags)
|
||||
static ssize_t mc_write(struct cdev *cdev, const void *_buf, size_t count, loff_t offset, ulong flags)
|
||||
{
|
||||
struct mc13xxx *mc13xxx = to_mc13xxx(cdev);
|
||||
const u32 *buf = _buf;
|
||||
|
|
|
@ -65,7 +65,7 @@ int mc34704_reg_write(struct mc34704 *mc34704, u8 reg, u8 val)
|
|||
EXPORT_SYMBOL(mc34704_reg_write)
|
||||
|
||||
static ssize_t mc34704_read(struct cdev *cdev, void *_buf, size_t count,
|
||||
ulong offset, ulong flags)
|
||||
loff_t offset, ulong flags)
|
||||
{
|
||||
struct mc34704 *priv = to_mc34704(cdev);
|
||||
u8 *buf = _buf;
|
||||
|
@ -85,7 +85,7 @@ static ssize_t mc34704_read(struct cdev *cdev, void *_buf, size_t count,
|
|||
}
|
||||
|
||||
static ssize_t mc34704_write(struct cdev *cdev, const void *_buf, size_t count,
|
||||
ulong offset, ulong flags)
|
||||
loff_t offset, ulong flags)
|
||||
{
|
||||
struct mc34704 *mc34704 = to_mc34704(cdev);
|
||||
const u8 *buf = _buf;
|
||||
|
|
|
@ -163,7 +163,8 @@ int mc34708_set_bits(struct mc34708 *mc34708, enum mc34708_reg reg, u32 mask, u3
|
|||
}
|
||||
EXPORT_SYMBOL(mc34708_set_bits);
|
||||
|
||||
static ssize_t mc_read(struct cdev *cdev, void *_buf, size_t count, ulong offset, ulong flags)
|
||||
static ssize_t mc_read(struct cdev *cdev, void *_buf, size_t count,
|
||||
loff_t offset, ulong flags)
|
||||
{
|
||||
struct mc34708 *priv = to_mc34708(cdev);
|
||||
u32 *buf = _buf;
|
||||
|
@ -184,7 +185,8 @@ static ssize_t mc_read(struct cdev *cdev, void *_buf, size_t count, ulong offset
|
|||
return count;
|
||||
}
|
||||
|
||||
static ssize_t mc_write(struct cdev *cdev, const void *_buf, size_t count, ulong offset, ulong flags)
|
||||
static ssize_t mc_write(struct cdev *cdev, const void *_buf, size_t count,
|
||||
loff_t offset, ulong flags)
|
||||
{
|
||||
struct mc34708 *mc34708 = to_mc34708(cdev);
|
||||
const u32 *buf = _buf;
|
||||
|
|
|
@ -78,7 +78,7 @@ int mc9sdz60_set_bits(struct mc9sdz60 *mc9sdz60, enum mc9sdz60_reg reg, u8 mask,
|
|||
}
|
||||
EXPORT_SYMBOL(mc9sdz60_set_bits);
|
||||
|
||||
static ssize_t mc_read(struct cdev *cdev, void *_buf, size_t count, ulong offset, ulong flags)
|
||||
static ssize_t mc_read(struct cdev *cdev, void *_buf, size_t count, loff_t offset, ulong flags)
|
||||
{
|
||||
struct mc9sdz60 *mc9sdz60 = to_mc9sdz60(cdev);
|
||||
u8 *buf = _buf;
|
||||
|
@ -97,7 +97,7 @@ static ssize_t mc_read(struct cdev *cdev, void *_buf, size_t count, ulong offset
|
|||
return count;
|
||||
}
|
||||
|
||||
static ssize_t mc_write(struct cdev *cdev, const void *_buf, size_t count, ulong offset, ulong flags)
|
||||
static ssize_t mc_write(struct cdev *cdev, const void *_buf, size_t count, loff_t offset, ulong flags)
|
||||
{
|
||||
struct mc9sdz60 *mc9sdz60 = to_mc9sdz60(cdev);
|
||||
const u8 *buf = _buf;
|
||||
|
|
|
@ -112,7 +112,7 @@ int twlcore_set_bits(struct twlcore *twlcore, u16 reg, u8 mask, u8 val)
|
|||
EXPORT_SYMBOL(twlcore_set_bits);
|
||||
|
||||
static ssize_t twl_read(struct cdev *cdev, void *_buf, size_t count,
|
||||
ulong offset, ulong flags)
|
||||
loff_t offset, ulong flags)
|
||||
{
|
||||
struct twlcore *priv = to_twlcore(cdev);
|
||||
u8 *buf = _buf;
|
||||
|
@ -131,7 +131,7 @@ static ssize_t twl_read(struct cdev *cdev, void *_buf, size_t count,
|
|||
}
|
||||
|
||||
static ssize_t twl_write(struct cdev *cdev, const void *_buf, size_t count,
|
||||
ulong offset, ulong flags)
|
||||
loff_t offset, ulong flags)
|
||||
{
|
||||
struct twlcore *twlcore = to_twlcore(cdev);
|
||||
const u8 *buf = _buf;
|
||||
|
|
|
@ -31,11 +31,12 @@
|
|||
static LIST_HEAD(mtd_register_hooks);
|
||||
|
||||
static ssize_t mtd_read(struct cdev *cdev, void* buf, size_t count,
|
||||
ulong offset, ulong flags)
|
||||
loff_t _offset, ulong flags)
|
||||
{
|
||||
struct mtd_info *mtd = cdev->priv;
|
||||
size_t retlen;
|
||||
int ret;
|
||||
unsigned long offset = _offset;
|
||||
|
||||
debug("mtd_read: 0x%08lx 0x%08x\n", offset, count);
|
||||
|
||||
|
@ -64,13 +65,14 @@ static int all_ff(const void *buf, int len)
|
|||
}
|
||||
|
||||
static ssize_t mtd_write(struct cdev* cdev, const void *buf, size_t _count,
|
||||
ulong offset, ulong flags)
|
||||
loff_t _offset, ulong flags)
|
||||
{
|
||||
struct mtd_info *mtd = cdev->priv;
|
||||
size_t retlen, now;
|
||||
int ret = 0;
|
||||
void *wrbuf = NULL;
|
||||
size_t count = _count;
|
||||
unsigned long offset = _offset;
|
||||
|
||||
if (NOTALIGNED(offset)) {
|
||||
printf("offset 0x%0lx not page aligned\n", offset);
|
||||
|
@ -123,16 +125,17 @@ int mtd_ioctl(struct cdev *cdev, int request, void *buf)
|
|||
struct mtd_ecc_stats *ecc = buf;
|
||||
#endif
|
||||
struct region_info_user *reg = buf;
|
||||
loff_t *offset = buf;
|
||||
|
||||
switch (request) {
|
||||
case MEMGETBADBLOCK:
|
||||
dev_dbg(cdev->dev, "MEMGETBADBLOCK: 0x%08lx\n", (off_t)buf);
|
||||
ret = mtd->block_isbad(mtd, (off_t)buf);
|
||||
dev_dbg(cdev->dev, "MEMGETBADBLOCK: 0x%08llx\n", *offset);
|
||||
ret = mtd->block_isbad(mtd, *offset);
|
||||
break;
|
||||
#ifdef CONFIG_MTD_WRITE
|
||||
case MEMSETBADBLOCK:
|
||||
dev_dbg(cdev->dev, "MEMSETBADBLOCK: 0x%08lx\n", (off_t)buf);
|
||||
ret = mtd->block_markbad(mtd, (off_t)buf);
|
||||
dev_dbg(cdev->dev, "MEMSETBADBLOCK: 0x%08llx\n", *offset);
|
||||
ret = mtd->block_markbad(mtd, *offset);
|
||||
break;
|
||||
#endif
|
||||
case MEMGETINFO:
|
||||
|
@ -156,9 +159,10 @@ int mtd_ioctl(struct cdev *cdev, int request, void *buf)
|
|||
#endif
|
||||
case MEMGETREGIONINFO:
|
||||
if (cdev->mtd) {
|
||||
unsigned long size = cdev->size;
|
||||
reg->offset = cdev->offset;
|
||||
reg->erasesize = cdev->mtd->erasesize;
|
||||
reg->numblocks = cdev->size/reg->erasesize;
|
||||
reg->numblocks = size / reg->erasesize;
|
||||
reg->regionindex = cdev->mtd->index;
|
||||
}
|
||||
break;
|
||||
|
@ -170,7 +174,7 @@ int mtd_ioctl(struct cdev *cdev, int request, void *buf)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_MTD_WRITE
|
||||
static ssize_t mtd_erase(struct cdev *cdev, size_t count, unsigned long offset)
|
||||
static ssize_t mtd_erase(struct cdev *cdev, size_t count, loff_t offset)
|
||||
{
|
||||
struct mtd_info *mtd = cdev->priv;
|
||||
struct erase_info erase;
|
||||
|
|
|
@ -38,11 +38,12 @@ static struct mtd_info *to_mtd(struct cdev *cdev)
|
|||
}
|
||||
|
||||
static ssize_t mtd_read_oob(struct cdev *cdev, void *buf, size_t count,
|
||||
ulong offset, ulong flags)
|
||||
loff_t _offset, ulong flags)
|
||||
{
|
||||
struct mtd_info *mtd = to_mtd(cdev);
|
||||
struct mtd_oob_ops ops;
|
||||
int ret;
|
||||
unsigned long offset = _offset;
|
||||
|
||||
if (count < mtd->oobsize)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -116,12 +116,13 @@ err:
|
|||
}
|
||||
|
||||
static ssize_t mtdraw_read(struct cdev *cdev, void *buf, size_t count,
|
||||
ulong offset, ulong flags)
|
||||
loff_t _offset, ulong flags)
|
||||
{
|
||||
struct mtd_info *mtd = to_mtd(cdev);
|
||||
ssize_t retlen = 0, ret = 1, toread;
|
||||
ulong numpage;
|
||||
int skip;
|
||||
unsigned long offset = _offset;
|
||||
|
||||
numpage = offset / (mtd->writesize + mtd->oobsize);
|
||||
skip = offset % (mtd->writesize + mtd->oobsize);
|
||||
|
@ -167,13 +168,14 @@ static void mtdraw_fillbuf(struct mtdraw *mtdraw, const void *src, int nbbytes)
|
|||
}
|
||||
|
||||
static ssize_t mtdraw_write(struct cdev *cdev, const void *buf, size_t count,
|
||||
ulong offset, ulong flags)
|
||||
loff_t _offset, ulong flags)
|
||||
{
|
||||
struct mtdraw *mtdraw = to_mtdraw(cdev);
|
||||
struct mtd_info *mtd = to_mtd(cdev);
|
||||
int bsz = mtd->writesize + mtd->oobsize;
|
||||
ulong numpage;
|
||||
size_t retlen = 0, tofill;
|
||||
unsigned long offset = _offset;
|
||||
int ret = 0;
|
||||
|
||||
if (mtdraw->write_fill &&
|
||||
|
@ -220,10 +222,11 @@ static ssize_t mtdraw_write(struct cdev *cdev, const void *buf, size_t count,
|
|||
}
|
||||
}
|
||||
|
||||
static ssize_t mtdraw_erase(struct cdev *cdev, size_t count, ulong offset)
|
||||
static ssize_t mtdraw_erase(struct cdev *cdev, size_t count, loff_t _offset)
|
||||
{
|
||||
struct mtd_info *mtd = to_mtd(cdev);
|
||||
struct erase_info erase;
|
||||
unsigned long offset = _offset;
|
||||
int ret;
|
||||
|
||||
offset = offset / (mtd->writesize + mtd->oobsize) * mtd->writesize;
|
||||
|
|
|
@ -42,9 +42,9 @@ struct nand_bb {
|
|||
|
||||
struct mtd_info_user info;
|
||||
|
||||
size_t raw_size;
|
||||
size_t size;
|
||||
off_t offset;
|
||||
loff_t raw_size;
|
||||
loff_t size;
|
||||
loff_t offset;
|
||||
unsigned long flags;
|
||||
void *writebuf;
|
||||
|
||||
|
@ -54,7 +54,7 @@ struct nand_bb {
|
|||
};
|
||||
|
||||
static ssize_t nand_bb_read(struct cdev *cdev, void *buf, size_t count,
|
||||
unsigned long offset, ulong flags)
|
||||
loff_t offset, ulong flags)
|
||||
{
|
||||
struct nand_bb *bb = cdev->priv;
|
||||
struct cdev *parent = bb->cdev_parent;
|
||||
|
@ -63,18 +63,18 @@ static ssize_t nand_bb_read(struct cdev *cdev, void *buf, size_t count,
|
|||
debug("%s %d %d\n", __func__, offset, count);
|
||||
|
||||
while(count) {
|
||||
ret = cdev_ioctl(parent, MEMGETBADBLOCK, (void *)bb->offset);
|
||||
ret = cdev_ioctl(parent, MEMGETBADBLOCK, &bb->offset);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (ret) {
|
||||
printf("skipping bad block at 0x%08lx\n", bb->offset);
|
||||
printf("skipping bad block at 0x%08llx\n", bb->offset);
|
||||
bb->offset += bb->info.erasesize;
|
||||
continue;
|
||||
}
|
||||
|
||||
now = min(count, (size_t)(bb->info.erasesize -
|
||||
(bb->offset % bb->info.erasesize)));
|
||||
((size_t)bb->offset % bb->info.erasesize)));
|
||||
ret = cdev_read(parent, buf, now, bb->offset, 0);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
@ -96,10 +96,10 @@ static int nand_bb_write_buf(struct nand_bb *bb, size_t count)
|
|||
int ret, now;
|
||||
struct cdev *parent = bb->cdev_parent;
|
||||
void *buf = bb->writebuf;
|
||||
int cur_ofs = bb->offset & ~(BB_WRITEBUF_SIZE - 1);
|
||||
off_t cur_ofs = bb->offset & ~(BB_WRITEBUF_SIZE - 1);
|
||||
|
||||
while (count) {
|
||||
ret = cdev_ioctl(parent, MEMGETBADBLOCK, (void *)cur_ofs);
|
||||
ret = cdev_ioctl(parent, MEMGETBADBLOCK, &cur_ofs);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
@ -123,12 +123,12 @@ static int nand_bb_write_buf(struct nand_bb *bb, size_t count)
|
|||
}
|
||||
|
||||
static ssize_t nand_bb_write(struct cdev *cdev, const void *buf, size_t count,
|
||||
unsigned long offset, ulong flags)
|
||||
loff_t offset, ulong flags)
|
||||
{
|
||||
struct nand_bb *bb = cdev->priv;
|
||||
int bytes = count, now, wroffs, ret;
|
||||
|
||||
debug("%s offset: 0x%08x count: 0x%08x\n", __func__, offset, count);
|
||||
debug("%s offset: 0x%08llx count: 0x%08x\n", __func__, offset, count);
|
||||
|
||||
while (count) {
|
||||
wroffs = bb->offset % BB_WRITEBUF_SIZE;
|
||||
|
@ -152,7 +152,7 @@ static ssize_t nand_bb_write(struct cdev *cdev, const void *buf, size_t count,
|
|||
return bytes;
|
||||
}
|
||||
|
||||
static int nand_bb_erase(struct cdev *cdev, size_t count, unsigned long offset)
|
||||
static int nand_bb_erase(struct cdev *cdev, size_t count, loff_t offset)
|
||||
{
|
||||
struct nand_bb *bb = cdev->priv;
|
||||
|
||||
|
@ -197,11 +197,11 @@ static int nand_bb_close(struct cdev *cdev)
|
|||
|
||||
static int nand_bb_calc_size(struct nand_bb *bb)
|
||||
{
|
||||
ulong pos = 0;
|
||||
loff_t pos = 0;
|
||||
int ret;
|
||||
|
||||
while (pos < bb->raw_size) {
|
||||
ret = cdev_ioctl(bb->cdev_parent, MEMGETBADBLOCK, (void *)pos);
|
||||
ret = cdev_ioctl(bb->cdev_parent, MEMGETBADBLOCK, &pos);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
if (!ret)
|
||||
|
@ -213,7 +213,7 @@ static int nand_bb_calc_size(struct nand_bb *bb)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static off_t nand_bb_lseek(struct cdev *cdev, off_t __offset)
|
||||
static loff_t nand_bb_lseek(struct cdev *cdev, loff_t __offset)
|
||||
{
|
||||
struct nand_bb *bb = cdev->priv;
|
||||
unsigned long raw_pos = 0;
|
||||
|
|
|
@ -12,7 +12,7 @@ struct ubi_volume_cdev_priv {
|
|||
};
|
||||
|
||||
static ssize_t ubi_volume_cdev_read(struct cdev *cdev, void *buf, size_t size,
|
||||
unsigned long offset, unsigned long flags)
|
||||
loff_t offset, unsigned long flags)
|
||||
{
|
||||
struct ubi_volume_cdev_priv *priv = cdev->priv;
|
||||
struct ubi_volume *vol = priv->vol;
|
||||
|
@ -23,7 +23,7 @@ static ssize_t ubi_volume_cdev_read(struct cdev *cdev, void *buf, size_t size,
|
|||
loff_t offp = offset;
|
||||
int usable_leb_size = vol->usable_leb_size;
|
||||
|
||||
printf("%s: %d @ 0x%08lx\n", __func__, size, offset);
|
||||
printf("%s: %d @ 0x%08llx\n", __func__, size, offset);
|
||||
|
||||
len = size > usable_leb_size ? usable_leb_size : size;
|
||||
|
||||
|
@ -56,7 +56,7 @@ static ssize_t ubi_volume_cdev_read(struct cdev *cdev, void *buf, size_t size,
|
|||
}
|
||||
|
||||
static ssize_t ubi_volume_cdev_write(struct cdev* cdev, const void *buf,
|
||||
size_t size, unsigned long offset, unsigned long flags)
|
||||
size_t size, loff_t offset, unsigned long flags)
|
||||
{
|
||||
struct ubi_volume_cdev_priv *priv = cdev->priv;
|
||||
struct ubi_volume *vol = priv->vol;
|
||||
|
@ -121,7 +121,7 @@ static int ubi_volume_cdev_close(struct cdev *cdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static off_t ubi_volume_cdev_lseek(struct cdev *cdev, off_t ofs)
|
||||
static loff_t ubi_volume_cdev_lseek(struct cdev *cdev, loff_t ofs)
|
||||
{
|
||||
struct ubi_volume_cdev_priv *priv = cdev->priv;
|
||||
|
||||
|
|
|
@ -180,7 +180,7 @@ int miidev_print_status(struct mii_device *mdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static ssize_t miidev_read(struct cdev *cdev, void *_buf, size_t count, ulong offset, ulong flags)
|
||||
static ssize_t miidev_read(struct cdev *cdev, void *_buf, size_t count, loff_t offset, ulong flags)
|
||||
{
|
||||
int i = count;
|
||||
uint16_t *buf = _buf;
|
||||
|
@ -196,7 +196,7 @@ static ssize_t miidev_read(struct cdev *cdev, void *_buf, size_t count, ulong of
|
|||
return count;
|
||||
}
|
||||
|
||||
static ssize_t miidev_write(struct cdev *cdev, const void *_buf, size_t count, ulong offset, ulong flags)
|
||||
static ssize_t miidev_write(struct cdev *cdev, const void *_buf, size_t count, loff_t offset, ulong flags)
|
||||
{
|
||||
int i = count;
|
||||
const uint16_t *buf = _buf;
|
||||
|
|
|
@ -82,9 +82,9 @@ static void flash_add_byte (struct flash_info *info, cfiword_t * cword, uchar c)
|
|||
return;
|
||||
}
|
||||
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
#ifdef __BIG_ENDIAN
|
||||
*cword = (*cword << 8) | c;
|
||||
#else
|
||||
#elif defined __LITTLE_ENDIAN
|
||||
|
||||
if (bankwidth_is_2(info))
|
||||
*cword = (*cword >> 8) | (u16)c << 8;
|
||||
|
@ -92,6 +92,8 @@ static void flash_add_byte (struct flash_info *info, cfiword_t * cword, uchar c)
|
|||
*cword = (*cword >> 8) | (u32)c << 24;
|
||||
else if (bankwidth_is_8(info))
|
||||
*cword = (*cword >> 8) | (u64)c << 56;
|
||||
#else
|
||||
#error "could not determine byte order"
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -167,7 +169,7 @@ static void flash_printqry (struct cfi_qry *qry)
|
|||
uchar flash_read_uchar (struct flash_info *info, uint offset)
|
||||
{
|
||||
uchar *cp = flash_make_addr(info, 0, offset);
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
#if defined __LITTLE_ENDIAN
|
||||
return flash_read8(cp);
|
||||
#else
|
||||
return flash_read8(cp + info->portwidth - 1);
|
||||
|
@ -195,7 +197,7 @@ static ulong flash_read_long (struct flash_info *info, flash_sect_t sect, uint o
|
|||
debug ("addr[%x] = 0x%x\n", x, flash_read8(addr + x));
|
||||
}
|
||||
#endif
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
#if defined __LITTLE_ENDIAN
|
||||
retval = ((flash_read8(addr) << 16) |
|
||||
(flash_read8(addr + info->portwidth) << 24) |
|
||||
(flash_read8(addr + 2 * info->portwidth)) |
|
||||
|
@ -456,7 +458,7 @@ flash_sect_t find_sector (struct flash_info *info, ulong addr)
|
|||
return sector;
|
||||
}
|
||||
|
||||
static int __cfi_erase(struct cdev *cdev, size_t count, unsigned long offset,
|
||||
static int __cfi_erase(struct cdev *cdev, size_t count, loff_t offset,
|
||||
int verbose)
|
||||
{
|
||||
struct flash_info *finfo = (struct flash_info *)cdev->priv;
|
||||
|
@ -491,7 +493,7 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int cfi_erase(struct cdev *cdev, size_t count, unsigned long offset)
|
||||
static int cfi_erase(struct cdev *cdev, size_t count, loff_t offset)
|
||||
{
|
||||
return __cfi_erase(cdev, count, offset, 1);
|
||||
}
|
||||
|
@ -628,7 +630,7 @@ static int flash_real_protect (struct flash_info *info, long sector, int prot)
|
|||
return retcode;
|
||||
}
|
||||
|
||||
static int cfi_protect(struct cdev *cdev, size_t count, unsigned long offset, int prot)
|
||||
static int cfi_protect(struct cdev *cdev, size_t count, loff_t offset, int prot)
|
||||
{
|
||||
struct flash_info *finfo = (struct flash_info *)cdev->priv;
|
||||
unsigned long start, end;
|
||||
|
@ -651,7 +653,7 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static ssize_t cfi_write(struct cdev *cdev, const void *buf, size_t count, unsigned long offset, ulong flags)
|
||||
static ssize_t cfi_write(struct cdev *cdev, const void *buf, size_t count, loff_t offset, ulong flags)
|
||||
{
|
||||
struct flash_info *finfo = (struct flash_info *)cdev->priv;
|
||||
int ret;
|
||||
|
|
|
@ -194,13 +194,14 @@ static int erase_sector(struct m25p *flash, u32 offset)
|
|||
* Erase an address range on the flash chip. The address range may extend
|
||||
* one or more erase sectors. Return an error is there is a problem erasing.
|
||||
*/
|
||||
static ssize_t m25p80_erase(struct cdev *cdev, size_t count, unsigned long offset)
|
||||
static ssize_t m25p80_erase(struct cdev *cdev, size_t count, loff_t offset)
|
||||
{
|
||||
struct m25p *flash = cdev->priv;
|
||||
u32 addr, len;
|
||||
u32 start_sector;
|
||||
u32 end_sector;
|
||||
u32 progress = 0;
|
||||
int eraseshift = ffs(flash->erasesize) - 1;
|
||||
|
||||
dev_dbg(&flash->spi->dev, "%s %s 0x%llx, len %lld\n",
|
||||
__func__, "at", (long long)offset, (long long)count);
|
||||
|
@ -212,8 +213,8 @@ static ssize_t m25p80_erase(struct cdev *cdev, size_t count, unsigned long offse
|
|||
addr = offset;
|
||||
len = count;
|
||||
|
||||
start_sector = offset / flash->erasesize;
|
||||
end_sector = (offset + count - 1) / flash->erasesize;
|
||||
start_sector = offset >> eraseshift;
|
||||
end_sector = (offset + count - 1) >> eraseshift;
|
||||
init_progression_bar(end_sector - start_sector + 1);
|
||||
|
||||
/* whole-chip erase? */
|
||||
|
@ -250,7 +251,8 @@ static ssize_t m25p80_erase(struct cdev *cdev, size_t count, unsigned long offse
|
|||
return 0;
|
||||
}
|
||||
|
||||
ssize_t m25p80_read(struct cdev *cdev, void *buf, size_t count, ulong offset, ulong flags)
|
||||
ssize_t m25p80_read(struct cdev *cdev, void *buf, size_t count, loff_t offset,
|
||||
ulong flags)
|
||||
{
|
||||
struct m25p *flash = cdev->priv;
|
||||
struct spi_transfer t[2];
|
||||
|
@ -302,7 +304,8 @@ ssize_t m25p80_read(struct cdev *cdev, void *buf, size_t count, ulong offset, ul
|
|||
return retlen;
|
||||
}
|
||||
|
||||
ssize_t m25p80_write(struct cdev *cdev, const void *buf, size_t count, ulong offset, ulong flags)
|
||||
ssize_t m25p80_write(struct cdev *cdev, const void *buf, size_t count,
|
||||
loff_t offset, ulong flags)
|
||||
{
|
||||
struct m25p *flash = cdev->priv;
|
||||
struct spi_transfer t[2];
|
||||
|
@ -381,7 +384,8 @@ ssize_t m25p80_write(struct cdev *cdev, const void *buf, size_t count, ulong off
|
|||
return retlen;
|
||||
}
|
||||
#ifdef CONFIG_MTD_SST25L
|
||||
ssize_t sst_write(struct cdev *cdev, const void *buf, size_t count, ulong offset, ulong flags)
|
||||
ssize_t sst_write(struct cdev *cdev, const void *buf, size_t count, loff_t offset,
|
||||
ulong flags)
|
||||
{
|
||||
struct m25p *flash = cdev->priv;
|
||||
struct spi_transfer t[2];
|
||||
|
|
|
@ -358,7 +358,7 @@ static int cramfs_read(struct device_d *_dev, FILE *f, void *buf, size_t size)
|
|||
return outsize;
|
||||
}
|
||||
|
||||
static off_t cramfs_lseek(struct device_d *dev, FILE *f, off_t pos)
|
||||
static loff_t cramfs_lseek(struct device_d *dev, FILE *f, loff_t pos)
|
||||
{
|
||||
f->pos = pos;
|
||||
return f->pos;
|
||||
|
|
|
@ -96,7 +96,7 @@ void cdev_close(struct cdev *cdev)
|
|||
cdev->ops->close(cdev);
|
||||
}
|
||||
|
||||
ssize_t cdev_read(struct cdev *cdev, void *buf, size_t count, ulong offset, ulong flags)
|
||||
ssize_t cdev_read(struct cdev *cdev, void *buf, size_t count, loff_t offset, ulong flags)
|
||||
{
|
||||
if (!cdev->ops->read)
|
||||
return -ENOSYS;
|
||||
|
@ -104,7 +104,7 @@ ssize_t cdev_read(struct cdev *cdev, void *buf, size_t count, ulong offset, ulon
|
|||
return cdev->ops->read(cdev, buf, count, cdev->offset +offset, flags);
|
||||
}
|
||||
|
||||
ssize_t cdev_write(struct cdev *cdev, const void *buf, size_t count, ulong offset, ulong flags)
|
||||
ssize_t cdev_write(struct cdev *cdev, const void *buf, size_t count, loff_t offset, ulong flags)
|
||||
{
|
||||
if (!cdev->ops->write)
|
||||
return -ENOSYS;
|
||||
|
@ -123,15 +123,15 @@ int cdev_flush(struct cdev *cdev)
|
|||
static int partition_ioctl(struct cdev *cdev, int request, void *buf)
|
||||
{
|
||||
int ret = 0;
|
||||
size_t offset;
|
||||
loff_t offset, *_buf = buf;
|
||||
struct mtd_info_user *user = buf;
|
||||
|
||||
switch (request) {
|
||||
case MEMSETBADBLOCK:
|
||||
case MEMGETBADBLOCK:
|
||||
offset = (off_t)buf;
|
||||
offset = *_buf;
|
||||
offset += cdev->offset;
|
||||
ret = cdev->ops->ioctl(cdev, request, (void *)offset);
|
||||
ret = cdev->ops->ioctl(cdev, request, &offset);
|
||||
break;
|
||||
case MEMGETINFO:
|
||||
if (cdev->mtd) {
|
||||
|
@ -165,10 +165,11 @@ static int partition_ioctl(struct cdev *cdev, int request, void *buf)
|
|||
case MEMGETREGIONINFO:
|
||||
if (cdev->mtd) {
|
||||
struct region_info_user *reg = buf;
|
||||
int erasesize_shift = ffs(cdev->mtd->erasesize) - 1;
|
||||
|
||||
reg->offset = cdev->offset;
|
||||
reg->erasesize = cdev->mtd->erasesize;
|
||||
reg->numblocks = cdev->size/reg->erasesize;
|
||||
reg->numblocks = cdev->size >> erasesize_shift;
|
||||
reg->regionindex = cdev->mtd->index;
|
||||
}
|
||||
break;
|
||||
|
@ -191,7 +192,7 @@ int cdev_ioctl(struct cdev *cdev, int request, void *buf)
|
|||
return cdev->ops->ioctl(cdev, request, buf);
|
||||
}
|
||||
|
||||
int cdev_erase(struct cdev *cdev, size_t count, unsigned long offset)
|
||||
int cdev_erase(struct cdev *cdev, size_t count, loff_t offset)
|
||||
{
|
||||
if (!cdev->ops->erase)
|
||||
return -ENOSYS;
|
||||
|
@ -226,7 +227,7 @@ int devfs_remove(struct cdev *cdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int devfs_add_partition(const char *devname, unsigned long offset, size_t size,
|
||||
int devfs_add_partition(const char *devname, loff_t offset, loff_t size,
|
||||
int flags, const char *name)
|
||||
{
|
||||
struct cdev *cdev, *new;
|
||||
|
|
10
fs/devfs.c
10
fs/devfs.c
|
@ -52,10 +52,10 @@ static int devfs_write(struct device_d *_dev, FILE *f, const void *buf, size_t s
|
|||
return cdev_write(cdev, buf, size, f->pos, f->flags);
|
||||
}
|
||||
|
||||
static off_t devfs_lseek(struct device_d *_dev, FILE *f, off_t pos)
|
||||
static loff_t devfs_lseek(struct device_d *_dev, FILE *f, loff_t pos)
|
||||
{
|
||||
struct cdev *cdev = f->inode;
|
||||
off_t ret = -1;
|
||||
loff_t ret = -1;
|
||||
|
||||
if (cdev->ops->lseek)
|
||||
ret = cdev->ops->lseek(cdev, pos + cdev->offset);
|
||||
|
@ -66,7 +66,7 @@ static off_t devfs_lseek(struct device_d *_dev, FILE *f, off_t pos)
|
|||
return ret - cdev->offset;
|
||||
}
|
||||
|
||||
static int devfs_erase(struct device_d *_dev, FILE *f, size_t count, unsigned long offset)
|
||||
static int devfs_erase(struct device_d *_dev, FILE *f, size_t count, loff_t offset)
|
||||
{
|
||||
struct cdev *cdev = f->inode;
|
||||
|
||||
|
@ -79,7 +79,7 @@ static int devfs_erase(struct device_d *_dev, FILE *f, size_t count, unsigned lo
|
|||
return cdev->ops->erase(cdev, count, offset + cdev->offset);
|
||||
}
|
||||
|
||||
static int devfs_protect(struct device_d *_dev, FILE *f, size_t count, unsigned long offset, int prot)
|
||||
static int devfs_protect(struct device_d *_dev, FILE *f, size_t count, loff_t offset, int prot)
|
||||
{
|
||||
struct cdev *cdev = f->inode;
|
||||
|
||||
|
@ -100,7 +100,7 @@ static int devfs_memmap(struct device_d *_dev, FILE *f, void **map, int flags)
|
|||
ret = cdev->ops->memmap(cdev, map, flags);
|
||||
|
||||
if (!ret)
|
||||
*map = (void *)((unsigned long)*map + cdev->offset);
|
||||
*map = (void *)((unsigned long)*map + (unsigned long)cdev->offset);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -49,7 +49,7 @@ DRESULT disk_read(FATFS *fat, BYTE *buf, DWORD sector, BYTE count)
|
|||
|
||||
debug("%s: sector: %ld count: %d\n", __func__, sector, count);
|
||||
|
||||
ret = cdev_read(priv->cdev, buf, count << 9, sector * 512, 0);
|
||||
ret = cdev_read(priv->cdev, buf, count << 9, (loff_t)sector * 512, 0);
|
||||
if (ret != count << 9)
|
||||
return ret;
|
||||
|
||||
|
@ -64,7 +64,7 @@ DRESULT disk_write(FATFS *fat, const BYTE *buf, DWORD sector, BYTE count)
|
|||
debug("%s: buf: %p sector: %ld count: %d\n",
|
||||
__func__, buf, sector, count);
|
||||
|
||||
ret = cdev_write(priv->cdev, buf, count << 9, sector * 512, 0);
|
||||
ret = cdev_write(priv->cdev, buf, count << 9, (loff_t)sector * 512, 0);
|
||||
if (ret != count << 9)
|
||||
return ret;
|
||||
|
||||
|
@ -271,7 +271,7 @@ static int fat_read(struct device_d *_dev, FILE *f, void *buf, size_t insize)
|
|||
return outsize;
|
||||
}
|
||||
|
||||
static off_t fat_lseek(struct device_d *dev, FILE *f, off_t pos)
|
||||
static loff_t fat_lseek(struct device_d *dev, FILE *f, loff_t pos)
|
||||
{
|
||||
FIL *f_file = f->inode;
|
||||
int ret;
|
||||
|
|
12
fs/fs.c
12
fs/fs.c
|
@ -692,12 +692,12 @@ int flush(int fd)
|
|||
return ret;
|
||||
}
|
||||
|
||||
off_t lseek(int fildes, off_t offset, int whence)
|
||||
loff_t lseek(int fildes, loff_t offset, int whence)
|
||||
{
|
||||
struct device_d *dev;
|
||||
struct fs_driver_d *fsdrv;
|
||||
FILE *f = &files[fildes];
|
||||
off_t pos;
|
||||
loff_t pos;
|
||||
int ret;
|
||||
|
||||
if (check_fd(fildes))
|
||||
|
@ -1243,7 +1243,7 @@ static void memcpy_sz(void *_dst, const void *_src, ulong count, ulong rwsize)
|
|||
}
|
||||
}
|
||||
|
||||
ssize_t mem_read(struct cdev *cdev, void *buf, size_t count, ulong offset, ulong flags)
|
||||
ssize_t mem_read(struct cdev *cdev, void *buf, size_t count, loff_t offset, ulong flags)
|
||||
{
|
||||
ulong size;
|
||||
struct device_d *dev;
|
||||
|
@ -1252,13 +1252,13 @@ ssize_t mem_read(struct cdev *cdev, void *buf, size_t count, ulong offset, ulong
|
|||
return -1;
|
||||
dev = cdev->dev;
|
||||
|
||||
size = min((ulong)count, dev->resource[0].size - offset);
|
||||
size = min((loff_t)count, dev->resource[0].size - offset);
|
||||
memcpy_sz(buf, dev_get_mem_region(dev, 0) + offset, size, flags & O_RWSIZE_MASK);
|
||||
return size;
|
||||
}
|
||||
EXPORT_SYMBOL(mem_read);
|
||||
|
||||
ssize_t mem_write(struct cdev *cdev, const void *buf, size_t count, ulong offset, ulong flags)
|
||||
ssize_t mem_write(struct cdev *cdev, const void *buf, size_t count, loff_t offset, ulong flags)
|
||||
{
|
||||
ulong size;
|
||||
struct device_d *dev;
|
||||
|
@ -1267,7 +1267,7 @@ ssize_t mem_write(struct cdev *cdev, const void *buf, size_t count, ulong offset
|
|||
return -1;
|
||||
dev = cdev->dev;
|
||||
|
||||
size = min((ulong)count, dev->resource[0].size - offset);
|
||||
size = min((loff_t)count, dev->resource[0].size - offset);
|
||||
memcpy_sz(dev_get_mem_region(dev, 0) + offset, buf, size, flags & O_RWSIZE_MASK);
|
||||
return size;
|
||||
}
|
||||
|
|
2
fs/nfs.c
2
fs/nfs.c
|
@ -805,7 +805,7 @@ static int nfs_read(struct device_d *dev, FILE *file, void *buf, size_t insize)
|
|||
return outsize;
|
||||
}
|
||||
|
||||
static off_t nfs_lseek(struct device_d *dev, FILE *file, off_t pos)
|
||||
static loff_t nfs_lseek(struct device_d *dev, FILE *file, loff_t pos)
|
||||
{
|
||||
struct file_priv *priv = file->inode;
|
||||
|
||||
|
|
|
@ -428,7 +428,7 @@ static int ramfs_write(struct device_d *_dev, FILE *f, const void *buf, size_t i
|
|||
return insize;
|
||||
}
|
||||
|
||||
static off_t ramfs_lseek(struct device_d *dev, FILE *f, off_t pos)
|
||||
static loff_t ramfs_lseek(struct device_d *dev, FILE *f, loff_t pos)
|
||||
{
|
||||
f->pos = pos;
|
||||
return f->pos;
|
||||
|
|
|
@ -569,7 +569,7 @@ static int tftp_read(struct device_d *dev, FILE *f, void *buf, size_t insize)
|
|||
return outsize;
|
||||
}
|
||||
|
||||
static off_t tftp_lseek(struct device_d *dev, FILE *f, off_t pos)
|
||||
static loff_t tftp_lseek(struct device_d *dev, FILE *f, loff_t pos)
|
||||
{
|
||||
/* not implemented in tftp protocol */
|
||||
return -ENOSYS;
|
||||
|
|
|
@ -34,6 +34,24 @@
|
|||
#include <linux/stddef.h>
|
||||
#include <asm/common.h>
|
||||
|
||||
/*
|
||||
* sanity check. The Linux Kernel defines only one of __LITTLE_ENDIAN and
|
||||
* __BIG_ENDIAN. Endianess can then be tested with #ifdef __xx_ENDIAN. Userspace
|
||||
* always defined both __LITTLE_ENDIAN and __BIG_ENDIAN and byteorder can then
|
||||
* be tested with #if __BYTE_ORDER == __xx_ENDIAN.
|
||||
*
|
||||
* As we tend to use a lot of Kernel code in barebox we use the kernel way of
|
||||
* determing the byte order. Make sure here that architecture code properly
|
||||
* defines it.
|
||||
*/
|
||||
#include <asm/byteorder.h>
|
||||
#if defined __LITTLE_ENDIAN && defined __BIG_ENDIAN
|
||||
#error "both __LITTLE_ENDIAN and __BIG_ENDIAN are defined"
|
||||
#endif
|
||||
#if !defined __LITTLE_ENDIAN && !defined __BIG_ENDIAN
|
||||
#error "None of __LITTLE_ENDIAN and __BIG_ENDIAN are defined"
|
||||
#endif
|
||||
|
||||
#define pr_info(fmt, arg...) printf(fmt, ##arg)
|
||||
#define pr_notice(fmt, arg...) printf(fmt, ##arg)
|
||||
#define pr_err(fmt, arg...) printf(fmt, ##arg)
|
||||
|
@ -138,10 +156,11 @@ struct memarea_info {
|
|||
unsigned long flags;
|
||||
};
|
||||
|
||||
int parse_area_spec(const char *str, ulong *start, ulong *size);
|
||||
int parse_area_spec(const char *str, loff_t *start, loff_t *size);
|
||||
|
||||
/* Just like simple_strtoul(), but this one honors a K/M/G suffix */
|
||||
unsigned long strtoul_suffix(const char *str, char **endp, int base);
|
||||
unsigned long long strtoull_suffix(const char *str, char **endp, int base);
|
||||
|
||||
void start_barebox(void);
|
||||
void shutdown_barebox(void);
|
||||
|
@ -210,7 +229,7 @@ int run_shell(void);
|
|||
#define PAGE_SIZE 4096
|
||||
#define PAGE_SHIFT 12
|
||||
|
||||
int memory_display(char *addr, ulong offs, ulong nbytes, int size);
|
||||
int memory_display(char *addr, loff_t offs, ulong nbytes, int size);
|
||||
|
||||
extern const char version_string[];
|
||||
#ifdef CONFIG_BANNER
|
||||
|
|
|
@ -84,11 +84,7 @@ struct cramfs_super {
|
|||
| CRAMFS_FLAG_WRONG_SIGNATURE \
|
||||
| CRAMFS_FLAG_SHIFTED_ROOT_OFFSET )
|
||||
|
||||
#ifndef __BYTE_ORDER
|
||||
#error "No byte order defined in __BYTE_ORDER"
|
||||
#endif
|
||||
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
#ifdef __LITTLE_ENDIAN
|
||||
#define CRAMFS_16(x) (x)
|
||||
#define CRAMFS_24(x) (x)
|
||||
#define CRAMFS_32(x) (x)
|
||||
|
@ -96,7 +92,7 @@ struct cramfs_super {
|
|||
#define CRAMFS_GET_OFFSET(x) ((x)->offset)
|
||||
#define CRAMFS_SET_OFFSET(x,y) ((x)->offset = (y))
|
||||
#define CRAMFS_SET_NAMELEN(x,y) ((x)->namelen = (y))
|
||||
#elif __BYTE_ORDER ==__BIG_ENDIAN
|
||||
#elif defined __BIG_ENDIAN
|
||||
#ifdef __KERNEL__
|
||||
#define CRAMFS_16(x) swab16(x)
|
||||
#define CRAMFS_24(x) ((swab32(x)) >> 8)
|
||||
|
|
|
@ -301,8 +301,8 @@ struct cdev;
|
|||
int dev_protect(struct device_d *dev, size_t count, unsigned long offset, int prot);
|
||||
|
||||
/* These are used by drivers which work with direct memory accesses */
|
||||
ssize_t mem_read(struct cdev *cdev, void *buf, size_t count, ulong offset, ulong flags);
|
||||
ssize_t mem_write(struct cdev *cdev, const void *buf, size_t count, ulong offset, ulong flags);
|
||||
ssize_t mem_read(struct cdev *cdev, void *buf, size_t count, loff_t offset, ulong flags);
|
||||
ssize_t mem_write(struct cdev *cdev, const void *buf, size_t count, loff_t offset, ulong flags);
|
||||
int mem_memmap(struct cdev *cdev, void **map, int flags);
|
||||
|
||||
/* Use this if you have nothing to do in your drivers probe function */
|
||||
|
@ -316,7 +316,7 @@ void devices_shutdown(void);
|
|||
int generic_memmap_ro(struct cdev *dev, void **map, int flags);
|
||||
int generic_memmap_rw(struct cdev *dev, void **map, int flags);
|
||||
|
||||
static inline off_t dev_lseek_default(struct cdev *cdev, off_t ofs)
|
||||
static inline loff_t dev_lseek_default(struct cdev *cdev, loff_t ofs)
|
||||
{
|
||||
return ofs;
|
||||
}
|
||||
|
@ -373,18 +373,18 @@ extern struct bus_type platform_bus;
|
|||
|
||||
struct file_operations {
|
||||
/*! Called in response of reading from this device. Required */
|
||||
ssize_t (*read)(struct cdev*, void* buf, size_t count, ulong offset, ulong flags);
|
||||
ssize_t (*read)(struct cdev*, void* buf, size_t count, loff_t offset, ulong flags);
|
||||
|
||||
/*! Called in response of write to this device. Required */
|
||||
ssize_t (*write)(struct cdev*, const void* buf, size_t count, ulong offset, ulong flags);
|
||||
ssize_t (*write)(struct cdev*, const void* buf, size_t count, loff_t offset, ulong flags);
|
||||
|
||||
int (*ioctl)(struct cdev*, int, void *);
|
||||
off_t (*lseek)(struct cdev*, off_t);
|
||||
loff_t (*lseek)(struct cdev*, loff_t);
|
||||
int (*open)(struct cdev*, unsigned long flags);
|
||||
int (*close)(struct cdev*);
|
||||
int (*flush)(struct cdev*);
|
||||
int (*erase)(struct cdev*, size_t count, unsigned long offset);
|
||||
int (*protect)(struct cdev*, size_t count, unsigned long offset, int prot);
|
||||
int (*erase)(struct cdev*, size_t count, loff_t offset);
|
||||
int (*protect)(struct cdev*, size_t count, loff_t offset, int prot);
|
||||
int (*memmap)(struct cdev*, void **map, int flags);
|
||||
};
|
||||
|
||||
|
@ -395,8 +395,8 @@ struct cdev {
|
|||
struct list_head list;
|
||||
struct list_head devices_list;
|
||||
char *name;
|
||||
unsigned long offset;
|
||||
size_t size;
|
||||
loff_t offset;
|
||||
loff_t size;
|
||||
unsigned int flags;
|
||||
int open;
|
||||
struct mtd_info *mtd;
|
||||
|
@ -409,16 +409,16 @@ struct cdev *cdev_by_name(const char *filename);
|
|||
struct cdev *cdev_open(const char *name, unsigned long flags);
|
||||
void cdev_close(struct cdev *cdev);
|
||||
int cdev_flush(struct cdev *cdev);
|
||||
ssize_t cdev_read(struct cdev *cdev, void *buf, size_t count, ulong offset, ulong flags);
|
||||
ssize_t cdev_write(struct cdev *cdev, const void *buf, size_t count, ulong offset, ulong flags);
|
||||
ssize_t cdev_read(struct cdev *cdev, void *buf, size_t count, loff_t offset, ulong flags);
|
||||
ssize_t cdev_write(struct cdev *cdev, const void *buf, size_t count, loff_t offset, ulong flags);
|
||||
int cdev_ioctl(struct cdev *cdev, int cmd, void *buf);
|
||||
int cdev_erase(struct cdev *cdev, size_t count, unsigned long offset);
|
||||
int cdev_erase(struct cdev *cdev, size_t count, loff_t offset);
|
||||
|
||||
#define DEVFS_PARTITION_FIXED (1 << 0)
|
||||
#define DEVFS_PARTITION_READONLY (1 << 1)
|
||||
#define DEVFS_IS_PARTITION (1 << 2)
|
||||
|
||||
int devfs_add_partition(const char *devname, unsigned long offset, size_t size,
|
||||
int devfs_add_partition(const char *devname, loff_t offset, loff_t size,
|
||||
int flags, const char *name);
|
||||
int devfs_del_partition(const char *name);
|
||||
|
||||
|
|
|
@ -34,11 +34,25 @@ struct envfs_super {
|
|||
uint32_t sb_crc; /* crc for the superblock */
|
||||
};
|
||||
|
||||
#ifndef __BYTE_ORDER
|
||||
#error "No byte order defined in __BYTE_ORDER"
|
||||
#ifdef __BAREBOX__
|
||||
# ifdef __LITTLE_ENDIAN
|
||||
# define ENVFS_ORDER_LITTLE
|
||||
# elif defined __BIG_ENDIAN
|
||||
# define ENVFS_ORDER_BIG
|
||||
# else
|
||||
# error "could not determine byte order"
|
||||
# endif
|
||||
#else
|
||||
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
# define ENVFS_ORDER_LITTLE
|
||||
# elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
# define ENVFS_ORDER_BIG
|
||||
# else
|
||||
# error "could not determine byte order"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
#ifdef ENVFS_ORDER_LITTLE
|
||||
#define ENVFS_16(x) (x)
|
||||
#define ENVFS_24(x) (x)
|
||||
#define ENVFS_32(x) (x)
|
||||
|
@ -46,7 +60,7 @@ struct envfs_super {
|
|||
#define ENVFS_GET_OFFSET(x) ((x)->offset)
|
||||
#define ENVFS_SET_OFFSET(x,y) ((x)->offset = (y))
|
||||
#define ENVFS_SET_NAMELEN(x,y) ((x)->namelen = (y))
|
||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
#elif defined ENVFS_ORDER_BIG
|
||||
#ifdef __KERNEL__
|
||||
#define ENVFS_16(x) swab16(x)
|
||||
#define ENVFS_24(x) ((swab32(x)) >> 8)
|
||||
|
|
12
include/fs.h
12
include/fs.h
|
@ -23,8 +23,8 @@ typedef struct dir {
|
|||
|
||||
typedef struct filep {
|
||||
struct device_d *dev; /* The device this FILE belongs to */
|
||||
ulong pos; /* current position in stream */
|
||||
ulong size; /* The size of this inode */
|
||||
loff_t pos; /* current position in stream */
|
||||
loff_t size; /* The size of this inode */
|
||||
ulong flags; /* the O_* flags from open */
|
||||
|
||||
void *inode; /* private to the filesystem driver */
|
||||
|
@ -54,7 +54,7 @@ struct fs_driver_d {
|
|||
int (*read)(struct device_d *dev, FILE *f, void *buf, size_t size);
|
||||
int (*write)(struct device_d *dev, FILE *f, const void *buf, size_t size);
|
||||
int (*flush)(struct device_d *dev, FILE *f);
|
||||
off_t (*lseek)(struct device_d *dev, FILE *f, off_t pos);
|
||||
loff_t (*lseek)(struct device_d *dev, FILE *f, loff_t pos);
|
||||
|
||||
struct dir* (*opendir)(struct device_d *dev, const char *pathname);
|
||||
struct dirent* (*readdir)(struct device_d *dev, struct dir *dir);
|
||||
|
@ -63,9 +63,9 @@ struct fs_driver_d {
|
|||
|
||||
int (*ioctl)(struct device_d *dev, FILE *f, int request, void *buf);
|
||||
int (*erase)(struct device_d *dev, FILE *f, size_t count,
|
||||
unsigned long offset);
|
||||
loff_t offset);
|
||||
int (*protect)(struct device_d *dev, FILE *f, size_t count,
|
||||
unsigned long offset, int prot);
|
||||
loff_t offset, int prot);
|
||||
|
||||
int (*memmap)(struct device_d *dev, FILE *f, void **map, int flags);
|
||||
|
||||
|
@ -109,7 +109,7 @@ ssize_t write(int fd, const void *buf, size_t count);
|
|||
#define SEEK_CUR 2
|
||||
#define SEEK_END 3
|
||||
|
||||
off_t lseek(int fildes, off_t offset, int whence);
|
||||
loff_t lseek(int fildes, loff_t offset, int whence);
|
||||
int mkdir (const char *pathname, mode_t mode);
|
||||
|
||||
/* Create a directory and its parents */
|
||||
|
|
|
@ -78,13 +78,6 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#ifndef __LITTLE_ENDIAN
|
||||
#define __LITTLE_ENDIAN 1234
|
||||
#endif
|
||||
#ifndef __BIG_ENDIAN
|
||||
#define __BIG_ENDIAN 4321
|
||||
#endif
|
||||
|
||||
#if defined(__KERNEL__)
|
||||
/*
|
||||
* inside the kernel, we can use nicknames;
|
||||
|
|
|
@ -52,7 +52,7 @@ struct stat {
|
|||
unsigned short st_gid;
|
||||
unsigned short st_rdev;
|
||||
unsigned short __pad2;
|
||||
unsigned long st_size;
|
||||
loff_t st_size;
|
||||
unsigned long st_blksize;
|
||||
unsigned long st_blocks;
|
||||
unsigned long st_atime;
|
||||
|
|
|
@ -8,7 +8,7 @@ struct partition {
|
|||
|
||||
int flags;
|
||||
|
||||
unsigned long offset;
|
||||
loff_t offset;
|
||||
|
||||
struct device_d *physdev;
|
||||
struct device_d device;
|
||||
|
|
|
@ -270,12 +270,14 @@ void usb_rescan(void);
|
|||
((x_ & 0xFF000000UL) >> 24)); \
|
||||
})
|
||||
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
#ifdef __LITTLE_ENDIAN
|
||||
# define swap_16(x) (x)
|
||||
# define swap_32(x) (x)
|
||||
#else
|
||||
#elif defined BIG_ENDIAN
|
||||
# define swap_16(x) __swap_16(x)
|
||||
# define swap_32(x) __swap_32(x)
|
||||
#else
|
||||
#error "could not determine byte order"
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
24
lib/misc.c
24
lib/misc.c
|
@ -27,15 +27,15 @@
|
|||
#include <linux/ctype.h>
|
||||
|
||||
/*
|
||||
* Like simple_strtoul() but handles an optional G, M, K or k
|
||||
* Like simple_strtoull() but handles an optional G, M, K or k
|
||||
* suffix for Gigabyte, Megabyte or Kilobyte
|
||||
*/
|
||||
unsigned long strtoul_suffix(const char *str, char **endp, int base)
|
||||
unsigned long long strtoull_suffix(const char *str, char **endp, int base)
|
||||
{
|
||||
unsigned long val;
|
||||
unsigned long long val;
|
||||
char *end;
|
||||
|
||||
val = simple_strtoul(str, &end, base);
|
||||
val = simple_strtoull(str, &end, base);
|
||||
|
||||
switch (*end) {
|
||||
case 'G':
|
||||
|
@ -55,6 +55,12 @@ unsigned long strtoul_suffix(const char *str, char **endp, int base)
|
|||
|
||||
return val;
|
||||
}
|
||||
EXPORT_SYMBOL(strtoull_suffix);
|
||||
|
||||
unsigned long strtoul_suffix(const char *str, char **endp, int base)
|
||||
{
|
||||
return strtoull_suffix(str, endp, base);
|
||||
}
|
||||
EXPORT_SYMBOL(strtoul_suffix);
|
||||
|
||||
/*
|
||||
|
@ -69,15 +75,15 @@ EXPORT_SYMBOL(strtoul_suffix);
|
|||
* 0x1000 -> start = 0x1000, size = ~0
|
||||
* 1M+1k -> start = 0x100000, size = 0x400
|
||||
*/
|
||||
int parse_area_spec(const char *str, ulong *start, ulong *size)
|
||||
int parse_area_spec(const char *str, loff_t *start, loff_t *size)
|
||||
{
|
||||
char *endp;
|
||||
ulong end;
|
||||
loff_t end;
|
||||
|
||||
if (!isdigit(*str))
|
||||
return -1;
|
||||
|
||||
*start = strtoul_suffix(str, &endp, 0);
|
||||
*start = strtoull_suffix(str, &endp, 0);
|
||||
|
||||
str = endp;
|
||||
|
||||
|
@ -89,7 +95,7 @@ int parse_area_spec(const char *str, ulong *start, ulong *size)
|
|||
|
||||
if (*str == '-') {
|
||||
/* beginning and end given */
|
||||
end = strtoul_suffix(str + 1, NULL, 0);
|
||||
end = strtoull_suffix(str + 1, NULL, 0);
|
||||
if (end < *start) {
|
||||
printf("end < start\n");
|
||||
return -1;
|
||||
|
@ -100,7 +106,7 @@ int parse_area_spec(const char *str, ulong *start, ulong *size)
|
|||
|
||||
if (*str == '+') {
|
||||
/* beginning and size given */
|
||||
*size = strtoul_suffix(str + 1, NULL, 0);
|
||||
*size = strtoull_suffix(str + 1, NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -83,6 +83,7 @@ unsigned long long simple_strtoull (const char *cp, char **endp, unsigned int ba
|
|||
*endp = (char *) cp;
|
||||
return result;
|
||||
}
|
||||
EXPORT_SYMBOL(simple_strtoll);
|
||||
|
||||
/* we use this so that we can do without the ctype library */
|
||||
#define is_digit(c) ((c) >= '0' && (c) <= '9')
|
||||
|
|
Loading…
Reference in New Issue