1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef __QCOM_PDR_HELPER_INTERNAL__ 3 #define __QCOM_PDR_HELPER_INTERNAL__ 4 5 #include <linux/soc/qcom/pdr.h> 6 7 #define SERVREG_LOCATOR_SERVICE 0x40 8 #define SERVREG_NOTIFIER_SERVICE 0x42 9 10 #define SERVREG_REGISTER_LISTENER_REQ 0x20 11 #define SERVREG_GET_DOMAIN_LIST_REQ 0x21 12 #define SERVREG_STATE_UPDATED_IND_ID 0x22 13 #define SERVREG_SET_ACK_REQ 0x23 14 #define SERVREG_RESTART_PD_REQ 0x24 15 16 #define SERVREG_DOMAIN_LIST_LENGTH 32 17 #define SERVREG_RESTART_PD_REQ_MAX_LEN 67 18 #define SERVREG_REGISTER_LISTENER_REQ_LEN 71 19 #define SERVREG_SET_ACK_REQ_LEN 72 20 #define SERVREG_GET_DOMAIN_LIST_REQ_MAX_LEN 74 21 #define SERVREG_STATE_UPDATED_IND_MAX_LEN 79 22 #define SERVREG_GET_DOMAIN_LIST_RESP_MAX_LEN 2389 23 24 struct servreg_location_entry { 25 char name[SERVREG_NAME_LENGTH + 1]; 26 u8 service_data_valid; 27 u32 service_data; 28 u32 instance; 29 }; 30 31 static struct qmi_elem_info servreg_location_entry_ei[] = { 32 { 33 .data_type = QMI_STRING, 34 .elem_len = SERVREG_NAME_LENGTH + 1, 35 .elem_size = sizeof(char), 36 .array_type = NO_ARRAY, 37 .tlv_type = 0, 38 .offset = offsetof(struct servreg_location_entry, 39 name), 40 }, 41 { 42 .data_type = QMI_UNSIGNED_4_BYTE, 43 .elem_len = 1, 44 .elem_size = sizeof(u32), 45 .array_type = NO_ARRAY, 46 .tlv_type = 0, 47 .offset = offsetof(struct servreg_location_entry, 48 instance), 49 }, 50 { 51 .data_type = QMI_UNSIGNED_1_BYTE, 52 .elem_len = 1, 53 .elem_size = sizeof(u8), 54 .array_type = NO_ARRAY, 55 .tlv_type = 0, 56 .offset = offsetof(struct servreg_location_entry, 57 service_data_valid), 58 }, 59 { 60 .data_type = QMI_UNSIGNED_4_BYTE, 61 .elem_len = 1, 62 .elem_size = sizeof(u32), 63 .array_type = NO_ARRAY, 64 .tlv_type = 0, 65 .offset = offsetof(struct servreg_location_entry, 66 service_data), 67 }, 68 {} 69 }; 70 71 struct servreg_get_domain_list_req { 72 char service_name[SERVREG_NAME_LENGTH + 1]; 73 u8 domain_offset_valid; 74 u32 domain_offset; 75 }; 76 77 static struct qmi_elem_info servreg_get_domain_list_req_ei[] = { 78 { 79 .data_type = QMI_STRING, 80 .elem_len = SERVREG_NAME_LENGTH + 1, 81 .elem_size = sizeof(char), 82 .array_type = NO_ARRAY, 83 .tlv_type = 0x01, 84 .offset = offsetof(struct servreg_get_domain_list_req, 85 service_name), 86 }, 87 { 88 .data_type = QMI_OPT_FLAG, 89 .elem_len = 1, 90 .elem_size = sizeof(u8), 91 .array_type = NO_ARRAY, 92 .tlv_type = 0x10, 93 .offset = offsetof(struct servreg_get_domain_list_req, 94 domain_offset_valid), 95 }, 96 { 97 .data_type = QMI_UNSIGNED_4_BYTE, 98 .elem_len = 1, 99 .elem_size = sizeof(u32), 100 .array_type = NO_ARRAY, 101 .tlv_type = 0x10, 102 .offset = offsetof(struct servreg_get_domain_list_req, 103 domain_offset), 104 }, 105 {} 106 }; 107 108 struct servreg_get_domain_list_resp { 109 struct qmi_response_type_v01 resp; 110 u8 total_domains_valid; 111 u16 total_domains; 112 u8 db_rev_count_valid; 113 u16 db_rev_count; 114 u8 domain_list_valid; 115 u32 domain_list_len; 116 struct servreg_location_entry domain_list[SERVREG_DOMAIN_LIST_LENGTH]; 117 }; 118 119 static struct qmi_elem_info servreg_get_domain_list_resp_ei[] = { 120 { 121 .data_type = QMI_STRUCT, 122 .elem_len = 1, 123 .elem_size = sizeof(struct qmi_response_type_v01), 124 .array_type = NO_ARRAY, 125 .tlv_type = 0x02, 126 .offset = offsetof(struct servreg_get_domain_list_resp, 127 resp), 128 .ei_array = qmi_response_type_v01_ei, 129 }, 130 { 131 .data_type = QMI_OPT_FLAG, 132 .elem_len = 1, 133 .elem_size = sizeof(u8), 134 .array_type = NO_ARRAY, 135 .tlv_type = 0x10, 136 .offset = offsetof(struct servreg_get_domain_list_resp, 137 total_domains_valid), 138 }, 139 { 140 .data_type = QMI_UNSIGNED_2_BYTE, 141 .elem_len = 1, 142 .elem_size = sizeof(u16), 143 .array_type = NO_ARRAY, 144 .tlv_type = 0x10, 145 .offset = offsetof(struct servreg_get_domain_list_resp, 146 total_domains), 147 }, 148 { 149 .data_type = QMI_OPT_FLAG, 150 .elem_len = 1, 151 .elem_size = sizeof(u8), 152 .array_type = NO_ARRAY, 153 .tlv_type = 0x11, 154 .offset = offsetof(struct servreg_get_domain_list_resp, 155 db_rev_count_valid), 156 }, 157 { 158 .data_type = QMI_UNSIGNED_2_BYTE, 159 .elem_len = 1, 160 .elem_size = sizeof(u16), 161 .array_type = NO_ARRAY, 162 .tlv_type = 0x11, 163 .offset = offsetof(struct servreg_get_domain_list_resp, 164 db_rev_count), 165 }, 166 { 167 .data_type = QMI_OPT_FLAG, 168 .elem_len = 1, 169 .elem_size = sizeof(u8), 170 .array_type = NO_ARRAY, 171 .tlv_type = 0x12, 172 .offset = offsetof(struct servreg_get_domain_list_resp, 173 domain_list_valid), 174 }, 175 { 176 .data_type = QMI_DATA_LEN, 177 .elem_len = 1, 178 .elem_size = sizeof(u8), 179 .array_type = NO_ARRAY, 180 .tlv_type = 0x12, 181 .offset = offsetof(struct servreg_get_domain_list_resp, 182 domain_list_len), 183 }, 184 { 185 .data_type = QMI_STRUCT, 186 .elem_len = SERVREG_DOMAIN_LIST_LENGTH, 187 .elem_size = sizeof(struct servreg_location_entry), 188 .array_type = VAR_LEN_ARRAY, 189 .tlv_type = 0x12, 190 .offset = offsetof(struct servreg_get_domain_list_resp, 191 domain_list), 192 .ei_array = servreg_location_entry_ei, 193 }, 194 {} 195 }; 196 197 struct servreg_register_listener_req { 198 u8 enable; 199 char service_path[SERVREG_NAME_LENGTH + 1]; 200 }; 201 202 static struct qmi_elem_info servreg_register_listener_req_ei[] = { 203 { 204 .data_type = QMI_UNSIGNED_1_BYTE, 205 .elem_len = 1, 206 .elem_size = sizeof(u8), 207 .array_type = NO_ARRAY, 208 .tlv_type = 0x01, 209 .offset = offsetof(struct servreg_register_listener_req, 210 enable), 211 }, 212 { 213 .data_type = QMI_STRING, 214 .elem_len = SERVREG_NAME_LENGTH + 1, 215 .elem_size = sizeof(char), 216 .array_type = NO_ARRAY, 217 .tlv_type = 0x02, 218 .offset = offsetof(struct servreg_register_listener_req, 219 service_path), 220 }, 221 {} 222 }; 223 224 struct servreg_register_listener_resp { 225 struct qmi_response_type_v01 resp; 226 u8 curr_state_valid; 227 enum servreg_service_state curr_state; 228 }; 229 230 static struct qmi_elem_info servreg_register_listener_resp_ei[] = { 231 { 232 .data_type = QMI_STRUCT, 233 .elem_len = 1, 234 .elem_size = sizeof(struct qmi_response_type_v01), 235 .array_type = NO_ARRAY, 236 .tlv_type = 0x02, 237 .offset = offsetof(struct servreg_register_listener_resp, 238 resp), 239 .ei_array = qmi_response_type_v01_ei, 240 }, 241 { 242 .data_type = QMI_OPT_FLAG, 243 .elem_len = 1, 244 .elem_size = sizeof(u8), 245 .array_type = NO_ARRAY, 246 .tlv_type = 0x10, 247 .offset = offsetof(struct servreg_register_listener_resp, 248 curr_state_valid), 249 }, 250 { 251 .data_type = QMI_SIGNED_4_BYTE_ENUM, 252 .elem_len = 1, 253 .elem_size = sizeof(enum servreg_service_state), 254 .array_type = NO_ARRAY, 255 .tlv_type = 0x10, 256 .offset = offsetof(struct servreg_register_listener_resp, 257 curr_state), 258 }, 259 {} 260 }; 261 262 struct servreg_restart_pd_req { 263 char service_path[SERVREG_NAME_LENGTH + 1]; 264 }; 265 266 static struct qmi_elem_info servreg_restart_pd_req_ei[] = { 267 { 268 .data_type = QMI_STRING, 269 .elem_len = SERVREG_NAME_LENGTH + 1, 270 .elem_size = sizeof(char), 271 .array_type = NO_ARRAY, 272 .tlv_type = 0x01, 273 .offset = offsetof(struct servreg_restart_pd_req, 274 service_path), 275 }, 276 {} 277 }; 278 279 struct servreg_restart_pd_resp { 280 struct qmi_response_type_v01 resp; 281 }; 282 283 static struct qmi_elem_info servreg_restart_pd_resp_ei[] = { 284 { 285 .data_type = QMI_STRUCT, 286 .elem_len = 1, 287 .elem_size = sizeof(struct qmi_response_type_v01), 288 .array_type = NO_ARRAY, 289 .tlv_type = 0x02, 290 .offset = offsetof(struct servreg_restart_pd_resp, 291 resp), 292 .ei_array = qmi_response_type_v01_ei, 293 }, 294 {} 295 }; 296 297 struct servreg_state_updated_ind { 298 enum servreg_service_state curr_state; 299 char service_path[SERVREG_NAME_LENGTH + 1]; 300 u16 transaction_id; 301 }; 302 303 static struct qmi_elem_info servreg_state_updated_ind_ei[] = { 304 { 305 .data_type = QMI_SIGNED_4_BYTE_ENUM, 306 .elem_len = 1, 307 .elem_size = sizeof(u32), 308 .array_type = NO_ARRAY, 309 .tlv_type = 0x01, 310 .offset = offsetof(struct servreg_state_updated_ind, 311 curr_state), 312 }, 313 { 314 .data_type = QMI_STRING, 315 .elem_len = SERVREG_NAME_LENGTH + 1, 316 .elem_size = sizeof(char), 317 .array_type = NO_ARRAY, 318 .tlv_type = 0x02, 319 .offset = offsetof(struct servreg_state_updated_ind, 320 service_path), 321 }, 322 { 323 .data_type = QMI_UNSIGNED_2_BYTE, 324 .elem_len = 1, 325 .elem_size = sizeof(u16), 326 .array_type = NO_ARRAY, 327 .tlv_type = 0x03, 328 .offset = offsetof(struct servreg_state_updated_ind, 329 transaction_id), 330 }, 331 {} 332 }; 333 334 struct servreg_set_ack_req { 335 char service_path[SERVREG_NAME_LENGTH + 1]; 336 u16 transaction_id; 337 }; 338 339 static struct qmi_elem_info servreg_set_ack_req_ei[] = { 340 { 341 .data_type = QMI_STRING, 342 .elem_len = SERVREG_NAME_LENGTH + 1, 343 .elem_size = sizeof(char), 344 .array_type = NO_ARRAY, 345 .tlv_type = 0x01, 346 .offset = offsetof(struct servreg_set_ack_req, 347 service_path), 348 }, 349 { 350 .data_type = QMI_UNSIGNED_2_BYTE, 351 .elem_len = 1, 352 .elem_size = sizeof(u16), 353 .array_type = NO_ARRAY, 354 .tlv_type = 0x02, 355 .offset = offsetof(struct servreg_set_ack_req, 356 transaction_id), 357 }, 358 {} 359 }; 360 361 struct servreg_set_ack_resp { 362 struct qmi_response_type_v01 resp; 363 }; 364 365 static struct qmi_elem_info servreg_set_ack_resp_ei[] = { 366 { 367 .data_type = QMI_STRUCT, 368 .elem_len = 1, 369 .elem_size = sizeof(struct qmi_response_type_v01), 370 .array_type = NO_ARRAY, 371 .tlv_type = 0x02, 372 .offset = offsetof(struct servreg_set_ack_resp, 373 resp), 374 .ei_array = qmi_response_type_v01_ei, 375 }, 376 {} 377 }; 378 379 #endif 380