diff options
Diffstat (limited to 'include/linux/can')
| -rw-r--r-- | include/linux/can/dev.h | 19 | ||||
| -rw-r--r-- | include/linux/can/netlink.h | 17 | ||||
| -rw-r--r-- | include/linux/can/platform/flexcan.h | 20 | ||||
| -rw-r--r-- | include/linux/can/platform/mcp251x.h | 4 | ||||
| -rw-r--r-- | include/linux/can/platform/sja1000.h | 2 | ||||
| -rw-r--r-- | include/linux/can/platform/ti_hecc.h | 8 |
6 files changed, 62 insertions, 8 deletions
diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h index 3db7767d2a17..cc0bb4961669 100644 --- a/include/linux/can/dev.h +++ b/include/linux/can/dev.h | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #ifndef CAN_DEV_H | 14 | #ifndef CAN_DEV_H |
| 15 | #define CAN_DEV_H | 15 | #define CAN_DEV_H |
| 16 | 16 | ||
| 17 | #include <linux/can.h> | ||
| 17 | #include <linux/can/netlink.h> | 18 | #include <linux/can/netlink.h> |
| 18 | #include <linux/can/error.h> | 19 | #include <linux/can/error.h> |
| 19 | 20 | ||
| @@ -38,6 +39,7 @@ struct can_priv { | |||
| 38 | 39 | ||
| 39 | enum can_state state; | 40 | enum can_state state; |
| 40 | u32 ctrlmode; | 41 | u32 ctrlmode; |
| 42 | u32 ctrlmode_supported; | ||
| 41 | 43 | ||
| 42 | int restart_ms; | 44 | int restart_ms; |
| 43 | struct timer_list restart_timer; | 45 | struct timer_list restart_timer; |
| @@ -46,6 +48,8 @@ struct can_priv { | |||
| 46 | int (*do_set_mode)(struct net_device *dev, enum can_mode mode); | 48 | int (*do_set_mode)(struct net_device *dev, enum can_mode mode); |
| 47 | int (*do_get_state)(const struct net_device *dev, | 49 | int (*do_get_state)(const struct net_device *dev, |
| 48 | enum can_state *state); | 50 | enum can_state *state); |
| 51 | int (*do_get_berr_counter)(const struct net_device *dev, | ||
| 52 | struct can_berr_counter *bec); | ||
| 49 | 53 | ||
| 50 | unsigned int echo_skb_max; | 54 | unsigned int echo_skb_max; |
| 51 | struct sk_buff **echo_skb; | 55 | struct sk_buff **echo_skb; |
| @@ -60,6 +64,21 @@ struct can_priv { | |||
| 60 | */ | 64 | */ |
| 61 | #define get_can_dlc(i) (min_t(__u8, (i), 8)) | 65 | #define get_can_dlc(i) (min_t(__u8, (i), 8)) |
| 62 | 66 | ||
| 67 | /* Drop a given socketbuffer if it does not contain a valid CAN frame. */ | ||
| 68 | static inline int can_dropped_invalid_skb(struct net_device *dev, | ||
| 69 | struct sk_buff *skb) | ||
| 70 | { | ||
| 71 | const struct can_frame *cf = (struct can_frame *)skb->data; | ||
| 72 | |||
| 73 | if (unlikely(skb->len != sizeof(*cf) || cf->can_dlc > 8)) { | ||
| 74 | kfree_skb(skb); | ||
| 75 | dev->stats.tx_dropped++; | ||
| 76 | return 1; | ||
| 77 | } | ||
| 78 | |||
| 79 | return 0; | ||
| 80 | } | ||
| 81 | |||
| 63 | struct net_device *alloc_candev(int sizeof_priv, unsigned int echo_skb_max); | 82 | struct net_device *alloc_candev(int sizeof_priv, unsigned int echo_skb_max); |
| 64 | void free_candev(struct net_device *dev); | 83 | void free_candev(struct net_device *dev); |
| 65 | 84 | ||
diff --git a/include/linux/can/netlink.h b/include/linux/can/netlink.h index 9ecbb7871c0e..3250de935e1a 100644 --- a/include/linux/can/netlink.h +++ b/include/linux/can/netlink.h | |||
| @@ -70,6 +70,14 @@ enum can_state { | |||
| 70 | }; | 70 | }; |
| 71 | 71 | ||
| 72 | /* | 72 | /* |
| 73 | * CAN bus error counters | ||
| 74 | */ | ||
| 75 | struct can_berr_counter { | ||
| 76 | __u16 txerr; | ||
| 77 | __u16 rxerr; | ||
| 78 | }; | ||
| 79 | |||
| 80 | /* | ||
| 73 | * CAN controller mode | 81 | * CAN controller mode |
| 74 | */ | 82 | */ |
| 75 | struct can_ctrlmode { | 83 | struct can_ctrlmode { |
| @@ -77,9 +85,11 @@ struct can_ctrlmode { | |||
| 77 | __u32 flags; | 85 | __u32 flags; |
| 78 | }; | 86 | }; |
| 79 | 87 | ||
| 80 | #define CAN_CTRLMODE_LOOPBACK 0x1 /* Loopback mode */ | 88 | #define CAN_CTRLMODE_LOOPBACK 0x01 /* Loopback mode */ |
| 81 | #define CAN_CTRLMODE_LISTENONLY 0x2 /* Listen-only mode */ | 89 | #define CAN_CTRLMODE_LISTENONLY 0x02 /* Listen-only mode */ |
| 82 | #define CAN_CTRLMODE_3_SAMPLES 0x4 /* Triple sampling mode */ | 90 | #define CAN_CTRLMODE_3_SAMPLES 0x04 /* Triple sampling mode */ |
| 91 | #define CAN_CTRLMODE_ONE_SHOT 0x08 /* One-Shot mode */ | ||
| 92 | #define CAN_CTRLMODE_BERR_REPORTING 0x10 /* Bus-error reporting */ | ||
| 83 | 93 | ||
| 84 | /* | 94 | /* |
| 85 | * CAN device statistics | 95 | * CAN device statistics |
| @@ -105,6 +115,7 @@ enum { | |||
| 105 | IFLA_CAN_CTRLMODE, | 115 | IFLA_CAN_CTRLMODE, |
| 106 | IFLA_CAN_RESTART_MS, | 116 | IFLA_CAN_RESTART_MS, |
| 107 | IFLA_CAN_RESTART, | 117 | IFLA_CAN_RESTART, |
| 118 | IFLA_CAN_BERR_COUNTER, | ||
| 108 | __IFLA_CAN_MAX | 119 | __IFLA_CAN_MAX |
| 109 | }; | 120 | }; |
| 110 | 121 | ||
diff --git a/include/linux/can/platform/flexcan.h b/include/linux/can/platform/flexcan.h new file mode 100644 index 000000000000..72b713ab57e9 --- /dev/null +++ b/include/linux/can/platform/flexcan.h | |||
| @@ -0,0 +1,20 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010 Marc Kleine-Budde <kernel@pengutronix.de> | ||
| 3 | * | ||
| 4 | * This file is released under the GPLv2 | ||
| 5 | * | ||
| 6 | */ | ||
| 7 | |||
| 8 | #ifndef __CAN_PLATFORM_FLEXCAN_H | ||
| 9 | #define __CAN_PLATFORM_FLEXCAN_H | ||
| 10 | |||
| 11 | /** | ||
| 12 | * struct flexcan_platform_data - flex CAN controller platform data | ||
| 13 | * @transceiver_enable: - called to power on/off the transceiver | ||
| 14 | * | ||
| 15 | */ | ||
| 16 | struct flexcan_platform_data { | ||
| 17 | void (*transceiver_switch)(int enable); | ||
| 18 | }; | ||
| 19 | |||
| 20 | #endif /* __CAN_PLATFORM_FLEXCAN_H */ | ||
diff --git a/include/linux/can/platform/mcp251x.h b/include/linux/can/platform/mcp251x.h index 1448177d86d5..dba28268e651 100644 --- a/include/linux/can/platform/mcp251x.h +++ b/include/linux/can/platform/mcp251x.h | |||
| @@ -26,8 +26,8 @@ | |||
| 26 | struct mcp251x_platform_data { | 26 | struct mcp251x_platform_data { |
| 27 | unsigned long oscillator_frequency; | 27 | unsigned long oscillator_frequency; |
| 28 | int model; | 28 | int model; |
| 29 | #define CAN_MCP251X_MCP2510 0 | 29 | #define CAN_MCP251X_MCP2510 0x2510 |
| 30 | #define CAN_MCP251X_MCP2515 1 | 30 | #define CAN_MCP251X_MCP2515 0x2515 |
| 31 | int (*board_specific_setup)(struct spi_device *spi); | 31 | int (*board_specific_setup)(struct spi_device *spi); |
| 32 | int (*transceiver_enable)(int enable); | 32 | int (*transceiver_enable)(int enable); |
| 33 | int (*power_enable) (int enable); | 33 | int (*power_enable) (int enable); |
diff --git a/include/linux/can/platform/sja1000.h b/include/linux/can/platform/sja1000.h index 01ee2aeb048d..96f8fcc78d78 100644 --- a/include/linux/can/platform/sja1000.h +++ b/include/linux/can/platform/sja1000.h | |||
| @@ -26,7 +26,7 @@ | |||
| 26 | #define OCR_TX_SHIFT 2 | 26 | #define OCR_TX_SHIFT 2 |
| 27 | 27 | ||
| 28 | struct sja1000_platform_data { | 28 | struct sja1000_platform_data { |
| 29 | u32 clock; /* CAN bus oscillator frequency in Hz */ | 29 | u32 osc_freq; /* CAN bus oscillator frequency in Hz */ |
| 30 | 30 | ||
| 31 | u8 ocr; /* output control register */ | 31 | u8 ocr; /* output control register */ |
| 32 | u8 cdr; /* clock divider register */ | 32 | u8 cdr; /* clock divider register */ |
diff --git a/include/linux/can/platform/ti_hecc.h b/include/linux/can/platform/ti_hecc.h index 4688c7bb1bd1..af17cb3f7a84 100644 --- a/include/linux/can/platform/ti_hecc.h +++ b/include/linux/can/platform/ti_hecc.h | |||
| @@ -1,3 +1,6 @@ | |||
| 1 | #ifndef __CAN_PLATFORM_TI_HECC_H__ | ||
| 2 | #define __CAN_PLATFORM_TI_HECC_H__ | ||
| 3 | |||
| 1 | /* | 4 | /* |
| 2 | * TI HECC (High End CAN Controller) driver platform header | 5 | * TI HECC (High End CAN Controller) driver platform header |
| 3 | * | 6 | * |
| @@ -23,6 +26,7 @@ | |||
| 23 | * @mbx_offset: Mailbox RAM offset | 26 | * @mbx_offset: Mailbox RAM offset |
| 24 | * @int_line: Interrupt line to use - 0 or 1 | 27 | * @int_line: Interrupt line to use - 0 or 1 |
| 25 | * @version: version for future use | 28 | * @version: version for future use |
| 29 | * @transceiver_switch: platform specific callback fn for transceiver control | ||
| 26 | * | 30 | * |
| 27 | * Platform data structure to get all platform specific settings. | 31 | * Platform data structure to get all platform specific settings. |
| 28 | * this structure also accounts the fact that the IP may have different | 32 | * this structure also accounts the fact that the IP may have different |
| @@ -35,6 +39,6 @@ struct ti_hecc_platform_data { | |||
| 35 | u32 mbx_offset; | 39 | u32 mbx_offset; |
| 36 | u32 int_line; | 40 | u32 int_line; |
| 37 | u32 version; | 41 | u32 version; |
| 42 | void (*transceiver_switch) (int); | ||
| 38 | }; | 43 | }; |
| 39 | 44 | #endif | |
| 40 | |||
