This adds nosy-dump, the userspace part of nosy, the IEEE 1394 traffic sniffer for Texas Instruments PCILynx/ PCILynx2 based cards. Author is Kristian Høgsberg. The files added here are taken from git://anongit.freedesktop.org/~krh/nosy commit ee29be97 (2009-11-10) with the following changes by Stefan Richter: - Parts pertaining to the kernel module removed from Makefile. - dist target removed from the Makefile. - Mentioned nosy-dump in the Kconfig help to nosy's kernel component. - Add copyright notice to nosy-dump.c. This is a duplicate of the respective notice in the kernel component nosy.c except for a time span of 2002 - 2006, according to Kristian's git log. "git shortlog decode-fcp.c list.h nosy-dump.[ch]" from nosy's git repository: Jonathan Woithe (1): Save logs on Ctrl-C Kristian Høgsberg (11): Pull over nosy from mercurial repo. Remove some fields from default view, add logging feature. Use infinite time out for poll(), mark more detail fields. Fix byte ordering macro. Add decoding of iso data and lock packets. Add flag to indicate data length field. Add cycle start packet decoding, add --iso and --cycle-start flags. Distinguish between phy-packets and 0-length iso data. Fix transaction and stats view. Add simple AV/C decoder. Don't break down on big payloads. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> Acked-by: Kristian Høgsberg <krh@bitplanet.net>
63 lines
1.3 KiB
C
63 lines
1.3 KiB
C
struct list {
|
|
struct list *next, *prev;
|
|
};
|
|
|
|
static inline void
|
|
list_init(struct list *list)
|
|
{
|
|
list->next = list;
|
|
list->prev = list;
|
|
}
|
|
|
|
static inline int
|
|
list_empty(struct list *list)
|
|
{
|
|
return list->next == list;
|
|
}
|
|
|
|
static inline void
|
|
list_insert(struct list *link, struct list *new_link)
|
|
{
|
|
new_link->prev = link->prev;
|
|
new_link->next = link;
|
|
new_link->prev->next = new_link;
|
|
new_link->next->prev = new_link;
|
|
}
|
|
|
|
static inline void
|
|
list_append(struct list *list, struct list *new_link)
|
|
{
|
|
list_insert((struct list *)list, new_link);
|
|
}
|
|
|
|
static inline void
|
|
list_prepend(struct list *list, struct list *new_link)
|
|
{
|
|
list_insert(list->next, new_link);
|
|
}
|
|
|
|
static inline void
|
|
list_remove(struct list *link)
|
|
{
|
|
link->prev->next = link->next;
|
|
link->next->prev = link->prev;
|
|
}
|
|
|
|
#define list_entry(link, type, member) \
|
|
((type *)((char *)(link)-(unsigned long)(&((type *)0)->member)))
|
|
|
|
#define list_head(list, type, member) \
|
|
list_entry((list)->next, type, member)
|
|
|
|
#define list_tail(list, type, member) \
|
|
list_entry((list)->prev, type, member)
|
|
|
|
#define list_next(elm, member) \
|
|
list_entry((elm)->member.next, typeof(*elm), member)
|
|
|
|
#define list_for_each_entry(pos, list, member) \
|
|
for (pos = list_head(list, typeof(*pos), member); \
|
|
&pos->member != (list); \
|
|
pos = list_next(pos, member))
|
|
|