]> Pileus Git - ~andy/linux/blobdiff - drivers/s390/crypto/ap_bus.h
Merge tag 'xfs-for-linus-v3.13-rc1-2' of git://oss.sgi.com/xfs/xfs
[~andy/linux] / drivers / s390 / crypto / ap_bus.h
index 52d61995af889a5cf3f9b2d9a29a200272ceb3a7..685f6cc022f92e929e60d865d817caca13269afb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright IBM Corp. 2006
+ * Copyright IBM Corp. 2006, 2012
  * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
  *           Martin Schwidefsky <schwidefsky@de.ibm.com>
  *           Ralph Wuerthner <rwuerthn@de.ibm.com>
@@ -83,13 +83,12 @@ int ap_queue_status_invalid_test(struct ap_queue_status *status)
        return !(memcmp(status, &invalid, sizeof(struct ap_queue_status)));
 }
 
-#define MAX_AP_FACILITY 31
-
-static inline int test_ap_facility(unsigned int function, unsigned int nr)
+#define AP_MAX_BITS 31
+static inline int ap_test_bit(unsigned int *ptr, unsigned int nr)
 {
-       if (nr > MAX_AP_FACILITY)
+       if (nr > AP_MAX_BITS)
                return 0;
-       return function & (unsigned int)(0x80000000 >> nr);
+       return (*ptr & (0x80000000u >> nr)) != 0;
 }
 
 #define AP_RESPONSE_NORMAL             0x00
@@ -117,6 +116,15 @@ static inline int test_ap_facility(unsigned int function, unsigned int nr)
 #define AP_DEVICE_TYPE_CEX2C   7
 #define AP_DEVICE_TYPE_CEX3A   8
 #define AP_DEVICE_TYPE_CEX3C   9
+#define AP_DEVICE_TYPE_CEX4    10
+
+/*
+ * Known function facilities
+ */
+#define AP_FUNC_MEX4K 1
+#define AP_FUNC_CRT4K 2
+#define AP_FUNC_COPRO 3
+#define AP_FUNC_ACCEL 4
 
 /*
  * AP reset flag states
@@ -151,6 +159,7 @@ struct ap_device {
        ap_qid_t qid;                   /* AP queue id. */
        int queue_depth;                /* AP queue depth.*/
        int device_type;                /* AP device type. */
+       unsigned int functions;         /* AP device function bitfield. */
        int unregistered;               /* marks AP device as unregistered */
        struct timer_list timeout;      /* Timer for request timeouts. */
        int reset;                      /* Reset required after req. timeout. */
@@ -183,6 +192,17 @@ struct ap_message {
                        struct ap_message *);
 };
 
+struct ap_config_info {
+       unsigned int special_command:1;
+       unsigned int ap_extended:1;
+       unsigned char reserved1:6;
+       unsigned char reserved2[15];
+       unsigned int apm[8];            /* AP ID mask */
+       unsigned int aqm[8];            /* AP queue mask */
+       unsigned int adm[8];            /* AP domain mask */
+       unsigned char reserved4[16];
+} __packed;
+
 #define AP_DEVICE(dt)                                  \
        .dev_type=(dt),                                 \
        .match_flags=AP_DEVICE_ID_MATCH_DEVICE_TYPE,
@@ -211,10 +231,9 @@ int ap_recv(ap_qid_t, unsigned long long *, void *, size_t);
 void ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg);
 void ap_cancel_message(struct ap_device *ap_dev, struct ap_message *ap_msg);
 void ap_flush_queue(struct ap_device *ap_dev);
+void ap_bus_force_rescan(void);
 
 int ap_module_init(void);
 void ap_module_exit(void);
 
-int ap_4096_commands_available(ap_qid_t qid);
-
 #endif /* _AP_BUS_H_ */