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

Commit e71ebd73 authored by Stephen Hemminger's avatar Stephen Hemminger
Browse files

sky2: dont write status ring



It is more efficient not to write the status ring from the
processor and just read the active portion.

Signed-off-by: default avatarStephen Hemminger <shemminger@osdl.org>
parent 01bd7564
Loading
Loading
Loading
Loading
+7 −14
Original line number Diff line number Diff line
@@ -1865,35 +1865,28 @@ static inline void sky2_tx_done(struct net_device *dev, u16 last)
static int sky2_status_intr(struct sky2_hw *hw, int to_do)
{
	int work_done = 0;
	u16 hwidx = sky2_read16(hw, STAT_PUT_IDX);

	rmb();

	for(;;) {
	while (hw->st_idx != hwidx) {
		struct sky2_status_le *le  = hw->st_le + hw->st_idx;
		struct net_device *dev;
		struct sky2_port *sky2;
		struct sk_buff *skb;
		u32 status;
		u16 length;
		u8  link, opcode;

		opcode = le->opcode;
		if (!opcode)
			break;
		opcode &= ~HW_OWNER;

		hw->st_idx = RING_NEXT(hw->st_idx, STATUS_RING_SIZE);
		le->opcode = 0;

		link = le->link;
		BUG_ON(link >= 2);
		dev = hw->dev[link];
		BUG_ON(le->link >= 2);
		dev = hw->dev[le->link];

		sky2 = netdev_priv(dev);
		length = le->length;
		status = le->status;

		switch (opcode) {
		switch (le->opcode & ~HW_OWNER) {
		case OP_RXSTAT:
			skb = sky2_receive(sky2, length, status);
			if (!skb)
@@ -1944,8 +1937,8 @@ static int sky2_status_intr(struct sky2_hw *hw, int to_do)
		default:
			if (net_ratelimit())
				printk(KERN_WARNING PFX
				       "unknown status opcode 0x%x\n", opcode);
			break;
				       "unknown status opcode 0x%x\n", le->opcode);
			goto exit_loop;
		}
	}