Merge header files for m68k and m68knommu to the single location:
    arch/m68k/include/asm
The majority of this patch was the result of the
script that is included in the changelog below.
The script was originally written by Arnd Bergman and
exten by me to cover a few more files.
When the header files differed the script uses the following:
The original m68k file is named <file>_mm.h  [mm for memory manager]
The m68knommu file is named <file>_no.h [no for no memory manager]
The files uses the following include guard:
This include gaurd works as the m68knommu toolchain set
the __uClinux__ symbol - so this should work in userspace too.
Merging the header files for m68k and m68knommu exposes the
(unexpected?) ABI differences thus it is easier to actually
identify these and thus to fix them.
The commit has been build tested with both a m68k and
a m68knommu toolchain - with success.
The commit has also been tested with "make headers_check"
and this patch fixes make headers_check for m68knommu.
The script used:
TARGET=arch/m68k/include/asm
SOURCE=arch/m68knommu/include/asm
INCLUDE="cachectl.h errno.h fcntl.h hwtest.h ioctls.h ipcbuf.h \
linkage.h math-emu.h md.h mman.h movs.h msgbuf.h openprom.h \
oplib.h poll.h posix_types.h resource.h rtc.h sembuf.h shmbuf.h \
shm.h shmparam.h socket.h sockios.h spinlock.h statfs.h stat.h \
termbits.h termios.h tlb.h types.h user.h"
EQUAL="auxvec.h cputime.h device.h emergency-restart.h futex.h \
ioctl.h irq_regs.h kdebug.h local.h mutex.h percpu.h \
sections.h topology.h"
NOMUUFILES="anchor.h bootstd.h coldfire.h commproc.h dbg.h \
elia.h flat.h m5206sim.h m520xsim.h m523xsim.h m5249sim.h \
m5272sim.h m527xsim.h m528xsim.h m5307sim.h m532xsim.h \
m5407sim.h m68360_enet.h m68360.h m68360_pram.h m68360_quicc.h \
m68360_regs.h MC68328.h MC68332.h MC68EZ328.h MC68VZ328.h \
mcfcache.h mcfdma.h mcfmbus.h mcfne.h mcfpci.h mcfpit.h \
mcfsim.h mcfsmc.h mcftimer.h mcfuart.h mcfwdebug.h \
nettel.h quicc_simple.h smp.h"
FILES="atomic.h bitops.h bootinfo.h bug.h bugs.h byteorder.h cache.h \
cacheflush.h checksum.h current.h delay.h div64.h \
dma-mapping.h dma.h elf.h entry.h fb.h fpu.h hardirq.h hw_irq.h io.h \
irq.h kmap_types.h machdep.h mc146818rtc.h mmu.h mmu_context.h \
module.h page.h page_offset.h param.h pci.h pgalloc.h \
pgtable.h processor.h ptrace.h scatterlist.h segment.h \
setup.h sigcontext.h siginfo.h signal.h string.h system.h swab.h \
thread_info.h timex.h tlbflush.h traps.h uaccess.h ucontext.h \
unaligned.h unistd.h"
mergefile() {
	BASE=${1%.h}
	git mv ${SOURCE}/$1 ${TARGET}/${BASE}_no.h
	git mv ${TARGET}/$1 ${TARGET}/${BASE}_mm.h
cat << EOF > ${TARGET}/$1
EOF
	git add ${TARGET}/$1
}
set -e
mkdir -p ${TARGET}
git mv include/asm-m68k/* ${TARGET}
rmdir include/asm-m68k
git rm ${SOURCE}/Kbuild
for F in $INCLUDE $EQUAL; do
	git rm ${SOURCE}/$F
done
for F in $NOMUUFILES; do
	git mv ${SOURCE}/$F ${TARGET}/$F
done
for F in $FILES ; do
	mergefile $F
done
rmdir arch/m68knommu/include/asm
rmdir arch/m68knommu/include
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: Greg Ungerer <gerg@uclinux.org>
		
	
			
		
			
				
	
	
		
			187 lines
		
	
	
	
		
			4.5 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			187 lines
		
	
	
	
		
			4.5 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
/****************************************************************************/
 | 
						|
 | 
						|
