#ifndef __TRIGGER_H_ #define __TRIGGER_H_ 1 #include "util/debug.h" #include "asm/bug.h" /* * Use trigger to model operations which need to be executed when * an event (a signal, for example) is observed. * * States and transits: * * * OFF--(on)--> READY --(hit)--> HIT * ^ | * | (ready) * | | * \_____________/ * * is_hit and is_ready are two key functions to query the state of * a trigger. is_hit means the event already happen; is_ready means the * trigger is waiting for the event. */ struct trigger { volatile enum { TRIGGER_ERROR = -2, TRIGGER_OFF = -1, TRIGGER_READY = 0, TRIGGER_HIT = 1, } state; const char *name; }; #define TRIGGER_WARN_ONCE(t, exp) \ WARN_ONCE(t->state != exp, "trigger '%s' state transist error: %d in %s()\n", \ t->name, t->state, __func__) static inline bool trigger_is_available(struct trigger *t) { return t->state >= 0; } static inline bool trigger_is_error(struct trigger *t) { return t->state <= TRIGGER_ERROR; } static inline void trigger_on(struct trigger *t) { TRIGGER_WARN_ONCE(t, TRIGGER_OFF); t->state = TRIGGER_READY; } static inline void trigger_ready(struct trigger *t) { if (!trigger_is_available(t)) return; t->state = TRIGGER_READY; } static inline void trigger_hit(struct trigger *t) { if (!trigger_is_available(t)) return; TRIGGER_WARN_ONCE(t, TRIGGER_READY); t->state = TRIGGER_HIT; } static inline void trigger_off(struct trigger *t) { if (!trigger_is_available(t)) return; t->state = TRIGGER_OFF; } static inline void trigger_error(struct trigger *t) { t->state = TRIGGER_ERROR; } static inline bool trigger_is_ready(struct trigger *t) { return t->state == TRIGGER_READY; } static inline bool trigger_is_hit(struct trigger *t) { return t->state == TRIGGER_HIT; } #define DEFINE_TRIGGER(n) \ struct trigger n = {.state = TRIGGER_OFF, .name = #n} #endif linux/net-next.git/diff/arch/powerpc/include/asm/timex.h?h=nds-private-remove'>diff
path: root/arch/powerpc/include/asm/timex.h
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2016-10-20 15:44:19 +0200
committerTobias Klauser <tklauser@distanz.ch>2017-02-15 10:34:18 +0100
commit5db4992d8f040b8d8db0b86d42806e0c417f7ccf (patch)
tree5b06e952af482d45f3ade64e77824662e34b7fa2 /arch/powerpc/include/asm/timex.h
parent370ebb0ef6255132373ed35d13e7b1d8d2eb7003 (diff)
usbnet: pegasus: Use net_device_stats from struct net_devicends-private-remove
Instead of using a private copy of struct net_device_stats in struct pegasus, use stats from struct net_device. Also remove the now unnecessary .ndo_get_stats function. Cc: Petko Manolov <petkan@nucleusys.com> Cc: linux-usb@vger.kernel.org Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Diffstat (limited to 'arch/powerpc/include/asm/timex.h')