root/drivers/s390/block/scm_blk.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. SCM_LOG_HEX
  2. SCM_LOG_STATE

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef SCM_BLK_H
   3 #define SCM_BLK_H
   4 
   5 #include <linux/interrupt.h>
   6 #include <linux/spinlock.h>
   7 #include <linux/blkdev.h>
   8 #include <linux/blk-mq.h>
   9 #include <linux/genhd.h>
  10 #include <linux/list.h>
  11 
  12 #include <asm/debug.h>
  13 #include <asm/eadm.h>
  14 
  15 #define SCM_NR_PARTS 8
  16 #define SCM_QUEUE_DELAY 5
  17 
  18 struct scm_blk_dev {
  19         struct request_queue *rq;
  20         struct gendisk *gendisk;
  21         struct blk_mq_tag_set tag_set;
  22         struct scm_device *scmdev;
  23         spinlock_t lock;
  24         atomic_t queued_reqs;
  25         enum {SCM_OPER, SCM_WR_PROHIBIT} state;
  26         struct list_head finished_requests;
  27 };
  28 
  29 struct scm_request {
  30         struct scm_blk_dev *bdev;
  31         struct aidaw *next_aidaw;
  32         struct request **request;
  33         struct aob *aob;
  34         struct list_head list;
  35         u8 retries;
  36         blk_status_t error;
  37 };
  38 
  39 #define to_aobrq(rq) container_of((void *) rq, struct aob_rq_header, data)
  40 
  41 int scm_blk_dev_setup(struct scm_blk_dev *, struct scm_device *);
  42 void scm_blk_dev_cleanup(struct scm_blk_dev *);
  43 void scm_blk_set_available(struct scm_blk_dev *);
  44 void scm_blk_irq(struct scm_device *, void *, blk_status_t);
  45 
  46 struct aidaw *scm_aidaw_fetch(struct scm_request *scmrq, unsigned int bytes);
  47 
  48 int scm_drv_init(void);
  49 void scm_drv_cleanup(void);
  50 
  51 extern debug_info_t *scm_debug;
  52 
  53 #define SCM_LOG(imp, txt) do {                                  \
  54                 debug_text_event(scm_debug, imp, txt);          \
  55         } while (0)
  56 
  57 static inline void SCM_LOG_HEX(int level, void *data, int length)
  58 {
  59         debug_event(scm_debug, level, data, length);
  60 }
  61 
  62 static inline void SCM_LOG_STATE(int level, struct scm_device *scmdev)
  63 {
  64         struct {
  65                 u64 address;
  66                 u8 oper_state;
  67                 u8 rank;
  68         } __packed data = {
  69                 .address = scmdev->address,
  70                 .oper_state = scmdev->attrs.oper_state,
  71                 .rank = scmdev->attrs.rank,
  72         };
  73 
  74         SCM_LOG_HEX(level, &data, sizeof(data));
  75 }
  76 
  77 #endif /* SCM_BLK_H */

/* [<][>][^][v][top][bottom][index][help] */