/*
 | 
						|
 *	mcfsmc.h -- SMC ethernet support for ColdFire environments.
 | 
						|
 *
 | 
						|
 *	(C) Copyright 1999-2002, Greg Ungerer (gerg@snapgear.com)
 | 
						|
 *	(C) Copyright 2000, Lineo Inc. (www.lineo.com) 
 | 
						|
 */
 | 
						|
 | 
						|
/****************************************************************************/
 | 
						|
#ifndef	mcfsmc_h
 | 
						|
#define	mcfsmc_h
 | 
						|
/****************************************************************************/
 | 
						|
 | 
						|
/*
 | 
						|
 *	None of the current ColdFire targets that use the SMC91x111
 | 
						|
 *	allow 8 bit accesses. So this code is 16bit access only.
 | 
						|
 */
 | 
						|
 | 
						|
 | 
						|
#undef	outb
 | 
						|
#undef	inb
 | 
						|
#undef	outw
 | 
						|
#undef	outwd
 | 
						|
#undef	inw	
 | 
						|
#undef	outl
 | 
						|
#undef	inl
 | 
						|
 | 
						|
#undef	outsb
 | 
						|
#undef	outsw
 | 
						|
#undef	outsl
 | 
						|
#undef	insb
 | 
						|
#undef	insw
 | 
						|
#undef	insl
 | 
						|
 | 
						|
/*
 | 
						|
 *	Re-defines for ColdFire environment... The SMC part is
 | 
						|
 *	mapped into memory space, so remap the PC-style in/out
 | 
						|
 *	routines to handle that.
 | 
						|
 */
 | 
						|
#define	outb	smc_outb
 | 
						|
#define	inb	smc_inb
 | 
						|
#define	outw	smc_outw
 | 
						|
#define	outwd	smc_outwd
 | 
						|
#define	inw	smc_inw
 | 
						|
#define	outl	smc_outl
 | 
						|
#define	inl	smc_inl
 | 
						|
 | 
						|
#define	outsb	smc_outsb
 | 
						|
#define	outsw	smc_outsw
 | 
						|
#define	outsl	smc_outsl
 | 
						|
#define	insb	smc_insb
 | 
						|
#define	insw	smc_insw
 | 
						|
#define	insl	smc_insl
 | 
						|
 | 
						|
 | 
						|
static inline int smc_inb(unsigned int addr)
 | 
						|
{
 | 
						|
	register unsigned short	w;
 | 
						|
	w = *((volatile unsigned short *) (addr & ~0x1));
 | 
						|
	return(((addr & 0x1) ? w : (w >> 8)) & 0xff);
 | 
						|
}
 | 
						|
 | 
						|
static inline void smc_outw(unsigned int val, unsigned int addr)
 | 
						|
{
 | 
						|
	*((volatile unsigned short *) addr) = (val << 8) | (val >> 8);
 | 
						|
}
 | 
						|
 | 
						|
static inline int smc_inw(unsigned int addr)
 | 
						|
{
 | 
						|
	register unsigned short	w;
 | 
						|
	w = *((volatile unsigned short *) addr);
 | 
						|
	return(((w << 8) | (w >> 8)) & 0xffff);
 | 
						|
}
 | 
						|
 | 
						|
static inline void smc_outl(unsigned long val, unsigned int addr)
 | 
						|
{
 | 
						|
	*((volatile unsigned long *) addr) = 
 | 
						|
		((val << 8) & 0xff000000) | ((val >> 8) & 0x00ff0000) |
 | 
						|
		((val << 8) & 0x0000ff00) | ((val >> 8) & 0x000000ff);
 | 
						|
}
 | 
						|
 | 
						|
