Lines Matching refs:sccb
70 static int __init sclp_cmd_sync_early(sclp_cmdw_t cmd, void *sccb) in sclp_cmd_sync_early() argument
75 rc = sclp_service_call(cmd, sccb); in sclp_cmd_sync_early()
88 static int __init sclp_read_info_early(struct read_info_sccb *sccb) in sclp_read_info_early() argument
96 memset(sccb, 0, sizeof(*sccb)); in sclp_read_info_early()
97 sccb->header.length = sizeof(*sccb); in sclp_read_info_early()
98 sccb->header.function_code = 0x80; in sclp_read_info_early()
99 sccb->header.control_mask[2] = 0x80; in sclp_read_info_early()
100 rc = sclp_cmd_sync_early(commands[i], sccb); in sclp_read_info_early()
105 if (sccb->header.response_code == 0x10) in sclp_read_info_early()
107 if (sccb->header.response_code != 0x1f0) in sclp_read_info_early()
113 static void __init sclp_facilities_detect(struct read_info_sccb *sccb) in sclp_facilities_detect() argument
118 if (sclp_read_info_early(sccb)) in sclp_facilities_detect()
121 sclp_facilities = sccb->facilities; in sclp_facilities_detect()
122 sclp_fac84 = sccb->fac84; in sclp_facilities_detect()
123 if (sccb->fac85 & 0x02) in sclp_facilities_detect()
125 sclp_rnmax = sccb->rnmax ? sccb->rnmax : sccb->rnmax2; in sclp_facilities_detect()
126 sclp_rzm = sccb->rnsize ? sccb->rnsize : sccb->rnsize2; in sclp_facilities_detect()
128 sclp_ibc = sccb->ibc; in sclp_facilities_detect()
130 if (!sccb->hcpua) { in sclp_facilities_detect()
134 sclp_max_cpu = sccb->ncpurl; in sclp_facilities_detect()
136 sclp_max_cpu = sccb->hcpua + 1; in sclp_facilities_detect()
140 cpue = (void *)sccb + sccb->cpuoff; in sclp_facilities_detect()
141 for (cpu = 0; cpu < sccb->ncpurl; cpue++, cpu++) { in sclp_facilities_detect()
151 if (sccb->flags & 0x2) in sclp_facilities_detect()
153 memcpy(&sclp_ipl_info.loadparm, &sccb->loadparm, LOADPARM_LEN); in sclp_facilities_detect()
155 sclp_mtid = (sccb->fac42 & 0x80) ? (sccb->fac42 & 31) : 0; in sclp_facilities_detect()
156 sclp_mtid_cp = (sccb->fac42 & 0x80) ? (sccb->fac43 & 31) : 0; in sclp_facilities_detect()
158 sclp_mtid_prev = (sccb->fac42 & 0x80) ? (sccb->fac66 & 31) : 0; in sclp_facilities_detect()
229 static int __init sclp_cmd_early(sclp_cmdw_t cmd, void *sccb) in sclp_cmd_early() argument
234 rc = sclp_cmd_sync_early(cmd, sccb); in sclp_cmd_early()
239 if (((struct sccb_header *) sccb)->response_code != 0x0020) in sclp_cmd_early()
244 static void __init sccb_init_eq_size(struct sdias_sccb *sccb) in sccb_init_eq_size() argument
246 memset(sccb, 0, sizeof(*sccb)); in sccb_init_eq_size()
248 sccb->hdr.length = sizeof(*sccb); in sccb_init_eq_size()
249 sccb->evbuf.hdr.length = sizeof(struct sdias_evbuf); in sccb_init_eq_size()
250 sccb->evbuf.hdr.type = EVTYP_SDIAS; in sccb_init_eq_size()
251 sccb->evbuf.event_qual = SDIAS_EQ_SIZE; in sccb_init_eq_size()
252 sccb->evbuf.data_id = SDIAS_DI_FCP_DUMP; in sccb_init_eq_size()
253 sccb->evbuf.event_id = 4712; in sccb_init_eq_size()
254 sccb->evbuf.dbs = 1; in sccb_init_eq_size()
257 static int __init sclp_set_event_mask(struct init_sccb *sccb, in sclp_set_event_mask() argument
261 memset(sccb, 0, sizeof(*sccb)); in sclp_set_event_mask()
262 sccb->header.length = sizeof(*sccb); in sclp_set_event_mask()
263 sccb->mask_length = sizeof(sccb_mask_t); in sclp_set_event_mask()
264 sccb->receive_mask = receive_mask; in sclp_set_event_mask()
265 sccb->send_mask = send_mask; in sclp_set_event_mask()
266 return sclp_cmd_early(SCLP_CMDW_WRITE_EVENT_MASK, sccb); in sclp_set_event_mask()
269 static long __init sclp_hsa_size_init(struct sdias_sccb *sccb) in sclp_hsa_size_init() argument
271 sccb_init_eq_size(sccb); in sclp_hsa_size_init()
272 if (sclp_cmd_early(SCLP_CMDW_WRITE_EVENT_DATA, sccb)) in sclp_hsa_size_init()
274 if (sccb->evbuf.blk_cnt == 0) in sclp_hsa_size_init()
276 return (sccb->evbuf.blk_cnt - 1) * PAGE_SIZE; in sclp_hsa_size_init()
279 static long __init sclp_hsa_copy_wait(struct sccb_header *sccb) in sclp_hsa_copy_wait() argument
281 memset(sccb, 0, PAGE_SIZE); in sclp_hsa_copy_wait()
282 sccb->length = PAGE_SIZE; in sclp_hsa_copy_wait()
283 if (sclp_cmd_early(SCLP_CMDW_READ_EVENT_DATA, sccb)) in sclp_hsa_copy_wait()
285 if (((struct sdias_sccb *) sccb)->evbuf.blk_cnt == 0) in sclp_hsa_copy_wait()
287 return (((struct sdias_sccb *) sccb)->evbuf.blk_cnt - 1) * PAGE_SIZE; in sclp_hsa_copy_wait()
295 static void __init sclp_hsa_size_detect(void *sccb) in sclp_hsa_size_detect() argument
300 if (sclp_set_event_mask(sccb, 0, 0x40000010)) in sclp_hsa_size_detect()
302 size = sclp_hsa_size_init(sccb); in sclp_hsa_size_detect()
308 if (sclp_set_event_mask(sccb, 0x00000010, 0x40000010)) in sclp_hsa_size_detect()
310 size = sclp_hsa_size_init(sccb); in sclp_hsa_size_detect()
313 size = sclp_hsa_copy_wait(sccb); in sclp_hsa_size_detect()
320 static unsigned int __init sclp_con_check_linemode(struct init_sccb *sccb) in sclp_con_check_linemode() argument
322 if (!(sccb->sclp_send_mask & EVTYP_OPCMD_MASK)) in sclp_con_check_linemode()
324 if (!(sccb->sclp_receive_mask & (EVTYP_MSG_MASK | EVTYP_PMSGCMD_MASK))) in sclp_con_check_linemode()
329 static void __init sclp_console_detect(struct init_sccb *sccb) in sclp_console_detect() argument
331 if (sccb->header.response_code != 0x20) in sclp_console_detect()
334 if (sccb->sclp_send_mask & EVTYP_VT220MSG_MASK) in sclp_console_detect()
337 if (sclp_con_check_linemode(sccb)) in sclp_console_detect()
343 void *sccb = &sccb_early; in sclp_early_detect() local
345 sclp_facilities_detect(sccb); in sclp_early_detect()
346 sclp_hsa_size_detect(sccb); in sclp_early_detect()
351 sclp_set_event_mask(sccb, 0, 0); in sclp_early_detect()
352 sclp_console_detect(sccb); in sclp_early_detect()