in stream.c [298:320]
static int slim_define_channel(struct slim_stream_runtime *stream,
struct slim_port *port)
{
struct slim_device *sdev = stream->dev;
u8 wbuf[4];
struct slim_val_inf msg = {0, 4, NULL, wbuf, NULL};
u8 mc = SLIM_MSG_MC_NEXT_DEFINE_CHANNEL;
DEFINE_SLIM_LDEST_TXN(txn, mc, 8, stream->dev->laddr, &msg);
port->ch.seg_dist = slim_get_segdist_code(stream->ratem);
wbuf[0] = port->ch.id;
wbuf[1] = port->ch.seg_dist & 0xFF;
wbuf[2] = (stream->prot << 4) | ((port->ch.seg_dist & 0xF00) >> 8);
if (stream->prot == SLIM_PROTO_ISO)
wbuf[3] = stream->bps/SLIM_SLOT_LEN_BITS;
else
wbuf[3] = stream->bps/SLIM_SLOT_LEN_BITS + 1;
port->ch.state = SLIM_CH_STATE_DEFINED;
return slim_do_transfer(sdev->ctrl, &txn);
}