ipclite_test.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved.
  4. */
  5. #include "../ipclite_client.h"
  6. #include "../ipclite.h"
  7. /* General testing related configurations */
  8. #define IPCLITE_TEST_MAX_THREADS 5
  9. #define IPCLITE_TEST_HEADER 0xaa
  10. #define IPCLITE_TEST_ALL_CORES GENMASK(IPCMEM_NUM_HOSTS - 1, 0)
  11. /* Synx Usecase related definitions */
  12. #define NUM_HANDLES 4096
  13. #define BITMAP_SIZE (NUM_HANDLES/32)
  14. #define BITS(x) (sizeof(x)*8)
  15. struct handle_t {
  16. int handle_bitmap[BITMAP_SIZE];
  17. int handle_data[NUM_HANDLES];
  18. };
  19. /* Flags for Pass, Fail, Start, and Stop */
  20. #define IPCLITE_TEST_PASS 2
  21. #define IPCLITE_TEST_FAIL 1
  22. #define IPCLITE_TEST_START 2
  23. #define IPCLITE_TEST_STOP 1
  24. /* List of Cases Available for Testing */
  25. enum ipclite_test_type {
  26. PING = 1,
  27. NEGATIVE = 2,
  28. GLOBAL_ATOMIC = 3,
  29. DEBUG = 4,
  30. SSR = 5,
  31. HW_MUTEX = 6,
  32. };
  33. /* List of sysfs parameters */
  34. enum ipclite_test_param {
  35. TEST_CASE = 1,
  36. SENDER_LIST = 2,
  37. RECEIVER_LIST = 3,
  38. NUM_PINGS = 4,
  39. WAIT = 5,
  40. NUM_ITR = 6,
  41. NUM_THREADS = 7,
  42. ENABLED_CORES = 8,
  43. };
  44. /* List of subtests for HW Mutex Test */
  45. enum ipclite_test_hw_mutex_subtest {
  46. HW_MUTEX_RELEASE = 1,
  47. };
  48. /* List of messages for SSR Testing */
  49. enum ipclite_test_ssr_subtest {
  50. SSR_CRASHING = 1,
  51. SSR_WAKEUP = 2,
  52. };
  53. /* List of subtest for Global Atomics Testing */
  54. enum ipclite_test_global_atomics_subtest {
  55. GLOBAL_ATOMICS_INC = 1,
  56. GLOBAL_ATOMICS_DEC = 2,
  57. GLOBAL_ATOMICS_INC_DEC = 3,
  58. GLOBAL_ATOMICS_SET_CLR = 4,
  59. };
  60. /* Types of pings and replies to be sent and received */
  61. enum ipclite_test_ping {
  62. PING_SEND = 10,
  63. PING_REPLY = 11,
  64. };
  65. static char core_name[IPCMEM_NUM_HOSTS][13] = {
  66. "IPCMEM_APPS",
  67. "IPCMEM_MODEM",
  68. "IPCMEM_LPASS",
  69. "IPCMEM_SLPI",
  70. "IPCMEM_GPU",
  71. "IPCMEM_CDSP",
  72. "IPCMEM_CVP",
  73. "IPCMEM_CAM",
  74. "IPCMEM_VPU"
  75. };
  76. struct ipclite_test_params {
  77. int wait;
  78. int num_pings;
  79. int num_itr;
  80. int selected_senders;
  81. int selected_receivers;
  82. int selected_test_case;
  83. int enabled_cores;
  84. int num_thread;
  85. int num_senders;
  86. int num_receivers;
  87. };
  88. struct ipclite_test_data {
  89. int pings_sent[IPCMEM_NUM_HOSTS];
  90. int pings_received[IPCMEM_NUM_HOSTS];
  91. int client_id;
  92. struct global_region_info *global_memory;
  93. struct ipclite_test_params test_params;
  94. int ssr_client;
  95. };
  96. struct ipclite_thread_data {
  97. struct task_struct *thread;
  98. void *data;
  99. wait_queue_head_t wq;
  100. bool run;
  101. };
  102. static int ipclite_test_callback_fn(unsigned int client_id, long long msg, void *d);