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

📄 ddk_bus.c

📁 Wince4.2 BSP for SH4 engineering development board
💻 C
字号:

//  Copyright(c) Renesas Technology Corp. 1998-2003 All rights reserved.
//
//  CEDDK Driver for HS7751RSTC01H
//
//  FILE      : DDK_BUS.C
//  CREATED   : 2002.09.19
//  MODIFIED  : 2003.08.06
//  AUTHOR    : Renesas Technology Corp.
//  HARDWARE  : RENESAS HS7751RSTC01H (S1-E, ITS-DS5)
//  TARGET OS : Microsoft(R) Windows(R) CE .NET 4.2
//  NOTES     : This driver is based on CEDDK driver for PFM-DS6D.
//  HISTORY   :
//              2001.06.06
//              - Released as CEDDK driver for PFM-DS6D by modifying
//               CEDDK driver in PB3.0 reference drivers.
//              (Detailed history for PFM-DS6D are omitted.)
//              2002.03.14
//              - Modified HalTranslateBusAddress Function to adapt to SMI Lynx3DMx PCI Video Board.
//              2002.09.19
//              - Released for HS7751RSTC01H as Ver. 1.0.0

/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.
Copyright (c) 1995-2000 Microsoft Corporation.  All rights reserved.

Module Name:  

    ceddk.c

Abstract:  

    WINCE device driver support routines.  This file supports
    a very minimal subset of the routines from ntddk.h

    
Functions:


Notes:

--*/



#include <windows.h>
#include <types.h>
#include <ceddk.h>
#include "hal.h"
#include "s1e.h"

//
// I/O driver configuration functions.
//

NTHALAPI
ULONG
HalGetBusDataByOffset(
                     IN BUS_DATA_TYPE BusDataType,
                     IN ULONG BusNumber,
                     IN ULONG SlotNumber,
                     IN PVOID Buffer,
                     IN ULONG Offset,
                     IN ULONG Length
                     )
{
    BUSDATA_PARMS parms;
    DWORD dwBytesReturned=0;
    BOOL  RetCode=FALSE;

    DEBUGMSG(1, (TEXT("+HalGetBusDataByOffset [%x][%x:%x]\r\n"),SlotNumber,Offset,Length));
    memset(&parms, 0, sizeof(BUSDATA_PARMS));

    parms.Function = IOCTL_HAL_GETBUSDATA;
    parms.ReturnCode = 0;
    parms.BusDataType = BusDataType;
    parms.BusNumber = BusNumber;
    parms.SlotNumber = SlotNumber;
    parms.Buffer = Buffer;
    parms.Offset = Offset;
    parms.Length = Length;
    RetCode = KernelIoControl( IOCTL_HAL_DDK_CALL,
                               &parms, sizeof(parms),
                               NULL, 0,
                               &dwBytesReturned);
    if ( RetCode ) {
        // The IOCTL worked, get results from parms.
        DEBUGMSG(1, (TEXT("-HalGetBusDataByOffset %d\r\n"),
                     parms.ReturnCode));
        return (parms.ReturnCode);
    } else {
        // The IOCTL failed, ignore anything in parms.
        DEBUGMSG(1, (TEXT("-HalGetBusDataByOffset - Failed\r\n")));
        return (0);
    }

}


