|
@@ -283,7 +283,7 @@ struct chsc_sei_nt2_area {
|
|
|
u8 ccdf[PAGE_SIZE - 24 - 56]; /* content-code dependent field */
|
|
|
} __packed;
|
|
|
|
|
|
-#define CHSC_SEI_NT0 0ULL
|
|
|
+#define CHSC_SEI_NT0 (1ULL << 63)
|
|
|
#define CHSC_SEI_NT2 (1ULL << 61)
|
|
|
|
|
|
struct chsc_sei {
|
|
@@ -291,7 +291,8 @@ struct chsc_sei {
|
|
|
u32 reserved1;
|
|
|
u64 ntsm; /* notification type mask */
|
|
|
struct chsc_header response;
|
|
|
- u32 reserved2;
|
|
|
+ u32 :24;
|
|
|
+ u8 nt;
|
|
|
union {
|
|
|
struct chsc_sei_nt0_area nt0_area;
|
|
|
struct chsc_sei_nt2_area nt2_area;
|
|
@@ -496,17 +497,17 @@ static int __chsc_process_crw(struct chsc_sei *sei, u64 ntsm)
|
|
|
css_schedule_eval_all();
|
|
|
}
|
|
|
|
|
|
- switch (sei->ntsm) {
|
|
|
- case CHSC_SEI_NT0:
|
|
|
+ switch (sei->nt) {
|
|
|
+ case 0:
|
|
|
chsc_process_sei_nt0(&sei->u.nt0_area);
|
|
|
- return 1;
|
|
|
- case CHSC_SEI_NT2:
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
chsc_process_sei_nt2(&sei->u.nt2_area);
|
|
|
- return 1;
|
|
|
+ break;
|
|
|
default:
|
|
|
- CIO_CRW_EVENT(2, "chsc: unhandled nt (nt=%08Lx)\n",
|
|
|
- sei->ntsm);
|
|
|
- return 0;
|
|
|
+ CIO_CRW_EVENT(2, "chsc: unhandled nt=%d\n",
|
|
|
+ sei->nt);
|
|
|
+ break;
|
|
|
}
|
|
|
} else {
|
|
|
CIO_CRW_EVENT(2, "chsc: sei failed (rc=%04x)\n",
|
|
@@ -537,15 +538,7 @@ static void chsc_process_crw(struct crw *crw0, struct crw *crw1, int overflow)
|
|
|
sei = sei_page;
|
|
|
|
|
|
CIO_TRACE_EVENT(2, "prcss");
|
|
|
-
|
|
|
- /*
|
|
|
- * The ntsm does not allow to select NT0 and NT2 together. We need to
|
|
|
- * first check for NT2, than additionally for NT0...
|
|
|
- */
|
|
|
-#ifdef CONFIG_PCI
|
|
|
- if (!__chsc_process_crw(sei, CHSC_SEI_NT2))
|
|
|
-#endif
|
|
|
- __chsc_process_crw(sei, CHSC_SEI_NT0);
|
|
|
+ __chsc_process_crw(sei, CHSC_SEI_NT0 | CHSC_SEI_NT2);
|
|
|
}
|
|
|
|
|
|
void chsc_chp_online(struct chp_id chpid)
|