drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c

Source file repositories/reference/linux-study-clean/drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c

File Facts

System
Linux kernel
Corpus path
drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c
Extension
.c
Size
58537 bytes
Lines
2247
Domain
Driver Families
Bucket
drivers/net
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct kvaser_cmd_map_ch_req {
	char name[16];
	u8 channel;
	u8 reserved[11];
} __packed;

struct kvaser_cmd_map_ch_res {
	u8 he_addr;
	u8 channel;
	u8 reserved[26];
} __packed;

struct kvaser_cmd_card_info {
	__le32 serial_number;
	__le32 clock_res;
	__le32 mfg_date;
	__le32 ean[2];
	u8 hw_revision;
	u8 usb_mode;
	u8 hw_type;
	u8 reserved0;
	u8 nchannels;
	u8 reserved1[3];
} __packed;

struct kvaser_cmd_sw_info {
	u8 reserved0[8];
	__le16 max_outstanding_tx;
	u8 reserved1[18];
} __packed;

struct kvaser_cmd_sw_detail_req {
	u8 use_ext_cmd;
	u8 reserved[27];
} __packed;

/* Software detail flags */
#define KVASER_USB_HYDRA_SW_FLAG_FW_BETA	BIT(2)
#define KVASER_USB_HYDRA_SW_FLAG_FW_BAD		BIT(4)
#define KVASER_USB_HYDRA_SW_FLAG_FREQ_80M	BIT(5)
#define KVASER_USB_HYDRA_SW_FLAG_EXT_CMD	BIT(9)
#define KVASER_USB_HYDRA_SW_FLAG_CANFD		BIT(10)
#define KVASER_USB_HYDRA_SW_FLAG_NONISO		BIT(11)
#define KVASER_USB_HYDRA_SW_FLAG_EXT_CAP	BIT(12)
#define KVASER_USB_HYDRA_SW_FLAG_CAN_FREQ_80M	BIT(13)
struct kvaser_cmd_sw_detail_res {
	__le32 sw_flags;
	__le32 sw_version;
	__le32 sw_name;
	__le32 ean[2];
	__le32 max_bitrate;
	u8 reserved[4];
} __packed;

/* Sub commands for cap_req and cap_res */
#define KVASER_USB_HYDRA_CAP_CMD_LISTEN_MODE	0x02
#define KVASER_USB_HYDRA_CAP_CMD_ERR_REPORT	0x05
#define KVASER_USB_HYDRA_CAP_CMD_ONE_SHOT	0x06
struct kvaser_cmd_cap_req {
	__le16 cap_cmd;
	u8 reserved[26];
} __packed;

/* Status codes for cap_res */
#define KVASER_USB_HYDRA_CAP_STAT_OK		0x00
#define KVASER_USB_HYDRA_CAP_STAT_NOT_IMPL	0x01
#define KVASER_USB_HYDRA_CAP_STAT_UNAVAIL	0x02
struct kvaser_cmd_cap_res {
	__le16 cap_cmd;
	__le16 status;
	__le32 mask;
	__le32 value;
	u8 reserved[16];
} __packed;

/* CMD_ERROR_EVENT error codes */
#define KVASER_USB_HYDRA_ERROR_EVENT_CAN	0x01
#define KVASER_USB_HYDRA_ERROR_EVENT_PARAM	0x09
struct kvaser_cmd_error_event {
	__le16 timestamp[3];
	u8 reserved;
	u8 error_code;
	__le16 info1;
	__le16 info2;
} __packed;

/* Chip state status flags. Used for chip_state_event and err_frame_data. */
#define KVASER_USB_HYDRA_BUS_ERR_ACT		0x00
#define KVASER_USB_HYDRA_BUS_ERR_PASS		BIT(5)
#define KVASER_USB_HYDRA_BUS_BUS_OFF		BIT(6)

Annotation

Implementation Notes