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

📄 pcilynx.h

📁 ieee1394驱动,不多说了!直接可以在linux2.6内核中使用
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef __PCILYNX_H__#define __PCILYNX_H__#define PCILYNX_DRIVER_NAME      "pcilynx"#define PCILYNX_MAJOR            177#define PCILYNX_MINOR_AUX_START  0#define PCILYNX_MINOR_ROM_START  16#define PCILYNX_MINOR_RAM_START  32#define PCILYNX_MAX_REGISTER     0xfff#define PCILYNX_MAX_MEMORY       0xffff#define PCI_DEVICE_ID_TI_PCILYNX 0x8000#define MAX_PCILYNX_CARDS        4#define LOCALRAM_SIZE            4096#define NUM_ISORCV_PCL           4#define MAX_ISORCV_SIZE          2048#define ISORCV_PER_PAGE          (PAGE_SIZE / MAX_ISORCV_SIZE)#define ISORCV_PAGES             (NUM_ISORCV_PCL / ISORCV_PER_PAGE)#define CHANNEL_LOCALBUS         0#define CHANNEL_ASYNC_RCV        1#define CHANNEL_ISO_RCV          2#define CHANNEL_ASYNC_SEND       3#define CHANNEL_ISO_SEND         4#define PCILYNX_CONFIG_ROM_LENGTH   1024typedef int pcl_t;struct ti_lynx {        int id; /* sequential card number */        spinlock_t lock;        struct pci_dev *dev;        struct {                unsigned reg_1394a:1;                u32 vendor;                u32 product;        } phyic;        enum { clear, have_intr, have_aux_buf, have_pcl_mem,               have_1394_buffers, have_iomappings, is_host } state;        /* remapped memory spaces */        void __iomem *registers;        void __iomem *local_rom;        void __iomem *local_ram;        void __iomem *aux_port;	quadlet_t bus_info_block[5];        /*         * use local RAM of LOCALRAM_SIZE bytes for PCLs, which allows for         * LOCALRAM_SIZE * 8 PCLs (each sized 128 bytes);         * the following is an allocation bitmap         */        u8 pcl_bmap[LOCALRAM_SIZE / 1024];	/* point to PCLs memory area if needed */	void *pcl_mem;        dma_addr_t pcl_mem_dma;        /* PCLs for local mem / aux transfers */        pcl_t dmem_pcl;        /* IEEE-1394 part follows */        struct hpsb_host *host;        int phyid, isroot;        int selfid_size;        int phy_reg0;        spinlock_t phy_reg_lock;        pcl_t rcv_pcl_start, rcv_pcl;        void *rcv_page;        dma_addr_t rcv_page_dma;        int rcv_active;        struct lynx_send_data {                pcl_t pcl_start, pcl;                struct list_head queue;                struct list_head pcl_queue; /* this queue contains at most one packet */                spinlock_t queue_lock;                dma_addr_t header_dma, data_dma;                int channel;        } async, iso_send;        struct {                pcl_t pcl[NUM_ISORCV_PCL];                u32 stat[NUM_ISORCV_PCL];                void *page[ISORCV_PAGES];                dma_addr_t page_dma[ISORCV_PAGES];                pcl_t pcl_start;                int chan_count;                int next, last, used, running;                struct tasklet_struct tq;                spinlock_t lock;        } iso_rcv;	u32 i2c_driven_state; /* the state we currently drive the Serial EEPROM Control register */};/* the per-file data structure for mem space access */struct memdata {        struct ti_lynx *lynx;        int cid;        atomic_t aux_intr_last_seen;	/* enum values are the same as LBUS_ADDR_SEL_* values below */        enum { rom = 0x10000, aux = 0x20000, ram = 0 } type;};/* * Register read and write helper functions. */static inline void reg_write(const struct ti_lynx *lynx, int offset, u32 data){        writel(data, lynx->registers + offset);}static inline u32 reg_read(const struct ti_lynx *lynx, int offset){        return readl(lynx->registers + offset);}static inline void reg_set_bits(const struct ti_lynx *lynx, int offset,                                u32 mask){        reg_write(lynx, offset, (reg_read(lynx, offset) | mask));}static inline void reg_clear_bits(const struct ti_lynx *lynx, int offset,                                  u32 mask){        reg_write(lynx, offset, (reg_read(lynx, offset) & ~mask));}/* chip register definitions follow */#define PCI_LATENCY_CACHELINE             0x0c#define MISC_CONTROL                      0x40#define MISC_CONTROL_SWRESET              (1<<0)#define SERIAL_EEPROM_CONTROL             0x44#define PCI_INT_STATUS                    0x48#define PCI_INT_ENABLE                    0x4c/* status and enable have identical bit numbers */#define PCI_INT_INT_PEND                  (1<<31)#define PCI_INT_FORCED_INT                (1<<30)#define PCI_INT_SLV_ADR_PERR              (1<<28)#define PCI_INT_SLV_DAT_PERR              (1<<27)#define PCI_INT_MST_DAT_PERR              (1<<26)#define PCI_INT_MST_DEV_TIMEOUT           (1<<25)#define PCI_INT_INTERNAL_SLV_TIMEOUT      (1<<23)#define PCI_INT_AUX_TIMEOUT               (1<<18)#define PCI_INT_AUX_INT                   (1<<17)#define PCI_INT_1394                      (1<<16)#define PCI_INT_DMA4_PCL                  (1<<9)#define PCI_INT_DMA4_HLT                  (1<<8)#define PCI_INT_DMA3_PCL                  (1<<7)#define PCI_INT_DMA3_HLT                  (1<<6)#define PCI_INT_DMA2_PCL                  (1<<5)#define PCI_INT_DMA2_HLT                  (1<<4)#define PCI_INT_DMA1_PCL                  (1<<3)#define PCI_INT_DMA1_HLT                  (1<<2)#define PCI_INT_DMA0_PCL                  (1<<1)#define PCI_INT_DMA0_HLT                  (1<<0)/* all DMA interrupts combined: */#define PCI_INT_DMA_ALL                   0x3ff#define PCI_INT_DMA_HLT(chan)             (1 << (chan * 2))#define PCI_INT_DMA_PCL(chan)             (1 << (chan * 2 + 1))#define LBUS_ADDR                         0xb4#define LBUS_ADDR_SEL_RAM                 (0x0<<16)#define LBUS_ADDR_SEL_ROM                 (0x1<<16)#define LBUS_ADDR_SEL_AUX                 (0x2<<16)#define LBUS_ADDR_SEL_ZV                  (0x3<<16)#define GPIO_CTRL_A                       0xb8#define GPIO_CTRL_B                       0xbc#define GPIO_DATA_BASE                    0xc0#define DMA_BREG(base, chan)              (base + chan * 0x20)#define DMA_SREG(base, chan)              (base + chan * 0x10)#define DMA0_PREV_PCL                     0x100#define DMA1_PREV_PCL                     0x120#define DMA2_PREV_PCL                     0x140#define DMA3_PREV_PCL                     0x160#define DMA4_PREV_PCL                     0x180#define DMA_PREV_PCL(chan)                (DMA_BREG(DMA0_PREV_PCL, chan))#define DMA0_CURRENT_PCL                  0x104#define DMA1_CURRENT_PCL                  0x124#define DMA2_CURRENT_PCL                  0x144#define DMA3_CURRENT_PCL                  0x164#define DMA4_CURRENT_PCL                  0x184#define DMA_CURRENT_PCL(chan)             (DMA_BREG(DMA0_CURRENT_PCL, chan))#define DMA0_CHAN_STAT                    0x10c#define DMA1_CHAN_STAT                    0x12c#define DMA2_CHAN_STAT                    0x14c#define DMA3_CHAN_STAT                    0x16c#define DMA4_CHAN_STAT                    0x18c#define DMA_CHAN_STAT(chan)               (DMA_BREG(DMA0_CHAN_STAT, chan))/* CHAN_STATUS registers share bits */#define DMA_CHAN_STAT_SELFID              (1<<31)#define DMA_CHAN_STAT_ISOPKT              (1<<30)#define DMA_CHAN_STAT_PCIERR              (1<<29)#define DMA_CHAN_STAT_PKTERR              (1<<28)#define DMA_CHAN_STAT_PKTCMPL             (1<<27)#define DMA_CHAN_STAT_SPECIALACK          (1<<14)#define DMA0_CHAN_CTRL                    0x110#define DMA1_CHAN_CTRL                    0x130#define DMA2_CHAN_CTRL                    0x150#define DMA3_CHAN_CTRL                    0x170#define DMA4_CHAN_CTRL                    0x190#define DMA_CHAN_CTRL(chan)               (DMA_BREG(DMA0_CHAN_CTRL, chan))/* CHAN_CTRL registers share bits */#define DMA_CHAN_CTRL_ENABLE              (1<<31)#define DMA_CHAN_CTRL_BUSY                (1<<30)

⌨️ 快捷键说明

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