0001
0002
0003
0004
0005
0006
0007
0008 #ifndef __HPILO_H
0009 #define __HPILO_H
0010
0011 #define ILO_NAME "hpilo"
0012
0013
0014 #define PCI_REV_ID_NECHES 7
0015
0016
0017 #define MAX_CCB 24
0018
0019 #define MIN_CCB 8
0020
0021 #define MAX_ILO_DEV 1
0022
0023 #define MAX_OPEN (MAX_CCB * MAX_ILO_DEV)
0024
0025 #define MAX_WAIT_TIME 10000
0026
0027 #define WAIT_TIME 10
0028
0029 #define MAX_WAIT (MAX_WAIT_TIME / WAIT_TIME)
0030
0031
0032
0033
0034 struct ilo_hwinfo {
0035
0036 char __iomem *mmio_vaddr;
0037
0038
0039 char __iomem *db_vaddr;
0040
0041
0042 char __iomem *ram_vaddr;
0043
0044
0045 struct ccb_data *ccb_alloc[MAX_CCB];
0046
0047 struct pci_dev *ilo_dev;
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060 spinlock_t open_lock;
0061 spinlock_t alloc_lock;
0062 spinlock_t fifo_lock;
0063
0064 struct cdev cdev;
0065 };
0066
0067
0068 #define DB_IRQ 0xB2
0069
0070 #define DB_OUT 0xD4
0071
0072 #define DB_RESET 26
0073
0074
0075
0076
0077
0078
0079 #define ILOSW_CCB_SZ 64
0080 #define ILOHW_CCB_SZ 128
0081 struct ccb {
0082 union {
0083 char *send_fifobar;
0084 u64 send_fifobar_pa;
0085 } ccb_u1;
0086 union {
0087 char *send_desc;
0088 u64 send_desc_pa;
0089 } ccb_u2;
0090 u64 send_ctrl;
0091
0092 union {
0093 char *recv_fifobar;
0094 u64 recv_fifobar_pa;
0095 } ccb_u3;
0096 union {
0097 char *recv_desc;
0098 u64 recv_desc_pa;
0099 } ccb_u4;
0100 u64 recv_ctrl;
0101
0102 union {
0103 char __iomem *db_base;
0104 u64 padding5;
0105 } ccb_u5;
0106
0107 u64 channel;
0108
0109
0110 };
0111
0112
0113 #define SENDQ 1
0114 #define RECVQ 2
0115 #define NR_QENTRY 4
0116 #define L2_QENTRY_SZ 12
0117
0118
0119 #define CTRL_BITPOS_L2SZ 0
0120 #define CTRL_BITPOS_FIFOINDEXMASK 4
0121 #define CTRL_BITPOS_DESCLIMIT 18
0122 #define CTRL_BITPOS_A 30
0123 #define CTRL_BITPOS_G 31
0124
0125
0126 #define L2_DB_SIZE 14
0127 #define ONE_DB_SIZE (1 << L2_DB_SIZE)
0128
0129
0130
0131
0132 struct ccb_data {
0133
0134 struct ccb driver_ccb;
0135
0136
0137 struct ccb ilo_ccb;
0138
0139
0140 struct ccb __iomem *mapped_ccb;
0141
0142
0143 void *dma_va;
0144 dma_addr_t dma_pa;
0145 size_t dma_size;
0146
0147
0148 struct ilo_hwinfo *ilo_hw;
0149
0150
0151 wait_queue_head_t ccb_waitq;
0152
0153
0154 int ccb_cnt;
0155
0156
0157 int ccb_excl;
0158 };
0159
0160
0161
0162
0163 #define ILO_START_ALIGN 4096
0164 #define ILO_CACHE_SZ 128
0165 struct fifo {
0166 u64 nrents;
0167 u64 imask;
0168 u64 merge;
0169 u64 reset;
0170 u8 pad_0[ILO_CACHE_SZ - (sizeof(u64) * 4)];
0171
0172 u64 head;
0173 u8 pad_1[ILO_CACHE_SZ - (sizeof(u64))];
0174
0175 u64 tail;
0176 u8 pad_2[ILO_CACHE_SZ - (sizeof(u64))];
0177
0178 u64 fifobar[];
0179 };
0180
0181
0182 #define FIFOHANDLESIZE (sizeof(struct fifo))
0183 #define FIFOBARTOHANDLE(_fifo) \
0184 ((struct fifo *)(((char *)(_fifo)) - FIFOHANDLESIZE))
0185
0186
0187 #define ENTRY_BITPOS_QWORDS 0
0188
0189 #define ENTRY_BITPOS_DESCRIPTOR 10
0190
0191 #define ENTRY_BITPOS_C 22
0192
0193 #define ENTRY_BITPOS_O 23
0194
0195 #define ENTRY_BITS_QWORDS 10
0196 #define ENTRY_BITS_DESCRIPTOR 12
0197 #define ENTRY_BITS_C 1
0198 #define ENTRY_BITS_O 1
0199 #define ENTRY_BITS_TOTAL \
0200 (ENTRY_BITS_C + ENTRY_BITS_O + \
0201 ENTRY_BITS_QWORDS + ENTRY_BITS_DESCRIPTOR)
0202
0203
0204 #define ENTRY_MASK ((1 << ENTRY_BITS_TOTAL) - 1)
0205 #define ENTRY_MASK_C (((1 << ENTRY_BITS_C) - 1) << ENTRY_BITPOS_C)
0206 #define ENTRY_MASK_O (((1 << ENTRY_BITS_O) - 1) << ENTRY_BITPOS_O)
0207 #define ENTRY_MASK_QWORDS \
0208 (((1 << ENTRY_BITS_QWORDS) - 1) << ENTRY_BITPOS_QWORDS)
0209 #define ENTRY_MASK_DESCRIPTOR \
0210 (((1 << ENTRY_BITS_DESCRIPTOR) - 1) << ENTRY_BITPOS_DESCRIPTOR)
0211
0212 #define ENTRY_MASK_NOSTATE (ENTRY_MASK >> (ENTRY_BITS_C + ENTRY_BITS_O))
0213
0214 #endif