initial merge of infineon code for amazon, pci is still broken a bit. a big thank...
[openwrt/svn-archive/archive.git] / target / linux / amazon-2.6 / files / include / asm-mips / amazon / amazon_dma.h
diff --git a/target/linux/amazon-2.6/files/include/asm-mips/amazon/amazon_dma.h b/target/linux/amazon-2.6/files/include/asm-mips/amazon/amazon_dma.h
new file mode 100644 (file)
index 0000000..63ab592
--- /dev/null
@@ -0,0 +1,148 @@
+#ifndef AMAZON_DMA_H
+#define AMAZON_DMA_H
+
+#define RCV_INT          1
+#define TX_BUF_FULL_INT  2
+#define TRANSMIT_CPT_INT 4
+
+#define QOS_DEFAULT_WGT 0x7fffffffUL;
+
+
+enum attr_t{
+   TX=0,
+   RX=1,
+   RESERVED=2,
+   DEFAULT=3,
+   
+};
+
+#ifdef CONFIG_CPU_LITTLE_ENDIAN
+typedef struct rx_desc{
+   u32 data_length:16;
+   volatile u32 reserved:7;
+   volatile u32 byte_offset:2; 
+   volatile u32 Burst_length_offset:3;
+   volatile u32 EoP:1;
+   volatile u32 Res:1;
+   volatile u32 C:1;
+   volatile u32 OWN:1;
+   volatile u32 Data_Pointer;
+   /*fix me:should be 28 bits here, 32 bits just for host simulatiuon purpose*/ 
+}_rx_desc; 
+
+
+typedef struct tx_desc{
+   volatile u32 data_length:16;
+   volatile u32 reserved1:7;
+   volatile u32 byte_offset:5;   
+   volatile u32 EoP:1;
+   volatile u32 SoP:1;
+   volatile u32 C:1;
+   volatile u32 OWN:1;
+   volatile u32 Data_Pointer;//fix me:should be 28 bits here
+}_tx_desc;
+#else //BIG
+typedef struct rx_desc{
+       union
+       {
+               struct
+               {
+                       volatile u32 OWN                        :1;
+                       volatile u32 C                          :1;
+                       volatile u32 SoP                        :1;
+                       volatile u32 EoP                        :1;
+                       volatile u32 Burst_length_offset        :3;
+                       volatile u32 byte_offset                :2; 
+                       volatile u32 reserve                    :7;
+                       volatile u32 data_length                :16;
+               }field;
+
+               volatile u32 word;
+       }status;
+       
+       volatile u32 Data_Pointer;
+}_rx_desc; 
+
+
+typedef struct tx_desc{
+       union
+       {
+               struct
+               {
+                       volatile u32 OWN                 :1;
+                       volatile u32 C                   :1;
+                       volatile u32 SoP                 :1;
+                       volatile u32 EoP                 :1;
+                       volatile u32 byte_offset         :5; 
+                       volatile u32 reserved            :7;
+                       volatile u32 data_length         :16;
+               }field;
+
+               volatile u32 word;
+       }status;
+       
+       volatile u32 Data_Pointer;
+}_tx_desc;
+
+#endif //ENDIAN
+
+struct dma_channel_info{
+  /*filled by driver, optional*/  
+    enum attr_t attr;/*TX or RX*/
+    int weight;
+    int desc_num;
+    int packet_size;
+    int control;/*on or off*/ 
+   
+    int desc_base;
+    int status;
+};
+
+typedef struct dma_channel_info _dma_channel_info;
+
+struct dma_device_info{
+   /*variables*/ 
+   /*filled by driver, compulsary*/
+    char device_name[15];
+    enum attr_t attr;/*default or else*/
+    int tx_burst_len;
+    int rx_burst_len;   
+    int logic_rx_chan_base;
+    int logic_tx_chan_base;
+    u8 on_ch_bit;
+   /*filled by driver, optional*/
+    int  weight;
+    int  current_tx_chan;
+    int  current_rx_chan;
+    int  num_tx_chan;
+    int  num_rx_chan; 
+    struct dma_channel_info tx_chan[2];
+    struct dma_channel_info rx_chan[4]; 
+    
+    /*functions, optional*/
+    u8* (*buffer_alloc)(int len,int* offset, void** opt);
+    int (*buffer_free)(u8* dataptr, void* opt);
+    int (*intr_handler)(struct dma_device_info* info, int status);
+    /*set by device, clear by dma*/
+    int ack;
+    void * priv;               /* used by peripheral driver only */
+};
+typedef struct dma_device_info _dma_device_info;
+
+int dma_device_register(struct dma_device_info* info);
+
+int dma_device_unregister(struct dma_device_info* info);
+
+int dma_device_read(struct dma_device_info* info, u8** dataptr, void** opt);
+
+int dma_device_write(struct dma_device_info* info, u8* dataptr, int len, void* opt);
+
+int dma_device_update(struct dma_device_info* info);
+
+void dma_device_update_rx(struct dma_device_info* dma_dev);
+
+void dma_device_update_tx(struct dma_device_info* dma_dev);
+
+void register_handler_sim(int (*handler)(int));
+#endif /* AMAZON_DMA_H */