blob: c86659dc8b1374a995b472c1645ce3d594c126f6 [file] [log] [blame]
/*
* Copyright (c) 2009 Mindspeed Technologies, Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*
*/
#ifndef _UTIL_TX_H_
#define _UTIL_TX_H_
#include "types.h"
#include "hal.h"
#include "mtd.h"
#include "util_dmem_storage.h"
#include "tx.h"
#define LMEM_MAX_PKTDATA_LEN (LMEM_BUF_SIZE - LMEM_HDR_SIZE - UTIL_TX_TRAILER_SIZE) /**< Round it down to nearest 32-bit boundary so trailer is aligned. */
#define TRANSMIT_BUFFER ((void *)&util_buffers.transmit_buffer[0])
#define PACKET_BUFFER (TRANSMIT_BUFFER + LMEM_HDR_SIZE)
/**
* Prepares UTIL tx trailer to send packet to CLASS. If data in DMEM overlaps with the trailer
* do writeback of the overlaping range to DDR now, otherwise writeback will be done later to LMEM only.
*
*/
lmem_trailer_t *util_tx_trailer_prepare(PMetadata mtd, u32 packet_type);
void util_send_to_tx_direct(u8 port, u8 queue, PMetadata mtd, u16 hdr_len, u8 free);
void util_send_to_classpe(PMetadata mtd,u8 free);
void util_send_to_expt_direct(PMetadata mtd);
/**
* Prepares UTIL tx trailer to send packet to CLASS.
*
*/
static inline lmem_trailer_t *__util_tx_trailer_prepare(PMetadata mtd, u32 packet_type)
{
lmem_trailer_t *trailer = UTIL_TX_TRAILER(mtd);
trailer->packet_type = packet_type;
trailer->offset = mtd->offset & 0x7;
trailer->ddr_offset = (((unsigned long)mtd->rx_next & 0x7f) - LMEM_HDR_SIZE) >> 3;
trailer->mtd_flags = mtd->flags;
return trailer;
}
#endif /* _UTIL_TX_H_ */