1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _ASM_S390_EADM_H
3 #define _ASM_S390_EADM_H
5 #include <linux/types.h>
6 #include <linux/device.h>
7 #include <linux/blk_types.h>
8 #include <asm/dma-types.h>
20 #define ARQB_CMD_MOVE 1
40 #define EQC_WR_PROHIBIT 22
61 #define MSB_OC_CLEAR 0
63 #define MSB_OC_WRITE 2
64 #define MSB_OC_RELEASE 3
66 #define MSB_FLAG_BNM 0x80
67 #define MSB_FLAG_IDA 0x40
72 #define AOB_NR_MSB 124
77 struct msb msb[AOB_NR_MSB];
78 } __packed __aligned(PAGE_SIZE);
80 struct aob_rq_header {
81 struct scm_device *scmdev;
88 unsigned int nr_max_block;
91 unsigned int persistence:4;
92 unsigned int oper_state:4;
93 unsigned int data_state:4;
95 unsigned int release:1;
96 unsigned int res_id:8;
100 #define OP_STATE_GOOD 1
101 #define OP_STATE_TEMP_ERR 2
102 #define OP_STATE_PERM_ERR 3
104 enum scm_event {SCM_CHANGE, SCM_AVAIL};
107 struct device_driver drv;
108 int (*probe) (struct scm_device *scmdev);
109 void (*remove) (struct scm_device *scmdev);
110 void (*notify) (struct scm_device *scmdev, enum scm_event event);
111 void (*handler) (struct scm_device *scmdev, void *data,
115 int scm_driver_register(struct scm_driver *scmdrv);
116 void scm_driver_unregister(struct scm_driver *scmdrv);
118 int eadm_start_aob(struct aob *aob);
119 void scm_irq_handler(struct aob *aob, blk_status_t error);
121 #endif /* _ASM_S390_EADM_H */