Lines Matching refs:sccb

57 static int __init sclp_cmd_sync_early(sclp_cmdw_t cmd, void *sccb)  in sclp_cmd_sync_early()  argument
62 rc = sclp_service_call(cmd, sccb); in sclp_cmd_sync_early()
75 static int __init sclp_read_info_early(struct read_info_sccb *sccb) in sclp_read_info_early() argument
83 memset(sccb, 0, sizeof(*sccb)); in sclp_read_info_early()
84 sccb->header.length = sizeof(*sccb); in sclp_read_info_early()
85 sccb->header.function_code = 0x80; in sclp_read_info_early()
86 sccb->header.control_mask[2] = 0x80; in sclp_read_info_early()
87 rc = sclp_cmd_sync_early(commands[i], sccb); in sclp_read_info_early()
92 if (sccb->header.response_code == 0x10) in sclp_read_info_early()
94 if (sccb->header.response_code != 0x1f0) in sclp_read_info_early()
100 static void __init sclp_facilities_detect(struct read_info_sccb *sccb) in sclp_facilities_detect() argument
105 if (sclp_read_info_early(sccb)) in sclp_facilities_detect()
108 sclp.facilities = sccb->facilities; in sclp_facilities_detect()
109 sclp.has_sprp = !!(sccb->fac84 & 0x02); in sclp_facilities_detect()
110 sclp.has_core_type = !!(sccb->fac84 & 0x01); in sclp_facilities_detect()
111 if (sccb->fac85 & 0x02) in sclp_facilities_detect()
113 sclp.rnmax = sccb->rnmax ? sccb->rnmax : sccb->rnmax2; in sclp_facilities_detect()
114 sclp.rzm = sccb->rnsize ? sccb->rnsize : sccb->rnsize2; in sclp_facilities_detect()
116 sclp.ibc = sccb->ibc; in sclp_facilities_detect()
118 if (!sccb->hcpua) { in sclp_facilities_detect()
122 sclp.max_cores = sccb->ncpurl; in sclp_facilities_detect()
124 sclp.max_cores = sccb->hcpua + 1; in sclp_facilities_detect()
128 cpue = (void *)sccb + sccb->cpuoff; in sclp_facilities_detect()
129 for (cpu = 0; cpu < sccb->ncpurl; cpue++, cpu++) { in sclp_facilities_detect()
139 if (sccb->flags & 0x2) in sclp_facilities_detect()
141 memcpy(&sclp_ipl_info.loadparm, &sccb->loadparm, LOADPARM_LEN); in sclp_facilities_detect()
143 sclp.mtid = (sccb->fac42 & 0x80) ? (sccb->fac42 & 31) : 0; in sclp_facilities_detect()
144 sclp.mtid_cp = (sccb->fac42 & 0x80) ? (sccb->fac43 & 31) : 0; in sclp_facilities_detect()
145 sclp.mtid_prev = (sccb->fac42 & 0x80) ? (sccb->fac66 & 31) : 0; in sclp_facilities_detect()
158 static int __init sclp_cmd_early(sclp_cmdw_t cmd, void *sccb) in sclp_cmd_early() argument
163 rc = sclp_cmd_sync_early(cmd, sccb); in sclp_cmd_early()
168 if (((struct sccb_header *) sccb)->response_code != 0x0020) in sclp_cmd_early()
173 static void __init sccb_init_eq_size(struct sdias_sccb *sccb) in sccb_init_eq_size() argument
175 memset(sccb, 0, sizeof(*sccb)); in sccb_init_eq_size()
177 sccb->hdr.length = sizeof(*sccb); in sccb_init_eq_size()
178 sccb->evbuf.hdr.length = sizeof(struct sdias_evbuf); in sccb_init_eq_size()
179 sccb->evbuf.hdr.type = EVTYP_SDIAS; in sccb_init_eq_size()
180 sccb->evbuf.event_qual = SDIAS_EQ_SIZE; in sccb_init_eq_size()
181 sccb->evbuf.data_id = SDIAS_DI_FCP_DUMP; in sccb_init_eq_size()
182 sccb->evbuf.event_id = 4712; in sccb_init_eq_size()
183 sccb->evbuf.dbs = 1; in sccb_init_eq_size()
186 static int __init sclp_set_event_mask(struct init_sccb *sccb, in sclp_set_event_mask() argument
190 memset(sccb, 0, sizeof(*sccb)); in sclp_set_event_mask()
191 sccb->header.length = sizeof(*sccb); in sclp_set_event_mask()
192 sccb->mask_length = sizeof(sccb_mask_t); in sclp_set_event_mask()
193 sccb->receive_mask = receive_mask; in sclp_set_event_mask()
194 sccb->send_mask = send_mask; in sclp_set_event_mask()
195 return sclp_cmd_early(SCLP_CMDW_WRITE_EVENT_MASK, sccb); in sclp_set_event_mask()
198 static long __init sclp_hsa_size_init(struct sdias_sccb *sccb) in sclp_hsa_size_init() argument
200 sccb_init_eq_size(sccb); in sclp_hsa_size_init()
201 if (sclp_cmd_early(SCLP_CMDW_WRITE_EVENT_DATA, sccb)) in sclp_hsa_size_init()
203 if (sccb->evbuf.blk_cnt == 0) in sclp_hsa_size_init()
205 return (sccb->evbuf.blk_cnt - 1) * PAGE_SIZE; in sclp_hsa_size_init()
208 static long __init sclp_hsa_copy_wait(struct sccb_header *sccb) in sclp_hsa_copy_wait() argument
210 memset(sccb, 0, PAGE_SIZE); in sclp_hsa_copy_wait()
211 sccb->length = PAGE_SIZE; in sclp_hsa_copy_wait()
212 if (sclp_cmd_early(SCLP_CMDW_READ_EVENT_DATA, sccb)) in sclp_hsa_copy_wait()
214 if (((struct sdias_sccb *) sccb)->evbuf.blk_cnt == 0) in sclp_hsa_copy_wait()
216 return (((struct sdias_sccb *) sccb)->evbuf.blk_cnt - 1) * PAGE_SIZE; in sclp_hsa_copy_wait()
219 static void __init sclp_hsa_size_detect(void *sccb) in sclp_hsa_size_detect() argument
224 if (sclp_set_event_mask(sccb, 0, 0x40000010)) in sclp_hsa_size_detect()
226 size = sclp_hsa_size_init(sccb); in sclp_hsa_size_detect()
232 if (sclp_set_event_mask(sccb, 0x00000010, 0x40000010)) in sclp_hsa_size_detect()
234 size = sclp_hsa_size_init(sccb); in sclp_hsa_size_detect()
237 size = sclp_hsa_copy_wait(sccb); in sclp_hsa_size_detect()
244 static unsigned int __init sclp_con_check_linemode(struct init_sccb *sccb) in sclp_con_check_linemode() argument
246 if (!(sccb->sclp_send_mask & EVTYP_OPCMD_MASK)) in sclp_con_check_linemode()
248 if (!(sccb->sclp_receive_mask & (EVTYP_MSG_MASK | EVTYP_PMSGCMD_MASK))) in sclp_con_check_linemode()
253 static void __init sclp_console_detect(struct init_sccb *sccb) in sclp_console_detect() argument
255 if (sccb->header.response_code != 0x20) in sclp_console_detect()
258 if (sccb->sclp_send_mask & EVTYP_VT220MSG_MASK) in sclp_console_detect()
261 if (sclp_con_check_linemode(sccb)) in sclp_console_detect()
267 void *sccb = &sccb_early; in sclp_early_detect() local
269 sclp_facilities_detect(sccb); in sclp_early_detect()
270 sclp_hsa_size_detect(sccb); in sclp_early_detect()
275 sclp_set_event_mask(sccb, 0, 0); in sclp_early_detect()
276 sclp_console_detect(sccb); in sclp_early_detect()