📄 gspi_io.h
字号:
#ifndef __GSPI_IO_H
#define __GSPI_IO_H
#include <linux/config.h>
#include <linux/delay.h>
#include <linux/ioctl.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/proc_fs.h>
#include <linux/errno.h>
#include <linux/sched.h>
#include <asm/uaccess.h>
#include <asm/semaphore.h>
#include <asm/irq.h>
#include <asm/dma.h>
#include <asm/arch/mcbsp.h>
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#ifndef NO
#define NO 0
#endif
#ifndef YES
#define YES 1
#endif
typedef unsigned char BOOL;
#define TIMEOUT (HZ * 2)
#define GSPI_WRITE 0x8000
#ifdef EXTERN
#undef EXTERN
#endif
#ifndef __GSPI_IO_CORE__
#define EXTERN extern
#else
#define EXTERN
#endif
typedef enum _gspic_reg_type {
GSPI_REG_TYPE_CARD = 0,
GSPI_REG_TYPE_USER,
} gspic_reg_type_t;
typedef struct gspihost_info gspihost_info_t;
typedef gspihost_info_t *gspihost_info_p;
typedef struct gspi_card_rec *gspi_card_rec_p;
typedef struct gspi_card_rec io_card_rec_t;
typedef io_card_rec_t *io_card_rec_p;
typedef struct gspi_notifier_rec gspi_notifier_rec_t;
typedef gspi_notifier_rec_t *gspi_notifier_rec_p;
typedef int (*gspi_notifier_fn_p) (gspi_card_rec_p );
typedef gspic_reg_type_t ioc_reg_type_t;
struct gspihost_info {
struct completion complete;
struct completion dmacomplete;
struct timer_list timer;
struct timer_list dmatimer;
spinlock_t lock;
int irq;
struct {
dma_regs_t *dma_regs_tx;
dma_regs_t *dma_regs_rx;
dma_addr_t dmaphys_tx;
dma_addr_t dmaphys_tx_rx;
dma_addr_t dmaphys_rx;
char *dmabuf_tx;
char *dmabuf_rx;
char *dmabuf_tx_rx;
wait_queue_head_t queue_tx;
wait_queue_head_t queue_rx;
int dma_txack;
int dma_rxack;
int error;
} d;
struct semaphore host_sem;
gspi_card_rec_p card;
} __attribute__((packed));
struct gspi_card_rec
{
u8 magic[4];
gspihost_info_p ctrlr; // Back Reference to Host Controller
int (*add)(gspi_card_rec_p card);
int (*remove)(gspi_card_rec_p card);
void (*user_isr)(int, void*, struct pt_regs*);
void *user_arg;
u16 chiprev;
} __attribute__((packed));
struct gspi_notifier_rec
{
int (*add)(gspi_card_rec_p card);
int (*remove)(gspi_card_rec_p card);
void (*user_isr)(int, void*, struct pt_regs*);
};
#define BUFSIZE 8 * 1024
#define PCKCNT 8
#define MCBSP2_DEVID_TX 16
#define MCBSP2_DEVID_RX 17
#define GSPI_OK 0
/********** DMA bit specifications ***********/
#define CSDP_DST_TIPB (3 << 9)
#define CSDP_SRC_TIPB (3 << 2)
#define CSDP_DATA_TYPE_16 (0x01)
#define CCR_DST_POST_INCREMENTAL_ADDR (0x01 << 14)
#define CCR_SRC_POST_INCREMENTAL_ADDR (0x01 << 12)
#define CCR_AUTO_INIT (0x01 << 8)
#define CICR_BLOCK_IE (0x01 << 5)
#define CICR_DROP_IE (0x01 << 1)
#define CICR_TOUT_IE (0x01)
/********* GPIO bit definitions *************/
#define GPIO(n) (1 << n)
EXTERN int gspi_read_reg(gspi_card_rec_p cardp, u16 reg, u16 *data);
EXTERN int gspi_write_reg(gspi_card_rec_p cardp, u16 reg, u16 data);
EXTERN int gspi_read_data(gspi_card_rec_p cardp,
u16 *data, u16 size);
EXTERN int gspi_write_data(gspi_card_rec_p cardp,
u16 *data, u16 size);
EXTERN int gspi_read_data_direct(gspi_card_rec_p cardp,
u8 *data, u16 reg, u16 size);
EXTERN int gspi_write_data_direct(gspi_card_rec_p cardp,
u8 *data, u16 reg, u16 size);
EXTERN int gspi_register_irq(gspihost_info_p);
EXTERN void gspi_unregister_irq(gspihost_info_p);
EXTERN int reinitialize_hw(gspihost_info_p gspiinfo);
EXTERN void gspi_reset(void);
EXTERN gspi_notifier_rec_p register_user(gspi_notifier_rec_p notifierp);
EXTERN void unregister_user(gspi_notifier_rec_p notifierp);
#endif /* __GSPI_IO_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -