ircard_cs.h

来自「linux操作系统下的红外驱动的测试程序」· C头文件 代码 · 共 237 行

H
237
字号
/********************************************************************* *                 * Filename:      ircard_cs.h * Version:        * Description:    * Status:        Experimental. * Author:        Dag Brattli <dagb@cs.uit.no> * Created at:    Fri Apr  2 15:59:20 1999 * Modified at:   Wed Jun 30 01:00:45 1999 * Modified by:   Dag Brattli <dagb@cs.uit.no> *  *     Copyright (c) 1999 Dag Brattli, All Rights Reserved. *      *     This program is free software; you can redistribute it and/or  *     modify it under the terms of the GNU General Public License as  *     published by the Free Software Foundation; either version 2 of  *     the License, or (at your option) any later version. *  *     This program is distributed in the hope that it will be useful, *     but WITHOUT ANY WARRANTY; without even the implied warranty of *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *     GNU General Public License for more details. *  *     You should have received a copy of the GNU General Public License  *     along with this program; if not, write to the Free Software  *     Foundation, Inc., 59 Temple Place, Suite 330, Boston,  *     MA 02111-1307 USA *      ********************************************************************/#ifndef IRCARD_CS_H#define IRCARD_CS_H#include <linux/time.h>/*#define PIO_THRESHOLD       4000000*/#define PIO_THRESHOLD       1152000/*  * FIR Control Registers  */#define MCR                  0x00 /* Master Control Register */#define  MCR_INTR_EN         0x80 /* FIR interrupt enable */#define  MCR_TX_EN           0x40 /* Transmit enable */#define  MCR_RX_EN           0x20 /* Receive enable */#define  MCR_BANK_MASK       0x1f/* Bank 0 */#define MSR                    0x01 /* Master Status Register */#define  MSR_TCV_I             0x80 /* Tranceiver interrupt */#define  MSR_TMR_I             0x40 /* Timer interrupt */#define  MSR_TX_I              0x20 /* Transmit interrupt */#define  MSR_RX_I              0x10 /* Receive interrupt */#define   MSR_I_MASK           0xf0#define  MSR_RX_COND_ID        0x08 /* Rx special condition */#define  MSR_RX_DATA_ID        0x0a /* Rx data available */#define  MSR_TX_EMPTY_ID       0x0c /* Tx buffer empty */#define  MSR_TX_COND_ID        0x0e /* Tx special condition */#define   MSR_ID_MASK          0x0e#define  MISC                  0x01 /* Miscellaneous Control Register */#define   MISC_XMIT            0x80 /* Use channel 2 for send */#define   MISC_RECV            0x40 /* Use channel 1 for receive */#define RX_FIFO                0x02#define TX_FIFO                0x02#define TX_CTRL1               0x03 /* Transmit control register 1 */#define  TX_CTRL1_RTS          0x80 /* Transmit request to send (RTS) */#define  TX_CTRL1_FIFO_RDY_I   0x40 /* Transmit FIFO ready interrupt enable */#define  TX_CTRL1_UNDR_EOM_I   0x20 /* Transmit underrun/eom int. enable */#define  TX_CTRL1_FIFO_LVL     0x10 /* Transmit FIFO level */#define  TX_CTRL1_AUTO_RST_RTS 0x08 /* Auto reset RTS */#define  TX_CTRL1_AUTO_RST_EOM 0x04 /* Auto reset EOM */#define  TX_CTRL1_TX_IDLE      0x02 /* TX idle */#define  TX_CTRL1_UNDR_ABORT   0x01 /* Transmit underrun abort */#define TX_CTRL2               0x04 /* Transmit control register 2 */#define  TX_CTRL2_EN_TX_CRC    0x40 /* Enable transmit CRC */#define  TX_CTRL2_EARLY_EOM_16  0x01#define  TX_CTRL2_EARLY_EOM_32  0x02#define  TX_CTRL2_EARLY_EOM_64  0x03#define  TX_CTRL2_EARLY_EOM_128 0x04#define  TX_CTRL2_EARLY_EOM_256 0x05#define  TX_CTRL2_EARLY_EOM_512 0x06#define  TX_CTRL2_EARLY_EOM_1K  0x07#define TX_STAT                0x05 /* Transmit status register */#define  TX_STAT_FIFO_UNDR     0x08 /* Transmit FIFO underrun */#define  TX_STAT_EOM           0x04 /* Transmit end of message */#define  TX_STAT_FIFO_RDY      0x02 /* Transmit FIFO ready */#define  TX_STAT_EARLY_EOM     0x01 /* Transmit early end of message */#define RX_CTRL                0x06 /* Receive control register */#define  RX_CTRL_COND_I        0x01 /* Rx special condition interrupt */#define  RX_CTRL_FIFO_READY    0x02 /* Rx FIFO ready */#define  RX_CTRL_EN_CRC        0x40 /* Enable checking of CRC */#define RX_STAT                0x07 /* Receive status register */#define  RX_STAT_DATA_AVAIL    0x08 /* Receive data available */#define  RX_STAT_EOF           0x10 /* Receive end of frame */#define  RX_STAT_FIFO_OVRN     0x20 /* FIFO overrun interrupt enable */#define  RX_STAT_FRAME_ERROR   0x40 /* Rx Frame error */#define  RX_STAT_ABORT         0x80 /* Rx abort sequence detected */#define   RX_STAT_MASK         0xfc#define RESET                  0x07 /* Reset command register */#define  RESET_ENTER_HUNT_MODE 0x10#define  RESET_RX_FIFO_PTR     0x20#define  RESET_RX_SPEC_BITS    0x30#define  RESET_RX_RFP          0x40#define  RESET_TX_SPEC_BITS    0x50#define  RESET_TX_FIFO_PTR     0x60#define  RESET_HARDWARE        0x70/* Bank 1 */#define FRAME_ADDR            0x01 /* Frame address register */#define RX_BYTE_COUNT_LOW     0x02 /* Receive byte count low byte */#define RX_BYTE_COUNT_HIGH    0x03 /* Receive byte count high byte */#define RX_RING_FRM_PTR_LOW   0x04 /* Receive ring frame pointer low byte */#define RX_RING_FRM_PTR_HIGH  0x05 /* Receive ring frame pointer high byte */#define TX_BYTE_COUNT_LOW     0x06 /* Transmit byte count low byte */#define TX_BYTE_COUNT_HIGH    0x07 /* Transmit byte count high byte *//* Bank 2 */#define IR_CONF               0x01 /* Infrared configuration register 1 */#define  IR_CONF_SIR          0x00#define  IR_CONF_MIR          0x02#define  IR_CONF_FIR          0x04#define  IR_CONF_MIR_1152     0x00#define  IR_CONF_MIR_576      0x10#define IR_TRANS_CTRL          0x02 /* Infrared tranceiver control register */#define  IR_TRANS_CTRL_TXD_FRC 0x02#define  IR_TRANS_CTRL_XCVROFF 0x10#define IR_CONF2              0x03 /* Infrared configuration register 2 */#define  IR_CONF2_IRQ_DEF     0x00 /* Default IRQ merging */#define  IR_CONF2_IRQ_UIRQ    0x01 /* Merge IRQs at UART pin */#define TMR                   0x04 /* General purpose timer register *//* Bank 3 */#define SH_MEM_PAGE           0x01 /* Shared memory page register */#define TX_DMA_ADDR_LOW       0x02 /* Tx DMA start address (low byte) */#define TX_DMA_ADDR_HIGH      0x03 /* Tx DMA start address (high byte) */#define  PAGE_DISABLE         0x40 /* Disable shared memory paging */#define REVISION_ID           0x07 /* Revision ID *//* Offset to transmit part of shared memory *//* #define SHMEM_TX_START 0x1000 */#define SHMEM_TX_START 0x4000#define MAX_WINDOW 8/* Just to make sure we are sane */#define IRCARD_MAGIC 92612struct frame_cb {	int start; /* Start of frame in sh-mem */	int len;   /* Lenght of frame in sh-mem */};struct shm_queue_t {	struct frame_cb queue[MAX_WINDOW]; /* Info about frames in queue */	int             ptr;               /* Currently being sent */	int             len;               /* Lenght of queue */	int             free;              /* Next free slot */	int             tail;              /* Next free start in shmem */};struct ircard_cb {	int magic; 	struct irda_device  idev;	dev_node_t	    node;	int		    stop;	struct shm_queue_t  tx_q;    /* Transmit queue info */	struct shm_queue_t  rx_q;    /* Receive queue info */	int                 data;    /* Ptr to last frame received */	struct timeval      stamp;	struct timeval      now;};/* * Function ircard_set_mcr(iobase, itr, bank) * *    Sets the value of the MCR register. Itr is the interrupt, transmit *    and receive bits (7-5) of MCR. Bank is bank bits (4-0) of MCR. */static inline void ircard_set_mcr(int iobase, __u8 itr, __u8 bank){	outb(itr|bank, iobase+MCR);}/* * Function __switch_bank (iobase, bank) * *    Switches to requested bank, but does not preserve the previous contents *    of MCR. Returns nothing. */static inline void __switch_bank(int iobase, __u8 bank){	outb(bank, iobase+MCR);}/* * Function switch_bank (iobase, bank) * *    Switches to requested bank. The original contents of the interrups,  *    transmit, and receive bits of MCR is preserved. Returns the the original *    bank used before the call. */static inline __u8 switch_bank(int iobase, __u8 bank){	__u8 old_bank;	__u8 mcr;	/* Read contents of MCR */	mcr = inb(iobase+MCR);	/* Extract original bank */	old_bank = mcr & MCR_BANK_MASK;	ircard_set_mcr(iobase, mcr & ~MCR_BANK_MASK, bank);	return old_bank;}/* Makes the code more readable */#define restore_bank switch_bank#endif

⌨️ 快捷键说明

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