diff options
| author | Linus Torvalds <torvalds@home.transmeta.com> | 2003-01-11 19:22:24 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2003-01-11 19:22:24 -0800 |
| commit | 7846fcffdbc93d681fa002d325159d54ff6796f8 (patch) | |
| tree | 98e1a400e83d4191e5d377f58c7fc63fda5efdf1 /include | |
| parent | b4357f99883f7ab38086c723de3968ca55823839 (diff) | |
| parent | c9c3935758a53807d806457d6453754cf235912d (diff) | |
Merge bk://bk.arm.linux.org.uk
into home.transmeta.com:/home/torvalds/v2.5/linux
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-arm/dma-mapping.h | 6 | ||||
| -rw-r--r-- | include/asm-arm/ecard.h | 1 | ||||
| -rw-r--r-- | include/asm-arm/pci.h | 4 | ||||
| -rw-r--r-- | include/asm-arm/proc-armv/uaccess.h | 52 | ||||
| -rw-r--r-- | include/asm-arm/procinfo.h | 7 | ||||
| -rw-r--r-- | include/asm-arm/uaccess.h | 139 |
6 files changed, 84 insertions, 125 deletions
diff --git a/include/asm-arm/dma-mapping.h b/include/asm-arm/dma-mapping.h index dd85f46611e7..e3d1dbb7bebf 100644 --- a/include/asm-arm/dma-mapping.h +++ b/include/asm-arm/dma-mapping.h @@ -14,7 +14,7 @@ * devices. This is the "generic" version. The PCI specific version * is in pci.h */ -extern void *consistent_alloc(int gfp, size_t size, dma_addr_t *handle); +extern void *consistent_alloc(int gfp, size_t size, dma_addr_t *handle, unsigned long flags); extern void consistent_free(void *vaddr, size_t size, dma_addr_t handle); extern void consistent_sync(void *kaddr, size_t size, int rw); @@ -84,12 +84,12 @@ static inline int dma_is_consistent(dma_addr_t handle) static inline void * dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle) { - int gfp = GFP_KERNEL; + int gfp = GFP_ATOMIC; if (dev == NULL || dmadev_is_sa1111(dev) || *dev->dma_mask != 0xffffffff) gfp |= GFP_DMA; - return consistent_alloc(gfp, size, handle); + return consistent_alloc(gfp, size, handle, 0); } /** diff --git a/include/asm-arm/ecard.h b/include/asm-arm/ecard.h index 1c9ecdadecd9..602dc63b9dfa 100644 --- a/include/asm-arm/ecard.h +++ b/include/asm-arm/ecard.h @@ -160,6 +160,7 @@ struct expansion_card { const char *card_desc; /* Card description */ CONST unsigned int podaddr; /* Base Linux address for card */ CONST loader_t loader; /* loader program */ + u64 dma_mask; }; struct in_chunk_dir { diff --git a/include/asm-arm/pci.h b/include/asm-arm/pci.h index 7760592d853f..7c690a057a20 100644 --- a/include/asm-arm/pci.h +++ b/include/asm-arm/pci.h @@ -40,13 +40,13 @@ static inline void pcibios_penalize_isa_irq(int irq) static inline void * pci_alloc_consistent(struct pci_dev *hwdev, size_t size, dma_addr_t *handle) { - int gfp = GFP_KERNEL; + int gfp = GFP_ATOMIC; if (hwdev == NULL || pcidev_is_sa1111(hwdev) || hwdev->dma_mask != 0xffffffff) gfp |= GFP_DMA; - return consistent_alloc(gfp, size, handle); + return consistent_alloc(gfp, size, handle, 0); } static inline void diff --git a/include/asm-arm/proc-armv/uaccess.h b/include/asm-arm/proc-armv/uaccess.h index 1162e2f9e047..25154d53177c 100644 --- a/include/asm-arm/proc-armv/uaccess.h +++ b/include/asm-arm/proc-armv/uaccess.h @@ -12,7 +12,7 @@ * Note that this is actually 0x1,0000,0000 */ #define KERNEL_DS 0x00000000 -#define USER_DS PAGE_OFFSET +#define USER_DS TASK_SIZE static inline void set_fs (mm_segment_t fs) { @@ -50,8 +50,8 @@ static inline void set_fs (mm_segment_t fs) " .align 3\n" \ " .long 1b, 3b\n" \ " .previous" \ - : "=r" (err) \ - : "r" (x), "r" (__pu_addr), "i" (-EFAULT), "0" (err) \ + : "+r" (err) \ + : "r" (x), "r" (__pu_addr), "i" (-EFAULT) \ : "cc") #ifndef __ARMEB__ @@ -83,19 +83,18 @@ static inline void set_fs (mm_segment_t fs) " .align 3\n" \ " .long 1b, 3b\n" \ " .previous" \ - : "=r" (err) \ - : "r" (x), "r" (__pu_addr), "i" (-EFAULT), "0" (err)) + : "+r" (err) \ + : "r" (x), "r" (__pu_addr), "i" (-EFAULT) \ + : "cc") #define __put_user_asm_dword(x,__pu_addr,err) \ -({ \ - unsigned long long __temp = (unsigned long long)x; \ __asm__ __volatile__( \ - "1: strt %1, [%2], #0\n" \ - "2: strt %3, [%4], #0\n" \ + "1: strt %Q2, [%1], #4\n" \ + "2: strt %R2, [%1], #0\n" \ "3:\n" \ " .section .fixup,\"ax\"\n" \ " .align 2\n" \ - "4: mov %0, %5\n" \ + "4: mov %0, %3\n" \ " b 3b\n" \ " .previous\n" \ " .section __ex_table,\"a\"\n" \ @@ -103,12 +102,9 @@ static inline void set_fs (mm_segment_t fs) " .long 1b, 4b\n" \ " .long 2b, 4b\n" \ " .previous" \ - : "=r" (err) \ - : "r" (__temp), "r" (__pu_addr), \ - "r" (__temp >> 32), "r" (__pu_addr + 4), \ - "i" (-EFAULT), "0" (err) \ - : "cc"); \ -}) + : "+r" (err), "+r" (__pu_addr) \ + : "r" (x), "i" (-EFAULT) \ + : "cc") #define __get_user_asm_byte(x,addr,err) \ __asm__ __volatile__( \ @@ -124,23 +120,24 @@ static inline void set_fs (mm_segment_t fs) " .align 3\n" \ " .long 1b, 3b\n" \ " .previous" \ - : "=r" (err), "=&r" (x) \ - : "r" (addr), "i" (-EFAULT), "0" (err)) + : "+r" (err), "=&r" (x) \ + : "r" (addr), "i" (-EFAULT) \ + : "cc") #ifndef __ARMEB__ -#define __get_user_asm_half(x,addr,err) \ +#define __get_user_asm_half(x,__gu_addr,err) \ ({ \ - unsigned long __b1, __b2, __ptr = (unsigned long)addr; \ - __get_user_asm_byte(__b1, __ptr, err); \ - __get_user_asm_byte(__b2, __ptr + 1, err); \ + unsigned long __b1, __b2; \ + __get_user_asm_byte(__b1, __gu_addr, err); \ + __get_user_asm_byte(__b2, __gu_addr + 1, err); \ (x) = __b1 | (__b2 << 8); \ }) #else -#define __get_user_asm_half(x,addr,err) \ +#define __get_user_asm_half(x,__gu_addr,err) \ ({ \ unsigned long __b1, __b2; \ - __get_user_asm_byte(__b1, addr, err); \ - __get_user_asm_byte(__b2, (int)(addr) + 1, err); \ + __get_user_asm_byte(__b1, __gu_addr, err); \ + __get_user_asm_byte(__b2, __gu_addr + 1, err); \ (x) = (__b1 << 8) | __b2; \ }) #endif @@ -159,8 +156,9 @@ static inline void set_fs (mm_segment_t fs) " .align 3\n" \ " .long 1b, 3b\n" \ " .previous" \ - : "=r" (err), "=&r" (x) \ - : "r" (addr), "i" (-EFAULT), "0" (err)) + : "+r" (err), "=&r" (x) \ + : "r" (addr), "i" (-EFAULT) \ + : "cc") extern unsigned long __arch_copy_from_user(void *to, const void *from, unsigned long n); #define __do_copy_from_user(to,from,n) \ diff --git a/include/asm-arm/procinfo.h b/include/asm-arm/procinfo.h index fced718b32be..a762a23a7560 100644 --- a/include/asm-arm/procinfo.h +++ b/include/asm-arm/procinfo.h @@ -16,11 +16,6 @@ struct cpu_tlb_fns; struct cpu_user_fns; struct processor; -struct proc_info_item { - const char *manufacturer; - const char *cpu_name; -}; - /* * Note! struct processor is always defined if we're * using MULTI_CPU, otherwise this entry is unused, @@ -38,7 +33,7 @@ struct proc_info_list { const char *arch_name; const char *elf_name; unsigned int elf_hwcap; - struct proc_info_item *info; + const char *cpu_name; struct processor *proc; struct cpu_tlb_fns *tlb; struct cpu_user_fns *user; diff --git a/include/asm-arm/uaccess.h b/include/asm-arm/uaccess.h index d21892660de0..0534487d8ff3 100644 --- a/include/asm-arm/uaccess.h +++ b/include/asm-arm/uaccess.h @@ -74,7 +74,7 @@ extern int __get_user_bad(void); __asm__ __volatile__ ("bl __get_user_" #__s \ : "=&r" (__e), "=r" (__r1) \ : "0" (__p) \ - : __i) + : __i, "cc") #define get_user(x,p) \ ({ \ @@ -100,8 +100,31 @@ extern int __get_user_bad(void); __e; \ }) -#define __get_user(x,p) __get_user_nocheck((x),(p),sizeof(*(p))) -#define __get_user_error(x,p,e) __get_user_nocheck_error((x),(p),sizeof(*(p)),(e)) +#define __get_user(x,ptr) \ +({ \ + long __gu_err = 0; \ + __get_user_err((x),(ptr),__gu_err); \ + __gu_err; \ +}) + +#define __get_user_error(x,ptr,err) \ +({ \ + __get_user_err((x),(ptr),err); \ + (void) 0; \ +}) + +#define __get_user_err(x,ptr,err) \ +do { \ + unsigned long __gu_addr = (unsigned long)(ptr); \ + unsigned long __gu_val; \ + switch (sizeof(*(ptr))) { \ + case 1: __get_user_asm_byte(__gu_val,__gu_addr,err); break; \ + case 2: __get_user_asm_half(__gu_val,__gu_addr,err); break; \ + case 4: __get_user_asm_word(__gu_val,__gu_addr,err); break; \ + default: (__gu_val) = __get_user_bad(); \ + } \ + (x) = (__typeof__(*(ptr)))__gu_val; \ +} while (0) extern int __put_user_1(void *, unsigned int); extern int __put_user_2(void *, unsigned int); @@ -113,7 +136,7 @@ extern int __put_user_bad(void); __asm__ __volatile__ ("bl __put_user_" #__s \ : "=&r" (__e) \ : "0" (__p), "r" (__r1) \ - : __i) + : __i, "cc") #define put_user(x,p) \ ({ \ @@ -138,8 +161,31 @@ extern int __put_user_bad(void); __e; \ }) -#define __put_user(x,p) __put_user_nocheck((__typeof(*(p)))(x),(p),sizeof(*(p))) -#define __put_user_error(x,p,e) __put_user_nocheck_error((x),(p),sizeof(*(p)),(e)) +#define __put_user(x,ptr) \ +({ \ + long __pu_err = 0; \ + __put_user_err((x),(ptr),__pu_err); \ + __pu_err; \ +}) + +#define __put_user_error(x,ptr,err) \ +({ \ + __put_user_err((x),(ptr),err); \ + (void) 0; \ +}) + +#define __put_user_err(x,ptr,err) \ +do { \ + unsigned long __pu_addr = (unsigned long)(ptr); \ + __typeof__(*(ptr)) __pu_val = (x); \ + switch (sizeof(*(ptr))) { \ + case 1: __put_user_asm_byte(__pu_val,__pu_addr,err); break; \ + case 2: __put_user_asm_half(__pu_val,__pu_addr,err); break; \ + case 4: __put_user_asm_word(__pu_val,__pu_addr,err); break; \ + case 8: __put_user_asm_dword(__pu_val,__pu_addr,err); break; \ + default: __put_user_bad(); \ + } \ +} while (0) static __inline__ unsigned long copy_from_user(void *to, const void *from, unsigned long n) { @@ -209,85 +255,4 @@ static inline long strnlen_user(const char *s, long n) return res; } -/* - * These are the work horses of the get/put_user functions - */ -#if 0 -#define __get_user_check(x,ptr,size) \ -({ \ - long __gu_err = -EFAULT, __gu_val = 0; \ - const __typeof__(*(ptr)) *__gu_addr = (ptr); \ - if (access_ok(VERIFY_READ,__gu_addr,size)) { \ - __gu_err = 0; \ - __get_user_size(__gu_val,__gu_addr,(size),__gu_err); \ - } \ - (x) = (__typeof__(*(ptr)))__gu_val; \ - __gu_err; \ -}) -#endif - -#define __get_user_nocheck(x,ptr,size) \ -({ \ - long __gu_err = 0, __gu_val; \ - __get_user_size(__gu_val,(ptr),(size),__gu_err); \ - (x) = (__typeof__(*(ptr)))__gu_val; \ - __gu_err; \ -}) - -#define __get_user_nocheck_error(x,ptr,size,err) \ -({ \ - long __gu_val; \ - __get_user_size(__gu_val,(ptr),(size),(err)); \ - (x) = (__typeof__(*(ptr)))__gu_val; \ - (void) 0; \ -}) - -#define __put_user_check(x,ptr,size) \ -({ \ - long __pu_err = -EFAULT; \ - __typeof__(*(ptr)) *__pu_addr = (ptr); \ - if (access_ok(VERIFY_WRITE,__pu_addr,size)) { \ - __pu_err = 0; \ - __put_user_size((x),__pu_addr,(size),__pu_err); \ - } \ - __pu_err; \ -}) - -#define __put_user_nocheck(x,ptr,size) \ -({ \ - long __pu_err = 0; \ - unsigned long __pu_addr = (unsigned long)(ptr); \ - __put_user_size((x),__pu_addr,(size),__pu_err); \ - __pu_err; \ -}) - -#define __put_user_nocheck_error(x,ptr,size,err) \ -({ \ - unsigned long __pu_addr = (unsigned long)(ptr); \ - __put_user_size((x),__pu_addr,(size),err); \ - (void) 0; \ -}) - -#define __get_user_size(x,ptr,size,retval) \ -do { \ - switch (size) { \ - case 1: __get_user_asm_byte(x,ptr,retval); break; \ - case 2: __get_user_asm_half(x,ptr,retval); break; \ - case 4: __get_user_asm_word(x,ptr,retval); break; \ - case 8: __get_user_asm_dword(x,ptr,retval); break; \ - default: (x) = __get_user_bad(); \ - } \ -} while (0) - -#define __put_user_size(x,ptr,size,retval) \ -do { \ - switch (size) { \ - case 1: __put_user_asm_byte(x,ptr,retval); break; \ - case 2: __put_user_asm_half(x,ptr,retval); break; \ - case 4: __put_user_asm_word(x,ptr,retval); break; \ - case 8: __put_user_asm_dword(x,ptr,retval); break; \ - default: __put_user_bad(); \ - } \ -} while (0) - #endif /* _ASMARM_UACCESS_H */ |
