Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 224743
b: refs/heads/master
c: d68f683
h: refs/heads/master
i:
  224741: 9445a24
  224739: 574eae2
  224735: a01c6fd
v: v3
  • Loading branch information
Tomoya authored and David S. Miller committed Dec 2, 2010
1 parent 155f0b3 commit 19cf133
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 37 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 15ffc8fddf72712cc45d51c64bd500760ec63c80
refs/heads/master: d68f6837c4972b0433e41f8bee4b2b8205610f31
77 changes: 41 additions & 36 deletions trunk/drivers/net/can/pch_can.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,21 +71,12 @@
#define PCH_REC 0x00007f00
#define PCH_TEC 0x000000ff


#define PCH_TX_OK BIT(3)
#define PCH_RX_OK BIT(4)
#define PCH_EPASSIV BIT(5)
#define PCH_EWARN BIT(6)
#define PCH_BUS_OFF BIT(7)
#define PCH_LEC0 BIT(0)
#define PCH_LEC1 BIT(1)
#define PCH_LEC2 BIT(2)
#define PCH_LEC_ALL (PCH_LEC0 | PCH_LEC1 | PCH_LEC2)
#define PCH_STUF_ERR PCH_LEC0
#define PCH_FORM_ERR PCH_LEC1
#define PCH_ACK_ERR (PCH_LEC0 | PCH_LEC1)
#define PCH_BIT1_ERR PCH_LEC2
#define PCH_BIT0_ERR (PCH_LEC0 | PCH_LEC2)
#define PCH_CRC_ERR (PCH_LEC1 | PCH_LEC2)

/* bit position of certain controller bits. */
#define PCH_BIT_BRP 0
Expand Down Expand Up @@ -117,6 +108,16 @@ enum pch_ifreg {
PCH_TX_IFREG,
};

enum pch_can_err {
PCH_STUF_ERR = 1,
PCH_FORM_ERR,
PCH_ACK_ERR,
PCH_BIT1_ERR,
PCH_BIT0_ERR,
PCH_CRC_ERR,
PCH_LEC_ALL,
};

enum pch_can_mode {
PCH_CAN_ENABLE,
PCH_CAN_DISABLE,
Expand Down Expand Up @@ -620,7 +621,7 @@ static void pch_can_error(struct net_device *ndev, u32 status)
struct sk_buff *skb;
struct pch_can_priv *priv = netdev_priv(ndev);
struct can_frame *cf;
u32 errc;
u32 errc, lec;
struct net_device_stats *stats = &(priv->ndev->stats);
enum can_state state = priv->can.state;

Expand Down Expand Up @@ -665,33 +666,37 @@ static void pch_can_error(struct net_device *ndev, u32 status)
"%s -> CAN controller is ERROR PASSIVE .\n", __func__);
}

if (status & PCH_LEC_ALL) {
lec = status & PCH_LEC_ALL;
switch (lec) {
case PCH_STUF_ERR:
cf->data[2] |= CAN_ERR_PROT_STUFF;
priv->can.can_stats.bus_error++;
stats->rx_errors++;
switch (status & PCH_LEC_ALL) {
case PCH_STUF_ERR:
cf->data[2] |= CAN_ERR_PROT_STUFF;
break;
case PCH_FORM_ERR:
cf->data[2] |= CAN_ERR_PROT_FORM;
break;
case PCH_ACK_ERR:
cf->data[2] |= CAN_ERR_PROT_LOC_ACK |
CAN_ERR_PROT_LOC_ACK_DEL;
break;
case PCH_BIT1_ERR:
case PCH_BIT0_ERR:
cf->data[2] |= CAN_ERR_PROT_BIT;
break;
case PCH_CRC_ERR:
cf->data[2] |= CAN_ERR_PROT_LOC_CRC_SEQ |
CAN_ERR_PROT_LOC_CRC_DEL;
break;
default:
iowrite32(status | PCH_LEC_ALL, &priv->regs->stat);
break;
}

break;
case PCH_FORM_ERR:
cf->data[2] |= CAN_ERR_PROT_FORM;
priv->can.can_stats.bus_error++;
stats->rx_errors++;
break;
case PCH_ACK_ERR:
cf->can_id |= CAN_ERR_ACK;
priv->can.can_stats.bus_error++;
stats->rx_errors++;
break;
case PCH_BIT1_ERR:
case PCH_BIT0_ERR:
cf->data[2] |= CAN_ERR_PROT_BIT;
priv->can.can_stats.bus_error++;
stats->rx_errors++;
break;
case PCH_CRC_ERR:
cf->data[2] |= CAN_ERR_PROT_LOC_CRC_SEQ |
CAN_ERR_PROT_LOC_CRC_DEL;
priv->can.can_stats.bus_error++;
stats->rx_errors++;
break;
case PCH_LEC_ALL: /* Written by CPU. No error status */
break;
}

priv->can.state = state;
Expand Down

0 comments on commit 19cf133

Please sign in to comment.