aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/scsi/iscsi_if.h230
-rw-r--r--include/scsi/libiscsi.h1
-rw-r--r--include/scsi/scsi_cmnd.h1
-rw-r--r--include/scsi/scsi_driver.h2
-rw-r--r--include/scsi/scsi_host.h10
-rw-r--r--include/scsi/scsi_transport_iscsi.h4
6 files changed, 228 insertions, 20 deletions
diff --git a/include/scsi/iscsi_if.h b/include/scsi/iscsi_if.h
index 5d6ed6cf12cc..fd0421c6d40a 100644
--- a/include/scsi/iscsi_if.h
+++ b/include/scsi/iscsi_if.h
@@ -70,6 +70,7 @@ enum iscsi_uevent_e {
70 ISCSI_UEVENT_LOGOUT_FLASHNODE = UEVENT_BASE + 29, 70 ISCSI_UEVENT_LOGOUT_FLASHNODE = UEVENT_BASE + 29,
71 ISCSI_UEVENT_LOGOUT_FLASHNODE_SID = UEVENT_BASE + 30, 71 ISCSI_UEVENT_LOGOUT_FLASHNODE_SID = UEVENT_BASE + 30,
72 ISCSI_UEVENT_SET_CHAP = UEVENT_BASE + 31, 72 ISCSI_UEVENT_SET_CHAP = UEVENT_BASE + 31,
73 ISCSI_UEVENT_GET_HOST_STATS = UEVENT_BASE + 32,
73 74
74 /* up events */ 75 /* up events */
75 ISCSI_KEVENT_RECV_PDU = KEVENT_BASE + 1, 76 ISCSI_KEVENT_RECV_PDU = KEVENT_BASE + 1,
@@ -242,6 +243,9 @@ struct iscsi_uevent {
242 uint32_t host_no; 243 uint32_t host_no;
243 uint32_t sid; 244 uint32_t sid;
244 } logout_flashnode_sid; 245 } logout_flashnode_sid;
246 struct msg_get_host_stats {
247 uint32_t host_no;
248 } get_host_stats;
245 } u; 249 } u;
246 union { 250 union {
247 /* messages k -> u */ 251 /* messages k -> u */
@@ -311,6 +315,7 @@ enum iscsi_param_type {
311 ISCSI_NET_PARAM, /* iscsi_net_param */ 315 ISCSI_NET_PARAM, /* iscsi_net_param */
312 ISCSI_FLASHNODE_PARAM, /* iscsi_flashnode_param */ 316 ISCSI_FLASHNODE_PARAM, /* iscsi_flashnode_param */
313 ISCSI_CHAP_PARAM, /* iscsi_chap_param */ 317 ISCSI_CHAP_PARAM, /* iscsi_chap_param */
318 ISCSI_IFACE_PARAM, /* iscsi_iface_param */
314}; 319};
315 320
316/* structure for minimalist usecase */ 321/* structure for minimalist usecase */
@@ -383,28 +388,106 @@ struct iscsi_path {
383#define ISCSI_VLAN_DISABLE 0x01 388#define ISCSI_VLAN_DISABLE 0x01
384#define ISCSI_VLAN_ENABLE 0x02 389#define ISCSI_VLAN_ENABLE 0x02
385 390
391/* iscsi generic enable/disabled setting for various features */
392#define ISCSI_NET_PARAM_DISABLE 0x01
393#define ISCSI_NET_PARAM_ENABLE 0x02
394
386/* iSCSI network params */ 395/* iSCSI network params */
387enum iscsi_net_param { 396enum iscsi_net_param {
388 ISCSI_NET_PARAM_IPV4_ADDR = 1, 397 ISCSI_NET_PARAM_IPV4_ADDR = 1,
389 ISCSI_NET_PARAM_IPV4_SUBNET = 2, 398 ISCSI_NET_PARAM_IPV4_SUBNET,
390 ISCSI_NET_PARAM_IPV4_GW = 3, 399 ISCSI_NET_PARAM_IPV4_GW,
391 ISCSI_NET_PARAM_IPV4_BOOTPROTO = 4, 400 ISCSI_NET_PARAM_IPV4_BOOTPROTO,
392 ISCSI_NET_PARAM_MAC = 5, 401 ISCSI_NET_PARAM_MAC,
393 ISCSI_NET_PARAM_IPV6_LINKLOCAL = 6, 402 ISCSI_NET_PARAM_IPV6_LINKLOCAL,
394 ISCSI_NET_PARAM_IPV6_ADDR = 7, 403 ISCSI_NET_PARAM_IPV6_ADDR,
395 ISCSI_NET_PARAM_IPV6_ROUTER = 8, 404 ISCSI_NET_PARAM_IPV6_ROUTER,
396 ISCSI_NET_PARAM_IPV6_ADDR_AUTOCFG = 9, 405 ISCSI_NET_PARAM_IPV6_ADDR_AUTOCFG,
397 ISCSI_NET_PARAM_IPV6_LINKLOCAL_AUTOCFG = 10, 406 ISCSI_NET_PARAM_IPV6_LINKLOCAL_AUTOCFG,
398 ISCSI_NET_PARAM_IPV6_ROUTER_AUTOCFG = 11, 407 ISCSI_NET_PARAM_IPV6_ROUTER_AUTOCFG,
399 ISCSI_NET_PARAM_IFACE_ENABLE = 12, 408 ISCSI_NET_PARAM_IFACE_ENABLE,
400 ISCSI_NET_PARAM_VLAN_ID = 13, 409 ISCSI_NET_PARAM_VLAN_ID,
401 ISCSI_NET_PARAM_VLAN_PRIORITY = 14, 410 ISCSI_NET_PARAM_VLAN_PRIORITY,
402 ISCSI_NET_PARAM_VLAN_ENABLED = 15, 411 ISCSI_NET_PARAM_VLAN_ENABLED,
403 ISCSI_NET_PARAM_VLAN_TAG = 16, 412 ISCSI_NET_PARAM_VLAN_TAG,
404 ISCSI_NET_PARAM_IFACE_TYPE = 17, 413 ISCSI_NET_PARAM_IFACE_TYPE,
405 ISCSI_NET_PARAM_IFACE_NAME = 18, 414 ISCSI_NET_PARAM_IFACE_NAME,
406 ISCSI_NET_PARAM_MTU = 19, 415 ISCSI_NET_PARAM_MTU,
407 ISCSI_NET_PARAM_PORT = 20, 416 ISCSI_NET_PARAM_PORT,
417 ISCSI_NET_PARAM_IPADDR_STATE,
418 ISCSI_NET_PARAM_IPV6_LINKLOCAL_STATE,
419 ISCSI_NET_PARAM_IPV6_ROUTER_STATE,
420 ISCSI_NET_PARAM_DELAYED_ACK_EN,
421 ISCSI_NET_PARAM_TCP_NAGLE_DISABLE,
422 ISCSI_NET_PARAM_TCP_WSF_DISABLE,
423 ISCSI_NET_PARAM_TCP_WSF,
424 ISCSI_NET_PARAM_TCP_TIMER_SCALE,
425 ISCSI_NET_PARAM_TCP_TIMESTAMP_EN,
426 ISCSI_NET_PARAM_CACHE_ID,
427 ISCSI_NET_PARAM_IPV4_DHCP_DNS_ADDR_EN,
428 ISCSI_NET_PARAM_IPV4_DHCP_SLP_DA_EN,
429 ISCSI_NET_PARAM_IPV4_TOS_EN,
430 ISCSI_NET_PARAM_IPV4_TOS,
431 ISCSI_NET_PARAM_IPV4_GRAT_ARP_EN,
432 ISCSI_NET_PARAM_IPV4_DHCP_ALT_CLIENT_ID_EN,
433 ISCSI_NET_PARAM_IPV4_DHCP_ALT_CLIENT_ID,
434 ISCSI_NET_PARAM_IPV4_DHCP_REQ_VENDOR_ID_EN,
435 ISCSI_NET_PARAM_IPV4_DHCP_USE_VENDOR_ID_EN,
436 ISCSI_NET_PARAM_IPV4_DHCP_VENDOR_ID,
437 ISCSI_NET_PARAM_IPV4_DHCP_LEARN_IQN_EN,
438 ISCSI_NET_PARAM_IPV4_FRAGMENT_DISABLE,
439 ISCSI_NET_PARAM_IPV4_IN_FORWARD_EN,
440 ISCSI_NET_PARAM_IPV4_TTL,
441 ISCSI_NET_PARAM_IPV6_GRAT_NEIGHBOR_ADV_EN,
442 ISCSI_NET_PARAM_IPV6_MLD_EN,
443 ISCSI_NET_PARAM_IPV6_FLOW_LABEL,
444 ISCSI_NET_PARAM_IPV6_TRAFFIC_CLASS,
445 ISCSI_NET_PARAM_IPV6_HOP_LIMIT,
446 ISCSI_NET_PARAM_IPV6_ND_REACHABLE_TMO,
447 ISCSI_NET_PARAM_IPV6_ND_REXMIT_TIME,
448 ISCSI_NET_PARAM_IPV6_ND_STALE_TMO,
449 ISCSI_NET_PARAM_IPV6_DUP_ADDR_DETECT_CNT,
450 ISCSI_NET_PARAM_IPV6_RTR_ADV_LINK_MTU,
451 ISCSI_NET_PARAM_REDIRECT_EN,
452};
453
454enum iscsi_ipaddress_state {
455 ISCSI_IPDDRESS_STATE_UNCONFIGURED,
456 ISCSI_IPDDRESS_STATE_ACQUIRING,
457 ISCSI_IPDDRESS_STATE_TENTATIVE,
458 ISCSI_IPDDRESS_STATE_VALID,
459 ISCSI_IPDDRESS_STATE_DISABLING,
460 ISCSI_IPDDRESS_STATE_INVALID,
461 ISCSI_IPDDRESS_STATE_DEPRECATED,
462};
463
464enum iscsi_router_state {
465 ISCSI_ROUTER_STATE_UNKNOWN,
466 ISCSI_ROUTER_STATE_ADVERTISED,
467 ISCSI_ROUTER_STATE_MANUAL,
468 ISCSI_ROUTER_STATE_STALE,
469};
470
471/* iSCSI specific settings params for iface */
472enum iscsi_iface_param {
473 ISCSI_IFACE_PARAM_DEF_TASKMGMT_TMO,
474 ISCSI_IFACE_PARAM_HDRDGST_EN,
475 ISCSI_IFACE_PARAM_DATADGST_EN,
476 ISCSI_IFACE_PARAM_IMM_DATA_EN,
477 ISCSI_IFACE_PARAM_INITIAL_R2T_EN,
478 ISCSI_IFACE_PARAM_DATASEQ_INORDER_EN,
479 ISCSI_IFACE_PARAM_PDU_INORDER_EN,
480 ISCSI_IFACE_PARAM_ERL,
481 ISCSI_IFACE_PARAM_MAX_RECV_DLENGTH,
482 ISCSI_IFACE_PARAM_FIRST_BURST,
483 ISCSI_IFACE_PARAM_MAX_R2T,
484 ISCSI_IFACE_PARAM_MAX_BURST,
485 ISCSI_IFACE_PARAM_CHAP_AUTH_EN,
486 ISCSI_IFACE_PARAM_BIDI_CHAP_EN,
487 ISCSI_IFACE_PARAM_DISCOVERY_AUTH_OPTIONAL,
488 ISCSI_IFACE_PARAM_DISCOVERY_LOGOUT_EN,
489 ISCSI_IFACE_PARAM_STRICT_LOGIN_COMP_EN,
490 ISCSI_IFACE_PARAM_INITIATOR_NAME,
408}; 491};
409 492
410enum iscsi_conn_state { 493enum iscsi_conn_state {
@@ -535,6 +618,7 @@ enum iscsi_param {
535 618
536 ISCSI_PARAM_DISCOVERY_PARENT_IDX, 619 ISCSI_PARAM_DISCOVERY_PARENT_IDX,
537 ISCSI_PARAM_DISCOVERY_PARENT_TYPE, 620 ISCSI_PARAM_DISCOVERY_PARENT_TYPE,
621 ISCSI_PARAM_LOCAL_IPADDR,
538 /* must always be last */ 622 /* must always be last */
539 ISCSI_PARAM_MAX, 623 ISCSI_PARAM_MAX,
540}; 624};
@@ -766,4 +850,112 @@ struct iscsi_chap_rec {
766 uint8_t password_length; 850 uint8_t password_length;
767}; 851};
768 852
853#define ISCSI_HOST_STATS_CUSTOM_MAX 32
854#define ISCSI_HOST_STATS_CUSTOM_DESC_MAX 64
855struct iscsi_host_stats_custom {
856 char desc[ISCSI_HOST_STATS_CUSTOM_DESC_MAX];
857 uint64_t value;
858};
859
860/* struct iscsi_offload_host_stats: Host statistics,
861 * Include statistics for MAC, IP, TCP & iSCSI.
862 */
863struct iscsi_offload_host_stats {
864 /* MAC */
865 uint64_t mactx_frames;
866 uint64_t mactx_bytes;
867 uint64_t mactx_multicast_frames;
868 uint64_t mactx_broadcast_frames;
869 uint64_t mactx_pause_frames;
870 uint64_t mactx_control_frames;
871 uint64_t mactx_deferral;
872 uint64_t mactx_excess_deferral;
873 uint64_t mactx_late_collision;
874 uint64_t mactx_abort;
875 uint64_t mactx_single_collision;
876 uint64_t mactx_multiple_collision;
877 uint64_t mactx_collision;
878 uint64_t mactx_frames_dropped;
879 uint64_t mactx_jumbo_frames;
880 uint64_t macrx_frames;
881 uint64_t macrx_bytes;
882 uint64_t macrx_unknown_control_frames;
883 uint64_t macrx_pause_frames;
884 uint64_t macrx_control_frames;
885 uint64_t macrx_dribble;
886 uint64_t macrx_frame_length_error;
887 uint64_t macrx_jabber;
888 uint64_t macrx_carrier_sense_error;
889 uint64_t macrx_frame_discarded;
890 uint64_t macrx_frames_dropped;
891 uint64_t mac_crc_error;
892 uint64_t mac_encoding_error;
893 uint64_t macrx_length_error_large;
894 uint64_t macrx_length_error_small;
895 uint64_t macrx_multicast_frames;
896 uint64_t macrx_broadcast_frames;
897 /* IP */
898 uint64_t iptx_packets;
899 uint64_t iptx_bytes;
900 uint64_t iptx_fragments;
901 uint64_t iprx_packets;
902 uint64_t iprx_bytes;
903 uint64_t iprx_fragments;
904 uint64_t ip_datagram_reassembly;
905 uint64_t ip_invalid_address_error;
906 uint64_t ip_error_packets;
907 uint64_t ip_fragrx_overlap;
908 uint64_t ip_fragrx_outoforder;
909 uint64_t ip_datagram_reassembly_timeout;
910 uint64_t ipv6tx_packets;
911 uint64_t ipv6tx_bytes;
912 uint64_t ipv6tx_fragments;
913 uint64_t ipv6rx_packets;
914 uint64_t ipv6rx_bytes;
915 uint64_t ipv6rx_fragments;
916 uint64_t ipv6_datagram_reassembly;
917 uint64_t ipv6_invalid_address_error;
918 uint64_t ipv6_error_packets;
919 uint64_t ipv6_fragrx_overlap;
920 uint64_t ipv6_fragrx_outoforder;
921 uint64_t ipv6_datagram_reassembly_timeout;
922 /* TCP */
923 uint64_t tcptx_segments;
924 uint64_t tcptx_bytes;
925 uint64_t tcprx_segments;
926 uint64_t tcprx_byte;
927 uint64_t tcp_duplicate_ack_retx;
928 uint64_t tcp_retx_timer_expired;
929 uint64_t tcprx_duplicate_ack;
930 uint64_t tcprx_pure_ackr;
931 uint64_t tcptx_delayed_ack;
932 uint64_t tcptx_pure_ack;
933 uint64_t tcprx_segment_error;
934 uint64_t tcprx_segment_outoforder;
935 uint64_t tcprx_window_probe;
936 uint64_t tcprx_window_update;
937 uint64_t tcptx_window_probe_persist;
938 /* ECC */
939 uint64_t ecc_error_correction;
940 /* iSCSI */
941 uint64_t iscsi_pdu_tx;
942 uint64_t iscsi_data_bytes_tx;
943 uint64_t iscsi_pdu_rx;
944 uint64_t iscsi_data_bytes_rx;
945 uint64_t iscsi_io_completed;
946 uint64_t iscsi_unexpected_io_rx;
947 uint64_t iscsi_format_error;
948 uint64_t iscsi_hdr_digest_error;
949 uint64_t iscsi_data_digest_error;
950 uint64_t iscsi_sequence_error;
951 /*
952 * iSCSI Custom Host Statistics support, i.e. Transport could
953 * extend existing host statistics with its own specific statistics
954 * up to ISCSI_HOST_STATS_CUSTOM_MAX
955 */
956 uint32_t custom_length;
957 struct iscsi_host_stats_custom custom[0]
958 __aligned(sizeof(uint64_t));
959};
960
769#endif 961#endif
diff --git a/include/scsi/libiscsi.h b/include/scsi/libiscsi.h
index 6ac9e17acdc4..309f51336fb9 100644
--- a/include/scsi/libiscsi.h
+++ b/include/scsi/libiscsi.h
@@ -231,6 +231,7 @@ struct iscsi_conn {
231 uint8_t ipv6_traffic_class; 231 uint8_t ipv6_traffic_class;
232 uint8_t ipv6_flow_label; 232 uint8_t ipv6_flow_label;
233 uint8_t is_fw_assigned_ipv6; 233 uint8_t is_fw_assigned_ipv6;
234 char *local_ipaddr;
234 235
235 /* MIB-statistics */ 236 /* MIB-statistics */
236 uint64_t txdata_octets; 237 uint64_t txdata_octets;
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h
index de5f5d8f1f8a..91558a1f97f4 100644
--- a/include/scsi/scsi_cmnd.h
+++ b/include/scsi/scsi_cmnd.h
@@ -55,6 +55,7 @@ struct scsi_cmnd {
55 struct scsi_device *device; 55 struct scsi_device *device;
56 struct list_head list; /* scsi_cmnd participates in queue lists */ 56 struct list_head list; /* scsi_cmnd participates in queue lists */
57 struct list_head eh_entry; /* entry for the host eh_cmd_q */ 57 struct list_head eh_entry; /* entry for the host eh_cmd_q */
58 struct delayed_work abort_work;
58 int eh_eflags; /* Used by error handlr */ 59 int eh_eflags; /* Used by error handlr */
59 60
60 /* 61 /*
diff --git a/include/scsi/scsi_driver.h b/include/scsi/scsi_driver.h
index d443aa06a722..20fdfc2526ad 100644
--- a/include/scsi/scsi_driver.h
+++ b/include/scsi/scsi_driver.h
@@ -16,7 +16,7 @@ struct scsi_driver {
16 16
17 void (*rescan)(struct device *); 17 void (*rescan)(struct device *);
18 int (*done)(struct scsi_cmnd *); 18 int (*done)(struct scsi_cmnd *);
19 int (*eh_action)(struct scsi_cmnd *, unsigned char *, int, int); 19 int (*eh_action)(struct scsi_cmnd *, int);
20}; 20};
21#define to_scsi_driver(drv) \ 21#define to_scsi_driver(drv) \
22 container_of((drv), struct scsi_driver, gendrv) 22 container_of((drv), struct scsi_driver, gendrv)
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
index fe3b58e836c8..53075e5039e6 100644
--- a/include/scsi/scsi_host.h
+++ b/include/scsi/scsi_host.h
@@ -479,6 +479,11 @@ struct scsi_host_template {
479 unsigned no_write_same:1; 479 unsigned no_write_same:1;
480 480
481 /* 481 /*
482 * True if asynchronous aborts are not supported
483 */
484 unsigned no_async_abort:1;
485
486 /*
482 * Countdown for host blocking with no commands outstanding. 487 * Countdown for host blocking with no commands outstanding.
483 */ 488 */
484 unsigned int max_host_blocked; 489 unsigned int max_host_blocked;
@@ -690,6 +695,11 @@ struct Scsi_Host {
690 struct workqueue_struct *work_q; 695 struct workqueue_struct *work_q;
691 696
692 /* 697 /*
698 * Task management function work queue
699 */
700 struct workqueue_struct *tmf_work_q;
701
702 /*
693 * Host has rejected a command because it was busy. 703 * Host has rejected a command because it was busy.
694 */ 704 */
695 unsigned int host_blocked; 705 unsigned int host_blocked;
diff --git a/include/scsi/scsi_transport_iscsi.h b/include/scsi/scsi_transport_iscsi.h
index fe7c8f3e93f8..88640a47216c 100644
--- a/include/scsi/scsi_transport_iscsi.h
+++ b/include/scsi/scsi_transport_iscsi.h
@@ -166,6 +166,7 @@ struct iscsi_transport {
166 int (*logout_flashnode) (struct iscsi_bus_flash_session *fnode_sess, 166 int (*logout_flashnode) (struct iscsi_bus_flash_session *fnode_sess,
167 struct iscsi_bus_flash_conn *fnode_conn); 167 struct iscsi_bus_flash_conn *fnode_conn);
168 int (*logout_flashnode_sid) (struct iscsi_cls_session *cls_sess); 168 int (*logout_flashnode_sid) (struct iscsi_cls_session *cls_sess);
169 int (*get_host_stats) (struct Scsi_Host *shost, char *buf, int len);
169}; 170};
170 171
171/* 172/*
@@ -478,4 +479,7 @@ iscsi_find_flashnode_sess(struct Scsi_Host *shost, void *data,
478extern struct device * 479extern struct device *
479iscsi_find_flashnode_conn(struct iscsi_bus_flash_session *fnode_sess); 480iscsi_find_flashnode_conn(struct iscsi_bus_flash_session *fnode_sess);
480 481
482extern char *
483iscsi_get_ipaddress_state_name(enum iscsi_ipaddress_state port_state);
484extern char *iscsi_get_router_state_name(enum iscsi_router_state router_state);
481#endif 485#endif