types.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * linux/include/linux/sunrpc/types.h
  3.  *
  4.  * Generic types and misc stuff for RPC.
  5.  *
  6.  * Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de>
  7.  */
  8. #ifndef _LINUX_SUNRPC_TYPES_H_
  9. #define _LINUX_SUNRPC_TYPES_H_
  10. #include <linux/timer.h>
  11. #include <linux/tqueue.h>
  12. #include <linux/sunrpc/debug.h>
  13. /*
  14.  * These are the RPC list manipulation primitives used everywhere.
  15.  */
  16. struct rpc_listitem {
  17. struct rpc_listitem * prev;
  18. struct rpc_listitem * next;
  19. };
  20. static __inline__ void
  21. __rpc_append_list(struct rpc_listitem **q, struct rpc_listitem *item)
  22. {
  23. struct rpc_listitem *next, *prev;
  24. if (!(next = *q)) {
  25. *q = item->next = item->prev = item;
  26. } else {
  27. prev = next->prev;
  28. prev->next = item;
  29. next->prev = item;
  30. item->next = next;
  31. item->prev = prev;
  32. }
  33. }
  34. static __inline__ void
  35. __rpc_insert_list(struct rpc_listitem **q, struct rpc_listitem *item)
  36. {
  37. __rpc_append_list(q, item);
  38. *q = item;
  39. }
  40. static __inline__ void
  41. __rpc_remove_list(struct rpc_listitem **q, struct rpc_listitem *item)
  42. {
  43. struct rpc_listitem *prev = item->prev,
  44. *next = item->next;
  45. if (item != prev) {
  46. next->prev = prev;
  47. prev->next = next;
  48. } else {
  49. next = NULL;
  50. }
  51. if (*q == item)
  52. *q = next;
  53. }
  54. #define rpc_insert_list(q, i) 
  55.       __rpc_insert_list((struct rpc_listitem **) q, (struct rpc_listitem *) i)
  56. #define rpc_append_list(q, i) 
  57.       __rpc_append_list((struct rpc_listitem **) q, (struct rpc_listitem *) i)
  58. #define rpc_remove_list(q, i) 
  59.       __rpc_remove_list((struct rpc_listitem **) q, (struct rpc_listitem *) i)
  60. /*
  61.  * Shorthands
  62.  */
  63. #define signalled() (signal_pending(current))
  64. #endif /* _LINUX_SUNRPC_TYPES_H_ */