void msm_init_last_radio_log(struct module *owner) { struct proc_dir_entry *entry; if (last_radio_log_fops.owner) { pr_err("%s: already claimed\n", __func__); return; } radio_log_base = smem_item(SMEM_CLKREGIM_BSP, &radio_log_size); if (!radio_log_base) { pr_err("%s: could not retrieve SMEM_CLKREGIM_BSP\n", __func__); return; } entry = proc_create("last_radio_log", S_IRUGO, NULL, &last_radio_log_fops); if (!entry) { pr_err("%s: could not create proc entry for radio log\n", __func__); return; } pr_err("%s: last radio log is %d bytes long\n", __func__, radio_log_size); last_radio_log_fops.owner = owner; proc_set_size(entry, radio_log_size); }
static int debug_read_build_id(char *buf, int max) { unsigned size; void *data; data = smem_item(SMEM_HW_SW_BUILD_ID, &size); if (!data) return 0; if (size >= max) size = max; memcpy(buf, data, size); return size; }
static int remote_spinlock_dal_init(const char *chunk_name, _remote_spinlock_t *lock) { void *dal_smem_start, *dal_smem_end; uint32_t dal_smem_size; struct dal_chunk_header *cur_header; if (!chunk_name) return -EINVAL; #if defined(CONFIG_QCT_LTE) dal_smem_start = smem_get_entry(SMEM_DAL_AREA, &dal_smem_size); #else dal_smem_start = smem_item(SMEM_DAL_AREA, &dal_smem_size); #endif if (!dal_smem_start) return -ENXIO; dal_smem_end = dal_smem_start + dal_smem_size; /* Find first chunk header */ cur_header = (struct dal_chunk_header *) (((uint32_t)dal_smem_start + (4095)) & ~4095); *lock = NULL; while (cur_header->size != 0 && ((uint32_t)(cur_header + 1) < (uint32_t)dal_smem_end)) { /* Check if chunk name matches */ if (!strncmp(cur_header->name, chunk_name, DAL_CHUNK_NAME_LENGTH)) { *lock = (_remote_spinlock_t)&cur_header->lock; return 0; } cur_header = (void *)cur_header + cur_header->size; } pr_err("%s: DAL remote lock \"%s\" not found.\n", __func__, chunk_name); return -EINVAL; }