⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mv64x60_win.c

📁 linux-2.6.15.6
💻 C
📖 第 1 页 / 共 3 页
字号:
/* * arch/ppc/syslib/mv64x60_win.c * * Tables with info on how to manipulate the 32 & 64 bit windows on the * various types of Marvell bridge chips. * * Author: Mark A. Greer <mgreer@mvista.com> * * 2004 (c) MontaVista, Software, Inc.  This file is licensed under * the terms of the GNU General Public License version 2.  This program * is licensed "as is" without any warranty of any kind, whether express * or implied. */#include <linux/kernel.h>#include <linux/init.h>#include <linux/pci.h>#include <linux/slab.h>#include <linux/module.h>#include <linux/string.h>#include <linux/mv643xx.h>#include <asm/byteorder.h>#include <asm/io.h>#include <asm/irq.h>#include <asm/uaccess.h>#include <asm/machdep.h>#include <asm/pci-bridge.h>#include <asm/delay.h>#include <asm/mv64x60.h>/* ***************************************************************************** * *	Tables describing how to set up windows on each type of bridge * ***************************************************************************** */struct mv64x60_32bit_window	gt64260_32bit_windows[MV64x60_32BIT_WIN_COUNT] __initdata = {	/* CPU->MEM Windows */	[MV64x60_CPU2MEM_0_WIN] = {		.base_reg		= MV64x60_CPU2MEM_0_BASE,		.size_reg		= MV64x60_CPU2MEM_0_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU2MEM_1_WIN] = {		.base_reg		= MV64x60_CPU2MEM_1_BASE,		.size_reg		= MV64x60_CPU2MEM_1_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU2MEM_2_WIN] = {		.base_reg		= MV64x60_CPU2MEM_2_BASE,		.size_reg		= MV64x60_CPU2MEM_2_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU2MEM_3_WIN] = {		.base_reg		= MV64x60_CPU2MEM_3_BASE,		.size_reg		= MV64x60_CPU2MEM_3_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	/* CPU->Device Windows */	[MV64x60_CPU2DEV_0_WIN] = {		.base_reg		= MV64x60_CPU2DEV_0_BASE,		.size_reg		= MV64x60_CPU2DEV_0_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU2DEV_1_WIN] = {		.base_reg		= MV64x60_CPU2DEV_1_BASE,		.size_reg		= MV64x60_CPU2DEV_1_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU2DEV_2_WIN] = {		.base_reg		= MV64x60_CPU2DEV_2_BASE,		.size_reg		= MV64x60_CPU2DEV_2_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU2DEV_3_WIN] = {		.base_reg		= MV64x60_CPU2DEV_3_BASE,		.size_reg		= MV64x60_CPU2DEV_3_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	/* CPU->Boot Window */	[MV64x60_CPU2BOOT_WIN] = {		.base_reg		= MV64x60_CPU2BOOT_0_BASE,		.size_reg		= MV64x60_CPU2BOOT_0_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	/* CPU->PCI 0 Windows */	[MV64x60_CPU2PCI0_IO_WIN] = {		.base_reg		= MV64x60_CPU2PCI0_IO_BASE,		.size_reg		= MV64x60_CPU2PCI0_IO_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU2PCI0_MEM_0_WIN] = {		.base_reg		= MV64x60_CPU2PCI0_MEM_0_BASE,		.size_reg		= MV64x60_CPU2PCI0_MEM_0_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU2PCI0_MEM_1_WIN] = {		.base_reg		= MV64x60_CPU2PCI0_MEM_1_BASE,		.size_reg		= MV64x60_CPU2PCI0_MEM_1_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU2PCI0_MEM_2_WIN] = {		.base_reg		= MV64x60_CPU2PCI0_MEM_2_BASE,		.size_reg		= MV64x60_CPU2PCI0_MEM_2_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU2PCI0_MEM_3_WIN] = {		.base_reg		= MV64x60_CPU2PCI0_MEM_3_BASE,		.size_reg		= MV64x60_CPU2PCI0_MEM_3_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	/* CPU->PCI 1 Windows */	[MV64x60_CPU2PCI1_IO_WIN] = {		.base_reg		= MV64x60_CPU2PCI1_IO_BASE,		.size_reg		= MV64x60_CPU2PCI1_IO_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU2PCI1_MEM_0_WIN] = {		.base_reg		= MV64x60_CPU2PCI1_MEM_0_BASE,		.size_reg		= MV64x60_CPU2PCI1_MEM_0_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU2PCI1_MEM_1_WIN] = {		.base_reg		= MV64x60_CPU2PCI1_MEM_1_BASE,		.size_reg		= MV64x60_CPU2PCI1_MEM_1_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU2PCI1_MEM_2_WIN] = {		.base_reg		= MV64x60_CPU2PCI1_MEM_2_BASE,		.size_reg		= MV64x60_CPU2PCI1_MEM_2_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU2PCI1_MEM_3_WIN] = {		.base_reg		= MV64x60_CPU2PCI1_MEM_3_BASE,		.size_reg		= MV64x60_CPU2PCI1_MEM_3_SIZE,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	/* CPU->SRAM Window (64260 has no integrated SRAM) */	/* CPU->PCI 0 Remap I/O Window */	[MV64x60_CPU2PCI0_IO_REMAP_WIN] = {		.base_reg		= MV64x60_CPU2PCI0_IO_REMAP,		.size_reg		= 0,		.base_bits		= 12,		.size_bits		= 0,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	/* CPU->PCI 1 Remap I/O Window */	[MV64x60_CPU2PCI1_IO_REMAP_WIN] = {		.base_reg		= MV64x60_CPU2PCI1_IO_REMAP,		.size_reg		= 0,		.base_bits		= 12,		.size_bits		= 0,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	/* CPU Memory Protection Windows */	[MV64x60_CPU_PROT_0_WIN] = {		.base_reg		= MV64x60_CPU_PROT_BASE_0,		.size_reg		= MV64x60_CPU_PROT_SIZE_0,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU_PROT_1_WIN] = {		.base_reg		= MV64x60_CPU_PROT_BASE_1,		.size_reg		= MV64x60_CPU_PROT_SIZE_1,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU_PROT_2_WIN] = {		.base_reg		= MV64x60_CPU_PROT_BASE_2,		.size_reg		= MV64x60_CPU_PROT_SIZE_2,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU_PROT_3_WIN] = {		.base_reg		= MV64x60_CPU_PROT_BASE_3,		.size_reg		= MV64x60_CPU_PROT_SIZE_3,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	/* CPU Snoop Windows */	[MV64x60_CPU_SNOOP_0_WIN] = {		.base_reg		= GT64260_CPU_SNOOP_BASE_0,		.size_reg		= GT64260_CPU_SNOOP_SIZE_0,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU_SNOOP_1_WIN] = {		.base_reg		= GT64260_CPU_SNOOP_BASE_1,		.size_reg		= GT64260_CPU_SNOOP_SIZE_1,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU_SNOOP_2_WIN] = {		.base_reg		= GT64260_CPU_SNOOP_BASE_2,		.size_reg		= GT64260_CPU_SNOOP_SIZE_2,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU_SNOOP_3_WIN] = {		.base_reg		= GT64260_CPU_SNOOP_BASE_3,		.size_reg		= GT64260_CPU_SNOOP_SIZE_3,		.base_bits		= 12,		.size_bits		= 12,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	/* PCI 0->System Memory Remap Windows */	[MV64x60_PCI02MEM_REMAP_0_WIN] = {		.base_reg		= MV64x60_PCI0_SLAVE_MEM_0_REMAP,		.size_reg		= 0,		.base_bits		= 20,		.size_bits		= 0,		.get_from_field		= mv64x60_mask,		.map_to_field		= mv64x60_mask,		.extra			= 0 },	[MV64x60_PCI02MEM_REMAP_1_WIN] = {		.base_reg		= MV64x60_PCI0_SLAVE_MEM_1_REMAP,		.size_reg		= 0,		.base_bits		= 20,		.size_bits		= 0,		.get_from_field		= mv64x60_mask,		.map_to_field		= mv64x60_mask,		.extra			= 0 },	[MV64x60_PCI02MEM_REMAP_2_WIN] = {		.base_reg		= MV64x60_PCI0_SLAVE_MEM_1_REMAP,		.size_reg		= 0,		.base_bits		= 20,		.size_bits		= 0,		.get_from_field		= mv64x60_mask,		.map_to_field		= mv64x60_mask,		.extra			= 0 },	[MV64x60_PCI02MEM_REMAP_3_WIN] = {		.base_reg		= MV64x60_PCI0_SLAVE_MEM_1_REMAP,		.size_reg		= 0,		.base_bits		= 20,		.size_bits		= 0,		.get_from_field		= mv64x60_mask,		.map_to_field		= mv64x60_mask,		.extra			= 0 },	/* PCI 1->System Memory Remap Windows */	[MV64x60_PCI12MEM_REMAP_0_WIN] = {		.base_reg		= MV64x60_PCI1_SLAVE_MEM_0_REMAP,		.size_reg		= 0,		.base_bits		= 20,		.size_bits		= 0,		.get_from_field		= mv64x60_mask,		.map_to_field		= mv64x60_mask,		.extra			= 0 },	[MV64x60_PCI12MEM_REMAP_1_WIN] = {		.base_reg		= MV64x60_PCI1_SLAVE_MEM_1_REMAP,		.size_reg		= 0,		.base_bits		= 20,		.size_bits		= 0,		.get_from_field		= mv64x60_mask,		.map_to_field		= mv64x60_mask,		.extra			= 0 },	[MV64x60_PCI12MEM_REMAP_2_WIN] = {		.base_reg		= MV64x60_PCI1_SLAVE_MEM_1_REMAP,		.size_reg		= 0,		.base_bits		= 20,		.size_bits		= 0,		.get_from_field		= mv64x60_mask,		.map_to_field		= mv64x60_mask,		.extra			= 0 },	[MV64x60_PCI12MEM_REMAP_3_WIN] = {		.base_reg		= MV64x60_PCI1_SLAVE_MEM_1_REMAP,		.size_reg		= 0,		.base_bits		= 20,		.size_bits		= 0,		.get_from_field		= mv64x60_mask,		.map_to_field		= mv64x60_mask,		.extra			= 0 },	/* ENET->SRAM Window (64260 doesn't have separate windows) */	/* MPSC->SRAM Window (64260 doesn't have separate windows) */	/* IDMA->SRAM Window (64260 doesn't have separate windows) */};struct mv64x60_64bit_window	gt64260_64bit_windows[MV64x60_64BIT_WIN_COUNT] __initdata = {	/* CPU->PCI 0 MEM Remap Windows */	[MV64x60_CPU2PCI0_MEM_0_REMAP_WIN] = {		.base_hi_reg		= MV64x60_CPU2PCI0_MEM_0_REMAP_HI,		.base_lo_reg		= MV64x60_CPU2PCI0_MEM_0_REMAP_LO,		.size_reg		= 0,		.base_lo_bits		= 12,		.size_bits		= 0,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU2PCI0_MEM_1_REMAP_WIN] = {		.base_hi_reg		= MV64x60_CPU2PCI0_MEM_1_REMAP_HI,		.base_lo_reg		= MV64x60_CPU2PCI0_MEM_1_REMAP_LO,		.size_reg		= 0,		.base_lo_bits		= 12,		.size_bits		= 0,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU2PCI0_MEM_2_REMAP_WIN] = {		.base_hi_reg		= MV64x60_CPU2PCI0_MEM_2_REMAP_HI,		.base_lo_reg		= MV64x60_CPU2PCI0_MEM_2_REMAP_LO,		.size_reg		= 0,		.base_lo_bits		= 12,		.size_bits		= 0,		.get_from_field		= mv64x60_shift_left,		.map_to_field		= mv64x60_shift_right,		.extra			= 0 },	[MV64x60_CPU2PCI0_MEM_3_REMAP_WIN] = {		.base_hi_reg		= MV64x60_CPU2PCI0_MEM_3_REMAP_HI,		.base_lo_reg		= MV64x60_CPU2PCI0_MEM_3_REMAP_LO,		.size_reg		= 0,		.base_lo_bits		= 12,		.size_bits		= 0,		.get_from_field		= mv64x60_shift_left,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -