/********************************************************************** * Author: Cavium, Inc. * * Contact: support@cavium.com * Please include "LiquidIO" in the subject. * * Copyright (c) 2003-2016 Cavium, Inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, Version 2, as * published by the Free Software Foundation. * * This file is distributed in the hope that it will be useful, but * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or * NONINFRINGEMENT. See the GNU General Public License for more details.
***********************************************************************/ /*! \file octeon_main.h * \brief Host Driver: This file is included by all host driver source files * to include common definitions.
*/
struct octeon_device_priv { /** Tasklet structures for this device. */ struct tasklet_struct droq_tasklet; unsignedlong napi_mask; struct octeon_device *dev;
};
/** This structure is used by NIC driver to store information required * to free the sk_buff when the packet has been fetched by Octeon. * Bytes offset below assume worst-case of a 64-bit system.
*/ struct octnet_buf_free_info { /** Bytes 1-8. Pointer to network device private structure. */ struct lio *lio;
/** Bytes 9-16. Pointer to sk_buff. */ struct sk_buff *skb;
/** * \brief unmaps a PCI BAR * @param oct Pointer to Octeon device * @param baridx bar index
*/ staticinlinevoid octeon_unmap_pci_barx(struct octeon_device *oct, int baridx)
{
dev_dbg(&oct->pci_dev->dev, "Freeing PCI mapped regions for Bar%d\n",
baridx);
if (oct->mmio[baridx].done)
iounmap(oct->mmio[baridx].hw_addr);
if (oct->mmio[baridx].start)
pci_release_region(oct->pci_dev, baridx * 2);
}
/** * \brief maps a PCI BAR * @param oct Pointer to Octeon device * @param baridx bar index * @param max_map_len maximum length of mapped memory
*/ staticinlineint octeon_map_pci_barx(struct octeon_device *oct, int baridx, int max_map_len)
{
u32 mapped_len = 0;
if (pci_request_region(oct->pci_dev, baridx * 2, DRV_NAME)) {
dev_err(&oct->pci_dev->dev, "pci_request_region failed for bar %d\n",
baridx); return 1;
}
/* input parameter: * sc: pointer to a soft request * timeout: milli sec which an application wants to wait for the response of the request. * 0: the request will wait until its response gets back * from the firmware within LIO_SC_MAX_TMO_MS milli sec. * If the response does not return within * LIO_SC_MAX_TMO_MS milli sec, lio_process_ordered_list() * will move the request to zombie response list. * * return value: * 0: got the response from firmware for the sc request. * errno -EINTR: user abort the command. * errno -ETIME: user spefified timeout value has been expired. * errno -EBUSY: the response of the request does not return in * resonable time (LIO_SC_MAX_TMO_MS). * the sc wll be move to zombie response list by * lio_process_ordered_list() * * A request with non-zero return value, the sc->caller_is_done * will be marked 1. * When getting a request with zero return value, the requestor * should mark sc->caller_is_done with 1 after examing the * response of sc. * lio_process_ordered_list() will free the soft command on behalf * of the soft command requestor. * This is to fix the possible race condition of both timeout process * and lio_process_ordered_list()/callback function to free a * sc strucutre.
*/ staticinlineint
wait_for_sc_completion_timeout(struct octeon_device *oct_dev, struct octeon_soft_command *sc, unsignedlong timeout)
{ int errno = 0; long timeout_jiff;
if (timeout)
timeout_jiff = msecs_to_jiffies(timeout); else
timeout_jiff = MAX_SCHEDULE_TIMEOUT;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.