|
@@ -1,7 +1,8 @@
|
|
/*
|
|
/*
|
|
* Copyright 1998-2009 VIA Technologies, Inc. All Rights Reserved.
|
|
* Copyright 1998-2009 VIA Technologies, Inc. All Rights Reserved.
|
|
* Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
|
|
* Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
|
|
- * Copyright 2009 Jonathan Corbet <corbet@lwn.net>
|
|
|
|
|
|
+ * Copyright 2009-2010 Jonathan Corbet <corbet@lwn.net>
|
|
|
|
+ * Copyright 2010 Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
|
|
*
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public
|
|
* modify it under the terms of the GNU General Public
|
|
@@ -22,6 +23,8 @@
|
|
|
|
|
|
#ifndef __VIA_CORE_H__
|
|
#ifndef __VIA_CORE_H__
|
|
#define __VIA_CORE_H__
|
|
#define __VIA_CORE_H__
|
|
|
|
+#include <linux/types.h>
|
|
|
|
+#include <linux/io.h>
|
|
#include <linux/spinlock.h>
|
|
#include <linux/spinlock.h>
|
|
#include <linux/pci.h>
|
|
#include <linux/pci.h>
|
|
|
|
|
|
@@ -170,4 +173,47 @@ int viafb_dma_copy_out_sg(unsigned int offset, struct scatterlist *sg, int nsg);
|
|
#define VGA_WIDTH 640
|
|
#define VGA_WIDTH 640
|
|
#define VGA_HEIGHT 480
|
|
#define VGA_HEIGHT 480
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * Indexed port operations. Note that these are all multi-op
|
|
|
|
+ * functions; every invocation will be racy if you're not holding
|
|
|
|
+ * reg_lock.
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+#define VIAStatus 0x3DA /* Non-indexed port */
|
|
|
|
+#define VIACR 0x3D4
|
|
|
|
+#define VIASR 0x3C4
|
|
|
|
+#define VIAGR 0x3CE
|
|
|
|
+#define VIAAR 0x3C0
|
|
|
|
+
|
|
|
|
+static inline u8 via_read_reg(u16 port, u8 index)
|
|
|
|
+{
|
|
|
|
+ outb(index, port);
|
|
|
|
+ return inb(port + 1);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void via_write_reg(u16 port, u8 index, u8 data)
|
|
|
|
+{
|
|
|
|
+ outb(index, port);
|
|
|
|
+ outb(data, port + 1);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void via_write_reg_mask(u16 port, u8 index, u8 data, u8 mask)
|
|
|
|
+{
|
|
|
|
+ u8 old;
|
|
|
|
+
|
|
|
|
+ outb(index, port);
|
|
|
|
+ old = inb(port + 1);
|
|
|
|
+ outb((data & mask) | (old & ~mask), port + 1);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#define VIA_MISC_REG_READ 0x03CC
|
|
|
|
+#define VIA_MISC_REG_WRITE 0x03C2
|
|
|
|
+
|
|
|
|
+static inline void via_write_misc_reg_mask(u8 data, u8 mask)
|
|
|
|
+{
|
|
|
|
+ u8 old = inb(VIA_MISC_REG_READ);
|
|
|
|
+ outb((data & mask) | (old & ~mask), VIA_MISC_REG_WRITE);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
#endif /* __VIA_CORE_H__ */
|
|
#endif /* __VIA_CORE_H__ */
|