mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 00:01:35 +00:00 
			
		
		
		
	 5ea8176994
			
		
	
	
		5ea8176994
		
	
	
	
	
		
			
			* Split the implementation-agnostic stuff in separate files. * Make sure that targets using non-default request_irq() pull kernel/irq/devres.o * Introduce new symbols (HAS_IOPORT and HAS_IOMEM) defaulting to positive; allow architectures to turn them off (we needed these symbols anyway for dependencies of quite a few drivers). * protect the ioport-related parts of lib/devres.o with CONFIG_HAS_IOPORT. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright 2006 PathScale, Inc.  All Rights Reserved.
 | |
|  *
 | |
|  * This file is free software; you can redistribute it and/or modify
 | |
|  * it under the terms of version 2 of the GNU General Public License
 | |
|  * as published by the Free Software Foundation.
 | |
|  *
 | |
|  * This program is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  * GNU General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU General Public License
 | |
|  * along with this program; if not, write to the Free Software Foundation,
 | |
|  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 | |
|  */
 | |
| 
 | |
| #ifndef _LINUX_IO_H
 | |
| #define _LINUX_IO_H
 | |
| 
 | |
| #include <linux/types.h>
 | |
| #include <asm/io.h>
 | |
| #include <asm/page.h>
 | |
| 
 | |
| struct device;
 | |
| 
 | |
| void __iowrite32_copy(void __iomem *to, const void *from, size_t count);
 | |
| void __iowrite64_copy(void __iomem *to, const void *from, size_t count);
 | |
| 
 | |
| int ioremap_page_range(unsigned long addr, unsigned long end,
 | |
| 		       unsigned long phys_addr, pgprot_t prot);
 | |
| 
 | |
| /*
 | |
|  * Managed iomap interface
 | |
|  */
 | |
| void __iomem * devm_ioport_map(struct device *dev, unsigned long port,
 | |
| 			       unsigned int nr);
 | |
| void devm_ioport_unmap(struct device *dev, void __iomem *addr);
 | |
| 
 | |
| void __iomem * devm_ioremap(struct device *dev, unsigned long offset,
 | |
| 			    unsigned long size);
 | |
| void __iomem * devm_ioremap_nocache(struct device *dev, unsigned long offset,
 | |
| 				    unsigned long size);
 | |
| void devm_iounmap(struct device *dev, void __iomem *addr);
 | |
| 
 | |
| /**
 | |
|  *	check_signature		-	find BIOS signatures
 | |
|  *	@io_addr: mmio address to check
 | |
|  *	@signature:  signature block
 | |
|  *	@length: length of signature
 | |
|  *
 | |
|  *	Perform a signature comparison with the mmio address io_addr. This
 | |
|  *	address should have been obtained by ioremap.
 | |
|  *	Returns 1 on a match.
 | |
|  */
 | |
| 
 | |
| static inline int check_signature(const volatile void __iomem *io_addr,
 | |
| 	const unsigned char *signature, int length)
 | |
| {
 | |
| 	int retval = 0;
 | |
| 	do {
 | |
| 		if (readb(io_addr) != *signature)
 | |
| 			goto out;
 | |
| 		io_addr++;
 | |
| 		signature++;
 | |
| 		length--;
 | |
| 	} while (length);
 | |
| 	retval = 1;
 | |
| out:
 | |
| 	return retval;
 | |
| }
 | |
| 
 | |
| #endif /* _LINUX_IO_H */
 |