本文整理汇总了C++中ctodev函数的典型用法代码示例。如果您正苦于以下问题:C++ ctodev函数的具体用法?C++ ctodev怎么用?C++ ctodev使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ctodev函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: gelic_net_release_tx_descr
/**
* gelic_net_release_tx_descr - processes a used tx descriptor
* @card: card structure
* @descr: descriptor to release
*
* releases a used tx descriptor (unmapping, freeing of skb)
*/
static void gelic_net_release_tx_descr(struct gelic_net_card *card,
struct gelic_net_descr *descr)
{
struct sk_buff *skb;
if (descr->data_status & (1 << GELIC_NET_TXDESC_TAIL)) {
/* 2nd descriptor */
skb = descr->skb;
dma_unmap_single(ctodev(card), descr->buf_addr, skb->len,
DMA_TO_DEVICE);
dev_kfree_skb_any(skb);
} else {
dma_unmap_single(ctodev(card), descr->buf_addr,
descr->buf_size, DMA_TO_DEVICE);
}
descr->buf_addr = 0;
descr->buf_size = 0;
descr->next_descr_addr = 0;
descr->result_size = 0;
descr->valid_size = 0;
descr->data_status = 0;
descr->data_error = 0;
descr->skb = NULL;
/* set descr status */
gelic_net_set_descr_status(descr, GELIC_NET_DESCR_NOT_IN_USE);
}
开发者ID:cilynx,项目名称:dd-wrt,代码行数:36,代码来源:ps3_gelic_net.c
示例2: gelic_net_open_device
/**
* gelic_net_open_device - open device and map dma region
* @card: card structure
*/
static int gelic_net_open_device(struct gelic_net_card *card)
{
int result;
result = ps3_sb_event_receive_port_setup(card->dev, PS3_BINDING_CPU_ANY,
&card->netdev->irq);
if (result) {
dev_info(ctodev(card),
"%s:%d: gelic_net_open_device failed (%d)\n",
__func__, __LINE__, result);
result = -EPERM;
goto fail_alloc_irq;
}
result = request_irq(card->netdev->irq, gelic_net_interrupt,
IRQF_DISABLED, card->netdev->name, card->netdev);
if (result) {
dev_info(ctodev(card), "%s:%d: request_irq failed (%d)\n",
__func__, __LINE__, result);
goto fail_request_irq;
}
return 0;
fail_request_irq:
ps3_sb_event_receive_port_destroy(card->dev, card->netdev->irq);
card->netdev->irq = NO_IRQ;
fail_alloc_irq:
return result;
}
开发者ID:cilynx,项目名称:dd-wrt,代码行数:36,代码来源:ps3_gelic_net.c
示例3: gelic_net_set_multi
/**
* gelic_net_set_multi - sets multicast addresses and promisc flags
* @netdev: interface device structure
*
* gelic_net_set_multi configures multicast addresses as needed for the
* netdev interface. It also sets up multicast, allmulti and promisc
* flags appropriately
*/
void gelic_net_set_multi(struct net_device *netdev)
{
struct gelic_card *card = netdev_card(netdev);
struct dev_mc_list *mc;
unsigned int i;
uint8_t *p;
u64 addr;
int status;
/* clear all multicast address */
status = lv1_net_remove_multicast_address(bus_id(card), dev_id(card),
0, 1);
if (status)
dev_err(ctodev(card),
"lv1_net_remove_multicast_address failed %d\n",
status);
/* set broadcast address */
status = lv1_net_add_multicast_address(bus_id(card), dev_id(card),
GELIC_NET_BROADCAST_ADDR, 0);
if (status)
dev_err(ctodev(card),
"lv1_net_add_multicast_address failed, %d\n",
status);
if ((netdev->flags & IFF_ALLMULTI) ||
(netdev->mc_count > GELIC_NET_MC_COUNT_MAX)) {
status = lv1_net_add_multicast_address(bus_id(card),
dev_id(card),
0, 1);
if (status)
dev_err(ctodev(card),
"lv1_net_add_multicast_address failed, %d\n",
status);
return;
}
/* set multicast addresses */
for (mc = netdev->mc_list; mc; mc = mc->next) {
addr = 0;
p = mc->dmi_addr;
for (i = 0; i < ETH_ALEN; i++) {
addr <<= 8;
addr |= *p++;
}
status = lv1_net_add_multicast_address(bus_id(card),
dev_id(card),
addr, 0);
if (status)
dev_err(ctodev(card),
"lv1_net_add_multicast_address failed, %d\n",
status);
}
}
开发者ID:Atrix-Dev-Team,项目名称:kernel-MB860,代码行数:61,代码来源:ps3_gelic_net.c
示例4: gelic_card_init_chain
/**
* gelic_card_init_chain - links descriptor chain
* @card: card structure
* @chain: address of chain
* @start_descr: address of descriptor array
* @no: number of descriptors
*
* we manage a circular list that mirrors the hardware structure,
* except that the hardware uses bus addresses.
*
* returns 0 on success, <0 on failure
*/
static int __devinit gelic_card_init_chain(struct gelic_card *card,
struct gelic_descr_chain *chain,
struct gelic_descr *start_descr,
int no)
{
int i;
struct gelic_descr *descr;
descr = start_descr;
memset(descr, 0, sizeof(*descr) * no);
/* set up the hardware pointers in each descriptor */
for (i = 0; i < no; i++, descr++) {
gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE);
descr->bus_addr =
dma_map_single(ctodev(card), descr,
GELIC_DESCR_SIZE,
DMA_BIDIRECTIONAL);
if (!descr->bus_addr)
goto iommu_error;
descr->next = descr + 1;
descr->prev = descr - 1;
}
/* make them as ring */
(descr - 1)->next = start_descr;
start_descr->prev = (descr - 1);
/* chain bus addr of hw descriptor */
descr = start_descr;
for (i = 0; i < no; i++, descr++) {
descr->next_descr_addr = cpu_to_be32(descr->next->bus_addr);
}
chain->head = start_descr;
chain->tail = start_descr;
/* do not chain last hw descriptor */
(descr - 1)->next_descr_addr = 0;
return 0;
iommu_error:
for (i--, descr--; 0 <= i; i--, descr--)
if (descr->bus_addr)
dma_unmap_single(ctodev(card), descr->bus_addr,
GELIC_DESCR_SIZE,
DMA_BIDIRECTIONAL);
return -ENOMEM;
}
开发者ID:12rafael,项目名称:jellytimekernel,代码行数:63,代码来源:ps3_gelic_net.c
示例5: gelic_net_open
/**
* gelic_net_open - called upon ifonfig up
* @netdev: interface device structure
*
* returns 0 on success, <0 on failure
*
* gelic_net_open allocates all the descriptors and memory needed for
* operation, sets up multicast list and enables interrupts
*/
int gelic_net_open(struct net_device *netdev)
{
struct gelic_card *card = netdev_card(netdev);
dev_dbg(ctodev(card), " -> %s %p\n", __func__, netdev);
gelic_card_up(card);
netif_start_queue(netdev);
gelic_card_get_ether_port_status(card, 1);
dev_dbg(ctodev(card), " <- %s\n", __func__);
return 0;
}
开发者ID:Atrix-Dev-Team,项目名称:kernel-MB860,代码行数:23,代码来源:ps3_gelic_net.c
示例6: gelic_net_pass_skb_up
/**
* gelic_net_pass_skb_up - takes an skb from a descriptor and passes it on
* @descr: descriptor to process
* @card: card structure
* @netdev: net_device structure to be passed packet
*
* iommu-unmaps the skb, fills out skb structure and passes the data to the
* stack. The descriptor state is not changed.
*/
static void gelic_net_pass_skb_up(struct gelic_descr *descr,
struct gelic_card *card,
struct net_device *netdev)
{
struct sk_buff *skb = descr->skb;
u32 data_status, data_error;
data_status = be32_to_cpu(descr->data_status);
data_error = be32_to_cpu(descr->data_error);
/* unmap skb buffer */
dma_unmap_single(ctodev(card), be32_to_cpu(descr->buf_addr),
GELIC_NET_MAX_MTU,
DMA_FROM_DEVICE);
skb_put(skb, be32_to_cpu(descr->valid_size)?
be32_to_cpu(descr->valid_size) :
be32_to_cpu(descr->result_size));
if (!descr->valid_size)
dev_info(ctodev(card), "buffer full %x %x %x\n",
be32_to_cpu(descr->result_size),
be32_to_cpu(descr->buf_size),
be32_to_cpu(descr->dmac_cmd_status));
descr->skb = NULL;
/*
* the card put 2 bytes vlan tag in front
* of the ethernet frame
*/
skb_pull(skb, 2);
skb->protocol = eth_type_trans(skb, netdev);
/* checksum offload */
if (card->rx_csum) {
if ((data_status & GELIC_DESCR_DATA_STATUS_CHK_MASK) &&
(!(data_error & GELIC_DESCR_DATA_ERROR_CHK_MASK)))
skb->ip_summed = CHECKSUM_UNNECESSARY;
else
skb->ip_summed = CHECKSUM_NONE;
} else
skb->ip_summed = CHECKSUM_NONE;
/* update netdevice statistics */
netdev->stats.rx_packets++;
netdev->stats.rx_bytes += skb->len;
/* pass skb up to stack */
netif_receive_skb(skb);
}
开发者ID:Atrix-Dev-Team,项目名称:kernel-MB860,代码行数:58,代码来源:ps3_gelic_net.c
示例7: gelic_net_prepare_rx_descr
/**
* gelic_net_prepare_rx_descr - reinitializes a rx descriptor
* @card: card structure
* @descr: descriptor to re-init
*
* return 0 on succes, <0 on failure
*
* allocates a new rx skb, iommu-maps it and attaches it to the descriptor.
* Activate the descriptor state-wise
*/
static int gelic_net_prepare_rx_descr(struct gelic_net_card *card,
struct gelic_net_descr *descr)
{
int offset;
unsigned int bufsize;
if (gelic_net_get_descr_status(descr) != GELIC_NET_DESCR_NOT_IN_USE) {
dev_info(ctodev(card), "%s: ERROR status \n", __func__);
}
/* we need to round up the buffer size to a multiple of 128 */
bufsize = ALIGN(GELIC_NET_MAX_MTU, GELIC_NET_RXBUF_ALIGN);
/* and we need to have it 128 byte aligned, therefore we allocate a
* bit more */
descr->skb = netdev_alloc_skb(card->netdev,
bufsize + GELIC_NET_RXBUF_ALIGN - 1);
if (!descr->skb) {
descr->buf_addr = 0; /* tell DMAC don't touch memory */
dev_info(ctodev(card),
"%s:allocate skb failed !!\n", __func__);
return -ENOMEM;
}
descr->buf_size = bufsize;
descr->dmac_cmd_status = 0;
descr->result_size = 0;
descr->valid_size = 0;
descr->data_error = 0;
offset = ((unsigned long)descr->skb->data) &
(GELIC_NET_RXBUF_ALIGN - 1);
if (offset)
skb_reserve(descr->skb, GELIC_NET_RXBUF_ALIGN - offset);
/* io-mmu-map the skb */
descr->buf_addr = dma_map_single(ctodev(card), descr->skb->data,
GELIC_NET_MAX_MTU,
DMA_FROM_DEVICE);
if (!descr->buf_addr) {
dev_kfree_skb_any(descr->skb);
descr->skb = NULL;
dev_info(ctodev(card),
"%s:Could not iommu-map rx buffer\n", __func__);
gelic_net_set_descr_status(descr, GELIC_NET_DESCR_NOT_IN_USE);
return -ENOMEM;
} else {
gelic_net_set_descr_status(descr, GELIC_NET_DESCR_CARDOWNED);
return 0;
}
}
开发者ID:cilynx,项目名称:dd-wrt,代码行数:58,代码来源:ps3_gelic_net.c
示例8: gelic_net_xmit
/**
* gelic_net_xmit - transmits a frame over the device
* @skb: packet to send out
* @netdev: interface device structure
*
* returns 0 on success, <0 on failure
*/
int gelic_net_xmit(struct sk_buff *skb, struct net_device *netdev)
{
struct gelic_card *card = netdev_card(netdev);
struct gelic_descr *descr;
int result;
unsigned long flags;
spin_lock_irqsave(&card->tx_lock, flags);
gelic_card_release_tx_chain(card, 0);
descr = gelic_card_get_next_tx_descr(card);
if (!descr) {
/*
* no more descriptors free
*/
gelic_card_stop_queues(card);
spin_unlock_irqrestore(&card->tx_lock, flags);
return NETDEV_TX_BUSY;
}
result = gelic_descr_prepare_tx(card, descr, skb);
if (result) {
/*
* DMA map failed. As chanses are that failure
* would continue, just release skb and return
*/
netdev->stats.tx_dropped++;
dev_kfree_skb_any(skb);
spin_unlock_irqrestore(&card->tx_lock, flags);
return NETDEV_TX_OK;
}
/*
* link this prepared descriptor to previous one
* to achieve high performance
*/
descr->prev->next_descr_addr = cpu_to_be32(descr->bus_addr);
/*
* as hardware descriptor is modified in the above lines,
* ensure that the hardware sees it
*/
wmb();
if (gelic_card_kick_txdma(card, descr)) {
/*
* kick failed.
* release descriptors which were just prepared
*/
netdev->stats.tx_dropped++;
gelic_descr_release_tx(card, descr);
gelic_descr_release_tx(card, descr->next);
card->tx_chain.tail = descr->next->next;
dev_info(ctodev(card), "%s: kick failure\n", __func__);
} else {
/* OK, DMA started/reserved */
netdev->trans_start = jiffies;
}
spin_unlock_irqrestore(&card->tx_lock, flags);
return NETDEV_TX_OK;
}
开发者ID:Atrix-Dev-Team,项目名称:kernel-MB860,代码行数:67,代码来源:ps3_gelic_net.c
示例9: gelic_net_kick_txdma
/**
* gelic_net_kick_txdma - enables TX DMA processing
* @card: card structure
* @descr: descriptor address to enable TX processing at
*
*/
static int gelic_net_kick_txdma(struct gelic_net_card *card,
struct gelic_net_descr *descr)
{
int status = 0;
int count = 10;
if (card->tx_dma_progress)
return 0;
if (gelic_net_get_descr_status(descr) == GELIC_NET_DESCR_CARDOWNED) {
card->tx_dma_progress = 1;
/* sometimes we need retry here */
while (count--) {
status = lv1_net_start_tx_dma(bus_id(card),
dev_id(card),
descr->bus_addr, 0);
if (!status)
break;
}
if (!count)
dev_info(ctodev(card), "lv1_net_start_txdma failed," \
"status=%d %#lx\n",
status, card->irq_status);
}
return status;
}
开发者ID:cilynx,项目名称:dd-wrt,代码行数:32,代码来源:ps3_gelic_net.c
示例10: gelic_net_open
/**
* gelic_net_open - called upon ifonfig up
* @netdev: interface device structure
*
* returns 0 on success, <0 on failure
*
* gelic_net_open allocates all the descriptors and memory needed for
* operation, sets up multicast list and enables interrupts
*/
static int gelic_net_open(struct net_device *netdev)
{
struct gelic_net_card *card = netdev_priv(netdev);
dev_dbg(ctodev(card), " -> %s:%d\n", __func__, __LINE__);
gelic_net_open_device(card);
if (gelic_net_init_chain(card, &card->tx_chain,
card->descr, GELIC_NET_TX_DESCRIPTORS))
goto alloc_tx_failed;
if (gelic_net_init_chain(card, &card->rx_chain,
card->descr + GELIC_NET_TX_DESCRIPTORS,
GELIC_NET_RX_DESCRIPTORS))
goto alloc_rx_failed;
/* head of chain */
card->tx_top = card->tx_chain.head;
card->rx_top = card->rx_chain.head;
dev_dbg(ctodev(card), "descr rx %p, tx %p, size %#lx, num %#x\n",
card->rx_top, card->tx_top, sizeof(struct gelic_net_descr),
GELIC_NET_RX_DESCRIPTORS);
/* allocate rx skbs */
if (gelic_net_alloc_rx_skbs(card))
goto alloc_skbs_failed;
card->tx_dma_progress = 0;
card->ghiintmask = GELIC_NET_RXINT | GELIC_NET_TXINT;
gelic_net_set_irq_mask(card, card->ghiintmask);
gelic_net_enable_rxdmac(card);
netif_start_queue(netdev);
netif_carrier_on(netdev);
return 0;
alloc_skbs_failed:
gelic_net_free_chain(card, card->rx_top);
alloc_rx_failed:
gelic_net_free_chain(card, card->tx_top);
alloc_tx_failed:
return -ENOMEM;
}
开发者ID:cilynx,项目名称:dd-wrt,代码行数:53,代码来源:ps3_gelic_net.c
示例11: gelic_card_disable_rxdmac
/**
* gelic_card_disable_rxdmac - disables the receive DMA controller
* @card: card structure
*
* gelic_card_disable_rxdmac terminates processing on the DMA controller by
* turing off DMA and issuing a force end
*/
static void gelic_card_disable_rxdmac(struct gelic_card *card)
{
int status;
/* this hvc blocks until the DMA in progress really stopped */
status = lv1_net_stop_rx_dma(bus_id(card), dev_id(card));
if (status)
dev_err(ctodev(card),
"lv1_net_stop_rx_dma failed, %d\n", status);
}
开发者ID:AD5GB,项目名称:kernel_n5_3.10-experimental,代码行数:17,代码来源:ps3_gelic_net.c
示例12: gelic_net_disable_txdmac
/**
* gelic_net_disable_txdmac - disables the transmit DMA controller
* @card: card structure
*
* gelic_net_disable_txdmac terminates processing on the DMA controller by
* turing off DMA and issueing a force end
*/
static inline void gelic_net_disable_txdmac(struct gelic_net_card *card)
{
int status;
/* this hvc blocks until the DMA in progress really stopped */
status = lv1_net_stop_tx_dma(bus_id(card), dev_id(card), 0);
if (status)
dev_err(ctodev(card),
"lv1_net_stop_tx_dma faild, status=%d\n", status);
}
开发者ID:cilynx,项目名称:dd-wrt,代码行数:17,代码来源:ps3_gelic_net.c
示例13: gelic_net_enable_rxdmac
/**
* gelic_net_enable_rxdmac - enables the receive DMA controller
* @card: card structure
*
* gelic_net_enable_rxdmac enables the DMA controller by setting RX_DMA_EN
* in the GDADMACCNTR register
*/
static inline void gelic_net_enable_rxdmac(struct gelic_net_card *card)
{
int status;
status = lv1_net_start_rx_dma(bus_id(card), dev_id(card),
card->rx_chain.tail->bus_addr, 0);
if (status)
dev_info(ctodev(card),
"lv1_net_start_rx_dma failed, status=%d\n", status);
}
开发者ID:cilynx,项目名称:dd-wrt,代码行数:17,代码来源:ps3_gelic_net.c
示例14: gelic_card_set_irq_mask
/* set irq_mask */
int gelic_card_set_irq_mask(struct gelic_card *card, u64 mask)
{
int status;
status = lv1_net_set_interrupt_mask(bus_id(card), dev_id(card),
mask, 0);
if (status)
dev_info(ctodev(card),
"%s failed %d\n", __func__, status);
return status;
}
开发者ID:AD5GB,项目名称:kernel_n5_3.10-experimental,代码行数:12,代码来源:ps3_gelic_net.c
示例15: gelic_card_free_chain
/**
* gelic_card_free_chain - free descriptor chain
* @card: card structure
* @descr_in: address of desc
*/
static void gelic_card_free_chain(struct gelic_card *card,
struct gelic_descr *descr_in)
{
struct gelic_descr *descr;
for (descr = descr_in; descr && descr->bus_addr; descr = descr->next) {
dma_unmap_single(ctodev(card), descr->bus_addr,
GELIC_DESCR_SIZE, DMA_BIDIRECTIONAL);
descr->bus_addr = 0;
}
}
开发者ID:AD5GB,项目名称:kernel_n5_3.10-experimental,代码行数:16,代码来源:ps3_gelic_net.c
示例16: gelic_net_setup_netdev
/**
* gelic_ether_setup_netdev - initialization of net_device
* @netdev: net_device structure
* @card: card structure
*
* Returns 0 on success or <0 on failure
*
* gelic_ether_setup_netdev initializes the net_device structure
* and register it.
**/
int __devinit gelic_net_setup_netdev(struct net_device *netdev,
struct gelic_card *card)
{
int status;
u64 v1, v2;
netdev->features = NETIF_F_IP_CSUM;
status = lv1_net_control(bus_id(card), dev_id(card),
GELIC_LV1_GET_MAC_ADDRESS,
0, 0, 0, &v1, &v2);
v1 <<= 16;
if (status || !is_valid_ether_addr((u8 *)&v1)) {
dev_info(ctodev(card),
"%s:lv1_net_control GET_MAC_ADDR failed %d\n",
__func__, status);
return -EINVAL;
}
memcpy(netdev->dev_addr, &v1, ETH_ALEN);
if (card->vlan_required) {
netdev->hard_header_len += VLAN_HLEN;
/*
* As vlan is internally used,
* we can not receive vlan packets
*/
netdev->features |= NETIF_F_VLAN_CHALLENGED;
}
status = register_netdev(netdev);
if (status) {
dev_err(ctodev(card), "%s:Couldn't register %s %d\n",
__func__, netdev->name, status);
return status;
}
dev_info(ctodev(card), "%s: MAC addr %pM\n",
netdev->name, netdev->dev_addr);
return 0;
}
开发者ID:Atrix-Dev-Team,项目名称:kernel-MB860,代码行数:50,代码来源:ps3_gelic_net.c
示例17: gelic_descr_prepare_tx
/**
* gelic_descr_prepare_tx - setup a descriptor for sending packets
* @card: card structure
* @descr: descriptor structure
* @skb: packet to use
*
* returns 0 on success, <0 on failure.
*
*/
static int gelic_descr_prepare_tx(struct gelic_card *card,
struct gelic_descr *descr,
struct sk_buff *skb)
{
dma_addr_t buf;
if (card->vlan_required) {
struct sk_buff *skb_tmp;
enum gelic_port_type type;
type = netdev_port(skb->dev)->type;
skb_tmp = gelic_put_vlan_tag(skb,
card->vlan[type].tx);
if (!skb_tmp)
return -ENOMEM;
skb = skb_tmp;
}
buf = dma_map_single(ctodev(card), skb->data, skb->len, DMA_TO_DEVICE);
if (!buf) {
dev_err(ctodev(card),
"dma map 2 failed (%p, %i). Dropping packet\n",
skb->data, skb->len);
return -ENOMEM;
}
descr->buf_addr = cpu_to_be32(buf);
descr->buf_size = cpu_to_be32(skb->len);
descr->skb = skb;
descr->data_status = 0;
descr->next_descr_addr = 0; /* terminate hw descr */
gelic_descr_set_tx_cmdstat(descr, skb);
/* bump free descriptor pointer */
card->tx_chain.head = descr->next;
return 0;
}
开发者ID:Atrix-Dev-Team,项目名称:kernel-MB860,代码行数:47,代码来源:ps3_gelic_net.c
示例18: gelic_card_release_tx_chain
/**
* gelic_card_release_tx_chain - processes sent tx descriptors
* @card: adapter structure
* @stop: net_stop sequence
*
* releases the tx descriptors that gelic has finished with
*/
static void gelic_card_release_tx_chain(struct gelic_card *card, int stop)
{
struct gelic_descr_chain *tx_chain;
enum gelic_descr_dma_status status;
struct net_device *netdev;
int release = 0;
for (tx_chain = &card->tx_chain;
tx_chain->head != tx_chain->tail && tx_chain->tail;
tx_chain->tail = tx_chain->tail->next) {
status = gelic_descr_get_status(tx_chain->tail);
netdev = tx_chain->tail->skb->dev;
switch (status) {
case GELIC_DESCR_DMA_RESPONSE_ERROR:
case GELIC_DESCR_DMA_PROTECTION_ERROR:
case GELIC_DESCR_DMA_FORCE_END:
if (printk_ratelimit())
dev_info(ctodev(card),
"%s: forcing end of tx descriptor " \
"with status %x\n",
__func__, status);
netdev->stats.tx_dropped++;
break;
case GELIC_DESCR_DMA_COMPLETE:
if (tx_chain->tail->skb) {
netdev->stats.tx_packets++;
netdev->stats.tx_bytes +=
tx_chain->tail->skb->len;
}
break;
case GELIC_DESCR_DMA_CARDOWNED:
/* pending tx request */
default:
/* any other value (== GELIC_DESCR_DMA_NOT_IN_USE) */
if (!stop)
goto out;
}
gelic_descr_release_tx(card, tx_chain->tail);
release ++;
}
out:
if (!stop && release)
gelic_card_wake_queues(card);
}
开发者ID:AD5GB,项目名称:kernel_n5_3.10-experimental,代码行数:53,代码来源:ps3_gelic_net.c
示例19: gelic_card_kick_txdma
/**
* gelic_card_kick_txdma - enables TX DMA processing
* @card: card structure
* @descr: descriptor address to enable TX processing at
*
*/
static int gelic_card_kick_txdma(struct gelic_card *card,
struct gelic_descr *descr)
{
int status = 0;
if (card->tx_dma_progress)
return 0;
if (gelic_descr_get_status(descr) == GELIC_DESCR_DMA_CARDOWNED) {
card->tx_dma_progress = 1;
status = lv1_net_start_tx_dma(bus_id(card), dev_id(card),
descr->bus_addr, 0);
if (status)
dev_info(ctodev(card), "lv1_net_start_txdma failed," \
"status=%d\n", status);
}
return status;
}
开发者ID:Atrix-Dev-Team,项目名称:kernel-MB860,代码行数:24,代码来源:ps3_gelic_net.c
示例20: gelic_card_release_rx_chain
/**
* gelic_card_release_rx_chain - free all skb of rx descr
* @card: card structure
*
*/
static void gelic_card_release_rx_chain(struct gelic_card *card)
{
struct gelic_descr *descr = card->rx_chain.head;
do {
if (descr->skb) {
dma_unmap_single(ctodev(card),
be32_to_cpu(descr->buf_addr),
descr->skb->len,
DMA_FROM_DEVICE);
descr->buf_addr = 0;
dev_kfree_skb_any(descr->skb);
descr->skb = NULL;
gelic_descr_set_status(descr,
GELIC_DESCR_DMA_NOT_IN_USE);
}
descr = descr->next;
} while (descr != card->rx_chain.head);
}
开发者ID:AD5GB,项目名称:kernel_n5_3.10-experimental,代码行数:24,代码来源:ps3_gelic_net.c
注:本文中的ctodev函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论