Loading drivers/char/diag/diagfwd_peripheral.c +23 −7 Original line number Diff line number Diff line Loading @@ -434,8 +434,6 @@ int diagfwd_peripheral_init(void) for (peripheral = 0; peripheral < NUM_PERIPHERALS; peripheral++) { for (type = 0; type < NUM_TYPES; type++) { if (type == TYPE_CNTL) continue; fwd_info = &peripheral_info[type][peripheral]; fwd_info->peripheral = peripheral; fwd_info->type = type; Loading @@ -444,11 +442,16 @@ int diagfwd_peripheral_init(void) fwd_info->ch_open = 0; fwd_info->read_bytes = 0; fwd_info->write_bytes = 0; fwd_info->inited = 1; spin_lock_init(&fwd_info->buf_lock); mutex_init(&fwd_info->data_mutex); /* * This state shouldn't be set for Control channels * during initialization. This is set when the feature * mask is received for the first time. */ if (type != TYPE_CNTL) fwd_info->inited = 1; } driver->diagfwd_data[peripheral] = &peripheral_info[TYPE_DATA][peripheral]; driver->diagfwd_cntl[peripheral] = Loading Loading @@ -630,12 +633,25 @@ void diagfwd_close_transport(uint8_t transport, uint8_t peripheral) } fwd_info = &early_init_info[transport_open][peripheral]; if (fwd_info->p_ops && fwd_info->p_ops->close) fwd_info->p_ops->close(fwd_info->ctxt); dest_info = &peripheral_info[TYPE_CNTL][peripheral]; memcpy(dest_info, fwd_info, sizeof(struct diagfwd_info)); dest_info->inited = 1; dest_info->ctxt = fwd_info->ctxt; dest_info->p_ops = fwd_info->p_ops; dest_info->c_ops = fwd_info->c_ops; dest_info->ch_open = fwd_info->ch_open; dest_info->read_bytes = fwd_info->read_bytes; dest_info->write_bytes = fwd_info->write_bytes; dest_info->inited = fwd_info->inited; dest_info->buf_1 = fwd_info->buf_1; dest_info->buf_2 = fwd_info->buf_2; invalidate_fn(dest_info->ctxt, dest_info); diagfwd_queue_read(dest_info); diagfwd_late_open(dest_info); diagfwd_cntl_open(dest_info); init_fn(peripheral); diag_cntl_channel_open(dest_info); diagfwd_queue_read(&peripheral_info[TYPE_DATA][peripheral]); diagfwd_queue_read(&peripheral_info[TYPE_CMD][peripheral]); } int diagfwd_write(uint8_t peripheral, uint8_t type, void *buf, int len) Loading Loading
drivers/char/diag/diagfwd_peripheral.c +23 −7 Original line number Diff line number Diff line Loading @@ -434,8 +434,6 @@ int diagfwd_peripheral_init(void) for (peripheral = 0; peripheral < NUM_PERIPHERALS; peripheral++) { for (type = 0; type < NUM_TYPES; type++) { if (type == TYPE_CNTL) continue; fwd_info = &peripheral_info[type][peripheral]; fwd_info->peripheral = peripheral; fwd_info->type = type; Loading @@ -444,11 +442,16 @@ int diagfwd_peripheral_init(void) fwd_info->ch_open = 0; fwd_info->read_bytes = 0; fwd_info->write_bytes = 0; fwd_info->inited = 1; spin_lock_init(&fwd_info->buf_lock); mutex_init(&fwd_info->data_mutex); /* * This state shouldn't be set for Control channels * during initialization. This is set when the feature * mask is received for the first time. */ if (type != TYPE_CNTL) fwd_info->inited = 1; } driver->diagfwd_data[peripheral] = &peripheral_info[TYPE_DATA][peripheral]; driver->diagfwd_cntl[peripheral] = Loading Loading @@ -630,12 +633,25 @@ void diagfwd_close_transport(uint8_t transport, uint8_t peripheral) } fwd_info = &early_init_info[transport_open][peripheral]; if (fwd_info->p_ops && fwd_info->p_ops->close) fwd_info->p_ops->close(fwd_info->ctxt); dest_info = &peripheral_info[TYPE_CNTL][peripheral]; memcpy(dest_info, fwd_info, sizeof(struct diagfwd_info)); dest_info->inited = 1; dest_info->ctxt = fwd_info->ctxt; dest_info->p_ops = fwd_info->p_ops; dest_info->c_ops = fwd_info->c_ops; dest_info->ch_open = fwd_info->ch_open; dest_info->read_bytes = fwd_info->read_bytes; dest_info->write_bytes = fwd_info->write_bytes; dest_info->inited = fwd_info->inited; dest_info->buf_1 = fwd_info->buf_1; dest_info->buf_2 = fwd_info->buf_2; invalidate_fn(dest_info->ctxt, dest_info); diagfwd_queue_read(dest_info); diagfwd_late_open(dest_info); diagfwd_cntl_open(dest_info); init_fn(peripheral); diag_cntl_channel_open(dest_info); diagfwd_queue_read(&peripheral_info[TYPE_DATA][peripheral]); diagfwd_queue_read(&peripheral_info[TYPE_CMD][peripheral]); } int diagfwd_write(uint8_t peripheral, uint8_t type, void *buf, int len) Loading