dreamcast_pci.c

来自「eCos操作系统源码」· C语言 代码 · 共 199 行

C
199
字号
//=============================================================================////      dreamcast_pci.c////      Dreamcast PCI code ////=============================================================================//####ECOSGPLCOPYRIGHTBEGIN####// -------------------------------------------// This file is part of eCos, the Embedded Configurable Operating System.// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.//// eCos is free software; you can redistribute it and/or modify it under// the terms of the GNU General Public License as published by the Free// Software Foundation; either version 2 or (at your option) any later version.//// eCos 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 eCos; if not, write to the Free Software Foundation, Inc.,// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.//// As a special exception, if other files instantiate templates or use macros// or inline functions from this file, or you compile this file and link it// with other works to produce a work based on this file, this file does not// by itself cause the resulting work to be covered by the GNU General Public// License. However the source code for this file must still be made available// in accordance with section (3) of the GNU General Public License.//// This exception does not invalidate any other reasons why a work based on// this file might be covered by the GNU General Public License.//// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.// at http://sources.redhat.com/ecos/ecos-license/// -------------------------------------------//####ECOSGPLCOPYRIGHTEND####//=============================================================================//#####DESCRIPTIONBEGIN####//// Author(s):   t@keshi.org// Contributors:t@keshi.org// Date:        2001-07-30// Purpose:     Dreamcast PCI code//              //####DESCRIPTIONEND####////=============================================================================#include <pkgconf/hal.h>#include <pkgconf/system.h>#include CYGBLD_HAL_PLATFORM_H#include CYGHWR_MEMORY_LAYOUT_H#include <cyg/infra/cyg_type.h>         // base types#include <cyg/infra/cyg_trac.h>         // tracing macros#include <cyg/infra/cyg_ass.h>          // assertion macros#include <cyg/hal/hal_io.h>             // IO macros#include <cyg/hal/hal_if.h>             // calling interface API#include <cyg/hal/hal_arch.h>           // Register state info#include <cyg/hal/hal_diag.h>#include <cyg/hal/hal_intr.h>           // Interrupt names#include <cyg/hal/hal_cache.h>#include <cyg/io/pci_hw.h>#include <cyg/io/pci.h>#define GAPSPCI_REGS            0xa1001400#define GAPSPCI_DMA_BASE        0x01840000#define GAPSPCI_DMA_SIZE        32768#define GAPSPCI_BBA_CONFIG      0xa1001600#define GAPSPCI_INTC            0xa05f6924static cyg_bool gapspci_initialized;void cyg_hal_plf_pci_init(void){        int i;        cyg_uint32 val;#if 0        char idbuf[16];        for(i=0; i<16; i++)                HAL_READ_UINT8(GAPSPCI_REGS+i, idbuf[i]);        if(strncmp(idbuf, "GAPSPCI_BRIDGE_2", 16))                return;#endif        gapspci_initialized = false;        HAL_WRITE_UINT32(GAPSPCI_REGS+0x18, 0x5a14a501);        for(i=0; i<1000000; i++);        HAL_READ_UINT32(GAPSPCI_REGS+0x18, val);        if (val != 1) return;        HAL_WRITE_UINT32(GAPSPCI_REGS+0x20, 0x01000000);        HAL_WRITE_UINT32(GAPSPCI_REGS+0x24, 0x01000000);        HAL_WRITE_UINT32(GAPSPCI_REGS+0x28, GAPSPCI_DMA_BASE);        HAL_WRITE_UINT32(GAPSPCI_REGS+0x2c, GAPSPCI_DMA_BASE+GAPSPCI_DMA_SIZE);        HAL_WRITE_UINT32(GAPSPCI_REGS+0x14, 1);        HAL_WRITE_UINT32(GAPSPCI_REGS+0x34, 1);#if 1        /* Setting up Broadband Adapter */        HAL_WRITE_UINT16(GAPSPCI_BBA_CONFIG+0x06, 0xf900);        HAL_WRITE_UINT32(GAPSPCI_BBA_CONFIG+0x30, 0x00000000);        HAL_WRITE_UINT8 (GAPSPCI_BBA_CONFIG+0x3c, 0x00);        HAL_WRITE_UINT8 (GAPSPCI_BBA_CONFIG+0x0d, 0xf0);        HAL_WRITE_UINT16(GAPSPCI_BBA_CONFIG+0x04, 0x0006);        HAL_WRITE_UINT32(GAPSPCI_BBA_CONFIG+0x10, 0x00002001);        HAL_WRITE_UINT32(GAPSPCI_BBA_CONFIG+0x14, 0x01000000);#endif        /* Enable interrupt */        HAL_READ_UINT32(GAPSPCI_INTC, val);        val |= (1<<3);        HAL_WRITE_UINT32(GAPSPCI_INTC, val);        gapspci_initialized = true;}#define BBA_SELECTED(bus, devfn) (bus==0 && devfn==0)cyg_uint32 cyg_hal_plf_pci_cfg_read_dword (cyg_uint32 bus,                                           cyg_uint32 devfn,                                           cyg_uint32 offset){        cyg_uint32 val;        if (!gapspci_initialized || !BBA_SELECTED(bus, devfn))                return 0xffffffff;        HAL_READ_UINT32(GAPSPCI_BBA_CONFIG+offset, val);        return val;}cyg_uint16 cyg_hal_plf_pci_cfg_read_word  (cyg_uint32 bus,                                           cyg_uint32 devfn,                                           cyg_uint32 offset){        cyg_uint16 val;        if (!gapspci_initialized || !BBA_SELECTED(bus, devfn))                return 0xffff;        HAL_READ_UINT16(GAPSPCI_BBA_CONFIG+offset, val);        return val;}cyg_uint8 cyg_hal_plf_pci_cfg_read_byte   (cyg_uint32 bus,                                           cyg_uint32 devfn,                                           cyg_uint32 offset){        cyg_uint8 val;        if (!gapspci_initialized || !BBA_SELECTED(bus, devfn))                return 0xff;        HAL_READ_UINT8(GAPSPCI_BBA_CONFIG+offset, val);        return val;}void cyg_hal_plf_pci_cfg_write_dword (cyg_uint32 bus,                                      cyg_uint32 devfn,                                      cyg_uint32 offset,                                      cyg_uint32 val){        if (gapspci_initialized && BBA_SELECTED(bus, devfn))                HAL_WRITE_UINT32(GAPSPCI_BBA_CONFIG+offset, val);}void cyg_hal_plf_pci_cfg_write_word  (cyg_uint32 bus,                                      cyg_uint32 devfn,                                      cyg_uint32 offset,                                      cyg_uint16 val){        if (gapspci_initialized && BBA_SELECTED(bus, devfn))                HAL_WRITE_UINT16(GAPSPCI_BBA_CONFIG+offset, val);}void cyg_hal_plf_pci_cfg_write_byte   (cyg_uint32 bus,                                       cyg_uint32 devfn,                                       cyg_uint32 offset,                                       cyg_uint8 val){        if (gapspci_initialized && BBA_SELECTED(bus, devfn))                HAL_WRITE_UINT8(GAPSPCI_BBA_CONFIG+offset, val);}//-----------------------------------------------------------------------------// End of dreamcast_pci.c

⌨️ 快捷键说明

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