18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: Zlib 28c2ecf20Sopenharmony_ci/* dfltcc.c - SystemZ DEFLATE CONVERSION CALL support. */ 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci#include <linux/export.h> 58c2ecf20Sopenharmony_ci#include <linux/module.h> 68c2ecf20Sopenharmony_ci#include "dfltcc_util.h" 78c2ecf20Sopenharmony_ci#include "dfltcc.h" 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_cichar *oesc_msg( 108c2ecf20Sopenharmony_ci char *buf, 118c2ecf20Sopenharmony_ci int oesc 128c2ecf20Sopenharmony_ci) 138c2ecf20Sopenharmony_ci{ 148c2ecf20Sopenharmony_ci if (oesc == 0x00) 158c2ecf20Sopenharmony_ci return NULL; /* Successful completion */ 168c2ecf20Sopenharmony_ci else { 178c2ecf20Sopenharmony_ci#ifdef STATIC 188c2ecf20Sopenharmony_ci return NULL; /* Ignore for pre-boot decompressor */ 198c2ecf20Sopenharmony_ci#else 208c2ecf20Sopenharmony_ci sprintf(buf, "Operation-Ending-Supplemental Code is 0x%.2X", oesc); 218c2ecf20Sopenharmony_ci return buf; 228c2ecf20Sopenharmony_ci#endif 238c2ecf20Sopenharmony_ci } 248c2ecf20Sopenharmony_ci} 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_civoid dfltcc_reset( 278c2ecf20Sopenharmony_ci z_streamp strm, 288c2ecf20Sopenharmony_ci uInt size 298c2ecf20Sopenharmony_ci) 308c2ecf20Sopenharmony_ci{ 318c2ecf20Sopenharmony_ci struct dfltcc_state *dfltcc_state = 328c2ecf20Sopenharmony_ci (struct dfltcc_state *)((char *)strm->state + size); 338c2ecf20Sopenharmony_ci struct dfltcc_qaf_param *param = 348c2ecf20Sopenharmony_ci (struct dfltcc_qaf_param *)&dfltcc_state->param; 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci /* Initialize available functions */ 378c2ecf20Sopenharmony_ci if (is_dfltcc_enabled()) { 388c2ecf20Sopenharmony_ci dfltcc(DFLTCC_QAF, param, NULL, NULL, NULL, NULL, NULL); 398c2ecf20Sopenharmony_ci memmove(&dfltcc_state->af, param, sizeof(dfltcc_state->af)); 408c2ecf20Sopenharmony_ci } else 418c2ecf20Sopenharmony_ci memset(&dfltcc_state->af, 0, sizeof(dfltcc_state->af)); 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci /* Initialize parameter block */ 448c2ecf20Sopenharmony_ci memset(&dfltcc_state->param, 0, sizeof(dfltcc_state->param)); 458c2ecf20Sopenharmony_ci dfltcc_state->param.nt = 1; 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci /* Initialize tuning parameters */ 488c2ecf20Sopenharmony_ci if (zlib_dfltcc_support == ZLIB_DFLTCC_FULL_DEBUG) 498c2ecf20Sopenharmony_ci dfltcc_state->level_mask = DFLTCC_LEVEL_MASK_DEBUG; 508c2ecf20Sopenharmony_ci else 518c2ecf20Sopenharmony_ci dfltcc_state->level_mask = DFLTCC_LEVEL_MASK; 528c2ecf20Sopenharmony_ci dfltcc_state->block_size = DFLTCC_BLOCK_SIZE; 538c2ecf20Sopenharmony_ci dfltcc_state->block_threshold = DFLTCC_FIRST_FHT_BLOCK_SIZE; 548c2ecf20Sopenharmony_ci dfltcc_state->dht_threshold = DFLTCC_DHT_MIN_SAMPLE_SIZE; 558c2ecf20Sopenharmony_ci dfltcc_state->param.ribm = DFLTCC_RIBM; 568c2ecf20Sopenharmony_ci} 578c2ecf20Sopenharmony_ciEXPORT_SYMBOL(dfltcc_reset); 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL"); 60