static inline void prefetch_ptr(struct efx_tx_queue *tx_queue) { unsigned int insert_ptr = efx_tx_queue_get_insert_index(tx_queue); char *ptr; ptr = (char *) (tx_queue->buffer + insert_ptr); prefetch(ptr); prefetch(ptr + 0x80); ptr = (char *) (((efx_qword_t *)tx_queue->txd.buf.addr) + insert_ptr); prefetch(ptr); prefetch(ptr + 0x80); }
static inline u8 *efx_tx_get_copy_buffer(struct efx_tx_queue *tx_queue, struct efx_tx_buffer *buffer) { unsigned int index = efx_tx_queue_get_insert_index(tx_queue); struct efx_buffer *page_buf = &tx_queue->cb_page[index >> (PAGE_SHIFT - EFX_TX_CB_ORDER)]; unsigned int offset = ((index << EFX_TX_CB_ORDER) + NET_IP_ALIGN) & (PAGE_SIZE - 1); if (unlikely(!page_buf->addr) && efx_nic_alloc_buffer(tx_queue->efx, page_buf, PAGE_SIZE, GFP_ATOMIC)) return NULL; buffer->dma_addr = page_buf->dma_addr + offset; buffer->unmap_len = 0; return (u8 *)page_buf->addr + offset; }
static inline struct efx_tx_buffer * __efx_tx_queue_get_insert_buffer(const struct efx_tx_queue *tx_queue) { return &tx_queue->buffer[efx_tx_queue_get_insert_index(tx_queue)]; }