18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*lcs.h*/
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ci#include <linux/interrupt.h>
58c2ecf20Sopenharmony_ci#include <linux/netdevice.h>
68c2ecf20Sopenharmony_ci#include <linux/skbuff.h>
78c2ecf20Sopenharmony_ci#include <linux/workqueue.h>
88c2ecf20Sopenharmony_ci#include <linux/refcount.h>
98c2ecf20Sopenharmony_ci#include <asm/ccwdev.h>
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#define LCS_DBF_TEXT(level, name, text) \
128c2ecf20Sopenharmony_ci	do { \
138c2ecf20Sopenharmony_ci		debug_text_event(lcs_dbf_##name, level, text); \
148c2ecf20Sopenharmony_ci	} while (0)
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci#define LCS_DBF_HEX(level,name,addr,len) \
178c2ecf20Sopenharmony_cido { \
188c2ecf20Sopenharmony_ci	debug_event(lcs_dbf_##name,level,(void*)(addr),len); \
198c2ecf20Sopenharmony_ci} while (0)
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ci#define LCS_DBF_TEXT_(level,name,text...) \
228c2ecf20Sopenharmony_ci	do { \
238c2ecf20Sopenharmony_ci		if (debug_level_enabled(lcs_dbf_##name, level)) { \
248c2ecf20Sopenharmony_ci			sprintf(debug_buffer, text); \
258c2ecf20Sopenharmony_ci			debug_text_event(lcs_dbf_##name, level, debug_buffer); \
268c2ecf20Sopenharmony_ci		} \
278c2ecf20Sopenharmony_ci	} while (0)
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci/**
308c2ecf20Sopenharmony_ci *	sysfs related stuff
318c2ecf20Sopenharmony_ci */
328c2ecf20Sopenharmony_ci#define CARD_FROM_DEV(cdev) \
338c2ecf20Sopenharmony_ci	(struct lcs_card *) dev_get_drvdata( \
348c2ecf20Sopenharmony_ci		&((struct ccwgroup_device *)dev_get_drvdata(&cdev->dev))->dev);
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ci/**
378c2ecf20Sopenharmony_ci * Enum for classifying detected devices.
388c2ecf20Sopenharmony_ci */
398c2ecf20Sopenharmony_cienum lcs_channel_types {
408c2ecf20Sopenharmony_ci	/* Device is not a channel  */
418c2ecf20Sopenharmony_ci	lcs_channel_type_none,
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_ci	/* Device is a 2216 channel */
448c2ecf20Sopenharmony_ci	lcs_channel_type_parallel,
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ci	/* Device is a 2216 channel */
478c2ecf20Sopenharmony_ci	lcs_channel_type_2216,
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ci	/* Device is a OSA2 card */
508c2ecf20Sopenharmony_ci	lcs_channel_type_osa2
518c2ecf20Sopenharmony_ci};
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci/**
548c2ecf20Sopenharmony_ci * CCW commands used in this driver
558c2ecf20Sopenharmony_ci */
568c2ecf20Sopenharmony_ci#define LCS_CCW_WRITE		0x01
578c2ecf20Sopenharmony_ci#define LCS_CCW_READ		0x02
588c2ecf20Sopenharmony_ci#define LCS_CCW_TRANSFER	0x08
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_ci/**
618c2ecf20Sopenharmony_ci * LCS device status primitives
628c2ecf20Sopenharmony_ci */
638c2ecf20Sopenharmony_ci#define LCS_CMD_STARTLAN	0x01
648c2ecf20Sopenharmony_ci#define LCS_CMD_STOPLAN		0x02
658c2ecf20Sopenharmony_ci#define LCS_CMD_LANSTAT		0x04
668c2ecf20Sopenharmony_ci#define LCS_CMD_STARTUP		0x07
678c2ecf20Sopenharmony_ci#define LCS_CMD_SHUTDOWN	0x08
688c2ecf20Sopenharmony_ci#define LCS_CMD_QIPASSIST	0xb2
698c2ecf20Sopenharmony_ci#define LCS_CMD_SETIPM		0xb4
708c2ecf20Sopenharmony_ci#define LCS_CMD_DELIPM		0xb5
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_ci#define LCS_INITIATOR_TCPIP	0x00
738c2ecf20Sopenharmony_ci#define LCS_INITIATOR_LGW	0x01
748c2ecf20Sopenharmony_ci#define LCS_STD_CMD_SIZE	16
758c2ecf20Sopenharmony_ci#define LCS_MULTICAST_CMD_SIZE	404
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ci/**
788c2ecf20Sopenharmony_ci * LCS IPASSIST MASKS,only used when multicast is switched on
798c2ecf20Sopenharmony_ci */
808c2ecf20Sopenharmony_ci/* Not supported by LCS */
818c2ecf20Sopenharmony_ci#define LCS_IPASS_ARP_PROCESSING	0x0001
828c2ecf20Sopenharmony_ci#define LCS_IPASS_IN_CHECKSUM_SUPPORT	0x0002
838c2ecf20Sopenharmony_ci#define LCS_IPASS_OUT_CHECKSUM_SUPPORT	0x0004
848c2ecf20Sopenharmony_ci#define LCS_IPASS_IP_FRAG_REASSEMBLY	0x0008
858c2ecf20Sopenharmony_ci#define LCS_IPASS_IP_FILTERING		0x0010
868c2ecf20Sopenharmony_ci/* Supported by lcs 3172 */
878c2ecf20Sopenharmony_ci#define LCS_IPASS_IPV6_SUPPORT		0x0020
888c2ecf20Sopenharmony_ci#define LCS_IPASS_MULTICAST_SUPPORT	0x0040
898c2ecf20Sopenharmony_ci
908c2ecf20Sopenharmony_ci/**
918c2ecf20Sopenharmony_ci * LCS sense byte definitions
928c2ecf20Sopenharmony_ci */
938c2ecf20Sopenharmony_ci#define LCS_SENSE_BYTE_0 		0
948c2ecf20Sopenharmony_ci#define LCS_SENSE_BYTE_1 		1
958c2ecf20Sopenharmony_ci#define LCS_SENSE_BYTE_2 		2
968c2ecf20Sopenharmony_ci#define LCS_SENSE_BYTE_3 		3
978c2ecf20Sopenharmony_ci#define LCS_SENSE_INTERFACE_DISCONNECT	0x01
988c2ecf20Sopenharmony_ci#define LCS_SENSE_EQUIPMENT_CHECK	0x10
998c2ecf20Sopenharmony_ci#define LCS_SENSE_BUS_OUT_CHECK		0x20
1008c2ecf20Sopenharmony_ci#define LCS_SENSE_INTERVENTION_REQUIRED 0x40
1018c2ecf20Sopenharmony_ci#define LCS_SENSE_CMD_REJECT		0x80
1028c2ecf20Sopenharmony_ci#define LCS_SENSE_RESETTING_EVENT	0x80
1038c2ecf20Sopenharmony_ci#define LCS_SENSE_DEVICE_ONLINE		0x20
1048c2ecf20Sopenharmony_ci
1058c2ecf20Sopenharmony_ci/**
1068c2ecf20Sopenharmony_ci * LCS packet type definitions
1078c2ecf20Sopenharmony_ci */
1088c2ecf20Sopenharmony_ci#define LCS_FRAME_TYPE_CONTROL		0
1098c2ecf20Sopenharmony_ci#define LCS_FRAME_TYPE_ENET		1
1108c2ecf20Sopenharmony_ci#define LCS_FRAME_TYPE_TR		2
1118c2ecf20Sopenharmony_ci#define LCS_FRAME_TYPE_FDDI		7
1128c2ecf20Sopenharmony_ci#define LCS_FRAME_TYPE_AUTO		-1
1138c2ecf20Sopenharmony_ci
1148c2ecf20Sopenharmony_ci/**
1158c2ecf20Sopenharmony_ci * some more definitions,we will sort them later
1168c2ecf20Sopenharmony_ci */
1178c2ecf20Sopenharmony_ci#define LCS_ILLEGAL_OFFSET		0xffff
1188c2ecf20Sopenharmony_ci#define LCS_IOBUFFERSIZE		0x5000
1198c2ecf20Sopenharmony_ci#define LCS_NUM_BUFFS			32	/* needs to be power of 2 */
1208c2ecf20Sopenharmony_ci#define LCS_MAC_LENGTH			6
1218c2ecf20Sopenharmony_ci#define LCS_INVALID_PORT_NO		-1
1228c2ecf20Sopenharmony_ci#define LCS_LANCMD_TIMEOUT_DEFAULT      5
1238c2ecf20Sopenharmony_ci
1248c2ecf20Sopenharmony_ci/**
1258c2ecf20Sopenharmony_ci * Multicast state
1268c2ecf20Sopenharmony_ci */
1278c2ecf20Sopenharmony_ci#define	 LCS_IPM_STATE_SET_REQUIRED	0
1288c2ecf20Sopenharmony_ci#define	 LCS_IPM_STATE_DEL_REQUIRED	1
1298c2ecf20Sopenharmony_ci#define	 LCS_IPM_STATE_ON_CARD		2
1308c2ecf20Sopenharmony_ci
1318c2ecf20Sopenharmony_ci/**
1328c2ecf20Sopenharmony_ci * LCS IP Assist declarations
1338c2ecf20Sopenharmony_ci * seems to be only used for multicast
1348c2ecf20Sopenharmony_ci */
1358c2ecf20Sopenharmony_ci#define	 LCS_IPASS_ARP_PROCESSING	0x0001
1368c2ecf20Sopenharmony_ci#define	 LCS_IPASS_INBOUND_CSUM_SUPP	0x0002
1378c2ecf20Sopenharmony_ci#define	 LCS_IPASS_OUTBOUND_CSUM_SUPP	0x0004
1388c2ecf20Sopenharmony_ci#define	 LCS_IPASS_IP_FRAG_REASSEMBLY	0x0008
1398c2ecf20Sopenharmony_ci#define	 LCS_IPASS_IP_FILTERING		0x0010
1408c2ecf20Sopenharmony_ci#define	 LCS_IPASS_IPV6_SUPPORT		0x0020
1418c2ecf20Sopenharmony_ci#define	 LCS_IPASS_MULTICAST_SUPPORT	0x0040
1428c2ecf20Sopenharmony_ci
1438c2ecf20Sopenharmony_ci/**
1448c2ecf20Sopenharmony_ci * LCS Buffer states
1458c2ecf20Sopenharmony_ci */
1468c2ecf20Sopenharmony_cienum lcs_buffer_states {
1478c2ecf20Sopenharmony_ci	LCS_BUF_STATE_EMPTY,	/* buffer is empty */
1488c2ecf20Sopenharmony_ci	LCS_BUF_STATE_LOCKED,	/* buffer is locked, don't touch */
1498c2ecf20Sopenharmony_ci	LCS_BUF_STATE_READY,	/* buffer is ready for read/write */
1508c2ecf20Sopenharmony_ci	LCS_BUF_STATE_PROCESSED,
1518c2ecf20Sopenharmony_ci};
1528c2ecf20Sopenharmony_ci
1538c2ecf20Sopenharmony_ci/**
1548c2ecf20Sopenharmony_ci * LCS Channel State Machine declarations
1558c2ecf20Sopenharmony_ci */
1568c2ecf20Sopenharmony_cienum lcs_channel_states {
1578c2ecf20Sopenharmony_ci	LCS_CH_STATE_INIT,
1588c2ecf20Sopenharmony_ci	LCS_CH_STATE_HALTED,
1598c2ecf20Sopenharmony_ci	LCS_CH_STATE_STOPPED,
1608c2ecf20Sopenharmony_ci	LCS_CH_STATE_RUNNING,
1618c2ecf20Sopenharmony_ci	LCS_CH_STATE_SUSPENDED,
1628c2ecf20Sopenharmony_ci	LCS_CH_STATE_CLEARED,
1638c2ecf20Sopenharmony_ci	LCS_CH_STATE_ERROR,
1648c2ecf20Sopenharmony_ci};
1658c2ecf20Sopenharmony_ci
1668c2ecf20Sopenharmony_ci/**
1678c2ecf20Sopenharmony_ci * LCS device state machine
1688c2ecf20Sopenharmony_ci */
1698c2ecf20Sopenharmony_cienum lcs_dev_states {
1708c2ecf20Sopenharmony_ci	DEV_STATE_DOWN,
1718c2ecf20Sopenharmony_ci	DEV_STATE_UP,
1728c2ecf20Sopenharmony_ci	DEV_STATE_RECOVER,
1738c2ecf20Sopenharmony_ci};
1748c2ecf20Sopenharmony_ci
1758c2ecf20Sopenharmony_cienum lcs_threads {
1768c2ecf20Sopenharmony_ci	LCS_SET_MC_THREAD 	= 1,
1778c2ecf20Sopenharmony_ci	LCS_RECOVERY_THREAD 	= 2,
1788c2ecf20Sopenharmony_ci};
1798c2ecf20Sopenharmony_ci
1808c2ecf20Sopenharmony_ci/**
1818c2ecf20Sopenharmony_ci * LCS struct declarations
1828c2ecf20Sopenharmony_ci */
1838c2ecf20Sopenharmony_cistruct lcs_header {
1848c2ecf20Sopenharmony_ci	__u16  offset;
1858c2ecf20Sopenharmony_ci	__u8   type;
1868c2ecf20Sopenharmony_ci	__u8   slot;
1878c2ecf20Sopenharmony_ci}  __attribute__ ((packed));
1888c2ecf20Sopenharmony_ci
1898c2ecf20Sopenharmony_cistruct lcs_ip_mac_pair {
1908c2ecf20Sopenharmony_ci	__be32  ip_addr;
1918c2ecf20Sopenharmony_ci	__u8   mac_addr[LCS_MAC_LENGTH];
1928c2ecf20Sopenharmony_ci	__u8   reserved[2];
1938c2ecf20Sopenharmony_ci}  __attribute__ ((packed));
1948c2ecf20Sopenharmony_ci
1958c2ecf20Sopenharmony_cistruct lcs_ipm_list {
1968c2ecf20Sopenharmony_ci	struct list_head list;
1978c2ecf20Sopenharmony_ci	struct lcs_ip_mac_pair ipm;
1988c2ecf20Sopenharmony_ci	__u8 ipm_state;
1998c2ecf20Sopenharmony_ci};
2008c2ecf20Sopenharmony_ci
2018c2ecf20Sopenharmony_cistruct lcs_cmd {
2028c2ecf20Sopenharmony_ci	__u16  offset;
2038c2ecf20Sopenharmony_ci	__u8   type;
2048c2ecf20Sopenharmony_ci	__u8   slot;
2058c2ecf20Sopenharmony_ci	__u8   cmd_code;
2068c2ecf20Sopenharmony_ci	__u8   initiator;
2078c2ecf20Sopenharmony_ci	__u16  sequence_no;
2088c2ecf20Sopenharmony_ci	__u16  return_code;
2098c2ecf20Sopenharmony_ci	union {
2108c2ecf20Sopenharmony_ci		struct {
2118c2ecf20Sopenharmony_ci			__u8   lan_type;
2128c2ecf20Sopenharmony_ci			__u8   portno;
2138c2ecf20Sopenharmony_ci			__u16  parameter_count;
2148c2ecf20Sopenharmony_ci			__u8   operator_flags[3];
2158c2ecf20Sopenharmony_ci			__u8   reserved[3];
2168c2ecf20Sopenharmony_ci		} lcs_std_cmd;
2178c2ecf20Sopenharmony_ci		struct {
2188c2ecf20Sopenharmony_ci			__u16  unused1;
2198c2ecf20Sopenharmony_ci			__u16  buff_size;
2208c2ecf20Sopenharmony_ci			__u8   unused2[6];
2218c2ecf20Sopenharmony_ci		} lcs_startup;
2228c2ecf20Sopenharmony_ci		struct {
2238c2ecf20Sopenharmony_ci			__u8   lan_type;
2248c2ecf20Sopenharmony_ci			__u8   portno;
2258c2ecf20Sopenharmony_ci			__u8   unused[10];
2268c2ecf20Sopenharmony_ci			__u8   mac_addr[LCS_MAC_LENGTH];
2278c2ecf20Sopenharmony_ci			__u32  num_packets_deblocked;
2288c2ecf20Sopenharmony_ci			__u32  num_packets_blocked;
2298c2ecf20Sopenharmony_ci			__u32  num_packets_tx_on_lan;
2308c2ecf20Sopenharmony_ci			__u32  num_tx_errors_detected;
2318c2ecf20Sopenharmony_ci			__u32  num_tx_packets_disgarded;
2328c2ecf20Sopenharmony_ci			__u32  num_packets_rx_from_lan;
2338c2ecf20Sopenharmony_ci			__u32  num_rx_errors_detected;
2348c2ecf20Sopenharmony_ci			__u32  num_rx_discarded_nobuffs_avail;
2358c2ecf20Sopenharmony_ci			__u32  num_rx_packets_too_large;
2368c2ecf20Sopenharmony_ci		} lcs_lanstat_cmd;
2378c2ecf20Sopenharmony_ci#ifdef CONFIG_IP_MULTICAST
2388c2ecf20Sopenharmony_ci		struct {
2398c2ecf20Sopenharmony_ci			__u8   lan_type;
2408c2ecf20Sopenharmony_ci			__u8   portno;
2418c2ecf20Sopenharmony_ci			__u16  num_ip_pairs;
2428c2ecf20Sopenharmony_ci			__u16  ip_assists_supported;
2438c2ecf20Sopenharmony_ci			__u16  ip_assists_enabled;
2448c2ecf20Sopenharmony_ci			__u16  version;
2458c2ecf20Sopenharmony_ci			struct {
2468c2ecf20Sopenharmony_ci				struct lcs_ip_mac_pair
2478c2ecf20Sopenharmony_ci				ip_mac_pair[32];
2488c2ecf20Sopenharmony_ci				__u32	  response_data;
2498c2ecf20Sopenharmony_ci			} lcs_ipass_ctlmsg __attribute ((packed));
2508c2ecf20Sopenharmony_ci		} lcs_qipassist __attribute__ ((packed));
2518c2ecf20Sopenharmony_ci#endif /*CONFIG_IP_MULTICAST */
2528c2ecf20Sopenharmony_ci	} cmd __attribute__ ((packed));
2538c2ecf20Sopenharmony_ci}  __attribute__ ((packed));
2548c2ecf20Sopenharmony_ci
2558c2ecf20Sopenharmony_ci/**
2568c2ecf20Sopenharmony_ci * Forward declarations.
2578c2ecf20Sopenharmony_ci */
2588c2ecf20Sopenharmony_cistruct lcs_card;
2598c2ecf20Sopenharmony_cistruct lcs_channel;
2608c2ecf20Sopenharmony_ci
2618c2ecf20Sopenharmony_ci/**
2628c2ecf20Sopenharmony_ci * Definition of an lcs buffer.
2638c2ecf20Sopenharmony_ci */
2648c2ecf20Sopenharmony_cistruct lcs_buffer {
2658c2ecf20Sopenharmony_ci	enum lcs_buffer_states state;
2668c2ecf20Sopenharmony_ci	void *data;
2678c2ecf20Sopenharmony_ci	int count;
2688c2ecf20Sopenharmony_ci	/* Callback for completion notification. */
2698c2ecf20Sopenharmony_ci	void (*callback)(struct lcs_channel *, struct lcs_buffer *);
2708c2ecf20Sopenharmony_ci};
2718c2ecf20Sopenharmony_ci
2728c2ecf20Sopenharmony_cistruct lcs_reply {
2738c2ecf20Sopenharmony_ci	struct list_head list;
2748c2ecf20Sopenharmony_ci	__u16 sequence_no;
2758c2ecf20Sopenharmony_ci	refcount_t refcnt;
2768c2ecf20Sopenharmony_ci	/* Callback for completion notification. */
2778c2ecf20Sopenharmony_ci	void (*callback)(struct lcs_card *, struct lcs_cmd *);
2788c2ecf20Sopenharmony_ci	wait_queue_head_t wait_q;
2798c2ecf20Sopenharmony_ci	struct lcs_card *card;
2808c2ecf20Sopenharmony_ci	struct timer_list timer;
2818c2ecf20Sopenharmony_ci	int received;
2828c2ecf20Sopenharmony_ci	int rc;
2838c2ecf20Sopenharmony_ci};
2848c2ecf20Sopenharmony_ci
2858c2ecf20Sopenharmony_ci/**
2868c2ecf20Sopenharmony_ci * Definition of an lcs channel
2878c2ecf20Sopenharmony_ci */
2888c2ecf20Sopenharmony_cistruct lcs_channel {
2898c2ecf20Sopenharmony_ci	enum lcs_channel_states state;
2908c2ecf20Sopenharmony_ci	struct ccw_device *ccwdev;
2918c2ecf20Sopenharmony_ci	struct ccw1 ccws[LCS_NUM_BUFFS + 1];
2928c2ecf20Sopenharmony_ci	wait_queue_head_t wait_q;
2938c2ecf20Sopenharmony_ci	struct tasklet_struct irq_tasklet;
2948c2ecf20Sopenharmony_ci	struct lcs_buffer iob[LCS_NUM_BUFFS];
2958c2ecf20Sopenharmony_ci	int io_idx;
2968c2ecf20Sopenharmony_ci	int buf_idx;
2978c2ecf20Sopenharmony_ci};
2988c2ecf20Sopenharmony_ci
2998c2ecf20Sopenharmony_ci
3008c2ecf20Sopenharmony_ci/**
3018c2ecf20Sopenharmony_ci * definition of the lcs card
3028c2ecf20Sopenharmony_ci */
3038c2ecf20Sopenharmony_cistruct lcs_card {
3048c2ecf20Sopenharmony_ci	spinlock_t lock;
3058c2ecf20Sopenharmony_ci	spinlock_t ipm_lock;
3068c2ecf20Sopenharmony_ci	enum lcs_dev_states state;
3078c2ecf20Sopenharmony_ci	struct net_device *dev;
3088c2ecf20Sopenharmony_ci	struct net_device_stats stats;
3098c2ecf20Sopenharmony_ci	__be16 (*lan_type_trans)(struct sk_buff *skb,
3108c2ecf20Sopenharmony_ci					 struct net_device *dev);
3118c2ecf20Sopenharmony_ci	struct ccwgroup_device *gdev;
3128c2ecf20Sopenharmony_ci	struct lcs_channel read;
3138c2ecf20Sopenharmony_ci	struct lcs_channel write;
3148c2ecf20Sopenharmony_ci	struct lcs_buffer *tx_buffer;
3158c2ecf20Sopenharmony_ci	int tx_emitted;
3168c2ecf20Sopenharmony_ci	struct list_head lancmd_waiters;
3178c2ecf20Sopenharmony_ci	int lancmd_timeout;
3188c2ecf20Sopenharmony_ci
3198c2ecf20Sopenharmony_ci	struct work_struct kernel_thread_starter;
3208c2ecf20Sopenharmony_ci	spinlock_t mask_lock;
3218c2ecf20Sopenharmony_ci	unsigned long thread_start_mask;
3228c2ecf20Sopenharmony_ci	unsigned long thread_running_mask;
3238c2ecf20Sopenharmony_ci	unsigned long thread_allowed_mask;
3248c2ecf20Sopenharmony_ci	wait_queue_head_t wait_q;
3258c2ecf20Sopenharmony_ci
3268c2ecf20Sopenharmony_ci#ifdef CONFIG_IP_MULTICAST
3278c2ecf20Sopenharmony_ci	struct list_head ipm_list;
3288c2ecf20Sopenharmony_ci#endif
3298c2ecf20Sopenharmony_ci	__u8 mac[LCS_MAC_LENGTH];
3308c2ecf20Sopenharmony_ci	__u16 ip_assists_supported;
3318c2ecf20Sopenharmony_ci	__u16 ip_assists_enabled;
3328c2ecf20Sopenharmony_ci	__s8 lan_type;
3338c2ecf20Sopenharmony_ci	__u32 pkt_seq;
3348c2ecf20Sopenharmony_ci	__u16 sequence_no;
3358c2ecf20Sopenharmony_ci	__s16 portno;
3368c2ecf20Sopenharmony_ci	/* Some info copied from probeinfo */
3378c2ecf20Sopenharmony_ci	u8 device_forced;
3388c2ecf20Sopenharmony_ci	u8 max_port_no;
3398c2ecf20Sopenharmony_ci	u8 hint_port_no;
3408c2ecf20Sopenharmony_ci	s16 port_protocol_no;
3418c2ecf20Sopenharmony_ci}  __attribute__ ((aligned(8)));
3428c2ecf20Sopenharmony_ci
343