qlge: Get rid of split addresses in hardware control blocks.
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / net / qlge / qlge.h
index ba2e1c5b6bcf8c0cf5b37e49b993d3ae3f82bb44..969700232265501357e21fbd72b29d7149c446fc 100644 (file)
@@ -818,15 +818,6 @@ struct tx_doorbell_context {
 };
 
 /* DATA STRUCTURES SHARED WITH HARDWARE. */
-
-struct bq_element {
-       u32 addr_lo;
-#define BQ_END 0x00000001
-#define BQ_CONT        0x00000002
-#define BQ_MASK        0x00000003
-       u32 addr_hi;
-} __attribute((packed));
-
 struct tx_buf_desc {
        __le64 addr;
        __le32 len;
@@ -860,8 +851,8 @@ struct ob_mac_iocb_req {
        __le16 frame_len;
 #define OB_MAC_IOCB_LEN_MASK 0x3ffff
        __le16 reserved2;
-       __le32 tid;
-       __le32 txq_idx;
+       u32 tid;
+       u32 txq_idx;
        __le32 reserved3;
        __le16 vlan_tci;
        __le16 reserved4;
@@ -880,8 +871,8 @@ struct ob_mac_iocb_rsp {
        u8 flags2;              /* */
        u8 flags3;              /* */
 #define OB_MAC_IOCB_RSP_B      0x80    /* */
-       __le32 tid;
-       __le32 txq_idx;
+       u32 tid;
+       u32 txq_idx;
        __le32 reserved[13];
 } __attribute((packed));
 
@@ -903,8 +894,8 @@ struct ob_mac_tso_iocb_req {
 #define OB_MAC_TSO_IOCB_V      0x04
        __le32 reserved1[2];
        __le32 frame_len;
-       __le32 tid;
-       __le32 txq_idx;
+       u32 tid;
+       u32 txq_idx;
        __le16 total_hdrs_len;
        __le16 net_trans_offset;
 #define OB_MAC_TRANSPORT_HDR_SHIFT 6
@@ -925,8 +916,8 @@ struct ob_mac_tso_iocb_rsp {
        u8 flags2;              /* */
        u8 flags3;              /* */
 #define OB_MAC_TSO_IOCB_RSP_B  0x8000
-       __le32 tid;
-       __le32 txq_idx;
+       u32 tid;
+       u32 txq_idx;
        __le32 reserved2[13];
 } __attribute((packed));
 
@@ -970,8 +961,7 @@ struct ib_mac_iocb_rsp {
 #define IB_MAC_IOCB_RSP_DS     0x40    /* data is in small buffer */
 #define IB_MAC_IOCB_RSP_DL     0x80    /* data is in large buffer */
        __le32 data_len;        /* */
-       __le32 data_addr_lo;    /* */
-       __le32 data_addr_hi;    /* */
+       __le64 data_addr;       /* */
        __le32 rss;             /* */
        __le16 vlan_id;         /* 12 bits */
 #define IB_MAC_IOCB_RSP_C      0x1000  /* VLAN CFI bit */
@@ -979,13 +969,13 @@ struct ib_mac_iocb_rsp {
 
        __le16 reserved1;
        __le32 reserved2[6];
-       __le32 flags4;
-#define IB_MAC_IOCB_RSP_HV     0x20000000      /* */
-#define IB_MAC_IOCB_RSP_HS     0x40000000      /* */
-#define IB_MAC_IOCB_RSP_HL     0x80000000      /* */
+       u8 reserved3[3];
+       u8 flags4;
+#define IB_MAC_IOCB_RSP_HV     0x20
+#define IB_MAC_IOCB_RSP_HS     0x40
+#define IB_MAC_IOCB_RSP_HL     0x80
        __le32 hdr_len;         /* */
-       __le32 hdr_addr_lo;     /* */
-       __le32 hdr_addr_hi;     /* */
+       __le64 hdr_addr;        /* */
 } __attribute((packed));
 
 struct ib_ae_iocb_rsp {
@@ -1050,10 +1040,8 @@ struct wqicb {
        __le16 cq_id_rss;
 #define Q_CQ_ID_RSS_RV 0x8000
        __le16 rid;
-       __le32 addr_lo;
-       __le32 addr_hi;
-       __le32 cnsmr_idx_addr_lo;
-       __le32 cnsmr_idx_addr_hi;
+       __le64 addr;
+       __le64 cnsmr_idx_addr;
 } __attribute((packed));
 
 /*
@@ -1078,18 +1066,14 @@ struct cqicb {
 #define LEN_CPP_64     0x0002
 #define LEN_CPP_128    0x0003
        __le16 rid;
-       __le32 addr_lo;
-       __le32 addr_hi;
-       __le32 prod_idx_addr_lo;
-       __le32 prod_idx_addr_hi;
+       __le64 addr;
+       __le64 prod_idx_addr;
        __le16 pkt_delay;
        __le16 irq_delay;
-       __le32 lbq_addr_lo;
-       __le32 lbq_addr_hi;
+       __le64 lbq_addr;
        __le16 lbq_buf_size;
        __le16 lbq_len;         /* entry count */
-       __le32 sbq_addr_lo;
-       __le32 sbq_addr_hi;
+       __le64 sbq_addr;
        __le16 sbq_buf_size;
        __le16 sbq_len;         /* entry count */
 } __attribute((packed));
@@ -1126,7 +1110,7 @@ struct map_list {
 struct tx_ring_desc {
        struct sk_buff *skb;
        struct ob_mac_iocb_req *queue_entry;
-       int index;
+       u32 index;
        struct oal oal;
        struct map_list map[MAX_SKB_FRAGS + 1];
        int map_cnt;
@@ -1138,8 +1122,8 @@ struct bq_desc {
                struct page *lbq_page;
                struct sk_buff *skb;
        } p;
-       struct bq_element *bq;
-       int index;
+       __le64 *addr;
+       u32 index;
         DECLARE_PCI_UNMAP_ADDR(mapaddr);
         DECLARE_PCI_UNMAP_LEN(maplen);
 };
@@ -1153,7 +1137,7 @@ struct tx_ring {
        struct wqicb wqicb;     /* structure used to inform chip of new queue */
        void *wq_base;          /* pci_alloc:virtual addr for tx */
        dma_addr_t wq_base_dma; /* pci_alloc:dma addr for tx */
-       u32 *cnsmr_idx_sh_reg;  /* shadow copy of consumer idx */
+       __le32 *cnsmr_idx_sh_reg;       /* shadow copy of consumer idx */
        dma_addr_t cnsmr_idx_sh_reg_dma;        /* dma-shadow copy of consumer */
        u32 wq_size;            /* size in bytes of queue area */
        u32 wq_len;             /* number of entries in queue */
@@ -1189,7 +1173,7 @@ struct rx_ring {
        u32 cq_size;
        u32 cq_len;
        u16 cq_id;
-       u32 *prod_idx_sh_reg;   /* Shadowed producer register. */
+       __le32 *prod_idx_sh_reg;        /* Shadowed producer register. */
        dma_addr_t prod_idx_sh_reg_dma;
        void __iomem *cnsmr_idx_db_reg; /* PCI doorbell mem area + 0 */
        u32 cnsmr_idx;          /* current sw idx */
@@ -1477,9 +1461,12 @@ static inline void ql_write_db_reg(u32 val, void __iomem *addr)
  * update the relevant index register and then copy the value to the
  * shadow register in host memory.
  */
-static inline unsigned int ql_read_sh_reg(const volatile void  *addr)
+static inline u32 ql_read_sh_reg(__le32  *addr)
 {
-       return *(volatile unsigned int __force *)addr;
+       u32 reg;
+       reg =  le32_to_cpu(*addr);
+       rmb();
+       return reg;
 }
 
 extern char qlge_driver_name[];