Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9d39c90a authored by YOSHIFUJI Hideaki's avatar YOSHIFUJI Hideaki Committed by Stefan Richter
Browse files

firewire net: Introduce fwnet_fifo_{start, stop}() helpers.

parent 5104a03d
Loading
Loading
Loading
Loading
+35 −16
Original line number Diff line number Diff line
@@ -1116,17 +1116,22 @@ static int fwnet_send_packet(struct fwnet_packet_task *ptask)
	return 0;
}

static int fwnet_broadcast_start(struct fwnet_device *dev)
static void fwnet_fifo_stop(struct fwnet_device *dev)
{
	if (dev->local_fifo == FWNET_NO_FIFO_ADDR)
		return;

	fw_core_remove_address_handler(&dev->handler);
	dev->local_fifo = FWNET_NO_FIFO_ADDR;
}

static int fwnet_fifo_start(struct fwnet_device *dev)
{
	struct fw_iso_context *context;
	int retval;
	unsigned num_packets;
	unsigned max_receive;
	struct fw_iso_packet packet;
	unsigned long offset;
	unsigned u;

	if (dev->local_fifo == FWNET_NO_FIFO_ADDR) {
	if (dev->local_fifo != FWNET_NO_FIFO_ADDR)
		return 0;

	dev->handler.length = 4096;
	dev->handler.address_callback = fwnet_receive_packet;
	dev->handler.callback_data = dev;
@@ -1134,11 +1139,27 @@ static int fwnet_broadcast_start(struct fwnet_device *dev)
	retval = fw_core_add_address_handler(&dev->handler,
					     &fw_high_memory_region);
	if (retval < 0)
			goto failed_initial;
		return retval;

	dev->local_fifo = dev->handler.offset;

	return 0;
}

static int fwnet_broadcast_start(struct fwnet_device *dev)
{
	struct fw_iso_context *context;
	int retval;
	unsigned num_packets;
	unsigned max_receive;
	struct fw_iso_packet packet;
	unsigned long offset;
	unsigned u;

	retval = fwnet_fifo_start(dev);
	if (retval < 0)
		goto failed_initial;

	max_receive = 1U << (dev->card->max_receive + 1);
	num_packets = (FWNET_ISO_PAGE_COUNT * PAGE_SIZE) / max_receive;

@@ -1219,8 +1240,7 @@ static int fwnet_broadcast_start(struct fwnet_device *dev)
	fw_iso_context_destroy(context);
	dev->broadcast_rcv_context = NULL;
 failed_context_create:
	fw_core_remove_address_handler(&dev->handler);
	dev->local_fifo = FWNET_NO_FIFO_ADDR;
	fwnet_fifo_stop(dev);
 failed_initial:

	return retval;
@@ -1600,8 +1620,7 @@ static int fwnet_remove(struct device *_dev)
	if (list_empty(&dev->peer_list)) {
		unregister_netdev(net);

		if (dev->local_fifo != FWNET_NO_FIFO_ADDR)
			fw_core_remove_address_handler(&dev->handler);
		fwnet_fifo_stop(dev);
		if (dev->broadcast_rcv_context) {
			fw_iso_context_stop(dev->broadcast_rcv_context);
			fw_iso_buffer_destroy(&dev->broadcast_rcv_buffer,