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

📄 sdev.h

📁 这是单板上DPRAM的驱动程序
💻 H
字号:
#ifndef _SDEV_H__
#define _SDEV_H__

/* #include <types.h> */
#include "src/arch.h" 

#define SDE_OK       0  /* Device is ok */
#define SDN_NULL     0  /* This device is not existed */
#define SDN_MISC     1  /* Misc functins */
#define SDN_MMI		 5  /* MMI interface */
#define SDA_NONE     0  /* No alarm */

#define SDB_SDEV            0
/* for error code */
#define SDE_DEV_BUSY       (-SDB_SDEV-1)  /* Device is busy, try later */
#define SDE_PACKET_LEN     (-SDB_SDEV-2)  /* Invalid packet len */
#define SDE_SHORTER_BUF    (-SDB_SDEV-3)  /* Buffer supplied by upper shorter */
#define SDE_BUF_EMPTY      (-SDB_SDEV-4)  /* No data packet valid */
#define SDE_UNKNOW_CMD     (-SDB_SDEV-5)  /* Unknown command */
#define SDE_OUT_OF_MEMORY  (-SDB_SDEV-6)  /* Out of Memory */
#define SDE_PACKET_ERR     (-SDB_SDEV-7)  /* Packet is err */
#define SDE_DEV_NOT_EXIST  (-SDB_SDEV-8)  /* dev not existed */
#define SDE_INVALID_TASKID (-SDB_SDEV-9)  /* Invalid taskid */
#define SDE_INVALID_EV     (-SDB_SDEV-10) /* Invalid EV */
#define SDE_INVALID_LEN    (-SDB_SDEV-11) /* Invalid Length of Param */
#define SDE_INVALID_ARG    (-SDB_SDEV-12) /* Invalid arguments */
#define SDE_INVALID_SLAVE  (-SDB_SDEV-13) /* Invalid Slave */
#define SDE_INVALID_PACKET (-SDB_SDEV-14) /* HDLC recv 2 bytes pkt, !invalid*/
#define SDE_GENERAL_FAIL   (-SDB_SDEV-15) /* INIT FAILED */
#define SDE_IN_TEST_MODE   (-SDB_SDEV-16) /* Device in test mode */
#define SDE_CONN_CHEK_ERR  (-SDB_SDEV-17) /* CHECK CONNECT ERROR */
/* for control code */
#define SDC_NULL                     (SDB_SDEV+0) /* NULL */
#define SDC_GET_MAX_BUF_LEN          (SDB_SDEV+1) /*r NULL */
#define SDC_GET_MAX_SEND_BD_NUM      (SDB_SDEV+2) /*r NULL */
#define SDC_GET_MAX_RECV_BD_NUM      (SDB_SDEV+3) /*r NULL */
#define SDC_GET_EMPTY_SEND_BD_NUM    (SDB_SDEV+4) /*r NULL */
#define SDC_GET_EMPTY_RECV_BD_NUM    (SDB_SDEV+5) /*r NULL */
#define SDC_GET_DRIVER_INFO          (SDB_SDEV+6) /* SDCGetDrvInfoStruct */
#define SDC_CLR_DRIVER_INFO          (SDB_SDEV+7) /* NULL */
#define SDC_REINIT                   (SDB_SDEV+8) /* NULL */
#define SDC_SET_ACTION               (SDB_SDEV+9) /* SDCSetActionStruct */
#define SDC_SET_NORMAL_MODE          (SDB_SDEV+10)/* NULL */
#define SDC_SET_LOOPBACK_MODE        (SDB_SDEV+11)/* NULL */
#define SDC_SET_TSA_LOOPBACK_MODE    (SDB_SDEV+12)/* NULL */
#define SDC_SET_TX_NO_CRC_MODE       (SDB_SDEV+13)/* NULL */
#define SDC_GET_ALARMS               (SDB_SDEV+14)/* ULONG *, maxlen */
#define SDC_SET_QUEUE_ACTION         (SDB_SDEV+15)/* SDCSetQueueStruct*/
#define SDC_SET_BAUDRATE             (SDB_SDEV+16)/* SDCSetBaudRate*/
#define SDC_SET_TEST_MODE            (SDB_SDEV+17)/* SDCEventQueueStruct 0r NULL*/
#define SDC_SET_UNTEST_MODE          (SDB_SDEV+18)/* SDCEventQueueStruct Or NULL*/
#define SDC_GET_EV_QUEUE_ACTION     (SDB_SDEV+19)/* SDCEventQueueStruct*/
#define SDC_SET_EV_QUEUE_ACTION      (SDB_SDEV+20)/* SDCEventQueueStruct*/

typedef struct {
    void *Addr;  /* Addr */
    UCHAR Size;  /* Addr Size, eq. 8,16,32 */
    ULONG Mask;  /* Mask Hi,Lo */
    ULONG Hi,Lo; /* value that control LineLevel */
    }LineLevelStruct;

