cregit-Linux how code gets into the kernel

Release 4.11 drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.h

/*
 * aQuantia Corporation Network Driver
 * Copyright (C) 2014-2017 aQuantia Corporation. All rights reserved
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 */

/* File hw_atl_utils.h: Declaration of common functions for Atlantic hardware
 * abstraction layer.
 */

#ifndef HW_ATL_UTILS_H

#define HW_ATL_UTILS_H

#include "../aq_common.h"


#define HW_ATL_FLUSH() { (void)aq_hw_read_reg(self, 0x10); }


struct __packed hw_atl_stats_s {
	
u32 uprc;
	
u32 mprc;
	
u32 bprc;
	
u32 erpt;
	
u32 uptc;
	
u32 mptc;
	
u32 bptc;
	
u32 erpr;
	
u32 mbtc;
	
u32 bbtc;
	
u32 mbrc;
	
u32 bbrc;
	
u32 ubrc;
	
u32 ubtc;
	
u32 dpc;
};


union __packed ip_addr {
	struct {
		
u8 addr[16];
	} 
v6;
	struct {
		
u8 padding[12];
		
u8 addr[4];
	} 
v4;
};


struct __packed hw_aq_atl_utils_fw_rpc {
	
u32 msg_id;

	union {
		struct {
			
u32 pong;
		} 
msg_ping;

		struct {
			
u8 mac_addr[6];
			
u32 ip_addr_cnt;

			struct {
				
union ip_addr addr;
				
union ip_addr mask;
			} 
ip[1];
		} 
msg_arp;

		struct {
			
u32 len;
			
u8 packet[1514U];
		} 
msg_inject;

		struct {
			
u32 priority;
			
u32 wol_packet_type;
			
u16 friendly_name_len;
			
u16 friendly_name[65];
			
u32 pattern_id;
			
u32 next_wol_pattern_offset;

			union {
				struct {
					
u32 flags;
					
u8 ipv4_source_address[4];
					
u8 ipv4_dest_address[4];
					
u16 tcp_source_port_number;
					
u16 tcp_dest_port_number;
				} 
ipv4_tcp_syn_parameters;

				struct {
					
u32 flags;
					
u8 ipv6_source_address[16];
					
u8 ipv6_dest_address[16];
					
u16 tcp_source_port_number;
					
u16 tcp_dest_port_number;
				} 
ipv6_tcp_syn_parameters;

				struct {
					
u32 flags;
				} 
eapol_request_id_message_parameters;

				struct {
					
u32 flags;
					
u32 mask_offset;
					
u32 mask_size;
					
u32 pattern_offset;
					
u32 pattern_size;
				} 
wol_bit_map_pattern;
			} 
wol_pattern;
		} 
msg_wol;

		struct {
			
u32 is_wake_on_link_down;
			
u32 is_wake_on_link_up;
		} 
msg_wolink;
	};
};


struct __packed hw_aq_atl_utils_mbox {
	
u32 version;
	
u32 transaction_id;
	
int error;
	
struct hw_atl_stats_s stats;
};


struct __packed hw_atl_s {
	
struct aq_hw_s base;
	
struct hw_aq_atl_utils_mbox mbox;
	
u64 speed;
	
u32 itr_tx;
	
u32 itr_rx;
	
unsigned int chip_features;
	
u32 fw_ver_actual;
	
atomic_t dpc;
	
u32 mbox_addr;
	
u32 rpc_addr;
	
u32 rpc_tid;
	
struct hw_aq_atl_utils_fw_rpc rpc;
};


#define SELF ((struct hw_atl_s *)self)


#define PHAL_ATLANTIC ((struct hw_atl_s *)((void *)(self)))

#define PHAL_ATLANTIC_A0 ((struct hw_atl_s *)((void *)(self)))

#define PHAL_ATLANTIC_B0 ((struct hw_atl_s *)((void *)(self)))


#define HAL_ATLANTIC_UTILS_CHIP_MIPS         0x00000001U

#define HAL_ATLANTIC_UTILS_CHIP_TPO2         0x00000002U

#define HAL_ATLANTIC_UTILS_CHIP_RPF2         0x00000004U

#define HAL_ATLANTIC_UTILS_CHIP_MPI_AQ       0x00000010U

#define HAL_ATLANTIC_UTILS_CHIP_REVISION_A0  0x01000000U

#define HAL_ATLANTIC_UTILS_CHIP_REVISION_B0  0x02000000U


#define IS_CHIP_FEATURE(_F_) (HAL_ATLANTIC_UTILS_CHIP_##_F_ & \
                                PHAL_ATLANTIC->chip_features)


enum hal_atl_utils_fw_state_e {
	
MPI_DEINIT = 0,
	
MPI_RESET = 1,
	
MPI_INIT = 2,
	
MPI_POWER = 4,
};


#define HAL_ATLANTIC_RATE_10G        BIT(0)

#define HAL_ATLANTIC_RATE_5G         BIT(1)

#define HAL_ATLANTIC_RATE_5GSR       BIT(2)

#define HAL_ATLANTIC_RATE_2GS        BIT(3)

#define HAL_ATLANTIC_RATE_1G         BIT(4)

#define HAL_ATLANTIC_RATE_100M       BIT(5)

#define HAL_ATLANTIC_RATE_INVALID    BIT(6)

void hw_atl_utils_hw_chip_features_init(struct aq_hw_s *self, u32 *p);

void hw_atl_utils_mpi_read_stats(struct aq_hw_s *self,
				 struct hw_aq_atl_utils_mbox *pmbox);

void hw_atl_utils_mpi_set(struct aq_hw_s *self,
			  enum hal_atl_utils_fw_state_e state,
			  u32 speed);

int hw_atl_utils_mpi_set_speed(struct aq_hw_s *self, u32 speed,
			       enum hal_atl_utils_fw_state_e state);

int hw_atl_utils_mpi_get_link_status(struct aq_hw_s *self,
				     struct aq_hw_link_status_s *link_status);

int hw_atl_utils_get_mac_permanent(struct aq_hw_s *self,
				   struct aq_hw_caps_s *aq_hw_caps,
				   u8 *mac);

unsigned int hw_atl_utils_mbps_2_speed_index(unsigned int mbps);

int hw_atl_utils_hw_get_regs(struct aq_hw_s *self,
			     struct aq_hw_caps_s *aq_hw_caps,
			     u32 *regs_buff);

int hw_atl_utils_hw_get_settings(struct aq_hw_s *self,
				 struct ethtool_cmd *cmd);

int hw_atl_utils_hw_set_power(struct aq_hw_s *self,
			      unsigned int power_state);

int hw_atl_utils_hw_deinit(struct aq_hw_s *self);

int hw_atl_utils_get_fw_version(struct aq_hw_s *self, u32 *fw_version);

int hw_atl_utils_get_hw_stats(struct aq_hw_s *self,
			      u64 *data,
			      unsigned int *p_count);

#endif /* HW_ATL_UTILS_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
David VomLehn636100.00%1100.00%
Total636100.00%1100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.