diff options
Diffstat (limited to 'arch/m68k/include')
59 files changed, 2639 insertions, 0 deletions
diff --git a/arch/m68k/include/asm/MC68332.h b/arch/m68k/include/asm/MC68332.h new file mode 100644 index 00000000000..6bb8f02685a --- /dev/null +++ b/arch/m68k/include/asm/MC68332.h | |||
@@ -0,0 +1,152 @@ | |||
1 | |||
2 | /* include/asm-m68knommu/MC68332.h: '332 control registers | ||
3 | * | ||
4 | * Copyright (C) 1998 Kenneth Albanowski <kjahds@kjahds.com>, | ||
5 | * | ||
6 | */ | ||
7 | |||
8 | #ifndef _MC68332_H_ | ||
9 | #define _MC68332_H_ | ||
10 | |||
11 | #define BYTE_REF(addr) (*((volatile unsigned char*)addr)) | ||
12 | #define WORD_REF(addr) (*((volatile unsigned short*)addr)) | ||
13 | |||
14 | #define PORTE_ADDR 0xfffa11 | ||
15 | #define PORTE BYTE_REF(PORTE_ADDR) | ||
16 | #define DDRE_ADDR 0xfffa15 | ||
17 | #define DDRE BYTE_REF(DDRE_ADDR) | ||
18 | #define PEPAR_ADDR 0xfffa17 | ||
19 | #define PEPAR BYTE_REF(PEPAR_ADDR) | ||
20 | |||
21 | #define PORTF_ADDR 0xfffa19 | ||
22 | #define PORTF BYTE_REF(PORTF_ADDR) | ||
23 | #define DDRF_ADDR 0xfffa1d | ||
24 | #define DDRF BYTE_REF(DDRF_ADDR) | ||
25 | #define PFPAR_ADDR 0xfffa1f | ||
26 | #define PFPAR BYTE_REF(PFPAR_ADDR) | ||
27 | |||
28 | #define PORTQS_ADDR 0xfffc15 | ||
29 | #define PORTQS BYTE_REF(PORTQS_ADDR) | ||
30 | #define DDRQS_ADDR 0xfffc17 | ||
31 | #define DDRQS BYTE_REF(DDRQS_ADDR) | ||
32 | #define PQSPAR_ADDR 0xfffc16 | ||
33 | #define PQSPAR BYTE_REF(PQSPAR_ADDR) | ||
34 | |||
35 | #define CSPAR0_ADDR 0xFFFA44 | ||
36 | #define CSPAR0 WORD_REF(CSPAR0_ADDR) | ||
37 | #define CSPAR1_ADDR 0xFFFA46 | ||
38 | #define CSPAR1 WORD_REF(CSPAR1_ADDR) | ||
39 | #define CSARBT_ADDR 0xFFFA48 | ||
40 | #define CSARBT WORD_REF(CSARBT_ADDR) | ||
41 | #define CSOPBT_ADDR 0xFFFA4A | ||
42 | #define CSOPBT WORD_REF(CSOPBT_ADDR) | ||
43 | #define CSBAR0_ADDR 0xFFFA4C | ||
44 | #define CSBAR0 WORD_REF(CSBAR0_ADDR) | ||
45 | #define CSOR0_ADDR 0xFFFA4E | ||
46 | #define CSOR0 WORD_REF(CSOR0_ADDR) | ||
47 | #define CSBAR1_ADDR 0xFFFA50 | ||
48 | #define CSBAR1 WORD_REF(CSBAR1_ADDR) | ||
49 | #define CSOR1_ADDR 0xFFFA52 | ||
50 | #define CSOR1 WORD_REF(CSOR1_ADDR) | ||
51 | #define CSBAR2_ADDR 0xFFFA54 | ||
52 | #define CSBAR2 WORD_REF(CSBAR2_ADDR) | ||
53 | #define CSOR2_ADDR 0xFFFA56 | ||
54 | #define CSOR2 WORD_REF(CSOR2_ADDR) | ||
55 | #define CSBAR3_ADDR 0xFFFA58 | ||
56 | #define CSBAR3 WORD_REF(CSBAR3_ADDR) | ||
57 | #define CSOR3_ADDR 0xFFFA5A | ||
58 | #define CSOR3 WORD_REF(CSOR3_ADDR) | ||
59 | #define CSBAR4_ADDR 0xFFFA5C | ||
60 | #define CSBAR4 WORD_REF(CSBAR4_ADDR) | ||
61 | #define CSOR4_ADDR 0xFFFA5E | ||
62 | #define CSOR4 WORD_REF(CSOR4_ADDR) | ||
63 | #define CSBAR5_ADDR 0xFFFA60 | ||
64 | #define CSBAR5 WORD_REF(CSBAR5_ADDR) | ||
65 | #define CSOR5_ADDR 0xFFFA62 | ||
66 | #define CSOR5 WORD_REF(CSOR5_ADDR) | ||
67 | #define CSBAR6_ADDR 0xFFFA64 | ||
68 | #define CSBAR6 WORD_REF(CSBAR6_ADDR) | ||
69 | #define CSOR6_ADDR 0xFFFA66 | ||
70 | #define CSOR6 WORD_REF(CSOR6_ADDR) | ||
71 | #define CSBAR7_ADDR 0xFFFA68 | ||
72 | #define CSBAR7 WORD_REF(CSBAR7_ADDR) | ||
73 | #define CSOR7_ADDR 0xFFFA6A | ||
74 | #define CSOR7 WORD_REF(CSOR7_ADDR) | ||
75 | #define CSBAR8_ADDR 0xFFFA6C | ||
76 | #define CSBAR8 WORD_REF(CSBAR8_ADDR) | ||
77 | #define CSOR8_ADDR 0xFFFA6E | ||
78 | #define CSOR8 WORD_REF(CSOR8_ADDR) | ||
79 | #define CSBAR9_ADDR 0xFFFA70 | ||
80 | #define CSBAR9 WORD_REF(CSBAR9_ADDR) | ||
81 | #define CSOR9_ADDR 0xFFFA72 | ||
82 | #define CSOR9 WORD_REF(CSOR9_ADDR) | ||
83 | #define CSBAR10_ADDR 0xFFFA74 | ||
84 | #define CSBAR10 WORD_REF(CSBAR10_ADDR) | ||
85 | #define CSOR10_ADDR 0xFFFA76 | ||
86 | #define CSOR10 WORD_REF(CSOR10_ADDR) | ||
87 | |||
88 | #define CSOR_MODE_ASYNC 0x0000 | ||
89 | #define CSOR_MODE_SYNC 0x8000 | ||
90 | #define CSOR_MODE_MASK 0x8000 | ||
91 | #define CSOR_BYTE_DISABLE 0x0000 | ||
92 | #define CSOR_BYTE_UPPER 0x4000 | ||
93 | #define CSOR_BYTE_LOWER 0x2000 | ||
94 | #define CSOR_BYTE_BOTH 0x6000 | ||
95 | #define CSOR_BYTE_MASK 0x6000 | ||
96 | #define CSOR_RW_RSVD 0x0000 | ||
97 | #define CSOR_RW_READ 0x0800 | ||
98 | #define CSOR_RW_WRITE 0x1000 | ||
99 | #define CSOR_RW_BOTH 0x1800 | ||
100 | #define CSOR_RW_MASK 0x1800 | ||
101 | #define CSOR_STROBE_DS 0x0400 | ||
102 | #define CSOR_STROBE_AS 0x0000 | ||
103 | #define CSOR_STROBE_MASK 0x0400 | ||
104 | #define CSOR_DSACK_WAIT(x) (wait << 6) | ||
105 | #define CSOR_DSACK_FTERM (14 << 6) | ||
106 | #define CSOR_DSACK_EXTERNAL (15 << 6) | ||
107 | #define CSOR_DSACK_MASK 0x03c0 | ||
108 | #define CSOR_SPACE_CPU 0x0000 | ||
109 | #define CSOR_SPACE_USER 0x0010 | ||
110 | #define CSOR_SPACE_SU 0x0020 | ||
111 | #define CSOR_SPACE_BOTH 0x0030 | ||
112 | #define CSOR_SPACE_MASK 0x0030 | ||
113 | #define CSOR_IPL_ALL 0x0000 | ||
114 | #define CSOR_IPL_PRIORITY(x) (x << 1) | ||
115 | #define CSOR_IPL_MASK 0x000e | ||
116 | #define CSOR_AVEC_ON 0x0001 | ||
117 | #define CSOR_AVEC_OFF 0x0000 | ||
118 | #define CSOR_AVEC_MASK 0x0001 | ||
119 | |||
120 | #define CSBAR_ADDR(x) ((addr >> 11) << 3) | ||
121 | #define CSBAR_ADDR_MASK 0xfff8 | ||
122 | #define CSBAR_BLKSIZE_2K 0x0000 | ||
123 | #define CSBAR_BLKSIZE_8K 0x0001 | ||
124 | #define CSBAR_BLKSIZE_16K 0x0002 | ||
125 | #define CSBAR_BLKSIZE_64K 0x0003 | ||
126 | #define CSBAR_BLKSIZE_128K 0x0004 | ||
127 | #define CSBAR_BLKSIZE_256K 0x0005 | ||
128 | #define CSBAR_BLKSIZE_512K 0x0006 | ||
129 | #define CSBAR_BLKSIZE_1M 0x0007 | ||
130 | #define CSBAR_BLKSIZE_MASK 0x0007 | ||
131 | |||
132 | #define CSPAR_DISC 0 | ||
133 | #define CSPAR_ALT 1 | ||
134 | #define CSPAR_CS8 2 | ||
135 | #define CSPAR_CS16 3 | ||
136 | #define CSPAR_MASK 3 | ||
137 | |||
138 | #define CSPAR0_CSBOOT(x) (x << 0) | ||
139 | #define CSPAR0_CS0(x) (x << 2) | ||
140 | #define CSPAR0_CS1(x) (x << 4) | ||
141 | #define CSPAR0_CS2(x) (x << 6) | ||
142 | #define CSPAR0_CS3(x) (x << 8) | ||
143 | #define CSPAR0_CS4(x) (x << 10) | ||
144 | #define CSPAR0_CS5(x) (x << 12) | ||
145 | |||
146 | #define CSPAR1_CS6(x) (x << 0) | ||
147 | #define CSPAR1_CS7(x) (x << 2) | ||
148 | #define CSPAR1_CS8(x) (x << 4) | ||
149 | #define CSPAR1_CS9(x) (x << 6) | ||
150 | #define CSPAR1_CS10(x) (x << 8) | ||
151 | |||
152 | #endif | ||
diff --git a/arch/m68k/include/asm/a.out.h b/arch/m68k/include/asm/a.out.h new file mode 100644 index 00000000000..3885fe43432 --- /dev/null +++ b/arch/m68k/include/asm/a.out.h | |||
@@ -0,0 +1,20 @@ | |||
1 | #ifndef __M68K_A_OUT_H__ | ||
2 | #define __M68K_A_OUT_H__ | ||
3 | |||
4 | struct exec | ||
5 | { | ||
6 | unsigned long a_info; /* Use macros N_MAGIC, etc for access */ | ||
7 | unsigned a_text; /* length of text, in bytes */ | ||
8 | unsigned a_data; /* length of data, in bytes */ | ||
9 | unsigned a_bss; /* length of uninitialized data area for file, in bytes */ | ||
10 | unsigned a_syms; /* length of symbol table data in file, in bytes */ | ||
11 | unsigned a_entry; /* start address */ | ||
12 | unsigned a_trsize; /* length of relocation info for text, in bytes */ | ||
13 | unsigned a_drsize; /* length of relocation info for data, in bytes */ | ||
14 | }; | ||
15 | |||
16 | #define N_TRSIZE(a) ((a).a_trsize) | ||
17 | #define N_DRSIZE(a) ((a).a_drsize) | ||
18 | #define N_SYMSIZE(a) ((a).a_syms) | ||
19 | |||
20 | #endif /* __M68K_A_OUT_H__ */ | ||
diff --git a/arch/m68k/include/asm/anchor.h b/arch/m68k/include/asm/anchor.h new file mode 100644 index 00000000000..871c0d5cfc3 --- /dev/null +++ b/arch/m68k/include/asm/anchor.h | |||
@@ -0,0 +1,112 @@ | |||
1 | /****************************************************************************/ | ||
2 | |||
3 | /* | ||
4 | * anchor.h -- Anchor CO-MEM Lite PCI host bridge part. | ||
5 | * | ||
6 | * (C) Copyright 2000, Moreton Bay (www.moreton.com.au) | ||
7 | */ | ||
8 | |||
9 | /****************************************************************************/ | ||
10 | #ifndef anchor_h | ||
11 | #define anchor_h | ||
12 | /****************************************************************************/ | ||
13 | |||
14 | /* | ||
15 | * Define basic addressing info. | ||
16 | */ | ||
17 | #if defined(CONFIG_M5407C3) | ||
18 | #define COMEM_BASE 0xFFFF0000 /* Base of CO-MEM address space */ | ||
19 | #define COMEM_IRQ 25 /* IRQ of anchor part */ | ||
20 | #else | ||
21 | #define COMEM_BASE 0x80000000 /* Base of CO-MEM address space */ | ||
22 | #define COMEM_IRQ 25 /* IRQ of anchor part */ | ||
23 | #endif | ||
24 | |||
25 | /****************************************************************************/ | ||
26 | |||
27 | /* | ||
28 | * 4-byte registers of CO-MEM, so adjust register addresses for | ||
29 | * easy access. Handy macro for word access too. | ||
30 | */ | ||
31 | #define LREG(a) ((a) >> 2) | ||
32 | #define WREG(a) ((a) >> 1) | ||
33 | |||
34 | |||
35 | /* | ||
36 | * Define base addresses within CO-MEM Lite register address space. | ||
37 | */ | ||
38 | #define COMEM_I2O 0x0000 /* I2O registers */ | ||
39 | #define COMEM_OPREGS 0x0400 /* Operation registers */ | ||
40 | #define COMEM_PCIBUS 0x2000 /* Direct access to PCI bus */ | ||
41 | #define COMEM_SHMEM 0x4000 /* Shared memory region */ | ||
42 | |||
43 | #define COMEM_SHMEMSIZE 0x4000 /* Size of shared memory */ | ||
44 | |||
45 | |||
46 | /* | ||
47 | * Define CO-MEM Registers. | ||
48 | */ | ||
49 | #define COMEM_I2OHISR 0x0030 /* I2O host interrupt status */ | ||
50 | #define COMEM_I2OHIMR 0x0034 /* I2O host interrupt mask */ | ||
51 | #define COMEM_I2OLISR 0x0038 /* I2O local interrupt status */ | ||
52 | #define COMEM_I2OLIMR 0x003c /* I2O local interrupt mask */ | ||
53 | #define COMEM_IBFPFIFO 0x0040 /* I2O inbound free/post FIFO */ | ||
54 | #define COMEM_OBPFFIFO 0x0044 /* I2O outbound post/free FIFO */ | ||
55 | #define COMEM_IBPFFIFO 0x0048 /* I2O inbound post/free FIFO */ | ||
56 | #define COMEM_OBFPFIFO 0x004c /* I2O outbound free/post FIFO */ | ||
57 | |||
58 | #define COMEM_DAHBASE 0x0460 /* Direct access base address */ | ||
59 | |||
60 | #define COMEM_NVCMD 0x04a0 /* I2C serial command */ | ||
61 | #define COMEM_NVREAD 0x04a4 /* I2C serial read */ | ||
62 | #define COMEM_NVSTAT 0x04a8 /* I2C status */ | ||
63 | |||
64 | #define COMEM_DMALBASE 0x04b0 /* DMA local base address */ | ||
65 | #define COMEM_DMAHBASE 0x04b4 /* DMA host base address */ | ||
66 | #define COMEM_DMASIZE 0x04b8 /* DMA size */ | ||
67 | #define COMEM_DMACTL 0x04bc /* DMA control */ | ||
68 | |||
69 | #define COMEM_HCTL 0x04e0 /* Host control */ | ||
70 | #define COMEM_HINT 0x04e4 /* Host interrupt control/status */ | ||
71 | #define COMEM_HLDATA 0x04e8 /* Host to local data mailbox */ | ||
72 | #define COMEM_LINT 0x04f4 /* Local interrupt contole status */ | ||
73 | #define COMEM_LHDATA 0x04f8 /* Local to host data mailbox */ | ||
74 | |||
75 | #define COMEM_LBUSCFG 0x04fc /* Local bus configuration */ | ||
76 | |||
77 | |||
78 | /* | ||
79 | * Commands and flags for use with Direct Access Register. | ||
80 | */ | ||
81 | #define COMEM_DA_IACK 0x00000000 /* Interrupt acknowledge (read) */ | ||
82 | #define COMEM_DA_SPCL 0x00000010 /* Special cycle (write) */ | ||
83 | #define COMEM_DA_MEMRD 0x00000004 /* Memory read cycle */ | ||
84 | #define COMEM_DA_MEMWR 0x00000004 /* Memory write cycle */ | ||
85 | #define COMEM_DA_IORD 0x00000002 /* I/O read cycle */ | ||
86 | #define COMEM_DA_IOWR 0x00000002 /* I/O write cycle */ | ||
87 | #define COMEM_DA_CFGRD 0x00000006 /* Configuration read cycle */ | ||
88 | #define COMEM_DA_CFGWR 0x00000006 /* Configuration write cycle */ | ||
89 | |||
90 | #define COMEM_DA_ADDR(a) ((a) & 0xffffe000) | ||
91 | |||
92 | #define COMEM_DA_OFFSET(a) ((a) & 0x00001fff) | ||
93 | |||
94 | |||
95 | /* | ||
96 | * The PCI bus will be limited in what slots will actually be used. | ||
97 | * Define valid device numbers for different boards. | ||
98 | */ | ||
99 | #if defined(CONFIG_M5407C3) | ||
100 | #define COMEM_MINDEV 14 /* Minimum valid DEVICE */ | ||
101 | #define COMEM_MAXDEV 14 /* Maximum valid DEVICE */ | ||
102 | #define COMEM_BRIDGEDEV 15 /* Slot bridge is in */ | ||
103 | #else | ||
104 | #define COMEM_MINDEV 0 /* Minimum valid DEVICE */ | ||
105 | #define COMEM_MAXDEV 3 /* Maximum valid DEVICE */ | ||
106 | #endif | ||
107 | |||
108 | #define COMEM_MAXPCI (COMEM_MAXDEV+1) /* Maximum PCI devices */ | ||
109 | |||
110 | |||
111 | /****************************************************************************/ | ||
112 | #endif /* anchor_h */ | ||
diff --git a/arch/m68k/include/asm/apollodma.h b/arch/m68k/include/asm/apollodma.h new file mode 100644 index 00000000000..954adc851ad --- /dev/null +++ b/arch/m68k/include/asm/apollodma.h | |||
@@ -0,0 +1,248 @@ | |||
1 | /* | ||
2 | * linux/include/asm/dma.h: Defines for using and allocating dma channels. | ||
3 | * Written by Hennus Bergman, 1992. | ||
4 | * High DMA channel support & info by Hannu Savolainen | ||
5 | * and John Boyd, Nov. 1992. | ||
6 | */ | ||
7 | |||
8 | #ifndef _ASM_APOLLO_DMA_H | ||
9 | #define _ASM_APOLLO_DMA_H | ||
10 | |||
11 | #include <asm/apollohw.h> /* need byte IO */ | ||
12 | #include <linux/spinlock.h> /* And spinlocks */ | ||
13 | #include <linux/delay.h> | ||
14 | |||
15 | |||
16 | #define dma_outb(val,addr) (*((volatile unsigned char *)(addr+IO_BASE)) = (val)) | ||
17 | #define dma_inb(addr) (*((volatile unsigned char *)(addr+IO_BASE))) | ||
18 | |||
19 | /* | ||
20 | * NOTES about DMA transfers: | ||
21 | * | ||
22 | * controller 1: channels 0-3, byte operations, ports 00-1F | ||
23 | * controller 2: channels 4-7, word operations, ports C0-DF | ||
24 | * | ||
25 | * - ALL registers are 8 bits only, regardless of transfer size | ||
26 | * - channel 4 is not used - cascades 1 into 2. | ||
27 | * - channels 0-3 are byte - addresses/counts are for physical bytes | ||
28 | * - channels 5-7 are word - addresses/counts are for physical words | ||
29 | * - transfers must not cross physical 64K (0-3) or 128K (5-7) boundaries | ||
30 | * - transfer count loaded to registers is 1 less than actual count | ||
31 | * - controller 2 offsets are all even (2x offsets for controller 1) | ||
32 | * - page registers for 5-7 don't use data bit 0, represent 128K pages | ||
33 | * - page registers for 0-3 use bit 0, represent 64K pages | ||
34 | * | ||
35 | * DMA transfers are limited to the lower 16MB of _physical_ memory. | ||
36 | * Note that addresses loaded into registers must be _physical_ addresses, | ||
37 | * not logical addresses (which may differ if paging is active). | ||
38 | * | ||
39 | * Address mapping for channels 0-3: | ||
40 | * | ||
41 | * A23 ... A16 A15 ... A8 A7 ... A0 (Physical addresses) | ||
42 | * | ... | | ... | | ... | | ||
43 | * | ... | | ... | | ... | | ||
44 | * | ... | | ... | | ... | | ||
45 | * P7 ... P0 A7 ... A0 A7 ... A0 | ||
46 | * | Page | Addr MSB | Addr LSB | (DMA registers) | ||
47 | * | ||
48 | * Address mapping for channels 5-7: | ||
49 | * | ||
50 | * A23 ... A17 A16 A15 ... A9 A8 A7 ... A1 A0 (Physical addresses) | ||
51 | * | ... | \ \ ... \ \ \ ... \ \ | ||
52 | * | ... | \ \ ... \ \ \ ... \ (not used) | ||
53 | * | ... | \ \ ... \ \ \ ... \ | ||
54 | * P7 ... P1 (0) A7 A6 ... A0 A7 A6 ... A0 | ||
55 | * | Page | Addr MSB | Addr LSB | (DMA registers) | ||
56 | * | ||
57 | * Again, channels 5-7 transfer _physical_ words (16 bits), so addresses | ||
58 | * and counts _must_ be word-aligned (the lowest address bit is _ignored_ at | ||
59 | * the hardware level, so odd-byte transfers aren't possible). | ||
60 | * | ||
61 | * Transfer count (_not # bytes_) is limited to 64K, represented as actual | ||
62 | * count - 1 : 64K => 0xFFFF, 1 => 0x0000. Thus, count is always 1 or more, | ||
63 | * and up to 128K bytes may be transferred on channels 5-7 in one operation. | ||
64 | * | ||
65 | */ | ||
66 | |||
67 | #define MAX_DMA_CHANNELS 8 | ||
68 | |||
69 | /* The maximum address that we can perform a DMA transfer to on this platform */#define MAX_DMA_ADDRESS (PAGE_OFFSET+0x1000000) | ||
70 | |||
71 | /* 8237 DMA controllers */ | ||
72 | #define IO_DMA1_BASE 0x10C00 /* 8 bit slave DMA, channels 0..3 */ | ||
73 | #define IO_DMA2_BASE 0x10D00 /* 16 bit master DMA, ch 4(=slave input)..7 */ | ||
74 | |||
75 | /* DMA controller registers */ | ||
76 | #define DMA1_CMD_REG (IO_DMA1_BASE+0x08) /* command register (w) */ | ||
77 | #define DMA1_STAT_REG (IO_DMA1_BASE+0x08) /* status register (r) */ | ||
78 | #define DMA1_REQ_REG (IO_DMA1_BASE+0x09) /* request register (w) */ | ||
79 | #define DMA1_MASK_REG (IO_DMA1_BASE+0x0A) /* single-channel mask (w) */ | ||
80 | #define DMA1_MODE_REG (IO_DMA1_BASE+0x0B) /* mode register (w) */ | ||
81 | #define DMA1_CLEAR_FF_REG (IO_DMA1_BASE+0x0C) /* clear pointer flip-flop (w) */ | ||
82 | #define DMA1_TEMP_REG (IO_DMA1_BASE+0x0D) /* Temporary Register (r) */ | ||
83 | #define DMA1_RESET_REG (IO_DMA1_BASE+0x0D) /* Master Clear (w) */ | ||
84 | #define DMA1_CLR_MASK_REG (IO_DMA1_BASE+0x0E) /* Clear Mask */ | ||
85 | #define DMA1_MASK_ALL_REG (IO_DMA1_BASE+0x0F) /* all-channels mask (w) */ | ||
86 | |||
87 | #define DMA2_CMD_REG (IO_DMA2_BASE+0x10) /* command register (w) */ | ||
88 | #define DMA2_STAT_REG (IO_DMA2_BASE+0x10) /* status register (r) */ | ||
89 | #define DMA2_REQ_REG (IO_DMA2_BASE+0x12) /* request register (w) */ | ||
90 | #define DMA2_MASK_REG (IO_DMA2_BASE+0x14) /* single-channel mask (w) */ | ||
91 | #define DMA2_MODE_REG (IO_DMA2_BASE+0x16) /* mode register (w) */ | ||
92 | #define DMA2_CLEAR_FF_REG (IO_DMA2_BASE+0x18) /* clear pointer flip-flop (w) */ | ||
93 | #define DMA2_TEMP_REG (IO_DMA2_BASE+0x1A) /* Temporary Register (r) */ | ||
94 | #define DMA2_RESET_REG (IO_DMA2_BASE+0x1A) /* Master Clear (w) */ | ||
95 | #define DMA2_CLR_MASK_REG (IO_DMA2_BASE+0x1C) /* Clear Mask */ | ||
96 | #define DMA2_MASK_ALL_REG (IO_DMA2_BASE+0x1E) /* all-channels mask (w) */ | ||
97 | |||
98 | #define DMA_ADDR_0 (IO_DMA1_BASE+0x00) /* DMA address registers */ | ||
99 | #define DMA_ADDR_1 (IO_DMA1_BASE+0x02) | ||
100 | #define DMA_ADDR_2 (IO_DMA1_BASE+0x04) | ||
101 | #define DMA_ADDR_3 (IO_DMA1_BASE+0x06) | ||
102 | #define DMA_ADDR_4 (IO_DMA2_BASE+0x00) | ||
103 | #define DMA_ADDR_5 (IO_DMA2_BASE+0x04) | ||
104 | #define DMA_ADDR_6 (IO_DMA2_BASE+0x08) | ||
105 | #define DMA_ADDR_7 (IO_DMA2_BASE+0x0C) | ||
106 | |||
107 | #define DMA_CNT_0 (IO_DMA1_BASE+0x01) /* DMA count registers */ | ||
108 | #define DMA_CNT_1 (IO_DMA1_BASE+0x03) | ||
109 | #define DMA_CNT_2 (IO_DMA1_BASE+0x05) | ||
110 | #define DMA_CNT_3 (IO_DMA1_BASE+0x07) | ||
111 | #define DMA_CNT_4 (IO_DMA2_BASE+0x02) | ||
112 | #define DMA_CNT_5 (IO_DMA2_BASE+0x06) | ||
113 | #define DMA_CNT_6 (IO_DMA2_BASE+0x0A) | ||
114 | #define DMA_CNT_7 (IO_DMA2_BASE+0x0E) | ||
115 | |||
116 | #define DMA_MODE_READ 0x44 /* I/O to memory, no autoinit, increment, single mode */ | ||
117 | #define DMA_MODE_WRITE 0x48 /* memory to I/O, no autoinit, increment, single mode */ | ||
118 | #define DMA_MODE_CASCADE 0xC0 /* pass thru DREQ->HRQ, DACK<-HLDA only */ | ||
119 | |||
120 | #define DMA_AUTOINIT 0x10 | ||
121 | |||
122 | #define DMA_8BIT 0 | ||
123 | #define DMA_16BIT 1 | ||
124 | #define DMA_BUSMASTER 2 | ||
125 | |||
126 | extern spinlock_t dma_spin_lock; | ||
127 | |||
128 | static __inline__ unsigned long claim_dma_lock(void) | ||
129 | { | ||
130 | unsigned long flags; | ||
131 | spin_lock_irqsave(&dma_spin_lock, flags); | ||
132 | return flags; | ||
133 | } | ||
134 | |||
135 | static __inline__ void release_dma_lock(unsigned long flags) | ||
136 | { | ||
137 | spin_unlock_irqrestore(&dma_spin_lock, flags); | ||
138 | } | ||
139 | |||
140 | /* enable/disable a specific DMA channel */ | ||
141 | static __inline__ void enable_dma(unsigned int dmanr) | ||
142 | { | ||
143 | if (dmanr<=3) | ||
144 | dma_outb(dmanr, DMA1_MASK_REG); | ||
145 | else | ||
146 | dma_outb(dmanr & 3, DMA2_MASK_REG); | ||
147 | } | ||
148 | |||
149 | static __inline__ void disable_dma(unsigned int dmanr) | ||
150 | { | ||
151 | if (dmanr<=3) | ||
152 | dma_outb(dmanr | 4, DMA1_MASK_REG); | ||
153 | else | ||
154 | dma_outb((dmanr & 3) | 4, DMA2_MASK_REG); | ||
155 | } | ||
156 | |||
157 | /* Clear the 'DMA Pointer Flip Flop'. | ||
158 | * Write 0 for LSB/MSB, 1 for MSB/LSB access. | ||
159 | * Use this once to initialize the FF to a known state. | ||
160 | * After that, keep track of it. :-) | ||
161 | * --- In order to do that, the DMA routines below should --- | ||
162 | * --- only be used while holding the DMA lock ! --- | ||
163 | */ | ||
164 | static __inline__ void clear_dma_ff(unsigned int dmanr) | ||
165 | { | ||
166 | if (dmanr<=3) | ||
167 | dma_outb(0, DMA1_CLEAR_FF_REG); | ||
168 | else | ||
169 | dma_outb(0, DMA2_CLEAR_FF_REG); | ||
170 | } | ||
171 | |||
172 | /* set mode (above) for a specific DMA channel */ | ||
173 | static __inline__ void set_dma_mode(unsigned int dmanr, char mode) | ||
174 | { | ||
175 | if (dmanr<=3) | ||
176 | dma_outb(mode | dmanr, DMA1_MODE_REG); | ||
177 | else | ||
178 | dma_outb(mode | (dmanr&3), DMA2_MODE_REG); | ||
179 | } | ||
180 | |||
181 | /* Set transfer address & page bits for specific DMA channel. | ||
182 | * Assumes dma flipflop is clear. | ||
183 | */ | ||
184 | static __inline__ void set_dma_addr(unsigned int dmanr, unsigned int a) | ||
185 | { | ||
186 | if (dmanr <= 3) { | ||
187 | dma_outb( a & 0xff, ((dmanr&3)<<1) + IO_DMA1_BASE ); | ||
188 | dma_outb( (a>>8) & 0xff, ((dmanr&3)<<1) + IO_DMA1_BASE ); | ||
189 | } else { | ||
190 | dma_outb( (a>>1) & 0xff, ((dmanr&3)<<2) + IO_DMA2_BASE ); | ||
191 | dma_outb( (a>>9) & 0xff, ((dmanr&3)<<2) + IO_DMA2_BASE ); | ||
192 | } | ||
193 | } | ||
194 | |||
195 | |||
196 | /* Set transfer size (max 64k for DMA1..3, 128k for DMA5..7) for | ||
197 | * a specific DMA channel. | ||
198 | * You must ensure the parameters are valid. | ||
199 | * NOTE: from a manual: "the number of transfers is one more | ||
200 | * than the initial word count"! This is taken into account. | ||
201 | * Assumes dma flip-flop is clear. | ||
202 | * NOTE 2: "count" represents _bytes_ and must be even for channels 5-7. | ||
203 | */ | ||
204 | static __inline__ void set_dma_count(unsigned int dmanr, unsigned int count) | ||
205 | { | ||
206 | count--; | ||
207 | if (dmanr <= 3) { | ||
208 | dma_outb( count & 0xff, ((dmanr&3)<<1) + 1 + IO_DMA1_BASE ); | ||
209 | dma_outb( (count>>8) & 0xff, ((dmanr&3)<<1) + 1 + IO_DMA1_BASE ); | ||
210 | } else { | ||
211 | dma_outb( (count>>1) & 0xff, ((dmanr&3)<<2) + 2 + IO_DMA2_BASE ); | ||
212 | dma_outb( (count>>9) & 0xff, ((dmanr&3)<<2) + 2 + IO_DMA2_BASE ); | ||
213 | } | ||
214 | } | ||
215 | |||
216 | |||
217 | /* Get DMA residue count. After a DMA transfer, this | ||
218 | * should return zero. Reading this while a DMA transfer is | ||
219 | * still in progress will return unpredictable results. | ||
220 | * If called before the channel has been used, it may return 1. | ||
221 | * Otherwise, it returns the number of _bytes_ left to transfer. | ||
222 | * | ||
223 | * Assumes DMA flip-flop is clear. | ||
224 | */ | ||
225 | static __inline__ int get_dma_residue(unsigned int dmanr) | ||
226 | { | ||
227 | unsigned int io_port = (dmanr<=3)? ((dmanr&3)<<1) + 1 + IO_DMA1_BASE | ||
228 | : ((dmanr&3)<<2) + 2 + IO_DMA2_BASE; | ||
229 | |||
230 | /* using short to get 16-bit wrap around */ | ||
231 | unsigned short count; | ||
232 | |||
233 | count = 1 + dma_inb(io_port); | ||
234 | count += dma_inb(io_port) << 8; | ||
235 | |||
236 | return (dmanr<=3)? count : (count<<1); | ||
237 | } | ||
238 | |||
239 | |||
240 | /* These are in kernel/dma.c: */ | ||
241 | extern int request_dma(unsigned int dmanr, const char * device_id); /* reserve a DMA channel */ | ||
242 | extern void free_dma(unsigned int dmanr); /* release it again */ | ||
243 | |||
244 | /* These are in arch/m68k/apollo/dma.c: */ | ||
245 | extern unsigned short dma_map_page(unsigned long phys_addr,int count,int type); | ||
246 | extern void dma_unmap_page(unsigned short dma_addr); | ||
247 | |||
248 | #endif /* _ASM_APOLLO_DMA_H */ | ||
diff --git a/arch/m68k/include/asm/auxvec.h b/arch/m68k/include/asm/auxvec.h new file mode 100644 index 00000000000..844d6d52204 --- /dev/null +++ b/arch/m68k/include/asm/auxvec.h | |||
@@ -0,0 +1,4 @@ | |||
1 | #ifndef __ASMm68k_AUXVEC_H | ||
2 | #define __ASMm68k_AUXVEC_H | ||
3 | |||
4 | #endif | ||
diff --git a/arch/m68k/include/asm/bitsperlong.h b/arch/m68k/include/asm/bitsperlong.h new file mode 100644 index 00000000000..6dc0bb0c13b --- /dev/null +++ b/arch/m68k/include/asm/bitsperlong.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/bitsperlong.h> | |||
diff --git a/arch/m68k/include/asm/byteorder.h b/arch/m68k/include/asm/byteorder.h new file mode 100644 index 00000000000..31b260a8880 --- /dev/null +++ b/arch/m68k/include/asm/byteorder.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _M68K_BYTEORDER_H | ||
2 | #define _M68K_BYTEORDER_H | ||
3 | |||
4 | #include <linux/byteorder/big_endian.h> | ||
5 | |||
6 | #endif /* _M68K_BYTEORDER_H */ | ||
diff --git a/arch/m68k/include/asm/cachectl.h b/arch/m68k/include/asm/cachectl.h new file mode 100644 index 00000000000..525978e959e --- /dev/null +++ b/arch/m68k/include/asm/cachectl.h | |||
@@ -0,0 +1,14 @@ | |||
1 | #ifndef _M68K_CACHECTL_H | ||
2 | #define _M68K_CACHECTL_H | ||
3 | |||
4 | /* Definitions for the cacheflush system call. */ | ||
5 | |||
6 | #define FLUSH_SCOPE_LINE 1 /* Flush a cache line */ | ||
7 | #define FLUSH_SCOPE_PAGE 2 /* Flush a page */ | ||
8 | #define FLUSH_SCOPE_ALL 3 /* Flush the whole cache -- superuser only */ | ||
9 | |||
10 | #define FLUSH_CACHE_DATA 1 /* Writeback and flush data cache */ | ||
11 | #define FLUSH_CACHE_INSN 2 /* Flush instruction cache */ | ||
12 | #define FLUSH_CACHE_BOTH 3 /* Flush both caches */ | ||
13 | |||
14 | #endif /* _M68K_CACHECTL_H */ | ||
diff --git a/arch/m68k/include/asm/cputime.h b/arch/m68k/include/asm/cputime.h new file mode 100644 index 00000000000..c79c5e89230 --- /dev/null +++ b/arch/m68k/include/asm/cputime.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __M68K_CPUTIME_H | ||
2 | #define __M68K_CPUTIME_H | ||
3 | |||
4 | #include <asm-generic/cputime.h> | ||
5 | |||
6 | #endif /* __M68K_CPUTIME_H */ | ||
diff --git a/arch/m68k/include/asm/device.h b/arch/m68k/include/asm/device.h new file mode 100644 index 00000000000..d8f9872b0e2 --- /dev/null +++ b/arch/m68k/include/asm/device.h | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | * Arch specific extensions to struct device | ||
3 | * | ||
4 | * This file is released under the GPLv2 | ||
5 | */ | ||
6 | #include <asm-generic/device.h> | ||
7 | |||
diff --git a/arch/m68k/include/asm/emergency-restart.h b/arch/m68k/include/asm/emergency-restart.h new file mode 100644 index 00000000000..108d8c48e42 --- /dev/null +++ b/arch/m68k/include/asm/emergency-restart.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _ASM_EMERGENCY_RESTART_H | ||
2 | #define _ASM_EMERGENCY_RESTART_H | ||
3 | |||
4 | #include <asm-generic/emergency-restart.h> | ||
5 | |||
6 | #endif /* _ASM_EMERGENCY_RESTART_H */ | ||
diff --git a/arch/m68k/include/asm/entry_mm.h b/arch/m68k/include/asm/entry_mm.h new file mode 100644 index 00000000000..73b8c8fbed9 --- /dev/null +++ b/arch/m68k/include/asm/entry_mm.h | |||
@@ -0,0 +1,128 @@ | |||
1 | #ifndef __M68K_ENTRY_H | ||
2 | #define __M68K_ENTRY_H | ||
3 | |||
4 | #include <asm/setup.h> | ||
5 | #include <asm/page.h> | ||
6 | #ifdef __ASSEMBLY__ | ||
7 | #include <asm/thread_info.h> | ||
8 | #endif | ||
9 | |||
10 | /* | ||
11 | * Stack layout in 'ret_from_exception': | ||
12 | * | ||
13 | * This allows access to the syscall arguments in registers d1-d5 | ||
14 | * | ||
15 | * 0(sp) - d1 | ||
16 | * 4(sp) - d2 | ||
17 | * 8(sp) - d3 | ||
18 | * C(sp) - d4 | ||
19 | * 10(sp) - d5 | ||
20 | * 14(sp) - a0 | ||
21 | * 18(sp) - a1 | ||
22 | * 1C(sp) - a2 | ||
23 | * 20(sp) - d0 | ||
24 | * 24(sp) - orig_d0 | ||
25 | * 28(sp) - stack adjustment | ||
26 | * 2C(sp) - sr | ||
27 | * 2E(sp) - pc | ||
28 | * 32(sp) - format & vector | ||
29 | */ | ||
30 | |||
31 | /* | ||
32 | * 97/05/14 Andreas: Register %a2 is now set to the current task throughout | ||
33 | * the whole kernel. | ||
34 | */ | ||
35 | |||
36 | /* the following macro is used when enabling interrupts */ | ||
37 | #if defined(MACH_ATARI_ONLY) | ||
38 | /* block out HSYNC on the atari */ | ||
39 | #define ALLOWINT (~0x400) | ||
40 | #define MAX_NOINT_IPL 3 | ||
41 | #else | ||
42 | /* portable version */ | ||
43 | #define ALLOWINT (~0x700) | ||
44 | #define MAX_NOINT_IPL 0 | ||
45 | #endif /* machine compilation types */ | ||
46 | |||
47 | #ifdef __ASSEMBLY__ | ||
48 | |||
49 | #define curptr a2 | ||
50 | |||
51 | LFLUSH_I_AND_D = 0x00000808 | ||
52 | |||
53 | #define SAVE_ALL_INT save_all_int | ||
54 | #define SAVE_ALL_SYS save_all_sys | ||
55 | #define RESTORE_ALL restore_all | ||
56 | /* | ||
57 | * This defines the normal kernel pt-regs layout. | ||
58 | * | ||
59 | * regs a3-a6 and d6-d7 are preserved by C code | ||
60 | * the kernel doesn't mess with usp unless it needs to | ||
61 | */ | ||
62 | |||
63 | /* | ||
64 | * a -1 in the orig_d0 field signifies | ||
65 | * that the stack frame is NOT for syscall | ||
66 | */ | ||
67 | .macro save_all_int | ||
68 | clrl %sp@- | stk_adj | ||
69 | pea -1:w | orig d0 | ||
70 | movel %d0,%sp@- | d0 | ||
71 | moveml %d1-%d5/%a0-%a1/%curptr,%sp@- | ||
72 | .endm | ||
73 | |||
74 | .macro save_all_sys | ||
75 | clrl %sp@- | stk_adj | ||
76 | movel %d0,%sp@- | orig d0 | ||
77 | movel %d0,%sp@- | d0 | ||
78 | moveml %d1-%d5/%a0-%a1/%curptr,%sp@- | ||
79 | .endm | ||
80 | |||
81 | .macro restore_all | ||
82 | moveml %sp@+,%a0-%a1/%curptr/%d1-%d5 | ||
83 | movel %sp@+,%d0 | ||
84 | addql #4,%sp | orig d0 | ||
85 | addl %sp@+,%sp | stk adj | ||
86 | rte | ||
87 | .endm | ||
88 | |||
89 | #define SWITCH_STACK_SIZE (6*4+4) /* includes return address */ | ||
90 | |||
91 | #define SAVE_SWITCH_STACK save_switch_stack | ||
92 | #define RESTORE_SWITCH_STACK restore_switch_stack | ||
93 | #define GET_CURRENT(tmp) get_current tmp | ||
94 | |||
95 | .macro save_switch_stack | ||
96 | moveml %a3-%a6/%d6-%d7,%sp@- | ||
97 | .endm | ||
98 | |||
99 | .macro restore_switch_stack | ||
100 | moveml %sp@+,%a3-%a6/%d6-%d7 | ||
101 | .endm | ||
102 | |||
103 | .macro get_current reg=%d0 | ||
104 | movel %sp,\reg | ||
105 | andw #-THREAD_SIZE,\reg | ||
106 | movel \reg,%curptr | ||
107 | movel %curptr@,%curptr | ||
108 | .endm | ||
109 | |||
110 | #else /* C source */ | ||
111 | |||
112 | #define STR(X) STR1(X) | ||
113 | #define STR1(X) #X | ||
114 | |||
115 | #define SAVE_ALL_INT \ | ||
116 | "clrl %%sp@-;" /* stk_adj */ \ | ||
117 | "pea -1:w;" /* orig d0 = -1 */ \ | ||
118 | "movel %%d0,%%sp@-;" /* d0 */ \ | ||
119 | "moveml %%d1-%%d5/%%a0-%%a2,%%sp@-" | ||
120 | #define GET_CURRENT(tmp) \ | ||
121 | "movel %%sp,"#tmp"\n\t" \ | ||
122 | "andw #-"STR(THREAD_SIZE)","#tmp"\n\t" \ | ||
123 | "movel "#tmp",%%a2\n\t" \ | ||
124 | "movel %%a2@,%%a2" | ||
125 | |||
126 | #endif | ||
127 | |||
128 | #endif /* __M68K_ENTRY_H */ | ||
diff --git a/arch/m68k/include/asm/entry_no.h b/arch/m68k/include/asm/entry_no.h new file mode 100644 index 00000000000..68611e3dbb1 --- /dev/null +++ b/arch/m68k/include/asm/entry_no.h | |||
@@ -0,0 +1,181 @@ | |||
1 | #ifndef __M68KNOMMU_ENTRY_H | ||
2 | #define __M68KNOMMU_ENTRY_H | ||
3 | |||
4 | #include <asm/setup.h> | ||
5 | #include <asm/page.h> | ||
6 | |||
7 | /* | ||
8 | * Stack layout in 'ret_from_exception': | ||
9 | * | ||
10 | * This allows access to the syscall arguments in registers d1-d5 | ||
11 | * | ||
12 | * 0(sp) - d1 | ||
13 | * 4(sp) - d2 | ||
14 | * 8(sp) - d3 | ||
15 | * C(sp) - d4 | ||
16 | * 10(sp) - d5 | ||
17 | * 14(sp) - a0 | ||
18 | * 18(sp) - a1 | ||
19 | * 1C(sp) - a2 | ||
20 | * 20(sp) - d0 | ||
21 | * 24(sp) - orig_d0 | ||
22 | * 28(sp) - stack adjustment | ||
23 | * 2C(sp) - [ sr ] [ format & vector ] | ||
24 | * 2E(sp) - [ pc-hiword ] [ sr ] | ||
25 | * 30(sp) - [ pc-loword ] [ pc-hiword ] | ||
26 | * 32(sp) - [ format & vector ] [ pc-loword ] | ||
27 | * ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ | ||
28 | * M68K COLDFIRE | ||
29 | */ | ||
30 | |||
31 | #define ALLOWINT (~0x700) | ||
32 | |||
33 | #ifdef __ASSEMBLY__ | ||
34 | |||
35 | #define SWITCH_STACK_SIZE (6*4+4) /* Includes return address */ | ||
36 | |||
37 | /* | ||
38 | * This defines the normal kernel pt-regs layout. | ||
39 | * | ||
40 | * regs are a2-a6 and d6-d7 preserved by C code | ||
41 | * the kernel doesn't mess with usp unless it needs to | ||
42 | */ | ||
43 | |||
44 | #ifdef CONFIG_COLDFIRE | ||
45 | #ifdef CONFIG_COLDFIRE_SW_A7 | ||
46 | /* | ||
47 | * This is made a little more tricky on older ColdFires. There is no | ||
48 | * separate supervisor and user stack pointers. Need to artificially | ||
49 | * construct a usp in software... When doing this we need to disable | ||
50 | * interrupts, otherwise bad things will happen. | ||
51 | */ | ||
52 | .globl sw_usp | ||
53 | .globl sw_ksp | ||
54 | |||
55 | .macro SAVE_ALL | ||
56 | move #0x2700,%sr /* disable intrs */ | ||
57 | btst #5,%sp@(2) /* from user? */ | ||
58 | bnes 6f /* no, skip */ | ||
59 | movel %sp,sw_usp /* save user sp */ | ||
60 | addql #8,sw_usp /* remove exception */ | ||
61 | movel sw_ksp,%sp /* kernel sp */ | ||
62 | subql #8,%sp /* room for exception */ | ||
63 | clrl %sp@- /* stkadj */ | ||
64 | movel %d0,%sp@- /* orig d0 */ | ||
65 | movel %d0,%sp@- /* d0 */ | ||
66 | lea %sp@(-32),%sp /* space for 8 regs */ | ||
67 | moveml %d1-%d5/%a0-%a2,%sp@ | ||
68 | movel sw_usp,%a0 /* get usp */ | ||
69 | movel %a0@-,%sp@(PT_OFF_PC) /* copy exception program counter */ | ||
70 | movel %a0@-,%sp@(PT_OFF_FORMATVEC)/*copy exception format/vector/sr */ | ||
71 | bra 7f | ||
72 | 6: | ||
73 | clrl %sp@- /* stkadj */ | ||
74 | movel %d0,%sp@- /* orig d0 */ | ||
75 | movel %d0,%sp@- /* d0 */ | ||
76 | lea %sp@(-32),%sp /* space for 8 regs */ | ||
77 | moveml %d1-%d5/%a0-%a2,%sp@ | ||
78 | 7: | ||
79 | .endm | ||
80 | |||
81 | .macro RESTORE_USER | ||
82 | move #0x2700,%sr /* disable intrs */ | ||
83 | movel sw_usp,%a0 /* get usp */ | ||
84 | movel %sp@(PT_OFF_PC),%a0@- /* copy exception program counter */ | ||
85 | movel %sp@(PT_OFF_FORMATVEC),%a0@-/*copy exception format/vector/sr */ | ||
86 | moveml %sp@,%d1-%d5/%a0-%a2 | ||
87 | lea %sp@(32),%sp /* space for 8 regs */ | ||
88 | movel %sp@+,%d0 | ||
89 | addql #4,%sp /* orig d0 */ | ||
90 | addl %sp@+,%sp /* stkadj */ | ||
91 | addql #8,%sp /* remove exception */ | ||
92 | movel %sp,sw_ksp /* save ksp */ | ||
93 | subql #8,sw_usp /* set exception */ | ||
94 | movel sw_usp,%sp /* restore usp */ | ||
95 | rte | ||
96 | .endm | ||
97 | |||
98 | .macro RDUSP | ||
99 | movel sw_usp,%a3 | ||
100 | .endm | ||
101 | |||
102 | .macro WRUSP | ||
103 | movel %a3,sw_usp | ||
104 | .endm | ||
105 | |||
106 | #else /* !CONFIG_COLDFIRE_SW_A7 */ | ||
107 | /* | ||
108 | * Modern ColdFire parts have separate supervisor and user stack | ||
109 | * pointers. Simple load and restore macros for this case. | ||
110 | */ | ||
111 | .macro SAVE_ALL | ||
112 | move #0x2700,%sr /* disable intrs */ | ||
113 | clrl %sp@- /* stkadj */ | ||
114 | movel %d0,%sp@- /* orig d0 */ | ||
115 | movel %d0,%sp@- /* d0 */ | ||
116 | lea %sp@(-32),%sp /* space for 8 regs */ | ||
117 | moveml %d1-%d5/%a0-%a2,%sp@ | ||
118 | .endm | ||
119 | |||
120 | .macro RESTORE_USER | ||
121 | moveml %sp@,%d1-%d5/%a0-%a2 | ||
122 | lea %sp@(32),%sp /* space for 8 regs */ | ||
123 | movel %sp@+,%d0 | ||
124 | addql #4,%sp /* orig d0 */ | ||
125 | addl %sp@+,%sp /* stkadj */ | ||
126 | rte | ||
127 | .endm | ||
128 | |||
129 | .macro RDUSP | ||
130 | /*move %usp,%a3*/ | ||
131 | .word 0x4e6b | ||
132 | .endm | ||
133 | |||
134 | .macro WRUSP | ||
135 | /*move %a3,%usp*/ | ||
136 | .word 0x4e63 | ||
137 | .endm | ||
138 | |||
139 | #endif /* !CONFIG_COLDFIRE_SW_A7 */ | ||
140 | |||
141 | .macro SAVE_SWITCH_STACK | ||
142 | lea %sp@(-24),%sp /* 6 regs */ | ||
143 | moveml %a3-%a6/%d6-%d7,%sp@ | ||
144 | .endm | ||
145 | |||
146 | .macro RESTORE_SWITCH_STACK | ||
147 | moveml %sp@,%a3-%a6/%d6-%d7 | ||
148 | lea %sp@(24),%sp /* 6 regs */ | ||
149 | .endm | ||
150 | |||
151 | #else /* !CONFIG_COLDFIRE */ | ||
152 | |||
153 | /* | ||
154 | * Standard 68k interrupt entry and exit macros. | ||
155 | */ | ||
156 | .macro SAVE_ALL | ||
157 | clrl %sp@- /* stkadj */ | ||
158 | movel %d0,%sp@- /* orig d0 */ | ||
159 | movel %d0,%sp@- /* d0 */ | ||
160 | moveml %d1-%d5/%a0-%a2,%sp@- | ||
161 | .endm | ||
162 | |||
163 | .macro RESTORE_ALL | ||
164 | moveml %sp@+,%a0-%a2/%d1-%d5 | ||
165 | movel %sp@+,%d0 | ||
166 | addql #4,%sp /* orig d0 */ | ||
167 | addl %sp@+,%sp /* stkadj */ | ||
168 | rte | ||
169 | .endm | ||
170 | |||
171 | .macro SAVE_SWITCH_STACK | ||
172 | moveml %a3-%a6/%d6-%d7,%sp@- | ||
173 | .endm | ||
174 | |||
175 | .macro RESTORE_SWITCH_STACK | ||
176 | moveml %sp@+,%a3-%a6/%d6-%d7 | ||
177 | .endm | ||
178 | |||
179 | #endif /* !COLDFIRE_SW_A7 */ | ||
180 | #endif /* __ASSEMBLY__ */ | ||
181 | #endif /* __M68KNOMMU_ENTRY_H */ | ||
diff --git a/arch/m68k/include/asm/errno.h b/arch/m68k/include/asm/errno.h new file mode 100644 index 00000000000..0d4e188d6ef --- /dev/null +++ b/arch/m68k/include/asm/errno.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _M68K_ERRNO_H | ||
2 | #define _M68K_ERRNO_H | ||
3 | |||
4 | #include <asm-generic/errno.h> | ||
5 | |||
6 | #endif /* _M68K_ERRNO_H */ | ||
diff --git a/arch/m68k/include/asm/fcntl.h b/arch/m68k/include/asm/fcntl.h new file mode 100644 index 00000000000..1c369b20dc4 --- /dev/null +++ b/arch/m68k/include/asm/fcntl.h | |||
@@ -0,0 +1,11 @@ | |||
1 | #ifndef _M68K_FCNTL_H | ||
2 | #define _M68K_FCNTL_H | ||
3 | |||
4 | #define O_DIRECTORY 040000 /* must be a directory */ | ||
5 | #define O_NOFOLLOW 0100000 /* don't follow links */ | ||
6 | #define O_DIRECT 0200000 /* direct disk access hint - currently ignored */ | ||
7 | #define O_LARGEFILE 0400000 | ||
8 | |||
9 | #include <asm-generic/fcntl.h> | ||
10 | |||
11 | #endif /* _M68K_FCNTL_H */ | ||
diff --git a/arch/m68k/include/asm/futex.h b/arch/m68k/include/asm/futex.h new file mode 100644 index 00000000000..6a332a9f099 --- /dev/null +++ b/arch/m68k/include/asm/futex.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _ASM_FUTEX_H | ||
2 | #define _ASM_FUTEX_H | ||
3 | |||
4 | #include <asm-generic/futex.h> | ||
5 | |||
6 | #endif | ||
diff --git a/arch/m68k/include/asm/hw_irq.h b/arch/m68k/include/asm/hw_irq.h new file mode 100644 index 00000000000..eacef0951fb --- /dev/null +++ b/arch/m68k/include/asm/hw_irq.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __ASM_M68K_HW_IRQ_H | ||
2 | #define __ASM_M68K_HW_IRQ_H | ||
3 | |||
4 | /* Dummy include. */ | ||
5 | |||
6 | #endif | ||
diff --git a/arch/m68k/include/asm/ioctl.h b/arch/m68k/include/asm/ioctl.h new file mode 100644 index 00000000000..b279fe06dfe --- /dev/null +++ b/arch/m68k/include/asm/ioctl.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/ioctl.h> | |||
diff --git a/arch/m68k/include/asm/ioctls.h b/arch/m68k/include/asm/ioctls.h new file mode 100644 index 00000000000..1332bb4ca5b --- /dev/null +++ b/arch/m68k/include/asm/ioctls.h | |||
@@ -0,0 +1,8 @@ | |||
1 | #ifndef __ARCH_M68K_IOCTLS_H__ | ||
2 | #define __ARCH_M68K_IOCTLS_H__ | ||
3 | |||
4 | #define FIOQSIZE 0x545E | ||
5 | |||
6 | #include <asm-generic/ioctls.h> | ||
7 | |||
8 | #endif /* __ARCH_M68K_IOCTLS_H__ */ | ||
diff --git a/arch/m68k/include/asm/ipcbuf.h b/arch/m68k/include/asm/ipcbuf.h new file mode 100644 index 00000000000..a623ea3f095 --- /dev/null +++ b/arch/m68k/include/asm/ipcbuf.h | |||
@@ -0,0 +1,29 @@ | |||
1 | #ifndef __m68k_IPCBUF_H__ | ||
2 | #define __m68k_IPCBUF_H__ | ||
3 | |||
4 | /* | ||
5 | * The user_ipc_perm structure for m68k architecture. | ||
6 | * Note extra padding because this structure is passed back and forth | ||
7 | * between kernel and user space. | ||
8 | * | ||
9 | * Pad space is left for: | ||
10 | * - 32-bit mode_t and seq | ||
11 | * - 2 miscellaneous 32-bit values | ||
12 | */ | ||
13 | |||
14 | struct ipc64_perm | ||
15 | { | ||
16 | __kernel_key_t key; | ||
17 | __kernel_uid32_t uid; | ||
18 | __kernel_gid32_t gid; | ||
19 | __kernel_uid32_t cuid; | ||
20 | __kernel_gid32_t cgid; | ||
21 | __kernel_mode_t mode; | ||
22 | unsigned short __pad1; | ||
23 | unsigned short seq; | ||
24 | unsigned short __pad2; | ||
25 | unsigned long __unused1; | ||
26 | unsigned long __unused2; | ||
27 | }; | ||
28 | |||
29 | #endif /* __m68k_IPCBUF_H__ */ | ||
diff --git a/arch/m68k/include/asm/irq_regs.h b/arch/m68k/include/asm/irq_regs.h new file mode 100644 index 00000000000..3dd9c0b7027 --- /dev/null +++ b/arch/m68k/include/asm/irq_regs.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/irq_regs.h> | |||
diff --git a/arch/m68k/include/asm/kdebug.h b/arch/m68k/include/asm/kdebug.h new file mode 100644 index 00000000000..6ece1b03766 --- /dev/null +++ b/arch/m68k/include/asm/kdebug.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/kdebug.h> | |||
diff --git a/arch/m68k/include/asm/kmap_types.h b/arch/m68k/include/asm/kmap_types.h new file mode 100644 index 00000000000..3413cc1390e --- /dev/null +++ b/arch/m68k/include/asm/kmap_types.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __ASM_M68K_KMAP_TYPES_H | ||
2 | #define __ASM_M68K_KMAP_TYPES_H | ||
3 | |||
4 | #include <asm-generic/kmap_types.h> | ||
5 | |||
6 | #endif /* __ASM_M68K_KMAP_TYPES_H */ | ||
diff --git a/arch/m68k/include/asm/local.h b/arch/m68k/include/asm/local.h new file mode 100644 index 00000000000..6c259263e1f --- /dev/null +++ b/arch/m68k/include/asm/local.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _ASM_M68K_LOCAL_H | ||
2 | #define _ASM_M68K_LOCAL_H | ||
3 | |||
4 | #include <asm-generic/local.h> | ||
5 | |||
6 | #endif /* _ASM_M68K_LOCAL_H */ | ||
diff --git a/arch/m68k/include/asm/local64.h b/arch/m68k/include/asm/local64.h new file mode 100644 index 00000000000..36c93b5cc23 --- /dev/null +++ b/arch/m68k/include/asm/local64.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/local64.h> | |||
diff --git a/arch/m68k/include/asm/m5249sim.h b/arch/m68k/include/asm/m5249sim.h new file mode 100644 index 00000000000..805714ca8d7 --- /dev/null +++ b/arch/m68k/include/asm/m5249sim.h | |||
@@ -0,0 +1,255 @@ | |||
1 | /****************************************************************************/ | ||
2 | |||
3 | /* | ||
4 | * m5249sim.h -- ColdFire 5249 System Integration Module support. | ||
5 | * | ||
6 | * (C) Copyright 2002, Greg Ungerer (gerg@snapgear.com) | ||
7 | */ | ||
8 | |||
9 | /****************************************************************************/ | ||
10 | #ifndef m5249sim_h | ||
11 | #define m5249sim_h | ||
12 | /****************************************************************************/ | ||
13 | |||
14 | #define CPU_NAME "COLDFIRE(m5249)" | ||
15 | #define CPU_INSTR_PER_JIFFY 3 | ||
16 | #define MCF_BUSCLK (MCF_CLK / 2) | ||
17 | |||
18 | #include <asm/m52xxacr.h> | ||
19 | |||
20 | /* | ||
21 | * The 5249 has a second MBAR region, define its address. | ||
22 | */ | ||
23 | #define MCF_MBAR2 0x80000000 | ||
24 | |||
25 | /* | ||
26 | * Define the 5249 SIM register set addresses. | ||
27 | */ | ||
28 | #define MCFSIM_RSR 0x00 /* Reset Status reg (r/w) */ | ||
29 | #define MCFSIM_SYPCR 0x01 /* System Protection reg (r/w)*/ | ||
30 | #define MCFSIM_SWIVR 0x02 /* SW Watchdog intr reg (r/w) */ | ||
31 | #define MCFSIM_SWSR 0x03 /* SW Watchdog service (r/w) */ | ||
32 | #define MCFSIM_PAR 0x04 /* Pin Assignment reg (r/w) */ | ||
33 | #define MCFSIM_IRQPAR 0x06 /* Interrupt Assignment reg (r/w) */ | ||
34 | #define MCFSIM_MPARK 0x0C /* BUS Master Control Reg*/ | ||
35 | #define MCFSIM_IPR 0x40 /* Interrupt Pend reg (r/w) */ | ||
36 | #define MCFSIM_IMR 0x44 /* Interrupt Mask reg (r/w) */ | ||
37 | #define MCFSIM_AVR 0x4b /* Autovector Ctrl reg (r/w) */ | ||
38 | #define MCFSIM_ICR0 0x4c /* Intr Ctrl reg 0 (r/w) */ | ||
39 | #define MCFSIM_ICR1 0x4d /* Intr Ctrl reg 1 (r/w) */ | ||
40 | #define MCFSIM_ICR2 0x4e /* Intr Ctrl reg 2 (r/w) */ | ||
41 | #define MCFSIM_ICR3 0x4f /* Intr Ctrl reg 3 (r/w) */ | ||
42 | #define MCFSIM_ICR4 0x50 /* Intr Ctrl reg 4 (r/w) */ | ||
43 | #define MCFSIM_ICR5 0x51 /* Intr Ctrl reg 5 (r/w) */ | ||
44 | #define MCFSIM_ICR6 0x52 /* Intr Ctrl reg 6 (r/w) */ | ||
45 | #define MCFSIM_ICR7 0x53 /* Intr Ctrl reg 7 (r/w) */ | ||
46 | #define MCFSIM_ICR8 0x54 /* Intr Ctrl reg 8 (r/w) */ | ||
47 | #define MCFSIM_ICR9 0x55 /* Intr Ctrl reg 9 (r/w) */ | ||
48 | #define MCFSIM_ICR10 0x56 /* Intr Ctrl reg 10 (r/w) */ | ||
49 | #define MCFSIM_ICR11 0x57 /* Intr Ctrl reg 11 (r/w) */ | ||
50 | |||
51 | #define MCFSIM_CSAR0 0x80 /* CS 0 Address 0 reg (r/w) */ | ||
52 | #define MCFSIM_CSMR0 0x84 /* CS 0 Mask 0 reg (r/w) */ | ||
53 | #define MCFSIM_CSCR0 0x8a /* CS 0 Control reg (r/w) */ | ||
54 | #define MCFSIM_CSAR1 0x8c /* CS 1 Address reg (r/w) */ | ||
55 | #define MCFSIM_CSMR1 0x90 /* CS 1 Mask reg (r/w) */ | ||
56 | #define MCFSIM_CSCR1 0x96 /* CS 1 Control reg (r/w) */ | ||
57 | #define MCFSIM_CSAR2 0x98 /* CS 2 Address reg (r/w) */ | ||
58 | #define MCFSIM_CSMR2 0x9c /* CS 2 Mask reg (r/w) */ | ||
59 | #define MCFSIM_CSCR2 0xa2 /* CS 2 Control reg (r/w) */ | ||
60 | #define MCFSIM_CSAR3 0xa4 /* CS 3 Address reg (r/w) */ | ||
61 | #define MCFSIM_CSMR3 0xa8 /* CS 3 Mask reg (r/w) */ | ||
62 | #define MCFSIM_CSCR3 0xae /* CS 3 Control reg (r/w) */ | ||
63 | |||
64 | #define MCFSIM_DCR (MCF_MBAR + 0x100) /* DRAM Control */ | ||
65 | #define MCFSIM_DACR0 (MCF_MBAR + 0x108) /* DRAM 0 Addr/Ctrl */ | ||
66 | #define MCFSIM_DMR0 (MCF_MBAR + 0x10c) /* DRAM 0 Mask */ | ||
67 | #define MCFSIM_DACR1 (MCF_MBAR + 0x110) /* DRAM 1 Addr/Ctrl */ | ||
68 | #define MCFSIM_DMR1 (MCF_MBAR + 0x114) /* DRAM 1 Mask */ | ||
69 | |||
70 | /* | ||
71 | * Timer module. | ||
72 | */ | ||
73 | #define MCFTIMER_BASE1 (MCF_MBAR + 0x140) /* Base of TIMER1 */ | ||
74 | #define MCFTIMER_BASE2 (MCF_MBAR + 0x180) /* Base of TIMER2 */ | ||
75 | |||
76 | /* | ||
77 | * UART module. | ||
78 | */ | ||
79 | #define MCFUART_BASE1 0x1c0 /* Base address of UART1 */ | ||
80 | #define MCFUART_BASE2 0x200 /* Base address of UART2 */ | ||
81 | |||
82 | /* | ||
83 | * DMA unit base addresses. | ||
84 | */ | ||
85 | #define MCFDMA_BASE0 (MCF_MBAR + 0x300) /* Base address DMA 0 */ | ||
86 | #define MCFDMA_BASE1 (MCF_MBAR + 0x340) /* Base address DMA 1 */ | ||
87 | #define MCFDMA_BASE2 (MCF_MBAR + 0x380) /* Base address DMA 2 */ | ||
88 | #define MCFDMA_BASE3 (MCF_MBAR + 0x3C0) /* Base address DMA 3 */ | ||
89 | |||
90 | /* | ||
91 | * Some symbol defines for the above... | ||
92 | */ | ||
93 | #define MCFSIM_SWDICR MCFSIM_ICR0 /* Watchdog timer ICR */ | ||
94 | #define MCFSIM_TIMER1ICR MCFSIM_ICR1 /* Timer 1 ICR */ | ||
95 | #define MCFSIM_TIMER2ICR MCFSIM_ICR2 /* Timer 2 ICR */ | ||
96 | #define MCFSIM_UART1ICR MCFSIM_ICR4 /* UART 1 ICR */ | ||
97 | #define MCFSIM_UART2ICR MCFSIM_ICR5 /* UART 2 ICR */ | ||
98 | #define MCFSIM_DMA0ICR MCFSIM_ICR6 /* DMA 0 ICR */ | ||
99 | #define MCFSIM_DMA1ICR MCFSIM_ICR7 /* DMA 1 ICR */ | ||
100 | #define MCFSIM_DMA2ICR MCFSIM_ICR8 /* DMA 2 ICR */ | ||
101 | #define MCFSIM_DMA3ICR MCFSIM_ICR9 /* DMA 3 ICR */ | ||
102 | #define MCFSIM_QSPIICR MCFSIM_ICR10 /* QSPI ICR */ | ||
103 | |||
104 | /* | ||
105 | * Define system peripheral IRQ usage. | ||
106 | */ | ||
107 | #define MCF_IRQ_QSPI 28 /* QSPI, Level 4 */ | ||
108 | #define MCF_IRQ_TIMER 30 /* Timer0, Level 6 */ | ||
109 | #define MCF_IRQ_PROFILER 31 /* Timer1, Level 7 */ | ||
110 | |||
111 | /* | ||
112 | * General purpose IO registers (in MBAR2). | ||
113 | */ | ||
114 | #define MCFSIM2_GPIOREAD (MCF_MBAR2 + 0x000) /* GPIO read values */ | ||
115 | #define MCFSIM2_GPIOWRITE (MCF_MBAR2 + 0x004) /* GPIO write values */ | ||
116 | #define MCFSIM2_GPIOENABLE (MCF_MBAR2 + 0x008) /* GPIO enabled */ | ||
117 | #define MCFSIM2_GPIOFUNC (MCF_MBAR2 + 0x00C) /* GPIO function */ | ||
118 | #define MCFSIM2_GPIO1READ (MCF_MBAR2 + 0x0B0) /* GPIO1 read values */ | ||
119 | #define MCFSIM2_GPIO1WRITE (MCF_MBAR2 + 0x0B4) /* GPIO1 write values */ | ||
120 | #define MCFSIM2_GPIO1ENABLE (MCF_MBAR2 + 0x0B8) /* GPIO1 enabled */ | ||
121 | #define MCFSIM2_GPIO1FUNC (MCF_MBAR2 + 0x0BC) /* GPIO1 function */ | ||
122 | |||
123 | #define MCFSIM2_GPIOINTSTAT 0xc0 /* GPIO interrupt status */ | ||
124 | #define MCFSIM2_GPIOINTCLEAR 0xc0 /* GPIO interrupt clear */ | ||
125 | #define MCFSIM2_GPIOINTENABLE 0xc4 /* GPIO interrupt enable */ | ||
126 | |||
127 | #define MCFSIM2_INTLEVEL1 0x140 /* Interrupt level reg 1 */ | ||
128 | #define MCFSIM2_INTLEVEL2 0x144 /* Interrupt level reg 2 */ | ||
129 | #define MCFSIM2_INTLEVEL3 0x148 /* Interrupt level reg 3 */ | ||
130 | #define MCFSIM2_INTLEVEL4 0x14c /* Interrupt level reg 4 */ | ||
131 | #define MCFSIM2_INTLEVEL5 0x150 /* Interrupt level reg 5 */ | ||
132 | #define MCFSIM2_INTLEVEL6 0x154 /* Interrupt level reg 6 */ | ||
133 | #define MCFSIM2_INTLEVEL7 0x158 /* Interrupt level reg 7 */ | ||
134 | #define MCFSIM2_INTLEVEL8 0x15c /* Interrupt level reg 8 */ | ||
135 | |||
136 | #define MCFSIM2_DMAROUTE 0x188 /* DMA routing */ | ||
137 | |||
138 | #define MCFSIM2_IDECONFIG1 0x18c /* IDEconfig1 */ | ||
139 | #define MCFSIM2_IDECONFIG2 0x190 /* IDEconfig2 */ | ||
140 | |||
141 | /* | ||
142 | * Define the base interrupt for the second interrupt controller. | ||
143 | * We set it to 128, out of the way of the base interrupts, and plenty | ||
144 | * of room for its 64 interrupts. | ||
145 | */ | ||
146 | #define MCFINTC2_VECBASE 128 | ||
147 | |||
148 | #define MCFINTC2_GPIOIRQ0 (MCFINTC2_VECBASE + 32) | ||
149 | #define MCFINTC2_GPIOIRQ1 (MCFINTC2_VECBASE + 33) | ||
150 | #define MCFINTC2_GPIOIRQ2 (MCFINTC2_VECBASE + 34) | ||
151 | #define MCFINTC2_GPIOIRQ3 (MCFINTC2_VECBASE + 35) | ||
152 | #define MCFINTC2_GPIOIRQ4 (MCFINTC2_VECBASE + 36) | ||
153 | #define MCFINTC2_GPIOIRQ5 (MCFINTC2_VECBASE + 37) | ||
154 | #define MCFINTC2_GPIOIRQ6 (MCFINTC2_VECBASE + 38) | ||
155 | #define MCFINTC2_GPIOIRQ7 (MCFINTC2_VECBASE + 39) | ||
156 | |||
157 | /* | ||
158 | * Generic GPIO support | ||
159 | */ | ||
160 | #define MCFGPIO_PIN_MAX 64 | ||
161 | #define MCFGPIO_IRQ_MAX -1 | ||
162 | #define MCFGPIO_IRQ_VECBASE -1 | ||
163 | |||
164 | /****************************************************************************/ | ||
165 | |||
166 | #ifdef __ASSEMBLER__ | ||
167 | |||
168 | /* | ||
169 | * The M5249C3 board needs a little help getting all its SIM devices | ||
170 | * initialized at kernel start time. dBUG doesn't set much up, so | ||
171 | * we need to do it manually. | ||
172 | */ | ||
173 | .macro m5249c3_setup | ||
174 | /* | ||
175 | * Set MBAR1 and MBAR2, just incase they are not set. | ||
176 | */ | ||
177 | movel #0x10000001,%a0 | ||
178 | movec %a0,%MBAR /* map MBAR region */ | ||
179 | subql #1,%a0 /* get MBAR address in a0 */ | ||
180 | |||
181 | movel #0x80000001,%a1 | ||
182 | movec %a1,#3086 /* map MBAR2 region */ | ||
183 | subql #1,%a1 /* get MBAR2 address in a1 */ | ||
184 | |||
185 | /* | ||
186 | * Move secondary interrupts to their base (128). | ||
187 | */ | ||
188 | moveb #MCFINTC2_VECBASE,%d0 | ||
189 | moveb %d0,0x16b(%a1) /* interrupt base register */ | ||
190 | |||
191 | /* | ||
192 | * Work around broken CSMR0/DRAM vector problem. | ||
193 | */ | ||
194 | movel #0x001F0021,%d0 /* disable C/I bit */ | ||
195 | movel %d0,0x84(%a0) /* set CSMR0 */ | ||
196 | |||
197 | /* | ||
198 | * Disable the PLL firstly. (Who knows what state it is | ||
199 | * in here!). | ||
200 | */ | ||
201 | movel 0x180(%a1),%d0 /* get current PLL value */ | ||
202 | andl #0xfffffffe,%d0 /* PLL bypass first */ | ||
203 | movel %d0,0x180(%a1) /* set PLL register */ | ||
204 | nop | ||
205 | |||
206 | #if CONFIG_CLOCK_FREQ == 140000000 | ||
207 | /* | ||
208 | * Set initial clock frequency. This assumes M5249C3 board | ||
209 | * is fitted with 11.2896MHz crystal. It will program the | ||
210 | * PLL for 140MHz. Lets go fast :-) | ||
211 | */ | ||
212 | movel #0x125a40f0,%d0 /* set for 140MHz */ | ||
213 | movel %d0,0x180(%a1) /* set PLL register */ | ||
214 | orl #0x1,%d0 | ||
215 | movel %d0,0x180(%a1) /* set PLL register */ | ||
216 | #endif | ||
217 | |||
218 | /* | ||
219 | * Setup CS1 for ethernet controller. | ||
220 | * (Setup as per M5249C3 doco). | ||
221 | */ | ||
222 | movel #0xe0000000,%d0 /* CS1 mapped at 0xe0000000 */ | ||
223 | movel %d0,0x8c(%a0) | ||
224 | movel #0x001f0021,%d0 /* CS1 size of 1Mb */ | ||
225 | movel %d0,0x90(%a0) | ||
226 | movew #0x0080,%d0 /* CS1 = 16bit port, AA */ | ||
227 | movew %d0,0x96(%a0) | ||
228 | |||
229 | /* | ||
230 | * Setup CS2 for IDE interface. | ||
231 | */ | ||
232 | movel #0x50000000,%d0 /* CS2 mapped at 0x50000000 */ | ||
233 | movel %d0,0x98(%a0) | ||
234 | movel #0x001f0001,%d0 /* CS2 size of 1MB */ | ||
235 | movel %d0,0x9c(%a0) | ||
236 | movew #0x0080,%d0 /* CS2 = 16bit, TA */ | ||
237 | movew %d0,0xa2(%a0) | ||
238 | |||
239 | movel #0x00107000,%d0 /* IDEconfig1 */ | ||
240 | movel %d0,0x18c(%a1) | ||
241 | movel #0x000c0400,%d0 /* IDEconfig2 */ | ||
242 | movel %d0,0x190(%a1) | ||
243 | |||
244 | movel #0x00080000,%d0 /* GPIO19, IDE reset bit */ | ||
245 | orl %d0,0xc(%a1) /* function GPIO19 */ | ||
246 | orl %d0,0x8(%a1) /* enable GPIO19 as output */ | ||
247 | orl %d0,0x4(%a1) /* de-assert IDE reset */ | ||
248 | .endm | ||
249 | |||
250 | #define PLATFORM_SETUP m5249c3_setup | ||
251 | |||
252 | #endif /* __ASSEMBLER__ */ | ||
253 | |||
254 | /****************************************************************************/ | ||
255 | #endif /* m5249sim_h */ | ||
diff --git a/arch/m68k/include/asm/mac_mouse.h b/arch/m68k/include/asm/mac_mouse.h new file mode 100644 index 00000000000..39a5c292eae --- /dev/null +++ b/arch/m68k/include/asm/mac_mouse.h | |||
@@ -0,0 +1,23 @@ | |||
1 | #ifndef _ASM_MAC_MOUSE_H | ||
2 | #define _ASM_MAC_MOUSE_H | ||
3 | |||
4 | /* | ||
5 | * linux/include/asm-m68k/mac_mouse.h | ||
6 | * header file for Macintosh ADB mouse driver | ||
7 | * 27-10-97 Michael Schmitz | ||
8 | * copied from: | ||
9 | * header file for Atari Mouse driver | ||
10 | * by Robert de Vries (robert@and.nl) on 19Jul93 | ||
11 | */ | ||
12 | |||
13 | struct mouse_status { | ||
14 | char buttons; | ||
15 | short dx; | ||
16 | short dy; | ||
17 | int ready; | ||
18 | int active; | ||
19 | wait_queue_head_t wait; | ||
20 | struct fasync_struct *fasyncptr; | ||
21 | }; | ||
22 | |||
23 | #endif | ||
diff --git a/arch/m68k/include/asm/mcfmbus.h b/arch/m68k/include/asm/mcfmbus.h new file mode 100644 index 00000000000..319899c47a2 --- /dev/null +++ b/arch/m68k/include/asm/mcfmbus.h | |||
@@ -0,0 +1,77 @@ | |||
1 | /****************************************************************************/ | ||
2 | |||
3 | /* | ||
4 | * mcfmbus.h -- Coldfire MBUS support defines. | ||
5 | * | ||
6 | * (C) Copyright 1999, Martin Floeer (mfloeer@axcent.de) | ||
7 | */ | ||
8 | |||
9 | /****************************************************************************/ | ||
10 | |||
11 | |||
12 | #ifndef mcfmbus_h | ||
13 | #define mcfmbus_h | ||
14 | |||
15 | |||
16 | #define MCFMBUS_BASE 0x280 | ||
17 | #define MCFMBUS_IRQ_VECTOR 0x19 | ||
18 | #define MCFMBUS_IRQ 0x1 | ||
19 | #define MCFMBUS_CLK 0x3f | ||
20 | #define MCFMBUS_IRQ_LEVEL 0x07 /*IRQ Level 1*/ | ||
21 | #define MCFMBUS_ADDRESS 0x01 | ||
22 | |||
23 | |||
24 | /* | ||
25 | * Define the 5307 MBUS register set addresses | ||
26 | */ | ||
27 | |||
28 | #define MCFMBUS_MADR 0x00 | ||
29 | #define MCFMBUS_MFDR 0x04 | ||
30 | #define MCFMBUS_MBCR 0x08 | ||
31 | #define MCFMBUS_MBSR 0x0C | ||
32 | #define MCFMBUS_MBDR 0x10 | ||
33 | |||
34 | |||
35 | #define MCFMBUS_MADR_ADDR(a) (((a)&0x7F)<<0x01) /*Slave Address*/ | ||
36 | |||
37 | #define MCFMBUS_MFDR_MBC(a) ((a)&0x3F) /*M-Bus Clock*/ | ||
38 | |||
39 | /* | ||
40 | * Define bit flags in Control Register | ||
41 | */ | ||
42 | |||
43 | #define MCFMBUS_MBCR_MEN (0x80) /* M-Bus Enable */ | ||
44 | #define MCFMBUS_MBCR_MIEN (0x40) /* M-Bus Interrupt Enable */ | ||
45 | #define MCFMBUS_MBCR_MSTA (0x20) /* Master/Slave Mode Select Bit */ | ||
46 | #define MCFMBUS_MBCR_MTX (0x10) /* Transmit/Rcv Mode Select Bit */ | ||
47 | #define MCFMBUS_MBCR_TXAK (0x08) /* Transmit Acknowledge Enable */ | ||
48 | #define MCFMBUS_MBCR_RSTA (0x04) /* Repeat Start */ | ||
49 | |||
50 | /* | ||
51 | * Define bit flags in Status Register | ||
52 | */ | ||
53 | |||
54 | #define MCFMBUS_MBSR_MCF (0x80) /* Data Transfer Complete */ | ||
55 | #define MCFMBUS_MBSR_MAAS (0x40) /* Addressed as a Slave */ | ||
56 | #define MCFMBUS_MBSR_MBB (0x20) /* Bus Busy */ | ||
57 | #define MCFMBUS_MBSR_MAL (0x10) /* Arbitration Lost */ | ||
58 | #define MCFMBUS_MBSR_SRW (0x04) /* Slave Transmit */ | ||
59 | #define MCFMBUS_MBSR_MIF (0x02) /* M-Bus Interrupt */ | ||
60 | #define MCFMBUS_MBSR_RXAK (0x01) /* No Acknowledge Received */ | ||
61 | |||
62 | /* | ||
63 | * Define bit flags in DATA I/O Register | ||
64 | */ | ||
65 | |||
66 | #define MCFMBUS_MBDR_READ (0x01) /* 1=read 0=write MBUS */ | ||
67 | |||
68 | #define MBUSIOCSCLOCK 1 | ||
69 | #define MBUSIOCGCLOCK 2 | ||
70 | #define MBUSIOCSADDR 3 | ||
71 | #define MBUSIOCGADDR 4 | ||
72 | #define MBUSIOCSSLADDR 5 | ||
73 | #define MBUSIOCGSLADDR 6 | ||
74 | #define MBUSIOCSSUBADDR 7 | ||
75 | #define MBUSIOCGSUBADDR 8 | ||
76 | |||
77 | #endif | ||
diff --git a/arch/m68k/include/asm/mcfne.h b/arch/m68k/include/asm/mcfne.h new file mode 100644 index 00000000000..bf638be0958 --- /dev/null +++ b/arch/m68k/include/asm/mcfne.h | |||
@@ -0,0 +1,242 @@ | |||
1 | /****************************************************************************/ | ||
2 | |||
3 | /* | ||
4 | * mcfne.h -- NE2000 in ColdFire eval boards. | ||
5 | * | ||
6 | * (C) Copyright 1999-2000, Greg Ungerer (gerg@snapgear.com) | ||
7 | * (C) Copyright 2000, Lineo (www.lineo.com) | ||
8 | * (C) Copyright 2001, SnapGear (www.snapgear.com) | ||
9 | * | ||
10 | * 19990409 David W. Miller Converted from m5206ne.h for 5307 eval board | ||
11 | * | ||
12 | * Hacked support for m5206e Cadre III evaluation board | ||
13 | * Fred Stevens (fred.stevens@pemstar.com) 13 April 1999 | ||
14 | */ | ||
15 | |||
16 | /****************************************************************************/ | ||
17 | #ifndef mcfne_h | ||
18 | #define mcfne_h | ||
19 | /****************************************************************************/ | ||
20 | |||
21 | |||
22 | /* | ||
23 | * Support for NE2000 clones devices in ColdFire based boards. | ||
24 | * Not all boards address these parts the same way, some use a | ||
25 | * direct addressing method, others use a side-band address space | ||
26 | * to access odd address registers, some require byte swapping | ||
27 | * others do not. | ||
28 | */ | ||
29 | #define BSWAP(w) (((w) << 8) | ((w) >> 8)) | ||
30 | #define RSWAP(w) (w) | ||
31 | |||
32 | |||
33 | /* | ||
34 | * Define the basic hardware resources of NE2000 boards. | ||
35 | */ | ||
36 | |||
37 | #if defined(CONFIG_ARN5206) | ||
38 | #define NE2000_ADDR 0x40000300 | ||
39 | #define NE2000_ODDOFFSET 0x00010000 | ||
40 | #define NE2000_IRQ_VECTOR 0xf0 | ||
41 | #define NE2000_IRQ_PRIORITY 2 | ||
42 | #define NE2000_IRQ_LEVEL 4 | ||
43 | #define NE2000_BYTE volatile unsigned short | ||
44 | #endif | ||
45 | |||
46 | #if defined(CONFIG_M5206eC3) | ||
47 | #define NE2000_ADDR 0x40000300 | ||
48 | #define NE2000_ODDOFFSET 0x00010000 | ||
49 | #define NE2000_IRQ_VECTOR 0x1c | ||
50 | #define NE2000_IRQ_PRIORITY 2 | ||
51 | #define NE2000_IRQ_LEVEL 4 | ||
52 | #define NE2000_BYTE volatile unsigned short | ||
53 | #endif | ||
54 | |||
55 | #if defined(CONFIG_M5206e) && defined(CONFIG_NETtel) | ||
56 | #define NE2000_ADDR 0x30000300 | ||
57 | #define NE2000_IRQ_VECTOR 25 | ||
58 | #define NE2000_IRQ_PRIORITY 1 | ||
59 | #define NE2000_IRQ_LEVEL 3 | ||
60 | #define NE2000_BYTE volatile unsigned char | ||
61 | #endif | ||
62 | |||
63 | #if defined(CONFIG_M5307C3) | ||
64 | #define NE2000_ADDR 0x40000300 | ||
65 | #define NE2000_ODDOFFSET 0x00010000 | ||
66 | #define NE2000_IRQ_VECTOR 0x1b | ||
67 | #define NE2000_BYTE volatile unsigned short | ||
68 | #endif | ||
69 | |||
70 | #if defined(CONFIG_M5272) && defined(CONFIG_NETtel) | ||
71 | #define NE2000_ADDR 0x30600300 | ||
72 | #define NE2000_ODDOFFSET 0x00008000 | ||
73 | #define NE2000_IRQ_VECTOR 67 | ||
74 | #undef BSWAP | ||
75 | #define BSWAP(w) (w) | ||
76 | #define NE2000_BYTE volatile unsigned short | ||
77 | #undef RSWAP | ||
78 | #define RSWAP(w) (((w) << 8) | ((w) >> 8)) | ||
79 | #endif | ||
80 | |||
81 | #if defined(CONFIG_M5307) && defined(CONFIG_NETtel) | ||
82 | #define NE2000_ADDR0 0x30600300 | ||
83 | #define NE2000_ADDR1 0x30800300 | ||
84 | #define NE2000_ODDOFFSET 0x00008000 | ||
85 | #define NE2000_IRQ_VECTOR0 27 | ||
86 | #define NE2000_IRQ_VECTOR1 29 | ||
87 | #undef BSWAP | ||
88 | #define BSWAP(w) (w) | ||
89 | #define NE2000_BYTE volatile unsigned short | ||
90 | #undef RSWAP | ||
91 | #define RSWAP(w) (((w) << 8) | ((w) >> 8)) | ||
92 | #endif | ||
93 | |||
94 | #if defined(CONFIG_M5307) && defined(CONFIG_SECUREEDGEMP3) | ||
95 | #define NE2000_ADDR 0x30600300 | ||
96 | #define NE2000_ODDOFFSET 0x00008000 | ||
97 | #define NE2000_IRQ_VECTOR 27 | ||
98 | #undef BSWAP | ||
99 | #define BSWAP(w) (w) | ||
100 | #define NE2000_BYTE volatile unsigned short | ||
101 | #undef RSWAP | ||
102 | #define RSWAP(w) (((w) << 8) | ((w) >> 8)) | ||
103 | #endif | ||
104 | |||
105 | #if defined(CONFIG_ARN5307) | ||
106 | #define NE2000_ADDR 0xfe600300 | ||
107 | #define NE2000_ODDOFFSET 0x00010000 | ||
108 | #define NE2000_IRQ_VECTOR 0x1b | ||
109 | #define NE2000_IRQ_PRIORITY 2 | ||
110 | #define NE2000_IRQ_LEVEL 3 | ||
111 | #define NE2000_BYTE volatile unsigned short | ||
112 | #endif | ||
113 | |||
114 | #if defined(CONFIG_M5407C3) | ||
115 | #define NE2000_ADDR 0x40000300 | ||
116 | #define NE2000_ODDOFFSET 0x00010000 | ||
117 | #define NE2000_IRQ_VECTOR 0x1b | ||
118 | #define NE2000_BYTE volatile unsigned short | ||
119 | #endif | ||
120 | |||
121 | /****************************************************************************/ | ||
122 | |||
123 | /* | ||
124 | * Side-band address space for odd address requires re-mapping | ||
125 | * many of the standard ISA access functions. | ||
126 | */ | ||
127 | #ifdef NE2000_ODDOFFSET | ||
128 | |||
129 | #undef outb | ||
130 | #undef outb_p | ||
131 | #undef inb | ||
132 | #undef inb_p | ||
133 | #undef outsb | ||
134 | #undef outsw | ||
135 | #undef insb | ||
136 | #undef insw | ||
137 | |||
138 | #define outb ne2000_outb | ||
139 | #define inb ne2000_inb | ||
140 | #define outb_p ne2000_outb | ||
141 | #define inb_p ne2000_inb | ||
142 | #define outsb ne2000_outsb | ||
143 | #define outsw ne2000_outsw | ||
144 | #define insb ne2000_insb | ||
145 | #define insw ne2000_insw | ||
146 | |||
147 | |||
148 | #ifndef COLDFIRE_NE2000_FUNCS | ||
149 | |||
150 | void ne2000_outb(unsigned int val, unsigned int addr); | ||
151 | int ne2000_inb(unsigned int addr); | ||
152 | void ne2000_insb(unsigned int addr, void *vbuf, int unsigned long len); | ||
153 | void ne2000_insw(unsigned int addr, void *vbuf, unsigned long len); | ||
154 | void ne2000_outsb(unsigned int addr, void *vbuf, unsigned long len); | ||
155 | void ne2000_outsw(unsigned int addr, void *vbuf, unsigned long len); | ||
156 | |||
157 | #else | ||
158 | |||
159 | /* | ||
160 | * This macro converts a conventional register address into the | ||
161 | * real memory pointer of the mapped NE2000 device. | ||
162 | * On most NE2000 implementations on ColdFire boards the chip is | ||
163 | * mapped in kinda funny, due to its ISA heritage. | ||
164 | */ | ||
165 | #define NE2000_PTR(addr) ((addr&0x1)?(NE2000_ODDOFFSET+addr-1):(addr)) | ||
166 | #define NE2000_DATA_PTR(addr) (addr) | ||
167 | |||
168 | |||
169 | void ne2000_outb(unsigned int val, unsigned int addr) | ||
170 | { | ||
171 | NE2000_BYTE *rp; | ||
172 | |||
173 | rp = (NE2000_BYTE *) NE2000_PTR(addr); | ||
174 | *rp = RSWAP(val); | ||
175 | } | ||
176 | |||
177 | int ne2000_inb(unsigned int addr) | ||
178 | { | ||
179 | NE2000_BYTE *rp, val; | ||
180 | |||
181 | rp = (NE2000_BYTE *) NE2000_PTR(addr); | ||
182 | val = *rp; | ||
183 | return((int) ((NE2000_BYTE) RSWAP(val))); | ||
184 | } | ||
185 | |||
186 | void ne2000_insb(unsigned int addr, void *vbuf, int unsigned long len) | ||
187 | { | ||
188 | NE2000_BYTE *rp, val; | ||
189 | unsigned char *buf; | ||
190 | |||
191 | buf = (unsigned char *) vbuf; | ||
192 | rp = (NE2000_BYTE *) NE2000_DATA_PTR(addr); | ||
193 | for (; (len > 0); len--) { | ||
194 | val = *rp; | ||
195 | *buf++ = RSWAP(val); | ||
196 | } | ||
197 | } | ||
198 | |||
199 | void ne2000_insw(unsigned int addr, void *vbuf, unsigned long len) | ||
200 | { | ||
201 | volatile unsigned short *rp; | ||
202 | unsigned short w, *buf; | ||
203 | |||
204 | buf = (unsigned short *) vbuf; | ||
205 | rp = (volatile unsigned short *) NE2000_DATA_PTR(addr); | ||
206 | for (; (len > 0); len--) { | ||
207 | w = *rp; | ||
208 | *buf++ = BSWAP(w); | ||
209 | } | ||
210 | } | ||
211 | |||
212 | void ne2000_outsb(unsigned int addr, const void *vbuf, unsigned long len) | ||
213 | { | ||
214 | NE2000_BYTE *rp, val; | ||
215 | unsigned char *buf; | ||
216 | |||
217 | buf = (unsigned char *) vbuf; | ||
218 | rp = (NE2000_BYTE *) NE2000_DATA_PTR(addr); | ||
219 | for (; (len > 0); len--) { | ||
220 | val = *buf++; | ||
221 | *rp = RSWAP(val); | ||
222 | } | ||
223 | } | ||
224 | |||
225 | void ne2000_outsw(unsigned int addr, const void *vbuf, unsigned long len) | ||
226 | { | ||
227 | volatile unsigned short *rp; | ||
228 | unsigned short w, *buf; | ||
229 | |||
230 | buf = (unsigned short *) vbuf; | ||
231 | rp = (volatile unsigned short *) NE2000_DATA_PTR(addr); | ||
232 | for (; (len > 0); len--) { | ||
233 | w = *buf++; | ||
234 | *rp = BSWAP(w); | ||
235 | } | ||
236 | } | ||
237 | |||
238 | #endif /* COLDFIRE_NE2000_FUNCS */ | ||
239 | #endif /* NE2000_OFFOFFSET */ | ||
240 | |||
241 | /****************************************************************************/ | ||
242 | #endif /* mcfne_h */ | ||
diff --git a/arch/m68k/include/asm/mman.h b/arch/m68k/include/asm/mman.h new file mode 100644 index 00000000000..8eebf89f5ab --- /dev/null +++ b/arch/m68k/include/asm/mman.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/mman.h> | |||
diff --git a/arch/m68k/include/asm/msgbuf.h b/arch/m68k/include/asm/msgbuf.h new file mode 100644 index 00000000000..243cb798de8 --- /dev/null +++ b/arch/m68k/include/asm/msgbuf.h | |||
@@ -0,0 +1,31 @@ | |||
1 | #ifndef _M68K_MSGBUF_H | ||
2 | #define _M68K_MSGBUF_H | ||
3 | |||
4 | /* | ||
5 | * The msqid64_ds structure for m68k architecture. | ||
6 | * Note extra padding because this structure is passed back and forth | ||
7 | * between kernel and user space. | ||
8 | * | ||
9 | * Pad space is left for: | ||
10 | * - 64-bit time_t to solve y2038 problem | ||
11 | * - 2 miscellaneous 32-bit values | ||
12 | */ | ||
13 | |||
14 | struct msqid64_ds { | ||
15 | struct ipc64_perm msg_perm; | ||
16 | __kernel_time_t msg_stime; /* last msgsnd time */ | ||
17 | unsigned long __unused1; | ||
18 | __kernel_time_t msg_rtime; /* last msgrcv time */ | ||
19 | unsigned long __unused2; | ||
20 | __kernel_time_t msg_ctime; /* last change time */ | ||
21 | unsigned long __unused3; | ||
22 | unsigned long msg_cbytes; /* current number of bytes on queue */ | ||
23 | unsigned long msg_qnum; /* number of messages in queue */ | ||
24 | unsigned long msg_qbytes; /* max number of bytes on queue */ | ||
25 | __kernel_pid_t msg_lspid; /* pid of last msgsnd */ | ||
26 | __kernel_pid_t msg_lrpid; /* last receive pid */ | ||
27 | unsigned long __unused4; | ||
28 | unsigned long __unused5; | ||
29 | }; | ||
30 | |||
31 | #endif /* _M68K_MSGBUF_H */ | ||
diff --git a/arch/m68k/include/asm/mutex.h b/arch/m68k/include/asm/mutex.h new file mode 100644 index 00000000000..458c1f7fbc1 --- /dev/null +++ b/arch/m68k/include/asm/mutex.h | |||
@@ -0,0 +1,9 @@ | |||
1 | /* | ||
2 | * Pull in the generic implementation for the mutex fastpath. | ||
3 | * | ||
4 | * TODO: implement optimized primitives instead, or leave the generic | ||
5 | * implementation in place, or pick the atomic_xchg() based generic | ||
6 | * implementation. (see asm-generic/mutex-xchg.h for details) | ||
7 | */ | ||
8 | |||
9 | #include <asm-generic/mutex-dec.h> | ||
diff --git a/arch/m68k/include/asm/param.h b/arch/m68k/include/asm/param.h new file mode 100644 index 00000000000..36265ccf5c7 --- /dev/null +++ b/arch/m68k/include/asm/param.h | |||
@@ -0,0 +1,12 @@ | |||
1 | #ifndef _M68K_PARAM_H | ||
2 | #define _M68K_PARAM_H | ||
3 | |||
4 | #ifdef __uClinux__ | ||
5 | #define EXEC_PAGESIZE 4096 | ||
6 | #else | ||
7 | #define EXEC_PAGESIZE 8192 | ||
8 | #endif | ||
9 | |||
10 | #include <asm-generic/param.h> | ||
11 | |||
12 | #endif /* _M68K_PARAM_H */ | ||
diff --git a/arch/m68k/include/asm/percpu.h b/arch/m68k/include/asm/percpu.h new file mode 100644 index 00000000000..0859d048faf --- /dev/null +++ b/arch/m68k/include/asm/percpu.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __ASM_M68K_PERCPU_H | ||
2 | #define __ASM_M68K_PERCPU_H | ||
3 | |||
4 | #include <asm-generic/percpu.h> | ||
5 | |||
6 | #endif /* __ASM_M68K_PERCPU_H */ | ||
diff --git a/arch/m68k/include/asm/pinmux.h b/arch/m68k/include/asm/pinmux.h new file mode 100644 index 00000000000..119ee686dbd --- /dev/null +++ b/arch/m68k/include/asm/pinmux.h | |||
@@ -0,0 +1,30 @@ | |||
1 | /* | ||
2 | * Coldfire generic GPIO pinmux support. | ||
3 | * | ||
4 | * (C) Copyright 2009, Steven King <sfking@fdwdc.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; version 2 of the License. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | */ | ||
15 | |||
16 | #ifndef pinmux_h | ||
17 | #define pinmux_h | ||
18 | |||
19 | #define MCFPINMUX_NONE -1 | ||
20 | |||
21 | extern int mcf_pinmux_request(unsigned, unsigned); | ||
22 | extern void mcf_pinmux_release(unsigned, unsigned); | ||
23 | |||
24 | static inline int mcf_pinmux_is_valid(unsigned pinmux) | ||
25 | { | ||
26 | return pinmux != MCFPINMUX_NONE; | ||
27 | } | ||
28 | |||
29 | #endif | ||
30 | |||
diff --git a/arch/m68k/include/asm/poll.h b/arch/m68k/include/asm/poll.h new file mode 100644 index 00000000000..f080fcdb61b --- /dev/null +++ b/arch/m68k/include/asm/poll.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef __m68k_POLL_H | ||
2 | #define __m68k_POLL_H | ||
3 | |||
4 | #define POLLWRNORM POLLOUT | ||
5 | #define POLLWRBAND 256 | ||
6 | |||
7 | #include <asm-generic/poll.h> | ||
8 | |||
9 | #endif | ||
diff --git a/arch/m68k/include/asm/posix_types.h b/arch/m68k/include/asm/posix_types.h new file mode 100644 index 00000000000..98d0970d9ba --- /dev/null +++ b/arch/m68k/include/asm/posix_types.h | |||
@@ -0,0 +1,61 @@ | |||
1 | #ifndef __ARCH_M68K_POSIX_TYPES_H | ||
2 | #define __ARCH_M68K_POSIX_TYPES_H | ||
3 | |||
4 | /* | ||
5 | * This file is generally used by user-level software, so you need to | ||
6 | * be a little careful about namespace pollution etc. Also, we cannot | ||
7 | * assume GCC is being used. | ||
8 | */ | ||
9 | |||
10 | typedef unsigned long __kernel_ino_t; | ||
11 | typedef unsigned short __kernel_mode_t; | ||
12 | typedef unsigned short __kernel_nlink_t; | ||
13 | typedef long __kernel_off_t; | ||
14 | typedef int __kernel_pid_t; | ||
15 | typedef unsigned short __kernel_ipc_pid_t; | ||
16 | typedef unsigned short __kernel_uid_t; | ||
17 | typedef unsigned short __kernel_gid_t; | ||
18 | typedef unsigned int __kernel_size_t; | ||
19 | typedef int __kernel_ssize_t; | ||
20 | typedef int __kernel_ptrdiff_t; | ||
21 | typedef long __kernel_time_t; | ||
22 | typedef long __kernel_suseconds_t; | ||
23 | typedef long __kernel_clock_t; | ||
24 | typedef int __kernel_timer_t; | ||
25 | typedef int __kernel_clockid_t; | ||
26 | typedef int __kernel_daddr_t; | ||
27 | typedef char * __kernel_caddr_t; | ||
28 | typedef unsigned short __kernel_uid16_t; | ||
29 | typedef unsigned short __kernel_gid16_t; | ||
30 | typedef unsigned int __kernel_uid32_t; | ||
31 | typedef unsigned int __kernel_gid32_t; | ||
32 | |||
33 | typedef unsigned short __kernel_old_uid_t; | ||
34 | typedef unsigned short __kernel_old_gid_t; | ||
35 | typedef unsigned short __kernel_old_dev_t; | ||
36 | |||
37 | #ifdef __GNUC__ | ||
38 | typedef long long __kernel_loff_t; | ||
39 | #endif | ||
40 | |||
41 | typedef struct { | ||
42 | int val[2]; | ||
43 | } __kernel_fsid_t; | ||
44 | |||
45 | #if defined(__KERNEL__) | ||
46 | |||
47 | #undef __FD_SET | ||
48 | #define __FD_SET(d, set) ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d)) | ||
49 | |||
50 | #undef __FD_CLR | ||
51 | #define __FD_CLR(d, set) ((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d)) | ||
52 | |||
53 | #undef __FD_ISSET | ||
54 | #define __FD_ISSET(d, set) (!!((set)->fds_bits[__FDELT(d)] & __FDMASK(d))) | ||
55 | |||
56 | #undef __FD_ZERO | ||
57 | #define __FD_ZERO(fdsetp) (memset (fdsetp, 0, sizeof(*(fd_set *)fdsetp))) | ||
58 | |||
59 | #endif /* defined(__KERNEL__) */ | ||
60 | |||
61 | #endif | ||
diff --git a/arch/m68k/include/asm/resource.h b/arch/m68k/include/asm/resource.h new file mode 100644 index 00000000000..e7d35019f33 --- /dev/null +++ b/arch/m68k/include/asm/resource.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _M68K_RESOURCE_H | ||
2 | #define _M68K_RESOURCE_H | ||
3 | |||
4 | #include <asm-generic/resource.h> | ||
5 | |||
6 | #endif /* _M68K_RESOURCE_H */ | ||
diff --git a/arch/m68k/include/asm/sbus.h b/arch/m68k/include/asm/sbus.h new file mode 100644 index 00000000000..bfe3ba147f2 --- /dev/null +++ b/arch/m68k/include/asm/sbus.h | |||
@@ -0,0 +1,45 @@ | |||
1 | /* | ||
2 | * some sbus structures and macros to make usage of sbus drivers possible | ||
3 | */ | ||
4 | |||
5 | #ifndef __M68K_SBUS_H | ||
6 | #define __M68K_SBUS_H | ||
7 | |||
8 | struct sbus_dev { | ||
9 | struct { | ||
10 | unsigned int which_io; | ||
11 | unsigned int phys_addr; | ||
12 | } reg_addrs[1]; | ||
13 | }; | ||
14 | |||
15 | /* sbus IO functions stolen from include/asm-sparc/io.h for the serial driver */ | ||
16 | /* No SBUS on the Sun3, kludge -- sam */ | ||
17 | |||
18 | static inline void _sbus_writeb(unsigned char val, unsigned long addr) | ||
19 | { | ||
20 | *(volatile unsigned char *)addr = val; | ||
21 | } | ||
22 | |||
23 | static inline unsigned char _sbus_readb(unsigned long addr) | ||
24 | { | ||
25 | return *(volatile unsigned char *)addr; | ||
26 | } | ||
27 | |||
28 | static inline void _sbus_writel(unsigned long val, unsigned long addr) | ||
29 | { | ||
30 | *(volatile unsigned long *)addr = val; | ||
31 | |||
32 | } | ||
33 | |||
34 | extern inline unsigned long _sbus_readl(unsigned long addr) | ||
35 | { | ||
36 | return *(volatile unsigned long *)addr; | ||
37 | } | ||
38 | |||
39 | |||
40 | #define sbus_readb(a) _sbus_readb((unsigned long)a) | ||
41 | #define sbus_writeb(v, a) _sbus_writeb(v, (unsigned long)a) | ||
42 | #define sbus_readl(a) _sbus_readl((unsigned long)a) | ||
43 | #define sbus_writel(v, a) _sbus_writel(v, (unsigned long)a) | ||
44 | |||
45 | #endif | ||
diff --git a/arch/m68k/include/asm/scatterlist.h b/arch/m68k/include/asm/scatterlist.h new file mode 100644 index 00000000000..312505452a1 --- /dev/null +++ b/arch/m68k/include/asm/scatterlist.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _M68K_SCATTERLIST_H | ||
2 | #define _M68K_SCATTERLIST_H | ||
3 | |||
4 | #include <asm-generic/scatterlist.h> | ||
5 | |||
6 | #endif /* !(_M68K_SCATTERLIST_H) */ | ||
diff --git a/arch/m68k/include/asm/sections.h b/arch/m68k/include/asm/sections.h new file mode 100644 index 00000000000..d64967ecfec --- /dev/null +++ b/arch/m68k/include/asm/sections.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _ASM_M68K_SECTIONS_H | ||
2 | #define _ASM_M68K_SECTIONS_H | ||
3 | |||
4 | #include <asm-generic/sections.h> | ||
5 | |||
6 | #endif /* _ASM_M68K_SECTIONS_H */ | ||
diff --git a/arch/m68k/include/asm/sembuf.h b/arch/m68k/include/asm/sembuf.h new file mode 100644 index 00000000000..2308052a8c2 --- /dev/null +++ b/arch/m68k/include/asm/sembuf.h | |||
@@ -0,0 +1,25 @@ | |||
1 | #ifndef _M68K_SEMBUF_H | ||
2 | #define _M68K_SEMBUF_H | ||
3 | |||
4 | /* | ||
5 | * The semid64_ds structure for m68k architecture. | ||
6 | * Note extra padding because this structure is passed back and forth | ||
7 | * between kernel and user space. | ||
8 | * | ||
9 | * Pad space is left for: | ||
10 | * - 64-bit time_t to solve y2038 problem | ||
11 | * - 2 miscellaneous 32-bit values | ||
12 | */ | ||
13 | |||
14 | struct semid64_ds { | ||
15 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ | ||
16 | __kernel_time_t sem_otime; /* last semop time */ | ||
17 | unsigned long __unused1; | ||
18 | __kernel_time_t sem_ctime; /* last change time */ | ||
19 | unsigned long __unused2; | ||
20 | unsigned long sem_nsems; /* no. of semaphores in array */ | ||
21 | unsigned long __unused3; | ||
22 | unsigned long __unused4; | ||
23 | }; | ||
24 | |||
25 | #endif /* _M68K_SEMBUF_H */ | ||
diff --git a/arch/m68k/include/asm/shm.h b/arch/m68k/include/asm/shm.h new file mode 100644 index 00000000000..fa56ec84a12 --- /dev/null +++ b/arch/m68k/include/asm/shm.h | |||
@@ -0,0 +1,31 @@ | |||
1 | #ifndef _M68K_SHM_H | ||
2 | #define _M68K_SHM_H | ||
3 | |||
4 | |||
5 | /* format of page table entries that correspond to shared memory pages | ||
6 | currently out in swap space (see also mm/swap.c): | ||
7 | bits 0-1 (PAGE_PRESENT) is = 0 | ||
8 | bits 8..2 (SWP_TYPE) are = SHM_SWP_TYPE | ||
9 | bits 31..9 are used like this: | ||
10 | bits 15..9 (SHM_ID) the id of the shared memory segment | ||
11 | bits 30..16 (SHM_IDX) the index of the page within the shared memory segment | ||
12 | (actually only bits 25..16 get used since SHMMAX is so low) | ||
13 | bit 31 (SHM_READ_ONLY) flag whether the page belongs to a read-only attach | ||
14 | */ | ||
15 | /* on the m68k both bits 0 and 1 must be zero */ | ||
16 | /* format on the sun3 is similar, but bits 30, 31 are set to zero and all | ||
17 | others are reduced by 2. --m */ | ||
18 | |||
19 | #ifndef CONFIG_SUN3 | ||
20 | #define SHM_ID_SHIFT 9 | ||
21 | #else | ||
22 | #define SHM_ID_SHIFT 7 | ||
23 | #endif | ||
24 | #define _SHM_ID_BITS 7 | ||
25 | #define SHM_ID_MASK ((1<<_SHM_ID_BITS)-1) | ||
26 | |||
27 | #define SHM_IDX_SHIFT (SHM_ID_SHIFT+_SHM_ID_BITS) | ||
28 | #define _SHM_IDX_BITS 15 | ||
29 | #define SHM_IDX_MASK ((1<<_SHM_IDX_BITS)-1) | ||
30 | |||
31 | #endif /* _M68K_SHM_H */ | ||
diff --git a/arch/m68k/include/asm/shmbuf.h b/arch/m68k/include/asm/shmbuf.h new file mode 100644 index 00000000000..f8928d62f1b --- /dev/null +++ b/arch/m68k/include/asm/shmbuf.h | |||
@@ -0,0 +1,42 @@ | |||
1 | #ifndef _M68K_SHMBUF_H | ||
2 | #define _M68K_SHMBUF_H | ||
3 | |||
4 | /* | ||
5 | * The shmid64_ds structure for m68k architecture. | ||
6 | * Note extra padding because this structure is passed back and forth | ||
7 | * between kernel and user space. | ||
8 | * | ||
9 | * Pad space is left for: | ||
10 | * - 64-bit time_t to solve y2038 problem | ||
11 | * - 2 miscellaneous 32-bit values | ||
12 | */ | ||
13 | |||
14 | struct shmid64_ds { | ||
15 | struct ipc64_perm shm_perm; /* operation perms */ | ||
16 | size_t shm_segsz; /* size of segment (bytes) */ | ||
17 | __kernel_time_t shm_atime; /* last attach time */ | ||
18 | unsigned long __unused1; | ||
19 | __kernel_time_t shm_dtime; /* last detach time */ | ||
20 | unsigned long __unused2; | ||
21 | __kernel_time_t shm_ctime; /* last change time */ | ||
22 | unsigned long __unused3; | ||
23 | __kernel_pid_t shm_cpid; /* pid of creator */ | ||
24 | __kernel_pid_t shm_lpid; /* pid of last operator */ | ||
25 | unsigned long shm_nattch; /* no. of current attaches */ | ||
26 | unsigned long __unused4; | ||
27 | unsigned long __unused5; | ||
28 | }; | ||
29 | |||
30 | struct shminfo64 { | ||
31 | unsigned long shmmax; | ||
32 | unsigned long shmmin; | ||
33 | unsigned long shmmni; | ||
34 | unsigned long shmseg; | ||
35 | unsigned long shmall; | ||
36 | unsigned long __unused1; | ||
37 | unsigned long __unused2; | ||
38 | unsigned long __unused3; | ||
39 | unsigned long __unused4; | ||
40 | }; | ||
41 | |||
42 | #endif /* _M68K_SHMBUF_H */ | ||
diff --git a/arch/m68k/include/asm/shmparam.h b/arch/m68k/include/asm/shmparam.h new file mode 100644 index 00000000000..558892a2efb --- /dev/null +++ b/arch/m68k/include/asm/shmparam.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _M68K_SHMPARAM_H | ||
2 | #define _M68K_SHMPARAM_H | ||
3 | |||
4 | #define SHMLBA PAGE_SIZE /* attach addr a multiple of this */ | ||
5 | |||
6 | #endif /* _M68K_SHMPARAM_H */ | ||
diff --git a/arch/m68k/include/asm/sigcontext.h b/arch/m68k/include/asm/sigcontext.h new file mode 100644 index 00000000000..a29dd74a17c --- /dev/null +++ b/arch/m68k/include/asm/sigcontext.h | |||
@@ -0,0 +1,28 @@ | |||
1 | #ifndef _ASM_M68k_SIGCONTEXT_H | ||
2 | #define _ASM_M68k_SIGCONTEXT_H | ||
3 | |||
4 | struct sigcontext { | ||
5 | unsigned long sc_mask; /* old sigmask */ | ||
6 | unsigned long sc_usp; /* old user stack pointer */ | ||
7 | unsigned long sc_d0; | ||
8 | unsigned long sc_d1; | ||
9 | unsigned long sc_a0; | ||
10 | unsigned long sc_a1; | ||
11 | #ifdef __uClinux__ | ||
12 | unsigned long sc_a5; | ||
13 | #endif | ||
14 | unsigned short sc_sr; | ||
15 | unsigned long sc_pc; | ||
16 | unsigned short sc_formatvec; | ||
17 | #ifndef __uClinux__ | ||
18 | # ifdef __mcoldfire__ | ||
19 | unsigned long sc_fpregs[2][2]; /* room for two fp registers */ | ||
20 | # else | ||
21 | unsigned long sc_fpregs[2*3]; /* room for two fp registers */ | ||
22 | # endif | ||
23 | unsigned long sc_fpcntl[3]; | ||
24 | unsigned char sc_fpstate[216]; | ||
25 | #endif | ||
26 | }; | ||
27 | |||
28 | #endif | ||
diff --git a/arch/m68k/include/asm/siginfo.h b/arch/m68k/include/asm/siginfo.h new file mode 100644 index 00000000000..851d3d784b5 --- /dev/null +++ b/arch/m68k/include/asm/siginfo.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _M68K_SIGINFO_H | ||
2 | #define _M68K_SIGINFO_H | ||
3 | |||
4 | #include <asm-generic/siginfo.h> | ||
5 | |||
6 | #endif | ||
diff --git a/arch/m68k/include/asm/socket.h b/arch/m68k/include/asm/socket.h new file mode 100644 index 00000000000..9bf49c87d95 --- /dev/null +++ b/arch/m68k/include/asm/socket.h | |||
@@ -0,0 +1,65 @@ | |||
1 | #ifndef _ASM_SOCKET_H | ||
2 | #define _ASM_SOCKET_H | ||
3 | |||
4 | #include <asm/sockios.h> | ||
5 | |||
6 | /* For setsockopt(2) */ | ||
7 | #define SOL_SOCKET 1 | ||
8 | |||
9 | #define SO_DEBUG 1 | ||
10 | #define SO_REUSEADDR 2 | ||
11 | #define SO_TYPE 3 | ||
12 | #define SO_ERROR 4 | ||
13 | #define SO_DONTROUTE 5 | ||
14 | #define SO_BROADCAST 6 | ||
15 | #define SO_SNDBUF 7 | ||
16 | #define SO_RCVBUF 8 | ||
17 | #define SO_SNDBUFFORCE 32 | ||
18 | #define SO_RCVBUFFORCE 33 | ||
19 | #define SO_KEEPALIVE 9 | ||
20 | #define SO_OOBINLINE 10 | ||
21 | #define SO_NO_CHECK 11 | ||
22 | #define SO_PRIORITY 12 | ||
23 | #define SO_LINGER 13 | ||
24 | #define SO_BSDCOMPAT 14 | ||
25 | /* To add :#define SO_REUSEPORT 15 */ | ||
26 | #define SO_PASSCRED 16 | ||
27 | #define SO_PEERCRED 17 | ||
28 | #define SO_RCVLOWAT 18 | ||
29 | #define SO_SNDLOWAT 19 | ||
30 | #define SO_RCVTIMEO 20 | ||
31 | #define SO_SNDTIMEO 21 | ||
32 | |||
33 | /* Security levels - as per NRL IPv6 - don't actually do anything */ | ||
34 | #define SO_SECURITY_AUTHENTICATION 22 | ||
35 | #define SO_SECURITY_ENCRYPTION_TRANSPORT 23 | ||
36 | #define SO_SECURITY_ENCRYPTION_NETWORK 24 | ||
37 | |||
38 | #define SO_BINDTODEVICE 25 | ||
39 | |||
40 | /* Socket filtering */ | ||
41 | #define SO_ATTACH_FILTER 26 | ||
42 | #define SO_DETACH_FILTER 27 | ||
43 | |||
44 | #define SO_PEERNAME 28 | ||
45 | #define SO_TIMESTAMP 29 | ||
46 | #define SCM_TIMESTAMP SO_TIMESTAMP | ||
47 | |||
48 | #define SO_ACCEPTCONN 30 | ||
49 | |||
50 | #define SO_PEERSEC 31 | ||
51 | #define SO_PASSSEC 34 | ||
52 | #define SO_TIMESTAMPNS 35 | ||
53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | ||
54 | |||
55 | #define SO_MARK 36 | ||
56 | |||
57 | #define SO_TIMESTAMPING 37 | ||
58 | #define SCM_TIMESTAMPING SO_TIMESTAMPING | ||
59 | |||
60 | #define SO_PROTOCOL 38 | ||
61 | #define SO_DOMAIN 39 | ||
62 | |||
63 | #define SO_RXQ_OVFL 40 | ||
64 | |||
65 | #endif /* _ASM_SOCKET_H */ | ||
diff --git a/arch/m68k/include/asm/sockios.h b/arch/m68k/include/asm/sockios.h new file mode 100644 index 00000000000..c04a23943cb --- /dev/null +++ b/arch/m68k/include/asm/sockios.h | |||
@@ -0,0 +1,13 @@ | |||
1 | #ifndef __ARCH_M68K_SOCKIOS__ | ||
2 | #define __ARCH_M68K_SOCKIOS__ | ||
3 | |||
4 | /* Socket-level I/O control calls. */ | ||
5 | #define FIOSETOWN 0x8901 | ||
6 | #define SIOCSPGRP 0x8902 | ||
7 | #define FIOGETOWN 0x8903 | ||
8 | #define SIOCGPGRP 0x8904 | ||
9 | #define SIOCATMARK 0x8905 | ||
10 | #define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */ | ||
11 | #define SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */ | ||
12 | |||
13 | #endif /* __ARCH_M68K_SOCKIOS__ */ | ||
diff --git a/arch/m68k/include/asm/spinlock.h b/arch/m68k/include/asm/spinlock.h new file mode 100644 index 00000000000..20f46e27b53 --- /dev/null +++ b/arch/m68k/include/asm/spinlock.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __M68K_SPINLOCK_H | ||
2 | #define __M68K_SPINLOCK_H | ||
3 | |||
4 | #error "m68k doesn't do SMP yet" | ||
5 | |||
6 | #endif | ||
diff --git a/arch/m68k/include/asm/stat.h b/arch/m68k/include/asm/stat.h new file mode 100644 index 00000000000..dd38bc2e9f9 --- /dev/null +++ b/arch/m68k/include/asm/stat.h | |||
@@ -0,0 +1,77 @@ | |||
1 | #ifndef _M68K_STAT_H | ||
2 | #define _M68K_STAT_H | ||
3 | |||
4 | struct __old_kernel_stat { | ||
5 | unsigned short st_dev; | ||
6 | unsigned short st_ino; | ||
7 | unsigned short st_mode; | ||
8 | unsigned short st_nlink; | ||
9 | unsigned short st_uid; | ||
10 | unsigned short st_gid; | ||
11 | unsigned short st_rdev; | ||
12 | unsigned long st_size; | ||
13 | unsigned long st_atime; | ||
14 | unsigned long st_mtime; | ||
15 | unsigned long st_ctime; | ||
16 | }; | ||
17 | |||
18 | struct stat { | ||
19 | unsigned short st_dev; | ||
20 | unsigned short __pad1; | ||
21 | unsigned long st_ino; | ||
22 | unsigned short st_mode; | ||
23 | unsigned short st_nlink; | ||
24 | unsigned short st_uid; | ||
25 | unsigned short st_gid; | ||
26 | unsigned short st_rdev; | ||
27 | unsigned short __pad2; | ||
28 | unsigned long st_size; | ||
29 | unsigned long st_blksize; | ||
30 | unsigned long st_blocks; | ||
31 | unsigned long st_atime; | ||
32 | unsigned long __unused1; | ||
33 | unsigned long st_mtime; | ||
34 | unsigned long __unused2; | ||
35 | unsigned long st_ctime; | ||
36 | unsigned long __unused3; | ||
37 | unsigned long __unused4; | ||
38 | unsigned long __unused5; | ||
39 | }; | ||
40 | |||
41 | /* This matches struct stat64 in glibc2.1, hence the absolutely | ||
42 | * insane amounts of padding around dev_t's. | ||
43 | */ | ||
44 | struct stat64 { | ||
45 | unsigned long long st_dev; | ||
46 | unsigned char __pad1[2]; | ||
47 | |||
48 | #define STAT64_HAS_BROKEN_ST_INO 1 | ||
49 | unsigned long __st_ino; | ||
50 | |||
51 | unsigned int st_mode; | ||
52 | unsigned int st_nlink; | ||
53 | |||
54 | unsigned long st_uid; | ||
55 | unsigned long st_gid; | ||
56 | |||
57 | unsigned long long st_rdev; | ||
58 | unsigned char __pad3[2]; | ||
59 | |||
60 | long long st_size; | ||
61 | unsigned long st_blksize; | ||
62 | |||
63 | unsigned long long st_blocks; /* Number 512-byte blocks allocated. */ | ||
64 | |||
65 | unsigned long st_atime; | ||
66 | unsigned long st_atime_nsec; | ||
67 | |||
68 | unsigned long st_mtime; | ||
69 | unsigned long st_mtime_nsec; | ||
70 | |||
71 | unsigned long st_ctime; | ||
72 | unsigned long st_ctime_nsec; | ||
73 | |||
74 | unsigned long long st_ino; | ||
75 | }; | ||
76 | |||
77 | #endif /* _M68K_STAT_H */ | ||
diff --git a/arch/m68k/include/asm/statfs.h b/arch/m68k/include/asm/statfs.h new file mode 100644 index 00000000000..08d93f14e06 --- /dev/null +++ b/arch/m68k/include/asm/statfs.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _M68K_STATFS_H | ||
2 | #define _M68K_STATFS_H | ||
3 | |||
4 | #include <asm-generic/statfs.h> | ||
5 | |||
6 | #endif /* _M68K_STATFS_H */ | ||
diff --git a/arch/m68k/include/asm/swab.h b/arch/m68k/include/asm/swab.h new file mode 100644 index 00000000000..b7b37a40def --- /dev/null +++ b/arch/m68k/include/asm/swab.h | |||
@@ -0,0 +1,27 @@ | |||
1 | #ifndef _M68K_SWAB_H | ||
2 | #define _M68K_SWAB_H | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | #include <linux/compiler.h> | ||
6 | |||
7 | #define __SWAB_64_THRU_32__ | ||
8 | |||
9 | #if defined (__mcfisaaplus__) || defined (__mcfisac__) | ||
10 | static inline __attribute_const__ __u32 __arch_swab32(__u32 val) | ||
11 | { | ||
12 | __asm__("byterev %0" : "=d" (val) : "0" (val)); | ||
13 | return val; | ||
14 | } | ||
15 | |||
16 | #define __arch_swab32 __arch_swab32 | ||
17 | #elif !defined(__mcoldfire__) | ||
18 | |||
19 | static inline __attribute_const__ __u32 __arch_swab32(__u32 val) | ||
20 | { | ||
21 | __asm__("rolw #8,%0; swap %0; rolw #8,%0" : "=d" (val) : "0" (val)); | ||
22 | return val; | ||
23 | } | ||
24 | #define __arch_swab32 __arch_swab32 | ||
25 | #endif | ||
26 | |||
27 | #endif /* _M68K_SWAB_H */ | ||
diff --git a/arch/m68k/include/asm/system.h b/arch/m68k/include/asm/system.h new file mode 100644 index 00000000000..47b01f4726b --- /dev/null +++ b/arch/m68k/include/asm/system.h | |||
@@ -0,0 +1,193 @@ | |||
1 | #ifndef _M68K_SYSTEM_H | ||
2 | #define _M68K_SYSTEM_H | ||
3 | |||
4 | #include <linux/linkage.h> | ||
5 | #include <linux/kernel.h> | ||
6 | #include <linux/irqflags.h> | ||
7 | #include <asm/segment.h> | ||
8 | #include <asm/entry.h> | ||
9 | |||
10 | #ifdef __KERNEL__ | ||
11 | |||
12 | /* | ||
13 | * switch_to(n) should switch tasks to task ptr, first checking that | ||
14 | * ptr isn't the current task, in which case it does nothing. This | ||
15 | * also clears the TS-flag if the task we switched to has used the | ||
16 | * math co-processor latest. | ||
17 | */ | ||
18 | /* | ||
19 | * switch_to() saves the extra registers, that are not saved | ||
20 | * automatically by SAVE_SWITCH_STACK in resume(), ie. d0-d5 and | ||
21 | * a0-a1. Some of these are used by schedule() and its predecessors | ||
22 | * and so we might get see unexpected behaviors when a task returns | ||
23 | * with unexpected register values. | ||
24 | * | ||
25 | * syscall stores these registers itself and none of them are used | ||
26 | * by syscall after the function in the syscall has been called. | ||
27 | * | ||
28 | * Beware that resume now expects *next to be in d1 and the offset of | ||
29 | * tss to be in a1. This saves a few instructions as we no longer have | ||
30 | * to push them onto the stack and read them back right after. | ||
31 | * | ||
32 | * 02/17/96 - Jes Sorensen (jds@kom.auc.dk) | ||
33 | * | ||
34 | * Changed 96/09/19 by Andreas Schwab | ||
35 | * pass prev in a0, next in a1 | ||
36 | */ | ||
37 | asmlinkage void resume(void); | ||
38 | #define switch_to(prev,next,last) do { \ | ||
39 | register void *_prev __asm__ ("a0") = (prev); \ | ||
40 | register void *_next __asm__ ("a1") = (next); \ | ||
41 | register void *_last __asm__ ("d1"); \ | ||
42 | __asm__ __volatile__("jbsr resume" \ | ||
43 | : "=a" (_prev), "=a" (_next), "=d" (_last) \ | ||
44 | : "0" (_prev), "1" (_next) \ | ||
45 | : "d0", "d2", "d3", "d4", "d5"); \ | ||
46 | (last) = _last; \ | ||
47 | } while (0) | ||
48 | |||
49 | |||
50 | /* | ||
51 | * Force strict CPU ordering. | ||
52 | * Not really required on m68k... | ||
53 | */ | ||
54 | #define nop() do { asm volatile ("nop"); barrier(); } while (0) | ||
55 | #define mb() barrier() | ||
56 | #define rmb() barrier() | ||
57 | #define wmb() barrier() | ||
58 | #define read_barrier_depends() ((void)0) | ||
59 | #define set_mb(var, value) ({ (var) = (value); wmb(); }) | ||
60 | |||
61 | #define smp_mb() barrier() | ||
62 | #define smp_rmb() barrier() | ||
63 | #define smp_wmb() barrier() | ||
64 | #define smp_read_barrier_depends() ((void)0) | ||
65 | |||
66 | #define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) | ||
67 | |||
68 | struct __xchg_dummy { unsigned long a[100]; }; | ||
69 | #define __xg(x) ((volatile struct __xchg_dummy *)(x)) | ||
70 | |||
71 | #ifndef CONFIG_RMW_INSNS | ||
72 | static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size) | ||
73 | { | ||
74 | unsigned long flags, tmp; | ||
75 | |||
76 | local_irq_save(flags); | ||
77 | |||
78 | switch (size) { | ||
79 | case 1: | ||
80 | tmp = *(u8 *)ptr; | ||
81 | *(u8 *)ptr = x; | ||
82 | x = tmp; | ||
83 | break; | ||
84 | case 2: | ||
85 | tmp = *(u16 *)ptr; | ||
86 | *(u16 *)ptr = x; | ||
87 | x = tmp; | ||
88 | break; | ||
89 | case 4: | ||
90 | tmp = *(u32 *)ptr; | ||
91 | *(u32 *)ptr = x; | ||
92 | x = tmp; | ||
93 | break; | ||
94 | default: | ||
95 | BUG(); | ||
96 | } | ||
97 | |||
98 | local_irq_restore(flags); | ||
99 | return x; | ||
100 | } | ||
101 | #else | ||
102 | static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size) | ||
103 | { | ||
104 | switch (size) { | ||
105 | case 1: | ||
106 | __asm__ __volatile__ | ||
107 | ("moveb %2,%0\n\t" | ||
108 | "1:\n\t" | ||
109 | "casb %0,%1,%2\n\t" | ||
110 | "jne 1b" | ||
111 | : "=&d" (x) : "d" (x), "m" (*__xg(ptr)) : "memory"); | ||
112 | break; | ||
113 | case 2: | ||
114 | __asm__ __volatile__ | ||
115 | ("movew %2,%0\n\t" | ||
116 | "1:\n\t" | ||
117 | "casw %0,%1,%2\n\t" | ||
118 | "jne 1b" | ||
119 | : "=&d" (x) : "d" (x), "m" (*__xg(ptr)) : "memory"); | ||
120 | break; | ||
121 | case 4: | ||
122 | __asm__ __volatile__ | ||
123 | ("movel %2,%0\n\t" | ||
124 | "1:\n\t" | ||
125 | "casl %0,%1,%2\n\t" | ||
126 | "jne 1b" | ||
127 | : "=&d" (x) : "d" (x), "m" (*__xg(ptr)) : "memory"); | ||
128 | break; | ||
129 | } | ||
130 | return x; | ||
131 | } | ||
132 | #endif | ||
133 | |||
134 | #include <asm-generic/cmpxchg-local.h> | ||
135 | |||
136 | #define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) | ||
137 | |||
138 | /* | ||
139 | * Atomic compare and exchange. Compare OLD with MEM, if identical, | ||
140 | * store NEW in MEM. Return the initial value in MEM. Success is | ||
141 | * indicated by comparing RETURN with OLD. | ||
142 | */ | ||
143 | #ifdef CONFIG_RMW_INSNS | ||
144 | #define __HAVE_ARCH_CMPXCHG 1 | ||
145 | |||
146 | static inline unsigned long __cmpxchg(volatile void *p, unsigned long old, | ||
147 | unsigned long new, int size) | ||
148 | { | ||
149 | switch (size) { | ||
150 | case 1: | ||
151 | __asm__ __volatile__ ("casb %0,%2,%1" | ||
152 | : "=d" (old), "=m" (*(char *)p) | ||
153 | : "d" (new), "0" (old), "m" (*(char *)p)); | ||
154 | break; | ||
155 | case 2: | ||
156 | __asm__ __volatile__ ("casw %0,%2,%1" | ||
157 | : "=d" (old), "=m" (*(short *)p) | ||
158 | : "d" (new), "0" (old), "m" (*(short *)p)); | ||
159 | break; | ||
160 | case 4: | ||
161 | __asm__ __volatile__ ("casl %0,%2,%1" | ||
162 | : "=d" (old), "=m" (*(int *)p) | ||
163 | : "d" (new), "0" (old), "m" (*(int *)p)); | ||
164 | break; | ||
165 | } | ||
166 | return old; | ||
167 | } | ||
168 | |||
169 | #define cmpxchg(ptr, o, n) \ | ||
170 | ((__typeof__(*(ptr)))__cmpxchg((ptr), (unsigned long)(o), \ | ||
171 | (unsigned long)(n), sizeof(*(ptr)))) | ||
172 | #define cmpxchg_local(ptr, o, n) \ | ||
173 | ((__typeof__(*(ptr)))__cmpxchg((ptr), (unsigned long)(o), \ | ||
174 | (unsigned long)(n), sizeof(*(ptr)))) | ||
175 | #else | ||
176 | |||
177 | /* | ||
178 | * cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make | ||
179 | * them available. | ||
180 | */ | ||
181 | #define cmpxchg_local(ptr, o, n) \ | ||
182 | ((__typeof__(*(ptr)))__cmpxchg_local_generic((ptr), (unsigned long)(o),\ | ||
183 | (unsigned long)(n), sizeof(*(ptr)))) | ||
184 | |||
185 | #include <asm-generic/cmpxchg.h> | ||
186 | |||
187 | #endif | ||
188 | |||
189 | #define arch_align_stack(x) (x) | ||
190 | |||
191 | #endif /* __KERNEL__ */ | ||
192 | |||
193 | #endif /* _M68K_SYSTEM_H */ | ||
diff --git a/arch/m68k/include/asm/termbits.h b/arch/m68k/include/asm/termbits.h new file mode 100644 index 00000000000..aea1e37b765 --- /dev/null +++ b/arch/m68k/include/asm/termbits.h | |||
@@ -0,0 +1,201 @@ | |||
1 | #ifndef __ARCH_M68K_TERMBITS_H__ | ||
2 | #define __ARCH_M68K_TERMBITS_H__ | ||
3 | |||
4 | #include <linux/posix_types.h> | ||
5 | |||
6 | typedef unsigned char cc_t; | ||
7 | typedef unsigned int speed_t; | ||
8 | typedef unsigned int tcflag_t; | ||
9 | |||
10 | #define NCCS 19 | ||
11 | struct termios { | ||
12 | tcflag_t c_iflag; /* input mode flags */ | ||
13 | tcflag_t c_oflag; /* output mode flags */ | ||
14 | tcflag_t c_cflag; /* control mode flags */ | ||
15 | tcflag_t c_lflag; /* local mode flags */ | ||
16 | cc_t c_line; /* line discipline */ | ||
17 | cc_t c_cc[NCCS]; /* control characters */ | ||
18 | }; | ||
19 | |||
20 | struct termios2 { | ||
21 | tcflag_t c_iflag; /* input mode flags */ | ||
22 | tcflag_t c_oflag; /* output mode flags */ | ||
23 | tcflag_t c_cflag; /* control mode flags */ | ||
24 | tcflag_t c_lflag; /* local mode flags */ | ||
25 | cc_t c_line; /* line discipline */ | ||
26 | cc_t c_cc[NCCS]; /* control characters */ | ||
27 | speed_t c_ispeed; /* input speed */ | ||
28 | speed_t c_ospeed; /* output speed */ | ||
29 | }; | ||
30 | |||
31 | struct ktermios { | ||
32 | tcflag_t c_iflag; /* input mode flags */ | ||
33 | tcflag_t c_oflag; /* output mode flags */ | ||
34 | tcflag_t c_cflag; /* control mode flags */ | ||
35 | tcflag_t c_lflag; /* local mode flags */ | ||
36 | cc_t c_line; /* line discipline */ | ||
37 | cc_t c_cc[NCCS]; /* control characters */ | ||
38 | speed_t c_ispeed; /* input speed */ | ||
39 | speed_t c_ospeed; /* output speed */ | ||
40 | }; | ||
41 | |||
42 | /* c_cc characters */ | ||
43 | #define VINTR 0 | ||
44 | #define VQUIT 1 | ||
45 | #define VERASE 2 | ||
46 | #define VKILL 3 | ||
47 | #define VEOF 4 | ||
48 | #define VTIME 5 | ||
49 | #define VMIN 6 | ||
50 | #define VSWTC 7 | ||
51 | #define VSTART 8 | ||
52 | #define VSTOP 9 | ||
53 | #define VSUSP 10 | ||
54 | #define VEOL 11 | ||
55 | #define VREPRINT 12 | ||
56 | #define VDISCARD 13 | ||
57 | #define VWERASE 14 | ||
58 | #define VLNEXT 15 | ||
59 | #define VEOL2 16 | ||
60 | |||
61 | |||
62 | /* c_iflag bits */ | ||
63 | #define IGNBRK 0000001 | ||
64 | #define BRKINT 0000002 | ||
65 | #define IGNPAR 0000004 | ||
66 | #define PARMRK 0000010 | ||
67 | #define INPCK 0000020 | ||
68 | #define ISTRIP 0000040 | ||
69 | #define INLCR 0000100 | ||
70 | #define IGNCR 0000200 | ||
71 | #define ICRNL 0000400 | ||
72 | #define IUCLC 0001000 | ||
73 | #define IXON 0002000 | ||
74 | #define IXANY 0004000 | ||
75 | #define IXOFF 0010000 | ||
76 | #define IMAXBEL 0020000 | ||
77 | #define IUTF8 0040000 | ||
78 | |||
79 | /* c_oflag bits */ | ||
80 | #define OPOST 0000001 | ||
81 | #define OLCUC 0000002 | ||
82 | #define ONLCR 0000004 | ||
83 | #define OCRNL 0000010 | ||
84 | #define ONOCR 0000020 | ||
85 | #define ONLRET 0000040 | ||
86 | #define OFILL 0000100 | ||
87 | #define OFDEL 0000200 | ||
88 | #define NLDLY 0000400 | ||
89 | #define NL0 0000000 | ||
90 | #define NL1 0000400 | ||
91 | #define CRDLY 0003000 | ||
92 | #define CR0 0000000 | ||
93 | #define CR1 0001000 | ||
94 | #define CR2 0002000 | ||
95 | #define CR3 0003000 | ||
96 | #define TABDLY 0014000 | ||
97 | #define TAB0 0000000 | ||
98 | #define TAB1 0004000 | ||
99 | #define TAB2 0010000 | ||
100 | #define TAB3 0014000 | ||
101 | #define XTABS 0014000 | ||
102 | #define BSDLY 0020000 | ||
103 | #define BS0 0000000 | ||
104 | #define BS1 0020000 | ||
105 | #define VTDLY 0040000 | ||
106 | #define VT0 0000000 | ||
107 | #define VT1 0040000 | ||
108 | #define FFDLY 0100000 | ||
109 | #define FF0 0000000 | ||
110 | #define FF1 0100000 | ||
111 | |||
112 | /* c_cflag bit meaning */ | ||
113 | #define CBAUD 0010017 | ||
114 | #define B0 0000000 /* hang up */ | ||
115 | #define B50 0000001 | ||
116 | #define B75 0000002 | ||
117 | #define B110 0000003 | ||
118 | #define B134 0000004 | ||
119 | #define B150 0000005 | ||
120 | #define B200 0000006 | ||
121 | #define B300 0000007 | ||
122 | #define B600 0000010 | ||
123 | #define B1200 0000011 | ||
124 | #define B1800 0000012 | ||
125 | #define B2400 0000013 | ||
126 | #define B4800 0000014 | ||
127 | #define B9600 0000015 | ||
128 | #define B19200 0000016 | ||
129 | #define B38400 0000017 | ||
130 | #define EXTA B19200 | ||
131 | #define EXTB B38400 | ||
132 | #define CSIZE 0000060 | ||
133 | #define CS5 0000000 | ||
134 | #define CS6 0000020 | ||
135 | #define CS7 0000040 | ||
136 | #define CS8 0000060 | ||
137 | #define CSTOPB 0000100 | ||
138 | #define CREAD 0000200 | ||
139 | #define PARENB 0000400 | ||
140 | #define PARODD 0001000 | ||
141 | #define HUPCL 0002000 | ||
142 | #define CLOCAL 0004000 | ||
143 | #define CBAUDEX 0010000 | ||
144 | #define BOTHER 0010000 | ||
145 | #define B57600 0010001 | ||
146 | #define B115200 0010002 | ||
147 | #define B230400 0010003 | ||
148 | #define B460800 0010004 | ||
149 | #define B500000 0010005 | ||
150 | #define B576000 0010006 | ||
151 | #define B921600 0010007 | ||
152 | #define B1000000 0010010 | ||
153 | #define B1152000 0010011 | ||
154 | #define B1500000 0010012 | ||
155 | #define B2000000 0010013 | ||
156 | #define B2500000 0010014 | ||
157 | #define B3000000 0010015 | ||
158 | #define B3500000 0010016 | ||
159 | #define B4000000 0010017 | ||
160 | #define CIBAUD 002003600000 /* input baud rate */ | ||
161 | #define CMSPAR 010000000000 /* mark or space (stick) parity */ | ||
162 | #define CRTSCTS 020000000000 /* flow control */ | ||
163 | |||
164 | #define IBSHIFT 16 /* Shift from CBAUD to CIBAUD */ | ||
165 | |||
166 | /* c_lflag bits */ | ||
167 | #define ISIG 0000001 | ||
168 | #define ICANON 0000002 | ||
169 | #define XCASE 0000004 | ||
170 | #define ECHO 0000010 | ||
171 | #define ECHOE 0000020 | ||
172 | #define ECHOK 0000040 | ||
173 | #define ECHONL 0000100 | ||
174 | #define NOFLSH 0000200 | ||
175 | #define TOSTOP 0000400 | ||
176 | #define ECHOCTL 0001000 | ||
177 | #define ECHOPRT 0002000 | ||
178 | #define ECHOKE 0004000 | ||
179 | #define FLUSHO 0010000 | ||
180 | #define PENDIN 0040000 | ||
181 | #define IEXTEN 0100000 | ||
182 | #define EXTPROC 0200000 | ||
183 | |||
184 | |||
185 | /* tcflow() and TCXONC use these */ | ||
186 | #define TCOOFF 0 | ||
187 | #define TCOON 1 | ||
188 | #define TCIOFF 2 | ||
189 | #define TCION 3 | ||
190 | |||
191 | /* tcflush() and TCFLSH use these */ | ||
192 | #define TCIFLUSH 0 | ||
193 | #define TCOFLUSH 1 | ||
194 | #define TCIOFLUSH 2 | ||
195 | |||
196 | /* tcsetattr uses these */ | ||
197 | #define TCSANOW 0 | ||
198 | #define TCSADRAIN 1 | ||
199 | #define TCSAFLUSH 2 | ||
200 | |||
201 | #endif /* __ARCH_M68K_TERMBITS_H__ */ | ||
diff --git a/arch/m68k/include/asm/termios.h b/arch/m68k/include/asm/termios.h new file mode 100644 index 00000000000..0823032e404 --- /dev/null +++ b/arch/m68k/include/asm/termios.h | |||
@@ -0,0 +1,92 @@ | |||
1 | #ifndef _M68K_TERMIOS_H | ||
2 | #define _M68K_TERMIOS_H | ||
3 | |||
4 | #include <asm/termbits.h> | ||
5 | #include <asm/ioctls.h> | ||
6 | |||
7 | struct winsize { | ||
8 | unsigned short ws_row; | ||
9 | unsigned short ws_col; | ||
10 | unsigned short ws_xpixel; | ||
11 | unsigned short ws_ypixel; | ||
12 | }; | ||
13 | |||
14 | #define NCC 8 | ||
15 | struct termio { | ||
16 | unsigned short c_iflag; /* input mode flags */ | ||
17 | unsigned short c_oflag; /* output mode flags */ | ||
18 | unsigned short c_cflag; /* control mode flags */ | ||
19 | unsigned short c_lflag; /* local mode flags */ | ||
20 | unsigned char c_line; /* line discipline */ | ||
21 | unsigned char c_cc[NCC]; /* control characters */ | ||
22 | }; | ||
23 | |||
24 | #ifdef __KERNEL__ | ||
25 | /* intr=^C quit=^| erase=del kill=^U | ||
26 | eof=^D vtime=\0 vmin=\1 sxtc=\0 | ||
27 | start=^Q stop=^S susp=^Z eol=\0 | ||
28 | reprint=^R discard=^U werase=^W lnext=^V | ||
29 | eol2=\0 | ||
30 | */ | ||
31 | #define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" | ||
32 | #endif | ||
33 | |||
34 | /* modem lines */ | ||
35 | #define TIOCM_LE 0x001 | ||
36 | #define TIOCM_DTR 0x002 | ||
37 | #define TIOCM_RTS 0x004 | ||
38 | #define TIOCM_ST 0x008 | ||
39 | #define TIOCM_SR 0x010 | ||
40 | #define TIOCM_CTS 0x020 | ||
41 | #define TIOCM_CAR 0x040 | ||
42 | #define TIOCM_RNG 0x080 | ||
43 | #define TIOCM_DSR 0x100 | ||
44 | #define TIOCM_CD TIOCM_CAR | ||
45 | #define TIOCM_RI TIOCM_RNG | ||
46 | #define TIOCM_OUT1 0x2000 | ||
47 | #define TIOCM_OUT2 0x4000 | ||
48 | #define TIOCM_LOOP 0x8000 | ||
49 | |||
50 | /* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ | ||
51 | |||
52 | #ifdef __KERNEL__ | ||
53 | |||
54 | /* | ||
55 | * Translate a "termio" structure into a "termios". Ugh. | ||
56 | */ | ||
57 | #define user_termio_to_kernel_termios(termios, termio) \ | ||
58 | ({ \ | ||
59 | unsigned short tmp; \ | ||
60 | get_user(tmp, &(termio)->c_iflag); \ | ||
61 | (termios)->c_iflag = (0xffff0000 & ((termios)->c_iflag)) | tmp; \ | ||
62 | get_user(tmp, &(termio)->c_oflag); \ | ||
63 | (termios)->c_oflag = (0xffff0000 & ((termios)->c_oflag)) | tmp; \ | ||
64 | get_user(tmp, &(termio)->c_cflag); \ | ||
65 | (termios)->c_cflag = (0xffff0000 & ((termios)->c_cflag)) | tmp; \ | ||
66 | get_user(tmp, &(termio)->c_lflag); \ | ||
67 | (termios)->c_lflag = (0xffff0000 & ((termios)->c_lflag)) | tmp; \ | ||
68 | get_user((termios)->c_line, &(termio)->c_line); \ | ||
69 | copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \ | ||
70 | }) | ||
71 | |||
72 | /* | ||
73 | * Translate a "termios" structure into a "termio". Ugh. | ||
74 | */ | ||
75 | #define kernel_termios_to_user_termio(termio, termios) \ | ||
76 | ({ \ | ||
77 | put_user((termios)->c_iflag, &(termio)->c_iflag); \ | ||
78 | put_user((termios)->c_oflag, &(termio)->c_oflag); \ | ||
79 | put_user((termios)->c_cflag, &(termio)->c_cflag); \ | ||
80 | put_user((termios)->c_lflag, &(termio)->c_lflag); \ | ||
81 | put_user((termios)->c_line, &(termio)->c_line); \ | ||
82 | copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \ | ||
83 | }) | ||
84 | |||
85 | #define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios2)) | ||
86 | #define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios2)) | ||
87 | #define user_termios_to_kernel_termios_1(k, u) copy_from_user(k, u, sizeof(struct termios)) | ||
88 | #define kernel_termios_to_user_termios_1(u, k) copy_to_user(u, k, sizeof(struct termios)) | ||
89 | |||
90 | #endif /* __KERNEL__ */ | ||
91 | |||
92 | #endif /* _M68K_TERMIOS_H */ | ||
diff --git a/arch/m68k/include/asm/topology.h b/arch/m68k/include/asm/topology.h new file mode 100644 index 00000000000..ca173e9f26f --- /dev/null +++ b/arch/m68k/include/asm/topology.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _ASM_M68K_TOPOLOGY_H | ||
2 | #define _ASM_M68K_TOPOLOGY_H | ||
3 | |||
4 | #include <asm-generic/topology.h> | ||
5 | |||
6 | #endif /* _ASM_M68K_TOPOLOGY_H */ | ||
diff --git a/arch/m68k/include/asm/types.h b/arch/m68k/include/asm/types.h new file mode 100644 index 00000000000..b17fd115a4e --- /dev/null +++ b/arch/m68k/include/asm/types.h | |||
@@ -0,0 +1,28 @@ | |||
1 | #ifndef _M68K_TYPES_H | ||
2 | #define _M68K_TYPES_H | ||
3 | |||
4 | /* | ||
5 | * This file is never included by application software unless | ||
6 | * explicitly requested (e.g., via linux/types.h) in which case the | ||
7 | * application is Linux specific so (user-) name space pollution is | ||
8 | * not a major issue. However, for interoperability, libraries still | ||
9 | * need to be careful to avoid a name clashes. | ||
10 | */ | ||
11 | #include <asm-generic/int-ll64.h> | ||
12 | |||
13 | #ifndef __ASSEMBLY__ | ||
14 | |||
15 | typedef unsigned short umode_t; | ||
16 | |||
17 | #endif /* __ASSEMBLY__ */ | ||
18 | |||
19 | /* | ||
20 | * These aren't exported outside the kernel to avoid name space clashes | ||
21 | */ | ||
22 | #ifdef __KERNEL__ | ||
23 | |||
24 | #define BITS_PER_LONG 32 | ||
25 | |||
26 | #endif /* __KERNEL__ */ | ||
27 | |||
28 | #endif /* _M68K_TYPES_H */ | ||
diff --git a/arch/m68k/include/asm/xor.h b/arch/m68k/include/asm/xor.h new file mode 100644 index 00000000000..c82eb12a5b1 --- /dev/null +++ b/arch/m68k/include/asm/xor.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/xor.h> | |||