/* * ApplyDataHdr adds a data header to a data buffer * * Params: * channel is the channel to which the data belongs * commbuff is the buffer with the data to be sent * mux is the MUX object the data is to be transmitted through */ void ApplyDataHdr(int8 channel, COMMBUFF **commbuff, MUX *mux) { CHANNEL *chanlPtr; DATA_PACKET_HDR packetdatahdr; int16 length; COMMBUFF *cb = *commbuff; DEBUG("ApplyDataHdr(%lu, %p, %p)\n", (int32) channel, commbuff, mux); length = (int16) commbuff_length(cb); convert_word(length); chanlPtr = mux->channels[channel]; packetdatahdr.type = PACKETTYPE_DATA_HDR; packetdatahdr.channel = channel; packetdatahdr.len = length; commbuff_add_header(cb, &packetdatahdr, sizeof(DATA_PACKET_HDR)); *commbuff = cb; chanlPtr->qed_totl_amount += sizeof(DATA_PACKET_HDR); mux->total_queued_amount += sizeof(DATA_PACKET_HDR); }
void tag_commbuff(COMMBUFF *commbuff, int32 channel, void *param, void (*release) (int32, int32, void*)) { INTERRUPT_STATE state; COMMBUFFTAG *newtag; int32 index; index = GET_COMMBUFF_TAG_INDEX(commbuff); newtag = (COMMBUFFTAG *) int_alloc_mem(sizeof(COMMBUFFTAG)); newtag->channel = channel; newtag->commbuff = commbuff; newtag->param = param; newtag->size = commbuff_length(commbuff); newtag->CommBuffRelease = release; commbuff->destructor = &FreeCommBuffData; disable_interrupts(state); newtag->next_tag = commbuff_tags[index]; commbuff_tags[index] = newtag; enable_interrupts(state); }
/* * Log protocol messages * * Params: * cb is the commbuff to be logged */ void log_packettype(COMMBUFF *cb) { int32 length = 0; int8 *data; int32 msgid = 0; if (!cb) return; data = commbuff_data(cb); length = commbuff_length(cb); switch (data[0]) { case PACKETTYPE_INVALID: msgid = NETMUX_PACKET_INVALID; break; case PACKETTYPE_DATA_HDR: msgid = NETMUX_PACKET_DATA; break; case PACKETTYPE_CREDIT: msgid = NETMUX_PACKET_CREDIT; break; case PACKETTYPE_ENABLEMUX: msgid = NETMUX_PACKET_ENABLEMUX; break; case PACKETTYPE_DISABLEMUX: msgid = NETMUX_PACKET_DISABLEMUX; break; case PACKETTYPE_ENABLECHANNEL: msgid = NETMUX_PACKET_ENABLECHANNEL; break; case PACKETTYPE_DISABLECHANNEL: msgid = NETMUX_PACKET_DISABLECHANNEL; break; case PACKETTYPE_QUERYINTERFACE: msgid = NETMUX_PACKET_QUERYINTERFACE; break; case PACKETTYPE_CHANNELSIGNAL: msgid = NETMUX_PACKET_CHANNELSIGNAL; break; default: return; }; LOGCOMMBUFF_PROTO(netmux_log_port_handle, msgid, length, cb); }