Lines Matching defs:tplg
23 static ssize_t twrite(snd_tplg_t *tplg, void *data, size_t data_size)
25 if (tplg->bin_pos + data_size > tplg->bin_size)
27 memcpy(tplg->bin + tplg->bin_pos, data, data_size);
28 tplg->bin_pos += data_size;
33 static ssize_t write_block_header(snd_tplg_t *tplg, unsigned int type,
52 if (tplg->bin_pos != tplg->next_hdr_pos) {
55 tplg->next_hdr_pos, tplg->bin_pos,
56 tplg->bin_pos > tplg->next_hdr_pos ? "ahead" : "behind",
57 tplg->bin_pos - tplg->next_hdr_pos);
61 tplg_log(tplg, 'B', tplg->bin_pos,
67 tplg->next_hdr_pos += hdr.payload_size + sizeof(hdr);
69 return twrite(tplg, &hdr, sizeof(hdr));
72 static int write_elem_block(snd_tplg_t *tplg,
95 ret = write_block_header(tplg, tplg_type, elem->vendor_type,
96 tplg->version, elem->index, block_size, count);
111 tplg_log(tplg, 'B', tplg->bin_pos,
115 tplg_log(tplg, 'B', tplg->bin_pos,
121 wsize = twrite(tplg, elem->obj, elem->size);
148 static size_t calc_manifest_size(snd_tplg_t *tplg)
151 sizeof(tplg->manifest) +
152 tplg->manifest.priv.size;
204 static ssize_t write_manifest_data(snd_tplg_t *tplg)
209 ret = write_block_header(tplg, SND_SOC_TPLG_TYPE_MANIFEST, 0,
210 tplg->version, 0,
211 sizeof(tplg->manifest) + tplg->manifest.priv.size, 1);
217 tplg_log(tplg, 'B', tplg->bin_pos, "manifest: write %d bytes",
218 sizeof(tplg->manifest));
219 ret = twrite(tplg, &tplg->manifest, sizeof(tplg->manifest));
221 tplg_log(tplg, 'B', tplg->bin_pos,
223 tplg->manifest.priv.size);
224 ret = twrite(tplg, tplg->manifest_pdata, tplg->manifest.priv.size);
229 int tplg_write_data(snd_tplg_t *tplg)
238 total_size = calc_manifest_size(tplg);
243 list = (struct list_head *)((void *)tplg + tptr->loff);
249 free(tplg->bin);
250 tplg->bin = malloc(total_size);
251 tplg->bin_pos = 0;
252 tplg->bin_size = total_size;
253 if (tplg->bin == NULL) {
254 tplg->bin_size = 0;
259 ret = write_manifest_data(tplg);
270 list = (struct list_head *)((void *)tplg + tptr->loff);
275 tplg_log(tplg, 'B', tplg->bin_pos,
279 ret = write_elem_block(tplg, list, size,
288 tplg_log(tplg, 'B', tplg->bin_pos, "total size is 0x%zx/%zd",
289 tplg->bin_pos, tplg->bin_pos);
291 if (total_size != tplg->bin_pos) {
293 total_size, tplg->bin_pos);