/* * Based on intlist.c by: * (c) 2009 Arnaldo Carvalho de Melo * * Licensed under the GPLv2. */ #include #include #include #include "intlist.h" static struct rb_node *intlist__node_new(struct rblist *rblist __maybe_unused, const void *entry) { int i = (int)((long)entry); struct rb_node *rc = NULL; struct int_node *node = malloc(sizeof(*node)); if (node != NULL) { node->i = i; node->priv = NULL; rc = &node->rb_node; } return rc; } static void int_node__delete(struct int_node *ilist) { free(ilist); } static void intlist__node_delete(struct rblist *rblist __maybe_unused, struct rb_node *rb_node) { struct int_node *node = container_of(rb_node, struct int_node, rb_node); int_node__delete(node); } static int intlist__node_cmp(struct rb_node *rb_node, const void *entry) { int i = (int)((long)entry); struct int_node *node = container_of(rb_node, struct int_node, rb_node); return node->i - i; } int intlist__add(struct intlist *ilist, int i) { return rblist__add_node(&ilist->rblist, (void *)((long)i)); } void intlist__remove(struct intlist *ilist, struct int_node *node) { rblist__remove_node(&ilist->rblist, &node->rb_node); } static struct int_node *__intlist__findnew(struct intlist *ilist, int i, bool create) { struct int_node *node = NULL; struct rb_node *rb_node; if (ilist == NULL) return NULL; if (create) rb_node = rblist__findnew(&ilist->rblist, (void *)((long)i)); else rb_node = rblist__find(&ilist->rblist, (void *)((long)i)); if (rb_node) node = container_of(rb_node, struct int_node, rb_node); return node; } struct int_node *intlist__find(struct intlist *ilist, int i) { return __intlist__findnew(ilist, i, false); } struct int_node *intlist__findnew(struct intlist *ilist, int i) { return __intlist__findnew(ilist, i, true); } static int intlist__parse_list(struct intlist *ilist, const char *s) { char *sep; int err; do { long value = strtol(s, &sep, 10); err = -EINVAL; if (*sep != ',' && *sep != '\0') break; err = intlist__add(ilist, value); if (err) break; s = sep + 1; } while (*sep != '\0'); return err; } struct intlist *intlist__new(const char *slist) { struct intlist *ilist = malloc(sizeof(*ilist)); if (ilist != NULL) { rblist__init(&ilist->rblist); ilist->rblist.node_cmp = intlist__node_cmp; ilist->rblist.node_new = intlist__node_new; ilist->rblist.node_delete = intlist__node_delete; if (slist && intlist__parse_list(ilist, slist)) goto out_delete; } return ilist; out_delete: intlist__delete(ilist); return NULL; } void intlist__delete(struct intlist *ilist) { if (ilist != NULL) rblist__delete(&ilist->rblist); } struct int_node *intlist__entry(const struct intlist *ilist, unsigned int idx) { struct int_node *node = NULL; struct rb_node *rb_node; rb_node = rblist__entry(&ilist->rblist, idx); if (rb_node) node = container_of(rb_node, struct int_node, rb_node); return node; } e2'>root/include/drm/drm_encoder.h
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2017-01-30 22:05:52 -0500
committerDavid S. Miller <davem@davemloft.net>2017-01-30 22:05:52 -0500
commit1bae6c99decf9137069646b593d3439171a8a8e2 (patch)
tree431604a568cd2303973470de326bd9731370a025 /include/drm/drm_encoder.h
parent63c190429020a9701b42887ac22c28f287f1762f (diff)
parent2b2d3eb41c920b47df2fcedd1489cf748bd09466 (diff)
Merge branch 'sh_eth-E-DMAC-interrupt-mask-cleanups'
Sergei Shtylyov says: ==================== sh_eth: E-DMAC interrupt mask cleanups Here's a set of 3 patches against DaveM's 'net-next.git' repo. The main goal of this set is to stop using the bare numbers for the E-DMAC interrupt masks. [1/3] sh_eth: rename EESIPR bits [2/3] sh_eth: add missing EESIPR bits [3/3] sh_eth: stop using bare numbers for EESIPR values ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/drm/drm_encoder.h')