NTHALAPI
ULONG
HalSetBusDataByOffset(
                     IN BUS_DATA_TYPE BusDataType,
                     IN ULONG BusNumber,
                     IN ULONG SlotNumber,
                     IN PVOID Buffer,
                     IN ULONG Offset,
                     IN ULONG Length
                     )
{
    BUSDATA_PARMS parms;
    DWORD dwBytesReturned=0;
    BOOL  RetCode=FALSE;

    DEBUGMSG(1, (TEXT("+HalSetBusDataByOffset\r\n")));
    memset(&parms, 0, sizeof(BUSDATA_PARMS));
    parms.Function = IOCTL_HAL_SETBUSDATA;
    parms.ReturnCode = 0;
    parms.BusDataType = BusDataType;
    parms.BusNumber = BusNumber;
    parms.SlotNumber = SlotNumber;
    parms.Buffer = Buffer;
    parms.Offset = Offset;
    parms.Length = Length;
    RetCode = KernelIoControl( IOCTL_HAL_DDK_CALL,
                               &parms, sizeof(parms),
                               NULL, 0,
                               &dwBytesReturned);
    if ( RetCode ) {
        // The IOCTL worked, get results from parms.
        DEBUGMSG(1, (TEXT("-HalSetBusDataByOffset %d\r\n"),
                     parms.ReturnCode));
        return (parms.ReturnCode);
    } else {
        // The IOCTL failed, ignore anything in parms.
        DEBUGMSG(1, (TEXT("-HalSetBusDataByOffset - Failed\r\n")));
        return (0);
    }    
}


NTHALAPI
BOOLEAN
HalTranslateBusAddress(
                      IN INTERFACE_TYPE  InterfaceType,
                      IN ULONG BusNumber,
                      IN PHYSICAL_ADDRESS BusAddress,
                      IN OUT PULONG AddressSpace,
                      OUT PPHYSICAL_ADDRESS TranslatedAddress
                      )
{
    RETAILMSG(1, (TEXT("+HalTranslateBusAddress : %08x\r\n"),BusAddress.LowPart));

	if(InterfaceType == PCIBus) {
		if(*AddressSpace & 1) {	// I/O
			BusAddress.LowPart += (( PCI_IO_BASE & 0x1FFFFFFF )) - PCI_LB_MAP_IO;
		}
		else {	// Memory
			BusAddress.LowPart += ( PCI_MEM_BASE & 0x1FFFFFFF ) - PCI_LB_MAP_MEM;


#if BSP_DISPLAY_SMI == 1
			// In case of using SMI LynxEM4+ video card(Yellow card),remove the following one statement.
			BusAddress.LowPart += 0x0f000000;
#endif
#if ENABLE_IGS5000 == 1
			// In case of using IGS5000 video card,remove the following one statement.
			BusAddress.LowPart += 0xe0000000;
#endif

		}

		*TranslatedAddress = BusAddress;
		*AddressSpace = 0;	// Memory Mapped I/O
	    RETAILMSG(1, (TEXT("-HalTranslateBusAddress : %08x\r\n"),BusAddress.LowPart));

	    return (TRUE);
	}
	else {
	    RETAILMSG(1, (TEXT("-HalTranslateBusAddress : Not supported.\r\n")));
		return (FALSE);
	}
}

/*++

 Function:       HalTranslateSystemAddress

 Description:    Translates a system physical address to a logical 
                 (bus-relative) address, which can be handed off to a bus
                 controller (for DMA, for example).

 Arguments:

    InterfaceType	- Bus interface type (controller address space).
    BusNumber		- Bus number.
    SystemAddress	- System physical address to be translated.
    TranslatedAddress	- Translated (logical) address.

 Returns:

    TRUE  - Success.
    FALSE - Failure.

 Comments:

    NOTE: PCI bus address translations are the only ones supported.

    NOTE: Platform code and override the definition of this function.

--*/
NTHALAPI
BOOLEAN
HalTranslateSystemAddress(
    IN  INTERFACE_TYPE    InterfaceType,
    IN  ULONG             BusNumber,
    IN  PHYSICAL_ADDRESS  SystemAddress,
    OUT PPHYSICAL_ADDRESS TranslatedAddress
    )
{

    if (!TranslatedAddress)
        return(FALSE);

    // Only support PCI at the moment...
    if (InterfaceType != PCIBus)
    {
        RETAILMSG(1, (TEXT("HalTranslateSystemAddress: only PCI devices are supported.\r\n")));
        return(FALSE);
    }

    // Default case.
    TranslatedAddress->QuadPart = SystemAddress.QuadPart;

    return(TRUE);
}

⌨️ 快捷键说明

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