diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-08 13:08:26 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-08 13:08:26 -0400 |
commit | 53bcef60633086ad73683d01a4ef9ca678484d2d (patch) | |
tree | 8b14cc031124d0aa0da6cd3b60115bc7eaa80061 /arch/cris/include | |
parent | 4fd6c6bf83cb16321e9902b00e2af79054f4e0d6 (diff) | |
parent | 85d9865721c62a551547984e6cc8bd3ba732e294 (diff) |
Merge branch 'for-linus' of git://www.jni.nu/cris
* 'for-linus' of git://www.jni.nu/cris: (51 commits)
CRIS: Fix alignment problem for older ld
CRIS: Always dump registers for segfaulting process.
CRIS: Add config for pausing a seg-faulting process
CRIS: Don't take faults while in_atomic
CRIS: Fixup lookup for delay slot faults
CRIS: Discard exit.text and .data at runtime
CRIS: Add cache aligned and read mostly data sections
CRIS: Return something from profile write
CRIS: Add ARTPEC-3 and timestamps for sync-serial
CRIS: Better ARTPEC-3 support for gpio
CRIS: Add include guard
CRIS: Better handling of pinmux settings
CRIS: New DMA defines for ARTPEC-3
CRIS: __do_strncpy_from_user: Don't read the byte beyond the nil
CRIS: Pagetable for ARTPEC-3
CRIS: Machine dependent memmap.h
CRIS: Check if pointer is set before using it
CRIS: Machine dependent dma.h
CRIS: Define __read_mostly for CRISv32
CRIS: Discard .note.gnu.build-id section
...
Diffstat (limited to 'arch/cris/include')
-rw-r--r-- | arch/cris/include/arch-v32/arch/cache.h | 2 | ||||
-rw-r--r-- | arch/cris/include/arch-v32/arch/dma.h | 80 | ||||
-rw-r--r-- | arch/cris/include/arch-v32/arch/io.h | 20 | ||||
-rw-r--r-- | arch/cris/include/arch-v32/arch/memmap.h | 25 | ||||
-rw-r--r-- | arch/cris/include/arch-v32/arch/pgtable.h | 8 | ||||
-rw-r--r-- | arch/cris/include/arch-v32/arch/uaccess.h | 7 | ||||
-rw-r--r-- | arch/cris/include/arch-v32/mach-a3/mach/dma.h | 27 | ||||
-rw-r--r-- | arch/cris/include/arch-v32/mach-a3/mach/startup.inc | 28 | ||||
-rw-r--r-- | arch/cris/include/arch-v32/mach-fs/mach/dma.h | 79 | ||||
-rw-r--r-- | arch/cris/include/arch-v32/mach-fs/mach/memmap.h | 24 | ||||
-rw-r--r-- | arch/cris/include/arch-v32/mach-fs/mach/startup.inc | 5 | ||||
-rw-r--r-- | arch/cris/include/asm/etraxgpio.h | 96 | ||||
-rw-r--r-- | arch/cris/include/asm/sync_serial.h | 27 |
13 files changed, 292 insertions, 136 deletions
diff --git a/arch/cris/include/arch-v32/arch/cache.h b/arch/cris/include/arch-v32/arch/cache.h index dfc73050e6b4..1de779f4f240 100644 --- a/arch/cris/include/arch-v32/arch/cache.h +++ b/arch/cris/include/arch-v32/arch/cache.h | |||
@@ -7,6 +7,8 @@ | |||
7 | #define L1_CACHE_BYTES 32 | 7 | #define L1_CACHE_BYTES 32 |
8 | #define L1_CACHE_SHIFT 5 | 8 | #define L1_CACHE_SHIFT 5 |
9 | 9 | ||
10 | #define __read_mostly __attribute__((__section__(".data.read_mostly"))) | ||
11 | |||
10 | void flush_dma_list(dma_descr_data *descr); | 12 | void flush_dma_list(dma_descr_data *descr); |
11 | void flush_dma_descr(dma_descr_data *descr, int flush_buf); | 13 | void flush_dma_descr(dma_descr_data *descr, int flush_buf); |
12 | 14 | ||
diff --git a/arch/cris/include/arch-v32/arch/dma.h b/arch/cris/include/arch-v32/arch/dma.h index 3674081389fd..61906153a9af 100644 --- a/arch/cris/include/arch-v32/arch/dma.h +++ b/arch/cris/include/arch-v32/arch/dma.h | |||
@@ -1,79 +1 @@ | |||
1 | #ifndef _ASM_ARCH_CRIS_DMA_H | #include "mach/dma.h" | |
2 | #define _ASM_ARCH_CRIS_DMA_H | ||
3 | |||
4 | /* Defines for using and allocating dma channels. */ | ||
5 | |||
6 | #define MAX_DMA_CHANNELS 10 | ||
7 | |||
8 | #define NETWORK_ETH0_TX_DMA_NBR 0 /* Ethernet 0 out. */ | ||
9 | #define NETWORK_ETH0 RX_DMA_NBR 1 /* Ethernet 0 in. */ | ||
10 | |||
11 | #define IO_PROC_DMA0_TX_DMA_NBR 2 /* IO processor DMA0 out. */ | ||
12 | #define IO_PROC_DMA0_RX_DMA_NBR 3 /* IO processor DMA0 in. */ | ||
13 | |||
14 | #define ATA_TX_DMA_NBR 2 /* ATA interface out. */ | ||
15 | #define ATA_RX_DMA_NBR 3 /* ATA interface in. */ | ||
16 | |||
17 | #define ASYNC_SER2_TX_DMA_NBR 2 /* Asynchronous serial port 2 out. */ | ||
18 | #define ASYNC_SER2_RX_DMA_NBR 3 /* Asynchronous serial port 2 in. */ | ||
19 | |||
20 | #define IO_PROC_DMA1_TX_DMA_NBR 4 /* IO processor DMA1 out. */ | ||
21 | #define IO_PROC_DMA1_RX_DMA_NBR 5 /* IO processor DMA1 in. */ | ||
22 | |||
23 | #define ASYNC_SER1_TX_DMA_NBR 4 /* Asynchronous serial port 1 out. */ | ||
24 | #define ASYNC_SER1_RX_DMA_NBR 5 /* Asynchronous serial port 1 in. */ | ||
25 | |||
26 | #define SYNC_SER0_TX_DMA_NBR 4 /* Synchronous serial port 0 out. */ | ||
27 | #define SYNC_SER0_RX_DMA_NBR 5 /* Synchronous serial port 0 in. */ | ||
28 | |||
29 | #define EXTDMA0_TX_DMA_NBR 6 /* External DMA 0 out. */ | ||
30 | #define EXTDMA1_RX_DMA_NBR 7 /* External DMA 1 in. */ | ||
31 | |||
32 | #define ASYNC_SER0_TX_DMA_NBR 6 /* Asynchronous serial port 0 out. */ | ||
33 | #define ASYNC_SER0_RX_DMA_NBR 7 /* Asynchronous serial port 0 in. */ | ||
34 | |||
35 | #define SYNC_SER1_TX_DMA_NBR 6 /* Synchronous serial port 1 out. */ | ||
36 | #define SYNC_SER1_RX_DMA_NBR 7 /* Synchronous serial port 1 in. */ | ||
37 | |||
38 | #define NETWORK_ETH1_TX_DMA_NBR 6 /* Ethernet 1 out. */ | ||
39 | #define NETWORK_ETH1_RX_DMA_NBR 7 /* Ethernet 1 in. */ | ||
40 | |||
41 | #define EXTDMA2_TX_DMA_NBR 8 /* External DMA 2 out. */ | ||
42 | #define EXTDMA3_RX_DMA_NBR 9 /* External DMA 3 in. */ | ||
43 | |||
44 | #define STRCOP_TX_DMA_NBR 8 /* Stream co-processor out. */ | ||
45 | #define STRCOP_RX_DMA_NBR 9 /* Stream co-processor in. */ | ||
46 | |||
47 | #define ASYNC_SER3_TX_DMA_NBR 8 /* Asynchronous serial port 3 out. */ | ||
48 | #define ASYNC_SER3_RX_DMA_NBR 9 /* Asynchronous serial port 3 in. */ | ||
49 | |||
50 | enum dma_owner | ||
51 | { | ||
52 | dma_eth0, | ||
53 | dma_eth1, | ||
54 | dma_iop0, | ||
55 | dma_iop1, | ||
56 | dma_ser0, | ||
57 | dma_ser1, | ||
58 | dma_ser2, | ||
59 | dma_ser3, | ||
60 | dma_sser0, | ||
61 | dma_sser1, | ||
62 | dma_ata, | ||
63 | dma_strp, | ||
64 | dma_ext0, | ||
65 | dma_ext1, | ||
66 | dma_ext2, | ||
67 | dma_ext3 | ||
68 | }; | ||
69 | |||
70 | int crisv32_request_dma(unsigned int dmanr, const char * device_id, | ||
71 | unsigned options, unsigned bandwidth, enum dma_owner owner); | ||
72 | void crisv32_free_dma(unsigned int dmanr); | ||
73 | |||
74 | /* Masks used by crisv32_request_dma options: */ | ||
75 | #define DMA_VERBOSE_ON_ERROR 1 | ||
76 | #define DMA_PANIC_ON_ERROR (2|DMA_VERBOSE_ON_ERROR) | ||
77 | #define DMA_INT_MEM 4 | ||
78 | |||
79 | #endif /* _ASM_ARCH_CRIS_DMA_H */ | ||
diff --git a/arch/cris/include/arch-v32/arch/io.h b/arch/cris/include/arch-v32/arch/io.h index 72024452cea9..adc5484351bf 100644 --- a/arch/cris/include/arch-v32/arch/io.h +++ b/arch/cris/include/arch-v32/arch/io.h | |||
@@ -46,10 +46,12 @@ static inline void crisv32_io_set(struct crisv32_iopin *iopin, int val) | |||
46 | unsigned long flags; | 46 | unsigned long flags; |
47 | spin_lock_irqsave(&iopin->port->lock, flags); | 47 | spin_lock_irqsave(&iopin->port->lock, flags); |
48 | 48 | ||
49 | if (val) | 49 | if (iopin->port->data) { |
50 | *iopin->port->data |= iopin->bit; | 50 | if (val) |
51 | else | 51 | *iopin->port->data |= iopin->bit; |
52 | *iopin->port->data &= ~iopin->bit; | 52 | else |
53 | *iopin->port->data &= ~iopin->bit; | ||
54 | } | ||
53 | 55 | ||
54 | spin_unlock_irqrestore(&iopin->port->lock, flags); | 56 | spin_unlock_irqrestore(&iopin->port->lock, flags); |
55 | } | 57 | } |
@@ -60,10 +62,12 @@ static inline void crisv32_io_set_dir(struct crisv32_iopin* iopin, | |||
60 | unsigned long flags; | 62 | unsigned long flags; |
61 | spin_lock_irqsave(&iopin->port->lock, flags); | 63 | spin_lock_irqsave(&iopin->port->lock, flags); |
62 | 64 | ||
63 | if (dir == crisv32_io_dir_in) | 65 | if (iopin->port->oe) { |
64 | *iopin->port->oe &= ~iopin->bit; | 66 | if (dir == crisv32_io_dir_in) |
65 | else | 67 | *iopin->port->oe &= ~iopin->bit; |
66 | *iopin->port->oe |= iopin->bit; | 68 | else |
69 | *iopin->port->oe |= iopin->bit; | ||
70 | } | ||
67 | 71 | ||
68 | spin_unlock_irqrestore(&iopin->port->lock, flags); | 72 | spin_unlock_irqrestore(&iopin->port->lock, flags); |
69 | } | 73 | } |
diff --git a/arch/cris/include/arch-v32/arch/memmap.h b/arch/cris/include/arch-v32/arch/memmap.h index d29df5644d3e..81985c0a6789 100644 --- a/arch/cris/include/arch-v32/arch/memmap.h +++ b/arch/cris/include/arch-v32/arch/memmap.h | |||
@@ -1,24 +1 @@ | |||
1 | #ifndef _ASM_ARCH_MEMMAP_H | #include <mach/memmap.h> | |
2 | #define _ASM_ARCH_MEMMAP_H | ||
3 | |||
4 | #define MEM_CSE0_START (0x00000000) | ||
5 | #define MEM_CSE0_SIZE (0x04000000) | ||
6 | #define MEM_CSE1_START (0x04000000) | ||
7 | #define MEM_CSE1_SIZE (0x04000000) | ||
8 | #define MEM_CSR0_START (0x08000000) | ||
9 | #define MEM_CSR1_START (0x0c000000) | ||
10 | #define MEM_CSP0_START (0x10000000) | ||
11 | #define MEM_CSP1_START (0x14000000) | ||
12 | #define MEM_CSP2_START (0x18000000) | ||
13 | #define MEM_CSP3_START (0x1c000000) | ||
14 | #define MEM_CSP4_START (0x20000000) | ||
15 | #define MEM_CSP5_START (0x24000000) | ||
16 | #define MEM_CSP6_START (0x28000000) | ||
17 | #define MEM_CSP7_START (0x2c000000) | ||
18 | #define MEM_INTMEM_START (0x38000000) | ||
19 | #define MEM_INTMEM_SIZE (0x00020000) | ||
20 | #define MEM_DRAM_START (0x40000000) | ||
21 | |||
22 | #define MEM_NON_CACHEABLE (0x80000000) | ||
23 | |||
24 | #endif | ||
diff --git a/arch/cris/include/arch-v32/arch/pgtable.h b/arch/cris/include/arch-v32/arch/pgtable.h index 08cb7ff7e4e7..c1051a8da33d 100644 --- a/arch/cris/include/arch-v32/arch/pgtable.h +++ b/arch/cris/include/arch-v32/arch/pgtable.h | |||
@@ -2,8 +2,16 @@ | |||
2 | #define _ASM_CRIS_ARCH_PGTABLE_H | 2 | #define _ASM_CRIS_ARCH_PGTABLE_H |
3 | 3 | ||
4 | /* Define the kernels virtual memory area. */ | 4 | /* Define the kernels virtual memory area. */ |
5 | |||
6 | /* See head.S for differences between ARTPEC-3 and ETRAX FS. */ | ||
7 | #ifdef CONFIG_CRIS_MACH_ARTPEC3 | ||
8 | #define VMALLOC_START KSEG_E | ||
9 | #define VMALLOC_END KSEG_F | ||
10 | #else | ||
5 | #define VMALLOC_START KSEG_D | 11 | #define VMALLOC_START KSEG_D |
6 | #define VMALLOC_END KSEG_E | 12 | #define VMALLOC_END KSEG_E |
13 | #endif | ||
14 | |||
7 | #define VMALLOC_VMADDR(x) ((unsigned long)(x)) | 15 | #define VMALLOC_VMADDR(x) ((unsigned long)(x)) |
8 | 16 | ||
9 | #endif /* _ASM_CRIS_ARCH_PGTABLE_H */ | 17 | #endif /* _ASM_CRIS_ARCH_PGTABLE_H */ |
diff --git a/arch/cris/include/arch-v32/arch/uaccess.h b/arch/cris/include/arch-v32/arch/uaccess.h index 6b207f1b6622..3196019706cb 100644 --- a/arch/cris/include/arch-v32/arch/uaccess.h +++ b/arch/cris/include/arch-v32/arch/uaccess.h | |||
@@ -122,14 +122,14 @@ __do_strncpy_from_user(char *dst, const char *src, long count) | |||
122 | __asm__ __volatile__ ( | 122 | __asm__ __volatile__ ( |
123 | " move.d %3,%0\n" | 123 | " move.d %3,%0\n" |
124 | "5: move.b [%2+],$acr\n" | 124 | "5: move.b [%2+],$acr\n" |
125 | "1: beq 2f\n" | 125 | "1: beq 6f\n" |
126 | " move.b $acr,[%1+]\n" | 126 | " move.b $acr,[%1+]\n" |
127 | 127 | ||
128 | " subq 1,%0\n" | 128 | " subq 1,%0\n" |
129 | "2: bne 1b\n" | 129 | "2: bne 1b\n" |
130 | " move.b [%2+],$acr\n" | 130 | " move.b [%2+],$acr\n" |
131 | 131 | ||
132 | " sub.d %3,%0\n" | 132 | "6: sub.d %3,%0\n" |
133 | " neg.d %0,%0\n" | 133 | " neg.d %0,%0\n" |
134 | "3:\n" | 134 | "3:\n" |
135 | " .section .fixup,\"ax\"\n" | 135 | " .section .fixup,\"ax\"\n" |
@@ -140,8 +140,7 @@ __do_strncpy_from_user(char *dst, const char *src, long count) | |||
140 | /* The address for a fault at the first move is trivial. | 140 | /* The address for a fault at the first move is trivial. |
141 | The address for a fault at the second move is that of | 141 | The address for a fault at the second move is that of |
142 | the preceding branch insn, since the move insn is in | 142 | the preceding branch insn, since the move insn is in |
143 | its delay-slot. That address is also a branch | 143 | its delay-slot. Just so you don't get confused... */ |
144 | target. Just so you don't get confused... */ | ||
145 | " .previous\n" | 144 | " .previous\n" |
146 | " .section __ex_table,\"a\"\n" | 145 | " .section __ex_table,\"a\"\n" |
147 | " .dword 5b,4b\n" | 146 | " .dword 5b,4b\n" |
diff --git a/arch/cris/include/arch-v32/mach-a3/mach/dma.h b/arch/cris/include/arch-v32/mach-a3/mach/dma.h index 9e8eb13b601d..f01dca1ad108 100644 --- a/arch/cris/include/arch-v32/mach-a3/mach/dma.h +++ b/arch/cris/include/arch-v32/mach-a3/mach/dma.h | |||
@@ -5,6 +5,33 @@ | |||
5 | 5 | ||
6 | #define MAX_DMA_CHANNELS 12 /* 8 and 10 not used. */ | 6 | #define MAX_DMA_CHANNELS 12 /* 8 and 10 not used. */ |
7 | 7 | ||
8 | #define NETWORK_ETH_TX_DMA_NBR 0 /* Ethernet 0 out. */ | ||
9 | #define NETWORK_ETH_RX_DMA_NBR 1 /* Ethernet 0 in. */ | ||
10 | |||
11 | #define IO_PROC_DMA_TX_DMA_NBR 4 /* IO processor DMA0 out. */ | ||
12 | #define IO_PROC_DMA_RX_DMA_NBR 5 /* IO processor DMA0 in. */ | ||
13 | |||
14 | #define ASYNC_SER3_TX_DMA_NBR 2 /* Asynchronous serial port 3 out. */ | ||
15 | #define ASYNC_SER3_RX_DMA_NBR 3 /* Asynchronous serial port 3 in. */ | ||
16 | |||
17 | #define ASYNC_SER2_TX_DMA_NBR 6 /* Asynchronous serial port 2 out. */ | ||
18 | #define ASYNC_SER2_RX_DMA_NBR 7 /* Asynchronous serial port 2 in. */ | ||
19 | |||
20 | #define ASYNC_SER1_TX_DMA_NBR 4 /* Asynchronous serial port 1 out. */ | ||
21 | #define ASYNC_SER1_RX_DMA_NBR 5 /* Asynchronous serial port 1 in. */ | ||
22 | |||
23 | #define SYNC_SER_TX_DMA_NBR 6 /* Synchronous serial port 0 out. */ | ||
24 | #define SYNC_SER_RX_DMA_NBR 7 /* Synchronous serial port 0 in. */ | ||
25 | |||
26 | #define ASYNC_SER0_TX_DMA_NBR 0 /* Asynchronous serial port 0 out. */ | ||
27 | #define ASYNC_SER0_RX_DMA_NBR 1 /* Asynchronous serial port 0 in. */ | ||
28 | |||
29 | #define STRCOP_TX_DMA_NBR 2 /* Stream co-processor out. */ | ||
30 | #define STRCOP_RX_DMA_NBR 3 /* Stream co-processor in. */ | ||
31 | |||
32 | #define dma_eth0 dma_eth | ||
33 | #define dma_eth1 dma_eth | ||
34 | |||
8 | enum dma_owner { | 35 | enum dma_owner { |
9 | dma_eth, | 36 | dma_eth, |
10 | dma_ser0, | 37 | dma_ser0, |
diff --git a/arch/cris/include/arch-v32/mach-a3/mach/startup.inc b/arch/cris/include/arch-v32/mach-a3/mach/startup.inc index 2f23e5e16f4a..2d52bcc96ed5 100644 --- a/arch/cris/include/arch-v32/mach-a3/mach/startup.inc +++ b/arch/cris/include/arch-v32/mach-a3/mach/startup.inc | |||
@@ -1,9 +1,19 @@ | |||
1 | #ifndef STARTUP_INC_INCLUDED | ||
2 | #define STARTUP_INC_INCLUDED | ||
3 | |||
1 | #include <hwregs/asm/reg_map_asm.h> | 4 | #include <hwregs/asm/reg_map_asm.h> |
2 | #include <hwregs/asm/gio_defs_asm.h> | 5 | #include <hwregs/asm/gio_defs_asm.h> |
3 | #include <hwregs/asm/pio_defs_asm.h> | 6 | #include <hwregs/asm/pio_defs_asm.h> |
4 | #include <hwregs/asm/clkgen_defs_asm.h> | 7 | #include <hwregs/asm/clkgen_defs_asm.h> |
5 | #include <hwregs/asm/pinmux_defs_asm.h> | 8 | #include <hwregs/asm/pinmux_defs_asm.h> |
6 | 9 | ||
10 | .macro GIO_SET_P BITS, OUTREG | ||
11 | bmi 1f ; btstq: bit -> N flag | ||
12 | nop | ||
13 | or.d \BITS, \OUTREG | ||
14 | 1: | ||
15 | .endm | ||
16 | |||
7 | .macro GIO_INIT | 17 | .macro GIO_INIT |
8 | move.d CONFIG_ETRAX_DEF_GIO_PA_OUT, $r0 | 18 | move.d CONFIG_ETRAX_DEF_GIO_PA_OUT, $r0 |
9 | move.d REG_ADDR(gio, regi_gio, rw_pa_dout), $r1 | 19 | move.d REG_ADDR(gio, regi_gio, rw_pa_dout), $r1 |
@@ -32,10 +42,23 @@ | |||
32 | move.d 0xFFFFFFFF, $r0 | 42 | move.d 0xFFFFFFFF, $r0 |
33 | move.d REG_ADDR(pinmux, regi_pinmux, rw_gio_pa), $r1 | 43 | move.d REG_ADDR(pinmux, regi_pinmux, rw_gio_pa), $r1 |
34 | move.d $r0, [$r1] | 44 | move.d $r0, [$r1] |
35 | move.d REG_ADDR(pinmux, regi_pinmux, rw_gio_pb), $r1 | ||
36 | move.d $r0, [$r1] | ||
37 | move.d REG_ADDR(pinmux, regi_pinmux, rw_gio_pc), $r1 | 45 | move.d REG_ADDR(pinmux, regi_pinmux, rw_gio_pc), $r1 |
38 | move.d $r0, [$r1] | 46 | move.d $r0, [$r1] |
47 | |||
48 | ;; If eth_mdio, eth, geth bits are set in hwprot, don't | ||
49 | ;; set them to gpio, as this means they have been configured | ||
50 | ;; earlier and shouldn't be changed. | ||
51 | move.d 0xFC000000, $r2 ; pins 25..0 are eth_mdio, eth, geth | ||
52 | move.d REG_ADDR(pinmux, regi_pinmux, rw_hwprot), $r1 | ||
53 | move.d [$r1], $r0 | ||
54 | btstq REG_BIT(pinmux, rw_hwprot, eth), $r0 | ||
55 | GIO_SET_P 0x00FFFF00, $r2 ;; pins 8..23 are eth | ||
56 | btstq REG_BIT(pinmux, rw_hwprot, eth_mdio), $r0 | ||
57 | GIO_SET_P 0x03000000, $r2 ;; pins 24..25 are eth_mdio | ||
58 | btstq REG_BIT(pinmux, rw_hwprot, geth), $r0 | ||
59 | GIO_SET_P 0x000000FF, $r2 ;; pins 0..7 are geth | ||
60 | move.d REG_ADDR(pinmux, regi_pinmux, rw_gio_pb), $r1 | ||
61 | move.d $r2, [$r1] | ||
39 | .endm | 62 | .endm |
40 | 63 | ||
41 | .macro START_CLOCKS | 64 | .macro START_CLOCKS |
@@ -58,3 +81,4 @@ | |||
58 | move.d CONFIG_ETRAX_PIO_CE2_CFG, $r1 | 81 | move.d CONFIG_ETRAX_PIO_CE2_CFG, $r1 |
59 | move.d $r1, [$r0] | 82 | move.d $r1, [$r0] |
60 | .endm | 83 | .endm |
84 | #endif | ||
diff --git a/arch/cris/include/arch-v32/mach-fs/mach/dma.h b/arch/cris/include/arch-v32/mach-fs/mach/dma.h new file mode 100644 index 000000000000..a8c59292586a --- /dev/null +++ b/arch/cris/include/arch-v32/mach-fs/mach/dma.h | |||
@@ -0,0 +1,79 @@ | |||
1 | #ifndef _ASM_ARCH_CRIS_DMA_H | ||
2 | #define _ASM_ARCH_CRIS_DMA_H | ||
3 | |||
4 | /* Defines for using and allocating dma channels. */ | ||
5 | |||
6 | #define MAX_DMA_CHANNELS 10 | ||
7 | |||
8 | #define NETWORK_ETH0_TX_DMA_NBR 0 /* Ethernet 0 out. */ | ||
9 | #define NETWORK_ETH0 RX_DMA_NBR 1 /* Ethernet 0 in. */ | ||
10 | |||
11 | #define IO_PROC_DMA0_TX_DMA_NBR 2 /* IO processor DMA0 out. */ | ||
12 | #define IO_PROC_DMA0_RX_DMA_NBR 3 /* IO processor DMA0 in. */ | ||
13 | |||
14 | #define ATA_TX_DMA_NBR 2 /* ATA interface out. */ | ||
15 | #define ATA_RX_DMA_NBR 3 /* ATA interface in. */ | ||
16 | |||
17 | #define ASYNC_SER2_TX_DMA_NBR 2 /* Asynchronous serial port 2 out. */ | ||
18 | #define ASYNC_SER2_RX_DMA_NBR 3 /* Asynchronous serial port 2 in. */ | ||
19 | |||
20 | #define IO_PROC_DMA1_TX_DMA_NBR 4 /* IO processor DMA1 out. */ | ||
21 | #define IO_PROC_DMA1_RX_DMA_NBR 5 /* IO processor DMA1 in. */ | ||
22 | |||
23 | #define ASYNC_SER1_TX_DMA_NBR 4 /* Asynchronous serial port 1 out. */ | ||
24 | #define ASYNC_SER1_RX_DMA_NBR 5 /* Asynchronous serial port 1 in. */ | ||
25 | |||
26 | #define SYNC_SER0_TX_DMA_NBR 4 /* Synchronous serial port 0 out. */ | ||
27 | #define SYNC_SER0_RX_DMA_NBR 5 /* Synchronous serial port 0 in. */ | ||
28 | |||
29 | #define EXTDMA0_TX_DMA_NBR 6 /* External DMA 0 out. */ | ||
30 | #define EXTDMA1_RX_DMA_NBR 7 /* External DMA 1 in. */ | ||
31 | |||
32 | #define ASYNC_SER0_TX_DMA_NBR 6 /* Asynchronous serial port 0 out. */ | ||
33 | #define ASYNC_SER0_RX_DMA_NBR 7 /* Asynchronous serial port 0 in. */ | ||
34 | |||
35 | #define SYNC_SER1_TX_DMA_NBR 6 /* Synchronous serial port 1 out. */ | ||
36 | #define SYNC_SER1_RX_DMA_NBR 7 /* Synchronous serial port 1 in. */ | ||
37 | |||
38 | #define NETWORK_ETH1_TX_DMA_NBR 6 /* Ethernet 1 out. */ | ||
39 | #define NETWORK_ETH1_RX_DMA_NBR 7 /* Ethernet 1 in. */ | ||
40 | |||
41 | #define EXTDMA2_TX_DMA_NBR 8 /* External DMA 2 out. */ | ||
42 | #define EXTDMA3_RX_DMA_NBR 9 /* External DMA 3 in. */ | ||
43 | |||
44 | #define STRCOP_TX_DMA_NBR 8 /* Stream co-processor out. */ | ||
45 | #define STRCOP_RX_DMA_NBR 9 /* Stream co-processor in. */ | ||
46 | |||
47 | #define ASYNC_SER3_TX_DMA_NBR 8 /* Asynchronous serial port 3 out. */ | ||
48 | #define ASYNC_SER3_RX_DMA_NBR 9 /* Asynchronous serial port 3 in. */ | ||
49 | |||
50 | enum dma_owner { | ||
51 | dma_eth0, | ||
52 | dma_eth1, | ||
53 | dma_iop0, | ||
54 | dma_iop1, | ||
55 | dma_ser0, | ||
56 | dma_ser1, | ||
57 | dma_ser2, | ||
58 | dma_ser3, | ||
59 | dma_sser0, | ||
60 | dma_sser1, | ||
61 | dma_ata, | ||
62 | dma_strp, | ||
63 | dma_ext0, | ||
64 | dma_ext1, | ||
65 | dma_ext2, | ||
66 | dma_ext3 | ||
67 | }; | ||
68 | |||
69 | int crisv32_request_dma(unsigned int dmanr, const char *device_id, | ||
70 | unsigned options, unsigned bandwidth, | ||
71 | enum dma_owner owner); | ||
72 | void crisv32_free_dma(unsigned int dmanr); | ||
73 | |||
74 | /* Masks used by crisv32_request_dma options: */ | ||
75 | #define DMA_VERBOSE_ON_ERROR 1 | ||
76 | #define DMA_PANIC_ON_ERROR (2|DMA_VERBOSE_ON_ERROR) | ||
77 | #define DMA_INT_MEM 4 | ||
78 | |||
79 | #endif /* _ASM_ARCH_CRIS_DMA_H */ | ||
diff --git a/arch/cris/include/arch-v32/mach-fs/mach/memmap.h b/arch/cris/include/arch-v32/mach-fs/mach/memmap.h new file mode 100644 index 000000000000..d29df5644d3e --- /dev/null +++ b/arch/cris/include/arch-v32/mach-fs/mach/memmap.h | |||
@@ -0,0 +1,24 @@ | |||
1 | #ifndef _ASM_ARCH_MEMMAP_H | ||
2 | #define _ASM_ARCH_MEMMAP_H | ||
3 | |||
4 | #define MEM_CSE0_START (0x00000000) | ||
5 | #define MEM_CSE0_SIZE (0x04000000) | ||
6 | #define MEM_CSE1_START (0x04000000) | ||
7 | #define MEM_CSE1_SIZE (0x04000000) | ||
8 | #define MEM_CSR0_START (0x08000000) | ||
9 | #define MEM_CSR1_START (0x0c000000) | ||
10 | #define MEM_CSP0_START (0x10000000) | ||
11 | #define MEM_CSP1_START (0x14000000) | ||
12 | #define MEM_CSP2_START (0x18000000) | ||
13 | #define MEM_CSP3_START (0x1c000000) | ||
14 | #define MEM_CSP4_START (0x20000000) | ||
15 | #define MEM_CSP5_START (0x24000000) | ||
16 | #define MEM_CSP6_START (0x28000000) | ||
17 | #define MEM_CSP7_START (0x2c000000) | ||
18 | #define MEM_INTMEM_START (0x38000000) | ||
19 | #define MEM_INTMEM_SIZE (0x00020000) | ||
20 | #define MEM_DRAM_START (0x40000000) | ||
21 | |||
22 | #define MEM_NON_CACHEABLE (0x80000000) | ||
23 | |||
24 | #endif | ||
diff --git a/arch/cris/include/arch-v32/mach-fs/mach/startup.inc b/arch/cris/include/arch-v32/mach-fs/mach/startup.inc index 4a10ccbd6cc1..dd1abbdcbc7a 100644 --- a/arch/cris/include/arch-v32/mach-fs/mach/startup.inc +++ b/arch/cris/include/arch-v32/mach-fs/mach/startup.inc | |||
@@ -1,3 +1,6 @@ | |||
1 | #ifndef STARTUP_INC_INCLUDED | ||
2 | #define STARTUP_INC_INCLUDED | ||
3 | |||
1 | #include <hwregs/asm/reg_map_asm.h> | 4 | #include <hwregs/asm/reg_map_asm.h> |
2 | #include <hwregs/asm/bif_core_defs_asm.h> | 5 | #include <hwregs/asm/bif_core_defs_asm.h> |
3 | #include <hwregs/asm/gio_defs_asm.h> | 6 | #include <hwregs/asm/gio_defs_asm.h> |
@@ -75,3 +78,5 @@ | |||
75 | move.d $r10, [$r11] | 78 | move.d $r10, [$r11] |
76 | #endif | 79 | #endif |
77 | .endm | 80 | .endm |
81 | |||
82 | #endif | ||
diff --git a/arch/cris/include/asm/etraxgpio.h b/arch/cris/include/asm/etraxgpio.h index 38f1c8e1770c..d474818a537e 100644 --- a/arch/cris/include/asm/etraxgpio.h +++ b/arch/cris/include/asm/etraxgpio.h | |||
@@ -21,31 +21,35 @@ | |||
21 | * /dev/leds minor 2, Access to leds depending on kernelconfig | 21 | * /dev/leds minor 2, Access to leds depending on kernelconfig |
22 | * | 22 | * |
23 | * For ARTPEC-3 (CONFIG_CRIS_MACH_ARTPEC3): | 23 | * For ARTPEC-3 (CONFIG_CRIS_MACH_ARTPEC3): |
24 | * /dev/gpioa minor 0, 8 bit GPIO, each bit can change direction | 24 | * /dev/gpioa minor 0, 32 bit GPIO, each bit can change direction |
25 | * /dev/gpiob minor 1, 18 bit GPIO, each bit can change direction | 25 | * /dev/gpiob minor 1, 32 bit GPIO, each bit can change direction |
26 | * /dev/gpioc minor 3, 18 bit GPIO, each bit can change direction | 26 | * /dev/gpioc minor 3, 16 bit GPIO, each bit can change direction |
27 | * /dev/gpiod minor 4, 18 bit GPIO, each bit can change direction | 27 | * /dev/gpiod minor 4, 32 bit GPIO, input only |
28 | * /dev/leds minor 2, Access to leds depending on kernelconfig | 28 | * /dev/leds minor 2, Access to leds depending on kernelconfig |
29 | * /dev/pwm0 minor 16, PWM channel 0 on PA30 | 29 | * /dev/pwm0 minor 16, PWM channel 0 on PA30 |
30 | * /dev/pwm1 minor 17, PWM channel 1 on PA31 | 30 | * /dev/pwm1 minor 17, PWM channel 1 on PA31 |
31 | * /dev/pwm2 minor 18, PWM channel 2 on PB26 | 31 | * /dev/pwm2 minor 18, PWM channel 2 on PB26 |
32 | * /dev/ppwm minor 19, PPWM channel | ||
32 | * | 33 | * |
33 | */ | 34 | */ |
34 | #ifndef _ASM_ETRAXGPIO_H | 35 | #ifndef _ASM_ETRAXGPIO_H |
35 | #define _ASM_ETRAXGPIO_H | 36 | #define _ASM_ETRAXGPIO_H |
36 | 37 | ||
38 | #define GPIO_MINOR_FIRST 0 | ||
39 | |||
40 | #define ETRAXGPIO_IOCTYPE 43 | ||
41 | |||
37 | /* etraxgpio _IOC_TYPE, bits 8 to 15 in ioctl cmd */ | 42 | /* etraxgpio _IOC_TYPE, bits 8 to 15 in ioctl cmd */ |
38 | #ifdef CONFIG_ETRAX_ARCH_V10 | 43 | #ifdef CONFIG_ETRAX_ARCH_V10 |
39 | #define ETRAXGPIO_IOCTYPE 43 | ||
40 | #define GPIO_MINOR_A 0 | 44 | #define GPIO_MINOR_A 0 |
41 | #define GPIO_MINOR_B 1 | 45 | #define GPIO_MINOR_B 1 |
42 | #define GPIO_MINOR_LEDS 2 | 46 | #define GPIO_MINOR_LEDS 2 |
43 | #define GPIO_MINOR_G 3 | 47 | #define GPIO_MINOR_G 3 |
44 | #define GPIO_MINOR_LAST 3 | 48 | #define GPIO_MINOR_LAST 3 |
49 | #define GPIO_MINOR_LAST_REAL GPIO_MINOR_LAST | ||
45 | #endif | 50 | #endif |
46 | 51 | ||
47 | #ifdef CONFIG_ETRAXFS | 52 | #ifdef CONFIG_ETRAXFS |
48 | #define ETRAXGPIO_IOCTYPE 43 | ||
49 | #define GPIO_MINOR_A 0 | 53 | #define GPIO_MINOR_A 0 |
50 | #define GPIO_MINOR_B 1 | 54 | #define GPIO_MINOR_B 1 |
51 | #define GPIO_MINOR_LEDS 2 | 55 | #define GPIO_MINOR_LEDS 2 |
@@ -58,10 +62,10 @@ | |||
58 | #else | 62 | #else |
59 | #define GPIO_MINOR_LAST 5 | 63 | #define GPIO_MINOR_LAST 5 |
60 | #endif | 64 | #endif |
65 | #define GPIO_MINOR_LAST_REAL GPIO_MINOR_LAST | ||
61 | #endif | 66 | #endif |
62 | 67 | ||
63 | #ifdef CONFIG_CRIS_MACH_ARTPEC3 | 68 | #ifdef CONFIG_CRIS_MACH_ARTPEC3 |
64 | #define ETRAXGPIO_IOCTYPE 43 | ||
65 | #define GPIO_MINOR_A 0 | 69 | #define GPIO_MINOR_A 0 |
66 | #define GPIO_MINOR_B 1 | 70 | #define GPIO_MINOR_B 1 |
67 | #define GPIO_MINOR_LEDS 2 | 71 | #define GPIO_MINOR_LEDS 2 |
@@ -73,12 +77,17 @@ | |||
73 | #else | 77 | #else |
74 | #define GPIO_MINOR_LAST 4 | 78 | #define GPIO_MINOR_LAST 4 |
75 | #endif | 79 | #endif |
76 | #define GPIO_MINOR_PWM0 16 | 80 | #define GPIO_MINOR_FIRST_PWM 16 |
77 | #define GPIO_MINOR_PWM1 17 | 81 | #define GPIO_MINOR_PWM0 (GPIO_MINOR_FIRST_PWM+0) |
78 | #define GPIO_MINOR_PWM2 18 | 82 | #define GPIO_MINOR_PWM1 (GPIO_MINOR_FIRST_PWM+1) |
79 | #define GPIO_MINOR_LAST_PWM GPIO_MINOR_PWM2 | 83 | #define GPIO_MINOR_PWM2 (GPIO_MINOR_FIRST_PWM+2) |
84 | #define GPIO_MINOR_PPWM (GPIO_MINOR_FIRST_PWM+3) | ||
85 | #define GPIO_MINOR_LAST_PWM GPIO_MINOR_PPWM | ||
86 | #define GPIO_MINOR_LAST_REAL GPIO_MINOR_LAST_PWM | ||
80 | #endif | 87 | #endif |
81 | 88 | ||
89 | |||
90 | |||
82 | /* supported ioctl _IOC_NR's */ | 91 | /* supported ioctl _IOC_NR's */ |
83 | 92 | ||
84 | #define IO_READBITS 0x1 /* read and return current port bits (obsolete) */ | 93 | #define IO_READBITS 0x1 /* read and return current port bits (obsolete) */ |
@@ -125,12 +134,10 @@ | |||
125 | */ | 134 | */ |
126 | #define IO_READ_INBITS 0x10 /* *arg is result of reading the input pins */ | 135 | #define IO_READ_INBITS 0x10 /* *arg is result of reading the input pins */ |
127 | #define IO_READ_OUTBITS 0x11 /* *arg is result of reading the output shadow */ | 136 | #define IO_READ_OUTBITS 0x11 /* *arg is result of reading the output shadow */ |
128 | #define IO_SETGET_INPUT 0x12 /* bits set in *arg is set to input, | 137 | #define IO_SETGET_INPUT 0x12 /* bits set in *arg is set to input, */ |
129 | * *arg updated with current input pins. | 138 | /* *arg updated with current input pins. */ |
130 | */ | 139 | #define IO_SETGET_OUTPUT 0x13 /* bits set in *arg is set to output, */ |
131 | #define IO_SETGET_OUTPUT 0x13 /* bits set in *arg is set to output, | 140 | /* *arg updated with current output pins. */ |
132 | * *arg updated with current output pins. | ||
133 | */ | ||
134 | 141 | ||
135 | /* The following ioctl's are applicable to the PWM channels only */ | 142 | /* The following ioctl's are applicable to the PWM channels only */ |
136 | 143 | ||
@@ -140,7 +147,8 @@ enum io_pwm_mode { | |||
140 | PWM_OFF = 0, /* disabled, deallocated */ | 147 | PWM_OFF = 0, /* disabled, deallocated */ |
141 | PWM_STANDARD = 1, /* 390 kHz, duty cycle 0..255/256 */ | 148 | PWM_STANDARD = 1, /* 390 kHz, duty cycle 0..255/256 */ |
142 | PWM_FAST = 2, /* variable freq, w/ 10ns active pulse len */ | 149 | PWM_FAST = 2, /* variable freq, w/ 10ns active pulse len */ |
143 | PWM_VARFREQ = 3 /* individually configurable high/low periods */ | 150 | PWM_VARFREQ = 3, /* individually configurable high/low periods */ |
151 | PWM_SOFT = 4 /* software generated */ | ||
144 | }; | 152 | }; |
145 | 153 | ||
146 | struct io_pwm_set_mode { | 154 | struct io_pwm_set_mode { |
@@ -176,4 +184,56 @@ struct io_pwm_set_duty { | |||
176 | int duty; /* 0..255 */ | 184 | int duty; /* 0..255 */ |
177 | }; | 185 | }; |
178 | 186 | ||
187 | /* Returns information about the latest PWM pulse. | ||
188 | * lo: Length of the latest low period, in units of 10ns. | ||
189 | * hi: Length of the latest high period, in units of 10ns. | ||
190 | * cnt: Time since last detected edge, in units of 10ns. | ||
191 | * | ||
192 | * The input source to PWM is decied by IO_PWM_SET_INPUT_SRC. | ||
193 | * | ||
194 | * NOTE: All PWM devices is connected to the same input source. | ||
195 | */ | ||
196 | #define IO_PWM_GET_PERIOD 0x23 | ||
197 | |||
198 | struct io_pwm_get_period { | ||
199 | unsigned int lo; | ||
200 | unsigned int hi; | ||
201 | unsigned int cnt; | ||
202 | }; | ||
203 | |||
204 | /* Sets the input source for the PWM input. For the src value see the | ||
205 | * register description for gio:rw_pwm_in_cfg. | ||
206 | * | ||
207 | * NOTE: All PWM devices is connected to the same input source. | ||
208 | */ | ||
209 | #define IO_PWM_SET_INPUT_SRC 0x24 | ||
210 | struct io_pwm_set_input_src { | ||
211 | unsigned int src; /* 0..7 */ | ||
212 | }; | ||
213 | |||
214 | /* Sets the duty cycles in steps of 1/256, 0 = 0%, 255 = 100% duty cycle */ | ||
215 | #define IO_PPWM_SET_DUTY 0x25 | ||
216 | |||
217 | struct io_ppwm_set_duty { | ||
218 | int duty; /* 0..255 */ | ||
219 | }; | ||
220 | |||
221 | /* Configuraton struct for the IO_PWMCLK_SET_CONFIG ioctl to configure | ||
222 | * PWM capable gpio pins: | ||
223 | */ | ||
224 | #define IO_PWMCLK_SETGET_CONFIG 0x26 | ||
225 | struct gpio_pwmclk_conf { | ||
226 | unsigned int gpiopin; /* The pin number based on the opened device */ | ||
227 | unsigned int baseclk; /* The base clock to use, or sw will select one close*/ | ||
228 | unsigned int low; /* The number of low periods of the baseclk */ | ||
229 | unsigned int high; /* The number of high periods of the baseclk */ | ||
230 | }; | ||
231 | |||
232 | /* Examples: | ||
233 | * To get a symmetric 12 MHz clock without knowing anything about the hardware: | ||
234 | * baseclk = 12000000, low = 0, high = 0 | ||
235 | * To just get info of current setting: | ||
236 | * baseclk = 0, low = 0, high = 0, the values will be updated by driver. | ||
237 | */ | ||
238 | |||
179 | #endif | 239 | #endif |
diff --git a/arch/cris/include/asm/sync_serial.h b/arch/cris/include/asm/sync_serial.h index d87c24df2b38..7f827fea30e7 100644 --- a/arch/cris/include/asm/sync_serial.h +++ b/arch/cris/include/asm/sync_serial.h | |||
@@ -19,6 +19,7 @@ | |||
19 | #define SSP_OPOLARITY _IOR('S', 4, unsigned int) | 19 | #define SSP_OPOLARITY _IOR('S', 4, unsigned int) |
20 | #define SSP_SPI _IOR('S', 5, unsigned int) | 20 | #define SSP_SPI _IOR('S', 5, unsigned int) |
21 | #define SSP_INBUFCHUNK _IOR('S', 6, unsigned int) | 21 | #define SSP_INBUFCHUNK _IOR('S', 6, unsigned int) |
22 | #define SSP_INPUT _IOR('S', 7, unsigned int) | ||
22 | 23 | ||
23 | /* Values for SSP_SPEED */ | 24 | /* Values for SSP_SPEED */ |
24 | #define SSP150 0 | 25 | #define SSP150 0 |
@@ -37,6 +38,7 @@ | |||
37 | #define SSP921600 13 | 38 | #define SSP921600 13 |
38 | #define SSP3125000 14 | 39 | #define SSP3125000 14 |
39 | #define CODEC 15 | 40 | #define CODEC 15 |
41 | #define CODEC_f32768 16 | ||
40 | 42 | ||
41 | #define FREQ_4MHz 0 | 43 | #define FREQ_4MHz 0 |
42 | #define FREQ_2MHz 1 | 44 | #define FREQ_2MHz 1 |
@@ -46,9 +48,14 @@ | |||
46 | #define FREQ_128kHz 5 | 48 | #define FREQ_128kHz 5 |
47 | #define FREQ_64kHz 6 | 49 | #define FREQ_64kHz 6 |
48 | #define FREQ_32kHz 7 | 50 | #define FREQ_32kHz 7 |
51 | /* FREQ_* with values where bit (value & 0x10) is set are */ | ||
52 | /* used for CODEC_f32768 */ | ||
53 | #define FREQ_4096kHz 16 /* CODEC_f32768 */ | ||
49 | 54 | ||
50 | /* Used by application to set CODEC divider, word rate and frame rate */ | 55 | /* Used by application to set CODEC divider, word rate and frame rate */ |
51 | #define CODEC_VAL(freq, clk_per_sync, sync_per_frame) (CODEC | (freq << 8) | (clk_per_sync << 16) | (sync_per_frame << 28)) | 56 | #define CODEC_VAL(freq, clk_per_sync, sync_per_frame) \ |
57 | ((CODEC + ((freq & 0x10) >> 4)) | (freq << 8) | \ | ||
58 | (clk_per_sync << 16) | (sync_per_frame << 28)) | ||
52 | 59 | ||
53 | /* Used by driver to extract speed */ | 60 | /* Used by driver to extract speed */ |
54 | #define GET_SPEED(x) (x & 0xff) | 61 | #define GET_SPEED(x) (x & 0xff) |
@@ -68,6 +75,7 @@ | |||
68 | #define NORMAL_SYNC 1 | 75 | #define NORMAL_SYNC 1 |
69 | #define EARLY_SYNC 2 | 76 | #define EARLY_SYNC 2 |
70 | #define SECOND_WORD_SYNC 0x40000 | 77 | #define SECOND_WORD_SYNC 0x40000 |
78 | #define LATE_SYNC 0x80000 | ||
71 | 79 | ||
72 | #define BIT_SYNC 4 | 80 | #define BIT_SYNC 4 |
73 | #define WORD_SYNC 8 | 81 | #define WORD_SYNC 8 |
@@ -104,4 +112,21 @@ | |||
104 | /* Values for SSP_INBUFCHUNK */ | 112 | /* Values for SSP_INBUFCHUNK */ |
105 | /* plain integer with the size of DMA chunks */ | 113 | /* plain integer with the size of DMA chunks */ |
106 | 114 | ||
115 | /* To ensure that the timestamps are aligned with the data being read | ||
116 | * the read length MUST be a multiple of the length of the DMA buffers. | ||
117 | * | ||
118 | * Use a multiple of SSP_INPUT_CHUNK_SIZE defined below. | ||
119 | */ | ||
120 | #define SSP_INPUT_CHUNK_SIZE 256 | ||
121 | |||
122 | /* Request struct to pass through the ioctl interface to read | ||
123 | * data with timestamps. | ||
124 | */ | ||
125 | struct ssp_request { | ||
126 | char __user *buf; /* Where to put the data. */ | ||
127 | size_t len; /* Size of buf. MUST be a multiple of */ | ||
128 | /* SSP_INPUT_CHUNK_SIZE! */ | ||
129 | struct timespec ts; /* The time the data was sampled. */ | ||
130 | }; | ||
131 | |||
107 | #endif | 132 | #endif |