typedef struct {
    ULONG RecvEv;    /* 当接收到一个数据包时,要发送的事件   */
    ULONG SendEv;    /* 当发送完毕一个数据包时,要发送的事件 */
    ULONG RecvTid;   /* 驱动程序发送RecvEv给此任务ID         */
    ULONG SendTid;   /* 驱动程序发送SendEv给此任务ID         */
    }SDCSetActionStruct;

typedef struct {
    ULONG RecvQID;  /* 当接收到一个数据包时,消息发送到的队列   */
    ULONG RecvMessage[4];
    ULONG SendQID;  /* 发送完毕一个数据包时,消息发送到的队列 */
    ULONG SendMessage[4];
   }SDCSetQueueStruct;
typedef struct {
    ULONG RecvEv;    /* 当接收到一个数据包时,要发送的事件   */
    ULONG SendEv;    /* 当发送完毕一个数据包时,要发送的事件 */
    ULONG RecvTid;   /* 驱动程序发送RecvEv给此任务ID         */
    ULONG SendTid;   /* 驱动程序发送SendEv给此任务ID         */
    ULONG RecvQID;  /* 当接收到一个数据包时,消息发送到的队列   */
    ULONG RecvMessage[4];
    ULONG SendQID;  /* 发送完毕一个数据包时,消息发送到的队列 */
    ULONG SendMessage[4];
   }SDCEventQueueStruct;
typedef struct {
    ULONG TotalRecvInt;         /*总的接收数据包的中断数 */
    ULONG TotalSendInt;         /*总的发送数据包的中断数 */
    ULONG RecvNum;              /*总接收到的正确的数据包 */
    ULONG RecvError;            /*总接收到的错误的数据包 */
    ULONG RecvBDStat[16];
    ULONG SendTryNum;           /*上层试图发送的数据包数 */
    ULONG SendPerNum;           /*允许发送的数据包       */
    ULONG TotalRecvByte;           /*总接收的数据       */
    ULONG TotalSendByte;           /*总发送的数据       */
    }SDCGetDriverInfoStruct;

typedef BuffDescType;  

typedef struct {
    BuffDescType *pBaseRecvBD;       /* Base address of recv BDs */
    BuffDescType *pBaseSendBD;       /* Base address of send BDs */
    USHORT MaxRecvBD; 
    USHORT MaxSendBD;
    USHORT MaxBufLen;                   /* Max Buffer length */
    USHORT CurRecvBD;                /* Current Recv BD number */
    USHORT CurSendBD;                /* Current Send BD number */
    ULONG  SendTid,RecvTid;
    ULONG  SendEv,RecvEv;
    ULONG  SendQID,RecvQID;
    ULONG  SendMessage[4],RecvMessage[4];
    SDCGetDriverInfoStruct DrvInfo;
    USHORT RecvErrMask;
    USHORT SendErrMask;
    char *UncachedBuffer;
    char Reserved[1];
    
} DataBufStruct;

typedef struct {
    int (*read )(void *databuf, void *buf, int BufLen); 
    int (*write)(void *databuf, void *buf, int BufLen);
    int (*cntrl)(void *databuf, int cmd,   void *param, int ParamLen);
    void *databuf;
    ULONG sm; /* for sm */
    char devmode; /* 1 for test,0 for normal*/
    ULONG testtaskid;
    } SDIndexTableStruct;

void SetDat(LineLevelStruct *p,ULONG val); /* val=1-Hi, 0-Lo */
ULONG GetDat(LineLevelStruct *p);          /* return 1-Hi,0-Lo */
UCHAR *sd_init(UCHAR *FreeMemPtr); 
char *AllocUncachedBuffer(int size,int align);
void InstallSD(int DEV,
    int (*read )(void *databuf, void *buf, int BufLen),
    int (*write)(void *databuf, void *buf, int BufLen),
    int (*cntrl)(void *databuf, int cmd,   void *param, int ParamLen),
    void *databuf);

/* 
   if you use next three functions, 
   pDataBuf must be pointed to a DataBufStruct struct 
*/

int BDRead(void *pDataBuf,char *pBuf, int MaxLen);
int BDWrite(void *pDataBuf, char *pBuf, int Len);
int BDCntrl(void *pDataBuf, int Cmd, void *pParam, int ParamLen);

/* Defination for common BD operating functions */
#define BD_LEN     8
#define BD_READY   (1 << (15-0))
#define BD_EMPTY   (1 << (15-0))
#define BD_INTR    (1 << (15-3))
#define BD_WRAP    (1 << (15-2))
#define BD_LAST	   (1 << (15-4))

extern char UncachedBuffer[MAX_UNCACHED_BUFFER_LEN];
extern SDIndexTableStruct sd_table[SDN_MAX];

int sd_smp(int DEV,int NoWait); /* return 0, ok */
void sd_smv(int DEV);
int sd_read (int DEV, void *buf, int BufLen);
int sd_write(int DEV, void *buf, int BufLen);
int sd_cntrl(int DEV, int cmd,   void *param, int ParamLen);
char *sd_err(int err);   

#endif _SDEV_H__

⌨️ 快捷键说明

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