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

📄 pxa-gspi.h

📁 非常好的marvall 8686驱动源码
💻 H
字号:
//
// Copyright (c) Marvell Taiwan Corporation.  All rights reserved.
//
//
//
/*++
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.

Module Name:  

pxa-gspi.h

Abstract:

Interface of SSP Host Controller

Notes: 

	Modified from %SystemRoot%\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\SERIAL\SER_CARD\ser_card.h

--*/
#ifndef __PXA_GSPI_H__
#define __PXA_GSPI_H__

#ifdef __cplusplus
extern "C" {
#endif

#include <windows.h>
#include <nkintr.h>
#include <ceddk.h>
#include <bulverde.h>
#include "pxa-ssp.h"
#include "pxa-dma.h"
#include "myintr.h"


#define		MVL_DEF_DRR			0x05
#define		MVL_DEF_DRP			0x0e

typedef enum {
	RDDMA_PARAM = 0,
	WTDMA_PARAM,
	MAXDMA_PARAM
};

typedef enum {
	GSPI_SUCCESS,
	GSPI_TIMEOUT,
	GSPI_INVALIDARGS,
	GSPI_MAX
} GSPI_STATUS;


typedef		int (*ISRFUNC)		(void* isrContext);

///PXA270 SSP Hardwar Context
typedef struct _SSP_HARDWARE_CONTEXT {
	volatile BULVERDE_GPIO_REG		*pGPIORegs;
	volatile BULVERDE_SSP_EXT_REG	*pSSPRegs;
	volatile BULVERDE_CLKMGR_REG	*pCLKRegs;
	volatile BULVERDE_DMA_REG		*pDMARegs;
	volatile BULVERDE_OST_REG		*pOSTRegs;

	CRITICAL_SECTION				SSPCrit;

	///DMA Descriptors
	volatile DMADescriptorChannelType *read_desc;				// virtual address of DMA descriptor
    volatile DMADescriptorChannelType *read_desc_phys_addr;		// physical address of DMA descriptor

	volatile DMADescriptorChannelType *write_desc;				// virtual address of DMA descriptor
    volatile DMADescriptorChannelType *write_desc_phys_addr;	// physical address of DMA descriptor

	volatile DMADescriptorChannelType *rw_desc;					// virtual address of DMA descriptor
    volatile DMADescriptorChannelType *rw_desc_phys_addr;		// physical address of DMA descriptor

	///Interrupt
	DWORD				dwIRQ;								/// IRQ value
	DWORD				dwSysIntr;							/// SYSINTR value
	HANDLE				hIntrHandle;						/// Handle to Interrupt event.
	HANDLE				hIntrThread;						/// Handle to thread which waits on

	HANDLE				hGIIsr;								/// GIISR


	///DMA Buffers
	volatile PBYTE		iodata;								/// virtual address of DMA buffer (R/W)
	volatile PBYTE		phys_addr;							/// physical address of DMA buffer
	volatile PBYTE		iorw;								/// virtual address of DMA buffer (dummy_write)
	volatile PBYTE		phys_addr_rw;						/// physical address of DMA buffer

	///DMA Interrupt
/*
	DWORD				dwDmaIRQ;							/// DMA IRQ value
	DWORD				dwDmaSysIntr;						/// DMA SYSINTR value

	HANDLE				hDMAIntrHandle;						/// Handle to Interrupt event.
	HANDLE				hDMAIntrThread;						/// Handle to thread which waits on
															///		an interrupt event.
*/
	///Bus-Access handle: for ISR
	HANDLE				hBusAcceHND;
	///LPCTSTR				pszActiveKey;

	MYDMAPARAM			DMAParam[MAXDMA_PARAM];				///DMA parameter (2 channels for both read/write)
	MYINTRINFO			DMAIntrInfo[MAXDMA_PARAM];			///DMA Interrupt Info

	MYINTRINFO			DevIntrInfo;						///Device Interrupt Info

	///DMA channel
	///DWORD				chan;							///Read Channel
	///DWORD				chanrw;							///Write Channel

	///Bus-Access handle: for ISR
	///HANDLE				hBusAccessHandle;
	///LPCTSTR				pszActiveKey;

	///DMA ISR handler DLL name
	TCHAR				wszDmaIsrDll[1024];
	///DMA ISR handler function name
	TCHAR				wszDmaIsrHandler[256];

	///HANDLE				hDMAIsrHandler;					///handle to DMA ISR handler
	///HANDLE				hDMAInterruptEvent;				///DMA interrupt event
	///DWORD				DmaIstThreadPriority;			///DMA IST thread priority
	///HANDLE				hDmaInterruptThread;			///handle to the DMA IST thread
	
	/// ISR Callback routine
	HANDLE				isrContext;
	ISRFUNC				isrFunc;

	///Synchronization Semaphore 
	HANDLE				waitqueue;

	BOOL				DriverShutdown;

} SSP_HARDWARE_CONTEXT, *PSSP_HARDWARE_CONTEXT;

///PXA270 SSP OpenContext
typedef struct _SSP_OPEN_CONTEXT {
	PSSP_HARDWARE_CONTEXT	pHC;
} SSP_OPEN_CONTEXT, *PSSP_OPEN_CONTEXT;

void udelay(volatile BULVERDE_OST_REG *pOstRegs, DWORD ms);

DWORD pxa_gspi_Init(void);
DWORD pxa_gspi_register_isr(DWORD ssphc, void* Adapter, ISRFUNC isrFunc);

///GSPI_STATUS ssp_read_register(DWORD hDC, WORD regaddr, WORD* regdatPt);
GSPI_STATUS ssp_read_register(DWORD hDC, WORD* regdatPt, WORD regaddr);
GSPI_STATUS ssp_write_register(DWORD hDC, WORD regaddr, WORD* regdatPt);

GSPI_STATUS ssp_write_data(DWORD hDC, WORD* datPt, WORD reg, WORD nword);
GSPI_STATUS ssp_read_data(DWORD hDC, WORD* datPt, WORD reg, WORD nword);
BOOL pxa_gspi_Deinit(DWORD hDC);

int pxa_read_intstate(DWORD hDC);


#ifdef __cplusplus
}
#endif
#endif __PXA_GSPI_H__


⌨️ 快捷键说明

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