| .. | .. |
|---|
| 6 | 6 | #include <linux/types.h> |
|---|
| 7 | 7 | #include <linux/pci.h> |
|---|
| 8 | 8 | #include <net/smc.h> |
|---|
| 9 | +#include <asm/pci_insn.h> |
|---|
| 9 | 10 | |
|---|
| 10 | 11 | #define UTIL_STR_LEN 16 |
|---|
| 11 | 12 | |
|---|
| .. | .. |
|---|
| 15 | 16 | #define ISM_DMB_WORD_OFFSET 1 |
|---|
| 16 | 17 | #define ISM_DMB_BIT_OFFSET (ISM_DMB_WORD_OFFSET * 32) |
|---|
| 17 | 18 | #define ISM_NR_DMBS 1920 |
|---|
| 19 | +#define ISM_IDENT_MASK 0x00FFFF |
|---|
| 18 | 20 | |
|---|
| 19 | 21 | #define ISM_REG_SBA 0x1 |
|---|
| 20 | 22 | #define ISM_REG_IEQ 0x2 |
|---|
| .. | .. |
|---|
| 30 | 32 | #define ISM_SIGNAL_IEQ 0xE |
|---|
| 31 | 33 | #define ISM_UNREG_SBA 0x11 |
|---|
| 32 | 34 | #define ISM_UNREG_IEQ 0x12 |
|---|
| 33 | | - |
|---|
| 34 | | -#define ISM_ERROR 0xFFFF |
|---|
| 35 | 35 | |
|---|
| 36 | 36 | struct ism_req_hdr { |
|---|
| 37 | 37 | u32 cmd; |
|---|
| .. | .. |
|---|
| 194 | 194 | struct pci_dev *pdev; |
|---|
| 195 | 195 | struct smcd_dev *smcd; |
|---|
| 196 | 196 | |
|---|
| 197 | | - void __iomem *ctl; |
|---|
| 198 | | - |
|---|
| 199 | 197 | struct ism_sba *sba; |
|---|
| 200 | 198 | dma_addr_t sba_dma_addr; |
|---|
| 201 | 199 | DECLARE_BITMAP(sba_bitmap, ISM_NR_DMBS); |
|---|
| .. | .. |
|---|
| 209 | 207 | #define ISM_CREATE_REQ(dmb, idx, sf, offset) \ |
|---|
| 210 | 208 | ((dmb) | (idx) << 24 | (sf) << 23 | (offset)) |
|---|
| 211 | 209 | |
|---|
| 210 | +struct ism_systemeid { |
|---|
| 211 | + u8 seid_string[24]; |
|---|
| 212 | + u8 serial_number[4]; |
|---|
| 213 | + u8 type[4]; |
|---|
| 214 | +}; |
|---|
| 215 | + |
|---|
| 216 | +static inline void __ism_read_cmd(struct ism_dev *ism, void *data, |
|---|
| 217 | + unsigned long offset, unsigned long len) |
|---|
| 218 | +{ |
|---|
| 219 | + struct zpci_dev *zdev = to_zpci(ism->pdev); |
|---|
| 220 | + u64 req = ZPCI_CREATE_REQ(zdev->fh, 2, 8); |
|---|
| 221 | + |
|---|
| 222 | + while (len > 0) { |
|---|
| 223 | + __zpci_load(data, req, offset); |
|---|
| 224 | + offset += 8; |
|---|
| 225 | + data += 8; |
|---|
| 226 | + len -= 8; |
|---|
| 227 | + } |
|---|
| 228 | +} |
|---|
| 229 | + |
|---|
| 230 | +static inline void __ism_write_cmd(struct ism_dev *ism, void *data, |
|---|
| 231 | + unsigned long offset, unsigned long len) |
|---|
| 232 | +{ |
|---|
| 233 | + struct zpci_dev *zdev = to_zpci(ism->pdev); |
|---|
| 234 | + u64 req = ZPCI_CREATE_REQ(zdev->fh, 2, len); |
|---|
| 235 | + |
|---|
| 236 | + if (len) |
|---|
| 237 | + __zpci_store_block(data, req, offset); |
|---|
| 238 | +} |
|---|
| 239 | + |
|---|
| 212 | 240 | static inline int __ism_move(struct ism_dev *ism, u64 dmb_req, void *data, |
|---|
| 213 | 241 | unsigned int size) |
|---|
| 214 | 242 | { |
|---|
| 215 | 243 | struct zpci_dev *zdev = to_zpci(ism->pdev); |
|---|
| 216 | 244 | u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, size); |
|---|
| 217 | 245 | |
|---|
| 218 | | - return zpci_write_block(req, data, dmb_req); |
|---|
| 246 | + return __zpci_store_block(data, req, dmb_req); |
|---|
| 219 | 247 | } |
|---|
| 220 | 248 | |
|---|
| 221 | 249 | #endif /* S390_ISM_H */ |
|---|