int diag_socket_init_peripheral(uint8_t peripheral) { struct diag_socket_info *info = NULL; if (peripheral >= NUM_PERIPHERALS) return -EINVAL; info = &socket_data[peripheral]; diagfwd_register(TRANSPORT_SOCKET, info->peripheral, info->type, (void *)info, &socket_ops, &info->fwd_ctxt); info = &socket_dci[peripheral]; diagfwd_register(TRANSPORT_SOCKET, info->peripheral, info->type, (void *)info, &socket_ops, &info->fwd_ctxt); return 0; }
static int cntl_socket_process_msg_server(uint32_t cmd, uint32_t svc_id, uint32_t ins_id) { uint8_t peripheral; uint8_t found = 0; struct diag_socket_info *info = NULL; for (peripheral = 0; peripheral < NUM_PERIPHERALS; peripheral++) { info = &socket_cmd[peripheral]; if ((svc_id == info->svc_id) && (ins_id == info->ins_id)) { found = 1; break; } info = &socket_dci_cmd[peripheral]; if ((svc_id == info->svc_id) && (ins_id == info->ins_id)) { found = 1; break; } } if (!found) return -EIO; switch (cmd) { case CNTL_CMD_NEW_SERVER: DIAG_LOG(DIAG_DEBUG_PERIPHERALS, "%s received new server\n", info->name); diagfwd_register(TRANSPORT_SOCKET, info->peripheral, info->type, (void *)info, &socket_ops, &info->fwd_ctxt); queue_work(info->wq, &(info->init_work)); break; case CNTL_CMD_REMOVE_SERVER: DIAG_LOG(DIAG_DEBUG_PERIPHERALS, "%s received remove server\n", info->name); socket_close_channel(info); break; default: return -EINVAL; } return 0; }
static void smd_late_init(struct diag_smd_info *smd_info) { struct diagfwd_info *fwd_info = NULL; if (!smd_info) return; DIAG_LOG(DIAG_DEBUG_PERIPHERALS, "%s entering\n", smd_info->name); diagfwd_register(TRANSPORT_SMD, smd_info->peripheral, smd_info->type, (void *)smd_info, &smd_ops, &smd_info->fwd_ctxt); fwd_info = smd_info->fwd_ctxt; smd_info->inited = 1; if (atomic_read(&smd_info->opened)) diagfwd_channel_open(smd_info->fwd_ctxt); DIAG_LOG(DIAG_DEBUG_PERIPHERALS, "%s exiting\n", smd_info->name); }
static void smd_late_init(struct diag_smd_info *smd_info) { struct diagfwd_info *fwd_info = NULL; if (!smd_info) return; DIAG_LOG(DIAG_DEBUG_PERIPHERALS, "%s entering\n", smd_info->name); diagfwd_register(TRANSPORT_SMD, smd_info->peripheral, smd_info->type, (void *)smd_info, &smd_ops, &smd_info->fwd_ctxt); fwd_info = smd_info->fwd_ctxt; smd_info->inited = 1; /* * The channel is already open by the probe call as a result of other * peripheral. Inform the diag fwd layer that the channel is open. */ if (atomic_read(&smd_info->opened)) diagfwd_channel_open(smd_info->fwd_ctxt); DIAG_LOG(DIAG_DEBUG_PERIPHERALS, "%s exiting\n", smd_info->name); }