io.h 2.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/*
 * 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

A
Al Viro 已提交
21
#include <linux/types.h>
22
#include <asm/io.h>
23
#include <asm/page.h>
24

25 26
struct device;

27
void __iowrite32_copy(void __iomem *to, const void *from, size_t count);
B
Brice Goglin 已提交
28
void __iowrite64_copy(void __iomem *to, const void *from, size_t count);
29

30 31 32
int ioremap_page_range(unsigned long addr, unsigned long end,
		       unsigned long phys_addr, pgprot_t prot);

T
Tejun Heo 已提交
33 34 35
/*
 * Managed iomap interface
 */
36
#ifdef CONFIG_HAS_IOPORT
T
Tejun Heo 已提交
37 38 39
void __iomem * devm_ioport_map(struct device *dev, unsigned long port,
			       unsigned int nr);
void devm_ioport_unmap(struct device *dev, void __iomem *addr);
40 41 42 43 44 45 46 47 48 49 50 51
#else
static inline void __iomem *devm_ioport_map(struct device *dev,
					     unsigned long port,
					     unsigned int nr)
{
	return NULL;
}

static inline void devm_ioport_unmap(struct device *dev, void __iomem *addr)
{
}
#endif
T
Tejun Heo 已提交
52 53 54 55 56 57 58

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);

59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
/**
 *	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;
}

86
#endif /* _LINUX_IO_H */