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