static inline void smc_outwd(unsigned int val, unsigned int addr)
 | 
						|
{
 | 
						|
	*((volatile unsigned short *) addr) = val;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
 *	The rep* functions are used to feed the data port with
 | 
						|
 *	raw data. So we do not byte swap them when copying.
 | 
						|
 */
 | 
						|
 | 
						|
static inline void smc_insb(unsigned int addr, void *vbuf, int unsigned long len)
 | 
						|
{
 | 
						|
	volatile unsigned short	*rp;
 | 
						|
	unsigned short		*buf, *ebuf;
 | 
						|
 | 
						|
	buf = (unsigned short *) vbuf;
 | 
						|
	rp = (volatile unsigned short *) addr;
 | 
						|
 | 
						|
	/* Copy as words for as long as possible */
 | 
						|
	for (ebuf = buf + (len >> 1); (buf < ebuf); )
 | 
						|
		*buf++ = *rp;
 | 
						|
 | 
						|
	/* Lastly, handle left over byte */
 | 
						|
	if (len & 0x1)
 | 
						|
		*((unsigned char *) buf) = (*rp >> 8) & 0xff;
 | 
						|
}
 | 
						|
 | 
						|
static inline void smc_insw(unsigned int addr, void *vbuf, unsigned long len)
 | 
						|
{
 | 
						|
	volatile unsigned short	*rp;
 | 
						|
	unsigned short		*buf, *ebuf;
 | 
						|
 | 
						|
	buf = (unsigned short *) vbuf;
 | 
						|
	rp = (volatile unsigned short *) addr;
 | 
						|
	for (ebuf = buf + len; (buf < ebuf); )
 | 
						|
		*buf++ = *rp;
 | 
						|
}
 | 
						|
 | 
						|
static inline void smc_insl(unsigned int addr, void *vbuf, unsigned long len)
 | 
						|
{
 | 
						|
	volatile unsigned long	*rp;
 | 
						|
	unsigned long		*buf, *ebuf;
 | 
						|
 | 
						|
	buf = (unsigned long *) vbuf;
 | 
						|
	rp = (volatile unsigned long *) addr;
 | 
						|
	for (ebuf = buf + len; (buf < ebuf); )
 | 
						|
		*buf++ = *rp;
 | 
						|
}
 | 
						|
 | 
						|
static inline void smc_outsw(unsigned int addr, const void *vbuf, unsigned long len)
 | 
						|
{
 | 
						|
	volatile unsigned short	*rp;
 | 
						|
	unsigned short		*buf, *ebuf;
 | 
						|
 | 
						|
	buf = (unsigned short *) vbuf;
 | 
						|
	rp = (volatile unsigned short *) addr;
 | 
						|
	for (ebuf = buf + len; (buf < ebuf); )
 | 
						|
		*rp = *buf++;
 | 
						|
}
 | 
						|
 | 
						|
static inline void smc_outsl(unsigned int addr, void *vbuf, unsigned long len)
 | 
						|
{
 | 
						|
	volatile unsigned long	*rp;
 | 
						|
	unsigned long		*buf, *ebuf;
 | 
						|
 | 
						|
	buf = (unsigned long *) vbuf;
 | 
						|
	rp = (volatile unsigned long *) addr;
 | 
						|
	for (ebuf = buf + len; (buf < ebuf); )
 | 
						|
		*rp = *buf++;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
#ifdef CONFIG_NETtel
 | 
						|
/*
 | 
						|
 *	Re-map the address space of at least one of the SMC ethernet
 | 
						|
 *	parts. Both parts power up decoding the same address, so we
 | 
						|
 *	need to move one of them first, before doing enything else.
 | 
						|
 *
 | 
						|
 *	We also increase the number of wait states for this part by one.
 | 
						|
 */
 | 
						|
 | 
						|
void smc_remap(unsigned int ioaddr)
 | 
						|
{
 | 
						|
	static int		once = 0;
 | 
						|
	extern unsigned short	ppdata;
 | 
						|
	if (once++ == 0) {
 | 
						|
		*((volatile unsigned short *)(MCF_MBAR+MCFSIM_PADDR)) = 0x00ec;
 | 
						|
		ppdata |= 0x0080;
 | 
						|
		*((volatile unsigned short *)(MCF_MBAR+MCFSIM_PADAT)) = ppdata;
 | 
						|
		outw(0x0001, ioaddr + BANK_SELECT);
 | 
						|
		outw(0x0001, ioaddr + BANK_SELECT);
 | 
						|
		outw(0x0067, ioaddr + BASE);
 | 
						|
 | 
						|
		ppdata &= ~0x0080;
 | 
						|
		*((volatile unsigned short *)(MCF_MBAR+MCFSIM_PADAT)) = ppdata;
 | 
						|
	}
 | 
						|
	
 | 
						|
	*((volatile unsigned short *)(MCF_MBAR+MCFSIM_CSCR3)) = 0x1180;
 | 
						|
}
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
/****************************************************************************/
 | 
						|
#endif	/* mcfsmc_h */
 |