Commit 078252e0 authored by David S. Miller's avatar David S. Miller

Merge branch 'be2net-next'

Sathya Perla says:

====================
be2net: patch set

Patch 1 is a minor optimization for issuing multicast promisc FW cmd
only when the interface is not already in that mode.

Patch 2 provides support for VF TX-rate setting on Skyhawk-R.

Patch 3 provides support for flashing new FW flash regions.

Patches 4, 5, 6 cleanup the MCC processing (for FW cmds) code in be_cmds.c.
The MCC error reporting and event handling code are areas that needed
cleanup.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 4d1cdf1d 3acf19d9
...@@ -374,6 +374,7 @@ enum vf_state { ...@@ -374,6 +374,7 @@ enum vf_state {
#define BE_FLAGS_LINK_STATUS_INIT 1 #define BE_FLAGS_LINK_STATUS_INIT 1
#define BE_FLAGS_WORKER_SCHEDULED (1 << 3) #define BE_FLAGS_WORKER_SCHEDULED (1 << 3)
#define BE_FLAGS_VLAN_PROMISC (1 << 4) #define BE_FLAGS_VLAN_PROMISC (1 << 4)
#define BE_FLAGS_MCAST_PROMISC (1 << 5)
#define BE_FLAGS_NAPI_ENABLED (1 << 9) #define BE_FLAGS_NAPI_ENABLED (1 << 9)
#define BE_FLAGS_QNQ_ASYNC_EVT_RCVD (1 << 11) #define BE_FLAGS_QNQ_ASYNC_EVT_RCVD (1 << 11)
#define BE_FLAGS_VXLAN_OFFLOADS (1 << 12) #define BE_FLAGS_VXLAN_OFFLOADS (1 << 12)
......
This diff is collapsed.
...@@ -50,7 +50,7 @@ struct be_mcc_wrb { ...@@ -50,7 +50,7 @@ struct be_mcc_wrb {
#define CQE_FLAGS_CONSUMED_MASK (1 << 27) #define CQE_FLAGS_CONSUMED_MASK (1 << 27)
/* Completion Status */ /* Completion Status */
enum { enum mcc_base_status {
MCC_STATUS_SUCCESS = 0, MCC_STATUS_SUCCESS = 0,
MCC_STATUS_FAILED = 1, MCC_STATUS_FAILED = 1,
MCC_STATUS_ILLEGAL_REQUEST = 2, MCC_STATUS_ILLEGAL_REQUEST = 2,
...@@ -60,12 +60,25 @@ enum { ...@@ -60,12 +60,25 @@ enum {
MCC_STATUS_NOT_SUPPORTED = 66 MCC_STATUS_NOT_SUPPORTED = 66
}; };
#define MCC_ADDL_STS_INSUFFICIENT_RESOURCES 0x16 /* Additional status */
enum mcc_addl_status {
MCC_ADDL_STATUS_INSUFFICIENT_RESOURCES = 0x16,
MCC_ADDL_STATUS_FLASH_IMAGE_CRC_MISMATCH = 0x4d,
MCC_ADDL_STATUS_TOO_MANY_INTERFACES = 0x4a
};
#define CQE_BASE_STATUS_MASK 0xFFFF
#define CQE_BASE_STATUS_SHIFT 0 /* bits 0 - 15 */
#define CQE_ADDL_STATUS_MASK 0xFF
#define CQE_ADDL_STATUS_SHIFT 16 /* bits 16 - 31 */
#define CQE_STATUS_COMPL_MASK 0xFFFF #define base_status(status) \
#define CQE_STATUS_COMPL_SHIFT 0 /* bits 0 - 15 */ ((enum mcc_base_status) \
#define CQE_STATUS_EXTD_MASK 0xFFFF (status > 0 ? (status & CQE_BASE_STATUS_MASK) : 0))
#define CQE_STATUS_EXTD_SHIFT 16 /* bits 16 - 31 */ #define addl_status(status) \
((enum mcc_addl_status) \
(status > 0 ? (status >> CQE_ADDL_STATUS_SHIFT) & \
CQE_ADDL_STATUS_MASK : 0))
struct be_mcc_compl { struct be_mcc_compl {
u32 status; /* dword 0 */ u32 status; /* dword 0 */
...@@ -74,13 +87,13 @@ struct be_mcc_compl { ...@@ -74,13 +87,13 @@ struct be_mcc_compl {
u32 flags; /* dword 3 */ u32 flags; /* dword 3 */
}; };
/* When the async bit of mcc_compl is set, the last 4 bytes of /* When the async bit of mcc_compl flags is set, flags
* mcc_compl is interpreted as follows: * is interpreted as follows:
*/ */
#define ASYNC_TRAILER_EVENT_CODE_SHIFT 8 /* bits 8 - 15 */ #define ASYNC_EVENT_CODE_SHIFT 8 /* bits 8 - 15 */
#define ASYNC_TRAILER_EVENT_CODE_MASK 0xFF #define ASYNC_EVENT_CODE_MASK 0xFF
#define ASYNC_TRAILER_EVENT_TYPE_SHIFT 16 #define ASYNC_EVENT_TYPE_SHIFT 16
#define ASYNC_TRAILER_EVENT_TYPE_MASK 0xFF #define ASYNC_EVENT_TYPE_MASK 0xFF
#define ASYNC_EVENT_CODE_LINK_STATE 0x1 #define ASYNC_EVENT_CODE_LINK_STATE 0x1
#define ASYNC_EVENT_CODE_GRP_5 0x5 #define ASYNC_EVENT_CODE_GRP_5 0x5
#define ASYNC_EVENT_QOS_SPEED 0x1 #define ASYNC_EVENT_QOS_SPEED 0x1
...@@ -89,10 +102,6 @@ struct be_mcc_compl { ...@@ -89,10 +102,6 @@ struct be_mcc_compl {
#define ASYNC_EVENT_CODE_QNQ 0x6 #define ASYNC_EVENT_CODE_QNQ 0x6
#define ASYNC_DEBUG_EVENT_TYPE_QNQ 1 #define ASYNC_DEBUG_EVENT_TYPE_QNQ 1
struct be_async_event_trailer {
u32 code;
};
enum { enum {
LINK_DOWN = 0x0, LINK_DOWN = 0x0,
LINK_UP = 0x1 LINK_UP = 0x1
...@@ -100,7 +109,7 @@ enum { ...@@ -100,7 +109,7 @@ enum {
#define LINK_STATUS_MASK 0x1 #define LINK_STATUS_MASK 0x1
#define LOGICAL_LINK_STATUS_MASK 0x2 #define LOGICAL_LINK_STATUS_MASK 0x2
/* When the event code of an async trailer is link-state, the mcc_compl /* When the event code of compl->flags is link-state, the mcc_compl
* must be interpreted as follows * must be interpreted as follows
*/ */
struct be_async_event_link_state { struct be_async_event_link_state {
...@@ -110,10 +119,10 @@ struct be_async_event_link_state { ...@@ -110,10 +119,10 @@ struct be_async_event_link_state {
u8 port_speed; u8 port_speed;
u8 port_fault; u8 port_fault;
u8 rsvd0[7]; u8 rsvd0[7];
struct be_async_event_trailer trailer; u32 flags;
} __packed; } __packed;
/* When the event code of an async trailer is GRP-5 and event_type is QOS_SPEED /* When the event code of compl->flags is GRP-5 and event_type is QOS_SPEED
* the mcc_compl must be interpreted as follows * the mcc_compl must be interpreted as follows
*/ */
struct be_async_event_grp5_qos_link_speed { struct be_async_event_grp5_qos_link_speed {
...@@ -121,10 +130,10 @@ struct be_async_event_grp5_qos_link_speed { ...@@ -121,10 +130,10 @@ struct be_async_event_grp5_qos_link_speed {
u8 rsvd[5]; u8 rsvd[5];
u16 qos_link_speed; u16 qos_link_speed;
u32 event_tag; u32 event_tag;
struct be_async_event_trailer trailer; u32 flags;
} __packed; } __packed;
/* When the event code of an async trailer is GRP5 and event type is /* When the event code of compl->flags is GRP5 and event type is
* CoS-Priority, the mcc_compl must be interpreted as follows * CoS-Priority, the mcc_compl must be interpreted as follows
*/ */
struct be_async_event_grp5_cos_priority { struct be_async_event_grp5_cos_priority {
...@@ -134,10 +143,10 @@ struct be_async_event_grp5_cos_priority { ...@@ -134,10 +143,10 @@ struct be_async_event_grp5_cos_priority {
u8 valid; u8 valid;
u8 rsvd0; u8 rsvd0;
u8 event_tag; u8 event_tag;
struct be_async_event_trailer trailer; u32 flags;
} __packed; } __packed;
/* When the event code of an async trailer is GRP5 and event type is /* When the event code of compl->flags is GRP5 and event type is
* PVID state, the mcc_compl must be interpreted as follows * PVID state, the mcc_compl must be interpreted as follows
*/ */
struct be_async_event_grp5_pvid_state { struct be_async_event_grp5_pvid_state {
...@@ -146,7 +155,7 @@ struct be_async_event_grp5_pvid_state { ...@@ -146,7 +155,7 @@ struct be_async_event_grp5_pvid_state {
u16 tag; u16 tag;
u32 event_tag; u32 event_tag;
u32 rsvd1; u32 rsvd1;
struct be_async_event_trailer trailer; u32 flags;
} __packed; } __packed;
/* async event indicating outer VLAN tag in QnQ */ /* async event indicating outer VLAN tag in QnQ */
...@@ -156,7 +165,7 @@ struct be_async_event_qnq { ...@@ -156,7 +165,7 @@ struct be_async_event_qnq {
u16 vlan_tag; u16 vlan_tag;
u32 event_tag; u32 event_tag;
u8 rsvd1[4]; u8 rsvd1[4];
struct be_async_event_trailer trailer; u32 flags;
} __packed; } __packed;
struct be_mcc_mailbox { struct be_mcc_mailbox {
...@@ -258,8 +267,8 @@ struct be_cmd_resp_hdr { ...@@ -258,8 +267,8 @@ struct be_cmd_resp_hdr {
u8 opcode; /* dword 0 */ u8 opcode; /* dword 0 */
u8 subsystem; /* dword 0 */ u8 subsystem; /* dword 0 */
u8 rsvd[2]; /* dword 0 */ u8 rsvd[2]; /* dword 0 */
u8 status; /* dword 1 */ u8 base_status; /* dword 1 */
u8 add_status; /* dword 1 */ u8 addl_status; /* dword 1 */
u8 rsvd1[2]; /* dword 1 */ u8 rsvd1[2]; /* dword 1 */
u32 response_length; /* dword 2 */ u32 response_length; /* dword 2 */
u32 actual_resp_len; /* dword 3 */ u32 actual_resp_len; /* dword 3 */
...@@ -1186,7 +1195,8 @@ struct be_cmd_read_flash_crc { ...@@ -1186,7 +1195,8 @@ struct be_cmd_read_flash_crc {
struct flashrom_params params; struct flashrom_params params;
u8 crc[4]; u8 crc[4];
u8 rsvd[4]; u8 rsvd[4];
}; } __packed;
/**************** Lancer Firmware Flash ************/ /**************** Lancer Firmware Flash ************/
struct amap_lancer_write_obj_context { struct amap_lancer_write_obj_context {
u8 write_length[24]; u8 write_length[24];
...@@ -1891,16 +1901,20 @@ struct be_nic_res_desc { ...@@ -1891,16 +1901,20 @@ struct be_nic_res_desc {
u16 cq_count; u16 cq_count;
u16 toe_conn_count; u16 toe_conn_count;
u16 eq_count; u16 eq_count;
u32 rsvd5; u16 vlan_id;
u16 iface_count;
u32 cap_flags; u32 cap_flags;
u8 link_param; u8 link_param;
u8 rsvd6[3]; u8 rsvd6;
u16 channel_id_param;
u32 bw_min; u32 bw_min;
u32 bw_max; u32 bw_max;
u8 acpi_params; u8 acpi_params;
u8 wol_param; u8 wol_param;
u16 rsvd7; u16 rsvd7;
u32 rsvd8[7]; u16 tunnel_iface_count;
u16 direct_tenant_iface_count;
u32 rsvd8[6];
} __packed; } __packed;
/************ Multi-Channel type ***********/ /************ Multi-Channel type ***********/
...@@ -2084,7 +2098,7 @@ int lancer_cmd_read_object(struct be_adapter *adapter, struct be_dma_mem *cmd, ...@@ -2084,7 +2098,7 @@ int lancer_cmd_read_object(struct be_adapter *adapter, struct be_dma_mem *cmd,
u32 data_size, u32 data_offset, const char *obj_name, u32 data_size, u32 data_offset, const char *obj_name,
u32 *data_read, u32 *eof, u8 *addn_status); u32 *data_read, u32 *eof, u8 *addn_status);
int be_cmd_get_flash_crc(struct be_adapter *adapter, u8 *flashed_crc, int be_cmd_get_flash_crc(struct be_adapter *adapter, u8 *flashed_crc,
int offset); u16 optype, int offset);
int be_cmd_enable_magic_wol(struct be_adapter *adapter, u8 *mac, int be_cmd_enable_magic_wol(struct be_adapter *adapter, u8 *mac,
struct be_dma_mem *nonemb_cmd); struct be_dma_mem *nonemb_cmd);
int be_cmd_fw_init(struct be_adapter *adapter); int be_cmd_fw_init(struct be_adapter *adapter);
...@@ -2101,7 +2115,8 @@ int be_cmd_get_seeprom_data(struct be_adapter *adapter, ...@@ -2101,7 +2115,8 @@ int be_cmd_get_seeprom_data(struct be_adapter *adapter,
int be_cmd_set_loopback(struct be_adapter *adapter, u8 port_num, int be_cmd_set_loopback(struct be_adapter *adapter, u8 port_num,
u8 loopback_type, u8 enable); u8 loopback_type, u8 enable);
int be_cmd_get_phy_info(struct be_adapter *adapter); int be_cmd_get_phy_info(struct be_adapter *adapter);
int be_cmd_config_qos(struct be_adapter *adapter, u32 bps, u8 domain); int be_cmd_config_qos(struct be_adapter *adapter, u32 max_rate,
u16 link_speed, u8 domain);
void be_detect_error(struct be_adapter *adapter); void be_detect_error(struct be_adapter *adapter);
int be_cmd_get_die_temperature(struct be_adapter *adapter); int be_cmd_get_die_temperature(struct be_adapter *adapter);
int be_cmd_get_cntl_attributes(struct be_adapter *adapter); int be_cmd_get_cntl_attributes(struct be_adapter *adapter);
......
...@@ -188,10 +188,14 @@ ...@@ -188,10 +188,14 @@
#define OPTYPE_FCOE_FW_ACTIVE 10 #define OPTYPE_FCOE_FW_ACTIVE 10
#define OPTYPE_FCOE_FW_BACKUP 11 #define OPTYPE_FCOE_FW_BACKUP 11
#define OPTYPE_NCSI_FW 13 #define OPTYPE_NCSI_FW 13
#define OPTYPE_REDBOOT_DIR 18
#define OPTYPE_REDBOOT_CONFIG 19
#define OPTYPE_SH_PHY_FW 21
#define OPTYPE_FLASHISM_JUMPVECTOR 22
#define OPTYPE_UFI_DIR 23
#define OPTYPE_PHY_FW 99 #define OPTYPE_PHY_FW 99
#define TN_8022 13 #define TN_8022 13
#define ILLEGAL_IOCTL_REQ 2
#define FLASHROM_OPER_PHY_FLASH 9 #define FLASHROM_OPER_PHY_FLASH 9
#define FLASHROM_OPER_PHY_SAVE 10 #define FLASHROM_OPER_PHY_SAVE 10
#define FLASHROM_OPER_FLASH 1 #define FLASHROM_OPER_FLASH 1
...@@ -250,6 +254,9 @@ ...@@ -250,6 +254,9 @@
#define IMAGE_FIRMWARE_BACKUP_FCoE 178 #define IMAGE_FIRMWARE_BACKUP_FCoE 178
#define IMAGE_FIRMWARE_BACKUP_COMP_FCoE 179 #define IMAGE_FIRMWARE_BACKUP_COMP_FCoE 179
#define IMAGE_FIRMWARE_PHY 192 #define IMAGE_FIRMWARE_PHY 192
#define IMAGE_REDBOOT_DIR 208
#define IMAGE_REDBOOT_CONFIG 209
#define IMAGE_UFI_DIR 210
#define IMAGE_BOOT_CODE 224 #define IMAGE_BOOT_CODE 224
/************* Rx Packet Type Encoding **************/ /************* Rx Packet Type Encoding **************/
...@@ -534,7 +541,8 @@ struct flash_section_entry { ...@@ -534,7 +541,8 @@ struct flash_section_entry {
u32 image_size; u32 image_size;
u32 cksum; u32 cksum;
u32 entry_point; u32 entry_point;
u32 rsvd0; u16 optype;
u16 rsvd0;
u32 rsvd1; u32 rsvd1;
u8 ver_data[32]; u8 ver_data[32];
} __packed; } __packed;
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment