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

📄 gspx-pxa.h

📁 Wince BSP 下的Wifi 驱动 基于PXA270 CPU
💻 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>  //JKU
#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
#define     GSPI_BUS_CLK_RATE   13000000
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);

PVOID pxa_gspi_Init(void);
DWORD pxa_gspi_register_isr(PVOID ssphc, void* Adapter, ISRFUNC isrFunc);
BOOL gspx_read_reg8(PVOID hDC, WORD reg, BYTE *data);

#if 0  //JKU: moved to JaguarGSPX.h
PVOID gspx_init(void *pSpiParam);
BOOL gspx_deinit(PVOID hDC);
///GSPI_STATUS ssp_read_register(PVOID hDC, WORD regaddr, WORD* regdatPt);
//GSPI_STATUS ssp_read_register(PVOID hDC, WORD* regdatPt, WORD regaddr);
//GSPI_STATUS ssp_write_register(PVOID hDC, WORD regaddr, WORD* regdatPt);

//GSPI_STATUS ssp_write_data(PVOID hDC, WORD* datPt, WORD reg, WORD nword);
//GSPI_STATUS ssp_read_data(PVOID hDC, WORD* datPt, WORD reg, WORD nword);
BOOL pxa_gspi_Deinit(PVOID hDC);
BOOL gspx_read_reg16(PVOID hDC, WORD reg, WORD *data);
BOOL gspx_read_reg32(PVOID hDC, UINT16 reg, UINT32 *data);
BOOL gspx_read_mem(PVOID hDC,UINT16 reg, UINT16 nword, UINT16* datPt);
BOOL gspx_write_reg16(PVOID hDC, WORD regaddr, WORD regdata);
BOOL gspx_write_mem(PVOID hDC,WORD regaddr, WORD nword, WORD* datPt);
#endif

//JKU: int gspx_set_callback(PVOID pHC, PVOID cb, void *data);


#ifdef __cplusplus
}
#endif
#endif __PXA_GSPI_H__


⌨️ 快捷键说明

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