• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/drivers/ieee1394/

Lines Matching defs:kv

89 static void free_keyval(struct csr1212_keyval *kv)
91 if ((kv->key.type == CSR1212_KV_TYPE_LEAF) &&
92 (kv->key.id != CSR1212_KV_ID_EXTENDED_ROM))
93 CSR1212_FREE(kv->value.leaf.data);
95 CSR1212_FREE(kv);
138 csr1212_find_keyval(struct csr1212_keyval *dir, struct csr1212_keyval *kv)
144 if (pos->kv == kv)
152 struct csr1212_keyval *kv;
154 for (kv = kv_list->next; kv && (kv != kv_list); kv = kv->next)
155 if (kv->offset == offset)
156 return kv;
212 struct csr1212_keyval *kv;
217 kv = CSR1212_MALLOC(sizeof(*kv));
218 if (!kv)
221 kv->key.type = type;
222 kv->key.id = key;
224 kv->associate = NULL;
225 kv->refcnt = 1;
227 kv->next = NULL;
228 kv->prev = NULL;
229 kv->offset = 0;
230 kv->valid = 0;
231 return kv;
236 struct csr1212_keyval *kv;
238 kv = csr1212_new_keyval(CSR1212_KV_TYPE_IMMEDIATE, key);
239 if (!kv)
242 kv->value.immediate = value;
243 kv->valid = 1;
244 return kv;
250 struct csr1212_keyval *kv;
252 kv = csr1212_new_keyval(CSR1212_KV_TYPE_LEAF, key);
253 if (!kv)
257 kv->value.leaf.data = CSR1212_MALLOC(data_len);
258 if (!kv->value.leaf.data) {
259 CSR1212_FREE(kv);
264 memcpy(kv->value.leaf.data, data, data_len);
266 kv->value.leaf.data = NULL;
269 kv->value.leaf.len = bytes_to_quads(data_len);
270 kv->offset = 0;
271 kv->valid = 1;
273 return kv;
279 struct csr1212_keyval *kv;
281 kv = csr1212_new_keyval(CSR1212_KV_TYPE_CSR_OFFSET, key);
282 if (!kv)
285 kv->value.csr_offset = csr_offset;
287 kv->offset = 0;
288 kv->valid = 1;
289 return kv;
294 struct csr1212_keyval *kv;
296 kv = csr1212_new_keyval(CSR1212_KV_TYPE_DIRECTORY, key);
297 if (!kv)
300 kv->value.directory.len = 0;
301 kv->offset = 0;
302 kv->value.directory.dentries_head = NULL;
303 kv->value.directory.dentries_tail = NULL;
304 kv->valid = 1;
305 return kv;
308 void csr1212_associate_keyval(struct csr1212_keyval *kv,
311 BUG_ON(!kv || !associate || kv->key.id == CSR1212_KV_ID_DESCRIPTOR ||
317 (kv->key.id == CSR1212_KV_ID_EXTENDED_KEY_SPECIFIER_ID &&
319 (kv->key.id == CSR1212_KV_ID_EXTENDED_KEY &&
322 kv->key.id != CSR1212_KV_ID_EXTENDED_KEY_SPECIFIER_ID) ||
324 kv->key.id != CSR1212_KV_ID_EXTENDED_KEY));
326 if (kv->associate)
327 csr1212_release_keyval(kv->associate);
330 kv->associate = associate;
334 struct csr1212_keyval *kv)
338 BUG_ON(!kv || !dir || dir->key.type != CSR1212_KV_TYPE_DIRECTORY);
344 dentry->kv = kv;
346 kv->refcnt++;
361 #define CSR1212_DESCRIPTOR_LEAF_DATA(kv) \
362 (&((kv)->value.leaf.data[1]))
364 #define CSR1212_DESCRIPTOR_LEAF_SET_TYPE(kv, type) \
365 ((kv)->value.leaf.data[0] = \
366 cpu_to_be32(CSR1212_DESCRIPTOR_LEAF_SPECIFIER_ID(kv) | \
368 #define CSR1212_DESCRIPTOR_LEAF_SET_SPECIFIER_ID(kv, spec_id) \
369 ((kv)->value.leaf.data[0] = \
370 cpu_to_be32((CSR1212_DESCRIPTOR_LEAF_TYPE(kv) << \
378 struct csr1212_keyval *kv;
380 kv = csr1212_new_leaf(CSR1212_KV_ID_DESCRIPTOR, NULL,
382 if (!kv)
385 CSR1212_DESCRIPTOR_LEAF_SET_TYPE(kv, dtype);
386 CSR1212_DESCRIPTOR_LEAF_SET_SPECIFIER_ID(kv, specifier_id);
389 memcpy(CSR1212_DESCRIPTOR_LEAF_DATA(kv), data, data_len);
391 return kv;
432 struct csr1212_keyval *kv;
441 kv = csr1212_new_descriptor_leaf(0, 0, NULL, quads_to_bytes(quads) +
443 if (!kv)
446 kv->value.leaf.data[1] = 0; /* width, character_set, language */
447 text = CSR1212_TEXTUAL_DESCRIPTOR_LEAF_DATA(kv);
451 return kv;
458 struct csr1212_keyval *kv)
462 if (!kv || !dir || dir->key.type != CSR1212_KV_TYPE_DIRECTORY)
465 dentry = csr1212_find_keyval(dir, kv);
481 csr1212_release_keyval(kv);
489 static void csr1212_destroy_keyval(struct csr1212_keyval *kv)
495 dentry.kv = kv;
503 k = head->kv;
539 void csr1212_release_keyval(struct csr1212_keyval *kv)
541 if (kv->refcnt > 1)
542 kv->refcnt--;
544 csr1212_destroy_keyval(kv);
661 for (dkv = dentry->kv; dkv; dkv = dkv->associate) {
721 static size_t csr1212_generate_layout_order(struct csr1212_keyval *kv)
723 struct csr1212_keyval *ltail = kv;
726 while (kv) {
727 switch (kv->key.type) {
730 agg_size += kv->value.leaf.len + 1;
734 kv->value.directory.len =
735 csr1212_generate_layout_subdir(kv, &ltail);
737 agg_size += kv->value.directory.len + 1;
740 kv = kv->next;
749 struct csr1212_keyval *kv = start_kv;
754 cache->layout_head = kv;
756 while (kv && pos < cache->size) {
758 if (kv->key.id != CSR1212_KV_ID_EXTENDED_ROM)
759 kv->offset = cache->offset + pos;
761 switch (kv->key.type) {
763 kv_len = kv->value.leaf.len;
767 kv_len = kv->value.directory.len;
779 okv = kv;
781 kv = kv->next;
788 return kv;
809 for (a = dentry->kv; a; a = a->associate) {
878 struct csr1212_keyval *kv, *nkv;
881 for (kv = cache->layout_head;
882 kv != cache->layout_tail->next;
883 kv = nkv) {
885 bytes_to_quads(kv->offset - cache->offset));
886 switch (kv->key.type) {
897 if (kv->key.id != CSR1212_KV_ID_EXTENDED_ROM)
898 memcpy(kvi->data, kv->value.leaf.data,
899 quads_to_bytes(kv->value.leaf.len));
901 kvi->length = cpu_to_be16(kv->value.leaf.len);
902 kvi->crc = csr1212_crc16(kvi->data, kv->value.leaf.len);
906 csr1212_generate_tree_subdir(kv, kvi->data);
908 kvi->length = cpu_to_be16(kv->value.directory.len);
910 kv->value.directory.len);
914 nkv = kv->next;
915 if (kv->prev)
916 kv->prev->next = NULL;
917 if (kv->next)
918 kv->next->prev = NULL;
919 kv->prev = NULL;
920 kv->next = NULL;
932 struct csr1212_keyval *kv;
954 for (kv = csr->root_kv, cache = csr->cache_head;
955 kv;
974 kv = csr->root_kv;
978 kv = csr1212_generate_positions(cache, kv, init_offset);
1193 int csr1212_parse_keyval(struct csr1212_keyval *kv,
1202 &cache->data[bytes_to_quads(kv->offset - cache->offset)];
1211 switch (kv->key.type) {
1221 ret = csr1212_parse_dir_entry(kv, ki,
1222 kv->offset + quads_to_bytes(i + 1));
1224 kv->value.directory.len = kvi_len;
1228 if (kv->key.id != CSR1212_KV_ID_EXTENDED_ROM) {
1231 kv->value.leaf.data = CSR1212_MALLOC(size);
1232 if (!kv->value.leaf.data) {
1237 kv->value.leaf.len = kvi_len;
1238 memcpy(kv->value.leaf.data, kvi->data, size);
1243 kv->valid = 1;
1249 csr1212_read_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv)
1259 BUG_ON(!csr || !kv || csr->max_rom < 1);
1264 if (kv->offset >= cache->offset &&
1265 kv->offset < (cache->offset + cache->size))
1272 if (kv->key.id != CSR1212_KV_ID_EXTENDED_ROM)
1276 CSR1212_REGISTER_SPACE_BASE + kv->offset,
1280 kv->value.leaf.len = be32_to_cpu(q) >> 16;
1282 cache_size = (quads_to_bytes(kv->value.leaf.len + 1) +
1285 cache = csr1212_rom_cache_malloc(kv->offset, cache_size);
1289 kv->value.leaf.data = &cache->data[1];
1308 return csr1212_parse_keyval(kv, cache);
1311 cache_index = kv->offset - cache->offset;
1381 if ((kv_len + (kv->offset - cache->offset)) > cache->size) {
1405 return csr1212_parse_keyval(kv, cache);
1409 csr1212_get_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv)
1411 if (!kv)
1413 if (!kv->valid)
1414 if (csr1212_read_keyval(csr, kv) != CSR1212_SUCCESS)
1416 return kv;
1458 if (dentry->kv->key.id == CSR1212_KV_ID_EXTENDED_ROM &&
1459 !dentry->kv->valid) {
1460 ret = csr1212_read_keyval(csr, dentry->kv);